gnutls_datum_t ddata, tmp = { NULL, 0 };
char gen_data[MAX_HASH_SIZE];
gnutls_x509_spki_st spki;
- gnutls_fips140_context_t context;
ret = _gnutls_x509_spki_copy(&spki, ¶ms->spki);
if (ret < 0) {
switch (algo) {
case GNUTLS_PK_RSA:
- case GNUTLS_PK_RSA_OAEP:
- if (algo == GNUTLS_PK_RSA) {
- /* Push a temporary FIPS context because _gnutls_pk_encrypt and
- * _gnutls_pk_decrypt below will mark RSAES-PKCS1-v1_5 operation
- * non-approved */
- if (gnutls_fips140_context_init(&context) < 0) {
- ret = gnutls_assert_val(
- GNUTLS_E_PK_GENERATION_ERROR);
- goto cleanup;
- }
- if (gnutls_fips140_push_context(context) < 0) {
- ret = gnutls_assert_val(
- GNUTLS_E_PK_GENERATION_ERROR);
- gnutls_fips140_context_deinit(context);
- goto cleanup;
- }
+ /* To comply with FIPS 140-3 IG 10.3.A, additional comment 1,
+ * Perform both key transport and signature PCTs for
+ * unrestricted RSA key. */
+ ret = pct_test(GNUTLS_PK_RSA_OAEP, params);
+ if (ret < 0) {
+ gnutls_assert();
+ break;
}
-
- ret = _gnutls_pk_encrypt(algo, &sig, &ddata, params, &spki);
+ ret = pct_test(GNUTLS_PK_RSA_PSS, params);
+ if (ret < 0) {
+ gnutls_assert();
+ break;
+ }
+ break;
+ case GNUTLS_PK_RSA_OAEP:
+ ret = _gnutls_pk_encrypt(GNUTLS_PK_RSA_OAEP, &sig, &ddata,
+ params, &spki);
if (ret < 0) {
ret = gnutls_assert_val(GNUTLS_E_PK_GENERATION_ERROR);
}
ret = gnutls_assert_val(GNUTLS_E_PK_GENERATION_ERROR);
}
- if (algo == GNUTLS_PK_RSA) {
- if (unlikely(gnutls_fips140_pop_context() < 0)) {
- ret = gnutls_assert_val(
- GNUTLS_E_PK_GENERATION_ERROR);
- }
- gnutls_fips140_context_deinit(context);
- }
-
if (ret < 0) {
goto cleanup;
}
free(sig.data);
sig.data = NULL;
- /* RSA-OAEP can't be used for signing */
- if (algo == GNUTLS_PK_RSA_OAEP) {
- break;
- }
-
- FALLTHROUGH;
+ break;
case GNUTLS_PK_EC: /* we only do keys for ECDSA */
case GNUTLS_PK_EDDSA_ED25519:
case GNUTLS_PK_EDDSA_ED448:
}
assert(gnutls_x509_privkey_init(&privkey) == 0);
- ret = gnutls_x509_privkey_generate(privkey, GNUTLS_PK_RSA, 512, 0);
+ ret = gnutls_x509_privkey_generate(privkey, GNUTLS_PK_RSA, 768, 0);
if (ret < 0) {
- fail("gnutls_x509_privkey_generate failed for 512-bit key\n");
+ fail("gnutls_x509_privkey_generate failed for 768-bit key\n");
}
gnutls_x509_privkey_deinit(privkey);
}
assert(gnutls_fips140_context_init(&fips_context) == 0);
- generate_unsuccessfully(&privkey, &pubkey, 512);
- sign_verify_unsuccessfully(privkey, pubkey);
- generate_unsuccessfully(&privkey, &pubkey, 512);
- sign_verify_unsuccessfully(privkey, pubkey);
- generate_unsuccessfully(&privkey, &pubkey, 600);
- sign_verify_unsuccessfully(privkey, pubkey);
generate_unsuccessfully(&privkey, &pubkey, 768);
sign_verify_unsuccessfully(privkey, pubkey);
generate_unsuccessfully(&privkey, &pubkey, 1024);