Latest update.
This commit is contained in:
+22
-6
@@ -20,13 +20,23 @@
|
||||
|
||||
#include "ct_local.h"
|
||||
|
||||
SCT_CTX *SCT_CTX_new(void)
|
||||
SCT_CTX *SCT_CTX_new(OPENSSL_CTX *libctx, const char *propq)
|
||||
{
|
||||
SCT_CTX *sctx = OPENSSL_zalloc(sizeof(*sctx));
|
||||
|
||||
if (sctx == NULL)
|
||||
CTerr(CT_F_SCT_CTX_NEW, ERR_R_MALLOC_FAILURE);
|
||||
|
||||
sctx->libctx = libctx;
|
||||
if (propq != NULL) {
|
||||
sctx->propq = OPENSSL_strdup(propq);
|
||||
if (sctx->propq == NULL) {
|
||||
CTerr(CT_F_SCT_CTX_NEW, ERR_R_MALLOC_FAILURE);
|
||||
OPENSSL_free(sctx);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return sctx;
|
||||
}
|
||||
|
||||
@@ -39,6 +49,7 @@ void SCT_CTX_free(SCT_CTX *sctx)
|
||||
OPENSSL_free(sctx->ihash);
|
||||
OPENSSL_free(sctx->certder);
|
||||
OPENSSL_free(sctx->preder);
|
||||
OPENSSL_free(sctx->propq);
|
||||
OPENSSL_free(sctx);
|
||||
}
|
||||
|
||||
@@ -191,13 +202,17 @@ err:
|
||||
return 0;
|
||||
}
|
||||
|
||||
__owur static int ct_public_key_hash(X509_PUBKEY *pkey, unsigned char **hash,
|
||||
size_t *hash_len)
|
||||
__owur static int ct_public_key_hash(SCT_CTX *sctx, X509_PUBKEY *pkey,
|
||||
unsigned char **hash, size_t *hash_len)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned char *md = NULL, *der = NULL;
|
||||
int der_len;
|
||||
unsigned int md_len;
|
||||
EVP_MD *sha256 = EVP_MD_fetch(sctx->libctx, "SHA2-256", sctx->propq);
|
||||
|
||||
if (sha256 == NULL)
|
||||
goto err;
|
||||
|
||||
/* Reuse buffer if possible */
|
||||
if (*hash != NULL && *hash_len >= SHA256_DIGEST_LENGTH) {
|
||||
@@ -213,7 +228,7 @@ __owur static int ct_public_key_hash(X509_PUBKEY *pkey, unsigned char **hash,
|
||||
if (der_len <= 0)
|
||||
goto err;
|
||||
|
||||
if (!EVP_Digest(der, der_len, md, &md_len, EVP_sha256(), NULL))
|
||||
if (!EVP_Digest(der, der_len, md, &md_len, sha256, NULL))
|
||||
goto err;
|
||||
|
||||
if (md != *hash) {
|
||||
@@ -225,6 +240,7 @@ __owur static int ct_public_key_hash(X509_PUBKEY *pkey, unsigned char **hash,
|
||||
md = NULL;
|
||||
ret = 1;
|
||||
err:
|
||||
EVP_MD_free(sha256);
|
||||
OPENSSL_free(md);
|
||||
OPENSSL_free(der);
|
||||
return ret;
|
||||
@@ -237,7 +253,7 @@ int SCT_CTX_set1_issuer(SCT_CTX *sctx, const X509 *issuer)
|
||||
|
||||
int SCT_CTX_set1_issuer_pubkey(SCT_CTX *sctx, X509_PUBKEY *pubkey)
|
||||
{
|
||||
return ct_public_key_hash(pubkey, &sctx->ihash, &sctx->ihashlen);
|
||||
return ct_public_key_hash(sctx, pubkey, &sctx->ihash, &sctx->ihashlen);
|
||||
}
|
||||
|
||||
int SCT_CTX_set1_pubkey(SCT_CTX *sctx, X509_PUBKEY *pubkey)
|
||||
@@ -247,7 +263,7 @@ int SCT_CTX_set1_pubkey(SCT_CTX *sctx, X509_PUBKEY *pubkey)
|
||||
if (pkey == NULL)
|
||||
return 0;
|
||||
|
||||
if (!ct_public_key_hash(pubkey, &sctx->pkeyhash, &sctx->pkeyhashlen)) {
|
||||
if (!ct_public_key_hash(sctx, pubkey, &sctx->pkeyhash, &sctx->pkeyhashlen)) {
|
||||
EVP_PKEY_free(pkey);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user