Add single call public key sign and verify functions.

This commit is contained in:
Dr. Stephen Henson
2011-11-05 01:32:52 +00:00
parent b7de76b74d
commit 485ef852ac
13 changed files with 117 additions and 85 deletions

View File

@@ -87,3 +87,28 @@ int FIPS_ecdsa_verify_ctx(EC_KEY *key, EVP_MD_CTX *ctx, ECDSA_SIG *s)
return ret;
}
int FIPS_ecdsa_verify(EC_KEY *key, const unsigned char *msg, size_t msglen,
const EVP_MD *mhash, ECDSA_SIG *s)
{
int ret=-1;
unsigned char dig[EVP_MAX_MD_SIZE];
unsigned int dlen;
FIPS_digest(msg, msglen, dig, &dlen, mhash);
ret=FIPS_ecdsa_verify_digest(key, dig, dlen, s);
OPENSSL_cleanse(dig, dlen);
return ret;
}
ECDSA_SIG * FIPS_ecdsa_sign(EC_KEY *key,
const unsigned char *msg, size_t msglen,
const EVP_MD *mhash)
{
ECDSA_SIG *s;
unsigned char dig[EVP_MAX_MD_SIZE];
unsigned int dlen;
FIPS_digest(msg, msglen, dig, &dlen, mhash);
s = FIPS_dsa_sign_digest(key, dig, dlen);
OPENSSL_cleanse(dig, dlen);
return s;
}

View File

@@ -308,8 +308,6 @@ static int SigGen(FILE *in, FILE *out)
EC_KEY *key = NULL;
ECDSA_SIG *sig = NULL;
const EVP_MD *digest = NULL;
EVP_MD_CTX mctx;
EVP_MD_CTX_init(&mctx);
Qx = BN_new();
Qy = BN_new();
while(fgets(buf, sizeof buf, in) != NULL)
@@ -345,9 +343,7 @@ static int SigGen(FILE *in, FILE *out)
return 0;
}
FIPS_digestinit(&mctx, digest);
FIPS_digestupdate(&mctx, msg, mlen);
sig = FIPS_ecdsa_sign_ctx(key, &mctx);
sig = FIPS_ecdsa_sign(key, msg, mlen, digest);
if (!sig)
{
@@ -369,7 +365,6 @@ static int SigGen(FILE *in, FILE *out)
}
BN_free(Qx);
BN_free(Qy);
FIPS_md_ctx_cleanup(&mctx);
return 1;
}
@@ -384,8 +379,6 @@ static int SigVer(FILE *in, FILE *out)
EC_KEY *key = NULL;
ECDSA_SIG sg, *sig = &sg;
const EVP_MD *digest = NULL;
EVP_MD_CTX mctx;
EVP_MD_CTX_init(&mctx);
sig->r = NULL;
sig->s = NULL;
while(fgets(buf, sizeof buf, in) != NULL)
@@ -450,10 +443,8 @@ static int SigVer(FILE *in, FILE *out)
return 0;
}
FIPS_digestinit(&mctx, digest);
FIPS_digestupdate(&mctx, msg, mlen);
no_err = 1;
rv = FIPS_ecdsa_verify_ctx(key, &mctx, sig);
rv = FIPS_ecdsa_verify(key, msg, mlen, digest, sig);
EC_KEY_free(key);
if (msg)
OPENSSL_free(msg);
@@ -471,7 +462,6 @@ static int SigVer(FILE *in, FILE *out)
BN_free(Qx);
if (Qy)
BN_free(Qy);
EVP_MD_CTX_cleanup(&mctx);
return 1;
}
#ifdef FIPS_ALGVS