struct CMAC_CTX_st;
struct hmac_ctx_st;
-int FIPS_module_mode_set(int onoff);
+unsigned long FIPS_module_version(void);
+const char *FIPS_module_version_text(void);
+
+int FIPS_module_mode_set(int onoff, const char *auth);
int FIPS_module_mode(void);
const void *FIPS_rand_check(void);
int FIPS_selftest(void);
int FIPS_selftest_rsa(void);
int FIPS_selftest_dsa(void);
int FIPS_selftest_ecdsa(void);
-void FIPS_corrupt_drbg(void);
-void FIPS_x931_stick(void);
-void FIPS_drbg_stick(void);
+int FIPS_selftest_ecdh(void);
+void FIPS_x931_stick(int onoff);
+void FIPS_drbg_stick(int onoff);
int FIPS_selftest_x931(void);
int FIPS_selftest_hmac(void);
int FIPS_selftest_drbg(void);
+int FIPS_selftest_drbg_all(void);
int FIPS_selftest_cmac(void);
unsigned int FIPS_incore_fingerprint(unsigned char *sig,unsigned int len);
#define FIPS_TEST_PAIRWISE 12
/* Continuous PRNG test */
#define FIPS_TEST_CONTINUOUS 13
+/* ECDH test */
+#define FIPS_TEST_ECDH 14
+
+/* Minimum authorisation string length */
+#define FIPS_AUTH_MIN_LEN 16
void FIPS_post_set_callback(
int (*post_cb)(int op, int id, int subid, void *ex));
const struct env_md_st *FIPS_get_digestbynid(int nid);
+const struct evp_cipher_st *FIPS_get_cipherbynid(int nid);
+
struct rsa_st *FIPS_rsa_new(void);
void FIPS_rsa_free(struct rsa_st *r);
int FIPS_rsa_sign_ctx(struct rsa_st *rsa, struct env_md_ctx_st *ctx,
const struct env_md_st *mgf1Hash,
const unsigned char *sigbuf, unsigned int siglen);
+int FIPS_rsa_sign(struct rsa_st *rsa, const unsigned char *msg, int msglen,
+ const struct env_md_st *mhash, int rsa_pad_mode,
+ int saltlen, const struct env_md_st *mgf1Hash,
+ unsigned char *sigret, unsigned int *siglen);
+
+int FIPS_rsa_verify(struct rsa_st *rsa, const unsigned char *msg, int msglen,
+ const struct env_md_st *mhash, int rsa_pad_mode,
+ int saltlen, const struct env_md_st *mgf1Hash,
+ const unsigned char *sigbuf, unsigned int siglen);
+
#ifdef OPENSSL_FIPSCAPABLE
int FIPS_digestinit(EVP_MD_CTX *ctx, const EVP_MD *type);
#endif
-/* Where necessary redirect standard OpenSSL APIs to FIPS versions */
-
-#if defined(OPENSSL_FIPSCANISTER) && defined(OPENSSL_FIPSAPI)
-
-#define CRYPTO_lock FIPS_lock
-#define CRYPTO_add_lock FIPS_add_lock
-#define CRYPTO_malloc FIPS_malloc
-#define CRYPTO_free FIPS_free
-
-#define ERR_put_error FIPS_put_error
-#define ERR_add_error_data FIPS_add_error_data
-
-#define EVP_MD_CTX_init FIPS_md_ctx_init
-#define EVP_MD_CTX_cleanup FIPS_md_ctx_cleanup
-#define EVP_MD_CTX_create FIPS_md_ctx_create
-#define EVP_MD_CTX_destroy FIPS_md_ctx_destroy
-#define EVP_DigestInit_ex(ctx, type, impl) FIPS_digestinit(ctx, type)
-#define EVP_DigestInit FIPS_digestinit
-#define EVP_DigestUpdate FIPS_digestupdate
-#define EVP_Digest(data, count, md, size, type, impl) \
- FIPS_digest(data, count, md, size, type)
-#define EVP_DigestFinal_ex FIPS_digestfinal
-#define EVP_MD_CTX_copy_ex FIPS_md_ctx_copy
-
-#define EVP_CipherInit_ex(ctx, cipher, impl, key, iv, enc) \
- FIPS_cipherinit(ctx, cipher, key, iv, enc)
-
-#define EVP_CipherInit FIPS_cipherinit
-
-#define EVP_CIPHER_CTX_init FIPS_cipher_ctx_init
-#define EVP_CIPHER_CTX_cleanup FIPS_cipher_ctx_cleanup
-#define EVP_Cipher FIPS_cipher
-#define EVP_CIPHER_CTX_ctrl FIPS_cipher_ctx_ctrl
-#define EVP_CIPHER_CTX_new FIPS_cipher_ctx_new
-#define EVP_CIPHER_CTX_free FIPS_cipher_ctx_free
-#define EVP_CIPHER_CTX_copy FIPS_cipher_ctx_copy
-#define EVP_CIPHER_CTX_set_key_length FIPS_cipher_ctx_set_key_length
-
-#define DSA_SIG_new FIPS_dsa_sig_new
-#define DSA_SIG_free FIPS_dsa_sig_free
-
-#define ECDSA_SIG_new FIPS_ecdsa_sig_new
-#define ECDSA_SIG_free FIPS_ecdsa_sig_free
-
-#define ecdsa_check fips_ecdsa_check
-#define ecdh_check fips_ecdh_check
-
-#define RAND_bytes FIPS_rand_bytes
-#define RAND_pseudo_bytes FIPS_rand_pseudo_bytes
-#define RAND_add FIPS_rand_add
-#define RAND_seed FIPS_rand_seed
-#define RAND_status FIPS_rand_status
-
-#endif
-
/* BEGIN ERROR CODES */
/* The following lines are auto generated by the script mkerr.pl. Any changes
* made after this point may be overwritten when the script is next run.
/* Function codes. */
#define FIPS_F_DH_BUILTIN_GENPARAMS 100
#define FIPS_F_DH_INIT 148
+#define FIPS_F_DRBG_RESEED 162
#define FIPS_F_DSA_BUILTIN_PARAMGEN 101
#define FIPS_F_DSA_BUILTIN_PARAMGEN2 102
#define FIPS_F_DSA_DO_SIGN 103
#define FIPS_F_DSA_DO_VERIFY 104
+#define FIPS_F_ECDH_COMPUTE_KEY 163
+#define FIPS_F_ECDSA_DO_SIGN 164
+#define FIPS_F_ECDSA_DO_VERIFY 165
+#define FIPS_F_EC_KEY_GENERATE_KEY 166
#define FIPS_F_FIPS_CHECK_DSA 105
#define FIPS_F_FIPS_CHECK_DSA_PRNG 151
#define FIPS_F_FIPS_CHECK_EC 106
#define FIPS_F_FIPS_DRBG_BYTES 111
#define FIPS_F_FIPS_DRBG_CHECK 146
#define FIPS_F_FIPS_DRBG_CPRNG_TEST 112
+#define FIPS_F_FIPS_DRBG_ERROR_CHECK 114
#define FIPS_F_FIPS_DRBG_GENERATE 113
-#define FIPS_F_FIPS_DRBG_HEALTH_CHECK 114
#define FIPS_F_FIPS_DRBG_INIT 115
#define FIPS_F_FIPS_DRBG_INSTANTIATE 116
#define FIPS_F_FIPS_DRBG_NEW 117
#define FIPS_F_RSA_X931_GENERATE_KEY_EX 143
/* Reason codes. */
+#define FIPS_R_ADDITIONAL_INPUT_ERROR_UNDETECTED 150
#define FIPS_R_ADDITIONAL_INPUT_TOO_LONG 100
#define FIPS_R_ALREADY_INSTANTIATED 101
+#define FIPS_R_AUTHENTICATION_FAILURE 151
#define FIPS_R_CONTRADICTING_EVIDENCE 102
+#define FIPS_R_DRBG_NOT_INITIALISED 152
#define FIPS_R_DRBG_STUCK 103
#define FIPS_R_ENTROPY_ERROR_UNDETECTED 104
#define FIPS_R_ENTROPY_NOT_REQUESTED_FOR_RESEED 105
#define FIPS_R_INVALID_PARAMETERS 144
#define FIPS_R_IN_ERROR_STATE 123
#define FIPS_R_KEY_TOO_SHORT 124
+#define FIPS_R_NONCE_ERROR_UNDETECTED 149
#define FIPS_R_NON_FIPS_METHOD 125
+#define FIPS_R_NOPR_TEST1_FAILURE 145
+#define FIPS_R_NOPR_TEST2_FAILURE 146
#define FIPS_R_NOT_INSTANTIATED 126
#define FIPS_R_PAIRWISE_TEST_FAILED 127
#define FIPS_R_PERSONALISATION_ERROR_UNDETECTED 128
#define FIPS_R_PERSONALISATION_STRING_TOO_LONG 129
#define FIPS_R_PRNG_STRENGTH_TOO_LOW 143
+#define FIPS_R_PR_TEST1_FAILURE 147
+#define FIPS_R_PR_TEST2_FAILURE 148
#define FIPS_R_REQUEST_LENGTH_ERROR_UNDETECTED 130
#define FIPS_R_REQUEST_TOO_LARGE_FOR_DRBG 131
#define FIPS_R_RESEED_COUNTER_ERROR 132