#ifndef KDF_PBKDF2_MIN_PASSWORD_LEN
#ifdef FIPS_MODULE
#define KDF_PBKDF2_MIN_PASSWORD_LEN (8)
+#define KDF_PBKDF2_FIPS_SELF_TEST_ITERATIONS 2
#else
#define KDF_PBKDF2_MIN_PASSWORD_LEN (1)
#endif
size_t keylen, size_t passlen,
int *error, const char **desc)
{
+ uint64_t min_iter = KDF_PBKDF2_MIN_ITERATIONS;
+
if (passlen < KDF_PBKDF2_MIN_PASSWORD_LEN) {
*error = PROV_R_PASSWORD_STRENGTH_TOO_WEAK;
if (desc != NULL)
*desc = "Salt size";
return 0;
}
- if (iter < KDF_PBKDF2_MIN_ITERATIONS) {
+#ifdef FIPS_MODULE
+ /* Modify this check during self-test. See FIPS 140-3 IG 10.3.A.8 */
+ if (ossl_self_test_in_progress(ST_ID_KDF_PBKDF2)) {
+ min_iter = KDF_PBKDF2_FIPS_SELF_TEST_ITERATIONS;
+ }
+#endif
+ if (iter < min_iter) {
*error = PROV_R_INVALID_ITERATION_COUNT;
if (desc != NULL)
*desc = "Iteration count";