|
22 | 22 |
|
23 | 23 | #ifdef WP_HAVE_DH |
24 | 24 |
|
| 25 | +/* dh pkcs8 private key der */ |
| 26 | +static const unsigned char dh_der[] = { |
| 27 | + 0x30, 0x82, 0x02, 0x26, 0x02, 0x01, 0x00, 0x30, 0x82, 0x01, 0x17, 0x06, |
| 28 | + 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x03, 0x01, 0x30, 0x82, |
| 29 | + 0x01, 0x08, 0x02, 0x82, 0x01, 0x01, 0x00, 0xBA, 0x58, 0x07, 0x7D, 0xB2, |
| 30 | + 0x45, 0x41, 0x40, 0xF7, 0x72, 0xDF, 0x98, 0x98, 0x51, 0x7D, 0xBE, 0x17, |
| 31 | + 0xE3, 0xD0, 0xB6, 0xCA, 0x38, 0xC3, 0x65, 0x7F, 0xE2, 0x13, 0xC1, 0x42, |
| 32 | + 0x1A, 0x7A, 0x94, 0x2B, 0xB5, 0x58, 0xC0, 0x39, 0xD4, 0xB8, 0x41, 0xFD, |
| 33 | + 0x21, 0xCF, 0xE3, 0x9C, 0x17, 0xB9, 0x8D, 0x34, 0x1A, 0x98, 0x81, 0xAF, |
| 34 | + 0xAE, 0x19, 0xD5, 0x01, 0x9F, 0xD3, 0x29, 0xD1, 0x29, 0xEF, 0xDD, 0x73, |
| 35 | + 0x4B, 0xF4, 0xEB, 0x87, 0xAC, 0xF3, 0xF9, 0xBD, 0x8B, 0xD5, 0xAD, 0x20, |
| 36 | + 0xE4, 0xEB, 0x6C, 0x99, 0xDE, 0x40, 0x76, 0xF3, 0x18, 0x41, 0x85, 0xE9, |
| 37 | + 0x1D, 0xFE, 0x8C, 0xEA, 0x5B, 0xAD, 0xB4, 0x11, 0xCA, 0x0D, 0x22, 0x0C, |
| 38 | + 0xD7, 0x06, 0xAD, 0x06, 0x59, 0xFB, 0x1B, 0x61, 0xEB, 0xF4, 0x1B, 0xCA, |
| 39 | + 0x6E, 0x8C, 0x0F, 0x92, 0x8D, 0xF3, 0x80, 0x1B, 0x4A, 0xAF, 0xF2, 0x9E, |
| 40 | + 0x3F, 0x60, 0xFD, 0xB1, 0x49, 0x6D, 0xCA, 0x0B, 0xD4, 0x99, 0x3B, 0x45, |
| 41 | + 0xA5, 0xB1, 0xED, 0xA1, 0xB7, 0x94, 0xD0, 0x33, 0xA5, 0x21, 0xEB, 0x29, |
| 42 | + 0xC2, 0xEB, 0xFB, 0x5C, 0x1A, 0xD5, 0xAF, 0xC4, 0xC9, 0x02, 0xCD, 0x7A, |
| 43 | + 0xEB, 0xB4, 0xC5, 0x7B, 0x34, 0xBD, 0x2F, 0x4F, 0xA0, 0xC4, 0x63, 0x6A, |
| 44 | + 0xFE, 0x98, 0xD0, 0x83, 0xFA, 0xEF, 0x6F, 0xAF, 0xA8, 0x4B, 0x46, 0x59, |
| 45 | + 0x77, 0xCA, 0xC5, 0x19, 0xDA, 0x8A, 0x77, 0xC6, 0x56, 0x08, 0xD6, 0x0A, |
| 46 | + 0xAD, 0xFC, 0x04, 0x35, 0xFA, 0xDA, 0xAA, 0x08, 0x42, 0x1B, 0x48, 0xE8, |
| 47 | + 0x42, 0x3C, 0x4F, 0x31, 0xA2, 0x22, 0xE9, 0xF3, 0x0F, 0xD7, 0x06, 0xCB, |
| 48 | + 0x08, 0x54, 0x7C, 0x2C, 0xEA, 0x38, 0x11, 0x2B, 0x53, 0x7C, 0xE5, 0x86, |
| 49 | + 0xC9, 0x74, 0xB9, 0x98, 0x68, 0x6D, 0xE4, 0xF0, 0x7A, 0x2B, 0xE5, 0xB9, |
| 50 | + 0x4E, 0xAD, 0xD1, 0x34, 0xC7, 0x4C, 0xFE, 0x1A, 0x7C, 0x8A, 0x37, 0x02, |
| 51 | + 0x01, 0x02, 0x04, 0x82, 0x01, 0x04, 0x02, 0x82, 0x01, 0x00, 0x45, 0xED, |
| 52 | + 0x6E, 0x18, 0x44, 0x8F, 0xA0, 0x43, 0x04, 0xF7, 0xE0, 0x5E, 0x98, 0x23, |
| 53 | + 0xFB, 0xE8, 0xDA, 0x49, 0x7E, 0x2A, 0x11, 0xEC, 0xD0, 0xCD, 0xB7, 0x13, |
| 54 | + 0xE1, 0x11, 0xCB, 0xDA, 0x00, 0x34, 0x13, 0x16, 0x5A, 0xB5, 0xEA, 0x2D, |
| 55 | + 0xCC, 0xAB, 0x0D, 0xE1, 0x75, 0x5D, 0xCA, 0xBC, 0x1E, 0xBD, 0x5D, 0x01, |
| 56 | + 0xB4, 0xC3, 0xCA, 0x78, 0xDF, 0x4C, 0x4F, 0x1B, 0x21, 0x40, 0x8A, 0x64, |
| 57 | + 0x7F, 0x4B, 0x45, 0xE3, 0x7F, 0x43, 0xD7, 0xFD, 0x4E, 0xA0, 0xA1, 0x4A, |
| 58 | + 0x1C, 0x5A, 0x8D, 0x87, 0x7E, 0x5A, 0xB5, 0x26, 0x1A, 0xDC, 0x9B, 0xDD, |
| 59 | + 0xD1, 0x8D, 0xD0, 0xBB, 0x45, 0x0F, 0x67, 0x41, 0xC1, 0xC0, 0xA5, 0x7B, |
| 60 | + 0x6A, 0x35, 0x51, 0x06, 0x14, 0xC7, 0x61, 0x0D, 0xF7, 0x01, 0x30, 0x0A, |
| 61 | + 0xB5, 0x07, 0xF6, 0x8F, 0x76, 0xCF, 0x99, 0x1F, 0xAF, 0x2C, 0x66, 0x20, |
| 62 | + 0xB4, 0x69, 0x0A, 0xC3, 0x04, 0x76, 0x1B, 0xF4, 0x0D, 0x7C, 0x54, 0x0A, |
| 63 | + 0xB8, 0xF6, 0xF8, 0x35, 0x17, 0x81, 0xDD, 0x6E, 0xCE, 0x17, 0xBD, 0x00, |
| 64 | + 0x9C, 0x5D, 0x3F, 0x37, 0x37, 0xC4, 0x58, 0xBC, 0xA5, 0xB3, 0xD3, 0x0F, |
| 65 | + 0x98, 0x0F, 0x6C, 0x0C, 0x78, 0x53, 0x92, 0x36, 0x94, 0x4D, 0xF5, 0x7D, |
| 66 | + 0x1A, 0xD8, 0xC6, 0x54, 0x0A, 0xED, 0x79, 0xAA, 0xAC, 0x4F, 0xFF, 0x2B, |
| 67 | + 0x41, 0xC6, 0x41, 0x7A, 0x4D, 0xBC, 0xB0, 0x43, 0xF9, 0x22, 0x33, 0xD4, |
| 68 | + 0xAA, 0x43, 0x75, 0xAD, 0x97, 0xAB, 0xE8, 0xCC, 0x57, 0xFA, 0x0D, 0x48, |
| 69 | + 0x08, 0x44, 0x99, 0x6A, 0x9D, 0x14, 0x14, 0x4D, 0x32, 0x00, 0x3E, 0x8A, |
| 70 | + 0x82, 0x30, 0xB1, 0x85, 0x3E, 0xD2, 0xD3, 0x8C, 0xEF, 0x73, 0x72, 0x56, |
| 71 | + 0x28, 0xF5, 0xBA, 0x2F, 0x85, 0x45, 0x46, 0xD1, 0xED, 0x42, 0x2E, 0x9A, |
| 72 | + 0xAE, 0x4F, 0x41, 0x5B, 0xBD, 0x9C, 0xF9, 0x58, 0x8D, 0xFA, 0x13, 0xB4, |
| 73 | + 0xDF, 0x31, |
| 74 | +}; |
| 75 | + |
25 | 76 | /* dh1024 p */ |
26 | 77 | static const unsigned char dh_p[] = |
27 | 78 | { |
@@ -55,7 +106,7 @@ static int test_dh_pkey_keygen(EVP_PKEY *params) |
55 | 106 | unsigned char *secretWolfProvider = NULL; |
56 | 107 | size_t secretLenWolfProvider = 0; |
57 | 108 |
|
58 | | - PRINT_MSG("Generate DH key pair with OpenSSL and params from " |
| 109 | + PRINT_MSG("Generate DH key pair with WolfSSL and params from " |
59 | 110 | "wolfProvider"); |
60 | 111 | ctx = EVP_PKEY_CTX_new_from_pkey(wpLibCtx, params, NULL); |
61 | 112 | err = ctx == NULL; |
@@ -217,4 +268,83 @@ int test_dh_pkey(void *data) |
217 | 268 | return err; |
218 | 269 | } |
219 | 270 |
|
| 271 | +int test_dh_decode(void *data) |
| 272 | +{ |
| 273 | + int err = 0; |
| 274 | + const unsigned char *p = NULL; |
| 275 | + int len = 0; |
| 276 | + PKCS8_PRIV_KEY_INFO* p8inf = NULL; |
| 277 | + EVP_PKEY* pkey1 = NULL; |
| 278 | + DH *dh1 = NULL; |
| 279 | + const BIGNUM *p1 = NULL; |
| 280 | + const BIGNUM *g1 = NULL; |
| 281 | + const BIGNUM *priv1 = NULL; |
| 282 | + const BIGNUM *pub1 = NULL; |
| 283 | + EVP_PKEY* pkey2 = NULL; |
| 284 | + DH *dh2 = NULL; |
| 285 | + const BIGNUM *p2 = NULL; |
| 286 | + const BIGNUM *g2 = NULL; |
| 287 | + const BIGNUM *priv2 = NULL; |
| 288 | + const BIGNUM *pub2 = NULL; |
| 289 | + |
| 290 | + (void)data; |
| 291 | + |
| 292 | + p = &dh_der[0]; |
| 293 | + len = sizeof(dh_der); |
| 294 | + p8inf = d2i_PKCS8_PRIV_KEY_INFO(NULL, (const unsigned char **)&p, len); |
| 295 | + err = p8inf == NULL; |
| 296 | + |
| 297 | + if (err == 0) { |
| 298 | + PRINT_MSG("Decode with OpenSSL and Wolfprovider"); |
| 299 | + pkey1 = EVP_PKCS82PKEY_ex(p8inf, osslLibCtx, NULL); |
| 300 | + pkey2 = EVP_PKCS82PKEY_ex(p8inf, wpLibCtx, NULL); |
| 301 | + PKCS8_PRIV_KEY_INFO_free(p8inf); |
| 302 | + err = (pkey1 == NULL || pkey2 == NULL); |
| 303 | + } |
| 304 | + |
| 305 | + if (err == 0) { |
| 306 | + dh1 = EVP_PKEY_get1_DH(pkey1); |
| 307 | + dh2 = EVP_PKEY_get1_DH(pkey2); |
| 308 | + err = (dh1 == NULL || dh2 == NULL); |
| 309 | + } |
| 310 | + |
| 311 | + if (err == 0) { |
| 312 | + DH_get0_pqg(dh1, &p1, NULL, &g1); |
| 313 | + err = (p1 == NULL || g1 == NULL); |
| 314 | + } |
| 315 | + if (err == 0) { |
| 316 | + DH_get0_pqg(dh2, &p2, NULL, &g2); |
| 317 | + err = (p2 == NULL || g2 == NULL); |
| 318 | + } |
| 319 | + |
| 320 | + if (err == 0) { |
| 321 | + DH_get0_key(dh1, &pub1, &priv1); |
| 322 | + err = (pub1 == NULL || priv1 == NULL); |
| 323 | + } |
| 324 | + if (err == 0) { |
| 325 | + DH_get0_key(dh2, &pub2, &priv2); |
| 326 | + err = (pub2 == NULL || priv2 == NULL); |
| 327 | + } |
| 328 | + |
| 329 | + if (err == 0) { |
| 330 | + err = BN_cmp(p1, p2) != 0; |
| 331 | + } |
| 332 | + if (err == 0) { |
| 333 | + err = BN_cmp(g1, g2) != 0; |
| 334 | + } |
| 335 | + if (err == 0) { |
| 336 | + err = BN_cmp(priv1, priv2) != 0; |
| 337 | + } |
| 338 | + if (err == 0) { |
| 339 | + err = BN_cmp(pub1, pub2) != 0; |
| 340 | + } |
| 341 | + |
| 342 | + DH_free(dh1); |
| 343 | + DH_free(dh2); |
| 344 | + EVP_PKEY_free(pkey1); |
| 345 | + EVP_PKEY_free(pkey2); |
| 346 | + |
| 347 | + return err; |
| 348 | +} |
| 349 | + |
220 | 350 | #endif /* WP_HAVE_DH */ |
0 commit comments