Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 1 | /* ==================================================================== |
Dr. Stephen Henson | 87829ac | 2011-05-29 15:56:23 +0000 | [diff] [blame] | 2 | * Copyright (c) 2011 The OpenSSL Project. All rights reserved. |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 3 | * |
| 4 | * Redistribution and use in source and binary forms, with or without |
| 5 | * modification, are permitted provided that the following conditions |
| 6 | * are met: |
| 7 | * |
| 8 | * 1. Redistributions of source code must retain the above copyright |
| 9 | * notice, this list of conditions and the following disclaimer. |
| 10 | * |
| 11 | * 2. Redistributions in binary form must reproduce the above copyright |
| 12 | * notice, this list of conditions and the following disclaimer in |
| 13 | * the documentation and/or other materials provided with the |
| 14 | * distribution. |
| 15 | * |
| 16 | * 3. All advertising materials mentioning features or use of this |
| 17 | * software must display the following acknowledgment: |
| 18 | * "This product includes software developed by the OpenSSL Project |
| 19 | * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" |
| 20 | * |
| 21 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to |
| 22 | * endorse or promote products derived from this software without |
| 23 | * prior written permission. For written permission, please contact |
| 24 | * openssl-core@openssl.org. |
| 25 | * |
| 26 | * 5. Products derived from this software may not be called "OpenSSL" |
| 27 | * nor may "OpenSSL" appear in their names without prior written |
| 28 | * permission of the OpenSSL Project. |
| 29 | * |
| 30 | * 6. Redistributions of any form whatsoever must retain the following |
| 31 | * acknowledgment: |
| 32 | * "This product includes software developed by the OpenSSL Project |
| 33 | * for use in the OpenSSL Toolkit (http://www.openssl.org/)" |
| 34 | * |
| 35 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY |
| 36 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 37 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| 38 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR |
| 39 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 40 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| 41 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 42 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 43 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| 44 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 45 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
| 46 | * OF THE POSSIBILITY OF SUCH DAMAGE. |
| 47 | * |
| 48 | */ |
| 49 | |
| 50 | #include <openssl/opensslconf.h> |
Dr. Stephen Henson | 644ce07 | 2011-06-06 11:56:58 +0000 | [diff] [blame] | 51 | #include <stdarg.h> |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 52 | |
| 53 | #ifndef OPENSSL_FIPS |
| 54 | #error FIPS is disabled. |
| 55 | #endif |
| 56 | |
| 57 | #ifdef OPENSSL_FIPS |
| 58 | |
| 59 | #ifdef __cplusplus |
| 60 | extern "C" { |
| 61 | #endif |
| 62 | |
Dr. Stephen Henson | 549c4ad | 2011-06-03 16:26:58 +0000 | [diff] [blame] | 63 | #ifndef OPENSSL_FIPSCANISTER |
| 64 | #define OPENSSL_FIPSCAPABLE |
| 65 | #endif |
| 66 | |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 67 | struct dsa_st; |
Dr. Stephen Henson | cac4fb5 | 2011-04-23 19:55:55 +0000 | [diff] [blame] | 68 | struct ec_key_st; |
Dr. Stephen Henson | 7edfe67 | 2011-01-27 19:10:56 +0000 | [diff] [blame] | 69 | struct rsa_st; |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 70 | struct evp_pkey_st; |
| 71 | struct env_md_st; |
Dr. Stephen Henson | 0cabe4e | 2011-06-02 17:30:22 +0000 | [diff] [blame] | 72 | struct env_md_ctx_st; |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 73 | struct evp_cipher_st; |
| 74 | struct evp_cipher_ctx_st; |
Dr. Stephen Henson | 7f0d1be | 2011-06-06 15:24:02 +0000 | [diff] [blame] | 75 | struct ec_method_st; |
| 76 | struct ecdsa_method; |
Dr. Stephen Henson | 4960411 | 2011-06-08 15:53:08 +0000 | [diff] [blame] | 77 | struct dh_method; |
Dr. Stephen Henson | e6e7b4e | 2011-06-12 14:11:57 +0000 | [diff] [blame] | 78 | struct CMAC_CTX_st; |
Dr. Stephen Henson | 0435dc1 | 2011-06-12 15:02:53 +0000 | [diff] [blame] | 79 | struct hmac_ctx_st; |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 80 | |
Dr. Stephen Henson | 01a9a75 | 2011-07-04 23:38:16 +0000 | [diff] [blame] | 81 | unsigned long FIPS_module_version(void); |
| 82 | const char *FIPS_module_version_text(void); |
| 83 | |
Dr. Stephen Henson | 5e4eb99 | 2011-10-19 22:34:53 +0000 | [diff] [blame] | 84 | int FIPS_module_mode_set(int onoff, const char *auth); |
Dr. Stephen Henson | c2fd598 | 2011-05-11 14:43:38 +0000 | [diff] [blame] | 85 | int FIPS_module_mode(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 86 | const void *FIPS_rand_check(void); |
| 87 | int FIPS_selftest(void); |
| 88 | int FIPS_selftest_failed(void); |
| 89 | void FIPS_selftest_check(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 90 | int FIPS_selftest_sha1(void); |
Dr. Stephen Henson | cb1b3aa | 2011-04-19 18:57:58 +0000 | [diff] [blame] | 91 | int FIPS_selftest_aes_ccm(void); |
Dr. Stephen Henson | acf254f | 2011-02-18 17:09:33 +0000 | [diff] [blame] | 92 | int FIPS_selftest_aes_gcm(void); |
Dr. Stephen Henson | bf8131f | 2011-04-15 11:30:19 +0000 | [diff] [blame] | 93 | int FIPS_selftest_aes_xts(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 94 | int FIPS_selftest_aes(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 95 | int FIPS_selftest_des(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 96 | int FIPS_selftest_rsa(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 97 | int FIPS_selftest_dsa(void); |
Dr. Stephen Henson | 947ff11 | 2011-02-18 17:25:00 +0000 | [diff] [blame] | 98 | int FIPS_selftest_ecdsa(void); |
Dr. Stephen Henson | 2bfeb7d | 2011-09-29 23:08:23 +0000 | [diff] [blame] | 99 | int FIPS_selftest_ecdh(void); |
Dr. Stephen Henson | f45c90b | 2011-11-05 18:14:42 +0000 | [diff] [blame] | 100 | void FIPS_x931_stick(int onoff); |
| 101 | void FIPS_drbg_stick(int onoff); |
Dr. Stephen Henson | cab0595 | 2011-04-05 12:42:31 +0000 | [diff] [blame] | 102 | int FIPS_selftest_x931(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 103 | int FIPS_selftest_hmac(void); |
Dr. Stephen Henson | fbbabb6 | 2011-03-16 15:52:12 +0000 | [diff] [blame] | 104 | int FIPS_selftest_drbg(void); |
Dr. Stephen Henson | a11f06b | 2011-09-12 18:47:39 +0000 | [diff] [blame] | 105 | int FIPS_selftest_drbg_all(void); |
Richard Levitte | 399aa6b | 2011-03-24 22:55:02 +0000 | [diff] [blame] | 106 | int FIPS_selftest_cmac(void); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 107 | |
| 108 | unsigned int FIPS_incore_fingerprint(unsigned char *sig,unsigned int len); |
| 109 | int FIPS_check_incore_fingerprint(void); |
| 110 | |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 111 | void fips_set_selftest_fail(void); |
| 112 | int fips_check_rsa(struct rsa_st *rsa); |
Dr. Stephen Henson | cac4fb5 | 2011-04-23 19:55:55 +0000 | [diff] [blame] | 113 | int fips_check_rsa_prng(struct rsa_st *rsa, int bits); |
| 114 | int fips_check_dsa_prng(struct dsa_st *dsa, size_t L, size_t N); |
| 115 | int fips_check_ec_prng(struct ec_key_st *ec); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 116 | |
Dr. Stephen Henson | c876a4b | 2011-02-14 17:05:42 +0000 | [diff] [blame] | 117 | void FIPS_set_locking_callbacks(void (*func)(int mode, int type, |
| 118 | const char *file,int line), |
| 119 | int (*add_cb)(int *pointer, int amount, |
| 120 | int type, const char *file, int line)); |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 121 | |
Dr. Stephen Henson | 644ce07 | 2011-06-06 11:56:58 +0000 | [diff] [blame] | 122 | void FIPS_set_error_callbacks( |
| 123 | void (*put_cb)(int lib, int func,int reason,const char *file,int line), |
| 124 | void (*add_cb)(int num, va_list args) ); |
| 125 | |
Dr. Stephen Henson | 8cf8877 | 2011-04-01 16:23:16 +0000 | [diff] [blame] | 126 | void FIPS_set_malloc_callbacks( |
| 127 | void *(*malloc_cb)(int num, const char *file, int line), |
| 128 | void (*free_cb)(void *)); |
| 129 | |
Dr. Stephen Henson | 6653c6f | 2011-04-06 23:40:22 +0000 | [diff] [blame] | 130 | void FIPS_get_timevec(unsigned char *buf, unsigned long *pctr); |
| 131 | |
Dr. Stephen Henson | ac892b7 | 2011-04-14 11:15:10 +0000 | [diff] [blame] | 132 | /* POST callback operation value: */ |
| 133 | /* All tests started */ |
| 134 | #define FIPS_POST_BEGIN 1 |
| 135 | /* All tests end: result in id */ |
| 136 | #define FIPS_POST_END 2 |
| 137 | /* One individual test started */ |
| 138 | #define FIPS_POST_STARTED 3 |
| 139 | /* Individual test success */ |
| 140 | #define FIPS_POST_SUCCESS 4 |
| 141 | /* Individual test failure */ |
| 142 | #define FIPS_POST_FAIL 5 |
| 143 | /* Induce failure in test if zero return */ |
| 144 | #define FIPS_POST_CORRUPT 6 |
| 145 | |
| 146 | /* Test IDs */ |
| 147 | /* HMAC integrity test */ |
| 148 | #define FIPS_TEST_INTEGRITY 1 |
| 149 | /* Digest test */ |
| 150 | #define FIPS_TEST_DIGEST 2 |
| 151 | /* Symmetric cipher test */ |
| 152 | #define FIPS_TEST_CIPHER 3 |
| 153 | /* Public key signature test */ |
| 154 | #define FIPS_TEST_SIGNATURE 4 |
| 155 | /* HMAC test */ |
| 156 | #define FIPS_TEST_HMAC 5 |
| 157 | /* CMAC test */ |
| 158 | #define FIPS_TEST_CMAC 6 |
| 159 | /* GCM test */ |
| 160 | #define FIPS_TEST_GCM 7 |
| 161 | /* CCM test */ |
| 162 | #define FIPS_TEST_CCM 8 |
| 163 | /* XTS test */ |
| 164 | #define FIPS_TEST_XTS 9 |
| 165 | /* X9.31 PRNG */ |
| 166 | #define FIPS_TEST_X931 10 |
| 167 | /* DRNB */ |
| 168 | #define FIPS_TEST_DRBG 11 |
| 169 | /* Keygen pairwise consistency test */ |
| 170 | #define FIPS_TEST_PAIRWISE 12 |
| 171 | /* Continuous PRNG test */ |
| 172 | #define FIPS_TEST_CONTINUOUS 13 |
Dr. Stephen Henson | 2bfeb7d | 2011-09-29 23:08:23 +0000 | [diff] [blame] | 173 | /* ECDH test */ |
| 174 | #define FIPS_TEST_ECDH 14 |
Dr. Stephen Henson | ac892b7 | 2011-04-14 11:15:10 +0000 | [diff] [blame] | 175 | |
Dr. Stephen Henson | 5e4eb99 | 2011-10-19 22:34:53 +0000 | [diff] [blame] | 176 | /* Minimum authorisation string length */ |
| 177 | #define FIPS_AUTH_MIN_LEN 16 |
| 178 | |
Dr. Stephen Henson | ac892b7 | 2011-04-14 11:15:10 +0000 | [diff] [blame] | 179 | void FIPS_post_set_callback( |
| 180 | int (*post_cb)(int op, int id, int subid, void *ex)); |
| 181 | |
Dr. Stephen Henson | 25c6542 | 2011-02-15 16:03:47 +0000 | [diff] [blame] | 182 | #define FIPS_ERROR_IGNORED(alg) OpenSSLDie(__FILE__, __LINE__, \ |
| 183 | alg " previous FIPS forbidden algorithm error ignored"); |
| 184 | |
Dr. Stephen Henson | ac892b7 | 2011-04-14 11:15:10 +0000 | [diff] [blame] | 185 | int fips_pkey_signature_test(int id, struct evp_pkey_st *pkey, |
| 186 | const unsigned char *tbs, size_t tbslen, |
| 187 | const unsigned char *kat, size_t katlen, |
| 188 | const struct env_md_st *digest, int pad_mode, |
| 189 | const char *fail_str); |
| 190 | |
| 191 | int fips_cipher_test(int id, struct evp_cipher_ctx_st *ctx, |
| 192 | const struct evp_cipher_st *cipher, |
| 193 | const unsigned char *key, |
| 194 | const unsigned char *iv, |
| 195 | const unsigned char *plaintext, |
| 196 | const unsigned char *ciphertext, |
| 197 | int len); |
| 198 | |
Dr. Stephen Henson | 0cabe4e | 2011-06-02 17:30:22 +0000 | [diff] [blame] | 199 | const struct env_md_st *FIPS_get_digestbynid(int nid); |
| 200 | |
Dr. Stephen Henson | 1509485 | 2011-09-14 13:25:48 +0000 | [diff] [blame] | 201 | const struct evp_cipher_st *FIPS_get_cipherbynid(int nid); |
| 202 | |
Dr. Stephen Henson | 0cabe4e | 2011-06-02 17:30:22 +0000 | [diff] [blame] | 203 | struct rsa_st *FIPS_rsa_new(void); |
| 204 | void FIPS_rsa_free(struct rsa_st *r); |
| 205 | int FIPS_rsa_sign_ctx(struct rsa_st *rsa, struct env_md_ctx_st *ctx, |
| 206 | int rsa_pad_mode, int saltlen, |
| 207 | const struct env_md_st *mgf1Hash, |
| 208 | unsigned char *sigret, unsigned int *siglen); |
| 209 | int FIPS_rsa_sign_digest(struct rsa_st *rsa, |
| 210 | const unsigned char *md, int md_len, |
| 211 | const struct env_md_st *mhash, |
| 212 | int rsa_pad_mode, int saltlen, |
| 213 | const struct env_md_st *mgf1Hash, |
| 214 | unsigned char *sigret, unsigned int *siglen); |
| 215 | int FIPS_rsa_verify_ctx(struct rsa_st *rsa, struct env_md_ctx_st *ctx, |
| 216 | int rsa_pad_mode, int saltlen, |
| 217 | const struct env_md_st *mgf1Hash, |
Dr. Stephen Henson | 267229b | 2011-06-03 12:38:18 +0000 | [diff] [blame] | 218 | const unsigned char *sigbuf, unsigned int siglen); |
Dr. Stephen Henson | 0cabe4e | 2011-06-02 17:30:22 +0000 | [diff] [blame] | 219 | int FIPS_rsa_verify_digest(struct rsa_st *rsa, |
| 220 | const unsigned char *dig, int diglen, |
| 221 | const struct env_md_st *mhash, |
| 222 | int rsa_pad_mode, int saltlen, |
| 223 | const struct env_md_st *mgf1Hash, |
Dr. Stephen Henson | 267229b | 2011-06-03 12:38:18 +0000 | [diff] [blame] | 224 | const unsigned char *sigbuf, unsigned int siglen); |
Dr. Stephen Henson | 0cabe4e | 2011-06-02 17:30:22 +0000 | [diff] [blame] | 225 | |
Dr. Stephen Henson | f4324e5 | 2011-11-05 01:34:36 +0000 | [diff] [blame] | 226 | int FIPS_rsa_sign(struct rsa_st *rsa, const unsigned char *msg, int msglen, |
| 227 | const struct env_md_st *mhash, int rsa_pad_mode, |
| 228 | int saltlen, const struct env_md_st *mgf1Hash, |
| 229 | unsigned char *sigret, unsigned int *siglen); |
| 230 | |
| 231 | int FIPS_rsa_verify(struct rsa_st *rsa, const unsigned char *msg, int msglen, |
| 232 | const struct env_md_st *mhash, int rsa_pad_mode, |
| 233 | int saltlen, const struct env_md_st *mgf1Hash, |
| 234 | const unsigned char *sigbuf, unsigned int siglen); |
| 235 | |
Dr. Stephen Henson | b08e372 | 2011-06-12 15:37:51 +0000 | [diff] [blame] | 236 | #ifdef OPENSSL_FIPSCAPABLE |
Dr. Stephen Henson | f87ff24 | 2011-05-28 21:03:31 +0000 | [diff] [blame] | 237 | |
Dr. Stephen Henson | c330669 | 2011-05-28 23:02:23 +0000 | [diff] [blame] | 238 | int FIPS_digestinit(EVP_MD_CTX *ctx, const EVP_MD *type); |
Dr. Stephen Henson | 87829ac | 2011-05-29 15:56:23 +0000 | [diff] [blame] | 239 | int FIPS_digestupdate(EVP_MD_CTX *ctx, const void *data, size_t count); |
| 240 | int FIPS_digestfinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size); |
| 241 | int FIPS_md_ctx_cleanup(EVP_MD_CTX *ctx); |
| 242 | |
| 243 | int FIPS_cipherinit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, |
| 244 | const unsigned char *key, const unsigned char *iv, int enc); |
Dr. Stephen Henson | 3e2e231 | 2011-05-29 16:16:55 +0000 | [diff] [blame] | 245 | int FIPS_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
| 246 | const unsigned char *in, unsigned int inl); |
| 247 | int FIPS_cipher_ctx_cleanup(EVP_CIPHER_CTX *c); |
Dr. Stephen Henson | c330669 | 2011-05-28 23:02:23 +0000 | [diff] [blame] | 248 | |
Dr. Stephen Henson | f87ff24 | 2011-05-28 21:03:31 +0000 | [diff] [blame] | 249 | const EVP_CIPHER *FIPS_evp_aes_128_cbc(void); |
| 250 | const EVP_CIPHER *FIPS_evp_aes_128_ccm(void); |
| 251 | const EVP_CIPHER *FIPS_evp_aes_128_cfb1(void); |
| 252 | const EVP_CIPHER *FIPS_evp_aes_128_cfb128(void); |
| 253 | const EVP_CIPHER *FIPS_evp_aes_128_cfb8(void); |
| 254 | const EVP_CIPHER *FIPS_evp_aes_128_ctr(void); |
| 255 | const EVP_CIPHER *FIPS_evp_aes_128_ecb(void); |
| 256 | const EVP_CIPHER *FIPS_evp_aes_128_gcm(void); |
| 257 | const EVP_CIPHER *FIPS_evp_aes_128_ofb(void); |
| 258 | const EVP_CIPHER *FIPS_evp_aes_128_xts(void); |
| 259 | const EVP_CIPHER *FIPS_evp_aes_192_cbc(void); |
| 260 | const EVP_CIPHER *FIPS_evp_aes_192_ccm(void); |
| 261 | const EVP_CIPHER *FIPS_evp_aes_192_cfb1(void); |
| 262 | const EVP_CIPHER *FIPS_evp_aes_192_cfb128(void); |
| 263 | const EVP_CIPHER *FIPS_evp_aes_192_cfb8(void); |
| 264 | const EVP_CIPHER *FIPS_evp_aes_192_ctr(void); |
| 265 | const EVP_CIPHER *FIPS_evp_aes_192_ecb(void); |
| 266 | const EVP_CIPHER *FIPS_evp_aes_192_gcm(void); |
| 267 | const EVP_CIPHER *FIPS_evp_aes_192_ofb(void); |
| 268 | const EVP_CIPHER *FIPS_evp_aes_256_cbc(void); |
| 269 | const EVP_CIPHER *FIPS_evp_aes_256_ccm(void); |
| 270 | const EVP_CIPHER *FIPS_evp_aes_256_cfb1(void); |
| 271 | const EVP_CIPHER *FIPS_evp_aes_256_cfb128(void); |
| 272 | const EVP_CIPHER *FIPS_evp_aes_256_cfb8(void); |
| 273 | const EVP_CIPHER *FIPS_evp_aes_256_ctr(void); |
| 274 | const EVP_CIPHER *FIPS_evp_aes_256_ecb(void); |
| 275 | const EVP_CIPHER *FIPS_evp_aes_256_gcm(void); |
| 276 | const EVP_CIPHER *FIPS_evp_aes_256_ofb(void); |
| 277 | const EVP_CIPHER *FIPS_evp_aes_256_xts(void); |
| 278 | const EVP_CIPHER *FIPS_evp_des_ede(void); |
| 279 | const EVP_CIPHER *FIPS_evp_des_ede3(void); |
| 280 | const EVP_CIPHER *FIPS_evp_des_ede3_cbc(void); |
| 281 | const EVP_CIPHER *FIPS_evp_des_ede3_cfb1(void); |
| 282 | const EVP_CIPHER *FIPS_evp_des_ede3_cfb64(void); |
| 283 | const EVP_CIPHER *FIPS_evp_des_ede3_cfb8(void); |
| 284 | const EVP_CIPHER *FIPS_evp_des_ede3_ecb(void); |
| 285 | const EVP_CIPHER *FIPS_evp_des_ede3_ofb(void); |
| 286 | const EVP_CIPHER *FIPS_evp_des_ede_cbc(void); |
| 287 | const EVP_CIPHER *FIPS_evp_des_ede_cfb64(void); |
| 288 | const EVP_CIPHER *FIPS_evp_des_ede_ecb(void); |
| 289 | const EVP_CIPHER *FIPS_evp_des_ede_ofb(void); |
Dr. Stephen Henson | 279a000 | 2011-06-21 16:14:01 +0000 | [diff] [blame] | 290 | const EVP_CIPHER *FIPS_evp_enc_null(void); |
Dr. Stephen Henson | f87ff24 | 2011-05-28 21:03:31 +0000 | [diff] [blame] | 291 | const EVP_MD *FIPS_evp_sha1(void); |
| 292 | const EVP_MD *FIPS_evp_sha224(void); |
| 293 | const EVP_MD *FIPS_evp_sha256(void); |
| 294 | const EVP_MD *FIPS_evp_sha384(void); |
| 295 | const EVP_MD *FIPS_evp_sha512(void); |
Dr. Stephen Henson | e7ee10d | 2011-06-01 14:18:28 +0000 | [diff] [blame] | 296 | const EVP_MD *FIPS_evp_dss1(void); |
| 297 | const EVP_MD *FIPS_evp_dss(void); |
| 298 | const EVP_MD *FIPS_evp_ecdsa(void); |
Dr. Stephen Henson | f87ff24 | 2011-05-28 21:03:31 +0000 | [diff] [blame] | 299 | |
Dr. Stephen Henson | 0cabe4e | 2011-06-02 17:30:22 +0000 | [diff] [blame] | 300 | const RSA_METHOD *FIPS_rsa_pkcs1_ssleay(void); |
Dr. Stephen Henson | 549c4ad | 2011-06-03 16:26:58 +0000 | [diff] [blame] | 301 | int FIPS_rsa_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); |
Dr. Stephen Henson | 0cabe4e | 2011-06-02 17:30:22 +0000 | [diff] [blame] | 302 | |
Dr. Stephen Henson | da92341 | 2011-06-09 13:50:53 +0000 | [diff] [blame] | 303 | const struct dsa_method *FIPS_dsa_openssl(void); |
Dr. Stephen Henson | 603bc93 | 2011-06-09 15:18:55 +0000 | [diff] [blame] | 304 | int FIPS_dsa_generate_key(DSA *dsa); |
Dr. Stephen Henson | da92341 | 2011-06-09 13:50:53 +0000 | [diff] [blame] | 305 | int FIPS_dsa_generate_parameters_ex(DSA *dsa, int bits, |
| 306 | const unsigned char *seed,int seed_len, |
| 307 | int *counter_ret, unsigned long *h_ret, BN_GENCB *cb); |
| 308 | |
| 309 | int fips_dsa_builtin_paramgen2(DSA *ret, size_t L, size_t N, |
| 310 | const EVP_MD *evpmd, const unsigned char *seed_in, size_t seed_len, |
| 311 | unsigned char *seed_out, |
Dr. Stephen Henson | 603bc93 | 2011-06-09 15:18:55 +0000 | [diff] [blame] | 312 | int *counter_ret, unsigned long *h_ret, BN_GENCB *cb); |
Dr. Stephen Henson | da92341 | 2011-06-09 13:50:53 +0000 | [diff] [blame] | 313 | |
Dr. Stephen Henson | 4960411 | 2011-06-08 15:53:08 +0000 | [diff] [blame] | 314 | const struct ec_method_st *fips_ec_gf2m_simple_method(void); |
| 315 | const struct ec_method_st *fips_ec_gfp_simple_method(void); |
| 316 | const struct ec_method_st *fips_ec_gfp_mont_method(void); |
| 317 | const struct ec_method_st *fips_ec_gfp_nist_method(void); |
Dr. Stephen Henson | 7f0d1be | 2011-06-06 15:24:02 +0000 | [diff] [blame] | 318 | |
Dr. Stephen Henson | 4960411 | 2011-06-08 15:53:08 +0000 | [diff] [blame] | 319 | const struct ecdsa_method *FIPS_ecdsa_openssl(void); |
| 320 | const struct ecdh_method *FIPS_ecdh_openssl(void); |
Dr. Stephen Henson | 7f0d1be | 2011-06-06 15:24:02 +0000 | [diff] [blame] | 321 | |
| 322 | int FIPS_ec_key_generate_key(struct ec_key_st *key); |
| 323 | |
Dr. Stephen Henson | 4960411 | 2011-06-08 15:53:08 +0000 | [diff] [blame] | 324 | const struct dh_method *FIPS_dh_openssl(void); |
Dr. Stephen Henson | 603bc93 | 2011-06-09 15:18:55 +0000 | [diff] [blame] | 325 | int FIPS_dh_generate_parameters_ex(DH *dh, int prime_len, |
| 326 | int generator, BN_GENCB *cb); |
Dr. Stephen Henson | 4960411 | 2011-06-08 15:53:08 +0000 | [diff] [blame] | 327 | |
Dr. Stephen Henson | e6e7b4e | 2011-06-12 14:11:57 +0000 | [diff] [blame] | 328 | int FIPS_cmac_init(struct CMAC_CTX_st *ctx, const void *key, size_t keylen, |
| 329 | const EVP_CIPHER *cipher, ENGINE *impl); |
| 330 | int FIPS_cmac_update(struct CMAC_CTX_st *ctx, const void *in, size_t dlen); |
| 331 | int FIPS_cmac_final(struct CMAC_CTX_st *ctx, unsigned char *out, |
| 332 | size_t *poutlen); |
| 333 | void FIPS_cmac_ctx_cleanup(struct CMAC_CTX_st *ctx); |
| 334 | |
Dr. Stephen Henson | 0435dc1 | 2011-06-12 15:02:53 +0000 | [diff] [blame] | 335 | void FIPS_hmac_ctx_cleanup(struct hmac_ctx_st *ctx); |
| 336 | int FIPS_hmac_init_ex(struct hmac_ctx_st *ctx, const void *key, int len, |
| 337 | const EVP_MD *md, ENGINE *impl); |
| 338 | int FIPS_hmac_update(struct hmac_ctx_st *ctx, |
| 339 | const unsigned char *data, size_t len); |
| 340 | int FIPS_hmac_final(struct hmac_ctx_st *ctx, |
| 341 | unsigned char *md, unsigned int *len); |
| 342 | |
Dr. Stephen Henson | f87ff24 | 2011-05-28 21:03:31 +0000 | [diff] [blame] | 343 | #endif |
| 344 | |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 345 | /* BEGIN ERROR CODES */ |
| 346 | /* The following lines are auto generated by the script mkerr.pl. Any changes |
| 347 | * made after this point may be overwritten when the script is next run. |
| 348 | */ |
| 349 | void ERR_load_FIPS_strings(void); |
| 350 | |
| 351 | /* Error codes for the FIPS functions. */ |
| 352 | |
| 353 | /* Function codes. */ |
| 354 | #define FIPS_F_DH_BUILTIN_GENPARAMS 100 |
Dr. Stephen Henson | 74fac92 | 2011-04-22 11:12:56 +0000 | [diff] [blame] | 355 | #define FIPS_F_DH_INIT 148 |
Dr. Stephen Henson | 43760a2 | 2011-10-20 13:56:01 +0000 | [diff] [blame] | 356 | #define FIPS_F_DRBG_RESEED 162 |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 357 | #define FIPS_F_DSA_BUILTIN_PARAMGEN 101 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 358 | #define FIPS_F_DSA_BUILTIN_PARAMGEN2 102 |
| 359 | #define FIPS_F_DSA_DO_SIGN 103 |
| 360 | #define FIPS_F_DSA_DO_VERIFY 104 |
Dr. Stephen Henson | 5fd7226 | 2011-10-22 17:24:27 +0000 | [diff] [blame] | 361 | #define FIPS_F_ECDH_COMPUTE_KEY 163 |
| 362 | #define FIPS_F_ECDSA_DO_SIGN 164 |
| 363 | #define FIPS_F_ECDSA_DO_VERIFY 165 |
| 364 | #define FIPS_F_EC_KEY_GENERATE_KEY 166 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 365 | #define FIPS_F_FIPS_CHECK_DSA 105 |
Dr. Stephen Henson | cac4fb5 | 2011-04-23 19:55:55 +0000 | [diff] [blame] | 366 | #define FIPS_F_FIPS_CHECK_DSA_PRNG 151 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 367 | #define FIPS_F_FIPS_CHECK_EC 106 |
Dr. Stephen Henson | cac4fb5 | 2011-04-23 19:55:55 +0000 | [diff] [blame] | 368 | #define FIPS_F_FIPS_CHECK_EC_PRNG 152 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 369 | #define FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT 107 |
| 370 | #define FIPS_F_FIPS_CHECK_RSA 108 |
Dr. Stephen Henson | cac4fb5 | 2011-04-23 19:55:55 +0000 | [diff] [blame] | 371 | #define FIPS_F_FIPS_CHECK_RSA_PRNG 150 |
Dr. Stephen Henson | ad47849 | 2011-05-06 17:38:39 +0000 | [diff] [blame] | 372 | #define FIPS_F_FIPS_CIPHER 160 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 373 | #define FIPS_F_FIPS_CIPHERINIT 109 |
Dr. Stephen Henson | ad47849 | 2011-05-06 17:38:39 +0000 | [diff] [blame] | 374 | #define FIPS_F_FIPS_CIPHER_CTX_CTRL 161 |
| 375 | #define FIPS_F_FIPS_DIGESTFINAL 158 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 376 | #define FIPS_F_FIPS_DIGESTINIT 110 |
Dr. Stephen Henson | ad47849 | 2011-05-06 17:38:39 +0000 | [diff] [blame] | 377 | #define FIPS_F_FIPS_DIGESTUPDATE 159 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 378 | #define FIPS_F_FIPS_DRBG_BYTES 111 |
Dr. Stephen Henson | 14264b1 | 2011-04-20 17:06:38 +0000 | [diff] [blame] | 379 | #define FIPS_F_FIPS_DRBG_CHECK 146 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 380 | #define FIPS_F_FIPS_DRBG_CPRNG_TEST 112 |
Dr. Stephen Henson | 43760a2 | 2011-10-20 13:56:01 +0000 | [diff] [blame] | 381 | #define FIPS_F_FIPS_DRBG_ERROR_CHECK 114 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 382 | #define FIPS_F_FIPS_DRBG_GENERATE 113 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 383 | #define FIPS_F_FIPS_DRBG_INIT 115 |
| 384 | #define FIPS_F_FIPS_DRBG_INSTANTIATE 116 |
| 385 | #define FIPS_F_FIPS_DRBG_NEW 117 |
| 386 | #define FIPS_F_FIPS_DRBG_RESEED 118 |
| 387 | #define FIPS_F_FIPS_DRBG_SINGLE_KAT 119 |
Dr. Stephen Henson | ad47849 | 2011-05-06 17:38:39 +0000 | [diff] [blame] | 388 | #define FIPS_F_FIPS_DSA_SIGN_DIGEST 154 |
| 389 | #define FIPS_F_FIPS_DSA_VERIFY_DIGEST 155 |
Dr. Stephen Henson | b8b6a13 | 2011-04-21 14:17:15 +0000 | [diff] [blame] | 390 | #define FIPS_F_FIPS_GET_ENTROPY 147 |
Dr. Stephen Henson | f76b1ba | 2011-05-12 14:28:09 +0000 | [diff] [blame] | 391 | #define FIPS_F_FIPS_MODULE_MODE_SET 120 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 392 | #define FIPS_F_FIPS_PKEY_SIGNATURE_TEST 121 |
| 393 | #define FIPS_F_FIPS_RAND_ADD 122 |
| 394 | #define FIPS_F_FIPS_RAND_BYTES 123 |
| 395 | #define FIPS_F_FIPS_RAND_PSEUDO_BYTES 124 |
| 396 | #define FIPS_F_FIPS_RAND_SEED 125 |
| 397 | #define FIPS_F_FIPS_RAND_SET_METHOD 126 |
| 398 | #define FIPS_F_FIPS_RAND_STATUS 127 |
Dr. Stephen Henson | ad47849 | 2011-05-06 17:38:39 +0000 | [diff] [blame] | 399 | #define FIPS_F_FIPS_RSA_SIGN_DIGEST 156 |
| 400 | #define FIPS_F_FIPS_RSA_VERIFY_DIGEST 157 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 401 | #define FIPS_F_FIPS_SELFTEST_AES 128 |
Dr. Stephen Henson | cb1b3aa | 2011-04-19 18:57:58 +0000 | [diff] [blame] | 402 | #define FIPS_F_FIPS_SELFTEST_AES_CCM 145 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 403 | #define FIPS_F_FIPS_SELFTEST_AES_GCM 129 |
Dr. Stephen Henson | bf8131f | 2011-04-15 11:30:19 +0000 | [diff] [blame] | 404 | #define FIPS_F_FIPS_SELFTEST_AES_XTS 144 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 405 | #define FIPS_F_FIPS_SELFTEST_CMAC 130 |
| 406 | #define FIPS_F_FIPS_SELFTEST_DES 131 |
| 407 | #define FIPS_F_FIPS_SELFTEST_DSA 132 |
| 408 | #define FIPS_F_FIPS_SELFTEST_ECDSA 133 |
| 409 | #define FIPS_F_FIPS_SELFTEST_HMAC 134 |
| 410 | #define FIPS_F_FIPS_SELFTEST_SHA1 135 |
| 411 | #define FIPS_F_FIPS_SELFTEST_X931 136 |
Dr. Stephen Henson | ad47849 | 2011-05-06 17:38:39 +0000 | [diff] [blame] | 412 | #define FIPS_F_FIPS_SET_PRNG_KEY 153 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 413 | #define FIPS_F_HASH_FINAL 137 |
| 414 | #define FIPS_F_RSA_BUILTIN_KEYGEN 138 |
Dr. Stephen Henson | 74fac92 | 2011-04-22 11:12:56 +0000 | [diff] [blame] | 415 | #define FIPS_F_RSA_EAY_INIT 149 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 416 | #define FIPS_F_RSA_EAY_PRIVATE_DECRYPT 139 |
| 417 | #define FIPS_F_RSA_EAY_PRIVATE_ENCRYPT 140 |
| 418 | #define FIPS_F_RSA_EAY_PUBLIC_DECRYPT 141 |
| 419 | #define FIPS_F_RSA_EAY_PUBLIC_ENCRYPT 142 |
| 420 | #define FIPS_F_RSA_X931_GENERATE_KEY_EX 143 |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 421 | |
| 422 | /* Reason codes. */ |
Dr. Stephen Henson | a11f06b | 2011-09-12 18:47:39 +0000 | [diff] [blame] | 423 | #define FIPS_R_ADDITIONAL_INPUT_ERROR_UNDETECTED 150 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 424 | #define FIPS_R_ADDITIONAL_INPUT_TOO_LONG 100 |
| 425 | #define FIPS_R_ALREADY_INSTANTIATED 101 |
Dr. Stephen Henson | 5e4eb99 | 2011-10-19 22:34:53 +0000 | [diff] [blame] | 426 | #define FIPS_R_AUTHENTICATION_FAILURE 151 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 427 | #define FIPS_R_CONTRADICTING_EVIDENCE 102 |
Dr. Stephen Henson | 8d742dd | 2011-10-21 11:46:16 +0000 | [diff] [blame] | 428 | #define FIPS_R_DRBG_NOT_INITIALISED 152 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 429 | #define FIPS_R_DRBG_STUCK 103 |
| 430 | #define FIPS_R_ENTROPY_ERROR_UNDETECTED 104 |
| 431 | #define FIPS_R_ENTROPY_NOT_REQUESTED_FOR_RESEED 105 |
Dr. Stephen Henson | b8b6a13 | 2011-04-21 14:17:15 +0000 | [diff] [blame] | 432 | #define FIPS_R_ENTROPY_SOURCE_STUCK 142 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 433 | #define FIPS_R_ERROR_INITIALISING_DRBG 106 |
| 434 | #define FIPS_R_ERROR_INSTANTIATING_DRBG 107 |
| 435 | #define FIPS_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 108 |
| 436 | #define FIPS_R_ERROR_RETRIEVING_ENTROPY 109 |
| 437 | #define FIPS_R_ERROR_RETRIEVING_NONCE 110 |
| 438 | #define FIPS_R_FINGERPRINT_DOES_NOT_MATCH 111 |
| 439 | #define FIPS_R_FINGERPRINT_DOES_NOT_MATCH_NONPIC_RELOCATED 112 |
| 440 | #define FIPS_R_FINGERPRINT_DOES_NOT_MATCH_SEGMENT_ALIASING 113 |
| 441 | #define FIPS_R_FIPS_MODE_ALREADY_SET 114 |
| 442 | #define FIPS_R_FIPS_SELFTEST_FAILED 115 |
| 443 | #define FIPS_R_FUNCTION_ERROR 116 |
| 444 | #define FIPS_R_GENERATE_ERROR 117 |
| 445 | #define FIPS_R_GENERATE_ERROR_UNDETECTED 118 |
| 446 | #define FIPS_R_INSTANTIATE_ERROR 119 |
| 447 | #define FIPS_R_INSUFFICIENT_SECURITY_STRENGTH 120 |
| 448 | #define FIPS_R_INTERNAL_ERROR 121 |
| 449 | #define FIPS_R_INVALID_KEY_LENGTH 122 |
Dr. Stephen Henson | cac4fb5 | 2011-04-23 19:55:55 +0000 | [diff] [blame] | 450 | #define FIPS_R_INVALID_PARAMETERS 144 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 451 | #define FIPS_R_IN_ERROR_STATE 123 |
| 452 | #define FIPS_R_KEY_TOO_SHORT 124 |
Dr. Stephen Henson | a11f06b | 2011-09-12 18:47:39 +0000 | [diff] [blame] | 453 | #define FIPS_R_NONCE_ERROR_UNDETECTED 149 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 454 | #define FIPS_R_NON_FIPS_METHOD 125 |
Dr. Stephen Henson | bbb1941 | 2011-09-06 20:46:27 +0000 | [diff] [blame] | 455 | #define FIPS_R_NOPR_TEST1_FAILURE 145 |
| 456 | #define FIPS_R_NOPR_TEST2_FAILURE 146 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 457 | #define FIPS_R_NOT_INSTANTIATED 126 |
| 458 | #define FIPS_R_PAIRWISE_TEST_FAILED 127 |
| 459 | #define FIPS_R_PERSONALISATION_ERROR_UNDETECTED 128 |
| 460 | #define FIPS_R_PERSONALISATION_STRING_TOO_LONG 129 |
Dr. Stephen Henson | cac4fb5 | 2011-04-23 19:55:55 +0000 | [diff] [blame] | 461 | #define FIPS_R_PRNG_STRENGTH_TOO_LOW 143 |
Dr. Stephen Henson | bbb1941 | 2011-09-06 20:46:27 +0000 | [diff] [blame] | 462 | #define FIPS_R_PR_TEST1_FAILURE 147 |
| 463 | #define FIPS_R_PR_TEST2_FAILURE 148 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 464 | #define FIPS_R_REQUEST_LENGTH_ERROR_UNDETECTED 130 |
| 465 | #define FIPS_R_REQUEST_TOO_LARGE_FOR_DRBG 131 |
| 466 | #define FIPS_R_RESEED_COUNTER_ERROR 132 |
| 467 | #define FIPS_R_RESEED_ERROR 133 |
| 468 | #define FIPS_R_SELFTEST_FAILED 134 |
| 469 | #define FIPS_R_SELFTEST_FAILURE 135 |
| 470 | #define FIPS_R_STRENGTH_ERROR_UNDETECTED 136 |
| 471 | #define FIPS_R_TEST_FAILURE 137 |
Dr. Stephen Henson | 49cb5e0 | 2011-04-12 14:28:06 +0000 | [diff] [blame] | 472 | #define FIPS_R_UNINSTANTIATE_ERROR 141 |
Dr. Stephen Henson | 55e328f | 2011-04-09 17:46:31 +0000 | [diff] [blame] | 473 | #define FIPS_R_UNINSTANTIATE_ZEROISE_ERROR 138 |
| 474 | #define FIPS_R_UNSUPPORTED_DRBG_TYPE 139 |
| 475 | #define FIPS_R_UNSUPPORTED_PLATFORM 140 |
Dr. Stephen Henson | 2b4b28d | 2011-01-26 00:56:19 +0000 | [diff] [blame] | 476 | |
| 477 | #ifdef __cplusplus |
| 478 | } |
| 479 | #endif |
| 480 | #endif |