diff --git a/tests/api.c b/tests/api.c index f4725a02e..88816eceb 100644 --- a/tests/api.c +++ b/tests/api.c @@ -21908,6 +21908,54 @@ static void test_wolfSSL_DH_1536_prime(void) #endif } +static void test_wolfSSL_PEM_write_DHparams(void) +{ +#if defined(OPENSSL_EXTRA) && !defined(NO_DH) && !defined(NO_FILESYSTEM) + DH* dh; + XFILE fp; + byte pem[2048]; + int pemSz; + DerBuffer *der = NULL; + word32 idx = 0; + const char expected[] = +"-----BEGIN DH PARAMETERS-----\n\ +MIIBCAKCAQEAsKEIBpwIE7pZBjy8MNX1AMFPRKfW70rGJScc6NKWUwpckd2iwpSE\n\ +v32yRJ+b0sGKxb5yXKfnkebUn3MHhVtmSMdw+rTuAsk9mkraPcFGPhlp0RdGB6NN\n\ +nyuWFzltMI0q85TTdc+gdebykh8acAWqBINXMPvadpM4UOgn/WPuPOW3yAmub1A1\n\ +joTOSgDpEn5aMdcz/CETdswWMNsM/MVipzW477ewrMA29tnJRkj5QJAAKxuqbOMa\n\ +wwsDnhvCRuRITiJzb8Nf1JrWMAdI1oyQq9T28eNI01hLprnNKb9oHwhLY4YvXGvW\n\ +tgZl96bcAGdru8OpQYP7x/rI4h5+rwA/kwIBAg==\n\ +-----END DH PARAMETERS-----\n"; + printf(testingFmt, "wolfSSL_PEM_write_DHparams()"); + + AssertNotNull(fp = XFOPEN(dhParamFile, "rb")); + AssertIntGT((pemSz = XFREAD(pem, 1, sizeof(pem), fp)), 0); + XFCLOSE(fp); + + wc_PemToDer(pem, pemSz, DH_PARAM_TYPE, &der, NULL, NULL, NULL); + AssertNotNull(dh = DH_new()); + printf("derSz = %d idx = %d\n", der->length, idx); + AssertIntEQ(wc_DhKeyDecode(der->buffer, &idx, (DhKey*)dh->internal, + der->length), 0); + wc_FreeDer(&der); + + AssertNotNull(fp = XFOPEN("./test-write-dhparams.pem", "wb")); + AssertIntEQ(PEM_write_DHparams(fp, dh), WOLFSSL_SUCCESS); + AssertIntEQ(PEM_write_DHparams(fp, NULL), WOLFSSL_FAILURE); + XFCLOSE(fp); + DH_free(dh); + + /* check results */ + XMEMSET(pem, 0, sizeof(pem)); + AssertNotNull(fp = XFOPEN("./test-write-dhparams.pem", "rb")); + AssertIntGT((pemSz = XFREAD(pem, 1, sizeof(pem), fp)), 0); + AssertIntEQ(XMEMCMP(pem, expected, pemSz), 0); + XFCLOSE(fp); + + printf(resultFmt, passed); +#endif +} + static void test_wolfSSL_AES_ecb_encrypt(void) { #if defined(OPENSSL_EXTRA) && !defined(NO_AES) && defined(HAVE_AES_ECB) @@ -24702,6 +24750,7 @@ void ApiTest(void) test_wolfSSL_msg_callback(); test_wolfSSL_SHA(); test_wolfSSL_DH_1536_prime(); + test_wolfSSL_PEM_write_DHparams(); test_wolfSSL_AES_ecb_encrypt(); test_wolfSSL_SHA256(); test_wolfSSL_X509_get_serialNumber();