Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.4:Update
openssh.18131
openssh-fips-ensure-approved-moduli.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File openssh-fips-ensure-approved-moduli.patch of Package openssh.18131
commit 57c5454722a1dcaaa2d49090f471b70feb25d5bf Author: Hans Petter Jansson <hpj@hpjansson.org> Date: Mon Oct 26 21:46:49 2020 +0100 Ensure DHGs are approved in FIPS mode using OpenSSL's DH_check_params() diff --git a/dh.c b/dh.c index 8dd563a..d983a0d 100644 --- a/dh.c +++ b/dh.c @@ -142,6 +142,28 @@ parse_prime(int linenum, char *line, struct dhgroup *dhg) return 0; } +static int +dhg_is_approved(const struct dhgroup *dhg) +{ + BIGNUM *g, *p; + DH *dh; + int dh_status; + int is_ok = 0; + + /* DH_set0_pqg() transfers ownership of the bignums, so we + * make temporary copies here for simplicity. */ + g = BN_dup(dhg->g); + p = BN_dup(dhg->p); + dh = dh_new_group(g, p); + + if (dh) { + is_ok = DH_check_params(dh, &dh_status); + } + + DH_free(dh); + return is_ok; +} + DH * choose_dh(int min, int wantbits, int max) { @@ -160,12 +182,20 @@ choose_dh(int min, int wantbits, int max) linenum = 0; best = bestcount = 0; while (fgets(line, sizeof(line), f)) { + int dhg_is_ok; + linenum++; if (!parse_prime(linenum, line, &dhg)) continue; + + dhg_is_ok = dhg_is_approved(&dhg); + BN_clear_free(dhg.g); BN_clear_free(dhg.p); + if (!dhg_is_ok) + continue; + if (dhg.size > max || dhg.size < min) continue; @@ -188,9 +218,15 @@ choose_dh(int min, int wantbits, int max) linenum = 0; which = arc4random_uniform(bestcount); while (fgets(line, sizeof(line), f)) { + int dhg_is_ok; + if (!parse_prime(linenum, line, &dhg)) continue; - if ((dhg.size > max || dhg.size < min) || + + dhg_is_ok = dhg_is_approved(&dhg); + + if (!dhg_is_ok || + (dhg.size > max || dhg.size < min) || dhg.size != best || linenum++ != which) { BN_clear_free(dhg.g);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor