implement CTX check private key function

This commit is contained in:
Jacob Barthelmeh
2017-04-25 15:21:31 -06:00
parent 86deb23d2f
commit b369112ed3
3 changed files with 50 additions and 10 deletions

View File

@ -6336,15 +6336,49 @@ int wolfSSL_CertManagerLoadCA(WOLFSSL_CERT_MANAGER* cm, const char* file,
}
#ifndef NO_WOLFSSL_STUB
int wolfSSL_CTX_check_private_key(WOLFSSL_CTX* ctx)
/* Check private against public in certificate for match
*
* ctx WOLFSSL_CTX structure to check private key in
*
* Returns SSL_SUCCESS on good private key and SSL_FAILURE if miss matched. */
int wolfSSL_CTX_check_private_key(const WOLFSSL_CTX* ctx)
{
/* TODO: check private against public for RSA match */
(void)ctx;
WOLFSSL_STUB("SSL_CTX_check_private_key");
return SSL_SUCCESS;
}
DecodedCert der;
word32 size;
byte* buff;
int ret;
WOLFSSL_ENTER("wolfSSL_CTX_check_private_key");
if (ctx == NULL) {
return SSL_FAILURE;
}
#ifndef NO_CERTS
size = ctx->certificate->length;
buff = ctx->certificate->buffer;
InitDecodedCert(&der, buff, size, ctx->heap);
if (ParseCertRelative(&der, CERT_TYPE, NO_VERIFY, NULL) != 0) {
FreeDecodedCert(&der);
return SSL_FAILURE;
}
size = ctx->privateKey->length;
buff = ctx->privateKey->buffer;
ret = wc_CheckPrivateKey(buff, size, &der);
FreeDecodedCert(&der);
if (ret == 1) {
return SSL_SUCCESS;
}
else {
return SSL_FAILURE;
}
#else
WOLFSSL_MSG("NO_CERTS is defined, can not check private key");
return SSL_FAILURE;
#endif
}
#ifdef HAVE_CRL

View File

@ -13563,8 +13563,14 @@ static void test_wolfSSL_certs(void)
printf(testingFmt, "wolfSSL_certs()");
AssertNotNull(ctx = SSL_CTX_new(wolfSSLv23_server_method()));
AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCertFile, WOLFSSL_FILETYPE_PEM));
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKeyFile, WOLFSSL_FILETYPE_PEM));
AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCertFile, SSL_FILETYPE_PEM));
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKeyFile, SSL_FILETYPE_PEM));
#ifndef HAVE_USER_RSA
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, cliKeyFile, SSL_FILETYPE_PEM));
AssertIntEQ(SSL_CTX_check_private_key(ctx), SSL_FAILURE);
AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKeyFile, SSL_FILETYPE_PEM));
AssertIntEQ(SSL_CTX_check_private_key(ctx), SSL_SUCCESS);
#endif
AssertNotNull(ssl = SSL_new(ctx));
AssertIntEQ(wolfSSL_check_private_key(ssl), WOLFSSL_SUCCESS);

View File

@ -1369,7 +1369,7 @@ WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long);
#ifndef NO_CERTS
WOLFSSL_API int wolfSSL_CTX_check_private_key(WOLFSSL_CTX*);
WOLFSSL_API int wolfSSL_CTX_check_private_key(const WOLFSSL_CTX*);
#endif /* !NO_CERTS */
WOLFSSL_API void wolfSSL_ERR_free_strings(void);