#include "internal/cryptlib.h"
#include "internal/property.h"
#include "internal/evp_int.h"
+#include "internal/provider_algs.h"
/* Functions provided by the core */
static OSSL_core_get_param_types_fn *c_get_param_types = NULL;
return 1;
}
-extern const OSSL_DISPATCH sha256_functions[];
-
static const OSSL_ALGORITHM fips_digests[] = {
{ "SHA256", "fips=yes", sha256_functions },
{ NULL, NULL, NULL }
};
+static const OSSL_ALGORITHM fips_ciphers[] = {
+ { "AES-256-ECB", "fips=yes", aes256ecb_functions },
+ { "AES-192-ECB", "fips=yes", aes192ecb_functions },
+ { "AES-128-ECB", "fips=yes", aes128ecb_functions },
+ { "AES-256-CBC", "fips=yes", aes256cbc_functions },
+ { "AES-192-CBC", "fips=yes", aes192cbc_functions },
+ { "AES-128-CBC", "fips=yes", aes128cbc_functions },
+ { "AES-256-CTR", "fips=yes", aes256ctr_functions },
+ { "AES-192-CTR", "fips=yes", aes192ctr_functions },
+ { "AES-128-CTR", "fips=yes", aes128ctr_functions },
+ { NULL, NULL, NULL }
+};
+
static const OSSL_ALGORITHM *fips_query(OSSL_PROVIDER *prov,
int operation_id,
int *no_cache)
switch (operation_id) {
case OSSL_OP_DIGEST:
return fips_digests;
+ case OSSL_OP_CIPHER:
+ return fips_ciphers;
}
return NULL;
}
/*
* The internal init function used when the FIPS module uses EVP to call
- * another algorithm also in the FIPS module.
+ * another algorithm also in the FIPS module. This is a recursive call that has
+ * been made from within the FIPS module itself. Normally we are responsible for
+ * providing our own provctx value, but in this recursive case it has been
+ * pre-populated for us with the same library context that was used in the EVP
+ * call that initiated this recursive call - so we don't need to do anything
+ * further with that parameter. This only works because we *know* in the core
+ * code that the FIPS module uses a library context for its provctx. This is
+ * not generally true for all providers.
*/
OSSL_provider_init_fn fips_intern_provider_init;
int fips_intern_provider_init(const OSSL_PROVIDER *provider,