Add single call public key sign and verify functions.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user