forked from wolfSSL/wolfssl
dot system test passed
This commit is contained in:
25
src/ssl.c
25
src/ssl.c
@ -42164,6 +42164,31 @@ int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey)
|
||||
return WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
switch (pkey->type) {
|
||||
#if (defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA)) && !defined(NO_RSA)
|
||||
case EVP_PKEY_RSA:
|
||||
WOLFSSL_MSG("populating RSA key");
|
||||
if (PopulateRSAEvpPkeyDer(pkey) != WOLFSSL_SUCCESS)
|
||||
return WOLFSSL_FAILURE;
|
||||
break;
|
||||
#endif /* (WOLFSSL_KEY_GEN || OPENSSL_EXTRA) && !NO_RSA */
|
||||
#if !defined(HAVE_SELFTEST) && (defined(WOLFSSL_KEY_GEN) || \
|
||||
defined(WOLFSSL_CERT_GEN)) && !defined(NO_DSA)
|
||||
case EVP_PKEY_DSA:
|
||||
break;
|
||||
#endif /* !HAVE_SELFTEST && (WOLFSSL_KEY_GEN || WOLFSSL_CERT_GEN) && !NO_DSA */
|
||||
#ifdef HAVE_ECC
|
||||
case EVP_PKEY_EC:
|
||||
WOLFSSL_MSG("populating ECC key");
|
||||
if (ECC_populate_EVP_PKEY(pkey, (ecc_key*)pkey->ecc->internal)
|
||||
!= WOLFSSL_SUCCESS)
|
||||
return WOLFSSL_FAILURE;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
if (pkey->pkey.ptr != NULL) {
|
||||
/* ptr for WOLFSSL_EVP_PKEY struct is expected to be DER format */
|
||||
return wolfSSL_CTX_use_PrivateKey_buffer(ctx,
|
||||
|
12
src/wolfio.c
12
src/wolfio.c
@ -167,6 +167,12 @@ int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx)
|
||||
if (recvd <= 0) {
|
||||
if (wolfSSL_BIO_supports_pending(ssl->biord) &&
|
||||
wolfSSL_BIO_ctrl_pending(ssl->biord) == 0) {
|
||||
if (ssl->biowr->type == WOLFSSL_BIO_BIO &&
|
||||
ssl->biowr->wrIdx != 0) {
|
||||
/* Let's signal to the app layer that we have
|
||||
* data pending that needs to be sent. */
|
||||
return WOLFSSL_CBIO_ERR_WANT_WRITE;
|
||||
}
|
||||
return WOLFSSL_CBIO_ERR_WANT_READ;
|
||||
}
|
||||
else if (ssl->biord->type == WOLFSSL_BIO_SOCKET) {
|
||||
@ -224,6 +230,12 @@ int BioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx)
|
||||
#endif
|
||||
return sent;
|
||||
}
|
||||
else if (ssl->biowr->type == WOLFSSL_BIO_BIO) {
|
||||
if (sent == WOLFSSL_BIO_ERROR) {
|
||||
WOLFSSL_MSG("\tWould Block");
|
||||
return WOLFSSL_CBIO_ERR_WANT_WRITE;
|
||||
}
|
||||
}
|
||||
|
||||
/* If retry and write flags are set, return WANT_WRITE */
|
||||
if ((ssl->biord->flags & WOLFSSL_BIO_FLAG_WRITE) &&
|
||||
|
@ -6593,6 +6593,7 @@ static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
|
||||
if (!pkey || !ecc)
|
||||
return WOLFSSL_FAILURE;
|
||||
if (ecc->type == ECC_PRIVATEKEY || ecc->type == ECC_PRIVATEKEY_ONLY) {
|
||||
#ifdef HAVE_PKCS8
|
||||
if (wc_EccKeyToPKCS8(ecc, NULL, &derSz) == LENGTH_ONLY_E) {
|
||||
derBuf = (byte*)XMALLOC(derSz, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||
if (derBuf != NULL) {
|
||||
@ -6603,6 +6604,19 @@ static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
derSz = (word32)wc_EccKeyDerSize(ecc, 1);
|
||||
if (derSz > 0) {
|
||||
derBuf = (byte*)XMALLOC(derSz, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||
if (derBuf != NULL) {
|
||||
if (wc_EccKeyToDer(ecc, derBuf, derSz) < 0) {
|
||||
XFREE(derBuf, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||
derBuf = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* HAVE_PKCS8 */
|
||||
}
|
||||
<<<<<<< master
|
||||
else {
|
||||
|
Reference in New Issue
Block a user