mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
Modified along the revire comments
This commit is contained in:
81
src/ssl.c
81
src/ssl.c
@ -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 :
|
||||
|
102
tests/api.c
102
tests/api.c
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user