Skip to content

Commit 06dc40d

Browse files
Merge pull request #731 from ejohnstown/dh-group14-sha256
DH Group 14 with SHA256
2 parents 4af1312 + 9302c73 commit 06dc40d

2 files changed

Lines changed: 45 additions & 5 deletions

File tree

src/internal.c

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@
9292
WOLFSSH_NO_DH_GROUP14_SHA1
9393
Set when DH or SHA1 are disabled. Set to disable use of DH (Oakley 14) and
9494
SHA1 support.
95+
WOLFSSH_NO_DH_GROUP14_SHA256
96+
Set when DH or SHA256 are disabled. Set to disable use of DH (Oakley 14)
97+
and SHA256 support.
9598
WOLFSSH_NO_DH_GEX_SHA256
9699
Set when DH or SHA2-256 are disabled. Set to disable use of DH group
97100
exchange and SHA2-256 support.
@@ -674,6 +677,9 @@ static const char cannedKexAlgoNames[] =
674677
#if !defined(WOLFSSH_NO_ECDH_SHA2_NISTP256)
675678
"ecdh-sha2-nistp256,"
676679
#endif
680+
#if !defined(WOLFSSH_NO_DH_GROUP14_SHA256)
681+
"diffie-hellman-group14-sha256,"
682+
#endif
677683
#if !defined(WOLFSSH_NO_DH_GEX_SHA256)
678684
"diffie-hellman-group-exchange-sha256,"
679685
#endif
@@ -2397,6 +2403,9 @@ static const NameIdPair NameIdMap[] = {
23972403
#ifndef WOLFSSH_NO_DH_GROUP14_SHA1
23982404
{ ID_DH_GROUP14_SHA1, TYPE_KEX, "diffie-hellman-group14-sha1" },
23992405
#endif
2406+
#ifndef WOLFSSH_NO_DH_GROUP14_SHA256
2407+
{ ID_DH_GROUP14_SHA256, TYPE_KEX, "diffie-hellman-group14-sha256" },
2408+
#endif
24002409
#ifndef WOLFSSH_NO_DH_GEX_SHA256
24012410
{ ID_DH_GEX_SHA256, TYPE_KEX, "diffie-hellman-group-exchange-sha256" },
24022411
#endif
@@ -2409,9 +2418,6 @@ static const NameIdPair NameIdMap[] = {
24092418
#ifndef WOLFSSH_NO_ECDH_SHA2_NISTP521
24102419
{ ID_ECDH_SHA2_NISTP521, TYPE_KEX, "ecdh-sha2-nistp521" },
24112420
#endif
2412-
#ifndef WOLFSSH_NO_DH_GEX_SHA256
2413-
{ ID_DH_GROUP14_SHA256, TYPE_KEX, "diffie-hellman-group14-sha256" },
2414-
#endif
24152421
#ifndef WOLFSSH_NO_ECDH_NISTP256_KYBER_LEVEL1_SHA256
24162422
/* We use kyber-512 here to achieve interop with OQS's fork. */
24172423
{ ID_ECDH_NISTP256_KYBER_LEVEL1_SHA256, TYPE_KEX,
@@ -3632,6 +3638,10 @@ INLINE enum wc_HashType HashForId(byte id)
36323638
#endif
36333639

36343640
/* SHA2-256 */
3641+
#ifndef WOLFSSH_NO_DH_GROUP14_SHA256
3642+
case ID_DH_GROUP14_SHA256:
3643+
return WC_HASH_TYPE_SHA256;
3644+
#endif
36353645
#ifndef WOLFSSH_NO_DH_GEX_SHA256
36363646
case ID_DH_GEX_SHA256:
36373647
return WC_HASH_TYPE_SHA256;
@@ -4239,6 +4249,7 @@ static const word32 dhPrimeGroup1Sz = (word32)sizeof(dhPrimeGroup1);
42394249
#endif
42404250

42414251
#if !defined(WOLFSSH_NO_DH_GROUP14_SHA1) || \
4252+
!defined(WOLFSSH_NO_DH_GROUP14_SHA256) || \
42424253
!defined(WOLFSSH_NO_DH_GEX_SHA256)
42434254
static const byte dhPrimeGroup14[] = {
42444255
/* SSH DH Group 14 (Oakley Group 14, 2048-bit MODP Group, RFC 3526) */
@@ -10093,6 +10104,14 @@ static int GetDHPrimeGroup(int kexId, const byte** primeGroup,
1009310104
*generatorSz = dhGeneratorSz;
1009410105
break;
1009510106
#endif
10107+
#ifndef WOLFSSH_NO_DH_GROUP14_SHA256
10108+
case ID_DH_GROUP14_SHA256:
10109+
*primeGroup = dhPrimeGroup14;
10110+
*primeGroupSz = dhPrimeGroup14Sz;
10111+
*generator = dhGenerator;
10112+
*generatorSz = dhGeneratorSz;
10113+
break;
10114+
#endif
1009610115
#ifndef WOLFSSH_NO_DH_GEX_SHA256
1009710116
case ID_DH_GEX_SHA256:
1009810117
*primeGroup = dhPrimeGroup14;
@@ -10121,7 +10140,7 @@ static int SendKexGetSigningKey(WOLFSSH* ssh,
1012110140
void* heap;
1012210141
byte scratchLen[LENGTH_SZ];
1012310142
word32 scratch = 0;
10124-
#ifndef WOLFSSH_NO_DH
10143+
#ifndef WOLFSSH_NO_DH_GEX_SHA256
1012510144
const byte* primeGroup = NULL;
1012610145
word32 primeGroupSz = 0;
1012710146
const byte* generator = NULL;
@@ -11363,6 +11382,12 @@ int SendKexDhReply(WOLFSSH* ssh)
1136311382
msgId = MSGID_KEXDH_REPLY;
1136411383
break;
1136511384
#endif
11385+
#ifndef WOLFSSH_NO_DH_GROUP14_SHA256
11386+
case ID_DH_GROUP14_SHA256:
11387+
useDh = 1;
11388+
msgId = MSGID_KEXDH_REPLY;
11389+
break;
11390+
#endif
1136611391
#ifndef WOLFSSH_NO_DH_GEX_SHA256
1136711392
case ID_DH_GEX_SHA256:
1136811393
useDh = 1;
@@ -11923,6 +11948,15 @@ int SendKexDhInit(WOLFSSH* ssh)
1192311948
generatorSz = dhGeneratorSz;
1192411949
break;
1192511950
#endif
11951+
#ifndef WOLFSSH_NO_DH_GROUP14_SHA256
11952+
case ID_DH_GROUP14_SHA256:
11953+
ssh->handshake->useDh = 1;
11954+
primeGroup = dhPrimeGroup14;
11955+
primeGroupSz = dhPrimeGroup14Sz;
11956+
generator = dhGenerator;
11957+
generatorSz = dhGeneratorSz;
11958+
break;
11959+
#endif
1192611960
#ifndef WOLFSSH_NO_DH_GEX_SHA256
1192711961
case ID_DH_GEX_SHA256:
1192811962
ssh->handshake->useDh = 1;

wolfssh/internal.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ extern "C" {
140140
#undef WOLFSSH_NO_DH_GROUP14_SHA1
141141
#define WOLFSSH_NO_DH_GROUP14_SHA1
142142
#endif
143+
#if defined(WOLFSSH_NO_DH) || defined(WOLFSSH_NO_SHA256)
144+
#undef WOLFSSH_NO_DH_GROUP14_SHA256
145+
#define WOLFSSH_NO_DH_GROUP14_SHA256
146+
#endif
143147
#if defined(WOLFSSH_NO_DH) || defined(NO_SHA256)
144148
#undef WOLFSSH_NO_DH_GEX_SHA256
145149
#define WOLFSSH_NO_DH_GEX_SHA256
@@ -171,6 +175,7 @@ extern "C" {
171175

172176
#if defined(WOLFSSH_NO_DH_GROUP1_SHA1) && \
173177
defined(WOLFSSH_NO_DH_GROUP14_SHA1) && \
178+
defined(WOLFSSH_NO_DH_GROUP14_SHA256) && \
174179
defined(WOLFSSH_NO_DH_GEX_SHA256) && \
175180
defined(WOLFSSH_NO_ECDH_SHA2_NISTP256) && \
176181
defined(WOLFSSH_NO_ECDH_SHA2_NISTP384) && \
@@ -182,6 +187,7 @@ extern "C" {
182187

183188
#if defined(WOLFSSH_NO_DH_GROUP1_SHA1) && \
184189
defined(WOLFSSH_NO_DH_GROUP14_SHA1) && \
190+
defined(WOLFSSH_NO_DH_GROUP14_SHA256) && \
185191
defined(WOLFSSH_NO_DH_GEX_SHA256)
186192
#undef WOLFSSH_NO_DH
187193
#define WOLFSSH_NO_DH
@@ -307,13 +313,13 @@ enum {
307313
/* Key Exchange IDs */
308314
ID_DH_GROUP1_SHA1,
309315
ID_DH_GROUP14_SHA1,
316+
ID_DH_GROUP14_SHA256,
310317
ID_DH_GEX_SHA256,
311318
ID_ECDH_SHA2_NISTP256,
312319
ID_ECDH_SHA2_NISTP384,
313320
ID_ECDH_SHA2_NISTP521,
314321
ID_ECDH_SHA2_ED25519,
315322
ID_ECDH_SHA2_ED25519_LIBSSH,
316-
ID_DH_GROUP14_SHA256,
317323
#ifndef WOLFSSH_NO_ECDH_NISTP256_KYBER_LEVEL1_SHA256
318324
ID_ECDH_NISTP256_KYBER_LEVEL1_SHA256,
319325
#endif

0 commit comments

Comments
 (0)