Modified along the revire comments

This commit is contained in:
TakayukiMatsuo
2021-06-11 21:08:27 +09:00
parent 779e3701e6
commit ed5cb0a1bd
4 changed files with 114 additions and 80 deletions

View File

@ -8073,13 +8073,16 @@ WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY(WOLFSSL_EVP_PKEY** out,
DhKey dh; DhKey dh;
word32 keyIdx = 0; word32 keyIdx = 0;
DhKey* key = NULL; DhKey* key = NULL;
int ret;
Element_Set elements;
/* test if DH-public key */ /* test if DH-public key */
if (wc_InitDhKey(&dh) != 0) if (wc_InitDhKey(&dh) != 0)
return NULL; return NULL;
if (wc_DhPublicKeyDecode(mem, &keyIdx, &dh, (word32)memSz) == 0) { ret = wc_DhPublicKeyDecode(mem, &keyIdx, &dh, (word32)memSz);
wc_FreeDhKey(&dh); wc_FreeDhKey(&dh);
if (ret == 0) {
pkey = wolfSSL_EVP_PKEY_new(); pkey = wolfSSL_EVP_PKEY_new();
if (pkey != NULL) { if (pkey != NULL) {
pkey->type = EVP_PKEY_DH; pkey->type = EVP_PKEY_DH;
@ -8106,6 +8109,12 @@ WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY(WOLFSSL_EVP_PKEY** out,
keyIdx = 0; keyIdx = 0;
if (wc_DhPublicKeyDecode(mem, &keyIdx, key, (word32)memSz) == 0) if (wc_DhPublicKeyDecode(mem, &keyIdx, key, (word32)memSz) == 0)
{ {
elements = ELEMENT_P | ELEMENT_G | ELEMENT_Q | ELEMENT_PUB;
if( SetDhExternal_ex(pkey->dh, elements)
== WOLFSSL_SUCCESS ){
return pkey;
}
/*
if (SetIndividualExternal(&(pkey->dh->p), &key->p) if (SetIndividualExternal(&(pkey->dh->p), &key->p)
== WOLFSSL_SUCCESS && == WOLFSSL_SUCCESS &&
SetIndividualExternal(&(pkey->dh->g), &key->g) SetIndividualExternal(&(pkey->dh->g), &key->g)
@ -8115,17 +8124,14 @@ WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY(WOLFSSL_EVP_PKEY** out,
SetIndividualExternal(&(pkey->dh->pub_key), &key->pub) SetIndividualExternal(&(pkey->dh->pub_key), &key->pub)
== WOLFSSL_SUCCESS) { == WOLFSSL_SUCCESS) {
return pkey; return pkey;
} } */
} }
else { else {
wolfSSL_EVP_PKEY_free(pkey); wolfSSL_EVP_PKEY_free(pkey);
return NULL; return NULL;
} }
} }
wolfSSL_EVP_PKEY_free(pkey);
} }
else
wc_FreeDhKey(&dh);
} }
#endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */ #endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */
#endif /* !NO_DH && OPENSSL_EXTRA && WOLFSSL_DH_EXTRA */ #endif /* !NO_DH && OPENSSL_EXTRA && WOLFSSL_DH_EXTRA */
@ -33354,7 +33360,7 @@ int SetDhInternal(WOLFSSL_DH* dh)
} }
#if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL) \ #if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL) \
|| defined(WOLFSSL_OPENSSH)) || defined(WOLFSSL_OPENSSH)) || defined(OPENSSL_EXTRA)
#ifdef WOLFSSL_DH_EXTRA #ifdef WOLFSSL_DH_EXTRA
WOLFSSL_DH* wolfSSL_DH_dup(WOLFSSL_DH* dh) WOLFSSL_DH* wolfSSL_DH_dup(WOLFSSL_DH* dh)
@ -33398,10 +33404,10 @@ WOLFSSL_DH* wolfSSL_DH_dup(WOLFSSL_DH* dh)
/* Set the members of DhKey into WOLFSSL_DH /* Set the members of DhKey into WOLFSSL_DH
* DhKey was populated from wc_DhKeyDecode * DhKey was populated from wc_DhKeyDecode
*/ */
int SetDhExternal(WOLFSSL_DH *dh) int SetDhExternal_ex(WOLFSSL_DH *dh, Element_Set elm)
{ {
DhKey *key; DhKey *key;
WOLFSSL_MSG("Entering SetDhExternal"); WOLFSSL_MSG("Entering SetDhExternal_ex");
if (dh == NULL || dh->internal == NULL) { if (dh == NULL || dh->internal == NULL) {
WOLFSSL_MSG("dh key NULL error"); WOLFSSL_MSG("dh key NULL error");
@ -33410,25 +33416,36 @@ int SetDhExternal(WOLFSSL_DH *dh)
key = (DhKey*)dh->internal; key = (DhKey*)dh->internal;
if (SetIndividualExternal(&dh->p, &key->p) != WOLFSSL_SUCCESS) { if( elm & ELEMENT_P) {
WOLFSSL_MSG("dh param p error"); if (SetIndividualExternal(&dh->p, &key->p) != WOLFSSL_SUCCESS) {
return WOLFSSL_FATAL_ERROR; WOLFSSL_MSG("dh param p error");
return WOLFSSL_FATAL_ERROR;
}
} }
if( elm & ELEMENT_Q) {
if (SetIndividualExternal(&dh->g, &key->g) != WOLFSSL_SUCCESS) { if (SetIndividualExternal(&dh->q, &key->q) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("dh param g error"); WOLFSSL_MSG("dh param q error");
return WOLFSSL_FATAL_ERROR; return WOLFSSL_FATAL_ERROR;
}
}
if( elm & ELEMENT_G) {
if (SetIndividualExternal(&dh->g, &key->g) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("dh param g error");
return WOLFSSL_FATAL_ERROR;
}
} }
#ifdef WOLFSSL_DH_EXTRA #ifdef WOLFSSL_DH_EXTRA
if (SetIndividualExternal(&dh->priv_key, &key->priv) != WOLFSSL_SUCCESS) { if( elm & ELEMENT_PRV) {
WOLFSSL_MSG("No DH Private Key"); if (SetIndividualExternal(&dh->priv_key, &key->priv) != WOLFSSL_SUCCESS) {
return WOLFSSL_FATAL_ERROR; WOLFSSL_MSG("No DH Private Key");
return WOLFSSL_FATAL_ERROR;
}
} }
if( elm & ELEMENT_PUB) {
if (SetIndividualExternal(&dh->pub_key, &key->pub) != WOLFSSL_SUCCESS) { if (SetIndividualExternal(&dh->pub_key, &key->pub) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("No DH Public Key"); WOLFSSL_MSG("No DH Public Key");
return WOLFSSL_FATAL_ERROR; return WOLFSSL_FATAL_ERROR;
}
} }
#endif /* WOLFSSL_DH_EXTRA */ #endif /* WOLFSSL_DH_EXTRA */
@ -33436,6 +33453,20 @@ int SetDhExternal(WOLFSSL_DH *dh)
return WOLFSSL_SUCCESS; return WOLFSSL_SUCCESS;
} }
/* Set the members of DhKey into WOLFSSL_DH
* DhKey was populated from wc_DhKeyDecode
*/
int SetDhExternal(WOLFSSL_DH *dh)
{
Element_Set elements = ELEMENT_P | ELEMENT_G;
WOLFSSL_MSG("Entering SetDhExternal");
#ifdef WOLFSSL_DH_EXTRA
elements |= ( ELEMENT_PUB | ELEMENT_PRV );
#endif /* WOLFSSL_DH_EXTRA */
return SetDhExternal_ex(dh, elements);
}
#endif /* !NO_DH && (WOLFSSL_QT || OPENSSL_ALL) */ #endif /* !NO_DH && (WOLFSSL_QT || OPENSSL_ALL) */
/* return code compliant with OpenSSL : /* return code compliant with OpenSSL :

View File

@ -2604,8 +2604,10 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
WOLFSSL_BIO* wbio = NULL; WOLFSSL_BIO* wbio = NULL;
WOLFSSL_EVP_PKEY* pkey = NULL; WOLFSSL_EVP_PKEY* pkey = NULL;
char line[256] = { 0 }; char line[256] = { 0 };
char line1[256] = { 0 };
int i; int i;
(void)line1;
printf(testingFmt, "EVP_PKEY_print_public()"); printf(testingFmt, "EVP_PKEY_print_public()");
/* test error cases */ /* test error cases */
AssertIntEQ( EVP_PKEY_print_public(NULL,NULL,0,NULL),0L); AssertIntEQ( EVP_PKEY_print_public(NULL,NULL,0,NULL),0L);
@ -2629,19 +2631,16 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,3,NULL),1); AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,3,NULL),1);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, " RSA Public-Key: (1024 bit)\n", strcpy(line1, " RSA Public-Key: (1024 bit)\n");
sizeof(" RSA Public-Key: (1024 bit)\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, " Modulus:\n", strcpy(line1, " Modulus:\n");
sizeof(" Modulus:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1, " 00:BC:73:0E:A8:49:F3:74:A2:A9:EF:18:A5:DA:55:\n");
" 00:BC:73:0E:A8:49:F3:74:A2:A9:EF:18:A5:DA:55:\n", AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
sizeof(" 00:BC:73:0E:A8:49:F3:74:A2:A9:EF:18:A5:DA:55:\n")),0);
/* skip to the end of modulus element*/ /* skip to the end of modulus element*/
@ -2650,8 +2649,8 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
} }
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, " Exponent: 65537 (0x010001)\n", strcpy(line1, " Exponent: 65537 (0x010001)\n");
sizeof(" Exponent: 65537 (0x010001)\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* should reach EOF */ /* should reach EOF */
@ -2683,17 +2682,17 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,0,NULL),1); AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,0,NULL),1);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "DSA Public-Key: (2048 bit)\n", strcpy(line1, "DSA Public-Key: (2048 bit)\n");
sizeof("DSA Public-Key: (2048 bit)\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "pub:\n", strcpy(line1, "pub:\n");
sizeof("pub:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1,
" 00:C2:35:2D:EC:83:83:6C:73:13:9E:52:7C:74:C8:\n", " 00:C2:35:2D:EC:83:83:6C:73:13:9E:52:7C:74:C8:\n");
sizeof(" 00:C2:35:2D:EC:83:83:6C:73:13:9E:52:7C:74:C8:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of pub element*/ /* skip to the end of pub element*/
for( i = 0; i < 17 ;i++) { for( i = 0; i < 17 ;i++) {
@ -2701,9 +2700,8 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
} }
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1, "P:\n");
"P:\n", AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
sizeof("P:\n")),0);
/* skip to the end of P element*/ /* skip to the end of P element*/
for( i = 0; i < 18 ;i++) { for( i = 0; i < 18 ;i++) {
@ -2711,18 +2709,16 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
} }
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1, "Q:\n");
"Q:\n", AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
sizeof("Q:\n")),0);
/* skip to the end of Q element*/ /* skip to the end of Q element*/
for( i = 0; i < 3 ;i++) { for( i = 0; i < 3 ;i++) {
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
} }
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1, "G:\n");
"G:\n", AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
sizeof("G:\n")),0);
/* skip to the end of G element*/ /* skip to the end of G element*/
for( i = 0; i < 18 ;i++) { for( i = 0; i < 18 ;i++) {
@ -2758,17 +2754,17 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,0,NULL),1); AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,0,NULL),1);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "Public-Key: (256 bit)\n", strcpy(line1, "Public-Key: (256 bit)\n");
sizeof("Public-Key: (256 bit)\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "pub:\n", strcpy(line1, "pub:\n");
sizeof("pub:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1,
" 04:55:BF:F4:0F:44:50:9A:3D:CE:9B:B7:F0:C5:4D:\n", " 04:55:BF:F4:0F:44:50:9A:3D:CE:9B:B7:F0:C5:4D:\n");
sizeof(" 04:55:BF:F4:0F:44:50:9A:3D:CE:9B:B7:F0:C5:4D:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of pub element*/ /* skip to the end of pub element*/
for( i = 0; i < 4 ;i++) { for( i = 0; i < 4 ;i++) {
@ -2776,12 +2772,12 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
} }
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "ASN1 OID: prime256v1\n", strcpy(line1, "ASN1 OID: prime256v1\n");
sizeof("ASN1 OID: prime256v1\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "NIST CURVE: P-256\n", strcpy(line1, "NIST CURVE: P-256\n");
sizeof("NIST CURVE: P-256")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* should reach EOF */ /* should reach EOF */
@ -2814,17 +2810,17 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,0,NULL),1); AssertIntEQ(EVP_PKEY_print_public(wbio, pkey,0,NULL),1);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "DH Public-Key: (2048 bit)\n", strcpy(line1, "DH Public-Key: (2048 bit)\n");
sizeof("DH Public-Key: (2048 bit)\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "public-key:\n", strcpy(line1, "public-key:\n");
sizeof("public-key:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1,
" 34:41:BF:E9:F2:11:BF:05:DB:B2:72:A8:29:CC:BD:\n", " 34:41:BF:E9:F2:11:BF:05:DB:B2:72:A8:29:CC:BD:\n");
sizeof(" 34:41:BF:E9:F2:11:BF:05:DB:B2:72:A8:29:CC:BD:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of public-key element*/ /* skip to the end of public-key element*/
for( i = 0; i < 17 ;i++) { for( i = 0; i < 17 ;i++) {
@ -2832,14 +2828,13 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
} }
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1, "prime:\n");
"prime:\n", AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
sizeof("prime:\n")),0);
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1,
" 00:D3:B2:99:84:5C:0A:4C:E7:37:CC:FC:18:37:01:\n", " 00:D3:B2:99:84:5C:0A:4C:E7:37:CC:FC:18:37:01:\n");
sizeof(" 00:D3:B2:99:84:5C:0A:4C:E7:37:CC:FC:18:37:01:\n")),0); AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of prime element*/ /* skip to the end of prime element*/
for( i = 0; i < 17 ;i++) { for( i = 0; i < 17 ;i++) {
@ -2847,9 +2842,8 @@ static void test_wolfSSL_EVP_PKEY_print_public(void)
} }
BIO_gets(wbio, line, sizeof(line)); BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, strcpy(line1, "generator: 2 (0x02)\n");
"generator: 2 (0x02)\n", AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
sizeof("generator: 2 (0x02)\n")),0);
/* should reach EOF */ /* should reach EOF */
AssertIntLE(BIO_gets(wbio, line, sizeof(line)) ,0); AssertIntLE(BIO_gets(wbio, line, sizeof(line)) ,0);

