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;
word32 keyIdx = 0;
DhKey* key = NULL;
int ret;
Element_Set elements;
/* test if DH-public key */
if (wc_InitDhKey(&dh) != 0)
return NULL;
if (wc_DhPublicKeyDecode(mem, &keyIdx, &dh, (word32)memSz) == 0) {
wc_FreeDhKey(&dh);
ret = wc_DhPublicKeyDecode(mem, &keyIdx, &dh, (word32)memSz);
wc_FreeDhKey(&dh);
if (ret == 0) {
pkey = wolfSSL_EVP_PKEY_new();
if (pkey != NULL) {
pkey->type = EVP_PKEY_DH;
@ -8106,6 +8109,12 @@ WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY(WOLFSSL_EVP_PKEY** out,
keyIdx = 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)
== WOLFSSL_SUCCESS &&
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)
== WOLFSSL_SUCCESS) {
return pkey;
}
} */
}
else {
wolfSSL_EVP_PKEY_free(pkey);
return NULL;
}
}
wolfSSL_EVP_PKEY_free(pkey);
}
else
wc_FreeDhKey(&dh);
}
#endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */
#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) \
|| defined(WOLFSSL_OPENSSH))
|| defined(WOLFSSL_OPENSSH)) || defined(OPENSSL_EXTRA)
#ifdef WOLFSSL_DH_EXTRA
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
* DhKey was populated from wc_DhKeyDecode
*/
int SetDhExternal(WOLFSSL_DH *dh)
int SetDhExternal_ex(WOLFSSL_DH *dh, Element_Set elm)
{
DhKey *key;
WOLFSSL_MSG("Entering SetDhExternal");
WOLFSSL_MSG("Entering SetDhExternal_ex");
if (dh == NULL || dh->internal == NULL) {
WOLFSSL_MSG("dh key NULL error");
@ -33410,25 +33416,36 @@ int SetDhExternal(WOLFSSL_DH *dh)
key = (DhKey*)dh->internal;
if (SetIndividualExternal(&dh->p, &key->p) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("dh param p error");
return WOLFSSL_FATAL_ERROR;
if( elm & ELEMENT_P) {
if (SetIndividualExternal(&dh->p, &key->p) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("dh param p error");
return WOLFSSL_FATAL_ERROR;
}
}
if (SetIndividualExternal(&dh->g, &key->g) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("dh param g error");
return WOLFSSL_FATAL_ERROR;
if( elm & ELEMENT_Q) {
if (SetIndividualExternal(&dh->q, &key->q) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("dh param q 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
if (SetIndividualExternal(&dh->priv_key, &key->priv) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("No DH Private Key");
return WOLFSSL_FATAL_ERROR;
if( elm & ELEMENT_PRV) {
if (SetIndividualExternal(&dh->priv_key, &key->priv) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("No DH Private Key");
return WOLFSSL_FATAL_ERROR;
}
}
if (SetIndividualExternal(&dh->pub_key, &key->pub) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("No DH Public Key");
return WOLFSSL_FATAL_ERROR;
if( elm & ELEMENT_PUB) {
if (SetIndividualExternal(&dh->pub_key, &key->pub) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("No DH Public Key");
return WOLFSSL_FATAL_ERROR;
}
}
#endif /* WOLFSSL_DH_EXTRA */
@ -33436,6 +33453,20 @@ int SetDhExternal(WOLFSSL_DH *dh)
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) */
/* 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_EVP_PKEY* pkey = NULL;
char line[256] = { 0 };
char line1[256] = { 0 };
int i;
(void)line1;
printf(testingFmt, "EVP_PKEY_print_public()");
/* test error cases */
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);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, " RSA Public-Key: (1024 bit)\n",
sizeof(" RSA Public-Key: (1024 bit)\n")),0);
strcpy(line1, " RSA Public-Key: (1024 bit)\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, " Modulus:\n",
sizeof(" Modulus:\n")),0);
strcpy(line1, " Modulus:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line,
" 00:BC:73:0E:A8:49:F3:74:A2:A9:EF:18:A5:DA:55:\n",
sizeof(" 00:BC:73:0E:A8:49:F3:74:A2:A9:EF:18:A5:DA:55:\n")),0);
strcpy(line1, " 00:BC:73:0E:A8:49:F3:74:A2:A9:EF:18:A5:DA:55:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* 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));
AssertIntEQ(XSTRNCMP( line, " Exponent: 65537 (0x010001)\n",
sizeof(" Exponent: 65537 (0x010001)\n")),0);
strcpy(line1, " Exponent: 65537 (0x010001)\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* 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);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "DSA Public-Key: (2048 bit)\n",
sizeof("DSA Public-Key: (2048 bit)\n")),0);
strcpy(line1, "DSA Public-Key: (2048 bit)\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "pub:\n",
sizeof("pub:\n")),0);
strcpy(line1, "pub:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line,
" 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);
strcpy(line1,
" 00:C2:35:2D:EC:83:83:6C:73:13:9E:52:7C:74:C8:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of pub element*/
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));
AssertIntEQ(XSTRNCMP( line,
"P:\n",
sizeof("P:\n")),0);
strcpy(line1, "P:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of P element*/
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));
AssertIntEQ(XSTRNCMP( line,
"Q:\n",
sizeof("Q:\n")),0);
strcpy(line1, "Q:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of Q element*/
for( i = 0; i < 3 ;i++) {
BIO_gets(wbio, line, sizeof(line));
}
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line,
"G:\n",
sizeof("G:\n")),0);
strcpy(line1, "G:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of G element*/
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);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "Public-Key: (256 bit)\n",
sizeof("Public-Key: (256 bit)\n")),0);
strcpy(line1, "Public-Key: (256 bit)\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "pub:\n",
sizeof("pub:\n")),0);
strcpy(line1, "pub:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line,
" 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);
strcpy(line1,
" 04:55:BF:F4:0F:44:50:9A:3D:CE:9B:B7:F0:C5:4D:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of pub element*/
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));
AssertIntEQ(XSTRNCMP( line, "ASN1 OID: prime256v1\n",
sizeof("ASN1 OID: prime256v1\n")),0);
strcpy(line1, "ASN1 OID: prime256v1\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "NIST CURVE: P-256\n",
sizeof("NIST CURVE: P-256")),0);
strcpy(line1, "NIST CURVE: P-256\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* 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);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "DH Public-Key: (2048 bit)\n",
sizeof("DH Public-Key: (2048 bit)\n")),0);
strcpy(line1, "DH Public-Key: (2048 bit)\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line, "public-key:\n",
sizeof("public-key:\n")),0);
strcpy(line1, "public-key:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line,
" 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);
strcpy(line1,
" 34:41:BF:E9:F2:11:BF:05:DB:B2:72:A8:29:CC:BD:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of public-key element*/
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));
AssertIntEQ(XSTRNCMP( line,
"prime:\n",
sizeof("prime:\n")),0);
strcpy(line1, "prime:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
BIO_gets(wbio, line, sizeof(line));
AssertIntEQ(XSTRNCMP( line,
" 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);
strcpy(line1,
" 00:D3:B2:99:84:5C:0A:4C:E7:37:CC:FC:18:37:01:\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* skip to the end of prime element*/
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));
AssertIntEQ(XSTRNCMP( line,
"generator: 2 (0x02)\n",
sizeof("generator: 2 (0x02)\n")),0);
strcpy(line1, "generator: 2 (0x02)\n");
AssertIntEQ(XSTRNCMP( line, line1, strlen(line1)), 0);
/* should reach EOF */
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 SetRsaInternal(WOLFSSL_RSA* rsa);
#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 SetDhExternal(WOLFSSL_DH *dh);

View File

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