forked from wolfSSL/wolfssl
Add wolfSSL_PEM_write_RSAPublicKey and wolfSSL_PEM_write_EC_PUBKEY.
These were compatibility layer stubs before.
This commit is contained in:
101
src/ssl.c
101
src/ssl.c
@ -30165,6 +30165,46 @@ int wolfSSL_PEM_write_bio_RSA_PUBKEY(WOLFSSL_BIO* bio, WOLFSSL_RSA* rsa)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifndef NO_FILESYSTEM
|
||||
int wolfSSL_PEM_write_RSAPublicKey(XFILE fp, WOLFSSL_RSA* key)
|
||||
{
|
||||
int ret = WOLFSSL_SUCCESS;
|
||||
WOLFSSL_BIO* bio = NULL;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_PEM_write_RSAPublicKey");
|
||||
|
||||
if (fp == XBADFILE || key == NULL) {
|
||||
WOLFSSL_MSG("Bad argument.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
if (ret == WOLFSSL_SUCCESS) {
|
||||
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
|
||||
if (bio == NULL) {
|
||||
WOLFSSL_MSG("wolfSSL_BIO_new failed.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
else if (wolfSSL_BIO_set_fp(bio, fp, BIO_NOCLOSE) != WOLFSSL_SUCCESS) {
|
||||
WOLFSSL_MSG("wolfSSL_BIO_set_fp failed.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
}
|
||||
if (ret == WOLFSSL_SUCCESS && wolfSSL_PEM_write_bio_RSA_PUBKEY(bio, key)
|
||||
!= WOLFSSL_SUCCESS) {
|
||||
WOLFSSL_MSG("wolfSSL_PEM_write_bio_RSA_PUBKEY failed.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
if (bio != NULL) {
|
||||
wolfSSL_BIO_free(bio);
|
||||
}
|
||||
|
||||
WOLFSSL_LEAVE("wolfSSL_PEM_write_RSAPublicKey", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif /* !NO_FILESYSTEM */
|
||||
#endif /* WOLFSSL_KEY_GEN && !NO_RSA && !HAVE_USER_RSA */
|
||||
|
||||
|
||||
@ -33501,23 +33541,52 @@ int wolfSSL_ECDH_compute_key(void *out, size_t outlen,
|
||||
/* End ECDH */
|
||||
|
||||
#if !defined(NO_FILESYSTEM)
|
||||
|
||||
#ifndef NO_BIO
|
||||
|
||||
#ifdef WOLFSSL_KEY_GEN
|
||||
/* return code compliant with OpenSSL :
|
||||
* 1 if success, 0 if error
|
||||
*/
|
||||
#ifndef NO_WOLFSSL_STUB
|
||||
int wolfSSL_PEM_write_EC_PUBKEY(XFILE fp, WOLFSSL_EC_KEY *x)
|
||||
int wolfSSL_PEM_write_EC_PUBKEY(XFILE fp, WOLFSSL_EC_KEY* key)
|
||||
{
|
||||
(void)fp;
|
||||
(void)x;
|
||||
WOLFSSL_STUB("PEM_write_EC_PUBKEY");
|
||||
WOLFSSL_MSG("wolfSSL_PEM_write_EC_PUBKEY not implemented");
|
||||
int ret = WOLFSSL_SUCCESS;
|
||||
WOLFSSL_BIO* bio = NULL;
|
||||
|
||||
return WOLFSSL_FAILURE;
|
||||
WOLFSSL_ENTER("wolfSSL_PEM_write_EC_PUBKEY");
|
||||
|
||||
if (fp == XBADFILE || key == NULL) {
|
||||
WOLFSSL_MSG("Bad argument.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
if (ret == WOLFSSL_SUCCESS) {
|
||||
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
|
||||
if (bio == NULL) {
|
||||
WOLFSSL_MSG("wolfSSL_BIO_new failed.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
else if (wolfSSL_BIO_set_fp(bio, fp, BIO_NOCLOSE) != WOLFSSL_SUCCESS) {
|
||||
WOLFSSL_MSG("wolfSSL_BIO_set_fp failed.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
}
|
||||
if (ret == WOLFSSL_SUCCESS && wolfSSL_PEM_write_bio_EC_PUBKEY(bio, key)
|
||||
!= WOLFSSL_SUCCESS) {
|
||||
WOLFSSL_MSG("wolfSSL_PEM_write_bio_EC_PUBKEY failed.");
|
||||
ret = WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
if (bio != NULL) {
|
||||
wolfSSL_BIO_free(bio);
|
||||
}
|
||||
|
||||
WOLFSSL_LEAVE("wolfSSL_PEM_write_EC_PUBKEY", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef NO_BIO
|
||||
|
||||
/* Uses the same format of input as wolfSSL_PEM_read_bio_PrivateKey but expects
|
||||
* the results to be an EC key.
|
||||
*
|
||||
@ -34778,20 +34847,6 @@ WOLFSSL_RSA *wolfSSL_PEM_read_RSAPublicKey(XFILE fp, WOLFSSL_RSA **x,
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
/* return code compliant with OpenSSL :
|
||||
* 1 if success, 0 if error
|
||||
*/
|
||||
#ifndef NO_WOLFSSL_STUB
|
||||
int wolfSSL_PEM_write_RSAPublicKey(XFILE fp, WOLFSSL_RSA *x)
|
||||
{
|
||||
(void)fp;
|
||||
(void)x;
|
||||
WOLFSSL_STUB("PEM_write_RSAPublicKey");
|
||||
WOLFSSL_MSG("wolfSSL_PEM_write_RSAPublicKey not implemented");
|
||||
|
||||
return WOLFSSL_FAILURE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* return code compliant with OpenSSL :
|
||||
* 1 if success, 0 if error
|
||||
|
12
tests/api.c
12
tests/api.c
@ -31664,6 +31664,12 @@ static void test_wolfSSL_PEM_bio_RSAKey(void)
|
||||
AssertNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem()));
|
||||
AssertIntEQ(PEM_write_bio_RSA_PUBKEY(bio, rsa), WOLFSSL_SUCCESS);
|
||||
BIO_free(bio);
|
||||
|
||||
/* Same test as above, but with a file pointer rather than a BIO. */
|
||||
AssertIntEQ(PEM_write_RSAPublicKey(NULL, rsa), WOLFSSL_FAILURE);
|
||||
AssertIntEQ(PEM_write_RSAPublicKey(stdout, NULL), WOLFSSL_FAILURE);
|
||||
AssertIntEQ(PEM_write_RSAPublicKey(stdout, rsa), WOLFSSL_SUCCESS);
|
||||
|
||||
RSA_free(rsa);
|
||||
|
||||
/* Ensure that keys beginning with BEGIN RSA PUBLIC KEY can be read, too. */
|
||||
@ -31810,6 +31816,12 @@ static void test_wolfSSL_PEM_bio_ECKey(void)
|
||||
AssertNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem()));
|
||||
AssertIntEQ(PEM_write_bio_EC_PUBKEY(bio, ec), WOLFSSL_SUCCESS);
|
||||
BIO_free(bio);
|
||||
|
||||
/* Same test as above, but with a file pointer rather than a BIO. */
|
||||
AssertIntEQ(PEM_write_EC_PUBKEY(NULL, ec), WOLFSSL_FAILURE);
|
||||
AssertIntEQ(PEM_write_EC_PUBKEY(stdout, NULL), WOLFSSL_FAILURE);
|
||||
AssertIntEQ(PEM_write_EC_PUBKEY(stdout, ec), WOLFSSL_SUCCESS);
|
||||
|
||||
EC_KEY_free(ec);
|
||||
|
||||
#ifndef NO_RSA
|
||||
|
@ -77,7 +77,7 @@ WOLFSSL_API
|
||||
WOLFSSL_RSA *wolfSSL_PEM_read_RSAPublicKey(XFILE fp, WOLFSSL_RSA **x,
|
||||
wc_pem_password_cb *cb, void *u);
|
||||
WOLFSSL_API
|
||||
int wolfSSL_PEM_write_RSAPublicKey(XFILE fp, WOLFSSL_RSA *x);
|
||||
int wolfSSL_PEM_write_RSAPublicKey(XFILE fp, WOLFSSL_RSA* key);
|
||||
|
||||
WOLFSSL_API
|
||||
int wolfSSL_PEM_write_RSA_PUBKEY(XFILE fp, WOLFSSL_RSA *x);
|
||||
@ -147,7 +147,7 @@ int wolfSSL_PEM_write_ECPrivateKey(XFILE fp, WOLFSSL_EC_KEY *key,
|
||||
unsigned char *kstr, int klen,
|
||||
wc_pem_password_cb *cb, void *u);
|
||||
WOLFSSL_API
|
||||
int wolfSSL_PEM_write_EC_PUBKEY(XFILE fp, WOLFSSL_EC_KEY *key);
|
||||
int wolfSSL_PEM_write_EC_PUBKEY(XFILE fp, WOLFSSL_EC_KEY* key);
|
||||
|
||||
WOLFSSL_API
|
||||
WOLFSSL_EC_KEY* wolfSSL_PEM_read_bio_EC_PUBKEY(WOLFSSL_BIO* bio,
|
||||
|
Reference in New Issue
Block a user