View File

@ -4819,6 +4819,15 @@ WOLFSSL_LOCAL int SetDsaExternal(WOLFSSL_DSA* dsa);
WOLFSSL_LOCAL int SetRsaExternal(WOLFSSL_RSA* rsa); WOLFSSL_LOCAL int SetRsaExternal(WOLFSSL_RSA* rsa);
WOLFSSL_LOCAL int SetRsaInternal(WOLFSSL_RSA* rsa); WOLFSSL_LOCAL int SetRsaInternal(WOLFSSL_RSA* rsa);
#endif #endif
typedef enum elem_set {
ELEMENT_P = 0x01,
ELEMENT_Q = 0x02,
ELEMENT_G = 0x04,
ELEMENT_PUB = 0x08,
ELEMENT_PRV = 0x0A,
} Element_Set;
WOLFSSL_LOCAL int SetDhExternal_ex(WOLFSSL_DH *dh, Element_Set elm );
WOLFSSL_LOCAL int SetDhInternal(WOLFSSL_DH* dh); WOLFSSL_LOCAL int SetDhInternal(WOLFSSL_DH* dh);
WOLFSSL_LOCAL int SetDhExternal(WOLFSSL_DH *dh); WOLFSSL_LOCAL int SetDhExternal(WOLFSSL_DH *dh);

View File

@ -376,7 +376,7 @@ struct WOLFSSL_EVP_PKEY_CTX {
typedef typedef
struct WOLFSSL_ASN1_PCTX { struct WOLFSSL_ASN1_PCTX {
int dummy; int dummy;
}WOLFSSL_ASN1_PCTX; } WOLFSSL_ASN1_PCTX;
typedef int WOLFSSL_ENGINE ; typedef int WOLFSSL_ENGINE ;
typedef WOLFSSL_ENGINE ENGINE; typedef WOLFSSL_ENGINE ENGINE;