Make no-ec2m work again.
[oweals/openssl.git] / fips / ecdsa / fips_ecdsa_selftest.c
1 /* fips/ecdsa/fips_ecdsa_selftest.c */
2
3 #define OPENSSL_FIPSAPI
4
5 #include <string.h>
6 #include <openssl/crypto.h>
7 #include <openssl/ec.h>
8 #include <openssl/ecdsa.h>
9 #include <openssl/fips.h>
10 #include <openssl/err.h>
11 #include <openssl/evp.h>
12 #include <openssl/bn.h>
13
14 #ifdef OPENSSL_FIPS
15
16 static const unsigned char str1[]="12345678901234567890";
17
18 static int corrupt_ecdsa = 0;
19
20 void FIPS_corrupt_ecdsa()
21     {
22     corrupt_ecdsa = 1;
23     }
24
25 int FIPS_selftest_ecdsa()
26     {
27     EC_KEY *ec=NULL;
28     int ret = 0;
29     EVP_MD_CTX mctx;
30     ECDSA_SIG *esig = NULL;
31
32     FIPS_md_ctx_init(&mctx);
33
34     ec = EC_KEY_new_by_curve_name(NID_secp384r1);
35
36     if(ec == NULL)
37         goto err;
38
39     EC_KEY_generate_key(ec);
40
41     if (!FIPS_digestinit(&mctx, EVP_sha512()))
42         goto err;
43     if (!FIPS_digestupdate(&mctx, str1, 20))
44         goto err;
45     esig = FIPS_ecdsa_sign_ctx(ec, &mctx);
46     if (!esig)
47         goto err;
48
49     if (corrupt_ecdsa)
50         BN_add_word(esig->r, 1);
51
52     if (!FIPS_digestinit(&mctx, EVP_sha512()))
53         goto err;
54     if (!FIPS_digestupdate(&mctx, str1, 20))
55         goto err;
56     if (FIPS_ecdsa_verify_ctx(ec, &mctx, esig) != 1)
57         goto err;
58
59     ret = 1;
60
61     err:
62     FIPS_md_ctx_cleanup(&mctx);
63     if (ec)
64         EC_KEY_free(ec);
65     if (esig)
66         FIPS_ecdsa_sig_free(esig);
67     if (ret == 0)
68             FIPSerr(FIPS_F_FIPS_SELFTEST_ECDSA,FIPS_R_SELFTEST_FAILED);
69     return ret;
70     }
71 #endif