Skip to content

Commit

Permalink
app: fix ECDSA FIPS186-5
Browse files Browse the repository at this point in the history
Several curves and hashes were missing for FIPS 186-5

Note that currently ECDSA with SHAKE 128 is broken on the ACVP-Server:
usnistgov/ACVP-Server#348
  • Loading branch information
iomartin committed Sep 24, 2024
1 parent c7dc1aa commit df39f75
Showing 1 changed file with 31 additions and 19 deletions.
50 changes: 31 additions & 19 deletions app/app_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3093,6 +3093,7 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
#ifndef ACVP_FIPS186_5
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYGEN, ACVP_ECDSA_REVISION, ACVP_REVISION_1_0);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K233);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K283);
Expand All @@ -3109,7 +3110,6 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B571);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P224);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P256);
Expand All @@ -3131,6 +3131,13 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
#ifndef ACVP_FIPS186_5
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_REVISION, ACVP_REVISION_1_0);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P192);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K233);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K283);
Expand All @@ -3147,13 +3154,6 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B571);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P192);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P224);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_KEYVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P256);
Expand All @@ -3176,6 +3176,7 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
#ifndef ACVP_FIPS186_5
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_REVISION, ACVP_REVISION_1_0);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K233);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K283);
Expand All @@ -3192,7 +3193,6 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B571);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P224);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P256);
Expand Down Expand Up @@ -3222,10 +3222,16 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_HASH_ALG, ACVP_SHA3_512);
CHECK_ENABLE_CAP_RV(rv);
#ifdef ACVP_FIPS186_5
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_HASH_ALG, ACVP_SHAKE_128);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGGEN, ACVP_ECDSA_HASH_ALG, ACVP_SHAKE_256);
CHECK_ENABLE_CAP_RV(rv);
#endif
#endif

#ifdef ACVP_FIPS186_5
/* Enable ECDSA sigGen... */
/* Enable detECDSA sigGen... */
rv = acvp_cap_ecdsa_enable(ctx, ACVP_DET_ECDSA_SIGGEN, &app_ecdsa_handler);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_set_prereq(ctx, ACVP_DET_ECDSA_SIGGEN, ACVP_PREREQ_SHA, value);
Expand Down Expand Up @@ -3268,6 +3274,15 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
#ifndef ACVP_FIPS186_5
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_REVISION, ACVP_REVISION_1_0);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P192);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_HASH_ALG, ACVP_SHA1);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K233);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K283);
Expand All @@ -3284,15 +3299,6 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B571);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_B163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_K163);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P192);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_HASH_ALG, ACVP_SHA1);
CHECK_ENABLE_CAP_RV(rv);
#endif
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P224);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_CURVE, ACVP_EC_CURVE_P256);
Expand Down Expand Up @@ -3322,6 +3328,12 @@ static int enable_ecdsa(ACVP_CTX *ctx) {
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_HASH_ALG, ACVP_SHA3_512);
CHECK_ENABLE_CAP_RV(rv);
#ifdef ACVP_FIPS186_5
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_HASH_ALG, ACVP_SHAKE_128);
CHECK_ENABLE_CAP_RV(rv);
rv = acvp_cap_ecdsa_set_parm(ctx, ACVP_ECDSA_SIGVER, ACVP_ECDSA_HASH_ALG, ACVP_SHAKE_256);
CHECK_ENABLE_CAP_RV(rv);
#endif
#endif

end:
Expand Down

0 comments on commit df39f75

Please sign in to comment.