Skip to content

Commit b20c1db

Browse files
committed
Refactor - Fix pr notes + compilation error for a test
1 parent 3aa3201 commit b20c1db

1 file changed

Lines changed: 49 additions & 15 deletions

File tree

src/pk.c

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,10 @@ static int der_write_to_bio_as_pem(const unsigned char* der, int derSz,
292292
#endif
293293
#endif
294294

295-
#if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM)
295+
#if !defined(NO_FILESYSTEM) && \
296+
((defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && !defined(NO_ASN) && \
297+
!defined(NO_PWDBASED)) || \
298+
defined(WOLFSSL_DH_EXTRA))
296299
/* Write the DER data as PEM into file pointer.
297300
*
298301
* @param [in] der Buffer containing DER data.
@@ -322,7 +325,9 @@ static int der_write_to_file_as_pem(const unsigned char* der, int derSz,
322325
XFREE(pem, NULL, DYNAMIC_TYPE_TMP_BUFFER);
323326
return ret;
324327
}
325-
#endif /* OPENSSL_EXTRA && !NO_FILESYSTEM */
328+
#endif /* !NO_FILESYSTEM &&
329+
* ((OPENSSL_EXTRA && !NO_CERTS && !NO_ASN && !NO_PWDBASED) ||
330+
* WOLFSSL_DH_EXTRA) */
326331

327332
#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_KEY_GEN) && \
328333
defined(WOLFSSL_PEM_TO_DER)
@@ -6277,9 +6282,8 @@ int wolfSSL_PEM_write_bio_PrivateKey(WOLFSSL_BIO* bio, WOLFSSL_EVP_PKEY* key,
62776282
}
62786283
#endif /* !NO_BIO */
62796284

6280-
#ifndef NO_FILESYSTEM
6281-
#ifndef NO_CERTS
6282-
#if defined(OPENSSL_EXTRA) && !defined(NO_ASN) && !defined(NO_PWDBASED)
6285+
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS) && defined(OPENSSL_EXTRA) && \
6286+
!defined(NO_ASN) && !defined(NO_PWDBASED)
62836287
/* Writes a public key to a file pointer encoded in PEM format.
62846288
*
62856289
* @param [in] fp File pointer to write to.
@@ -6295,19 +6299,34 @@ int wolfSSL_PEM_write_PUBKEY(XFILE fp, WOLFSSL_EVP_PKEY* key)
62956299

62966300
WOLFSSL_ENTER("wolfSSL_PEM_write_PUBKEY");
62976301

6298-
/* Validate parameters. */
62996302
if ((fp == XBADFILE) || (key == NULL)) {
63006303
WOLFSSL_MSG("Bad Function Arguments");
63016304
err = 1;
63026305
}
63036306

6304-
/* Encode the public key as DER. */
63056307
if (!err) {
6306-
derSz = wolfSSL_i2d_PUBKEY(key, &derBuf);
6308+
derSz = wolfSSL_i2d_PUBKEY(key, NULL);
63076309
if (derSz <= 0) {
6308-
WOLFSSL_MSG("Failed to convert key to DER");
6310+
WOLFSSL_MSG("Failed to get DER size for key");
6311+
err = 1;
6312+
}
6313+
}
6314+
6315+
if (!err) {
6316+
unsigned char* tmp;
6317+
derBuf = (unsigned char*)XMALLOC((size_t)derSz, NULL,
6318+
DYNAMIC_TYPE_TMP_BUFFER);
6319+
if (derBuf == NULL) {
6320+
WOLFSSL_MSG("Failed to allocate DER buffer");
63096321
err = 1;
63106322
}
6323+
else {
6324+
tmp = derBuf;
6325+
if (wolfSSL_i2d_PUBKEY(key, &tmp) <= 0) {
6326+
WOLFSSL_MSG("Failed to convert key to DER");
6327+
err = 1;
6328+
}
6329+
}
63116330
}
63126331

63136332
/* Write DER buffer to file as PEM. */
@@ -6382,15 +6401,31 @@ int wolfSSL_PEM_write_PrivateKey(XFILE fp, WOLFSSL_EVP_PKEY* key,
63826401
}
63836402
}
63846403

6385-
/* Encode the private key as DER. */
63866404
if (!err) {
6387-
derSz = wolfSSL_i2d_PrivateKey(key, &derBuf);
6405+
derSz = wolfSSL_i2d_PrivateKey(key, NULL);
63886406
if (derSz <= 0) {
6389-
WOLFSSL_MSG("Error encoding private key as DER");
6407+
WOLFSSL_MSG("Failed to get DER size for private key");
63906408
err = 1;
63916409
}
63926410
}
63936411

6412+
if (!err) {
6413+
unsigned char* tmp;
6414+
derBuf = (unsigned char*)XMALLOC((size_t)derSz, NULL,
6415+
DYNAMIC_TYPE_TMP_BUFFER);
6416+
if (derBuf == NULL) {
6417+
WOLFSSL_MSG("Failed to allocate DER buffer");
6418+
err = 1;
6419+
}
6420+
else {
6421+
tmp = derBuf;
6422+
if (wolfSSL_i2d_PrivateKey(key, &tmp) <= 0) {
6423+
WOLFSSL_MSG("Error encoding private key as DER");
6424+
err = 1;
6425+
}
6426+
}
6427+
}
6428+
63946429
/* Write DER buffer to file as PEM. */
63956430
if ((!err) && (der_write_to_file_as_pem(derBuf, derSz, fp, type,
63966431
NULL) != 1)) {
@@ -6404,9 +6439,8 @@ int wolfSSL_PEM_write_PrivateKey(XFILE fp, WOLFSSL_EVP_PKEY* key,
64046439
WOLFSSL_LEAVE("wolfSSL_PEM_write_PrivateKey", err);
64056440
return !err;
64066441
}
6407-
#endif /* OPENSSL_EXTRA && !NO_ASN && !NO_PWDBASED */
6408-
#endif /* !NO_CERTS */
6409-
#endif /* !NO_FILESYSTEM */
6442+
#endif /* !NO_FILESYSTEM && !NO_CERTS && OPENSSL_EXTRA && !NO_ASN &&
6443+
* !NO_PWDBASED */
64106444

64116445
#ifndef NO_BIO
64126446
/* Create a private key object from the data in the BIO.

0 commit comments

Comments
 (0)