#define OPENSSL_FIPSAPI
+#include <openssl/crypto.h>
#include <openssl/rand.h>
#include <openssl/fips_rand.h>
#include <openssl/err.h>
#include <openssl/hmac.h>
#include <openssl/rsa.h>
#include <openssl/dsa.h>
+#include <openssl/ecdsa.h>
#include <string.h>
#include <limits.h>
#include "fips_locl.h"
return FIPS_selftest_sha1()
&& FIPS_selftest_hmac()
&& FIPS_selftest_aes()
+ && FIPS_selftest_aes_gcm()
&& FIPS_selftest_des()
&& FIPS_selftest_rsa()
+ && FIPS_selftest_ecdsa()
&& FIPS_selftest_dsa();
}
goto end;
}
+ if (!FIPS_selftest_drbg())
+ {
+ fips_selftest_fail = 1;
+ ret = 0;
+ goto end;
+ }
+
/* Perform RNG KAT before seeding */
if (!FIPS_selftest_rng())
{
unsigned char sigtmp[256], *sig = sigtmp;
unsigned int siglen;
DSA_SIG *dsig = NULL;
+ ECDSA_SIG *esig = NULL;
EVP_MD_CTX mctx;
FIPS_md_ctx_init(&mctx);
if (!dsig)
goto error;
}
+ else if (pkey->type == EVP_PKEY_EC)
+ {
+ esig = FIPS_ecdsa_sign_ctx(pkey->pkey.ec, &mctx);
+ if (!esig)
+ goto error;
+ }
#if 0
else if (!EVP_SignFinal(&mctx, sig, &siglen, pkey))
goto error;
{
ret = FIPS_dsa_verify_ctx(pkey->pkey.dsa, &mctx, dsig);
}
+ else if (pkey->type == EVP_PKEY_EC)
+ {
+ ret = FIPS_ecdsa_verify_ctx(pkey->pkey.ec, &mctx, esig);
+ }
#if 0
else
ret = EVP_VerifyFinal(&mctx, sig, siglen, pkey);
error:
if (dsig != NULL)
FIPS_dsa_sig_free(dsig);
+ if (esig != NULL)
+ FIPS_ecdsa_sig_free(esig);
if (sig != sigtmp)
OPENSSL_free(sig);
FIPS_md_ctx_cleanup(&mctx);