From 80d9c1e036d3cbc81b8bacd8eb83dece45c28039 Mon Sep 17 00:00:00 2001 From: Samuel Chiang Date: Tue, 10 Sep 2024 13:18:14 -0700 Subject: [PATCH 01/10] More minor symbols Ruby depends on (#1837) We noticed three missing symbols after testing where we were at with our support for Ruby. These are all pretty minor and are related to work we've already done. * The underlying work for `d2i_ECPKParameters_bio` and `i2d_ECPKParameters_bio` was already completed with 6056999. Coverage for actually parsing is included in that PR, so I've only added brief tests to ensure that the same behavior applies to the BIO methods. * `RAND_egd_bytes` is for querying the entropy gathering daemon EGD on the socket path. We already no-op `RAND_egd` (which directly calls `RAND_egd_bytes` in OpenSSL), so I've applied the same no-op behavior here as well. ### Testing: Minor tests for `d2i_ECPKParameters_bio` and `i2d_ECPKParameters_bio`. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/ec_extra/ec_asn1.c | 63 +++++++++++++++++++++++---------- crypto/fipsmodule/ec/ec_test.cc | 9 +++++ crypto/fipsmodule/ec/internal.h | 5 ++- crypto/rand_extra/rand_extra.c | 4 +++ include/openssl/ec_key.h | 59 ++++++++++++++++++------------ include/openssl/rand.h | 3 ++ 6 files changed, 102 insertions(+), 41 deletions(-) diff --git a/crypto/ec_extra/ec_asn1.c b/crypto/ec_extra/ec_asn1.c index c01aaa08d2..e867a390df 100644 --- a/crypto/ec_extra/ec_asn1.c +++ b/crypto/ec_extra/ec_asn1.c @@ -56,8 +56,9 @@ #include #include -#include +#include #include +#include #include #include #include @@ -76,19 +77,15 @@ static const CBS_ASN1_TAG kPublicKeyTag = // acceptable groups, so parsers don't have to pull in all four. typedef const EC_GROUP *(*ec_group_func)(void); static const ec_group_func kAllGroups[] = { - &EC_group_p224, - &EC_group_p256, - &EC_group_p384, - &EC_group_p521, - &EC_group_secp256k1, + &EC_group_p224, &EC_group_p256, &EC_group_p384, + &EC_group_p521, &EC_group_secp256k1, }; EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) { CBS ec_private_key, private_key; uint64_t version; if (!CBS_get_asn1(cbs, &ec_private_key, CBS_ASN1_SEQUENCE) || - !CBS_get_asn1_uint64(&ec_private_key, &version) || - version != 1 || + !CBS_get_asn1_uint64(&ec_private_key, &version) || version != 1 || !CBS_get_asn1(&ec_private_key, &private_key, CBS_ASN1_OCTETSTRING)) { OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR); return NULL; @@ -151,8 +148,7 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) { !CBS_get_asn1(&child, &public_key, CBS_ASN1_BITSTRING) || // As in a SubjectPublicKeyInfo, the byte-encoded public key is then // encoded as a BIT STRING with bits ordered as in the DER encoding. - !CBS_get_u8(&public_key, &padding) || - padding != 0 || + !CBS_get_u8(&public_key, &padding) || padding != 0 || // Explicitly check |public_key| is non-empty to save the conversion // form later. CBS_len(&public_key) == 0 || @@ -264,16 +260,14 @@ static int parse_explicit_prime_curve(CBS *in, int has_cofactor; uint64_t version; if (!CBS_get_asn1(in, ¶ms, CBS_ASN1_SEQUENCE) || - !CBS_get_asn1_uint64(¶ms, &version) || - version != 1 || + !CBS_get_asn1_uint64(¶ms, &version) || version != 1 || !CBS_get_asn1(¶ms, &field_id, CBS_ASN1_SEQUENCE) || !CBS_get_asn1(&field_id, &field_type, CBS_ASN1_OBJECT) || CBS_len(&field_type) != sizeof(kPrimeField) || OPENSSL_memcmp(CBS_data(&field_type), kPrimeField, sizeof(kPrimeField)) != 0 || !CBS_get_asn1(&field_id, &out->prime, CBS_ASN1_INTEGER) || - !CBS_is_unsigned_asn1_integer(&out->prime) || - CBS_len(&field_id) != 0 || + !CBS_is_unsigned_asn1_integer(&out->prime) || CBS_len(&field_id) != 0 || !CBS_get_asn1(¶ms, &curve, CBS_ASN1_SEQUENCE) || !CBS_get_asn1(&curve, &out->a, CBS_ASN1_OCTETSTRING) || !CBS_get_asn1(&curve, &out->b, CBS_ASN1_OCTETSTRING) || @@ -292,8 +286,7 @@ static int parse_explicit_prime_curve(CBS *in, if (has_cofactor) { // We only support prime-order curves so the cofactor must be one. - if (CBS_len(&cofactor) != 1 || - CBS_data(&cofactor)[0] != 1) { + if (CBS_len(&cofactor) != 1 || CBS_data(&cofactor)[0] != 1) { OPENSSL_PUT_ERROR(EC, EC_R_UNKNOWN_GROUP); return 0; } @@ -546,6 +539,40 @@ int i2d_ECPKParameters(const EC_GROUP *group, uint8_t **outp) { return CBB_finish_i2d(&cbb, outp); } +EC_GROUP *d2i_ECPKParameters_bio(BIO *bio, EC_GROUP **out_group) { + if (bio == NULL) { + OPENSSL_PUT_ERROR(PKCS7, ERR_R_PASSED_NULL_PARAMETER); + return NULL; + } + + uint8_t *data; + size_t len; + if (!BIO_read_asn1(bio, &data, &len, INT_MAX)) { + return NULL; + } + const uint8_t *ptr = data; + EC_GROUP *ret = d2i_ECPKParameters(out_group, &ptr, len); + OPENSSL_free(data); + return ret; +} + +int i2d_ECPKParameters_bio(BIO *bio, const EC_GROUP *group) { + if (bio == NULL || group == NULL) { + OPENSSL_PUT_ERROR(PKCS7, ERR_R_PASSED_NULL_PARAMETER); + return 0; + } + + uint8_t *out = NULL; + int len = i2d_ECPKParameters(group, &out); + if (out == NULL) { + return 0; + } + + int ret = BIO_write_all(bio, out, len); + OPENSSL_free(out); + return ret; +} + EC_KEY *o2i_ECPublicKey(EC_KEY **keyp, const uint8_t **inp, long len) { EC_KEY *ret = NULL; @@ -599,8 +626,8 @@ size_t EC_get_builtin_curves(EC_builtin_curve *out_curves, } static size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, - point_conversion_form_t form, - uint8_t **pbuf, BN_CTX *ctx) { + point_conversion_form_t form, uint8_t **pbuf, + BN_CTX *ctx) { size_t len; uint8_t *buf; diff --git a/crypto/fipsmodule/ec/ec_test.cc b/crypto/fipsmodule/ec/ec_test.cc index 20d91a9018..18a58ee49c 100644 --- a/crypto/fipsmodule/ec/ec_test.cc +++ b/crypto/fipsmodule/ec/ec_test.cc @@ -2551,3 +2551,12 @@ TEST(ECTest, ECEngine) { EC_KEY_METHOD_free(eng_funcs); } +TEST(ECTest, ECPKParmatersBio) { + bssl::UniquePtr bio(BIO_new(BIO_s_mem())); + + EXPECT_TRUE(i2d_ECPKParameters_bio(bio.get(), EC_group_p256())); + EXPECT_EQ(d2i_ECPKParameters_bio(bio.get(), nullptr), EC_group_p256()); + + EXPECT_TRUE(i2d_ECPKParameters_bio(bio.get(), EC_group_secp256k1())); + EXPECT_EQ(d2i_ECPKParameters_bio(bio.get(), nullptr), EC_group_secp256k1()); +} diff --git a/crypto/fipsmodule/ec/internal.h b/crypto/fipsmodule/ec/internal.h index 86e7dfb202..70f493238e 100644 --- a/crypto/fipsmodule/ec/internal.h +++ b/crypto/fipsmodule/ec/internal.h @@ -823,7 +823,10 @@ struct ec_key_st { // d2i_ECPKParameters deserializes the |ECPKParameters| specified in RFC 3279 // to an |EC_GROUP| from |inp|. Only deserialization of namedCurves or -// explicitly-encoded versions of namedCurves are supported. +// explicitly-encoded versions of namedCurves are supported. If |*out_group| is +// non-null, the original |*out_group| is freed and the returned |EC_GROUP| is +// also written to |*out_group|. The user continues to maintain the memory +// assigned to |*out_group| if non-null. EC_GROUP *d2i_ECPKParameters(EC_GROUP **out_group, const uint8_t **inp, long len); diff --git a/crypto/rand_extra/rand_extra.c b/crypto/rand_extra/rand_extra.c index 48176e7bf9..65ba63d0b3 100644 --- a/crypto/rand_extra/rand_extra.c +++ b/crypto/rand_extra/rand_extra.c @@ -46,6 +46,10 @@ int RAND_egd(const char *path) { return 255; } +int RAND_egd_bytes(const char *path, int bytes) { + return bytes; +} + int RAND_poll(void) { return 1; } diff --git a/include/openssl/ec_key.h b/include/openssl/ec_key.h index 3a826ba87a..824c043ac0 100644 --- a/include/openssl/ec_key.h +++ b/include/openssl/ec_key.h @@ -312,6 +312,22 @@ OPENSSL_EXPORT EC_KEY *d2i_ECParameters(EC_KEY **out_key, const uint8_t **inp, // are supported. OPENSSL_EXPORT int i2d_ECParameters(const EC_KEY *key, uint8_t **outp); +// d2i_ECPKParameters_bio deserializes the |ECPKParameters| specified in RFC +// 3279 from |bio| and returns the corresponding |EC_GROUP|. If |*out_group| is +// non-null, the original |*out_group| is freed and the returned |EC_GROUP| is +// also written to |*out_group|. The user continues to maintain the memory +// assigned to |*out_group| if non-null. +// +// Only deserialization of namedCurves or +// explicitly-encoded versions of namedCurves are supported. +OPENSSL_EXPORT EC_GROUP *d2i_ECPKParameters_bio(BIO *bio, EC_GROUP **out_group); + +// i2d_ECPKParameters_bio serializes an |EC_GROUP| to |bio| according to the +// |ECPKParameters| specified in RFC 3279. It returns 1 on success and 0 on +// failure. +// Only serialization of namedCurves are supported. +OPENSSL_EXPORT int i2d_ECPKParameters_bio(BIO *bio, const EC_GROUP *group); + // o2i_ECPublicKey parses an EC point from |len| bytes at |*inp| into // |*out_key|. Note that this differs from the d2i format in that |*out_key| // must be non-NULL with a group set. On successful exit, |*inp| is advanced by @@ -361,7 +377,8 @@ OPENSSL_EXPORT const EC_KEY_METHOD *EC_KEY_OpenSSL(void); // returned |EC_KEY_METHOD| object will be initialized to the values from // |eckey_meth|. If |eckey_meth| is NULL, the returned object will be // initialized using the value returned from |EC_KEY_get_default_method|. -OPENSSL_EXPORT EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *eckey_meth); +OPENSSL_EXPORT EC_KEY_METHOD *EC_KEY_METHOD_new( + const EC_KEY_METHOD *eckey_meth); // EC_KEY_METHOD_free frees the memory associated with |eckey_meth| OPENSSL_EXPORT void EC_KEY_METHOD_free(EC_KEY_METHOD *eckey_meth); @@ -379,42 +396,40 @@ OPENSSL_EXPORT const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *ec); // EC_KEY_METHOD_set_sign_awslc sets the |sign| and |sign_sig| pointers on // |meth|. -OPENSSL_EXPORT void EC_KEY_METHOD_set_sign_awslc(EC_KEY_METHOD *meth, - int (*sign)(int type, const uint8_t *digest, - int digest_len, uint8_t *sig, - unsigned int *siglen, - const BIGNUM *k_inv, - const BIGNUM *r, EC_KEY *eckey), - ECDSA_SIG *(*sign_sig)(const uint8_t *digest, - int digest_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); +OPENSSL_EXPORT void EC_KEY_METHOD_set_sign_awslc( + EC_KEY_METHOD *meth, + int (*sign)(int type, const uint8_t *digest, int digest_len, uint8_t *sig, + unsigned int *siglen, const BIGNUM *k_inv, const BIGNUM *r, + EC_KEY *eckey), + ECDSA_SIG *(*sign_sig)(const uint8_t *digest, int digest_len, + const BIGNUM *in_kinv, const BIGNUM *in_r, + EC_KEY *eckey)); // EC_KEY_METHOD_set_sign sets function pointers on |meth|. AWS-LC currently // supports setting |sign| and |sign_sig|. |sign_setup| must be set to NULL in // order to compile with AWS-LC. -#define EC_KEY_METHOD_set_sign(meth, sign, sign_setup, sign_sig) \ - OPENSSL_STATIC_ASSERT((sign_setup) == NULL, \ - EC_KEY_METHOD_sign_setup_field_must_be_NULL); \ +#define EC_KEY_METHOD_set_sign(meth, sign, sign_setup, sign_sig) \ + OPENSSL_STATIC_ASSERT((sign_setup) == NULL, \ + EC_KEY_METHOD_sign_setup_field_must_be_NULL); \ EC_KEY_METHOD_set_sign_awslc(meth, sign, sign_sig); // EC_KEY_METHOD_set_init_awslc sets the |init| and |finish| pointers on |meth|. OPENSSL_EXPORT void EC_KEY_METHOD_set_init_awslc(EC_KEY_METHOD *meth, - int (*init)(EC_KEY *key), - void (*finish)(EC_KEY *key)); + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key)); // EC_KEY_METHOD_set_init sets function pointers on |meth|. AWS-LC // currently only supports setting the |init| and |finish| fields. |copy|, // |set_group|, |set_private|, and |set_public| cannot be set yet and must // be NULL. -#define EC_KEY_METHOD_set_init(meth, init, finish, copy, set_group, \ - set_private, set_public) \ - OPENSSL_STATIC_ASSERT((copy) == NULL && (set_group) == NULL && \ - (set_private) == NULL && (set_public) == NULL, \ - EC_KEY_METHOD_copy_set_group_set_private_and_set_public_fields_must_be_NULL);\ +#define EC_KEY_METHOD_set_init(meth, init, finish, copy, set_group, \ + set_private, set_public) \ + OPENSSL_STATIC_ASSERT( \ + (copy) == NULL && (set_group) == NULL && (set_private) == NULL && \ + (set_public) == NULL, \ + EC_KEY_METHOD_copy_set_group_set_private_and_set_public_fields_must_be_NULL); \ EC_KEY_METHOD_set_init_awslc(meth, init, finish); // EC_KEY_METHOD_set_flags sets |flags| on |meth|. Currently, the only supported diff --git a/include/openssl/rand.h b/include/openssl/rand.h index d317da6016..fddb890f0c 100644 --- a/include/openssl/rand.h +++ b/include/openssl/rand.h @@ -104,6 +104,9 @@ OPENSSL_EXPORT OPENSSL_DEPRECATED void RAND_add(const void *buf, int num, // RAND_egd returns 255. OPENSSL_EXPORT OPENSSL_DEPRECATED int RAND_egd(const char *); +// RAND_egd_bytes returns |bytes|. +OPENSSL_EXPORT OPENSSL_DEPRECATED int RAND_egd_bytes(const char *, int bytes); + // RAND_poll returns one. OPENSSL_EXPORT OPENSSL_DEPRECATED int RAND_poll(void); From 17bb2f27443d975ef8af5f95f294ab1088e55f65 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Tue, 10 Sep 2024 21:02:52 +0000 Subject: [PATCH 02/10] ED25519 Power-on Self Test / CAST / KAT (#1834) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description of changes: Per IG guidance: >Note10: the ECDSA signature generation and deterministic ECDSA signature generation methods shall each have their own CAST if both are implemented in the approved mode. • for the EdDSA algorithm, o if the module implements digital signature generation, the module shall have an EdDSA digital signature generation CAST. If a KAT is used, the EdDSA digital signature shall be pre- computed, generate an EdDSA digital signature using known data and keys, and then compare the result to the pre-computed value; o if the module implements digital signature verification, the module shall have an EdDSA digital signature verification CAST. If a KAT is used, the EdDSA digital signature shall be pre- computed (which could be the output of the EdDSA digital signature generate test), and using a known key, verify the signature as specified in section 7.7 of FIPS 186-5. This KAT was sourced from the ACVP vectors for SigGen that were validated with the NIST demo server. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/fipsmodule/self_check/self_check.c | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/crypto/fipsmodule/self_check/self_check.c b/crypto/fipsmodule/self_check/self_check.c index cb0659e2d8..26bc2f0928 100644 --- a/crypto/fipsmodule/self_check/self_check.c +++ b/crypto/fipsmodule/self_check/self_check.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -1246,6 +1247,52 @@ static int boringssl_self_test_fast(void) { goto err; } + const uint8_t kEd25519PrivateKey[ED25519_PRIVATE_KEY_SEED_LEN] = { + 0xb3, 0x99, 0x05, 0xbf, 0x43, 0x0b, 0x2a, 0xd2, 0x1d, 0xb6, 0x5d, + 0x49, 0xa6, 0xab, 0x03, 0xc1, 0x7d, 0xdb, 0x72, 0xe7, 0xa9, 0x8e, + 0xb9, 0x8f, 0xae, 0x59, 0x91, 0x7a, 0xe2, 0x5f, 0x92, 0x14}; + const uint8_t kEd25519PublicKey[ED25519_PUBLIC_KEY_LEN] = { + 0xe7, 0x75, 0xcf, 0x0e, 0x33, 0x48, 0x52, 0xa7, 0xe6, 0x99, 0xbe, + 0xba, 0x13, 0xbc, 0x24, 0xf8, 0x32, 0xf3, 0xc2, 0xa3, 0xa0, 0x3d, + 0xc9, 0x3c, 0x42, 0xb5, 0x92, 0x76, 0x15, 0xa5, 0x46, 0xba}; + const uint8_t kEd25519Signature[ED25519_SIGNATURE_LEN] = { + 0x30, 0x1a, 0x4c, 0x56, 0xe0, 0x37, 0x0b, 0x57, 0x2f, 0x7d, 0x8c, + 0x75, 0x1b, 0x5c, 0xfa, 0xb6, 0xc3, 0x98, 0x7c, 0x6f, 0x5d, 0xe8, + 0x7c, 0xac, 0x4d, 0x71, 0x16, 0x73, 0xda, 0x8c, 0xb2, 0x19, 0x86, + 0x03, 0xcd, 0x91, 0x82, 0x73, 0xa5, 0x34, 0x24, 0x93, 0xf1, 0xc1, + 0xad, 0x0e, 0x8a, 0x78, 0x45, 0x15, 0xa7, 0xfe, 0xc8, 0xc9, 0xbe, + 0xa2, 0xa3, 0xf1, 0xcf, 0x7b, 0x3a, 0x89, 0x10, 0x0f}; + const uint8_t kEd25519Message[128] = { + 0x13, 0x1d, 0x2a, 0xa9, 0x8f, 0x46, 0xfd, 0x5a, 0xca, 0xef, 0x8e, 0x92, + 0xfa, 0x8c, 0x50, 0xd4, 0x8b, 0xda, 0xdf, 0xfe, 0x13, 0xd7, 0x9c, 0xc7, + 0x1b, 0x95, 0x85, 0x5f, 0xaf, 0xa4, 0x84, 0x66, 0x50, 0x2a, 0x1c, 0x61, + 0x4d, 0xb7, 0x85, 0xfc, 0xc9, 0x4c, 0x50, 0x61, 0x65, 0x23, 0x93, 0x42, + 0xcb, 0x9b, 0x3e, 0xe6, 0x3b, 0x35, 0xdc, 0x2f, 0x7e, 0x78, 0x61, 0x15, + 0x42, 0xc7, 0xa6, 0x1b, 0x50, 0xf3, 0xb6, 0x8e, 0xcf, 0x1b, 0x70, 0xca, + 0xc0, 0x1b, 0x34, 0xef, 0x06, 0x1b, 0x3f, 0x7c, 0xaa, 0xc8, 0x26, 0x56, + 0xbf, 0xd5, 0x5a, 0x06, 0xb8, 0xeb, 0x7d, 0xbe, 0x82, 0x45, 0x17, 0xfe, + 0x3c, 0x56, 0x7d, 0xa5, 0xa0, 0x3e, 0x0b, 0xf2, 0xf1, 0xfe, 0xbb, 0x96, + 0x3c, 0x94, 0x1a, 0xfc, 0x36, 0xe4, 0x5a, 0x5a, 0xc5, 0xe2, 0x71, 0xcd, + 0x99, 0x56, 0xcc, 0xda, 0x0d, 0x62, 0xc8, 0x7c}; + uint8_t ed25519_private_key[ED25519_PRIVATE_KEY_LEN] = {0}; + OPENSSL_memcpy(ed25519_private_key, kEd25519PrivateKey, + ED25519_PRIVATE_KEY_SEED_LEN); + OPENSSL_memcpy(ed25519_private_key + ED25519_PRIVATE_KEY_SEED_LEN, + kEd25519PublicKey, ED25519_PUBLIC_KEY_LEN); + uint8_t ed25519_out_sig[ED25519_SIGNATURE_LEN] = {0}; + if (!ED25519_sign(&ed25519_out_sig[0], &kEd25519Message[0], + sizeof(kEd25519Message), ed25519_private_key) || + !check_test(&kEd25519Signature[0], &ed25519_out_sig[0], + ED25519_SIGNATURE_LEN, "ED25519 sign")) { + fprintf(stderr, "ED25519 sign failed.\n"); + goto err; + } + if (!ED25519_verify(&kEd25519Message[0], sizeof(kEd25519Message), + ed25519_out_sig, kEd25519PublicKey)) { + fprintf(stderr, "ED25519 verify failed.\n"); + goto err; + } + ret = 1; err: From d13df4885b2609cc50d994065358466a0bd27207 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Tue, 10 Sep 2024 21:03:12 +0000 Subject: [PATCH 03/10] ACVP ML-KEM testing (#1840) By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- .../acvp/acvptool/subprocess/ml_kem.go | 194 ++++++++++++++++++ .../acvp/acvptool/subprocess/subprocess.go | 1 + .../acvp/acvptool/test/expected/ML-KEM.bz2 | Bin 0 -> 13960 bytes util/fipstools/acvp/acvptool/test/tests.json | 3 +- .../acvp/acvptool/test/vectors/ML-KEM.bz2 | Bin 0 -> 15398 bytes .../acvp/modulewrapper/modulewrapper.cc | 136 +++++++++++- 6 files changed, 330 insertions(+), 4 deletions(-) create mode 100644 util/fipstools/acvp/acvptool/subprocess/ml_kem.go create mode 100644 util/fipstools/acvp/acvptool/test/expected/ML-KEM.bz2 create mode 100644 util/fipstools/acvp/acvptool/test/vectors/ML-KEM.bz2 diff --git a/util/fipstools/acvp/acvptool/subprocess/ml_kem.go b/util/fipstools/acvp/acvptool/subprocess/ml_kem.go new file mode 100644 index 0000000000..59d5c4d75f --- /dev/null +++ b/util/fipstools/acvp/acvptool/subprocess/ml_kem.go @@ -0,0 +1,194 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 OR ISC + +package subprocess + +import ( + "encoding/json" + "fmt" + "strings" +) + +type mlKem struct{} + +func (*mlKem) Process(vectorSet []byte, m Transactable) (interface{}, error) { + var vs struct { + Mode string `json:"mode"` + TestGroups json.RawMessage `json:"testGroups"` + } + + if err := json.Unmarshal(vectorSet, &vs); err != nil { + return nil, err + } + + switch { + case strings.EqualFold(vs.Mode, "keyGen"): + return processMlKemKeyGen(vs.TestGroups, m) + case strings.EqualFold(vs.Mode, "encapDecap"): + return processMlKemEncapDecap(vs.TestGroups, m) + } + + return nil, fmt.Errorf("unknown ML-KEM mode: %v", vs.Mode) +} + +type mlKemKeyGenTestGroup struct { + ID uint64 `json:"tgId"` + Type string `json:"testType"` + ParameterSet string `json:"parameterSet"` + Tests []struct { + ID uint64 `json:"tcId"` + D hexEncodedByteString `json:"d"` + Z hexEncodedByteString `json:"z"` + } +} + +type mlKemKeyGenTestGroupResponse struct { + ID uint64 `json:"tgId"` + Tests []mlKemKeyGenTestCaseResponse `json:"tests"` +} + +type mlKemKeyGenTestCaseResponse struct { + ID uint64 `json:"tcId"` + EK hexEncodedByteString `json:"ek"` + DK hexEncodedByteString `json:"dk"` +} + +func processMlKemKeyGen(vectors json.RawMessage, m Transactable) (interface{}, error) { + var groups []mlKemKeyGenTestGroup + + if err := json.Unmarshal(vectors, &groups); err != nil { + return nil, err + } + + var responses []mlKemKeyGenTestGroupResponse + + for _, group := range groups { + if !strings.EqualFold(group.Type, "AFT") { + return nil, fmt.Errorf("unsupported keyGen test type: %v", group.Type) + } + + response := mlKemKeyGenTestGroupResponse{ + ID: group.ID, + } + + for _, test := range group.Tests { + results, err := m.Transact("ML-KEM/"+group.ParameterSet+"/keyGen", 2, test.D, test.Z) + if err != nil { + return nil, err + } + + ek := results[0] + dk := results[1] + + response.Tests = append(response.Tests, mlKemKeyGenTestCaseResponse{ + ID: test.ID, + EK: ek, + DK: dk, + }) + } + + responses = append(responses, response) + } + + return responses, nil +} + +type mlKemEncapDecapTestGroup struct { + ID uint64 `json:"tgId"` + Type string `json:"testType"` + ParameterSet string `json:"parameterSet"` + Function string `json:"function"` + DK hexEncodedByteString `json:"dk"` + Tests []struct { + ID uint64 `json:"tcId"` + EK hexEncodedByteString `json:"ek"` + M hexEncodedByteString `json:"m"` + C hexEncodedByteString `json:"c"` + } +} + +type mlKemEncDecapTestGroupResponse struct { + ID uint64 `json:"tgId"` + Tests []mlKemEncDecapTestCaseResponse `json:"tests"` +} + +type mlKemEncDecapTestCaseResponse struct { + ID uint64 `json:"tcId"` + C hexEncodedByteString `json:"c,omitempty"` + K hexEncodedByteString `json:"k,omitempty"` +} + +func processMlKemEncapDecap(vectors json.RawMessage, m Transactable) (interface{}, error) { + var groups []mlKemEncapDecapTestGroup + + if err := json.Unmarshal(vectors, &groups); err != nil { + return nil, err + } + + var responses []mlKemEncDecapTestGroupResponse + + for _, group := range groups { + if (strings.EqualFold(group.Function, "encapsulation") && !strings.EqualFold(group.Type, "AFT")) || + (strings.EqualFold(group.Function, "decapsulation") && !strings.EqualFold(group.Type, "VAL")) { + return nil, fmt.Errorf("unsupported encapDecap function and test group type pair: (%v, %v)", group.Function, group.Type) + } + + response := mlKemEncDecapTestGroupResponse{ + ID: group.ID, + } + + for _, test := range group.Tests { + var ( + err error + testResponse mlKemEncDecapTestCaseResponse + ) + + switch { + case strings.EqualFold(group.Function, "encapsulation"): + testResponse, err = processMlKemEncapTestCase(test.ID, group.ParameterSet, test.EK, test.M, m) + case strings.EqualFold(group.Function, "decapsulation"): + testResponse, err = processMlKemDecapTestCase(test.ID, group.ParameterSet, group.DK, test.C, m) + default: + return nil, fmt.Errorf("unknown encDecap function: %v", group.Function) + } + if err != nil { + return nil, err + } + + response.Tests = append(response.Tests, testResponse) + } + + responses = append(responses, response) + } + return responses, nil +} + +func processMlKemEncapTestCase(id uint64, algorithm string, ek []byte, m []byte, t Transactable) (mlKemEncDecapTestCaseResponse, error) { + results, err := t.Transact("ML-KEM/"+algorithm+"/encap", 2, ek, m) + if err != nil { + return mlKemEncDecapTestCaseResponse{}, err + } + + c := results[0] + k := results[1] + + return mlKemEncDecapTestCaseResponse{ + ID: id, + C: c, + K: k, + }, nil +} + +func processMlKemDecapTestCase(id uint64, algorithm string, dk []byte, c []byte, t Transactable) (mlKemEncDecapTestCaseResponse, error) { + results, err := t.Transact("ML-KEM/"+algorithm+"/decap", 1, dk, c) + if err != nil { + return mlKemEncDecapTestCaseResponse{}, err + } + + k := results[0] + + return mlKemEncDecapTestCaseResponse{ + ID: id, + K: k, + }, nil +} diff --git a/util/fipstools/acvp/acvptool/subprocess/subprocess.go b/util/fipstools/acvp/acvptool/subprocess/subprocess.go index b655b4a4ec..2f21c70723 100644 --- a/util/fipstools/acvp/acvptool/subprocess/subprocess.go +++ b/util/fipstools/acvp/acvptool/subprocess/subprocess.go @@ -153,6 +153,7 @@ func NewWithIO(cmd *exec.Cmd, in io.WriteCloser, out io.ReadCloser) *Subprocess "KAS-ECC-SSC": &kas{}, "KAS-FFC-SSC": &kasDH{}, "PBKDF": &pbkdf{}, + "ML-KEM": &mlKem{}, } m.primitives["ECDSA"] = &ecdsa{"ECDSA", map[string]bool{"P-224": true, "P-256": true, "P-384": true, "P-521": true}, m.primitives} diff --git a/util/fipstools/acvp/acvptool/test/expected/ML-KEM.bz2 b/util/fipstools/acvp/acvptool/test/expected/ML-KEM.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..a1c8378cab24752f217f73a75b49d90eb76ac2bc GIT binary patch literal 13960 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 literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/acvptool/test/tests.json b/util/fipstools/acvp/acvptool/test/tests.json index 6aa28a1d70..c8f48bf2f9 100644 --- a/util/fipstools/acvp/acvptool/test/tests.json +++ b/util/fipstools/acvp/acvptool/test/tests.json @@ -31,5 +31,6 @@ {"Wrapper": "modulewrapper", "In": "vectors/TLS-1.2-KDF.bz2", "Out": "expected/TLS-1.2-KDF.bz2"}, {"Wrapper": "modulewrapper", "In": "vectors/PBKDF.bz2", "Out": "expected/PBKDF.bz2"}, {"Wrapper": "modulewrapper", "In": "vectors/KDA-HKDF.bz2", "Out": "expected/KDA-HKDF.bz2"}, -{"Wrapper": "modulewrapper", "In": "vectors/KDA-OneStep.bz2", "Out": "expected/KDA-OneStep.bz2"} +{"Wrapper": "modulewrapper", "In": "vectors/KDA-OneStep.bz2", "Out": "expected/KDA-OneStep.bz2"}, +{"Wrapper": "modulewrapper", "In": "vectors/ML-KEM.bz2", "Out": "expected/ML-KEM.bz2"} ] diff --git a/util/fipstools/acvp/acvptool/test/vectors/ML-KEM.bz2 b/util/fipstools/acvp/acvptool/test/vectors/ML-KEM.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..09da3260915f774545c28690c93e017c7dae7951 GIT binary patch literal 15398 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 literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/modulewrapper/modulewrapper.cc b/util/fipstools/acvp/modulewrapper/modulewrapper.cc index 59d72e5bdb..4a8c4c5e31 100644 --- a/util/fipstools/acvp/modulewrapper/modulewrapper.cc +++ b/util/fipstools/acvp/modulewrapper/modulewrapper.cc @@ -12,11 +12,12 @@ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include #include #include #include #include -#include +#include #include @@ -41,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -732,7 +734,7 @@ static bool GetConfig(const Span args[], }] }] },)" - R"({ + R"({ "sigType": "pss", "properties": [{ "modulo": 2048, @@ -988,7 +990,7 @@ static bool GetConfig(const Span args[], }] }] },)" - R"({ + R"({ "sigType": "pss", "properties": [{ "modulo": 2048, @@ -1307,6 +1309,19 @@ static bool GetConfig(const Span args[], "encoding": ["concatenation"], "z": [{"min": 224, "max": 8192, "increment": 8}], "l": 2048 + },)" + R"({ + "algorithm": "ML-KEM", + "mode": "keyGen", + "revision": "FIPS203", + "parameterSets": ["ML-KEM-512", "ML-KEM-768", "ML-KEM-1024"] + }, + { + "algorithm": "ML-KEM", + "mode": "encapDecap", + "revision": "FIPS203", + "parameterSets": ["ML-KEM-512", "ML-KEM-768", "ML-KEM-1024"], + "functions": ["encapsulation", "decapsulation"] } ])"; return write_reply({Span( @@ -2830,6 +2845,112 @@ static bool KBKDF_CTR_HMAC(const Span args[], return write_reply({Span(out)}); } +template +static bool ML_KEM_KEYGEN(const Span args[], + ReplyCallback write_reply) { + const Span d = args[0]; + const Span z = args[1]; + + std::vector seed(d.size() + z.size()); + std::memcpy(seed.data(), d.data(), d.size()); + std::memcpy(seed.data() + d.size(), z.data(), z.size()); + + EVP_PKEY *raw = NULL; + size_t seed_len = 0; + + bssl::UniquePtr ctx(EVP_PKEY_CTX_new_id(EVP_PKEY_KEM, nullptr)); + if (!EVP_PKEY_CTX_kem_set_params(ctx.get(), nid) || + !EVP_PKEY_keygen_init(ctx.get()) || + !EVP_PKEY_keygen_deterministic(ctx.get(), &raw, NULL, &seed_len) || + seed_len != seed.size() || + !EVP_PKEY_keygen_deterministic(ctx.get(), &raw, seed.data(), &seed_len)) { + return false; + } + bssl::UniquePtr pkey(raw); + + size_t decaps_key_size = 0; + size_t encaps_key_size = 0; + + if (!EVP_PKEY_get_raw_private_key(pkey.get(), nullptr, &decaps_key_size) || + !EVP_PKEY_get_raw_public_key(pkey.get(), nullptr, &encaps_key_size)) { + return false; + } + + std::vector decaps_key(decaps_key_size); + std::vector encaps_key(encaps_key_size); + + if (!EVP_PKEY_get_raw_private_key(pkey.get(), decaps_key.data(), + &decaps_key_size) || + !EVP_PKEY_get_raw_public_key(pkey.get(), encaps_key.data(), + &encaps_key_size)) { + return false; + } + + return write_reply({Span(encaps_key.data(), encaps_key_size), + Span(decaps_key.data(), decaps_key_size)}); +} + +template +static bool ML_KEM_ENCAP(const Span args[], + ReplyCallback write_reply) { + const Span ek = args[0]; + const Span m = args[1]; + + bssl::UniquePtr pkey( + EVP_PKEY_kem_new_raw_public_key(nid, ek.data(), ek.size())); + bssl::UniquePtr ctx(EVP_PKEY_CTX_new(pkey.get(), nullptr)); + + size_t ciphertext_len = 0; + size_t shared_secret_len = 0; + size_t seed_len = 0; + if (!EVP_PKEY_encapsulate_deterministic(ctx.get(), nullptr, &ciphertext_len, + nullptr, &shared_secret_len, nullptr, + &seed_len) || + seed_len != m.size()) { + return false; + } + + std::vector ciphertext(ciphertext_len); + std::vector shared_secret(shared_secret_len); + + if (!EVP_PKEY_encapsulate_deterministic( + ctx.get(), ciphertext.data(), &ciphertext_len, shared_secret.data(), + &shared_secret_len, m.data(), &seed_len)) { + return false; + } + + return write_reply( + {Span(ciphertext.data(), ciphertext_len), + Span(shared_secret.data(), shared_secret_len)}); +} + +template +static bool ML_KEM_DECAP(const Span args[], + ReplyCallback write_reply) { + const Span dk = args[0]; + const Span c = args[1]; + + bssl::UniquePtr pkey( + EVP_PKEY_kem_new_raw_secret_key(nid, dk.data(), dk.size())); + bssl::UniquePtr ctx(EVP_PKEY_CTX_new(pkey.get(), nullptr)); + + size_t shared_secret_len = 0; + if (!EVP_PKEY_decapsulate(ctx.get(), nullptr, &shared_secret_len, c.data(), + c.size())) { + return false; + } + + std::vector shared_secret(shared_secret_len); + + if (!EVP_PKEY_decapsulate(ctx.get(), shared_secret.data(), &shared_secret_len, + c.data(), c.size())) { + return false; + } + + return write_reply( + {Span(shared_secret.data(), shared_secret_len)}); +} + static struct { char name[kMaxNameLength + 1]; uint8_t num_expected_args; @@ -3064,6 +3185,15 @@ static struct { {"KDF/Counter/HMAC-SHA2-512", 3, KBKDF_CTR_HMAC}, {"KDF/Counter/HMAC-SHA2-512/224", 3, KBKDF_CTR_HMAC}, {"KDF/Counter/HMAC-SHA2-512/256", 3, KBKDF_CTR_HMAC}, + {"ML-KEM/ML-KEM-512/keyGen", 2, ML_KEM_KEYGEN}, + {"ML-KEM/ML-KEM-768/keyGen", 2, ML_KEM_KEYGEN}, + {"ML-KEM/ML-KEM-1024/keyGen", 2, ML_KEM_KEYGEN}, + {"ML-KEM/ML-KEM-512/encap", 2, ML_KEM_ENCAP}, + {"ML-KEM/ML-KEM-768/encap", 2, ML_KEM_ENCAP}, + {"ML-KEM/ML-KEM-1024/encap", 2, ML_KEM_ENCAP}, + {"ML-KEM/ML-KEM-512/decap", 2, ML_KEM_DECAP}, + {"ML-KEM/ML-KEM-768/decap", 2, ML_KEM_DECAP}, + {"ML-KEM/ML-KEM-1024/decap", 2, ML_KEM_DECAP}, }; Handler FindHandler(Span> args) { From 51d9a8d3b3270fc506fb039a1af0c6f3033f37b6 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Tue, 10 Sep 2024 21:03:42 +0000 Subject: [PATCH 04/10] ACVP ECDSA SHA3 Digest Testing (#1819) By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- .../acvp/acvptool/subprocess/ecdsa.go | 108 ++++++------------ .../acvp/acvptool/test/expected/ECDSA.bz2 | Bin 439 -> 524 bytes util/fipstools/acvp/acvptool/test/tests.json | 1 + .../acvptool/test/vectors/ECDSA-KeyGen.bz2 | Bin 0 -> 372 bytes .../acvptool/test/vectors/ECDSA-SigGen.bz2 | Bin 3416 -> 6112 bytes .../acvp/acvptool/test/vectors/ECDSA.bz2 | Bin 8485 -> 14928 bytes .../acvp/modulewrapper/modulewrapper.cc | 20 +++- 7 files changed, 52 insertions(+), 77 deletions(-) create mode 100644 util/fipstools/acvp/acvptool/test/vectors/ECDSA-KeyGen.bz2 diff --git a/util/fipstools/acvp/acvptool/subprocess/ecdsa.go b/util/fipstools/acvp/acvptool/subprocess/ecdsa.go index db240bb21f..798716aa49 100644 --- a/util/fipstools/acvp/acvptool/subprocess/ecdsa.go +++ b/util/fipstools/acvp/acvptool/subprocess/ecdsa.go @@ -16,7 +16,6 @@ package subprocess import ( "bytes" - "encoding/hex" "encoding/json" "fmt" ) @@ -36,30 +35,30 @@ type ecdsaTestGroup struct { HashAlgo string `json:"hashAlg,omitEmpty"` ComponentTest bool `json:"componentTest"` Tests []struct { - ID uint64 `json:"tcId"` - QxHex string `json:"qx,omitempty"` - QyHex string `json:"qy,omitempty"` - RHex string `json:"r,omitempty"` - SHex string `json:"s,omitempty"` - MsgHex string `json:"message,omitempty"` + ID uint64 `json:"tcId"` + Qx hexEncodedByteString `json:"qx,omitempty"` + Qy hexEncodedByteString `json:"qy,omitempty"` + R hexEncodedByteString `json:"r,omitempty"` + S hexEncodedByteString `json:"s,omitempty"` + Msg hexEncodedByteString `json:"message,omitempty"` } `json:"tests"` } type ecdsaTestGroupResponse struct { - ID uint64 `json:"tgId"` - Tests []ecdsaTestResponse `json:"tests"` - QxHex string `json:"qx,omitempty"` - QyHex string `json:"qy,omitempty"` + ID uint64 `json:"tgId"` + Tests []ecdsaTestResponse `json:"tests"` + Qx hexEncodedByteString `json:"qx,omitempty"` + Qy hexEncodedByteString `json:"qy,omitempty"` } type ecdsaTestResponse struct { - ID uint64 `json:"tcId"` - DHex string `json:"d,omitempty"` - QxHex string `json:"qx,omitempty"` - QyHex string `json:"qy,omitempty"` - RHex string `json:"r,omitempty"` - SHex string `json:"s,omitempty"` - Passed *bool `json:"testPassed,omitempty"` // using pointer so value is not omitted when it is false + ID uint64 `json:"tcId"` + D hexEncodedByteString `json:"d,omitempty"` + Qx hexEncodedByteString `json:"qx,omitempty"` + Qy hexEncodedByteString `json:"qy,omitempty"` + R hexEncodedByteString `json:"r,omitempty"` + S hexEncodedByteString `json:"s,omitempty"` + Passed *bool `json:"testPassed,omitempty"` // using pointer so value is not omitted when it is false } // ecdsa implements an ACVP algorithm by making requests to the @@ -83,8 +82,6 @@ func (e *ecdsa) Process(vectorSet []byte, m Transactable) (interface{}, error) { // https://pages.nist.gov/ACVP/draft-fussell-acvp-ecdsa.html#name-test-vectors // for details about the tests. for _, group := range parsed.Groups { - group := group - if _, ok := e.curves[group.Curve]; !ok { return nil, fmt.Errorf("curve %q in test group %d not supported", group.Curve, group.ID) } @@ -92,13 +89,10 @@ func (e *ecdsa) Process(vectorSet []byte, m Transactable) (interface{}, error) { response := ecdsaTestGroupResponse{ ID: group.ID, } + var sigGenPrivateKey []byte - var qxHex []byte - var qyHex []byte for _, test := range group.Tests { - test := test - var testResp ecdsaTestResponse switch parsed.Mode { @@ -110,20 +104,12 @@ func (e *ecdsa) Process(vectorSet []byte, m Transactable) (interface{}, error) { if err != nil { return nil, fmt.Errorf("key generation failed for test case %d/%d: %s", group.ID, test.ID, err) } - testResp.DHex = hex.EncodeToString(result[0]) - testResp.QxHex = hex.EncodeToString(result[1]) - testResp.QyHex = hex.EncodeToString(result[2]) + testResp.D = result[0] + testResp.Qx = result[1] + testResp.Qy = result[2] case "keyVer": - qx, err := hex.DecodeString(test.QxHex) - if err != nil { - return nil, fmt.Errorf("failed to decode qx in test case %d/%d: %s", group.ID, test.ID, err) - } - qy, err := hex.DecodeString(test.QyHex) - if err != nil { - return nil, fmt.Errorf("failed to decode qy in test case %d/%d: %s", group.ID, test.ID, err) - } - result, err := m.Transact(e.algo+"/"+"keyVer", 1, []byte(group.Curve), qx, qy) + result, err := m.Transact(e.algo+"/"+"keyVer", 1, []byte(group.Curve), test.Qx, test.Qy) if err != nil { return nil, fmt.Errorf("key verification failed for test case %d/%d: %s", group.ID, test.ID, err) } @@ -154,39 +140,31 @@ func (e *ecdsa) Process(vectorSet []byte, m Transactable) (interface{}, error) { } sigGenPrivateKey = result[0] - qxHex = result[1] - qyHex = result[2] - response.QxHex = hex.EncodeToString(qxHex) - response.QyHex = hex.EncodeToString(qyHex) + response.Qx = result[1] + response.Qy = result[2] } - msg, err := hex.DecodeString(test.MsgHex) - if err != nil { - return nil, fmt.Errorf("failed to decode message hex in test case %d/%d: %s", group.ID, test.ID, err) - } op := e.algo + "/" + "sigGen" if group.ComponentTest { - if len(msg) != h.size { - return nil, fmt.Errorf("test case %d/%d contains message %q of length %d, but expected length %d", group.ID, test.ID, test.MsgHex, len(msg), h.size) + if len(test.Msg) != h.size { + return nil, fmt.Errorf("test case %d/%d contains message %q of length %d, but expected length %d", group.ID, test.ID, test.Msg, len(test.Msg), h.size) } op += "/componentTest" } - result, err := m.Transact(op, 2, []byte(group.Curve), sigGenPrivateKey, []byte(group.HashAlgo), msg) + result, err := m.Transact(op, 2, []byte(group.Curve), sigGenPrivateKey, []byte(group.HashAlgo), test.Msg) if err != nil { return nil, fmt.Errorf("signature generation failed for test case %d/%d: %s", group.ID, test.ID, err) } - rHex := result[0] - sHex := result[1] - testResp.RHex = hex.EncodeToString(rHex) - testResp.SHex = hex.EncodeToString(sHex) + testResp.R = result[0] + testResp.S = result[1] // Ask the subprocess to verify the generated signature for this test case. - ver_result, ver_err := m.Transact(e.algo+"/"+"sigVer", 1, []byte(group.Curve), []byte(group.HashAlgo), msg, qxHex, qyHex, rHex, sHex) + ver_result, ver_err := m.Transact(e.algo+"/"+"sigVer", 1, []byte(group.Curve), []byte(group.HashAlgo), test.Msg, response.Qx, response.Qy, testResp.R, testResp.S) if ver_err != nil { - return nil, fmt.Errorf("After signature generation, signature verification failed for test case %d/%d: %s", group.ID, test.ID, ver_err) + return nil, fmt.Errorf("after signature generation, signature verification failed for test case %d/%d: %s", group.ID, test.ID, ver_err) } // ver_result[0] should be a single byte. The value should be one in this case. if !bytes.Equal(ver_result[0], []byte{01}) { - return nil, fmt.Errorf("After signature generation, signature verification returned unexpected result: %q for test case %d/%d.", ver_result[0], group.ID, test.ID) + return nil, fmt.Errorf("after signature generation, signature verification returned unexpected result: %q for test case %d/%d", ver_result[0], group.ID, test.ID) } case "sigVer": @@ -196,27 +174,7 @@ func (e *ecdsa) Process(vectorSet []byte, m Transactable) (interface{}, error) { return nil, fmt.Errorf("unsupported hash algorithm %q in test group %d", group.HashAlgo, group.ID) } - msg, err := hex.DecodeString(test.MsgHex) - if err != nil { - return nil, fmt.Errorf("failed to decode message hex in test case %d/%d: %s", group.ID, test.ID, err) - } - qx, err := hex.DecodeString(test.QxHex) - if err != nil { - return nil, fmt.Errorf("failed to decode qx in test case %d/%d: %s", group.ID, test.ID, err) - } - qy, err := hex.DecodeString(test.QyHex) - if err != nil { - return nil, fmt.Errorf("failed to decode qy in test case %d/%d: %s", group.ID, test.ID, err) - } - r, err := hex.DecodeString(test.RHex) - if err != nil { - return nil, fmt.Errorf("failed to decode R in test case %d/%d: %s", group.ID, test.ID, err) - } - s, err := hex.DecodeString(test.SHex) - if err != nil { - return nil, fmt.Errorf("failed to decode S in test case %d/%d: %s", group.ID, test.ID, err) - } - result, err := m.Transact(e.algo+"/"+"sigVer", 1, []byte(group.Curve), []byte(group.HashAlgo), msg, qx, qy, r, s) + result, err := m.Transact(e.algo+"/"+"sigVer", 1, []byte(group.Curve), []byte(group.HashAlgo), test.Msg, test.Qx, test.Qy, test.R, test.S) if err != nil { return nil, fmt.Errorf("signature verification failed for test case %d/%d: %s", group.ID, test.ID, err) } diff --git a/util/fipstools/acvp/acvptool/test/expected/ECDSA.bz2 b/util/fipstools/acvp/acvptool/test/expected/ECDSA.bz2 index 0d508a8736a5783a3169b93c07eb1de50371946d..063cf2417dcec7b7626e390f03e896fd23924190 100644 GIT binary patch literal 524 zcmV+n0`vVsT4*^jL0KkKS@2Q!M*s*Me}F_(Kmbq%|L`uLP8u)g-wHqid`1IM8YIO0 zsWmb^BhVw$Ns|*JLnZ{8kW&*>^d^8B0BH398Vm-2&;SOS4FJ#vfTcL`NacpA-&QFefFsbqj0ci_BS_1n8oGk%qZr`ygskK!u$csN~=h>^Jub;i& z_(I`DfVAFsP&0=B2DAVJL4}}L9?;Cg+V2~*-+lg&%QTWxNl=nWNhIniB}ysiK|&FX z)RLvl=Q+jZX^ABli6q3M2}qJ?DisPy?Wc1s_QYm@ynzAI9(?O z5|HNE>IV94Y)$Q(^e{O@(|VreW~>iRrftU6j#Z|)wCQwC2y1FhN!gTASLot$60w3|k{rb4&5t1{s`Lt6PS)zY)%AqkC-MU9FqKtCR>6 zT=P3miG#TO&%%l-#ZgpND-}h2g%qmAMMet&MO0X;ECD%;?w$JU=#VFGr~>wPTYA`d zNd5)n3+Z@Y)GWbo<%S3>L|CL0g0IitC<1wAkbxQ12+SAVi$&k`Y6>Sr8T4Z=MJd;0pk>g3t>*hgUJ9@mk*w?mgazvXXhB#Mg{&Y;BX&3Hva2ME)m%w1FDl{-?Lp6D2}uN!s!1y> z3oOB&DM2`yJteV3?L8S8qR6s3qI1r_qQ@&v2QE7BcZ9qgu#x<<)JIl}0;yu(+ zRuy=LVipucMNwg7aRS;#_e~lVcWedMv8uus3Vs6eg6?jAL|OrG>5&N*5hc4^K(;wi zSn3p@7ScG{+{A*M4mdHT?kO`l%2Ho>aBp-b6}70KQv$94Ul0J90FN;jGXO3kHNHb2 hSs2F|Dwu-fF=5`oTR~v~V2_jjF64@Ep&?Jv$) ziKz7kk5Kf=4FCs}FwoEd02%-Q001h95DDrHq75zKUH#K7wf~9VIAK zNTJbjLhF%%7#n8;dX`d-$JuL`Ux#&2pE4ZT4NPG+qHWKVZ-C7a$Vm#L2PtJ$?&RL6yky5*GOXdmPDS`aVkV-}b0jWJ!n1*zqV>F2u9y{-Qsru?tiJm< S5}?eB{x0N-aG@bzC~|<*522g@ literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/acvptool/test/vectors/ECDSA-SigGen.bz2 b/util/fipstools/acvp/acvptool/test/vectors/ECDSA-SigGen.bz2 index 474e3c0849e5ed207a618cc952d953863ccf1de8..ed73c4533cda937df8e44ff2305f5740909934a9 100644 GIT binary patch literal 6112 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 literal 3416 zcmV-e4X5%#T4*^jL0KkKS+d!XkN^>l-+)z6PzV3;KjKabFYn(fU=Tk5cX~YyREnrT zq*6*kg%qu_w!okTD5@R+0x7a+8klKN44N?-007e_2龺yP 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

rY%aQ$I44jne=NMV56eEw^! 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 args[], "SHA2-384", "SHA2-512", "SHA2-512/224", - "SHA2-512/256" + "SHA2-512/256", + "SHA3-224", + "SHA3-256", + "SHA3-384", + "SHA3-512" ] }] }, @@ -613,7 +617,11 @@ static bool GetConfig(const Span args[], "SHA2-384", "SHA2-512", "SHA2-512/224", - "SHA2-512/256" + "SHA2-512/256", + "SHA3-224", + "SHA3-256", + "SHA3-384", + "SHA3-512" ] }] },)" @@ -2287,6 +2295,14 @@ static const EVP_MD *HashFromName(Span name) { return EVP_sha512_224(); } else if (StringEq(name, "SHA2-512/256")) { return EVP_sha512_256(); + } else if (StringEq(name, "SHA3-224")) { + return EVP_sha3_224(); + } else if (StringEq(name, "SHA3-256")) { + return EVP_sha3_256(); + } else if (StringEq(name, "SHA3-384")) { + return EVP_sha3_384(); + } else if (StringEq(name, "SHA3-512")) { + return EVP_sha3_512(); } else if (StringEq(name, "SHAKE-128")) { return EVP_shake128(); } else if (StringEq(name, "SHAKE-256")) { From 9a644b2026e96f6b974d8dc055852df1063d55c6 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:10:39 +0000 Subject: [PATCH 05/10] ML-KEM Service Indicator for EVP_PKEY_keygen, EVP_PKEY_encapsulate, EVP_PKEY_decapsulate (#1844) ### Description of changes: * Fixes `EVP_DigestSign` to not set the indicator on size checks * Adds service indicator for ML-KEM-{5127,768,1024} for `EVP_PKEY_keygen`, `EVP_PKEY_encapsulate`, `EVP_PKEY_decapsulate` functions. * Adjusts the internal `pkey_kem_keygen` function to use `kem_key` union member for consistency when setting the generated keypair on the EVP_PKEY. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/fipsmodule/evp/digestsign.c | 4 +- crypto/fipsmodule/evp/evp_ctx.c | 54 ++++++++++---- crypto/fipsmodule/evp/p_kem.c | 3 +- .../fipsmodule/service_indicator/internal.h | 6 ++ .../service_indicator/service_indicator.c | 41 +++++++++++ .../service_indicator_test.cc | 71 ++++++++++++++++++- 6 files changed, 160 insertions(+), 19 deletions(-) diff --git a/crypto/fipsmodule/evp/digestsign.c b/crypto/fipsmodule/evp/digestsign.c index e2bedf0c42..39914db92a 100644 --- a/crypto/fipsmodule/evp/digestsign.c +++ b/crypto/fipsmodule/evp/digestsign.c @@ -292,7 +292,9 @@ int EVP_DigestSign(EVP_MD_CTX *ctx, uint8_t *out_sig, size_t *out_sig_len, data_len); end: FIPS_service_indicator_unlock_state(); - if (ret > 0) { + if (ret > 0 && out_sig != NULL) { + // Indicator should only be set if we performed crypto, don't set if we only + // performed a size check. EVP_DigestSign_verify_service_indicator(ctx); } return ret; diff --git a/crypto/fipsmodule/evp/evp_ctx.c b/crypto/fipsmodule/evp/evp_ctx.c index e659e317dc..e827c39caf 100644 --- a/crypto/fipsmodule/evp/evp_ctx.c +++ b/crypto/fipsmodule/evp/evp_ctx.c @@ -591,30 +591,56 @@ int EVP_PKEY_encapsulate_deterministic(EVP_PKEY_CTX *ctx, seed, seed_len); } -int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx, - uint8_t *ciphertext, size_t *ciphertext_len, - uint8_t *shared_secret, size_t *shared_secret_len) { +int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx, uint8_t *ciphertext, + size_t *ciphertext_len, uint8_t *shared_secret, + size_t *shared_secret_len) { + // We have to avoid potential underlying services updating the indicator + // state, so we lock the state here. + FIPS_service_indicator_lock_state(); SET_DIT_AUTO_DISABLE; + int ret = 0; if (ctx == NULL || ctx->pmeth == NULL || ctx->pmeth->encapsulate == NULL) { - OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); - return 0; + OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); + goto end; } - return ctx->pmeth->encapsulate(ctx, ciphertext, ciphertext_len, - shared_secret, shared_secret_len); + if (!ctx->pmeth->encapsulate(ctx, ciphertext, ciphertext_len, shared_secret, + shared_secret_len)) { + goto end; + } + ret = 1; +end: + FIPS_service_indicator_unlock_state(); + if (ret && ciphertext != NULL && shared_secret != NULL) { + EVP_PKEY_encapsulate_verify_service_indicator(ctx); + } + return ret; } -int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, - uint8_t *shared_secret, size_t *shared_secret_len, - const uint8_t *ciphertext, size_t ciphertext_len) { +int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, uint8_t *shared_secret, + size_t *shared_secret_len, const uint8_t *ciphertext, + size_t ciphertext_len) { + // We have to avoid potential underlying services updating the indicator + // state, so we lock the state here. + FIPS_service_indicator_lock_state(); SET_DIT_AUTO_DISABLE; + int ret = 0; if (ctx == NULL || ctx->pmeth == NULL || ctx->pmeth->decapsulate == NULL) { - OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); - return 0; + OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); + goto end; } - return ctx->pmeth->decapsulate(ctx, shared_secret, shared_secret_len, - ciphertext, ciphertext_len); + if (!ctx->pmeth->decapsulate(ctx, shared_secret, shared_secret_len, + ciphertext, ciphertext_len)) { + goto end; + } + ret = 1; +end: + FIPS_service_indicator_unlock_state(); + if (ret && shared_secret != NULL) { + EVP_PKEY_decapsulate_verify_service_indicator(ctx); + } + return ret; } // Deprecated keygen NO-OP functions diff --git a/crypto/fipsmodule/evp/p_kem.c b/crypto/fipsmodule/evp/p_kem.c index c5c310e122..64a96693fd 100644 --- a/crypto/fipsmodule/evp/p_kem.c +++ b/crypto/fipsmodule/evp/p_kem.c @@ -95,10 +95,11 @@ static int pkey_kem_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { if (key == NULL || !KEM_KEY_init(key, kem) || !kem->method->keygen(key->public_key, key->secret_key) || - !EVP_PKEY_assign(pkey, EVP_PKEY_KEM, key)) { + !EVP_PKEY_set_type(pkey, EVP_PKEY_KEM)) { KEM_KEY_free(key); return 0; } + pkey->pkey.kem_key = key; return 1; } diff --git a/crypto/fipsmodule/service_indicator/internal.h b/crypto/fipsmodule/service_indicator/internal.h index b051ff62af..0f8881132b 100644 --- a/crypto/fipsmodule/service_indicator/internal.h +++ b/crypto/fipsmodule/service_indicator/internal.h @@ -56,6 +56,8 @@ void TLSKDF_verify_service_indicator(const EVP_MD *dgst, const char *label, void SSKDF_digest_verify_service_indicator(const EVP_MD *dgst); void SSKDF_hmac_verify_service_indicator(const EVP_MD *dgst); void KBKDF_ctr_hmac_verify_service_indicator(const EVP_MD *dgst); +void EVP_PKEY_encapsulate_verify_service_indicator(const EVP_PKEY_CTX* ctx); +void EVP_PKEY_decapsulate_verify_service_indicator(const EVP_PKEY_CTX* ctx); #else @@ -127,6 +129,10 @@ OPENSSL_INLINE void SSKDF_hmac_verify_service_indicator( OPENSSL_INLINE void KBKDF_ctr_hmac_verify_service_indicator(OPENSSL_UNUSED const EVP_MD *dgst) {} +OPENSSL_INLINE void EVP_PKEY_encapsulate_verify_service_indicator(OPENSSL_UNUSED const EVP_PKEY_CTX* ctx) {} + +OPENSSL_INLINE void EVP_PKEY_decapsulate_verify_service_indicator(OPENSSL_UNUSED const EVP_PKEY_CTX* ctx) {} + #endif // AWSLC_FIPS // is_fips_build is similar to |FIPS_mode| but returns 1 including in the case diff --git a/crypto/fipsmodule/service_indicator/service_indicator.c b/crypto/fipsmodule/service_indicator/service_indicator.c index 791038e071..e642e9626f 100644 --- a/crypto/fipsmodule/service_indicator/service_indicator.c +++ b/crypto/fipsmodule/service_indicator/service_indicator.c @@ -319,6 +319,17 @@ void EVP_PKEY_keygen_verify_service_indicator(const EVP_PKEY *pkey) { if (is_ec_fips_approved(curve_nid)) { FIPS_service_indicator_update_state(); } + } else if (pkey->type == EVP_PKEY_KEM) { + const KEM *kem = KEM_KEY_get0_kem(pkey->pkey.kem_key); + switch (kem->nid) { + case NID_MLKEM512: + case NID_MLKEM768: + case NID_MLKEM1024: + FIPS_service_indicator_update_state(); + break; + default: + break; + } } } @@ -571,6 +582,36 @@ void KBKDF_ctr_hmac_verify_service_indicator(const EVP_MD *dgst) { } } +void EVP_PKEY_encapsulate_verify_service_indicator(const EVP_PKEY_CTX* ctx) { + if (ctx->pkey->type == EVP_PKEY_KEM) { + const KEM *kem = KEM_KEY_get0_kem(ctx->pkey->pkey.kem_key); + switch (kem->nid) { + case NID_MLKEM512: + case NID_MLKEM768: + case NID_MLKEM1024: + FIPS_service_indicator_update_state(); + break; + default: + break; + } + } +} + +void EVP_PKEY_decapsulate_verify_service_indicator(const EVP_PKEY_CTX* ctx) { + if (ctx->pkey->type == EVP_PKEY_KEM) { + const KEM *kem = KEM_KEY_get0_kem(ctx->pkey->pkey.kem_key); + switch (kem->nid) { + case NID_MLKEM512: + case NID_MLKEM768: + case NID_MLKEM1024: + FIPS_service_indicator_update_state(); + break; + default: + break; + } + } +} + #else uint64_t FIPS_service_indicator_before_call(void) { return 0; } diff --git a/crypto/fipsmodule/service_indicator/service_indicator_test.cc b/crypto/fipsmodule/service_indicator/service_indicator_test.cc index 6495aa795f..e25587506e 100644 --- a/crypto/fipsmodule/service_indicator/service_indicator_test.cc +++ b/crypto/fipsmodule/service_indicator/service_indicator_test.cc @@ -2297,21 +2297,31 @@ TEST_P(RSAServiceIndicatorTest, RSASigGen) { &sig_len))); EXPECT_EQ(approved, test.sig_gen_expect_approved); - // Test using the one-shot |EVP_DigestSign| function for approval. md_ctx.Reset(); std::vector oneshot_output(sig_len); CALL_SERVICE_AND_CHECK_APPROVED( approved, ASSERT_TRUE(EVP_DigestSignInit(md_ctx.get(), &pctx, test.func(), nullptr, pkey.get()))); EXPECT_EQ(approved, AWSLC_NOT_APPROVED); + if (test.use_pss) { - CALL_SERVICE_AND_CHECK_APPROVED(approved, - ASSERT_TRUE(EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING))); + CALL_SERVICE_AND_CHECK_APPROVED( + approved, + ASSERT_TRUE(EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING))); EXPECT_EQ(approved, AWSLC_NOT_APPROVED); CALL_SERVICE_AND_CHECK_APPROVED( approved, ASSERT_TRUE(EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1))); EXPECT_EQ(approved, AWSLC_NOT_APPROVED); } + + // Test the one-shot |EVP_DigestSign| function to determine size. + // This should not set the indicator. + CALL_SERVICE_AND_CHECK_APPROVED( + approved, + ASSERT_TRUE(EVP_DigestSign(md_ctx.get(), nullptr, &sig_len, nullptr, 0))); + EXPECT_EQ(approved, AWSLC_NOT_APPROVED); + + // Now test using the one-shot |EVP_DigestSign| function for approval. CALL_SERVICE_AND_CHECK_APPROVED(approved, ASSERT_TRUE(EVP_DigestSign(md_ctx.get(), oneshot_output.data(), &sig_len, kPlaintext, sizeof(kPlaintext)))); @@ -4557,6 +4567,61 @@ TEST_P(KBKDFCtrHmacIndicatorTest, KBKDF) { ASSERT_EQ(vector.expectation, approved); } +TEST(ServiceIndicatorTest, ML_KEM) { + for (int nid : {NID_MLKEM512, NID_MLKEM768, NID_MLKEM1024}) { + bssl::UniquePtr ctx( + EVP_PKEY_CTX_new_id(EVP_PKEY_KEM, nullptr)); + ASSERT_TRUE(EVP_PKEY_CTX_kem_set_params(ctx.get(), nid)); + ASSERT_TRUE(EVP_PKEY_keygen_init(ctx.get())); + + FIPSStatus approved = AWSLC_NOT_APPROVED; + EVP_PKEY *raw = nullptr; + // keygen for ML-KEM algorithms should be approved + CALL_SERVICE_AND_CHECK_APPROVED(approved, EVP_PKEY_keygen(ctx.get(), &raw)); + bssl::UniquePtr pkey(raw); + ASSERT_EQ(approved, AWSLC_APPROVED); + + size_t ciphertext_len = 0; + size_t shared_secret_len = 0; + + ctx.reset(EVP_PKEY_CTX_new(pkey.get(), nullptr)); + + approved = AWSLC_NOT_APPROVED; + // encapsulate size check should not set indicator + CALL_SERVICE_AND_CHECK_APPROVED( + approved, EVP_PKEY_encapsulate(ctx.get(), nullptr, &ciphertext_len, + nullptr, &shared_secret_len)); + ASSERT_EQ(approved, AWSLC_NOT_APPROVED); + + std::vector ciphertext(ciphertext_len); + std::vector encap_shared_secret(shared_secret_len); + + // encapsulate should set indicator + CALL_SERVICE_AND_CHECK_APPROVED( + approved, + EVP_PKEY_encapsulate(ctx.get(), ciphertext.data(), &ciphertext_len, + encap_shared_secret.data(), &shared_secret_len)); + ASSERT_EQ(approved, AWSLC_APPROVED); + + shared_secret_len = 0; + approved = AWSLC_NOT_APPROVED; + // decapsulate size check should not set indicator + CALL_SERVICE_AND_CHECK_APPROVED( + approved, EVP_PKEY_decapsulate(ctx.get(), nullptr, &shared_secret_len, + ciphertext.data(), ciphertext.size())); + ASSERT_EQ(approved, AWSLC_NOT_APPROVED); + + std::vector decap_shared_secret(shared_secret_len); + // decapsulate should set indicator + CALL_SERVICE_AND_CHECK_APPROVED( + approved, EVP_PKEY_decapsulate(ctx.get(), decap_shared_secret.data(), + &shared_secret_len, ciphertext.data(), + ciphertext.size())); + ASSERT_EQ(approved, AWSLC_APPROVED); + ASSERT_EQ(encap_shared_secret, decap_shared_secret); + } +} + // Verifies that the awslc_version_string is as expected. // Since this is running in FIPS mode it should end in FIPS // Update this when the AWS-LC version number is modified From be42eddaff8f71091cefe85bcc42744b43783ff9 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Wed, 11 Sep 2024 21:47:09 +0000 Subject: [PATCH 06/10] Add ML-KEM CAST for KeyGen, Encaps, and Decaps (#1846) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description of changes: * Per the I.G guidance a CAST using a KAT is required for ML-KEM key generation > if the module implements ML-KEM key generation, the module shall have an ML-KEM key generation CAST. The ML-KEM key generation does not take input and outputs an encapsulation key (ek) and a decapsulation key (dk). The CAST shall use the ML-KEM key generation algorithm (i.e., Algorithm 19 in FIPS 203), and for a KAT, using a fixed/predetermined random values (i.e., z and d), to compare the resulting outputs to the pre-computed values of ek and dk. * Per the I.G guidance a CAST using a KAT is required for ML-KEM encapsulation > if the module implements ML-KEM encapsulation, the module shall have a CAST for the ML-KEM encapsulation mechanism. The encapsulation algorithm of ML-KEM accepts an encapsulation key (ek) as input, requires randomness, and outputs a ciphertext (c) and a shared secret (K). The CAST shall use the ML-KEM encapsulation algorithm (i.e., Algorithm 20 in FIPS 203), and for a KAT, using fixed/predetermined ek and m values, to compare the resulting outputs to pre-computed values of both c and K. * Per the I.G. guidance a CAST using two KATs is required for mL-KEM decapsulation, one to test the non-implicit rejection path, and the other to test the rejection path. > if the module implements ML-KEM decapsulation, the module shall have a CAST for the ML-KEM decapsulation mechanism. The decapsulation algorithm of ML-KEM accepts a decapsulation key (dk) and a ML-KEM ciphertext (c) as input, does not use any randomness, and outputs a shared secret (K’). The CAST shall use the ML-KEM decapsulation algorithm (i.e., Algorithm 21 in FIPS 203), and for a KAT, using fixed/predetermined dk and c values, to compare the resulting outputs to pre- computed value of K'. Note21: The ML-KEM decapsulation CASTs shall cover both the implicit rejection and (unnamed) non-rejection paths. The source of the vectors were sourced from the ML-KEM ACVP demo server vectors that had been previously validated with. Also only one ML-KEM parameter variant needs to be tested per I.G.: > Note22: The above CASTs shall be performed on at least one of the following parameter-sets for ML- KEM that are implemented in the approved mode: ML-KEM-512, ML-KEM-768, or ML-KEM-1024. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/fipsmodule/ml_kem/ml_kem.c | 39 +- crypto/fipsmodule/ml_kem/ml_kem.h | 13 + crypto/fipsmodule/self_check/self_check.c | 693 +++++++++++++++++++++- crypto/internal.h | 6 + 4 files changed, 749 insertions(+), 2 deletions(-) diff --git a/crypto/fipsmodule/ml_kem/ml_kem.c b/crypto/fipsmodule/ml_kem/ml_kem.c index 736983d820..1da7350e4b 100644 --- a/crypto/fipsmodule/ml_kem/ml_kem.c +++ b/crypto/fipsmodule/ml_kem/ml_kem.c @@ -16,6 +16,7 @@ #include "./ml_kem_ref/reduce.c" #include "./ml_kem_ref/symmetric-shake.c" #include "./ml_kem_ref/verify.c" +#include "../../internal.h" // Note: These methods currently default to using the reference code for ML_KEM. // In a future where AWS-LC has optimized options available, those can be @@ -25,6 +26,13 @@ int ml_kem_512_keypair_deterministic(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */, const uint8_t *seed /* IN */) { + boringssl_ensure_ml_kem_self_test(); + return ml_kem_512_keypair_deterministic_no_self_test(public_key, secret_key, seed); +} + +int ml_kem_512_keypair_deterministic_no_self_test(uint8_t *public_key /* OUT */, + uint8_t *secret_key /* OUT */, + const uint8_t *seed /* IN */) { ml_kem_params params; ml_kem_512_params_init(¶ms); return ml_kem_keypair_derand_ref(¶ms, public_key, secret_key, seed); @@ -32,6 +40,7 @@ int ml_kem_512_keypair_deterministic(uint8_t *public_key /* OUT */, int ml_kem_512_keypair(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_512_params_init(¶ms); return ml_kem_keypair_ref(¶ms, public_key, secret_key); @@ -41,14 +50,24 @@ int ml_kem_512_encapsulate_deterministic(uint8_t *ciphertext /* OUT */, uint8_t *shared_secret /* OUT */, const uint8_t *public_key /* IN */, const uint8_t *seed /* IN */) { + boringssl_ensure_ml_kem_self_test(); + return ml_kem_512_encapsulate_deterministic_no_self_test(ciphertext, shared_secret, public_key, seed); +} + +int ml_kem_512_encapsulate_deterministic_no_self_test(uint8_t *ciphertext /* OUT */, + uint8_t *shared_secret /* OUT */, + const uint8_t *public_key /* IN */, + const uint8_t *seed /* IN */) { ml_kem_params params; ml_kem_512_params_init(¶ms); - return ml_kem_enc_derand_ref(¶ms, ciphertext, shared_secret, public_key, seed); + return ml_kem_enc_derand_ref(¶ms, ciphertext, shared_secret, public_key, + seed); } int ml_kem_512_encapsulate(uint8_t *ciphertext /* OUT */, uint8_t *shared_secret /* OUT */, const uint8_t *public_key /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_512_params_init(¶ms); return ml_kem_enc_ref(¶ms, ciphertext, shared_secret, public_key); @@ -57,14 +76,23 @@ int ml_kem_512_encapsulate(uint8_t *ciphertext /* OUT */, int ml_kem_512_decapsulate(uint8_t *shared_secret /* OUT */, const uint8_t *ciphertext /* IN */, const uint8_t *secret_key /* IN */) { + boringssl_ensure_ml_kem_self_test(); + return ml_kem_512_decapsulate_no_self_test(shared_secret, ciphertext, secret_key); +} + +int ml_kem_512_decapsulate_no_self_test(uint8_t *shared_secret /* OUT */, + const uint8_t *ciphertext /* IN */, + const uint8_t *secret_key /* IN */) { ml_kem_params params; ml_kem_512_params_init(¶ms); return ml_kem_dec_ref(¶ms, shared_secret, ciphertext, secret_key); } + int ml_kem_768_keypair_deterministic(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */, const uint8_t *seed /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_768_params_init(¶ms); return ml_kem_keypair_derand_ref(¶ms, public_key, secret_key, seed); @@ -72,6 +100,7 @@ int ml_kem_768_keypair_deterministic(uint8_t *public_key /* OUT */, int ml_kem_768_keypair(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_768_params_init(¶ms); return ml_kem_keypair_ref(¶ms, public_key, secret_key); @@ -81,6 +110,7 @@ int ml_kem_768_encapsulate_deterministic(uint8_t *ciphertext /* OUT */, uint8_t *shared_secret /* OUT */, const uint8_t *public_key /* IN */, const uint8_t *seed /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_768_params_init(¶ms); return ml_kem_enc_derand_ref(¶ms, ciphertext, shared_secret, public_key, seed); @@ -89,6 +119,7 @@ int ml_kem_768_encapsulate_deterministic(uint8_t *ciphertext /* OUT */, int ml_kem_768_encapsulate(uint8_t *ciphertext /* OUT */, uint8_t *shared_secret /* OUT */, const uint8_t *public_key /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_768_params_init(¶ms); return ml_kem_enc_ref(¶ms, ciphertext, shared_secret, public_key); @@ -97,6 +128,7 @@ int ml_kem_768_encapsulate(uint8_t *ciphertext /* OUT */, int ml_kem_768_decapsulate(uint8_t *shared_secret /* OUT */, const uint8_t *ciphertext /* IN */, const uint8_t *secret_key /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_768_params_init(¶ms); return ml_kem_dec_ref(¶ms, shared_secret, ciphertext, secret_key); @@ -105,6 +137,7 @@ int ml_kem_768_decapsulate(uint8_t *shared_secret /* OUT */, int ml_kem_1024_keypair_deterministic(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */, const uint8_t *seed /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_1024_params_init(¶ms); return ml_kem_keypair_derand_ref(¶ms, public_key, secret_key, seed); @@ -112,6 +145,7 @@ int ml_kem_1024_keypair_deterministic(uint8_t *public_key /* OUT */, int ml_kem_1024_keypair(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_1024_params_init(¶ms); return ml_kem_keypair_ref(¶ms, public_key, secret_key); @@ -121,6 +155,7 @@ int ml_kem_1024_encapsulate_deterministic(uint8_t *ciphertext /* OUT */, uint8_t *shared_secret /* OUT */, const uint8_t *public_key /* IN */, const uint8_t *seed /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_1024_params_init(¶ms); return ml_kem_enc_derand_ref(¶ms, ciphertext, shared_secret, public_key, seed); @@ -129,6 +164,7 @@ int ml_kem_1024_encapsulate_deterministic(uint8_t *ciphertext /* OUT */, int ml_kem_1024_encapsulate(uint8_t *ciphertext /* OUT */, uint8_t *shared_secret /* OUT */, const uint8_t *public_key /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_1024_params_init(¶ms); return ml_kem_enc_ref(¶ms, ciphertext, shared_secret, public_key); @@ -137,6 +173,7 @@ int ml_kem_1024_encapsulate(uint8_t *ciphertext /* OUT */, int ml_kem_1024_decapsulate(uint8_t *shared_secret /* OUT */, const uint8_t *ciphertext /* IN */, const uint8_t *secret_key /* IN */) { + boringssl_ensure_ml_kem_self_test(); ml_kem_params params; ml_kem_1024_params_init(¶ms); return ml_kem_dec_ref(¶ms, shared_secret, ciphertext, secret_key); diff --git a/crypto/fipsmodule/ml_kem/ml_kem.h b/crypto/fipsmodule/ml_kem/ml_kem.h index a4c0af01c7..752855764f 100644 --- a/crypto/fipsmodule/ml_kem/ml_kem.h +++ b/crypto/fipsmodule/ml_kem/ml_kem.h @@ -32,6 +32,10 @@ int ml_kem_512_keypair_deterministic(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */, const uint8_t *seed /* IN */); +int ml_kem_512_keypair_deterministic_no_self_test(uint8_t *public_key /* OUT */, + uint8_t *secret_key /* OUT */, + const uint8_t *seed /* IN */); + int ml_kem_512_keypair(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */); @@ -40,6 +44,11 @@ int ml_kem_512_encapsulate_deterministic(uint8_t *ciphertext /* OUT */, const uint8_t *public_key /* IN */, const uint8_t *seed /* IN */); +int ml_kem_512_encapsulate_deterministic_no_self_test(uint8_t *ciphertext /* OUT */, + uint8_t *shared_secret /* OUT */, + const uint8_t *public_key /* IN */, + const uint8_t *seed /* IN */); + int ml_kem_512_encapsulate(uint8_t *ciphertext /* OUT */, uint8_t *shared_secret /* OUT */, const uint8_t *public_key /* IN */); @@ -48,6 +57,10 @@ int ml_kem_512_decapsulate(uint8_t *shared_secret /* OUT */, const uint8_t *ciphertext /* IN */, const uint8_t *secret_key /* IN */); +int ml_kem_512_decapsulate_no_self_test(uint8_t *shared_secret /* OUT */, + const uint8_t *ciphertext /* IN */, + const uint8_t *secret_key /* IN */); + int ml_kem_768_keypair_deterministic(uint8_t *public_key /* OUT */, uint8_t *secret_key /* OUT */, const uint8_t *seed /* IN */); diff --git a/crypto/fipsmodule/self_check/self_check.c b/crypto/fipsmodule/self_check/self_check.c index 26bc2f0928..a0e9218f74 100644 --- a/crypto/fipsmodule/self_check/self_check.c +++ b/crypto/fipsmodule/self_check/self_check.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -38,6 +39,7 @@ #include "../dh/internal.h" #include "../ec/internal.h" #include "../ecdsa/internal.h" +#include "../ml_kem/ml_kem.h" #include "../rand/internal.h" #include "../rsa/internal.h" @@ -792,6 +794,682 @@ static int boringssl_self_test_ffdh(void) { return ret; } +static int boringssl_self_test_ml_kem(void) { + int ret = 0; + + const uint8_t kKeyGenSeed[MLKEM512_KEYGEN_SEED_LEN] = { + 0xec, 0xdb, 0x97, 0x62, 0xf4, 0x78, 0xb2, 0xfa, 0x26, 0x3d, 0xf4, + 0x6d, 0xe4, 0x47, 0xf3, 0xd1, 0x52, 0xa1, 0xbc, 0x0e, 0x02, 0xee, + 0x95, 0x36, 0x77, 0x30, 0x11, 0x64, 0xd1, 0x5d, 0x20, 0xd7, 0x1b, + 0x07, 0x4b, 0xff, 0x80, 0x44, 0x44, 0x5e, 0x11, 0x66, 0x0b, 0x1b, + 0x6b, 0x26, 0xdf, 0x24, 0x2b, 0x8f, 0xc0, 0x2b, 0x9e, 0x8d, 0xf5, + 0x38, 0xdb, 0x17, 0xa6, 0x39, 0xd7, 0xc4, 0x61, 0x32 + }; + const uint8_t kKeyGenEK[MLKEM512_PUBLIC_KEY_BYTES] = { + 0xe9, 0xe0, 0x22, 0x0a, 0x69, 0x45, 0x56, 0xbc, 0x0a, 0x4b, 0x5a, 0xad, + 0xe0, 0x32, 0xb2, 0xaa, 0x87, 0x7c, 0x0d, 0xa8, 0x16, 0xef, 0x32, 0xa8, + 0x4d, 0x77, 0xbb, 0xff, 0x46, 0x56, 0xe6, 0x80, 0x85, 0x4e, 0x69, 0x61, + 0xa4, 0x17, 0x08, 0x2b, 0xd4, 0x6f, 0x50, 0x23, 0xc4, 0x7c, 0xea, 0x09, + 0xbb, 0xa2, 0x14, 0x5d, 0x41, 0x51, 0x88, 0xe1, 0x38, 0x03, 0xbb, 0x5e, + 0x7f, 0xc1, 0x9d, 0x39, 0x81, 0x9e, 0x59, 0xca, 0x7f, 0xdc, 0x38, 0x05, + 0x1d, 0x96, 0x94, 0x01, 0xd4, 0xc4, 0x11, 0xda, 0xc0, 0x0a, 0x47, 0xab, + 0x57, 0x52, 0x7d, 0xaa, 0x89, 0x7a, 0x37, 0x75, 0x93, 0x51, 0xb4, 0xb1, + 0x18, 0x5b, 0x14, 0x96, 0xd7, 0x9a, 0xa3, 0x32, 0x29, 0xbe, 0xa3, 0xc0, + 0xe8, 0xdb, 0xcf, 0x1d, 0x7a, 0x64, 0x73, 0x09, 0x28, 0x77, 0x5c, 0x74, + 0xc9, 0x46, 0x18, 0x1b, 0xb8, 0x8e, 0x0a, 0x38, 0xa1, 0x65, 0xeb, 0xbd, + 0xc7, 0x86, 0x0b, 0x01, 0x4c, 0x59, 0x89, 0x4c, 0x72, 0x11, 0xbc, 0x23, + 0xd3, 0x90, 0x77, 0xe6, 0x29, 0x44, 0xd3, 0xc4, 0x8c, 0x43, 0x4b, 0x73, + 0x7b, 0x1a, 0x64, 0xb5, 0xf9, 0xa1, 0x64, 0x6a, 0x18, 0xa5, 0x19, 0x5a, + 0x54, 0x60, 0x3f, 0xfc, 0x28, 0x0b, 0xf5, 0xea, 0x1b, 0xf3, 0xd8, 0xcb, + 0x41, 0x12, 0xaa, 0x82, 0xfa, 0xb8, 0x9e, 0x26, 0x33, 0x66, 0x55, 0x97, + 0xbe, 0xd3, 0x0d, 0xe6, 0xc8, 0x89, 0x7a, 0x96, 0x13, 0xea, 0x8c, 0x11, + 0x73, 0x65, 0x24, 0xa7, 0x08, 0x62, 0x66, 0x52, 0x3f, 0xba, 0xb8, 0x87, + 0x46, 0x54, 0x94, 0xeb, 0xfc, 0x96, 0xfb, 0xe4, 0x46, 0x67, 0x75, 0xbc, + 0x0d, 0x70, 0x7e, 0x62, 0x4b, 0xb3, 0xde, 0x70, 0x0e, 0xaa, 0xc9, 0xb3, + 0x7c, 0x2b, 0xc1, 0x2b, 0x52, 0xaa, 0x2d, 0xfb, 0x73, 0xb7, 0x00, 0x6b, + 0xd9, 0x56, 0xc0, 0xb9, 0x32, 0x4c, 0x47, 0x29, 0x5e, 0x4e, 0x4c, 0x4c, + 0xc4, 0x7b, 0xa9, 0xb5, 0xa8, 0x99, 0x69, 0x4b, 0x38, 0xa6, 0x4a, 0x29, + 0x12, 0x06, 0x84, 0xbf, 0x64, 0xc6, 0x48, 0x21, 0x1b, 0x18, 0xd0, 0x17, + 0xce, 0x34, 0x84, 0x9c, 0x4a, 0x09, 0x2b, 0x24, 0xbc, 0xb8, 0x96, 0x0d, + 0x87, 0x04, 0x22, 0xeb, 0xd9, 0x54, 0xbc, 0x72, 0x64, 0xba, 0x95, 0xa7, + 0x27, 0xa3, 0x19, 0x26, 0xf3, 0x1c, 0x12, 0x38, 0x1d, 0x0d, 0x05, 0x1e, + 0x1e, 0x04, 0x19, 0x0b, 0x94, 0x93, 0x22, 0x44, 0x28, 0x45, 0xf3, 0xaa, + 0x6f, 0xb1, 0x79, 0x40, 0x44, 0x2a, 0x9c, 0x1a, 0x18, 0x3b, 0x23, 0x97, + 0xdc, 0xc0, 0x77, 0x0c, 0xb2, 0xb4, 0xa0, 0x7a, 0xaf, 0x0a, 0xf5, 0x26, + 0x36, 0x77, 0x8a, 0xc9, 0x94, 0x9d, 0x2d, 0xb4, 0x2f, 0x3d, 0x03, 0x6b, + 0xc8, 0x42, 0xb2, 0xf3, 0xb0, 0xb1, 0x1d, 0x27, 0x8e, 0xa0, 0x25, 0xcc, + 0x16, 0xac, 0x8b, 0x69, 0x86, 0xa9, 0xb1, 0x8b, 0x33, 0x56, 0x79, 0x0d, + 0xbc, 0x82, 0x1d, 0x0a, 0xc7, 0xb5, 0xea, 0xe9, 0x65, 0xfc, 0xf1, 0x4b, + 0x0e, 0x20, 0x2b, 0x00, 0xec, 0x5d, 0x70, 0x7c, 0x45, 0xaf, 0x52, 0xbe, + 0x2d, 0x97, 0x71, 0xbc, 0xc5, 0x3b, 0x31, 0xf2, 0x52, 0x5a, 0xb5, 0x3f, + 0x95, 0xa3, 0xb0, 0x02, 0x42, 0xc1, 0x1c, 0x49, 0x4e, 0x25, 0x54, 0x43, + 0x8b, 0x0a, 0x4f, 0x68, 0x19, 0x40, 0x19, 0x18, 0x1b, 0xbd, 0xb1, 0x94, + 0x91, 0x03, 0x07, 0xbc, 0x19, 0xaf, 0xae, 0x55, 0x3d, 0xd6, 0x66, 0x56, + 0x43, 0x32, 0xc0, 0x78, 0x60, 0x4f, 0xbd, 0x8b, 0xc4, 0xfd, 0xc9, 0x2f, + 0x92, 0x01, 0x80, 0x9a, 0xb4, 0x95, 0xc1, 0xb5, 0x35, 0x53, 0x0b, 0xad, + 0x2e, 0xb3, 0x57, 0x53, 0xf9, 0x19, 0x56, 0xb5, 0x8b, 0xfb, 0xf6, 0x2d, + 0x1e, 0x33, 0xc8, 0x61, 0xf7, 0x38, 0x46, 0x33, 0x4c, 0x4a, 0x2a, 0xc5, + 0x57, 0x69, 0x84, 0xef, 0x11, 0x63, 0xa5, 0x04, 0x54, 0xa3, 0xe4, 0xce, + 0x83, 0x88, 0x98, 0xf2, 0x25, 0x86, 0x81, 0x89, 0xbd, 0xae, 0x5a, 0x03, + 0xef, 0xd8, 0x00, 0x1d, 0x2a, 0x9f, 0x55, 0x7c, 0xb6, 0xcd, 0x93, 0xa4, + 0x6f, 0xbb, 0x13, 0x79, 0xd8, 0x16, 0x45, 0xb8, 0x53, 0xcb, 0x98, 0xb4, + 0x7b, 0xa8, 0x7a, 0x66, 0xfc, 0xbc, 0x0a, 0xda, 0x76, 0x50, 0x6b, 0x8d, + 0xcd, 0x65, 0x90, 0x42, 0x64, 0x0e, 0xf6, 0x16, 0x82, 0x0f, 0xf2, 0x0b, + 0x26, 0x43, 0x33, 0x99, 0x37, 0x1d, 0xc4, 0xc5, 0x02, 0x87, 0x34, 0x9c, + 0xa2, 0x76, 0x3e, 0x30, 0x73, 0x86, 0x5c, 0x5b, 0xc9, 0xaa, 0xa1, 0x43, + 0x7b, 0x86, 0xb2, 0x0b, 0x25, 0xb6, 0xf0, 0x88, 0xbd, 0x6a, 0x4c, 0x94, + 0x83, 0x84, 0x2d, 0x7c, 0x65, 0x25, 0x7c, 0xc4, 0x2a, 0xd7, 0xc7, 0xb2, + 0x6f, 0x58, 0xc8, 0xed, 0x19, 0x9b, 0x84, 0x8b, 0x8c, 0x6f, 0x40, 0x8d, + 0x48, 0x76, 0x37, 0x75, 0x18, 0x88, 0xa9, 0x5a, 0x44, 0x9c, 0xab, 0x47, + 0xb7, 0xa2, 0xac, 0xe6, 0xa8, 0x2c, 0x7d, 0x46, 0x91, 0x05, 0x26, 0x41, + 0x4a, 0xb1, 0x49, 0xb1, 0x13, 0x43, 0xb0, 0xea, 0x32, 0xd9, 0x69, 0xa5, + 0x08, 0xa8, 0x1c, 0xf8, 0x96, 0xb0, 0x81, 0x08, 0x7f, 0x4d, 0x52, 0xa2, + 0xa9, 0xe0, 0x77, 0x87, 0x8a, 0x43, 0xe5, 0x97, 0x1d, 0x74, 0x86, 0x3a, + 0x7b, 0xf2, 0x00, 0x37, 0xb2, 0x97, 0x47, 0x03, 0x14, 0x0e, 0xa8, 0x16, + 0x0a, 0x5b, 0xa7, 0x22, 0x27, 0xc1, 0x5b, 0xec, 0x5d, 0xf1, 0x71, 0x14, + 0x01, 0x98, 0x89, 0x6d, 0x31, 0x73, 0x2a, 0x24, 0x1f, 0x5b, 0x93, 0x8f, + 0xf2, 0x33, 0xcb, 0xa2, 0xdc, 0x82, 0xde, 0x91, 0xc6, 0xb4, 0x93, 0x78, + 0x2b, 0x61, 0x63, 0xbc, 0x12, 0x82, 0xdf, 0x85, 0x5e, 0xe6, 0xa6, 0xa6, + 0x59, 0x75, 0xb3, 0x3c, 0xb6, 0xa2, 0x7d, 0x25, 0x8b, 0xd3, 0x17, 0xd0, + 0x4c, 0xef, 0x8e, 0xb5, 0x57, 0xba, 0x02, 0xd4, 0x94, 0x71, 0x92, 0x3c, + 0xd6, 0x0e, 0x99, 0x17, 0x96, 0x6b, 0xe9, 0x0f}; + const uint8_t kKeyGenDK[MLKEM512_SECRET_KEY_BYTES] = { + 0x88, 0xc1, 0x2c, 0xea, 0xa6, 0xcb, 0x91, 0xf5, 0x89, 0xac, 0xb8, 0x6d, + 0x91, 0x3c, 0x7a, 0x60, 0xf7, 0xcd, 0xab, 0xe3, 0xb7, 0xb5, 0x90, 0x09, + 0x1d, 0x00, 0x84, 0xe2, 0x9a, 0x04, 0x9b, 0x43, 0x68, 0x41, 0xf2, 0x47, + 0x3b, 0x03, 0x16, 0x5a, 0xe9, 0xc6, 0xa9, 0x82, 0x6d, 0x6c, 0x65, 0x0d, + 0x04, 0xb3, 0x88, 0xef, 0xf5, 0x94, 0x50, 0x5b, 0x7e, 0x54, 0x70, 0x95, + 0x30, 0x54, 0x68, 0x25, 0xa0, 0x70, 0xa6, 0x25, 0xb0, 0xe5, 0xfa, 0x86, + 0x6e, 0x6a, 0xaf, 0x40, 0xc2, 0x41, 0x42, 0x46, 0x24, 0x09, 0x73, 0xc7, + 0x59, 0x8a, 0xae, 0x7c, 0x36, 0x3e, 0x43, 0x03, 0xab, 0xb7, 0xa1, 0x11, + 0x31, 0xb4, 0x64, 0xa9, 0x43, 0x99, 0x6d, 0xe7, 0x59, 0x2c, 0xa0, 0x49, + 0x22, 0xea, 0x8a, 0x4d, 0x73, 0xb4, 0x43, 0xea, 0x04, 0x8c, 0x06, 0xac, + 0xc4, 0xe5, 0x5a, 0x8f, 0x25, 0x4b, 0xf6, 0xd2, 0x71, 0xfd, 0x82, 0x71, + 0x19, 0xec, 0x5b, 0x55, 0x80, 0x49, 0x8b, 0xfc, 0xc0, 0x9e, 0xb0, 0x26, + 0x6f, 0x8c, 0x2b, 0x45, 0x98, 0x8a, 0xe9, 0x8c, 0x1e, 0x54, 0x02, 0xb7, + 0x00, 0x34, 0x63, 0xf2, 0x03, 0x59, 0x47, 0x01, 0x59, 0xc0, 0x50, 0x9f, + 0xa9, 0x71, 0x15, 0x34, 0x43, 0xce, 0x25, 0x80, 0xc0, 0xb2, 0x44, 0x3f, + 0x8a, 0xc2, 0xb0, 0x81, 0x04, 0x01, 0xe7, 0x30, 0x52, 0xd6, 0x26, 0xbf, + 0x58, 0xc6, 0x74, 0xee, 0x48, 0x88, 0x0c, 0x40, 0x8d, 0x1f, 0x31, 0x3a, + 0x94, 0xb1, 0x66, 0x7f, 0x89, 0x76, 0x28, 0xc5, 0x5a, 0x83, 0xe2, 0x86, + 0x34, 0xa2, 0x07, 0x10, 0xd2, 0x5d, 0xa8, 0x8b, 0x2a, 0xc9, 0x0c, 0x0f, + 0x5d, 0x6b, 0x0e, 0xd6, 0xe0, 0x80, 0xfd, 0x2c, 0x24, 0xbb, 0x11, 0x81, + 0x6b, 0x5c, 0x60, 0x79, 0x57, 0x78, 0x1d, 0xb2, 0x28, 0x79, 0x66, 0x71, + 0x7f, 0xfa, 0x50, 0x0a, 0x03, 0x02, 0x58, 0x39, 0x16, 0x41, 0x15, 0xba, + 0x5e, 0xa7, 0xb7, 0x17, 0x34, 0x45, 0x88, 0x16, 0x9e, 0x8a, 0x85, 0xa9, + 0xe8, 0x3c, 0x51, 0x6c, 0xab, 0x5e, 0xe6, 0xe6, 0x3b, 0x7c, 0x73, 0x6c, + 0xe9, 0x06, 0x28, 0xdd, 0xec, 0xa9, 0x9a, 0x6b, 0xc5, 0x47, 0x58, 0x86, + 0x81, 0xbc, 0x22, 0x23, 0xf3, 0x9f, 0xbc, 0x44, 0x64, 0xb4, 0x1c, 0x63, + 0xd9, 0x24, 0xaf, 0xeb, 0xa1, 0x09, 0x89, 0x60, 0xbd, 0x43, 0xc1, 0x2f, + 0xd0, 0x08, 0x0f, 0x49, 0x0c, 0x8c, 0x50, 0xf4, 0x84, 0x32, 0x22, 0x30, + 0x3c, 0x68, 0x21, 0xad, 0x7b, 0x66, 0x3d, 0x88, 0x44, 0xa1, 0x36, 0x8a, + 0x19, 0x54, 0x9e, 0x5c, 0xfc, 0x83, 0xd1, 0x4a, 0x84, 0x91, 0x20, 0x5c, + 0x44, 0xf5, 0x49, 0x2b, 0xf6, 0x09, 0xb6, 0x9c, 0x52, 0x6c, 0x95, 0xaa, + 0x5e, 0x50, 0x8e, 0xcf, 0x71, 0x4b, 0x79, 0x55, 0xb6, 0x1f, 0x6c, 0xab, + 0x34, 0x0b, 0x06, 0x20, 0x04, 0x32, 0xce, 0x3b, 0x1e, 0xcd, 0x0a, 0x07, + 0x5a, 0x83, 0x32, 0x04, 0x68, 0x65, 0x95, 0x9a, 0x25, 0x69, 0x8a, 0x08, + 0x1d, 0xf3, 0x53, 0x26, 0x91, 0x34, 0x8a, 0x25, 0x81, 0xd6, 0x06, 0xa0, + 0xe0, 0xb2, 0xcf, 0x2e, 0x8b, 0x3c, 0x9a, 0xfc, 0x59, 0x4e, 0x92, 0x6e, + 0xb0, 0xd7, 0xc7, 0x02, 0xc0, 0xc3, 0xe5, 0xb5, 0x4e, 0xe2, 0xc8, 0x6c, + 0xa2, 0x0c, 0xc4, 0x76, 0xaa, 0xac, 0xa3, 0x20, 0x8f, 0x32, 0xa2, 0x01, + 0x90, 0x56, 0x2c, 0x27, 0x33, 0x82, 0x02, 0x07, 0x1e, 0x11, 0x66, 0x5f, + 0x13, 0x42, 0x73, 0xbd, 0xaa, 0xcb, 0xc9, 0x52, 0xb9, 0x94, 0xba, 0x94, + 0x62, 0x67, 0x12, 0x26, 0x51, 0x4b, 0x44, 0x61, 0x13, 0xe7, 0xab, 0x7e, + 0xdb, 0x9c, 0x54, 0xc3, 0x11, 0xc4, 0xda, 0x94, 0x10, 0x4d, 0x26, 0x2a, + 0x80, 0x28, 0x0e, 0x39, 0x20, 0x1e, 0x75, 0x51, 0x91, 0x76, 0x39, 0x83, + 0xc4, 0x39, 0xa9, 0x5a, 0xea, 0xaf, 0xa7, 0x67, 0xc2, 0xcb, 0x59, 0x48, + 0x29, 0xe6, 0x31, 0x3e, 0x38, 0x69, 0x82, 0xd6, 0x62, 0x1a, 0xcc, 0x4b, + 0xb0, 0x99, 0x1a, 0x60, 0x79, 0x0a, 0x2b, 0x0c, 0x5f, 0x31, 0x39, 0xaa, + 0xdd, 0x70, 0x45, 0xf7, 0xd8, 0x49, 0xaa, 0x20, 0x9b, 0xf6, 0x0b, 0xc1, + 0x5e, 0xd8, 0x26, 0x67, 0x41, 0x4b, 0x70, 0xb7, 0x1a, 0x7e, 0x18, 0x4e, + 0x16, 0x42, 0x80, 0xaf, 0x00, 0xbf, 0x95, 0xa9, 0xad, 0x3d, 0xe4, 0x1d, + 0xcf, 0x19, 0x62, 0x36, 0x10, 0xcf, 0xb3, 0x06, 0x87, 0xa5, 0xa0, 0x82, + 0xa2, 0x45, 0x88, 0x70, 0xeb, 0x33, 0xd6, 0x49, 0xb3, 0xfc, 0xe3, 0x31, + 0x7e, 0x03, 0x62, 0xee, 0x61, 0x75, 0xfb, 0x81, 0x1c, 0x7f, 0xe3, 0x64, + 0x7c, 0xa2, 0x10, 0x20, 0x67, 0x3a, 0xed, 0xd2, 0x3b, 0xf0, 0x47, 0x0c, + 0xd8, 0x73, 0x5c, 0xe5, 0x3a, 0x78, 0x08, 0x26, 0x68, 0xe4, 0x9a, 0x51, + 0x32, 0xd1, 0x33, 0x6a, 0x08, 0x43, 0x60, 0x18, 0x7f, 0xcf, 0xf9, 0x22, + 0x7c, 0xdc, 0x0d, 0x7f, 0x20, 0x5b, 0x2a, 0xf2, 0xc8, 0x8d, 0xc6, 0xbc, + 0x9a, 0x04, 0xb4, 0x1f, 0x42, 0x9f, 0xa9, 0xa3, 0x86, 0xf5, 0x8b, 0x8f, + 0x21, 0x6c, 0xbf, 0x67, 0x14, 0xa6, 0x19, 0x59, 0x7c, 0xaa, 0x5a, 0x9b, + 0xf6, 0x68, 0x04, 0x8d, 0x71, 0x35, 0x10, 0x5a, 0x94, 0x25, 0xcb, 0x46, + 0xfe, 0x80, 0x7a, 0x40, 0x64, 0x59, 0xb0, 0x67, 0xb7, 0x16, 0xf5, 0xa4, + 0x77, 0x30, 0x97, 0x4b, 0x20, 0x78, 0x26, 0x71, 0x6f, 0xe3, 0xf7, 0x47, + 0xfd, 0x74, 0xcd, 0x8c, 0x02, 0x57, 0x20, 0xb1, 0x00, 0x3f, 0x27, 0xb2, + 0xde, 0xa6, 0x95, 0xf2, 0x21, 0x97, 0x1c, 0xd5, 0xaf, 0x81, 0xa1, 0xa7, + 0x95, 0x00, 0x1f, 0x12, 0x5c, 0x28, 0x5c, 0x15, 0x0d, 0xdc, 0x99, 0x59, + 0xe9, 0xe0, 0x22, 0x0a, 0x69, 0x45, 0x56, 0xbc, 0x0a, 0x4b, 0x5a, 0xad, + 0xe0, 0x32, 0xb2, 0xaa, 0x87, 0x7c, 0x0d, 0xa8, 0x16, 0xef, 0x32, 0xa8, + 0x4d, 0x77, 0xbb, 0xff, 0x46, 0x56, 0xe6, 0x80, 0x85, 0x4e, 0x69, 0x61, + 0xa4, 0x17, 0x08, 0x2b, 0xd4, 0x6f, 0x50, 0x23, 0xc4, 0x7c, 0xea, 0x09, + 0xbb, 0xa2, 0x14, 0x5d, 0x41, 0x51, 0x88, 0xe1, 0x38, 0x03, 0xbb, 0x5e, + 0x7f, 0xc1, 0x9d, 0x39, 0x81, 0x9e, 0x59, 0xca, 0x7f, 0xdc, 0x38, 0x05, + 0x1d, 0x96, 0x94, 0x01, 0xd4, 0xc4, 0x11, 0xda, 0xc0, 0x0a, 0x47, 0xab, + 0x57, 0x52, 0x7d, 0xaa, 0x89, 0x7a, 0x37, 0x75, 0x93, 0x51, 0xb4, 0xb1, + 0x18, 0x5b, 0x14, 0x96, 0xd7, 0x9a, 0xa3, 0x32, 0x29, 0xbe, 0xa3, 0xc0, + 0xe8, 0xdb, 0xcf, 0x1d, 0x7a, 0x64, 0x73, 0x09, 0x28, 0x77, 0x5c, 0x74, + 0xc9, 0x46, 0x18, 0x1b, 0xb8, 0x8e, 0x0a, 0x38, 0xa1, 0x65, 0xeb, 0xbd, + 0xc7, 0x86, 0x0b, 0x01, 0x4c, 0x59, 0x89, 0x4c, 0x72, 0x11, 0xbc, 0x23, + 0xd3, 0x90, 0x77, 0xe6, 0x29, 0x44, 0xd3, 0xc4, 0x8c, 0x43, 0x4b, 0x73, + 0x7b, 0x1a, 0x64, 0xb5, 0xf9, 0xa1, 0x64, 0x6a, 0x18, 0xa5, 0x19, 0x5a, + 0x54, 0x60, 0x3f, 0xfc, 0x28, 0x0b, 0xf5, 0xea, 0x1b, 0xf3, 0xd8, 0xcb, + 0x41, 0x12, 0xaa, 0x82, 0xfa, 0xb8, 0x9e, 0x26, 0x33, 0x66, 0x55, 0x97, + 0xbe, 0xd3, 0x0d, 0xe6, 0xc8, 0x89, 0x7a, 0x96, 0x13, 0xea, 0x8c, 0x11, + 0x73, 0x65, 0x24, 0xa7, 0x08, 0x62, 0x66, 0x52, 0x3f, 0xba, 0xb8, 0x87, + 0x46, 0x54, 0x94, 0xeb, 0xfc, 0x96, 0xfb, 0xe4, 0x46, 0x67, 0x75, 0xbc, + 0x0d, 0x70, 0x7e, 0x62, 0x4b, 0xb3, 0xde, 0x70, 0x0e, 0xaa, 0xc9, 0xb3, + 0x7c, 0x2b, 0xc1, 0x2b, 0x52, 0xaa, 0x2d, 0xfb, 0x73, 0xb7, 0x00, 0x6b, + 0xd9, 0x56, 0xc0, 0xb9, 0x32, 0x4c, 0x47, 0x29, 0x5e, 0x4e, 0x4c, 0x4c, + 0xc4, 0x7b, 0xa9, 0xb5, 0xa8, 0x99, 0x69, 0x4b, 0x38, 0xa6, 0x4a, 0x29, + 0x12, 0x06, 0x84, 0xbf, 0x64, 0xc6, 0x48, 0x21, 0x1b, 0x18, 0xd0, 0x17, + 0xce, 0x34, 0x84, 0x9c, 0x4a, 0x09, 0x2b, 0x24, 0xbc, 0xb8, 0x96, 0x0d, + 0x87, 0x04, 0x22, 0xeb, 0xd9, 0x54, 0xbc, 0x72, 0x64, 0xba, 0x95, 0xa7, + 0x27, 0xa3, 0x19, 0x26, 0xf3, 0x1c, 0x12, 0x38, 0x1d, 0x0d, 0x05, 0x1e, + 0x1e, 0x04, 0x19, 0x0b, 0x94, 0x93, 0x22, 0x44, 0x28, 0x45, 0xf3, 0xaa, + 0x6f, 0xb1, 0x79, 0x40, 0x44, 0x2a, 0x9c, 0x1a, 0x18, 0x3b, 0x23, 0x97, + 0xdc, 0xc0, 0x77, 0x0c, 0xb2, 0xb4, 0xa0, 0x7a, 0xaf, 0x0a, 0xf5, 0x26, + 0x36, 0x77, 0x8a, 0xc9, 0x94, 0x9d, 0x2d, 0xb4, 0x2f, 0x3d, 0x03, 0x6b, + 0xc8, 0x42, 0xb2, 0xf3, 0xb0, 0xb1, 0x1d, 0x27, 0x8e, 0xa0, 0x25, 0xcc, + 0x16, 0xac, 0x8b, 0x69, 0x86, 0xa9, 0xb1, 0x8b, 0x33, 0x56, 0x79, 0x0d, + 0xbc, 0x82, 0x1d, 0x0a, 0xc7, 0xb5, 0xea, 0xe9, 0x65, 0xfc, 0xf1, 0x4b, + 0x0e, 0x20, 0x2b, 0x00, 0xec, 0x5d, 0x70, 0x7c, 0x45, 0xaf, 0x52, 0xbe, + 0x2d, 0x97, 0x71, 0xbc, 0xc5, 0x3b, 0x31, 0xf2, 0x52, 0x5a, 0xb5, 0x3f, + 0x95, 0xa3, 0xb0, 0x02, 0x42, 0xc1, 0x1c, 0x49, 0x4e, 0x25, 0x54, 0x43, + 0x8b, 0x0a, 0x4f, 0x68, 0x19, 0x40, 0x19, 0x18, 0x1b, 0xbd, 0xb1, 0x94, + 0x91, 0x03, 0x07, 0xbc, 0x19, 0xaf, 0xae, 0x55, 0x3d, 0xd6, 0x66, 0x56, + 0x43, 0x32, 0xc0, 0x78, 0x60, 0x4f, 0xbd, 0x8b, 0xc4, 0xfd, 0xc9, 0x2f, + 0x92, 0x01, 0x80, 0x9a, 0xb4, 0x95, 0xc1, 0xb5, 0x35, 0x53, 0x0b, 0xad, + 0x2e, 0xb3, 0x57, 0x53, 0xf9, 0x19, 0x56, 0xb5, 0x8b, 0xfb, 0xf6, 0x2d, + 0x1e, 0x33, 0xc8, 0x61, 0xf7, 0x38, 0x46, 0x33, 0x4c, 0x4a, 0x2a, 0xc5, + 0x57, 0x69, 0x84, 0xef, 0x11, 0x63, 0xa5, 0x04, 0x54, 0xa3, 0xe4, 0xce, + 0x83, 0x88, 0x98, 0xf2, 0x25, 0x86, 0x81, 0x89, 0xbd, 0xae, 0x5a, 0x03, + 0xef, 0xd8, 0x00, 0x1d, 0x2a, 0x9f, 0x55, 0x7c, 0xb6, 0xcd, 0x93, 0xa4, + 0x6f, 0xbb, 0x13, 0x79, 0xd8, 0x16, 0x45, 0xb8, 0x53, 0xcb, 0x98, 0xb4, + 0x7b, 0xa8, 0x7a, 0x66, 0xfc, 0xbc, 0x0a, 0xda, 0x76, 0x50, 0x6b, 0x8d, + 0xcd, 0x65, 0x90, 0x42, 0x64, 0x0e, 0xf6, 0x16, 0x82, 0x0f, 0xf2, 0x0b, + 0x26, 0x43, 0x33, 0x99, 0x37, 0x1d, 0xc4, 0xc5, 0x02, 0x87, 0x34, 0x9c, + 0xa2, 0x76, 0x3e, 0x30, 0x73, 0x86, 0x5c, 0x5b, 0xc9, 0xaa, 0xa1, 0x43, + 0x7b, 0x86, 0xb2, 0x0b, 0x25, 0xb6, 0xf0, 0x88, 0xbd, 0x6a, 0x4c, 0x94, + 0x83, 0x84, 0x2d, 0x7c, 0x65, 0x25, 0x7c, 0xc4, 0x2a, 0xd7, 0xc7, 0xb2, + 0x6f, 0x58, 0xc8, 0xed, 0x19, 0x9b, 0x84, 0x8b, 0x8c, 0x6f, 0x40, 0x8d, + 0x48, 0x76, 0x37, 0x75, 0x18, 0x88, 0xa9, 0x5a, 0x44, 0x9c, 0xab, 0x47, + 0xb7, 0xa2, 0xac, 0xe6, 0xa8, 0x2c, 0x7d, 0x46, 0x91, 0x05, 0x26, 0x41, + 0x4a, 0xb1, 0x49, 0xb1, 0x13, 0x43, 0xb0, 0xea, 0x32, 0xd9, 0x69, 0xa5, + 0x08, 0xa8, 0x1c, 0xf8, 0x96, 0xb0, 0x81, 0x08, 0x7f, 0x4d, 0x52, 0xa2, + 0xa9, 0xe0, 0x77, 0x87, 0x8a, 0x43, 0xe5, 0x97, 0x1d, 0x74, 0x86, 0x3a, + 0x7b, 0xf2, 0x00, 0x37, 0xb2, 0x97, 0x47, 0x03, 0x14, 0x0e, 0xa8, 0x16, + 0x0a, 0x5b, 0xa7, 0x22, 0x27, 0xc1, 0x5b, 0xec, 0x5d, 0xf1, 0x71, 0x14, + 0x01, 0x98, 0x89, 0x6d, 0x31, 0x73, 0x2a, 0x24, 0x1f, 0x5b, 0x93, 0x8f, + 0xf2, 0x33, 0xcb, 0xa2, 0xdc, 0x82, 0xde, 0x91, 0xc6, 0xb4, 0x93, 0x78, + 0x2b, 0x61, 0x63, 0xbc, 0x12, 0x82, 0xdf, 0x85, 0x5e, 0xe6, 0xa6, 0xa6, + 0x59, 0x75, 0xb3, 0x3c, 0xb6, 0xa2, 0x7d, 0x25, 0x8b, 0xd3, 0x17, 0xd0, + 0x4c, 0xef, 0x8e, 0xb5, 0x57, 0xba, 0x02, 0xd4, 0x94, 0x71, 0x92, 0x3c, + 0xd6, 0x0e, 0x99, 0x17, 0x96, 0x6b, 0xe9, 0x0f, 0x56, 0xd2, 0xd5, 0x3f, + 0xa3, 0xbc, 0x26, 0x29, 0x74, 0x0a, 0xbb, 0xd1, 0x67, 0x20, 0xa9, 0xa7, + 0x06, 0x9a, 0x64, 0xde, 0x7a, 0x26, 0x32, 0x88, 0x17, 0xd7, 0x4a, 0x7c, + 0x2f, 0x55, 0xa2, 0x46, 0x1b, 0x07, 0x4b, 0xff, 0x80, 0x44, 0x44, 0x5e, + 0x11, 0x66, 0x0b, 0x1b, 0x6b, 0x26, 0xdf, 0x24, 0x2b, 0x8f, 0xc0, 0x2b, + 0x9e, 0x8d, 0xf5, 0x38, 0xdb, 0x17, 0xa6, 0x39, 0xd7, 0xc4, 0x61, 0x32}; + + uint8_t keygen_decaps[MLKEM512_SECRET_KEY_BYTES] = {0}; + uint8_t keygen_encaps[MLKEM512_PUBLIC_KEY_BYTES] = {0}; + + if (ml_kem_512_keypair_deterministic_no_self_test( + keygen_encaps, keygen_decaps, kKeyGenSeed) || + !check_test(kKeyGenDK, keygen_decaps, sizeof(keygen_decaps), + "ML-KEM keyGen decaps") || + !check_test(kKeyGenEK, keygen_encaps, sizeof(keygen_encaps), + "ML-KEM keyGen encaps")) { + goto err; + } + + const uint8_t kEncapEK[MLKEM512_PUBLIC_KEY_BYTES] = { + 0x57, 0xc3, 0xba, 0x4c, 0xd7, 0x81, 0xd8, 0x69, 0x0b, 0x4c, 0x39, 0x0d, + 0x9a, 0x58, 0xb3, 0x5d, 0x69, 0xa5, 0x2d, 0x52, 0xcd, 0x19, 0x01, 0x2a, + 0x25, 0xe1, 0x58, 0xa2, 0xc1, 0x9b, 0x75, 0x47, 0x0a, 0x03, 0x9a, 0x05, + 0xc5, 0x98, 0x33, 0xc5, 0xd2, 0xa8, 0x28, 0x0b, 0x33, 0xde, 0x95, 0xb6, + 0x0c, 0x1b, 0xb5, 0xc6, 0x33, 0xaf, 0x71, 0x13, 0x8f, 0xb0, 0x64, 0x28, + 0x14, 0x37, 0x12, 0xb7, 0xa0, 0x33, 0xeb, 0xaa, 0x3c, 0x0d, 0x6a, 0x84, + 0x12, 0x11, 0x20, 0x4c, 0x67, 0x56, 0x4b, 0xc5, 0x16, 0xf3, 0x43, 0x73, + 0xb3, 0x04, 0x70, 0xa1, 0xa5, 0x03, 0x3b, 0x85, 0x2a, 0x2c, 0x3a, 0x80, + 0xad, 0xfc, 0x8f, 0x8c, 0x17, 0x62, 0xfb, 0x06, 0x29, 0x0e, 0x55, 0x75, + 0x9d, 0x46, 0x6d, 0x67, 0xd2, 0x7e, 0xfd, 0x3b, 0xb8, 0xf6, 0x5c, 0x7f, + 0x1a, 0xd0, 0x11, 0xb9, 0x9a, 0xc6, 0x96, 0xe0, 0xba, 0x78, 0xf4, 0x56, + 0xc1, 0x91, 0x03, 0x30, 0x43, 0x0d, 0xa6, 0xcc, 0x91, 0x86, 0xcb, 0x21, + 0x9e, 0x47, 0xa8, 0xce, 0xfb, 0xc2, 0xbe, 0x58, 0x05, 0x52, 0xc3, 0x0a, + 0xf1, 0xe8, 0x73, 0x4c, 0x57, 0x2f, 0x48, 0x90, 0xc1, 0xec, 0x14, 0x22, + 0x5b, 0x2a, 0xc6, 0x41, 0xe6, 0xc2, 0x3c, 0x94, 0x94, 0x29, 0x84, 0x32, + 0x3f, 0xc5, 0x4a, 0xf9, 0x29, 0x9a, 0x72, 0xe9, 0x2d, 0x05, 0x68, 0x37, + 0xc4, 0x50, 0x54, 0x5a, 0x88, 0x49, 0x41, 0x7b, 0x40, 0xa3, 0x23, 0x68, + 0x62, 0xb4, 0x07, 0xd0, 0x9a, 0x70, 0x22, 0xdc, 0x54, 0x47, 0x55, 0x15, + 0x5b, 0x23, 0xaf, 0x0f, 0x30, 0x6d, 0xac, 0x83, 0x37, 0x34, 0x78, 0x03, + 0x41, 0x2c, 0xcd, 0x57, 0xdb, 0x4b, 0xeb, 0xf9, 0x78, 0x70, 0xd5, 0xb8, + 0x61, 0xdb, 0xac, 0x6c, 0x4a, 0x8d, 0x7f, 0xdb, 0xc9, 0x26, 0x92, 0x3f, + 0xae, 0xa1, 0x71, 0xbe, 0x17, 0x23, 0x54, 0xf5, 0x4c, 0x11, 0xb6, 0x8c, + 0x9f, 0xf6, 0xc0, 0xfe, 0x05, 0x86, 0x93, 0x24, 0x61, 0x16, 0x8b, 0xa9, + 0x01, 0x88, 0xc8, 0x6c, 0xba, 0xce, 0x80, 0x49, 0x82, 0xe1, 0x88, 0x12, + 0x16, 0x40, 0x11, 0x66, 0xc6, 0x5a, 0x55, 0x64, 0x25, 0xab, 0x21, 0x45, + 0x51, 0x6c, 0x76, 0x99, 0x03, 0x1d, 0xf5, 0x6b, 0x14, 0x78, 0x1b, 0xa2, + 0x44, 0x57, 0x29, 0x47, 0xf6, 0x3f, 0x7c, 0xe9, 0x35, 0x62, 0xb1, 0x09, + 0x01, 0x78, 0x04, 0x01, 0xe2, 0x44, 0x17, 0x47, 0x97, 0xcf, 0xe6, 0xab, + 0x5d, 0x5a, 0xca, 0xfd, 0x07, 0x48, 0x6d, 0x13, 0x36, 0x30, 0x63, 0x1e, + 0x3e, 0x00, 0x9f, 0xda, 0x23, 0xc4, 0x27, 0xf5, 0xb4, 0xc2, 0x05, 0x64, + 0x31, 0x47, 0xc0, 0xef, 0x17, 0xcc, 0x4a, 0x67, 0x4c, 0x96, 0x91, 0x77, + 0xb5, 0x0a, 0x37, 0x24, 0x25, 0xad, 0xbe, 0x65, 0x4a, 0x74, 0xca, 0xa8, + 0x87, 0xf8, 0x7c, 0xdd, 0xe4, 0x92, 0xec, 0x50, 0x27, 0x05, 0x60, 0x9b, + 0x9e, 0x31, 0x8a, 0xe6, 0xbb, 0x5c, 0xe4, 0xa9, 0xa2, 0x82, 0xf1, 0x24, + 0x44, 0x77, 0x9b, 0xba, 0xe0, 0x32, 0x0d, 0x12, 0x97, 0xd9, 0xcb, 0xbb, + 0x87, 0x61, 0x00, 0x03, 0x07, 0x89, 0xc9, 0x05, 0x21, 0x5f, 0x38, 0x69, + 0x03, 0xa9, 0x4e, 0xe6, 0x8c, 0xbc, 0x97, 0x73, 0x10, 0xcb, 0xa0, 0x2b, + 0x79, 0x37, 0x5c, 0x4a, 0x8a, 0x5e, 0xec, 0x55, 0x69, 0x52, 0x8a, 0x10, + 0x02, 0xc0, 0x8a, 0x90, 0x9b, 0xca, 0x05, 0xf1, 0x32, 0x3a, 0x34, 0xae, + 0xf2, 0x08, 0x1f, 0x66, 0x76, 0x93, 0x9b, 0x82, 0x6e, 0xb7, 0x74, 0x8b, + 0x80, 0xd4, 0x5a, 0x1e, 0xa1, 0x5a, 0x6f, 0xb3, 0x19, 0x63, 0xf6, 0x18, + 0x19, 0x96, 0x30, 0xa2, 0xd3, 0x30, 0x1a, 0xf1, 0x13, 0xde, 0xf4, 0x28, + 0xbf, 0x10, 0x75, 0x18, 0xfc, 0x30, 0x55, 0xf2, 0x4d, 0x28, 0xa3, 0x8c, + 0xb4, 0x54, 0x43, 0x48, 0x16, 0x0b, 0xc6, 0x30, 0x1d, 0xd3, 0xe7, 0x60, + 0x82, 0x03, 0x9c, 0x12, 0xb2, 0x92, 0x51, 0xe9, 0x03, 0xc6, 0x8c, 0x7b, + 0xd8, 0x41, 0xa4, 0x53, 0x5c, 0x5d, 0xd7, 0xc9, 0x5a, 0xac, 0xfa, 0x80, + 0x66, 0xf7, 0x3b, 0xa8, 0xc9, 0xac, 0xa4, 0xd3, 0x03, 0xa9, 0xf1, 0xb7, + 0x6f, 0xc0, 0x36, 0x92, 0xa9, 0xbf, 0x11, 0x15, 0xb8, 0x51, 0x86, 0x62, + 0x48, 0x66, 0x1c, 0xfa, 0xf5, 0x39, 0xc1, 0x39, 0x9e, 0x5d, 0xe0, 0x3b, + 0x86, 0xb0, 0x2c, 0xb9, 0x9b, 0x2d, 0xa7, 0xd0, 0x07, 0xce, 0x35, 0x43, + 0xd4, 0xbb, 0x94, 0xfb, 0x1c, 0xc9, 0x9e, 0x40, 0xcd, 0xe8, 0x71, 0x76, + 0x75, 0x29, 0x14, 0x4d, 0xa3, 0x29, 0x79, 0x47, 0x55, 0x56, 0x45, 0x33, + 0x3e, 0xf0, 0x58, 0x37, 0x70, 0x98, 0xb2, 0xa1, 0x51, 0xd5, 0x11, 0x0f, + 0xce, 0x09, 0x21, 0x7d, 0x5a, 0x00, 0x55, 0xa2, 0x08, 0xf3, 0xb5, 0x83, + 0xe2, 0xc7, 0x13, 0x67, 0x72, 0x24, 0x1b, 0x85, 0xb5, 0xbb, 0x36, 0x7d, + 0xb4, 0x3c, 0x07, 0xe5, 0x48, 0x09, 0xb7, 0xa3, 0x0c, 0x82, 0xd9, 0xaf, + 0x74, 0x79, 0xab, 0x37, 0xd8, 0x49, 0xd7, 0x78, 0x91, 0x39, 0xd6, 0xbc, + 0xfa, 0xf8, 0x31, 0x46, 0x77, 0x5f, 0x6f, 0x1a, 0x63, 0x2d, 0x17, 0x91, + 0x0f, 0x0a, 0x49, 0xf6, 0x74, 0x72, 0xc1, 0x8a, 0x34, 0x39, 0xcc, 0x03, + 0x7c, 0xa4, 0x2d, 0x7e, 0xb8, 0x61, 0x09, 0xe3, 0xc4, 0x7b, 0xd9, 0x4e, + 0xc7, 0xbc, 0x99, 0xd5, 0xb8, 0x2a, 0x8f, 0x4c, 0x4d, 0x1d, 0x72, 0x47, + 0xc8, 0x47, 0x99, 0xa9, 0x05, 0x8d, 0x01, 0x84, 0x2f, 0xed, 0x69, 0x57, + 0xce, 0xb4, 0x8d, 0xd2, 0x02, 0x91, 0x22, 0xaa, 0x8f, 0xf4, 0x38, 0x84, + 0x10, 0xe1, 0xb3, 0xbb, 0xa2, 0x76, 0xc2, 0xaa, 0x54, 0x4e, 0xf9, 0x91, + 0x97, 0x3f, 0x15, 0xe7, 0xc5, 0x9b, 0x89, 0x4a, 0xab, 0x27, 0xf5, 0xce, + 0xad, 0xdd, 0xe8, 0x25, 0x33, 0x3f, 0x44, 0x03, 0x9b, 0x02, 0xe7, 0xbd, + 0xec, 0x21, 0xfc, 0x0d, 0x8f, 0x9b, 0x3a, 0x22}; + const uint8_t kEncapM[MLKEM512_ENCAPS_SEED_LEN] = { + 0x2c, 0x87, 0xaa, 0x8b, 0x11, 0x76, 0x75, 0x54, 0x74, 0xdf, 0x76, + 0x3b, 0x2a, 0xe0, 0x46, 0x35, 0x39, 0xe9, 0x53, 0xe0, 0x04, 0xc4, + 0x6a, 0x11, 0x83, 0xfd, 0x53, 0xcf, 0x84, 0xef, 0x81, 0x03}; + const uint8_t kEncapCiphertext[MLKEM512_CIPHERTEXT_BYTES] = { + 0x43, 0x1a, 0x4f, 0x1b, 0x2d, 0x2c, 0x6c, 0x00, 0xf1, 0x69, 0x0b, 0xbe, + 0x48, 0x25, 0x41, 0xef, 0x3d, 0x56, 0x37, 0x74, 0xda, 0xff, 0x83, 0x20, + 0x7f, 0x96, 0xde, 0x7e, 0x5e, 0x4a, 0x59, 0xd5, 0xd9, 0x36, 0xd9, 0x44, + 0x3a, 0xd4, 0x22, 0xe6, 0x45, 0x79, 0x3e, 0x7a, 0x60, 0xa9, 0xb0, 0xa7, + 0x6c, 0xd6, 0x72, 0xd2, 0x0c, 0x69, 0xb8, 0x2a, 0x55, 0x63, 0xdf, 0x52, + 0xd9, 0x6f, 0x9a, 0x6c, 0xdf, 0xc5, 0x6f, 0xbd, 0x4f, 0xd8, 0xd5, 0xa8, + 0xaf, 0xeb, 0x2a, 0x09, 0xd9, 0x2e, 0xc8, 0x54, 0x09, 0x47, 0x94, 0xb4, + 0xed, 0x2d, 0xb3, 0x81, 0xf0, 0x4c, 0x68, 0x43, 0x96, 0x08, 0xaa, 0x99, + 0x02, 0xa4, 0xd1, 0x68, 0x9e, 0x2e, 0xb1, 0xe5, 0xf0, 0x7a, 0x4a, 0x1c, + 0x70, 0x92, 0x62, 0xd7, 0xc2, 0xff, 0x2f, 0x81, 0xf6, 0xee, 0xaa, 0xb2, + 0xa8, 0x6a, 0x41, 0xba, 0x21, 0x0e, 0xb1, 0xbf, 0x8e, 0x75, 0xfe, 0xbc, + 0xcd, 0x1a, 0x15, 0xb4, 0xd7, 0xa7, 0xb6, 0x02, 0x57, 0xc8, 0x9d, 0x00, + 0xbd, 0x81, 0xd3, 0x9f, 0xcb, 0x8d, 0x1c, 0xe3, 0x27, 0x81, 0x02, 0x59, + 0x5d, 0xd6, 0x52, 0xf7, 0xfb, 0x7d, 0x55, 0x84, 0x87, 0x4f, 0x33, 0x27, + 0xb1, 0x74, 0x04, 0x3b, 0x35, 0x0e, 0xbd, 0x4d, 0x41, 0xfe, 0x08, 0xbd, + 0x0e, 0x85, 0x4d, 0x41, 0xcb, 0xb0, 0x27, 0xc4, 0x81, 0xda, 0x64, 0xdc, + 0x61, 0x51, 0xb8, 0x8d, 0xec, 0xec, 0xcf, 0x02, 0x2d, 0xda, 0xc2, 0xe2, + 0x27, 0x36, 0xc1, 0x47, 0xe0, 0x77, 0x32, 0x94, 0x23, 0x1c, 0x05, 0x89, + 0x96, 0x71, 0x54, 0xc5, 0x26, 0xb0, 0xb7, 0xcd, 0xd5, 0x95, 0x68, 0xee, + 0xff, 0x57, 0x49, 0xa4, 0x0c, 0xb1, 0x00, 0xc6, 0x0c, 0x64, 0x80, 0x89, + 0x76, 0x55, 0xd9, 0x6e, 0x9f, 0x64, 0xd6, 0x16, 0x84, 0xc0, 0xb3, 0x15, + 0x06, 0x46, 0x73, 0x2c, 0x19, 0x40, 0x9f, 0xe5, 0x65, 0x54, 0x0a, 0x31, + 0x89, 0x47, 0x03, 0xcf, 0x01, 0x79, 0xca, 0xe8, 0x5b, 0xc8, 0xc1, 0xa5, + 0x73, 0x26, 0x49, 0x83, 0x6e, 0x48, 0xe6, 0x76, 0x40, 0x5b, 0x95, 0x91, + 0xb6, 0x5b, 0xa2, 0x5f, 0x9b, 0x48, 0x9b, 0x9e, 0x57, 0x72, 0xaa, 0x1e, + 0xd5, 0xa0, 0x01, 0x43, 0xcb, 0x9f, 0x54, 0x49, 0xfd, 0x01, 0x34, 0x57, + 0xa3, 0xc1, 0x38, 0x74, 0xcb, 0x58, 0xc7, 0x5b, 0x52, 0xc9, 0xb6, 0xa9, + 0xae, 0x49, 0x5c, 0xcb, 0x50, 0x4a, 0x89, 0xcb, 0x5f, 0x14, 0x56, 0x95, + 0xb9, 0x21, 0x63, 0x2f, 0xb8, 0x5b, 0x03, 0x16, 0xb3, 0x0d, 0x4a, 0xd1, + 0x7f, 0xef, 0x08, 0x62, 0xd6, 0xb1, 0xe6, 0xca, 0x6a, 0x61, 0x1c, 0x8a, + 0x6a, 0x72, 0x34, 0xb4, 0x36, 0x2c, 0x5c, 0xa0, 0xad, 0x9f, 0x76, 0x97, + 0x68, 0x77, 0x98, 0xcf, 0x62, 0x4d, 0xc9, 0xf3, 0x5f, 0xbb, 0x37, 0x6e, + 0x09, 0x95, 0x31, 0x56, 0x53, 0x2a, 0x90, 0x33, 0x70, 0x9d, 0xf7, 0x55, + 0xb4, 0x6c, 0xc6, 0xd8, 0x3d, 0xe3, 0xa1, 0x11, 0xe1, 0x9a, 0x76, 0xb3, + 0x61, 0xe0, 0xef, 0x14, 0xc9, 0x1d, 0xb8, 0xd9, 0x1c, 0x6c, 0x6d, 0x9e, + 0x3e, 0x46, 0xf4, 0x22, 0x91, 0xfd, 0x6c, 0xbf, 0x5c, 0xfd, 0x12, 0x27, + 0x16, 0xfb, 0x06, 0x75, 0x69, 0x8e, 0x60, 0x2a, 0xb3, 0x9e, 0xe9, 0x8e, + 0x0d, 0x81, 0x45, 0xee, 0xba, 0xaa, 0x93, 0x74, 0xf5, 0xb3, 0xbb, 0x0d, + 0xf4, 0xd0, 0xfd, 0x83, 0xa4, 0x0e, 0x0d, 0x25, 0x03, 0x8c, 0x39, 0xe9, + 0xbe, 0xe0, 0x1c, 0xf7, 0x9c, 0x86, 0xf3, 0x08, 0x61, 0x58, 0xd0, 0x31, + 0xd5, 0xc5, 0xe8, 0x6b, 0xc7, 0xe7, 0xeb, 0x16, 0xe6, 0x22, 0x50, 0x5f, + 0x28, 0x88, 0x21, 0x38, 0x84, 0xc0, 0xb5, 0x25, 0x22, 0x89, 0xb1, 0x1f, + 0xce, 0x5b, 0xfe, 0xeb, 0xfb, 0xef, 0x0a, 0x32, 0xce, 0xaf, 0x9c, 0x14, + 0xc6, 0x25, 0x00, 0x90, 0x02, 0x84, 0x63, 0xdb, 0x6f, 0x8d, 0x19, 0x68, + 0x4f, 0x54, 0x11, 0x08, 0xfe, 0x93, 0x4d, 0x88, 0xe7, 0xef, 0x5c, 0xce, + 0x9d, 0xae, 0xbb, 0x32, 0x70, 0x0b, 0x93, 0x97, 0x69, 0x1a, 0x68, 0x42, + 0x98, 0xc9, 0xbf, 0x1b, 0x7c, 0x22, 0xd1, 0xbc, 0xec, 0x3f, 0xca, 0xcf, + 0xbb, 0x17, 0xf2, 0xed, 0x2b, 0x98, 0xb8, 0x5e, 0x6a, 0x8f, 0xe2, 0x48, + 0x29, 0x96, 0xb5, 0xe0, 0x99, 0xe9, 0xd0, 0x21, 0x1c, 0xb9, 0x41, 0x26, + 0x14, 0xde, 0x87, 0xdc, 0x18, 0xd2, 0x36, 0x13, 0xed, 0x7f, 0x6c, 0x29, + 0xcc, 0x37, 0xb7, 0x27, 0x11, 0x6d, 0xd9, 0x01, 0xc2, 0x81, 0x79, 0x38, + 0xc2, 0x9f, 0xcd, 0x02, 0x60, 0x89, 0x33, 0x6a, 0xdd, 0xc0, 0x9e, 0xca, + 0x90, 0xde, 0x9a, 0x25, 0xa6, 0x37, 0x4f, 0xee, 0x86, 0xbc, 0xdd, 0x06, + 0xae, 0x3d, 0xaa, 0xf0, 0xb1, 0xbc, 0x5b, 0x3b, 0x27, 0x90, 0xd4, 0xd9, + 0xf7, 0x59, 0xbe, 0xf8, 0xac, 0x74, 0x36, 0x12, 0xa2, 0xbb, 0xf6, 0xe4, + 0x5d, 0xe8, 0xb2, 0x2e, 0xfa, 0x61, 0x22, 0x66, 0x25, 0xd4, 0xc3, 0x9f, + 0x34, 0x6b, 0x84, 0x4c, 0x5e, 0xbe, 0xc5, 0x35, 0x58, 0x66, 0xc0, 0x0b, + 0x72, 0x6c, 0xc1, 0x64, 0x0c, 0xb2, 0x37, 0xc3, 0x4a, 0x20, 0xa7, 0xc6, + 0x03, 0xd2, 0x51, 0xf4, 0x6e, 0x6b, 0x3b, 0x0f, 0xa7, 0x1b, 0x32, 0x76, + 0x83, 0x5e, 0x3e, 0x9d, 0xa5, 0xb9, 0x48, 0x5e, 0x78, 0x96, 0x14, 0xaf, + 0x49, 0xf1, 0xe9, 0x50, 0x4d, 0xb2, 0x52, 0x86, 0x31, 0xfb, 0xe1, 0xcd, + 0x7d, 0xbe, 0xe8, 0x51, 0x64, 0xe4, 0xc0, 0x99, 0xa2, 0x7a, 0x45, 0x83, + 0xe9, 0x24, 0x7d, 0x07, 0x8f, 0x88, 0x30, 0xb4, 0x68, 0x74, 0xc1, 0xb0, + 0x10, 0xbf, 0x3c, 0xd9, 0x0e, 0xb0, 0x77, 0x49, 0x61, 0xf2, 0x39, 0xba}; + const uint8_t kEncapSharedSecret[MLKEM512_SHARED_SECRET_LEN] = { + 0xa7, 0x72, 0xdf, 0x2d, 0xe2, 0x50, 0xac, 0x7d, 0x89, 0x6b, 0xbb, + 0x82, 0x0b, 0x57, 0xf2, 0xae, 0x05, 0xf9, 0xa4, 0x12, 0xab, 0x55, + 0xba, 0xa4, 0x21, 0xd4, 0xaf, 0x6d, 0xac, 0x62, 0x66, 0x2a}; + + uint8_t ciphertext[MLKEM512_CIPHERTEXT_BYTES] = {0}; + uint8_t shared_secret[MLKEM512_SHARED_SECRET_LEN] = {0}; + + if (ml_kem_512_encapsulate_deterministic_no_self_test( + ciphertext, shared_secret, kEncapEK, kEncapM) || + !check_test(kEncapCiphertext, ciphertext, sizeof(kEncapCiphertext), + "ML-KEM encapsulate ciphertext") || + !check_test(kEncapSharedSecret, shared_secret, sizeof(kEncapSharedSecret), + "ML-KEM encapsulate shared secret")) { + goto err; + } + + const uint8_t kDecapDK[MLKEM512_SECRET_KEY_BYTES] = { + 0x73, 0x9b, 0x8b, 0x1f, 0x6a, 0x57, 0x66, 0x31, 0x0b, 0x06, 0x19, 0x04, + 0x02, 0x14, 0x38, 0xbb, 0xd6, 0x1a, 0x14, 0xf0, 0x85, 0xfd, 0xe0, 0x29, + 0xb5, 0x33, 0x86, 0xec, 0x37, 0x61, 0xaa, 0xe7, 0x78, 0x28, 0xfb, 0x19, + 0xde, 0xdc, 0x50, 0xdd, 0xc1, 0xc3, 0x2d, 0x3a, 0x44, 0x4a, 0x15, 0x4b, + 0xf8, 0x33, 0xa8, 0x25, 0x71, 0x31, 0x5a, 0x56, 0x55, 0xfd, 0x3b, 0x06, + 0x65, 0x1c, 0x20, 0xf7, 0xb0, 0x37, 0x8d, 0x78, 0x24, 0x72, 0x68, 0x0c, + 0xfb, 0xb9, 0x1d, 0x07, 0xd2, 0x31, 0x10, 0xd8, 0xb1, 0x58, 0xe3, 0xa8, + 0xf3, 0x29, 0x5d, 0x92, 0x97, 0x64, 0x6d, 0xe5, 0x81, 0x4c, 0xe8, 0x2a, + 0xe8, 0x74, 0xa6, 0x45, 0x4c, 0x61, 0xf6, 0x5b, 0x0b, 0xed, 0x79, 0x77, + 0xce, 0x01, 0xc7, 0x69, 0x99, 0xce, 0x86, 0x75, 0x6d, 0xa2, 0x6a, 0x2f, + 0x5a, 0x09, 0x3c, 0x05, 0x70, 0x73, 0x16, 0xd9, 0x2a, 0xc2, 0xb2, 0x5e, + 0x72, 0xc2, 0x16, 0x0e, 0x60, 0x4c, 0x90, 0xc3, 0x39, 0xd8, 0xd0, 0x3f, + 0xa8, 0x45, 0x4d, 0x40, 0xc7, 0x07, 0x81, 0x33, 0x05, 0xe6, 0x0a, 0x48, + 0x89, 0x2c, 0x6d, 0x48, 0xfb, 0x18, 0x19, 0xf8, 0xa0, 0x92, 0x18, 0x62, + 0x49, 0xe5, 0x02, 0x1d, 0x83, 0x8b, 0xac, 0xe8, 0x19, 0xa1, 0xc7, 0xc7, + 0x2c, 0x5b, 0x45, 0xcf, 0x83, 0x98, 0xc5, 0x2a, 0x4b, 0xed, 0xd3, 0xa5, + 0x9e, 0xa4, 0x5e, 0x48, 0xf7, 0x6e, 0xc3, 0xe0, 0x78, 0x68, 0x71, 0x43, + 0x13, 0x72, 0xb3, 0x6f, 0xa7, 0xb5, 0x63, 0x97, 0xcb, 0x95, 0xe9, 0x20, + 0x0a, 0x99, 0x0b, 0x71, 0xbb, 0x4e, 0x10, 0xba, 0x3e, 0x7c, 0x08, 0xc4, + 0xa6, 0x28, 0x28, 0xb5, 0x49, 0xcc, 0xe4, 0xf5, 0x08, 0x7f, 0xd2, 0xa4, + 0xeb, 0x78, 0x64, 0xfd, 0xdc, 0x5f, 0x92, 0xa8, 0x68, 0xd5, 0xbb, 0x70, + 0xab, 0x51, 0x51, 0x0c, 0xb0, 0x43, 0xc1, 0x45, 0xb7, 0x4e, 0xb0, 0x5f, + 0x72, 0xe5, 0x96, 0x4b, 0xc7, 0x05, 0x00, 0xb0, 0xc8, 0x93, 0xe0, 0x1e, + 0xa1, 0xab, 0x77, 0xc4, 0x73, 0x7f, 0x23, 0x6a, 0xa8, 0xdd, 0x1c, 0x61, + 0xf2, 0xd7, 0xae, 0x5c, 0x93, 0x10, 0x24, 0x28, 0x12, 0xaa, 0x03, 0x4a, + 0xaa, 0xd3, 0xbc, 0xdf, 0x22, 0x4d, 0x42, 0xf3, 0x47, 0x09, 0xc0, 0x5f, + 0x12, 0x38, 0xb2, 0x18, 0xec, 0x33, 0xdd, 0x80, 0x4c, 0xb3, 0x31, 0x32, + 0xf3, 0x64, 0x7c, 0xbd, 0x48, 0xa6, 0xf5, 0xf5, 0x4a, 0x68, 0x66, 0xb2, + 0x4b, 0x51, 0x83, 0xeb, 0x66, 0x91, 0xd0, 0xa0, 0x84, 0x6b, 0x34, 0x6f, + 0x87, 0x79, 0x87, 0xf2, 0x6b, 0x76, 0xbe, 0xb3, 0x05, 0x50, 0x7b, 0x34, + 0xf2, 0xe1, 0xcc, 0x95, 0xcb, 0x81, 0x85, 0xbb, 0x5e, 0x35, 0x60, 0x67, + 0x6f, 0x30, 0x27, 0x52, 0xc3, 0x82, 0x4e, 0x90, 0xbd, 0x84, 0x08, 0x1b, + 0x28, 0x89, 0x1f, 0xcd, 0xda, 0x31, 0x3f, 0x06, 0x37, 0x65, 0x59, 0x4e, + 0x41, 0xe0, 0x85, 0x2a, 0x65, 0x55, 0x1f, 0xf2, 0x50, 0xb3, 0x18, 0x8a, + 0x2a, 0x61, 0xbc, 0x5f, 0x76, 0x50, 0x3b, 0x39, 0x16, 0xf0, 0x64, 0x61, + 0xca, 0x01, 0x1f, 0xe1, 0xd1, 0x91, 0x53, 0xe2, 0x64, 0x29, 0xb0, 0x37, + 0x3a, 0x45, 0x39, 0xdf, 0x32, 0x47, 0x47, 0x76, 0xbe, 0xcb, 0xec, 0xa6, + 0x08, 0xe9, 0x70, 0x6f, 0x65, 0xad, 0x92, 0x42, 0x2b, 0xbb, 0x28, 0xb6, + 0xb9, 0xc9, 0x6c, 0xa0, 0x2b, 0x61, 0x3d, 0x5c, 0x06, 0xee, 0xe3, 0x1f, + 0x9f, 0x32, 0x22, 0x33, 0x00, 0xb2, 0x22, 0xe3, 0x95, 0x5c, 0xb0, 0x5a, + 0x1b, 0xab, 0xac, 0x60, 0x2a, 0xb3, 0x1e, 0x18, 0x74, 0x15, 0x4a, 0x83, + 0xd4, 0xbc, 0x54, 0xdc, 0xdc, 0x94, 0xd6, 0xd0, 0x5a, 0xdf, 0xbc, 0x6f, + 0x46, 0x61, 0x3d, 0x85, 0x81, 0x45, 0xed, 0xeb, 0x63, 0xf9, 0x20, 0x44, + 0x55, 0x1b, 0xb9, 0xe8, 0xbb, 0x63, 0x07, 0x10, 0x1b, 0xef, 0x5b, 0xc2, + 0x68, 0x5b, 0xcb, 0x04, 0x35, 0x3c, 0x94, 0x84, 0x3e, 0xc9, 0x94, 0x28, + 0x69, 0x89, 0x99, 0xf9, 0x95, 0x80, 0x33, 0x6a, 0x90, 0x3e, 0xb3, 0x08, + 0x08, 0xe3, 0x01, 0xa1, 0x88, 0x79, 0xb0, 0x9b, 0x8b, 0x20, 0x59, 0x68, + 0xe6, 0x24, 0x7f, 0x3a, 0x14, 0xb9, 0x00, 0x93, 0x5d, 0x80, 0x8a, 0x7c, + 0xf8, 0x21, 0x85, 0x15, 0xf3, 0xb8, 0xc1, 0x3b, 0x54, 0x07, 0x29, 0xaa, + 0x74, 0x1b, 0x42, 0x46, 0x0b, 0x41, 0x17, 0xe0, 0x55, 0x56, 0x19, 0x46, + 0x0a, 0x5a, 0x48, 0x4c, 0x52, 0x15, 0x0f, 0x3b, 0x1b, 0x60, 0x00, 0x95, + 0xd2, 0x25, 0x9f, 0x45, 0x56, 0x7a, 0x3e, 0x03, 0x4e, 0x14, 0x39, 0xaf, + 0x5e, 0xd3, 0xbc, 0x41, 0x61, 0x93, 0x52, 0x77, 0x53, 0x05, 0x29, 0x24, + 0x26, 0x18, 0x49, 0x13, 0xc2, 0x53, 0xd9, 0x54, 0x46, 0xfc, 0x45, 0x33, + 0xfe, 0x12, 0x79, 0xf5, 0x5a, 0x04, 0x9b, 0xcc, 0x70, 0xad, 0x50, 0x86, + 0xad, 0x72, 0xc7, 0x40, 0xd5, 0x3d, 0x58, 0x5b, 0x4b, 0x93, 0x20, 0x42, + 0xa2, 0x84, 0x3b, 0x69, 0x5c, 0x21, 0x9f, 0xb1, 0x3c, 0xa3, 0xc0, 0xcf, + 0x62, 0x56, 0xca, 0x82, 0xe5, 0x8a, 0x98, 0xfb, 0x79, 0x88, 0x06, 0x91, + 0x27, 0x1c, 0x1a, 0xc5, 0x30, 0x38, 0x95, 0x3c, 0x0e, 0xc6, 0x07, 0x92, + 0x06, 0xc5, 0x0c, 0x5d, 0x24, 0xcd, 0xfe, 0x80, 0x23, 0x43, 0x91, 0xba, + 0x17, 0x62, 0x19, 0x7d, 0xf1, 0x2c, 0xcd, 0x01, 0x04, 0x7b, 0x74, 0x3b, + 0x9c, 0xab, 0x2d, 0xc8, 0xab, 0xb8, 0x61, 0x19, 0x0f, 0xfc, 0x92, 0xc6, + 0xa2, 0x6b, 0x86, 0x50, 0xf6, 0xa0, 0x0d, 0xf4, 0x40, 0x4d, 0xb2, 0x54, + 0x24, 0x68, 0x6a, 0x34, 0x55, 0xc6, 0x45, 0x90, 0x51, 0x1a, 0x34, 0x3a, + 0x8c, 0x73, 0x4c, 0x55, 0x8b, 0x42, 0x74, 0xb4, 0x39, 0x77, 0x12, 0x13, + 0xed, 0x5b, 0xc6, 0x28, 0x58, 0x5f, 0x75, 0x0b, 0x67, 0xd3, 0xc0, 0x42, + 0x96, 0xdc, 0x4b, 0xda, 0x56, 0x44, 0xec, 0xd5, 0x84, 0xee, 0x87, 0x0b, + 0x46, 0xa7, 0x04, 0xe5, 0xd1, 0x9f, 0xa1, 0x37, 0x6e, 0x66, 0x88, 0x09, + 0x73, 0xab, 0x56, 0xa5, 0x16, 0x0d, 0x8b, 0x99, 0xc2, 0xb4, 0xba, 0x4e, + 0x17, 0x7c, 0x25, 0xb2, 0x4a, 0x9b, 0xdf, 0x80, 0xba, 0x1b, 0x48, 0xc2, + 0x7c, 0x88, 0xbd, 0x2c, 0xab, 0xbd, 0x98, 0x80, 0x34, 0xf3, 0x5c, 0xa7, + 0x92, 0x54, 0x9e, 0x4d, 0x57, 0x9b, 0x20, 0xa5, 0x07, 0x45, 0x47, 0x43, + 0x11, 0x97, 0xa3, 0x62, 0x7b, 0x5d, 0x7c, 0x75, 0x73, 0xfa, 0x93, 0x06, + 0x52, 0xfa, 0x99, 0x9a, 0x12, 0x89, 0x15, 0xcc, 0x01, 0x73, 0x7a, 0x08, + 0x70, 0xa3, 0x02, 0xa1, 0x51, 0x38, 0xb3, 0x85, 0x48, 0xb5, 0x9a, 0x65, + 0xd3, 0x97, 0xb6, 0xa0, 0xfc, 0xb6, 0x61, 0x23, 0xad, 0x93, 0x47, 0xc8, + 0x9c, 0xf5, 0xbe, 0x90, 0xa9, 0xac, 0xcf, 0x4a, 0x61, 0x6f, 0x42, 0x36, + 0x9a, 0x83, 0x99, 0xcf, 0xc4, 0x6e, 0x9c, 0xc6, 0xa1, 0x01, 0xfc, 0x35, + 0x3f, 0xf2, 0x27, 0xc6, 0xf2, 0x62, 0xb7, 0x95, 0xa2, 0x15, 0x70, 0x49, + 0x7a, 0x9b, 0xad, 0x2d, 0x7c, 0xbf, 0x2e, 0x87, 0x7a, 0xde, 0x82, 0xc8, + 0x37, 0xea, 0x68, 0xbc, 0x42, 0x43, 0x8d, 0xf7, 0x9e, 0xc5, 0x96, 0x31, + 0x8b, 0x57, 0x98, 0x1c, 0x35, 0x96, 0x87, 0x15, 0xa7, 0x59, 0xf4, 0x53, + 0x83, 0x5c, 0xbc, 0x27, 0xd7, 0x59, 0x4c, 0xb8, 0x65, 0xdd, 0x51, 0x15, + 0x21, 0x72, 0xb0, 0xa1, 0x36, 0xbe, 0x2a, 0x4a, 0x95, 0xed, 0x0a, 0x80, + 0x27, 0xe1, 0x5f, 0xca, 0x37, 0x35, 0x13, 0xe9, 0x8a, 0x2a, 0x32, 0xc8, + 0xe2, 0x24, 0x62, 0xff, 0xb4, 0x46, 0x43, 0x54, 0x1e, 0x8c, 0x45, 0x83, + 0x5e, 0x67, 0x81, 0xd1, 0x99, 0x8e, 0x97, 0xa9, 0x4e, 0xf4, 0x98, 0xcf, + 0x41, 0xa0, 0x80, 0x20, 0xb0, 0x9f, 0x9c, 0xac, 0x36, 0xac, 0x42, 0x28, + 0x89, 0x45, 0x58, 0xf3, 0x29, 0x61, 0x0d, 0x52, 0x88, 0x20, 0x8a, 0x9b, + 0x44, 0xf6, 0x14, 0xd8, 0x26, 0x44, 0x0a, 0x87, 0xb9, 0x20, 0xe0, 0x7c, + 0x54, 0x70, 0xc1, 0x01, 0x24, 0x5a, 0xd7, 0x78, 0x5b, 0x30, 0xa4, 0xc5, + 0x4c, 0xd3, 0xa0, 0xec, 0x08, 0x8c, 0xf6, 0xb2, 0x7d, 0x43, 0x10, 0x4c, + 0x63, 0xf0, 0x56, 0x75, 0x68, 0x26, 0x38, 0xfb, 0xaf, 0x16, 0xa8, 0xaa, + 0xb8, 0x91, 0x04, 0x58, 0xb5, 0xc1, 0xe1, 0xdb, 0x60, 0xb3, 0xa2, 0x06, + 0xb7, 0xf2, 0x7f, 0x50, 0x44, 0x0b, 0xc2, 0x26, 0x09, 0x58, 0x45, 0x38, + 0xb3, 0x53, 0x70, 0x09, 0x01, 0x98, 0x8b, 0x44, 0x56, 0xda, 0xd6, 0x0c, + 0x98, 0xfa, 0x54, 0xc2, 0xba, 0xab, 0xd2, 0xbb, 0x38, 0x79, 0xb7, 0x2f, + 0xbc, 0xd5, 0x03, 0x15, 0x3a, 0x68, 0xa5, 0x28, 0x3e, 0x17, 0x60, 0x89, + 0x6e, 0x19, 0xcf, 0xdb, 0xbc, 0xb4, 0x3e, 0x86, 0x45, 0x88, 0x9a, 0x2a, + 0xe1, 0x1c, 0x0f, 0x9c, 0x74, 0xaa, 0x38, 0xb5, 0xa8, 0x13, 0x12, 0x0a, + 0x3f, 0xf5, 0x08, 0xf7, 0x53, 0xc8, 0x28, 0xf6, 0x46, 0x65, 0xf1, 0x1e, + 0xa6, 0x1c, 0x54, 0xc2, 0xa8, 0xb0, 0xaa, 0xb8, 0xc3, 0xd8, 0x35, 0x34, + 0xaf, 0x09, 0x38, 0xdc, 0x98, 0x59, 0x8d, 0xf0, 0x15, 0xc8, 0x37, 0xc6, + 0x9f, 0xb5, 0x53, 0x0d, 0x70, 0x01, 0xf5, 0x3b, 0x42, 0x9c, 0x0a, 0xbe, + 0x42, 0x30, 0x60, 0x87, 0xe5, 0x38, 0xdc, 0x27, 0xc8, 0xd6, 0x34, 0x80, + 0x96, 0xd7, 0xcf, 0x19, 0x41, 0x2e, 0x3e, 0x32, 0xb3, 0xd2, 0x53, 0xc8, + 0x23, 0x38, 0x19, 0x83, 0xe0, 0x88, 0xc1, 0xe0, 0xa1, 0x9f, 0x11, 0x51, + 0x07, 0x33, 0xaa, 0x07, 0xf6, 0x16, 0x02, 0xda, 0x8d, 0xbd, 0x20, 0x6a, + 0x62, 0xb6, 0xa9, 0xe1, 0x90, 0xad, 0x8d, 0xd9, 0xc1, 0x91, 0x52, 0x6d, + 0x26, 0xd7, 0x27, 0xfd, 0x15, 0x95, 0x46, 0x54, 0x71, 0xd2, 0xf0, 0x55, + 0xb1, 0x41, 0x74, 0xe7, 0x02, 0x1c, 0x84, 0x0a, 0x62, 0x17, 0x22, 0xac, + 0x0b, 0x76, 0xc3, 0xf0, 0xe4, 0x1e, 0x24, 0x9c, 0x8a, 0xa1, 0x06, 0x9c, + 0x52, 0x55, 0x38, 0x8d, 0xbb, 0xc8, 0xa9, 0xd6, 0xbd, 0xcb, 0x3b, 0x8a, + 0x2c, 0x19, 0x08, 0xf5, 0x40, 0x74, 0x54, 0x51, 0x70, 0x6d, 0x08, 0xbe, + 0xc0, 0x90, 0x2d, 0xbe, 0xca, 0x2e, 0xe9, 0x89, 0x0c, 0x2a, 0x24, 0x1d, + 0xde, 0x47, 0xc3, 0x62, 0x66, 0x16, 0xb4, 0x3c, 0x7d, 0x39, 0xf6, 0x3f, + 0x98, 0x9c, 0x62, 0x77, 0xc3, 0x0f, 0x70, 0xf9, 0x7b, 0xad, 0x09, 0x89, + 0xcb, 0x64, 0xac, 0xbe, 0xb4, 0xa4, 0x03, 0xd2, 0xa4, 0xb6, 0x57, 0x06, + 0x33, 0x89, 0x86, 0xc9, 0xa0, 0x79, 0xb1, 0x8b, 0x7d, 0x43, 0xf1, 0x19, + 0xa5, 0x14, 0xaa, 0x59, 0x06, 0x6c, 0xdc, 0x39, 0x11, 0xcc, 0x3c, 0xc4, + 0x8b, 0xec, 0x56, 0x45, 0x92, 0x7b, 0x25, 0x63, 0xa6, 0x51, 0x37, 0xb5, + 0x02, 0x56, 0xb0, 0xf3, 0xda, 0x25, 0xd5, 0xe4, 0x10, 0x92, 0x00, 0x9d, + 0x0c, 0x7b, 0xc5, 0x39, 0x8b, 0xb7, 0xcf, 0x15, 0x3c, 0xcb, 0x85, 0x4e, + 0xaf, 0xb2, 0x14, 0x40, 0x93, 0x73, 0x9b, 0x7a, 0x7c, 0xcd, 0x03, 0xc8, + 0xcb, 0xa8, 0xb2, 0xc2, 0x89, 0x2e, 0x57, 0xf9, 0x9c, 0xbd, 0x03, 0x23, + 0x4f, 0x09, 0x97, 0x52, 0xd7, 0xb1, 0x05, 0xec, 0x45, 0xc1, 0xa1, 0x53, + 0xbb, 0x30, 0x0d, 0xb7, 0x75, 0x3b, 0x3e, 0xb3, 0x0b, 0x76, 0x59, 0x56, + 0xe8, 0x37, 0xbb, 0xaa, 0x8c, 0x51, 0xab, 0xd8, 0xbe, 0x54, 0xeb, 0x64, + 0xab, 0x52, 0x29, 0x61, 0x1b, 0x4b, 0x8c, 0xee, 0xd4, 0xd7, 0x7a, 0xe3, + 0xb3, 0x93, 0x35, 0xa4, 0xa4, 0x7a, 0x68, 0xaa, 0x38, 0x50, 0x42, 0x50, + 0x82, 0x98, 0x74, 0xd0, 0xec, 0xc6, 0xdf, 0xf4, 0x98, 0x6d, 0x1a, 0xe5, + 0x8c, 0xfe, 0x53, 0x7a, 0xfd, 0x2e, 0x02, 0xb2, 0xc4, 0x4b, 0xa0, 0x88, + 0xe7, 0xf3, 0xdb, 0xd2, 0x1f, 0x9d, 0x1c, 0x02, 0x37, 0x17, 0x85, 0x74, + 0x6e, 0x66, 0x72, 0x63, 0xb5, 0x0d, 0x48, 0xc4, 0x85, 0x5a, 0xe2, 0x49, + 0xab, 0x4c, 0x80, 0xc9, 0xb4, 0x93, 0xd2, 0x2b, 0xf9, 0x59, 0xcd, 0x6e, + 0x85, 0xfd, 0x28, 0xc0, 0xcd, 0x9f, 0xae, 0xce, 0xd7, 0x0f, 0xa7, 0x90}; + const uint8_t kDecapCiphertext[MLKEM512_CIPHERTEXT_BYTES] = { + 0xaf, 0x4a, 0x00, 0x68, 0xc3, 0x73, 0x44, 0xd7, 0xe1, 0x06, 0xa9, 0xcd, + 0x39, 0x77, 0x9c, 0xf8, 0xc7, 0x67, 0xd5, 0xb8, 0x1c, 0xb3, 0x44, 0x34, + 0x40, 0xda, 0xde, 0x14, 0xc2, 0xc4, 0x83, 0x27, 0xba, 0x34, 0x28, 0x45, + 0xdc, 0x8c, 0x58, 0x8b, 0xd2, 0x5d, 0x9b, 0x55, 0xe2, 0x7f, 0x33, 0x13, + 0x42, 0xe2, 0x46, 0xbd, 0xd5, 0x6d, 0x18, 0x3a, 0xc1, 0xe0, 0x78, 0x84, + 0x20, 0x57, 0x3f, 0x37, 0xe2, 0x29, 0xd4, 0x49, 0x0b, 0xf4, 0x17, 0xb3, + 0xfe, 0xda, 0x42, 0x20, 0xd7, 0x76, 0xa5, 0x29, 0xd9, 0x6f, 0x7c, 0xdd, + 0xfa, 0x1e, 0xce, 0x84, 0x81, 0x51, 0x56, 0x93, 0x54, 0x8b, 0xb7, 0x6f, + 0x5f, 0xb7, 0xda, 0xa6, 0x5d, 0xfb, 0x13, 0xbf, 0x84, 0xdd, 0x1c, 0xa4, + 0xe0, 0xef, 0x7e, 0x49, 0xe0, 0xd1, 0xe8, 0xa3, 0x91, 0x8e, 0x3c, 0xe9, + 0xa7, 0x84, 0xb3, 0x7d, 0xc2, 0xa4, 0xd2, 0xd2, 0xd3, 0x11, 0xf7, 0x06, + 0xe5, 0x05, 0xa1, 0xd9, 0x3e, 0x55, 0x23, 0x69, 0xe5, 0x10, 0xa0, 0xd2, + 0xca, 0x34, 0x7a, 0xec, 0xf8, 0x84, 0x62, 0xe2, 0xfd, 0xe0, 0xa6, 0xc9, + 0xfe, 0xb4, 0x95, 0x06, 0xa4, 0xfc, 0xeb, 0xdf, 0x98, 0x77, 0xab, 0xd1, + 0x8c, 0xa8, 0x1f, 0xea, 0x64, 0x11, 0x5f, 0xb1, 0x79, 0xe3, 0x35, 0xe0, + 0x06, 0x90, 0x5b, 0x72, 0x2a, 0x58, 0x88, 0xf7, 0x3d, 0x70, 0xed, 0x77, + 0x26, 0xe0, 0x72, 0x2f, 0x55, 0x24, 0x0e, 0xe2, 0xc2, 0x05, 0xd3, 0xe2, + 0xb2, 0xc5, 0x37, 0xa5, 0x2d, 0xf0, 0x2b, 0xb6, 0x93, 0xf4, 0xd7, 0x21, + 0x01, 0x17, 0x35, 0xce, 0x11, 0xb8, 0x07, 0x43, 0x76, 0x16, 0xff, 0x21, + 0x3d, 0x71, 0xc3, 0xa7, 0x32, 0x48, 0x4c, 0x5b, 0xc3, 0xda, 0xed, 0xea, + 0xf4, 0xfb, 0xe0, 0x2f, 0xc5, 0xe1, 0xb9, 0xb0, 0xcc, 0x82, 0xf6, 0xa6, + 0xe5, 0x1c, 0x0b, 0xca, 0x4f, 0x6d, 0x66, 0xfe, 0x19, 0x82, 0xcf, 0xdc, + 0x48, 0x04, 0xfb, 0xc8, 0xa7, 0x67, 0xbc, 0x44, 0x2e, 0x85, 0x34, 0xf6, + 0x3a, 0xf3, 0xb0, 0xd0, 0x57, 0xbc, 0x6c, 0x95, 0x0b, 0x5e, 0x0a, 0x07, + 0xae, 0x9f, 0x03, 0x85, 0x51, 0x0a, 0xe7, 0x8c, 0x11, 0xa2, 0xa1, 0x1e, + 0xbb, 0x84, 0x9c, 0x13, 0xe1, 0x77, 0xd9, 0x82, 0xdb, 0x7c, 0xd4, 0x7d, + 0x55, 0xf8, 0x08, 0x6c, 0x14, 0xe5, 0xc1, 0xc3, 0xe6, 0xc8, 0x20, 0x49, + 0x41, 0xbc, 0xa3, 0x79, 0x16, 0xfe, 0x20, 0x15, 0xc2, 0x99, 0x0d, 0x00, + 0xbd, 0x98, 0x64, 0x1c, 0xe6, 0x15, 0x04, 0x53, 0x86, 0x81, 0x29, 0x39, + 0xd0, 0xbc, 0xb7, 0x42, 0x77, 0xfc, 0xb7, 0x18, 0x34, 0xed, 0x29, 0x7e, + 0xda, 0x87, 0xdb, 0x1d, 0xf9, 0x14, 0x97, 0x85, 0x48, 0x95, 0xf6, 0xcd, + 0x8d, 0x94, 0xcf, 0xcb, 0x41, 0xed, 0xc1, 0xbe, 0x15, 0x1d, 0xf9, 0x14, + 0x73, 0xe3, 0x7e, 0xba, 0x54, 0x6e, 0x15, 0x62, 0x7a, 0x6d, 0xbd, 0x58, + 0x3d, 0x9b, 0xa0, 0xed, 0x34, 0xee, 0x51, 0x1a, 0x08, 0x31, 0xeb, 0xa1, + 0x35, 0x68, 0x29, 0x75, 0xa2, 0x39, 0xf4, 0x95, 0xe3, 0x09, 0x84, 0x2b, + 0xab, 0xee, 0xf6, 0xf4, 0x0e, 0x7b, 0xb4, 0xd6, 0xcd, 0x45, 0x09, 0x5e, + 0x3f, 0x91, 0xf9, 0xb6, 0x1b, 0x86, 0x35, 0x9c, 0xdd, 0x05, 0xd7, 0x9b, + 0xb7, 0x2f, 0x5e, 0xaa, 0x2e, 0xb9, 0x85, 0x4e, 0x21, 0xa0, 0x19, 0x4c, + 0x46, 0x8d, 0x9f, 0xe7, 0xe8, 0x9f, 0x3c, 0x0e, 0x74, 0xf5, 0x70, 0xf8, + 0x8b, 0x5b, 0x50, 0x15, 0xd4, 0xbb, 0x4c, 0x8b, 0xcb, 0x9e, 0xa6, 0x43, + 0xed, 0xce, 0x57, 0xba, 0x72, 0x11, 0x4c, 0xf5, 0x86, 0xcd, 0x6f, 0xb8, + 0xa4, 0xea, 0x5b, 0x05, 0x04, 0x47, 0xe0, 0x6b, 0xb7, 0x13, 0x89, 0x1e, + 0x13, 0x46, 0xcd, 0x22, 0x76, 0xf2, 0xb8, 0x63, 0x96, 0xe4, 0xcf, 0x42, + 0x41, 0x27, 0x6f, 0xec, 0xce, 0xec, 0x79, 0xe7, 0x38, 0xdc, 0xb4, 0x74, + 0x5e, 0x2d, 0xcd, 0x7d, 0x68, 0x98, 0x86, 0x25, 0x29, 0xf2, 0x4c, 0x38, + 0x79, 0xeb, 0xee, 0x42, 0xd8, 0x79, 0x67, 0x92, 0xdb, 0x7a, 0x7c, 0x86, + 0xd2, 0x8a, 0xb1, 0x8f, 0x26, 0xb9, 0x9b, 0x6c, 0xfc, 0x82, 0xf3, 0x9f, + 0xe7, 0xc0, 0xe5, 0x70, 0x73, 0x6d, 0x33, 0xa1, 0x77, 0x0b, 0xe8, 0x20, + 0x03, 0x66, 0x6e, 0x4f, 0x69, 0xb1, 0x18, 0x6b, 0x3d, 0x55, 0x83, 0x8a, + 0x85, 0x1b, 0x87, 0xbe, 0xb6, 0xe7, 0x22, 0x01, 0xfe, 0x3f, 0x8a, 0x25, + 0xf4, 0x86, 0x7e, 0xc6, 0x3e, 0xe8, 0xfe, 0xab, 0x05, 0xff, 0xf6, 0x08, + 0x39, 0x0f, 0xa4, 0x8d, 0x18, 0x60, 0x69, 0x80, 0x9c, 0xa6, 0x42, 0xa0, + 0xe7, 0x44, 0x8f, 0x3a, 0xd0, 0xc2, 0xd9, 0x11, 0xb3, 0x3c, 0x17, 0x5c, + 0x66, 0xa2, 0xea, 0xdf, 0xba, 0x79, 0xe2, 0xbc, 0x14, 0x0c, 0x03, 0xbf, + 0x96, 0x60, 0xec, 0x28, 0xb4, 0x1d, 0x07, 0x1c, 0x0f, 0xfb, 0xc7, 0x3c, + 0xe2, 0x58, 0x5f, 0x3d, 0xe5, 0xe1, 0x98, 0xf0, 0x25, 0xe7, 0xaf, 0xd4, + 0xbd, 0x12, 0x67, 0xe1, 0xf5, 0x4e, 0x06, 0x34, 0x96, 0xfe, 0xf3, 0xe9, + 0x66, 0xc5, 0xb7, 0x1a, 0x56, 0x5b, 0xf9, 0xbc, 0xfc, 0x70, 0x34, 0x21, + 0x6b, 0x5b, 0xf6, 0x21, 0xa2, 0xc2, 0x17, 0x9b, 0x52, 0xe9, 0xc9, 0x92, + 0x87, 0x1b, 0xd6, 0x61, 0x87, 0x39, 0x6d, 0xc6, 0x9f, 0x23, 0x94, 0xab, + 0x20, 0xc4, 0x17, 0x00, 0x2c, 0x83, 0x0e, 0x70, 0x5a, 0x08, 0xac, 0x20, + 0x5c, 0x61, 0x38, 0x04, 0xaf, 0x15, 0xac, 0x2c, 0x65, 0x55, 0x3b, 0x69, + 0xd5, 0xd0, 0x12, 0xcd, 0x90, 0xe5, 0x0a, 0x40, 0xfd, 0xdb, 0x8e, 0xda, + 0xa8, 0x33, 0x13, 0xb0, 0x08, 0x9b, 0x5d, 0x69, 0x97, 0x19, 0x3f, 0x21}; + const uint8_t kDecapSharedSecret[MLKEM512_SHARED_SECRET_LEN] = { + 0xbe, 0x41, 0xc0, 0x7a, 0xd0, 0x59, 0x67, 0xab, 0xf7, 0x00, 0xb8, + 0xb2, 0xe6, 0x97, 0x5e, 0x3c, 0x1e, 0x87, 0x50, 0x3c, 0xa0, 0xb5, + 0x83, 0xe1, 0xd7, 0x30, 0x46, 0x23, 0x0e, 0x26, 0x5e, 0x5a}; + const uint8_t kDecapCiphertextRejection[MLKEM512_CIPHERTEXT_BYTES] = { + 0x18, 0x1a, 0xf9, 0xb9, 0xf1, 0x63, 0xa3, 0x04, 0x9d, 0x97, 0xd8, 0x19, + 0x4b, 0x5c, 0x26, 0x35, 0x5f, 0xc9, 0xf9, 0xdc, 0xbf, 0x12, 0x05, 0x76, + 0xab, 0xe4, 0x4d, 0x71, 0xa0, 0xd9, 0x91, 0x06, 0xd5, 0x57, 0x5d, 0xb4, + 0xd1, 0x11, 0x89, 0xc0, 0xeb, 0xbd, 0x3b, 0x30, 0x9e, 0x2b, 0x7f, 0xb8, + 0x6b, 0xb2, 0x51, 0xfe, 0xbd, 0x0c, 0xb5, 0x1b, 0x34, 0x72, 0x89, 0x52, + 0xde, 0x93, 0xad, 0xf1, 0x52, 0xb9, 0xb2, 0x39, 0x27, 0x79, 0x04, 0x93, + 0x93, 0x74, 0xcd, 0x63, 0x89, 0xc9, 0x9e, 0xd2, 0x6d, 0xc9, 0xb7, 0xd7, + 0xa4, 0x82, 0x82, 0xe9, 0x1c, 0x8f, 0x51, 0x75, 0xca, 0xd4, 0xcb, 0x0c, + 0x49, 0xfb, 0x5b, 0x1d, 0x5b, 0x32, 0xfa, 0x89, 0x04, 0xd4, 0x84, 0x49, + 0xe1, 0x0a, 0x18, 0xa3, 0x99, 0x60, 0x25, 0xb1, 0x4e, 0xc7, 0x13, 0x7c, + 0x10, 0x49, 0xe8, 0x6f, 0xa0, 0xd1, 0x25, 0xb2, 0xb5, 0xe1, 0xa6, 0xd1, + 0xe8, 0xfa, 0x8d, 0x6d, 0xc1, 0xdb, 0x67, 0x25, 0x3c, 0xba, 0x44, 0xb2, + 0xa6, 0xb5, 0xf1, 0xa5, 0xe8, 0x7f, 0x05, 0x29, 0x1a, 0x03, 0xdb, 0xd2, + 0x75, 0x70, 0x70, 0x2c, 0xb7, 0x0c, 0x46, 0xe3, 0xe2, 0xd2, 0x60, 0x98, + 0x40, 0x65, 0xc9, 0x69, 0x18, 0x84, 0xd8, 0x86, 0x62, 0x32, 0x68, 0x8b, + 0x77, 0x43, 0xf2, 0x7f, 0x46, 0x92, 0xc9, 0x3e, 0x94, 0xe1, 0x05, 0x67, + 0xf6, 0x22, 0x6c, 0xef, 0xe8, 0x20, 0x30, 0xfd, 0x0a, 0x83, 0x54, 0x7a, + 0x8c, 0x0a, 0x1f, 0xf7, 0xca, 0x81, 0x26, 0x08, 0x76, 0x05, 0x68, 0xec, + 0x69, 0x28, 0xe0, 0xe6, 0x30, 0xd7, 0xe9, 0x37, 0xa9, 0x66, 0x99, 0x14, + 0x7e, 0x34, 0xbe, 0x04, 0xbb, 0xb7, 0xeb, 0xb5, 0x55, 0x07, 0xeb, 0x51, + 0x61, 0xd0, 0xe9, 0xdb, 0x13, 0xbe, 0x22, 0x15, 0xb7, 0x21, 0xe5, 0x47, + 0x41, 0xc7, 0x53, 0xe5, 0x0a, 0x50, 0xb6, 0x9c, 0x15, 0x97, 0x0c, 0xb1, + 0x2c, 0x92, 0xc4, 0x05, 0xa5, 0x08, 0xae, 0xa3, 0xce, 0x17, 0xb3, 0xa8, + 0x4e, 0x25, 0x36, 0x14, 0xfa, 0x67, 0x8b, 0x06, 0xf3, 0x0e, 0x19, 0x7c, + 0xff, 0x1f, 0x41, 0x24, 0x38, 0xe8, 0x00, 0x46, 0x70, 0xd8, 0x88, 0xde, + 0x0d, 0xf2, 0xc1, 0x13, 0x9c, 0xc2, 0x93, 0xee, 0x3a, 0xb9, 0x2f, 0xa9, + 0x8e, 0xdd, 0x4a, 0xbe, 0x6b, 0xe6, 0xca, 0x7d, 0xcd, 0x72, 0xe7, 0x27, + 0x30, 0xad, 0x9c, 0xaf, 0xc0, 0x93, 0x59, 0x4d, 0x57, 0x42, 0xdd, 0xf5, + 0x15, 0x4b, 0x63, 0x17, 0x34, 0x29, 0xdc, 0x5e, 0xf0, 0x33, 0x99, 0xc9, + 0xd1, 0x39, 0x51, 0x08, 0xc8, 0x94, 0xb2, 0x43, 0x59, 0xd0, 0xb1, 0xff, + 0x44, 0x9f, 0xb8, 0xde, 0xb0, 0xcb, 0x58, 0x45, 0xc7, 0x14, 0x75, 0xc5, + 0xc9, 0xa2, 0x4c, 0x7b, 0x77, 0x5e, 0x07, 0x99, 0x21, 0x49, 0xe4, 0xe5, + 0x7c, 0x79, 0x17, 0xc0, 0x1a, 0xed, 0x40, 0x29, 0x78, 0xa0, 0xf0, 0xa7, + 0xb5, 0x90, 0xca, 0xcf, 0xbf, 0x21, 0xa6, 0xcf, 0x59, 0x0a, 0x7d, 0x0d, + 0x0a, 0xd7, 0xa4, 0x55, 0x98, 0x2b, 0xe3, 0x2f, 0x94, 0xec, 0xb5, 0x42, + 0x9c, 0x24, 0x16, 0x2e, 0x13, 0x0d, 0x92, 0x13, 0x04, 0x8a, 0x65, 0x63, + 0x39, 0x0f, 0x63, 0xfe, 0x8f, 0xfb, 0x1a, 0xaf, 0x2d, 0x51, 0xdf, 0xee, + 0x47, 0x76, 0x06, 0xa3, 0x85, 0xf9, 0xa1, 0x6a, 0x00, 0x98, 0x06, 0x7f, + 0xf7, 0x89, 0x10, 0x2a, 0xac, 0xd5, 0x99, 0xee, 0x98, 0x79, 0xef, 0x4d, + 0xb7, 0xeb, 0xc0, 0xf1, 0xcc, 0x1e, 0x7d, 0xe5, 0xd2, 0x5b, 0x67, 0x65, + 0x15, 0x99, 0x4a, 0x00, 0x96, 0x91, 0xf4, 0xe2, 0xaf, 0x31, 0x1f, 0xf7, + 0x3d, 0x2b, 0xea, 0xcb, 0xdb, 0x2b, 0x28, 0x72, 0xd2, 0x7e, 0xe0, 0x2f, + 0x70, 0x50, 0xe8, 0x11, 0x98, 0xf4, 0x7f, 0xe7, 0x5e, 0x0a, 0xa0, 0x42, + 0x81, 0xf0, 0x9e, 0x5d, 0x5d, 0x19, 0x8b, 0x08, 0xbe, 0xc5, 0x61, 0x32, + 0x8e, 0xcb, 0x8d, 0x94, 0x32, 0x4e, 0xa6, 0xe1, 0xad, 0x9f, 0xad, 0x7a, + 0x8f, 0xbf, 0x4f, 0x4b, 0x1b, 0x91, 0xcc, 0x15, 0x0b, 0x0f, 0x6c, 0x86, + 0x40, 0xaf, 0x2e, 0x11, 0x2b, 0x6e, 0xeb, 0xbe, 0x8e, 0xa0, 0x33, 0x81, + 0x20, 0x09, 0x3f, 0x58, 0xbb, 0xe8, 0xae, 0xae, 0x7d, 0xf7, 0x28, 0x8f, + 0xef, 0x1d, 0xe8, 0xab, 0x32, 0x5a, 0x92, 0xb4, 0x2c, 0x0a, 0xa8, 0xed, + 0x3a, 0x62, 0xed, 0x9a, 0x86, 0xe9, 0x46, 0xff, 0xdd, 0xdc, 0x87, 0xaf, + 0x80, 0x15, 0xb4, 0xee, 0x64, 0xdf, 0x5f, 0xf4, 0x8e, 0x94, 0x11, 0x54, + 0x5a, 0x00, 0x78, 0xcf, 0x16, 0xd1, 0x49, 0xfb, 0xf3, 0x19, 0x38, 0xae, + 0xb1, 0x10, 0x92, 0x72, 0x7a, 0x45, 0x2c, 0xa8, 0x4b, 0xab, 0xb7, 0x03, + 0x89, 0x39, 0xa8, 0xdb, 0x3f, 0xa1, 0x04, 0x48, 0x17, 0xec, 0x03, 0x83, + 0x2f, 0x6c, 0x0a, 0x76, 0xe2, 0xb6, 0x16, 0xbb, 0x40, 0xb2, 0xe7, 0x62, + 0x11, 0xb9, 0x1f, 0xf9, 0x69, 0xdc, 0xe0, 0xad, 0x06, 0x9f, 0xb7, 0x29, + 0x47, 0x1e, 0x95, 0xba, 0xce, 0x35, 0x8e, 0x1b, 0xbf, 0xf2, 0xbd, 0xab, + 0xd7, 0x42, 0x98, 0x57, 0xdb, 0xab, 0x72, 0x21, 0x45, 0x47, 0xaf, 0x1a, + 0xbc, 0xdb, 0x08, 0x89, 0x6e, 0xe7, 0x7f, 0x13, 0xf2, 0xd7, 0x5b, 0x17, + 0x17, 0x44, 0x6f, 0xca, 0x7d, 0xf3, 0x2e, 0xfe, 0x1c, 0x2d, 0x09, 0xdc, + 0xfd, 0x5b, 0xfa, 0xff, 0xd1, 0x9e, 0xde, 0x7e, 0x50, 0x2b, 0x63, 0x64, + 0xab, 0xe3, 0x2e, 0x84, 0x49, 0x99, 0xb4, 0x47, 0x7c, 0x99, 0x8a, 0x9f, + 0xb3, 0xc9, 0xba, 0xbb, 0xe8, 0x3c, 0x6e, 0xc6, 0x13, 0x74, 0x0c, 0x2b, + 0x04, 0x75, 0xec, 0xb7, 0x32, 0xde, 0x51, 0x64, 0x38, 0x68, 0xeb, 0xb7}; + const uint8_t kDecapSharedSecretRejection[MLKEM512_SHARED_SECRET_LEN] = { + 0x98, 0xed, 0x60, 0x0f, 0xfd, 0x9e, 0x01, 0x9f, 0x35, 0x0e, 0x0a, + 0x15, 0xd4, 0x69, 0x5b, 0xa0, 0x96, 0xce, 0x2b, 0x32, 0xc3, 0x75, + 0x24, 0x4f, 0x79, 0xa5, 0x74, 0xda, 0x06, 0xb4, 0xb1, 0xbd}; + + if (ml_kem_512_decapsulate_no_self_test(shared_secret, kDecapCiphertext, + kDecapDK) || + !check_test(kDecapSharedSecret, shared_secret, sizeof(kDecapSharedSecret), + "ML-KEM decapsulate non-rejection") || + ml_kem_512_decapsulate_no_self_test( + shared_secret, kDecapCiphertextRejection, kDecapDK) || + !check_test(kDecapSharedSecretRejection, shared_secret, + sizeof(kDecapSharedSecretRejection), + "ML-KEM decapsulate implicit rejection")) { + goto err; + } + + ret = 1; +err: + return ret; +} + #if defined(BORINGSSL_FIPS) static void run_self_test_rsa(void) { @@ -830,6 +1508,18 @@ void boringssl_ensure_ffdh_self_test(void) { CRYPTO_once(g_self_test_once_ffdh_bss_get(), run_self_test_ffdh); } +static void run_self_test_ml_kem(void) { + if (!boringssl_self_test_ml_kem()) { + BORINGSSL_FIPS_abort(); + } +} + +DEFINE_STATIC_ONCE(g_self_test_once_ml_kem); + +void boringssl_ensure_ml_kem_self_test(void) { + CRYPTO_once(g_self_test_once_ml_kem_bss_get(), run_self_test_ml_kem); +} + #endif // BORINGSSL_FIPS @@ -1306,7 +1996,8 @@ int BORINGSSL_self_test(void) { // When requested to run self tests, also run the lazy tests. !boringssl_self_test_rsa() || !boringssl_self_test_ecc() || - !boringssl_self_test_ffdh()) { + !boringssl_self_test_ffdh() || + !boringssl_self_test_ml_kem()) { return 0; } diff --git a/crypto/internal.h b/crypto/internal.h index 8e6aee9f44..7f360e34ce 100644 --- a/crypto/internal.h +++ b/crypto/internal.h @@ -1296,6 +1296,11 @@ void boringssl_ensure_ecc_self_test(void); // if unsuccessful. void boringssl_ensure_ffdh_self_test(void); +// boringssl_ensure_ml_kem_self_test checks whether the ML-KEM self-test +// has been run in this address space. If not, it runs it and crashes the +// address space if unsuccessful. +void boringssl_ensure_ml_kem_self_test(void); + #else // Outside of FIPS mode, the lazy tests are no-ops. @@ -1303,6 +1308,7 @@ void boringssl_ensure_ffdh_self_test(void); OPENSSL_INLINE void boringssl_ensure_rsa_self_test(void) {} OPENSSL_INLINE void boringssl_ensure_ecc_self_test(void) {} OPENSSL_INLINE void boringssl_ensure_ffdh_self_test(void) {} +OPENSSL_INLINE void boringssl_ensure_ml_kem_self_test(void) {} #endif // FIPS From af0ecc71c85f21e901aee3b23d28103eaf5c8d21 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Wed, 11 Sep 2024 22:04:42 +0000 Subject: [PATCH 07/10] ED25519 Service Indicator (#1829) Support for Ed25519 FIPS Service Indicator for KeyGen, SigGen, and SigVer. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/fipsmodule/curve25519/curve25519.c | 12 +++- .../service_indicator/service_indicator.c | 11 ++- .../service_indicator_test.cc | 67 +++++++++++++++++++ 3 files changed, 87 insertions(+), 3 deletions(-) diff --git a/crypto/fipsmodule/curve25519/curve25519.c b/crypto/fipsmodule/curve25519/curve25519.c index 1bbf164ddf..5717984a61 100644 --- a/crypto/fipsmodule/curve25519/curve25519.c +++ b/crypto/fipsmodule/curve25519/curve25519.c @@ -112,6 +112,8 @@ void ED25519_keypair(uint8_t out_public_key[ED25519_PUBLIC_KEY_LEN], // description why this is useful. ED25519_keypair_from_seed(out_public_key, out_private_key, seed); OPENSSL_cleanse(seed, ED25519_SEED_LEN); + + FIPS_service_indicator_update_state(); } int ED25519_sign(uint8_t out_sig[ED25519_SIGNATURE_LEN], @@ -155,6 +157,8 @@ int ED25519_sign(uint8_t out_sig[ED25519_SIGNATURE_LEN], // The signature is computed from the private key, but is public. CONSTTIME_DECLASSIFY(out_sig, 64); + + FIPS_service_indicator_update_state(); return 1; } @@ -212,8 +216,12 @@ int ED25519_verify(const uint8_t *message, size_t message_len, #endif // Comparison [S]B - [k]A' =? R_expected. Short-circuits if decoding failed. - return (res == 1) && - CRYPTO_memcmp(R_computed_encoded, R_expected, sizeof(R_computed_encoded)) == 0; + res = (res == 1) && CRYPTO_memcmp(R_computed_encoded, R_expected, + sizeof(R_computed_encoded)) == 0; + if(res) { + FIPS_service_indicator_update_state(); + } + return res; } diff --git a/crypto/fipsmodule/service_indicator/service_indicator.c b/crypto/fipsmodule/service_indicator/service_indicator.c index e642e9626f..df18dc657e 100644 --- a/crypto/fipsmodule/service_indicator/service_indicator.c +++ b/crypto/fipsmodule/service_indicator/service_indicator.c @@ -222,7 +222,14 @@ static void evp_md_ctx_verify_service_indicator(const EVP_MD_CTX *ctx, int (*md_ok)(int md_type, int pkey_type)) { if (EVP_MD_CTX_md(ctx) == NULL) { - // Signature schemes without a prehash are currently never FIPS approved. + if(ctx->pctx->pkey->type == EVP_PKEY_ED25519) { + // FIPS 186-5: + //. 7.6 EdDSA Signature Generation + // 7.7 EdDSA Signature Verification + FIPS_service_indicator_update_state(); + return; + } + // All other signature schemes without a prehash are currently never FIPS approved. goto err; } @@ -330,6 +337,8 @@ void EVP_PKEY_keygen_verify_service_indicator(const EVP_PKEY *pkey) { default: break; } + } else if (pkey->type == EVP_PKEY_ED25519) { + FIPS_service_indicator_update_state(); } } diff --git a/crypto/fipsmodule/service_indicator/service_indicator_test.cc b/crypto/fipsmodule/service_indicator/service_indicator_test.cc index e25587506e..ccb017d7c8 100644 --- a/crypto/fipsmodule/service_indicator/service_indicator_test.cc +++ b/crypto/fipsmodule/service_indicator/service_indicator_test.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -4622,6 +4623,72 @@ TEST(ServiceIndicatorTest, ML_KEM) { } } +TEST(ServiceIndicatorTest, ED25519KeyGen) { + FIPSStatus approved = AWSLC_NOT_APPROVED; + uint8_t private_key[ED25519_PRIVATE_KEY_LEN] = {0}; + uint8_t public_key[ED25519_PUBLIC_KEY_LEN] = {0}; + CALL_SERVICE_AND_CHECK_APPROVED(approved, + ED25519_keypair(public_key, private_key)); + ASSERT_EQ(AWSLC_APPROVED, approved); + + approved = AWSLC_NOT_APPROVED; + + bssl::UniquePtr ctx( + EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, nullptr)); + EVP_PKEY *raw = nullptr; + bssl::UniquePtr pkey(raw); + ASSERT_TRUE(EVP_PKEY_keygen_init(ctx.get())); + CALL_SERVICE_AND_CHECK_APPROVED( + approved, ASSERT_TRUE(EVP_PKEY_keygen(ctx.get(), &raw))); + ASSERT_EQ(AWSLC_APPROVED, approved); + pkey.reset(raw); +} + +TEST(ServiceIndicatorTest, ED25519SigGenVerify) { + const uint8_t MESSAGE[15] = {'E', 'D', '2', '5', '5', '1', '9', ' ', + 'M', 'E', 'S', 'S', 'A', 'G', 'E'}; + uint8_t private_key[ED25519_PRIVATE_KEY_LEN] = {0}; + uint8_t public_key[ED25519_PUBLIC_KEY_LEN] = {0}; + uint8_t signature[ED25519_SIGNATURE_LEN] = {0}; + ED25519_keypair(public_key, private_key); + + FIPSStatus approved = AWSLC_NOT_APPROVED; + CALL_SERVICE_AND_CHECK_APPROVED( + approved, ASSERT_TRUE(ED25519_sign(&signature[0], &MESSAGE[0], + sizeof(MESSAGE), private_key))); + ASSERT_EQ(AWSLC_APPROVED, approved); + + approved = AWSLC_NOT_APPROVED; + CALL_SERVICE_AND_CHECK_APPROVED( + approved, ASSERT_TRUE(ED25519_verify(&MESSAGE[0], sizeof(MESSAGE), + signature, public_key))); + ASSERT_EQ(AWSLC_APPROVED, approved); + + bssl::UniquePtr pkey(EVP_PKEY_new_raw_private_key( + EVP_PKEY_ED25519, NULL, &private_key[0], ED25519_PRIVATE_KEY_SEED_LEN)); + + bssl::UniquePtr mdctx(EVP_MD_CTX_new()); + CALL_SERVICE_AND_CHECK_APPROVED( + approved, EVP_DigestSignInit(mdctx.get(), NULL, NULL, NULL, pkey.get())); + ASSERT_EQ(AWSLC_NOT_APPROVED, approved); + size_t sig_out_len = sizeof(signature); + CALL_SERVICE_AND_CHECK_APPROVED( + approved, + ASSERT_TRUE(EVP_DigestSign(mdctx.get(), &signature[0], &sig_out_len, + &MESSAGE[0], sizeof(MESSAGE)))); + ASSERT_EQ(AWSLC_APPROVED, approved); + ASSERT_EQ(sizeof(signature), sig_out_len); + + mdctx.reset(EVP_MD_CTX_new()); + ASSERT_TRUE(EVP_DigestVerifyInit(mdctx.get(), NULL, NULL, NULL, pkey.get())); + approved = AWSLC_NOT_APPROVED; + CALL_SERVICE_AND_CHECK_APPROVED( + approved, ASSERT_TRUE(EVP_DigestVerify(mdctx.get(), &signature[0], + sizeof(signature), &MESSAGE[0], + sizeof(MESSAGE)))); + ASSERT_EQ(AWSLC_APPROVED, approved); +} + // Verifies that the awslc_version_string is as expected. // Since this is running in FIPS mode it should end in FIPS // Update this when the AWS-LC version number is modified From 3f4d2f62c3f4ddaabb6092a4af34fd045d7367a8 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Wed, 11 Sep 2024 23:45:53 +0000 Subject: [PATCH 08/10] Update Allowed RSA KeySize Generation to FIPS 186-5 specification (#1823) ### Description of changes: Updates RSA key size generation to support FIPS 186-5 specification that allows for RSA key sizes >= 2048 and even modulus length. **Note**: The even modulous length check is satisfied by the `bits % 128 == 0` check on the `RSA_generate_key_fips` and `EVP_PKEY_keygen` indicator check paths. 128 is chosen here as the underlying RSA key generation implementation will only generate RSA keys that are evenly divisible by 128, otherwise it will round down to the nearest value. Enforcing this on the key generation path will ensure that the request bit length is always returned on the FIPS path. Signing/Verification paths continue to enforce the divisible by 2 check in the event the key was not generated by our module. Also cleans up the entire ACVP RSA capabilities registration (looks like a lot of whitespace changes, but I also collapsed some of the registration attributes that didn't need to be duplicated). Also added back the 1024 bit key testing with other algorithms in addition to SHA-1. Note ACVP only supports testing up to 8192 key size due to infrastructure limitations, and SigGen and SigVer only supports keys up to 4096. ACVP KeyGen tests the following key sizes: 2048, 3072, 4096, 6144, or 8192 By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/fipsmodule/rsa/rsa_impl.c | 11 +- .../service_indicator/service_indicator.c | 26 +- .../service_indicator_test.cc | 92 +- include/openssl/rsa.h | 5 + .../acvp/acvptool/test/expected/RSA.bz2 | Bin 1041 -> 1119 bytes util/fipstools/acvp/acvptool/test/tests.json | 1 + .../acvp/acvptool/test/vectors/RSA-KeyGen.bz2 | Bin 0 -> 535 bytes .../acvp/acvptool/test/vectors/RSA-SigGen.bz2 | Bin 14372 -> 15136 bytes .../acvp/acvptool/test/vectors/RSA.bz2 | Bin 199245 -> 210726 bytes .../acvp/modulewrapper/modulewrapper.cc | 905 +++++++++--------- 10 files changed, 548 insertions(+), 492 deletions(-) create mode 100644 util/fipstools/acvp/acvptool/test/vectors/RSA-KeyGen.bz2 diff --git a/crypto/fipsmodule/rsa/rsa_impl.c b/crypto/fipsmodule/rsa/rsa_impl.c index f9d2c81411..4eb9084974 100644 --- a/crypto/fipsmodule/rsa/rsa_impl.c +++ b/crypto/fipsmodule/rsa/rsa_impl.c @@ -1269,11 +1269,12 @@ int RSA_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e_value, } int RSA_generate_key_fips(RSA *rsa, int bits, BN_GENCB *cb) { - // FIPS 186-4 allows 2048-bit and 3072-bit RSA keys (1024-bit and 1536-bit - // primes, respectively) with the prime generation method we use. - // Subsequently, IG A.14 stated that larger modulus sizes can be used and ACVP - // testing supports 4096 bits. - if (bits != 2048 && bits != 3072 && bits != 4096) { + // FIPS 186-5 Section 5.1: + // This standard specifies the use of a modulus whose bit length is an even + // integer and greater than or equal to 2048 bits. Furthermore, this standard + // specifies that p and q be of the same bit length – namely, half the bit + // length of n + if (bits < 2048 || bits % 128 != 0) { OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_RSA_PARAMETERS); return 0; } diff --git a/crypto/fipsmodule/service_indicator/service_indicator.c b/crypto/fipsmodule/service_indicator/service_indicator.c index df18dc657e..5f02536f5a 100644 --- a/crypto/fipsmodule/service_indicator/service_indicator.c +++ b/crypto/fipsmodule/service_indicator/service_indicator.c @@ -267,14 +267,12 @@ static void evp_md_ctx_verify_service_indicator(const EVP_MD_CTX *ctx, } } - // The approved RSA key sizes for signing are 2048, 3072 and 4096 bits. - // Note: |EVP_PKEY_size| returns the size in bytes. - size_t pkey_size = EVP_PKEY_size(ctx->pctx->pkey); + // The approved RSA key sizes for signing are key sizes >= 2048 bits and bits % 2 == 0. + size_t n_bits = RSA_bits(ctx->pctx->pkey->pkey.rsa); // Check if the MD type and the RSA key size are approved. if (md_ok(md_type, pkey_type) && - ((rsa_1024_ok && pkey_size == 128) || pkey_size == 256 || - pkey_size == 384 || pkey_size == 512)) { + ((rsa_1024_ok && n_bits == 1024) || (n_bits >= 2048 && n_bits % 2 == 0))) { FIPS_service_indicator_update_state(); } } else if (pkey_type == EVP_PKEY_EC) { @@ -306,18 +304,12 @@ void ECDH_verify_service_indicator(const EC_KEY *ec_key) { void EVP_PKEY_keygen_verify_service_indicator(const EVP_PKEY *pkey) { if (pkey->type == EVP_PKEY_RSA || pkey->type == EVP_PKEY_RSA_PSS) { - // 2048, 3072 and 4096 bit keys are approved for RSA key generation. - // EVP_PKEY_size returns the size of the key in bytes. - // Note: |EVP_PKEY_size| returns the length in bytes. - size_t key_size = EVP_PKEY_size(pkey); - switch (key_size) { - case 256: - case 384: - case 512: - FIPS_service_indicator_update_state(); - break; - default: - break; + // The approved RSA key sizes for signing are key sizes >= 2048 bits and + // bits % 2 == 0, though we check bits % 128 == 0 for consistency with + // our RSA key generation. + size_t n_bits = RSA_bits(pkey->pkey.rsa); + if (n_bits >= 2048 && n_bits % 128 == 0) { + FIPS_service_indicator_update_state(); } } else if (pkey->type == EVP_PKEY_EC) { // Note: even though the function is called |EC_GROUP_get_curve_name| diff --git a/crypto/fipsmodule/service_indicator/service_indicator_test.cc b/crypto/fipsmodule/service_indicator/service_indicator_test.cc index ccb017d7c8..49bece44c5 100644 --- a/crypto/fipsmodule/service_indicator/service_indicator_test.cc +++ b/crypto/fipsmodule/service_indicator/service_indicator_test.cc @@ -2013,9 +2013,8 @@ TEST(ServiceIndicatorTest, RSAKeyGen) { bssl::UniquePtr rsa(RSA_new()); ASSERT_TRUE(rsa); - // |RSA_generate_key_fips| may only be used for 2048-, 3072-, and 4096-bit - // keys. - for (const size_t bits : {512, 1024, 3071, 4095}) { + // |RSA_generate_key_fips| may only be used for bits >= 2048 && bits % 128 == 0 + for (const size_t bits : {512, 1024, 2520, 3071}) { SCOPED_TRACE(bits); rsa.reset(RSA_new()); @@ -2024,8 +2023,9 @@ TEST(ServiceIndicatorTest, RSAKeyGen) { EXPECT_EQ(approved, AWSLC_NOT_APPROVED); } - // Test that we can generate keys of the supported lengths: - for (const size_t bits : {2048, 3072, 4096}) { + // Test that we can generate keys with supported lengths, + // larger key sizes are supported but are omitted for time. + for (const size_t bits : {2048, 3072, 4096, 6144, 8192}) { SCOPED_TRACE(bits); rsa.reset(RSA_new()); @@ -2045,7 +2045,7 @@ TEST(ServiceIndicatorTest, RSAKeyGen) { ASSERT_TRUE(ctx); if (kEVPKeyGenShouldCallFIPSFunctions) { - // Test unapproved key sizes of RSA. + // Test various unapproved key sizes of RSA. for (const size_t bits : {512, 1024, 3071, 4095}) { SCOPED_TRACE(bits); CALL_SERVICE_AND_CHECK_APPROVED( @@ -2059,8 +2059,8 @@ TEST(ServiceIndicatorTest, RSAKeyGen) { raw = nullptr; } - // Test approved key sizes of RSA. - for (const size_t bits : {2048, 3072, 4096}) { + // Test various approved key sizes of RSA. + for (const size_t bits : {2048, 3072, 4096, 6144, 8192}) { SCOPED_TRACE(bits); CALL_SERVICE_AND_CHECK_APPROVED( approved, ASSERT_TRUE(EVP_PKEY_keygen_init(ctx.get()))); @@ -2095,9 +2095,6 @@ struct RSATestVector kRSATestVectors[] = { { 1536, &EVP_sha256, false, AWSLC_NOT_APPROVED, AWSLC_NOT_APPROVED }, { 1536, &EVP_sha512, true, AWSLC_NOT_APPROVED, AWSLC_NOT_APPROVED }, { 2048, &EVP_md5, false, AWSLC_NOT_APPROVED, AWSLC_NOT_APPROVED }, - { 3071, &EVP_md5, true, AWSLC_NOT_APPROVED, AWSLC_NOT_APPROVED }, - { 3071, &EVP_sha256, false, AWSLC_NOT_APPROVED, AWSLC_NOT_APPROVED }, - { 3071, &EVP_sha512, true, AWSLC_NOT_APPROVED, AWSLC_NOT_APPROVED }, { 4096, &EVP_md5, false, AWSLC_NOT_APPROVED, AWSLC_NOT_APPROVED }, // RSA test cases that are approved. @@ -2195,6 +2192,54 @@ struct RSATestVector kRSATestVectors[] = { { 4096, &EVP_sha3_256, true, AWSLC_APPROVED, AWSLC_APPROVED }, { 4096, &EVP_sha3_384, true, AWSLC_APPROVED, AWSLC_APPROVED }, { 4096, &EVP_sha3_512, true, AWSLC_APPROVED, AWSLC_APPROVED }, + + { 6144, &EVP_sha1, false, AWSLC_NOT_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha224, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha256, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha384, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha512, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha512_224, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha512_256, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_224, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_256, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_384, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_512, false, AWSLC_APPROVED, AWSLC_APPROVED }, + + { 6144, &EVP_sha1, true, AWSLC_NOT_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha224, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha256, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha384, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha512, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha512_224, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha512_256, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_224, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_256, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_384, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 6144, &EVP_sha3_512, true, AWSLC_APPROVED, AWSLC_APPROVED }, + + { 8192, &EVP_sha1, false, AWSLC_NOT_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha224, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha256, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha384, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha512, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha512_224, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha512_256, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_224, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_256, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_384, false, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_512, false, AWSLC_APPROVED, AWSLC_APPROVED }, + + { 8192, &EVP_sha1, true, AWSLC_NOT_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha224, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha256, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha384, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha512, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha512_224, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha512_256, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_224, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_256, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_384, true, AWSLC_APPROVED, AWSLC_APPROVED }, + { 8192, &EVP_sha3_512, true, AWSLC_APPROVED, AWSLC_APPROVED }, }; class RSAServiceIndicatorTest : public TestWithNoErrors {}; @@ -2229,20 +2274,20 @@ static RSA *GetRSAKey(unsigned bits) { return ret; } -// When using |EVP_PKEY_assign| to assign |RSA| to |EVP_PKEY|, the pointer will -// get assigned to |EVP_PKEY| and get freed along with it. -static RSA *GetRSAPSSKey(unsigned bits) { - bssl::UniquePtr e(BN_new()); - if (!e || !BN_set_word(e.get(), RSA_F4)) { +static void AssignRSAPSSKey(EVP_PKEY *pkey, unsigned bits) { + RSA *rsa = GetRSAKey(bits); + if (rsa == NULL || pkey == NULL) { abort(); } - RSA *key = RSA_new(); - if (!key || !RSA_generate_key_ex(key, bits, e.get(), nullptr)) { + // When using |EVP_PKEY_assign| to assign |RSA| to |EVP_PKEY|, the pointer + // will get assigned to |EVP_PKEY| and get freed along with it. This will not + // up the reference to RSA unlike |EVP_PKEY_assign_RSA|! So we do that after. + if (!EVP_PKEY_assign(pkey, EVP_PKEY_RSA_PSS, rsa)) { abort(); } - return key; + RSA_up_ref(rsa); } TEST_P(RSAServiceIndicatorTest, RSASigGen) { @@ -2253,8 +2298,7 @@ TEST_P(RSAServiceIndicatorTest, RSASigGen) { ASSERT_TRUE(pkey); RSA *rsa = nullptr; if(test.use_pss) { - rsa = GetRSAPSSKey(test.key_size); - ASSERT_TRUE(EVP_PKEY_assign(pkey.get(), EVP_PKEY_RSA_PSS, rsa)); + AssignRSAPSSKey(pkey.get(), test.key_size); } else { rsa = GetRSAKey(test.key_size); ASSERT_TRUE(EVP_PKEY_set1_RSA(pkey.get(), rsa)); @@ -2351,8 +2395,7 @@ TEST_P(RSAServiceIndicatorTest, RSASigVer) { RSA *rsa = nullptr; if(test.use_pss) { - rsa = GetRSAPSSKey(test.key_size); - ASSERT_TRUE(EVP_PKEY_assign(pkey.get(), EVP_PKEY_RSA_PSS, rsa)); + AssignRSAPSSKey(pkey.get(), test.key_size); } else { rsa = GetRSAKey(test.key_size); ASSERT_TRUE(EVP_PKEY_set1_RSA(pkey.get(), rsa)); @@ -2433,8 +2476,7 @@ TEST_P(RSAServiceIndicatorTest, ManualRSASignVerify) { RSA *rsa = nullptr; if(test.use_pss) { - rsa = GetRSAPSSKey(test.key_size); - ASSERT_TRUE(EVP_PKEY_assign(pkey.get(), EVP_PKEY_RSA_PSS, rsa)); + AssignRSAPSSKey(pkey.get(), test.key_size); } else { rsa = GetRSAKey(test.key_size); ASSERT_TRUE(EVP_PKEY_set1_RSA(pkey.get(), rsa)); diff --git a/include/openssl/rsa.h b/include/openssl/rsa.h index 726f19d4ac..f684987070 100644 --- a/include/openssl/rsa.h +++ b/include/openssl/rsa.h @@ -313,6 +313,11 @@ OPENSSL_EXPORT int RSA_meth_set_sign(RSA_METHOD *meth, // is called with event=2 when the n'th prime is rejected as unsuitable and // with event=3 when a suitable value for |p| is found. // +// Note: |bits| is expected to be divisible by 128, and if not will be rounded +// down to the nearest valid value. For example, requesting 3071 bits will +// provide a key that is 2944 bits. |RSA_bits| can be used to verify the +// RSA modulus size of the returned key. +// // It returns one on success or zero on error. OPENSSL_EXPORT int RSA_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, BN_GENCB *cb); diff --git a/util/fipstools/acvp/acvptool/test/expected/RSA.bz2 b/util/fipstools/acvp/acvptool/test/expected/RSA.bz2 index 9a71e2a352c0436de8480dd415537e9b348df6da..78a65f6b6ebfa64cc65306c473b85854137fab8f 100644 GIT binary patch literal 1119 zcmV-l1fcsuT4*^jL0KkKSxSUtRsbf3e}F_(Kmbq%|L`E7UK%gw-wI#`-XC!APjf1p zWtjK}$bf2S(9cyU02%-Q0MHVqgH7sGN&v_J41fR{o;6hm>VNZ(&f$TS9l zpwMIh0X0g5$O3wvrXi+)0MVwNP)L(iJk2QpCWZh47$!A@mA>S&E0cxr)0PrGD2zmL zA~hm4B0i{%D2+&tE!pVgLMZ4eD!phUPj&Lybz3>SFAu#4@~Rk!;%>VU8Db-@2?;_t z!+d;c2uq`a5ZyH$27yj9Z9bDZZy(J<}P04g1}fe=F408-m< z1YuBHXi?i}6AYGGq9PE42tsH=imIrDU_b~$5QHQEga|Gqv7nRy8Uls410WH^I9m%V zV{r+`ERq$$%4#f|m|DwMA6W8wd9y_xhnb%V=?blPn#Fczs;jjXR8=D3s;=~T$cKwN z9O%$|(9U}U7$9#!_C}g$twa?=EV!_)g*Ofbrj!6bsS6}5I-*j+HfYP!fhd?DXeA zA`EU01O{#nyA45zyE`bBomCQ~8f+ceikqfOE=~)QYHDdWcXxRegR`2MYPnTf?`X-9 z5hzGI-u7a+<*PZpayA=`M>~1hjle?Wz2h(uY8@wPFb=5fjHgnaLX1p+7E>ay*NVz) z9qHaeY!Q^pGa1c-SUl7jl?^-><9OUpWTJ{Bxox|#Z{RyQB+kG2YT0R z(7Mgc8oSmv7>shez7fVi;`CIhV`WyhC8qHORN1GiHn3`HV8&Je03L3w7EZ~SX^PR> zjKO3*T8z*l$=Nduf~ne$S!G>HjAJTf03Ne~A=BRLtU*N;(Gw!oRdA}D%P`(=L%a-? ztQ8j*1{zIZQPw+%Yoweg?9EW!-QDxI6%zpB3$fM*mTLm!V8V`rK5%1gZP?+}e{aUV z@KFRol_toRN|MP^RF+DT$x>{JN>WNnNi3I^TqKl~l9ozIDKaG_i76sdNRmjDl8GdV zNg_lfQ3OFm6Ck1pf{BDdL=g<42!ferW?E4jFV&&Fw?|h!Q2KYGJGswfSi6$Q$Ipwi53nzhnfJ&xRxi^8a|qT{;TiY#G8*c2Ef;e3*D5OnII1??Jj zQ8qf!jD%oHK#2fC062iq0BrzR0cZf&29N-73P1pKB>(_n0004qi2wk^NB{>=Pyif2 zXaF{VEC93sYy(IDIn7S+qnBrOVLR6&lKsOp^&$B9(vvb|!r-MG`_y9&Pz_uY4# zM1UFH>1TP)_q<%>spfaRjL!Fl@~f0uS9z#gDRz4>vWW6mlrB`(&1dhxpM7P#J27(RJWw&E>j~m_JfU$x1H?kjrY@iZ5Z2awas0N&hu&W8*R5}xsBd$he+>QrCFJb zZjb;OBjnSq%w5GrZhPBWn4E6n0RJ1adPIst913th0xR@ zM^ON35E@ADS2Hu5%tLLr*DCUqJno@9H4Cz^r2uI!SV|)+HsRNQZ^mDED1soxNtlUZ zRF)-4QDISGQJ9G(5=j!B7M6k`iXez6f?^6Fh$xsM3LuC`q6mVBCLp2+f{B74q6mg4 zf*_(8;wZTvmX`acO}lD~=iE_t_gwp!?1+H8AN3nkj4c` zg;pkEkx>;GW+8!OS69b0sx8+nsIuxQG$_8TwqARom{NE@+$^=bTDmV2S)2E{0k`ha zQE<6i3Qn4$=_tIQmXMZqB^K)i7m=RZ%neE{T|nw<%Vs$(9u5D}i-ARqD6t~4*khEGH` zr6>dIU_>@^?IsxJ&!Za>lv1>*Q_Ly zNKM;!$6i26l9a2ix^lH@I!tVjAr6ez&l?c4g3&rZh$1%0iAIfg^G_?3X}a=;n4yaV zJO&^&+L`8NsmaMo%{Pe8DkB#eScErhT#Kn)0Q|>`wHWdWo?=iArZ#6eN>ckS7#`gr@X_ z;+F7B=YGV5p)gJdG{G|@lEmv869mweuLP|b7IPhGiee>+QfGo>Ix0}6G>C|rv|#Dz zL$W{F9EC8RKk6Nndhcn2yxZZRAEos^cXIc$~zb Zd8XvR^G<0Hl8{IIUC9*TLPBPvnjpsY?hyb0 literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/acvptool/test/vectors/RSA-SigGen.bz2 b/util/fipstools/acvp/acvptool/test/vectors/RSA-SigGen.bz2 index 01b698a40209fac40a4874880fc0d3d81f49fff1..0f8c151d8b38a5f0c1271e057b76e8ca45a23623 100644 GIT binary patch literal 15136 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 O{}*yaI8cz{v*LR;_y#Qi literal 14372 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 diff --git a/util/fipstools/acvp/acvptool/test/vectors/RSA.bz2 b/util/fipstools/acvp/acvptool/test/vectors/RSA.bz2 index 4898469cad23f984e9acdff652b1794702f7ee1e..3212fdb979ad966633a7262d726b4ced876b0a5e 100644 GIT binary patch literal 210726 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%0ALSaE(E!QFw{Y|cdol!& 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 literal 199245 zcmV)CK*GO5T4*^jL0KkKS*H~~djmtTUx0N`PzV3;KjdE;FYn(fW6K`_@PJ4@^7U{4 z03R=V+g`fU=y$VBsn&o!dhM#)OKQ}*>)TZ)wzs>TShTD)wk1~8HYaR^cGs=NrkSk> zt?V~6L04Vc(#o4!X!O-vvBB=;bheqcjNNyzre3sfT27fr8)}g&z1=*stg5cGrBzi8 zqL>?4TGg+1IjyZUTQ1b=tt!h3j@{kbQ0%sb%vCGlYKxmvQ`13G=(9r5Z?|1b*12K@ z4({z}DXU;m4655&D)u_-Y@|5d znWNro)wBxs!Q0#o*-ag*U9CIZ?^da5+PAYh*+n~b(rK!zFw0C@WGl?qVNFV^O4+nf zG&T3HJKI&(RUdo1ZAP^w`y5mUc68}y&BYFVn(nd5_q&fLy91%Cz3&^^*}J&wt+aq` zy?lq4t+3N(iS##FR86+bTQL<|NDEV(~upXVMs7pg_N|97X+O{Ud)mZmx zs*zBf-MMxc+q)d8db7I5v^Svcwx+acTVby5xv{TVb|!7?YE&xj-CZ`-qut5FNuKKSwY}@TZjT3TtnXu7k6zutJ-J;p+hO;6wLw)X^xHK_A8k~-Yu1I^LYf-vH(OJ0 zd)^+YO*OL~-EG}f0`hytrHU&$nD#kd$rNKoE=+RWQtl_ zHo-_+ZFKI`%9XX4ZRuCHJlk2ZigW<#b27HxvU|?!+}%;=?pxeym!;5*$!`#lAr(LSj2VT3;?!*di+?|_QJ8e16=5$)yPi#=?sV>=E z#x~L(&uzr^8feuO*`!|XIz4wV<)t%OmEGMe#WZcLYqLAn?K9JLsJ+|X&?>tcl$C8Q znWovMW@~C{G-T65xw#UHrtaO)(AdmDO6|J6?su$u-Ly66H+J1!u-%Hg+~v{e_Z!

S^=dssX(7N0+R-Wv;R$aGl;OOa6 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

4ux6l2o9PWZMLOo=@GZx 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 diff --git a/util/fipstools/acvp/modulewrapper/modulewrapper.cc b/util/fipstools/acvp/modulewrapper/modulewrapper.cc index 61dcf0843f..6fe7c29d5e 100644 --- a/util/fipstools/acvp/modulewrapper/modulewrapper.cc +++ b/util/fipstools/acvp/modulewrapper/modulewrapper.cc @@ -636,223 +636,224 @@ static bool GetConfig(const Span args[], "capabilities": [{ "randPQ": "probable", "properties": [{ - "modulo": 2048, - "primeTest": [ - "2powSecStr" - ], - "pMod8": 0, - "qMod8": 0 - },{ - "modulo": 3072, - "primeTest": [ - "2powSecStr" - ], - "pMod8": 0, - "qMod8": 0 - },{ - "modulo": 4096, - "primeTest": [ - "2powSecStr" - ], - "pMod8": 0, - "qMod8": 0 + "modulo": 2048, + "primeTest": [ + "2powSecStr" + ], + "pMod8": 0, + "qMod8": 0 + },{ + "modulo": 3072, + "primeTest": [ + "2powSecStr" + ], + "pMod8": 0, + "qMod8": 0 + },{ + "modulo": 4096, + "primeTest": [ + "2powSecStr" + ], + "pMod8": 0, + "qMod8": 0 + },{ + "modulo": 6144, + "primeTest": [ + "2powSecStr" + ], + "pMod8": 0, + "qMod8": 0 + },{ + "modulo": 8192, + "primeTest": [ + "2powSecStr" + ], + "pMod8": 0, + "qMod8": 0 }] }] - }, - { + },)" + R"({ "algorithm": "RSA", "mode": "sigGen", "revision": "FIPS186-5", "capabilities": [{ "sigType": "pkcs1v1.5", "properties": [{ - "modulo": 2048, - "hashPair": [{ - "hashAlg": "SHA2-224" - }, { - "hashAlg": "SHA2-256" - }, { - "hashAlg": "SHA2-384" - }, { - "hashAlg": "SHA2-512" - }, { - "hashAlg": "SHA2-512/224" - }, { - "hashAlg": "SHA2-512/256" - }, { - "hashAlg": "SHA3-224" - }, { - "hashAlg": "SHA3-256" - }, { - "hashAlg": "SHA3-384" - }, { - "hashAlg": "SHA3-512" - }] - }] - },{ - "sigType": "pkcs1v1.5", - "properties": [{ - "modulo": 3072, - "hashPair": [{ - "hashAlg": "SHA2-224" - }, { - "hashAlg": "SHA2-256" - }, { - "hashAlg": "SHA2-384" - }, { - "hashAlg": "SHA2-512" - }, { - "hashAlg": "SHA2-512/224" - }, { - "hashAlg": "SHA2-512/256" - }, { - "hashAlg": "SHA3-224" - }, { - "hashAlg": "SHA3-256" - }, { - "hashAlg": "SHA3-384" - }, { - "hashAlg": "SHA3-512" - }] - }] - },{ - "sigType": "pkcs1v1.5", - "properties": [{ - "modulo": 4096, - "hashPair": [{ - "hashAlg": "SHA2-224" - }, { - "hashAlg": "SHA2-256" - }, { - "hashAlg": "SHA2-384" - }, { - "hashAlg": "SHA2-512" - }, { - "hashAlg": "SHA2-512/224" - }, { - "hashAlg": "SHA2-512/256" - }, { - "hashAlg": "SHA3-224" - }, { - "hashAlg": "SHA3-256" - }, { - "hashAlg": "SHA3-384" - }, { - "hashAlg": "SHA3-512" + "modulo": 2048, + "hashPair": [{ + "hashAlg": "SHA2-224" + },{ + "hashAlg": "SHA2-256" + },{ + "hashAlg": "SHA2-384" + },{ + "hashAlg": "SHA2-512" + },{ + "hashAlg": "SHA2-512/224" + },{ + "hashAlg": "SHA2-512/256" + },{ + "hashAlg": "SHA3-224" + },{ + "hashAlg": "SHA3-256" + },{ + "hashAlg": "SHA3-384" + },{ + "hashAlg": "SHA3-512" + }] + },{ + "modulo": 3072, + "hashPair": [{ + "hashAlg": "SHA2-224" + },{ + "hashAlg": "SHA2-256" + },{ + "hashAlg": "SHA2-384" + },{ + "hashAlg": "SHA2-512" + },{ + "hashAlg": "SHA2-512/224" + },{ + "hashAlg": "SHA2-512/256" + },{ + "hashAlg": "SHA3-224" + },{ + "hashAlg": "SHA3-256" + },{ + "hashAlg": "SHA3-384" + },{ + "hashAlg": "SHA3-512" + }] + },{ + "modulo": 4096, + "hashPair": [{ + "hashAlg": "SHA2-224" + },{ + "hashAlg": "SHA2-256" + },{ + "hashAlg": "SHA2-384" + },{ + "hashAlg": "SHA2-512" + },{ + "hashAlg": "SHA2-512/224" + },{ + "hashAlg": "SHA2-512/256" + },{ + "hashAlg": "SHA3-224" + },{ + "hashAlg": "SHA3-256" + },{ + "hashAlg": "SHA3-384" + },{ + "hashAlg": "SHA3-512" + }] }] - }] - },)" - R"({ - "sigType": "pss", - "properties": [{ - "modulo": 2048, - "maskFunction": ["mgf1"], - "hashPair": [{ - "hashAlg": "SHA2-224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-256", - "saltLen": 32 - }, { - "hashAlg": "SHA2-384", - "saltLen": 48 - }, { - "hashAlg": "SHA2-512", - "saltLen": 64 - }, { - "hashAlg": "SHA2-512/224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-512/256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-224", - "saltLen": 28 - }, { - "hashAlg": "SHA3-256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-384", - "saltLen": 48 - }, { - "hashAlg": "SHA3-512", - "saltLen": 64 - }] - }] - },{ - "sigType": "pss", - "properties": [{ - "modulo": 3072, - "maskFunction": ["mgf1"], - "hashPair": [{ - "hashAlg": "SHA2-224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-256", - "saltLen": 32 - }, { - "hashAlg": "SHA2-384", - "saltLen": 48 - }, { - "hashAlg": "SHA2-512", - "saltLen": 64 - }, { - "hashAlg": "SHA2-512/224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-512/256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-224", - "saltLen": 28 - }, { - "hashAlg": "SHA3-256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-384", - "saltLen": 48 - }, { - "hashAlg": "SHA3-512", - "saltLen": 64 - }] - }] - },{ - "sigType": "pss", - "properties": [{ - "modulo": 4096, - "maskFunction": ["mgf1"], - "hashPair": [{ - "hashAlg": "SHA2-224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-256", - "saltLen": 32 - }, { - "hashAlg": "SHA2-384", - "saltLen": 48 - }, { - "hashAlg": "SHA2-512", - "saltLen": 64 - }, { - "hashAlg": "SHA2-512/224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-512/256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-224", - "saltLen": 28 - }, { - "hashAlg": "SHA3-256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-384", - "saltLen": 48 - }, { - "hashAlg": "SHA3-512", - "saltLen": 64 + },{ + "sigType": "pss", + "properties": [{ + "modulo": 2048, + "maskFunction": ["mgf1"], + "hashPair": [{ + "hashAlg": "SHA2-224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-256", + "saltLen": 32 + },{ + "hashAlg": "SHA2-384", + "saltLen": 48 + },{ + "hashAlg": "SHA2-512", + "saltLen": 64 + },{ + "hashAlg": "SHA2-512/224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-512/256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-224", + "saltLen": 28 + },{ + "hashAlg": "SHA3-256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-384", + "saltLen": 48 + },{ + "hashAlg": "SHA3-512", + "saltLen": 64 + }] + },{ + "modulo": 3072, + "maskFunction": ["mgf1"], + "hashPair": [{ + "hashAlg": "SHA2-224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-256", + "saltLen": 32 + },{ + "hashAlg": "SHA2-384", + "saltLen": 48 + },{ + "hashAlg": "SHA2-512", + "saltLen": 64 + },{ + "hashAlg": "SHA2-512/224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-512/256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-224", + "saltLen": 28 + },{ + "hashAlg": "SHA3-256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-384", + "saltLen": 48 + },{ + "hashAlg": "SHA3-512", + "saltLen": 64 + }] + },{ + "modulo": 4096, + "maskFunction": ["mgf1"], + "hashPair": [{ + "hashAlg": "SHA2-224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-256", + "saltLen": 32 + },{ + "hashAlg": "SHA2-384", + "saltLen": 48 + },{ + "hashAlg": "SHA2-512", + "saltLen": 64 + },{ + "hashAlg": "SHA2-512/224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-512/256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-224", + "saltLen": 28 + },{ + "hashAlg": "SHA3-256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-384", + "saltLen": 48 + },{ + "hashAlg": "SHA3-512", + "saltLen": 64 + }] }] - }] }] },)" R"({ @@ -862,256 +863,270 @@ static bool GetConfig(const Span args[], "pubExpMode": "fixed", "fixedPubExp": "010001", "capabilities": [{ - "sigType": "pkcs1v1.5", - "properties": [{ - "modulo": 1024, - "hashPair": [{ - "hashAlg": "SHA-1" - }] - }, { - "modulo": 2048, - "hashPair": [{ - "hashAlg": "SHA-1" - }] - }, { - "modulo": 3072, - "hashPair": [{ - "hashAlg": "SHA-1" - }] - }, { - "modulo": 4096, - "hashPair": [{ - "hashAlg": "SHA-1" - }] - }] - },{ - "sigType": "pss", - "properties": [{ - "modulo": 1024, - "hashPair": [{ - "hashAlg": "SHA-1", - "saltLen": 20 - }] - }, { - "modulo": 2048, - "hashPair": [{ - "hashAlg": "SHA-1", - "saltLen": 20 + "sigType": "pkcs1v1.5", + "properties": [{ + "modulo": 1024, + "hashPair": [{ + "hashAlg": "SHA-1" + },{ + "hashAlg": "SHA2-224" + },{ + "hashAlg": "SHA2-256" + },{ + "hashAlg": "SHA2-384" + },{ + "hashAlg": "SHA2-512" + },{ + "hashAlg": "SHA2-512/224" + },{ + "hashAlg": "SHA2-512/256" + }] + },{ + "modulo": 2048, + "hashPair": [{ + "hashAlg": "SHA-1" + }] + },{ + "modulo": 3072, + "hashPair": [{ + "hashAlg": "SHA-1" + }] + },{ + "modulo": 4096, + "hashPair": [{ + "hashAlg": "SHA-1" + }] }] - }, { - "modulo": 3072, - "hashPair": [{ - "hashAlg": "SHA-1", - "saltLen": 20 - }] - }, { - "modulo": 4096, - "hashPair": [{ - "hashAlg": "SHA-1", - "saltLen": 20 + },{ + "sigType": "pss", + "properties": [{ + "modulo": 1024, + "hashPair": [{ + "hashAlg": "SHA-1", + "saltLen": 20 + },{ + "hashAlg": "SHA2-224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-256", + "saltLen": 32 + },{ + "hashAlg": "SHA2-384", + "saltLen": 48 + },{ + "hashAlg": "SHA2-512/224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-512/256", + "saltLen": 32 + }] + },{ + "modulo": 2048, + "hashPair": [{ + "hashAlg": "SHA-1", + "saltLen": 20 + }] + },{ + "modulo": 3072, + "hashPair": [{ + "hashAlg": "SHA-1", + "saltLen": 20 + }] + },{ + "modulo": 4096, + "hashPair": [{ + "hashAlg": "SHA-1", + "saltLen": 20 + }] }] - }] }] - }, - { + },)" + R"({ "algorithm": "RSA", "mode": "sigVer", "revision": "FIPS186-5", "pubExpMode": "fixed", "fixedPubExp": "010001", "capabilities": [{ - "sigType": "pkcs1v1.5", - "properties": [{ - "modulo": 2048, - "hashPair": [{ - "hashAlg": "SHA2-224" - }, { - "hashAlg": "SHA2-256" - }, { - "hashAlg": "SHA2-384" - }, { - "hashAlg": "SHA2-512" - }, { - "hashAlg": "SHA2-512/224" - }, { - "hashAlg": "SHA2-512/256" - }, { - "hashAlg": "SHA3-224" - }, { - "hashAlg": "SHA3-256" - }, { - "hashAlg": "SHA3-384" - }, { - "hashAlg": "SHA3-512" - }] - }] - },{ - "sigType": "pkcs1v1.5", - "properties": [{ - "modulo": 3072, - "hashPair": [{ - "hashAlg": "SHA2-224" - }, { - "hashAlg": "SHA2-256" - }, { - "hashAlg": "SHA2-384" - }, { - "hashAlg": "SHA2-512" - }, { - "hashAlg": "SHA2-512/224" - }, { - "hashAlg": "SHA2-512/256" - }, { - "hashAlg": "SHA3-224" - }, { - "hashAlg": "SHA3-256" - }, { - "hashAlg": "SHA3-384" - }, { - "hashAlg": "SHA3-512" + "sigType": "pkcs1v1.5", + "properties": [{ + "modulo": 2048, + "hashPair": [{ + "hashAlg": "SHA2-224" + },{ + "hashAlg": "SHA2-256" + },{ + "hashAlg": "SHA2-384" + },{ + "hashAlg": "SHA2-512" + },{ + "hashAlg": "SHA2-512/224" + },{ + "hashAlg": "SHA2-512/256" + },{ + "hashAlg": "SHA3-224" + },{ + "hashAlg": "SHA3-256" + },{ + "hashAlg": "SHA3-384" + },{ + "hashAlg": "SHA3-512" + }] + },{ + "modulo": 3072, + "hashPair": [{ + "hashAlg": "SHA2-224" + },{ + "hashAlg": "SHA2-256" + },{ + "hashAlg": "SHA2-384" + },{ + "hashAlg": "SHA2-512" + },{ + "hashAlg": "SHA2-512/224" + },{ + "hashAlg": "SHA2-512/256" + },{ + "hashAlg": "SHA3-224" + },{ + "hashAlg": "SHA3-256" + },{ + "hashAlg": "SHA3-384" + },{ + "hashAlg": "SHA3-512" + }] + },{ + "modulo": 4096, + "hashPair": [{ + "hashAlg": "SHA2-224" + },{ + "hashAlg": "SHA2-256" + },{ + "hashAlg": "SHA2-384" + },{ + "hashAlg": "SHA2-512" + },{ + "hashAlg": "SHA2-512/224" + },{ + "hashAlg": "SHA2-512/256" + },{ + "hashAlg": "SHA3-224" + },{ + "hashAlg": "SHA3-256" + },{ + "hashAlg": "SHA3-384" + },{ + "hashAlg": "SHA3-512" + }] }] - }] - },{ - "sigType": "pkcs1v1.5", - "properties": [{ - "modulo": 4096, - "hashPair": [{ - "hashAlg": "SHA2-224" - }, { - "hashAlg": "SHA2-256" - }, { - "hashAlg": "SHA2-384" - }, { - "hashAlg": "SHA2-512" - }, { - "hashAlg": "SHA2-512/224" - }, { - "hashAlg": "SHA2-512/256" - }, { - "hashAlg": "SHA3-224" - }, { - "hashAlg": "SHA3-256" - }, { - "hashAlg": "SHA3-384" - }, { - "hashAlg": "SHA3-512" - }] - }] - },)" - R"({ - "sigType": "pss", - "properties": [{ - "modulo": 2048, - "maskFunction": ["mgf1"], - "hashPair": [{ - "hashAlg": "SHA2-224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-256", - "saltLen": 32 - }, { - "hashAlg": "SHA2-384", - "saltLen": 48 - }, { - "hashAlg": "SHA2-512", - "saltLen": 64 - }, { - "hashAlg": "SHA2-512/224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-512/256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-224", - "saltLen": 28 - }, { - "hashAlg": "SHA3-256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-384", - "saltLen": 48 - }, { - "hashAlg": "SHA3-512", - "saltLen": 64 - }] - }] - },{ - "sigType": "pss", - "properties": [{ - "modulo": 3072, - "maskFunction": ["mgf1"], - "hashPair": [{ - "hashAlg": "SHA2-224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-256", - "saltLen": 32 - }, { - "hashAlg": "SHA2-384", - "saltLen": 48 - }, { - "hashAlg": "SHA2-512", - "saltLen": 64 - }, { - "hashAlg": "SHA2-512/224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-512/256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-224", - "saltLen": 28 - }, { - "hashAlg": "SHA3-256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-384", - "saltLen": 48 - }, { - "hashAlg": "SHA3-512", - "saltLen": 64 - }] - }] - },{ - "sigType": "pss", - "properties": [{ - "modulo": 4096, - "maskFunction": ["mgf1"], - "hashPair": [{ - "hashAlg": "SHA2-224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-256", - "saltLen": 32 - }, { - "hashAlg": "SHA2-384", - "saltLen": 48 - }, { - "hashAlg": "SHA2-512", - "saltLen": 64 - }, { - "hashAlg": "SHA2-512/224", - "saltLen": 28 - }, { - "hashAlg": "SHA2-512/256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-224", - "saltLen": 28 - }, { - "hashAlg": "SHA3-256", - "saltLen": 32 - }, { - "hashAlg": "SHA3-384", - "saltLen": 48 - }, { - "hashAlg": "SHA3-512", - "saltLen": 64 + },{ + "sigType": "pss", + "properties": [{ + "modulo": 2048, + "maskFunction": ["mgf1"], + "hashPair": [{ + "hashAlg": "SHA2-224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-256", + "saltLen": 32 + },{ + "hashAlg": "SHA2-384", + "saltLen": 48 + },{ + "hashAlg": "SHA2-512", + "saltLen": 64 + },{ + "hashAlg": "SHA2-512/224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-512/256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-224", + "saltLen": 28 + },{ + "hashAlg": "SHA3-256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-384", + "saltLen": 48 + },{ + "hashAlg": "SHA3-512", + "saltLen": 64 + }] + },{ + "modulo": 3072, + "maskFunction": ["mgf1"], + "hashPair": [{ + "hashAlg": "SHA2-224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-256", + "saltLen": 32 + },{ + "hashAlg": "SHA2-384", + "saltLen": 48 + },{ + "hashAlg": "SHA2-512", + "saltLen": 64 + },{ + "hashAlg": "SHA2-512/224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-512/256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-224", + "saltLen": 28 + },{ + "hashAlg": "SHA3-256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-384", + "saltLen": 48 + },{ + "hashAlg": "SHA3-512", + "saltLen": 64 + }] + },{ + "modulo": 4096, + "maskFunction": ["mgf1"], + "hashPair": [{ + "hashAlg": "SHA2-224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-256", + "saltLen": 32 + },{ + "hashAlg": "SHA2-384", + "saltLen": 48 + },{ + "hashAlg": "SHA2-512", + "saltLen": 64 + },{ + "hashAlg": "SHA2-512/224", + "saltLen": 28 + },{ + "hashAlg": "SHA2-512/256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-224", + "saltLen": 28 + },{ + "hashAlg": "SHA3-256", + "saltLen": 32 + },{ + "hashAlg": "SHA3-384", + "saltLen": 48 + },{ + "hashAlg": "SHA3-512", + "saltLen": 64 + }] }] - }] }] - }, - { + },)" + R"({ "algorithm": "CMAC-AES", "acvptoolTestOnly": true, "revision": "1.0", From 307898a9f4d2e44c75a2119bdf4145d817fb9c24 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Thu, 12 Sep 2024 00:40:46 +0000 Subject: [PATCH 09/10] Add ED25519 ACVP Testing (#1818) By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/fipsmodule/curve25519/curve25519.c | 7 + .../fipsmodule/curve25519/curve25519_nohw.c | 8 + .../curve25519/curve25519_s2n_bignum_asm.c | 8 + crypto/fipsmodule/curve25519/internal.h | 5 + .../acvp/acvptool/subprocess/eddsa.go | 308 ++++++++++++++++++ .../acvp/acvptool/subprocess/subprocess.go | 1 + .../acvp/acvptool/test/expected/EDDSA.bz2 | Bin 0 -> 281 bytes util/fipstools/acvp/acvptool/test/tests.json | 5 +- .../acvptool/test/vectors/EDDSA-KeyGen.bz2 | Bin 0 -> 287 bytes .../acvptool/test/vectors/EDDSA-SigGen.bz2 | Bin 0 -> 513 bytes .../acvp/acvptool/test/vectors/EDDSA.bz2 | Bin 0 -> 687 bytes .../acvp/modulewrapper/modulewrapper.cc | 95 +++++- 12 files changed, 433 insertions(+), 4 deletions(-) create mode 100644 util/fipstools/acvp/acvptool/subprocess/eddsa.go create mode 100644 util/fipstools/acvp/acvptool/test/expected/EDDSA.bz2 create mode 100644 util/fipstools/acvp/acvptool/test/vectors/EDDSA-KeyGen.bz2 create mode 100644 util/fipstools/acvp/acvptool/test/vectors/EDDSA-SigGen.bz2 create mode 100644 util/fipstools/acvp/acvptool/test/vectors/EDDSA.bz2 diff --git a/crypto/fipsmodule/curve25519/curve25519.c b/crypto/fipsmodule/curve25519/curve25519.c index 5717984a61..50aa6cdeb3 100644 --- a/crypto/fipsmodule/curve25519/curve25519.c +++ b/crypto/fipsmodule/curve25519/curve25519.c @@ -224,6 +224,13 @@ int ED25519_verify(const uint8_t *message, size_t message_len, return res; } +int ED25519_check_public_key(const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]) { +#if defined(CURVE25519_S2N_BIGNUM_CAPABLE) + return ed25519_check_public_key_s2n_bignum(public_key); +#else + return ed25519_check_public_key_nohw(public_key); +#endif +} void X25519_public_from_private( uint8_t out_public_value[X25519_PUBLIC_VALUE_LEN], diff --git a/crypto/fipsmodule/curve25519/curve25519_nohw.c b/crypto/fipsmodule/curve25519/curve25519_nohw.c index 32d946f5c4..d51c94c261 100644 --- a/crypto/fipsmodule/curve25519/curve25519_nohw.c +++ b/crypto/fipsmodule/curve25519/curve25519_nohw.c @@ -2043,3 +2043,11 @@ int ed25519_verify_nohw(uint8_t R_computed_encoded[32], return 1; } + +int ed25519_check_public_key_nohw(const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]) { + ge_p3 A; + if (!x25519_ge_frombytes_vartime(&A, public_key)) { + return 0; + } + return 1; +} diff --git a/crypto/fipsmodule/curve25519/curve25519_s2n_bignum_asm.c b/crypto/fipsmodule/curve25519/curve25519_s2n_bignum_asm.c index 59be5df878..50e52f02c1 100644 --- a/crypto/fipsmodule/curve25519/curve25519_s2n_bignum_asm.c +++ b/crypto/fipsmodule/curve25519/curve25519_s2n_bignum_asm.c @@ -120,4 +120,12 @@ int ed25519_verify_s2n_bignum(uint8_t R_computed_encoded[32], return 1; } +int ed25519_check_public_key_s2n_bignum(const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]) { + uint64_t A[8] = {0}; + if (edwards25519_decode_selector(A, public_key) != 0) { + return 0; + } + return 1; +} + #endif diff --git a/crypto/fipsmodule/curve25519/internal.h b/crypto/fipsmodule/curve25519/internal.h index 0f1010d7b4..ebedea9c81 100644 --- a/crypto/fipsmodule/curve25519/internal.h +++ b/crypto/fipsmodule/curve25519/internal.h @@ -185,6 +185,11 @@ void ed25519_sha512(uint8_t out[SHA512_DIGEST_LENGTH], const void *input1, size_t len1, const void *input2, size_t len2, const void *input3, size_t len3); + +int ed25519_check_public_key_s2n_bignum(const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]); +int ed25519_check_public_key_nohw(const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]); +OPENSSL_EXPORT int ED25519_check_public_key(const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]); + #if defined(__cplusplus) } // extern C #endif diff --git a/util/fipstools/acvp/acvptool/subprocess/eddsa.go b/util/fipstools/acvp/acvptool/subprocess/eddsa.go new file mode 100644 index 0000000000..2f8698b73f --- /dev/null +++ b/util/fipstools/acvp/acvptool/subprocess/eddsa.go @@ -0,0 +1,308 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 OR ISC + +package subprocess + +import ( + "encoding/json" + "fmt" + "strings" +) + +// NIST ACVP EDDSA Schema: https://pages.nist.gov/ACVP/draft-celi-acvp-eddsa.html +type eddsa struct{} + +func (e *eddsa) Process(vectorSet []byte, m Transactable) (interface{}, error) { + var vs struct { + Mode string `json:"mode"` + TestGroups json.RawMessage `json:"testGroups"` + } + + if err := json.Unmarshal(vectorSet, &vs); err != nil { + return nil, err + } + + var processTestGroups func(json.RawMessage, Transactable) (interface{}, error) + + switch { + case strings.EqualFold(vs.Mode, "keyGen"): + processTestGroups = processEddsaKeyGenTestGroup + case strings.EqualFold(vs.Mode, "keyVer"): + processTestGroups = processEddsaKeyVerTestGroup + case strings.EqualFold(vs.Mode, "sigGen"): + processTestGroups = processEddsaSigGenTestGroup + case strings.EqualFold(vs.Mode, "sigVer"): + processTestGroups = processEddsaSigVerTestGroup + default: + return nil, fmt.Errorf("unsupported EDDSA mode %q", vs.Mode) + } + + return processTestGroups(vs.TestGroups, m) +} + +func processEddsaKeyGenTestGroup(testGroups json.RawMessage, m Transactable) (interface{}, error) { + var groups []eddsaKeyGenTestGroup + if err := json.Unmarshal(testGroups, &groups); err != nil { + return nil, err + } + + var ret []eddsaKeyGenTestGroupResponse + + for _, group := range groups { + response := eddsaKeyGenTestGroupResponse{ + ID: group.ID, + } + + if group.Type != "AFT" { + return nil, fmt.Errorf("unsupported test type %q", group.Type) + } + + for _, test := range group.Tests { + result, err := m.Transact("EDDSA/"+string(group.Curve)+"/keyGen", 2) + if err != nil { + return nil, err + } + + response.Tests = append(response.Tests, eddsaKeyGenTestCaseResponse{ + ID: test.ID, + D: result[0], + Q: result[1], + }) + } + + ret = append(ret, response) + } + + return ret, nil +} + +func processEddsaKeyVerTestGroup(testGroups json.RawMessage, m Transactable) (interface{}, error) { + var groups []eddsaKeyVerTestGroup + if err := json.Unmarshal(testGroups, &groups); err != nil { + return nil, err + } + + var ret []eddsaKeyVerTestGroupResponse + + for _, group := range groups { + if group.Type != "AFT" { + return nil, fmt.Errorf("unsupported test type %q", group.Type) + } + + response := eddsaKeyVerTestGroupResponse{ + ID: group.ID, + } + + for _, test := range group.Tests { + results, err := m.Transact("EDDSA/"+string(group.Curve)+"/keyVer", 1, test.Q) + if err != nil { + return nil, err + } + + var passed *bool + if len(results[0]) == 1 { + val := results[0][0] == 1 + passed = &val + } + + response.Tests = append(response.Tests, eddsaKeyVerTestCaseResponse{ + ID: test.ID, + Passed: passed, + }) + } + + ret = append(ret, response) + } + + return ret, nil +} + +func processEddsaSigGenTestGroup(testGroups json.RawMessage, m Transactable) (interface{}, error) { + var groups []eddsaSigGenTestGroup + if err := json.Unmarshal(testGroups, &groups); err != nil { + return nil, err + } + + var ret []eddsaSigGenTestGroupResponse + + for _, group := range groups { + if group.Type != "AFT" && group.Type != "BFT" { + return nil, fmt.Errorf("unsupported test type %q", group.Type) + } + + results, err := m.Transact("EDDSA/"+string(group.Curve)+"/keyGen", 2) + if err != nil { + return nil, err + } + + seed := results[0] + + response := eddsaSigGenTestGroupResponse{ + ID: group.ID, + Q: results[1], + } + + for _, test := range group.Tests { + results, err := m.Transact("EDDSA/"+string(group.Curve)+"/sigGen", 1, seed, test.Message) + if err != nil { + return nil, err + } + + response.Tests = append(response.Tests, eddsaSigGenTestCaseResponse{ + ID: test.ID, + Signature: results[0], + }) + } + + ret = append(ret, response) + } + + return ret, nil +} + +func processEddsaSigVerTestGroup(testGroups json.RawMessage, m Transactable) (interface{}, error) { + var groups []eddsaSigVerTestGroup + if err := json.Unmarshal(testGroups, &groups); err != nil { + return nil, err + } + + var ret []eddsaSigVerTestGroupResponse + + for _, group := range groups { + if group.Type != "AFT" { + return nil, fmt.Errorf("unsupported test type %q", group.Type) + } + + response := eddsaSigVerTestGroupResponse{ + ID: group.ID, + } + + for _, test := range group.Tests { + results, err := m.Transact("EDDSA/"+string(group.Curve)+"/sigVer", 1, test.Message, test.Q, test.Signature) + if err != nil { + return nil, err + } + + var passed *bool + if len(results[0]) == 1 { + val := results[0][0] == 1 + passed = &val + } + + response.Tests = append(response.Tests, eddsaSigVerTestCaseResponse{ + ID: test.ID, + Passed: passed, + }) + } + + ret = append(ret, response) + } + + return ret, nil +} + +const Ed25519 EDDSACurve = "ED-25519" + +type EDDSACurve string + +func (e *EDDSACurve) UnmarshalJSON(v []byte) error { + var str string + + if err := json.Unmarshal(v, &str); err != nil { + return err + } + + switch { + case strings.EqualFold(str, "ED-25519"): + *e = Ed25519 + default: + return fmt.Errorf("unsupported EDDSA curve: %q", str) + } + + return nil +} + +type eddsaKeyGenTestGroup struct { + ID uint64 `json:"tgId"` + Curve EDDSACurve `json:"curve"` + Type string `json:"testType"` + Tests []struct { + ID uint64 `json:"tcId"` + } +} + +type eddsaKeyVerTestGroup struct { + ID uint64 `json:"tgId"` + Curve EDDSACurve `json:"curve"` + Type string `json:"testType"` + Tests []struct { + ID uint64 `json:"tcId"` + Q hexEncodedByteString `json:"q"` + } +} + +type eddsaSigGenTestGroup struct { + ID uint64 `json:"tgId"` + Curve EDDSACurve `json:"curve"` + Prehash bool `json:"prehash"` + Type string `json:"testType"` + Tests []struct { + ID uint64 `json:"tcId"` + Message hexEncodedByteString `json:"message"` + } +} + +type eddsaSigVerTestGroup struct { + ID uint64 `json:"tgId"` + Curve EDDSACurve `json:"curve"` + Prehash bool `json:"prehash"` + Type string `json:"testType"` + Tests []struct { + ID uint64 `json:"tcId"` + Message hexEncodedByteString `json:"message"` + Q hexEncodedByteString `json:"q"` + Signature hexEncodedByteString `json:"signature"` + } +} + +type eddsaKeyGenTestGroupResponse struct { + ID uint64 `json:"tgId"` + Tests []eddsaKeyGenTestCaseResponse `json:"tests"` +} + +type eddsaKeyGenTestCaseResponse struct { + ID uint64 `json:"tcId"` + D hexEncodedByteString `json:"d"` + Q hexEncodedByteString `json:"q"` +} + +type eddsaKeyVerTestGroupResponse struct { + ID uint64 `json:"tgId"` + Tests []eddsaKeyVerTestCaseResponse `json:"tests"` +} + +type eddsaKeyVerTestCaseResponse struct { + ID uint64 `json:"tcId"` + Passed *bool `json:"testPassed"` +} + +type eddsaSigGenTestGroupResponse struct { + ID uint64 `json:"tgId"` + Q hexEncodedByteString `json:"q"` + Tests []eddsaSigGenTestCaseResponse `json:"tests"` +} + +type eddsaSigGenTestCaseResponse struct { + ID uint64 `json:"tcId"` + Signature hexEncodedByteString `json:"signature"` +} + +type eddsaSigVerTestGroupResponse struct { + ID uint64 `json:"tgId"` + Tests []eddsaSigVerTestCaseResponse `json:"tests"` +} + +type eddsaSigVerTestCaseResponse struct { + ID uint64 `json:"tcId"` + Passed *bool `json:"testPassed"` +} diff --git a/util/fipstools/acvp/acvptool/subprocess/subprocess.go b/util/fipstools/acvp/acvptool/subprocess/subprocess.go index 2f21c70723..dc60c3050a 100644 --- a/util/fipstools/acvp/acvptool/subprocess/subprocess.go +++ b/util/fipstools/acvp/acvptool/subprocess/subprocess.go @@ -154,6 +154,7 @@ func NewWithIO(cmd *exec.Cmd, in io.WriteCloser, out io.ReadCloser) *Subprocess "KAS-FFC-SSC": &kasDH{}, "PBKDF": &pbkdf{}, "ML-KEM": &mlKem{}, + "EDDSA": &eddsa{}, } m.primitives["ECDSA"] = &ecdsa{"ECDSA", map[string]bool{"P-224": true, "P-256": true, "P-384": true, "P-521": true}, m.primitives} diff --git a/util/fipstools/acvp/acvptool/test/expected/EDDSA.bz2 b/util/fipstools/acvp/acvptool/test/expected/EDDSA.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..954e023b5139856fe589b005522004f54e943beb GIT binary patch literal 281 zcmV+!0p|WfT4*^jL0KkKSxl;b)c^p@|A0hPKmbq%{_rNCP8u)g-wH4R8Bh`_Q`t<7 zPgB&%wHjuoMol!(Z71nN05s8{(+~gv41fxxnrSkb4^u-Sh|>tu5E(2H$#POI=JlMK zl_;%S*)?h}$8dyngT@5>n)6`2ZZ0l6k^2cL9n7gD$W;u6GxIiIsD|3nB1;9Jq`Lje z(-jd_%gR2j(^f^YJ&!R_C6Qep)ClGI4du_T8%mGUYKRV4+8u+9nzJB8wy fT0cb+CvilRWK<5M@G%(8%luu*6yZWaGO7Pm(!zVr literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/acvptool/test/tests.json b/util/fipstools/acvp/acvptool/test/tests.json index 06ab78558e..a011e2b388 100644 --- a/util/fipstools/acvp/acvptool/test/tests.json +++ b/util/fipstools/acvp/acvptool/test/tests.json @@ -34,5 +34,8 @@ {"Wrapper": "modulewrapper", "In": "vectors/PBKDF.bz2", "Out": "expected/PBKDF.bz2"}, {"Wrapper": "modulewrapper", "In": "vectors/KDA-HKDF.bz2", "Out": "expected/KDA-HKDF.bz2"}, {"Wrapper": "modulewrapper", "In": "vectors/KDA-OneStep.bz2", "Out": "expected/KDA-OneStep.bz2"}, -{"Wrapper": "modulewrapper", "In": "vectors/ML-KEM.bz2", "Out": "expected/ML-KEM.bz2"} +{"Wrapper": "modulewrapper", "In": "vectors/ML-KEM.bz2", "Out": "expected/ML-KEM.bz2"}, +{"Wrapper": "modulewrapper", "In": "vectors/EDDSA.bz2", "Out": "expected/EDDSA.bz2"}, +{"Wrapper": "modulewrapper", "In": "vectors/EDDSA-KeyGen.bz2"}, +{"Wrapper": "modulewrapper", "In": "vectors/EDDSA-SigGen.bz2"} ] diff --git a/util/fipstools/acvp/acvptool/test/vectors/EDDSA-KeyGen.bz2 b/util/fipstools/acvp/acvptool/test/vectors/EDDSA-KeyGen.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..66c8536078ad093b0004823096498997e52bf9e3 GIT binary patch literal 287 zcmV+)0pR{ZT4*^jL0KkKS)~D<-2ecgUw~CmPzV0-C!h`*F7MweFaY_pVWMgcLF#Gg z8X5rg0qO(P9#CqVB-7N5GBhy^OqeEvCYk{xlTAjN4Kx}68UQo^fRXkS9GO&n?O zo$rc@NJtD8krMsf0&{pge^A#%{rB zwQdRQK%)K*==mV{z`_PBl2T(SRJs&*s#Ik>)wG*Bl+7fjcu!oFo%;2NuFVnPmf1Nn lObuk9WcJc#gdx_(AX$@Z23^o)`AQ-DUC9*TLPC@Vdvv2(ef|Id literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/acvptool/test/vectors/EDDSA-SigGen.bz2 b/util/fipstools/acvp/acvptool/test/vectors/EDDSA-SigGen.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..98199ace179320f98ac34ad7e4d585fce6762d5c GIT binary patch literal 513 zcmV+c0{;C%T4*^jL0KkKSwWe$cmM%&-+)z6PzV3;Kj01;FX!JXKmpwD=q_;7)jXP> zrJXs+MCfq zrcD4e1}CTusSrWFK+L6&i1egK0t5;|1Ql0F4PEpoW|$<*92sOXRHfOAIR5 zkHElt66er2K#C(UtT_V|ND@e+2rz?an3nxlK}pNYrfGF9xHpGv2suwqopj<>4F5ol zBoq*IlUaos;jr~ORdzF+LAdX&S5t)W2eLIxxDzuZQX*sbG}P$c=u&Paf-)ACAmBl8 zpx;0cR~LhV+yyQT69XiS?2k3Ih{9Mo8bzrJm1|ThF26Z%uJ+wqD zZgmw1TP(5#kEG#zJV$Ytq~|4DK6kcpV4+E)OVW5+vmd D(b(BD literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/acvptool/test/vectors/EDDSA.bz2 b/util/fipstools/acvp/acvptool/test/vectors/EDDSA.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..4d32631402857ba14e368e898d299dcf438fd61a GIT binary patch literal 687 zcmV;g0#N-zT4*^jL0KkKS?aS1rvL&t-+)z6PzV3;Kj041UI&uPJY9uhTj5{Y7Gn%%UEh>emsrdO|se_h#dlyJ#@RlvgoKK^d^NU2ES-#^#F> z$n8~uG=wsFs__-6MlEuzSer(>sAdNEw-_DONXbb#9iwFE*Q$WTg}EH(oAeQb9qUAg z44Ra*CM1D^;1mpDJn`DuLv%R{<4}}Eq|4ibF)Nu&Ib9M7cj37aO2i`&Q(g3CLyhi;As1Fuy&SV;xF9Up zswfiL)0$bbRduZ9s@6U?!^<>;(~U+qk`#%kggq{@dR7M9m@MH9M{Uy-EcxFh1limK zLiWN>c&sZ*FT-V%n%zOpSHPl-;g7=qqnzACV$||U5pqBI+^B2Rs&$!fFtNV#=Uj@W z1A1-~^!2ZSmuc#I7ZyrO^rFRy11T3~iFIvBf+Gybu%w`N!cIGV6iGm^v6d1@z@koH zS_z6Q7|35xsw4a9VJw=uNRd?`GED%^m{A*A$V^OLw5+Om%j!fNyhT8N Vg8JZGFvG9$cO+AV2@b0;nsDexG8q5> literal 0 HcmV?d00001 diff --git a/util/fipstools/acvp/modulewrapper/modulewrapper.cc b/util/fipstools/acvp/modulewrapper/modulewrapper.cc index 6fe7c29d5e..9ccb38fc5a 100644 --- a/util/fipstools/acvp/modulewrapper/modulewrapper.cc +++ b/util/fipstools/acvp/modulewrapper/modulewrapper.cc @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,7 @@ #include "../../../../crypto/fipsmodule/ec/internal.h" #include "../../../../crypto/fipsmodule/hmac/internal.h" #include "../../../../crypto/fipsmodule/rand/internal.h" +#include "../../../../crypto/fipsmodule/curve25519/internal.h" #include "modulewrapper.h" @@ -1345,8 +1347,32 @@ static bool GetConfig(const Span args[], "revision": "FIPS203", "parameterSets": ["ML-KEM-512", "ML-KEM-768", "ML-KEM-1024"], "functions": ["encapsulation", "decapsulation"] - } - ])"; + },)" + R"({ + "algorithm": "EDDSA", + "mode": "keyGen", + "revision": "1.0", + "curve": ["ED-25519"] + },{ + "algorithm": "EDDSA", + "mode": "keyVer", + "revision": "1.0", + "curve": ["ED-25519"] + },{ + "algorithm": "EDDSA", + "mode": "sigGen", + "revision": "1.0", + "curve": ["ED-25519"], + "pure": true, + "preHash": false + },{ + "algorithm": "EDDSA", + "mode": "sigVer", + "revision": "1.0", + "curve": ["ED-25519"], + "pure": true, + "preHash": false + }])"; return write_reply({Span( reinterpret_cast(kConfig), sizeof(kConfig) - 1)}); } @@ -2982,6 +3008,66 @@ static bool ML_KEM_DECAP(const Span args[], {Span(shared_secret.data(), shared_secret_len)}); } +static bool ED25519KeyGen(const Span args[], + ReplyCallback write_reply) { + std::vector private_key(ED25519_PRIVATE_KEY_LEN); + std::vector public_key(ED25519_PUBLIC_KEY_LEN); + ::ED25519_keypair(public_key.data(), private_key.data()); + const Span seed(private_key.data(), ED25519_PRIVATE_KEY_SEED_LEN); + return write_reply({seed, Span(public_key)}); +} + +static bool ED25519KeyVer(const Span args[], + ReplyCallback write_reply) { + const Span public_key = args[0]; + + uint8_t reply[1] = {0}; + if (::ED25519_check_public_key(public_key.data())) { + reply[0] = 1; + } else { + ERR_clear_error(); + } + + return write_reply({Span(reply)}); +} + +static bool ED25519SigGen(const Span args[], + ReplyCallback write_reply) { + const Span seed = args[0]; + const Span message = args[1]; + + std::vector private_key(ED25519_PRIVATE_KEY_LEN); + std::vector public_key(ED25519_PUBLIC_KEY_LEN); + std::vector signature(ED25519_SIGNATURE_LEN); + + ::ED25519_keypair_from_seed(public_key.data(), private_key.data(), + seed.data()); + + if (!::ED25519_sign(signature.data(), message.data(), message.size(), + private_key.data())) { + return false; + } + + return write_reply({Span(signature)}); +} + +static bool ED25519SigVer(const Span args[], + ReplyCallback write_reply) { + const Span message = args[0]; + const Span public_key = args[1]; + const Span signature = args[2]; + + uint8_t reply[1] = {0}; + if (::ED25519_verify(message.data(), message.size(), signature.data(), + public_key.data())) { + reply[0] = 1; + } else { + ERR_clear_error(); + } + + return write_reply({Span(reply)}); +} + static struct { char name[kMaxNameLength + 1]; uint8_t num_expected_args; @@ -3225,7 +3311,10 @@ static struct { {"ML-KEM/ML-KEM-512/decap", 2, ML_KEM_DECAP}, {"ML-KEM/ML-KEM-768/decap", 2, ML_KEM_DECAP}, {"ML-KEM/ML-KEM-1024/decap", 2, ML_KEM_DECAP}, -}; + {"EDDSA/ED-25519/keyGen", 0, ED25519KeyGen}, + {"EDDSA/ED-25519/keyVer", 1, ED25519KeyVer}, + {"EDDSA/ED-25519/sigGen", 2, ED25519SigGen}, + {"EDDSA/ED-25519/sigVer", 3, ED25519SigVer}}; Handler FindHandler(Span> args) { const bssl::Span algorithm = args[0]; From 3c221518cc8f054209112f71b233c2404c5a8a3e Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Thu, 12 Sep 2024 01:09:52 +0000 Subject: [PATCH 10/10] Make EDDSA/Ed25519 POST lazy initalized (#1848) Makes the [previously added](https://github.com/aws/aws-lc/commit/17bb2f27443d975ef8af5f95f294ab1088e55f65) ED25519 POST to be lazy initialized. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license. --- crypto/fipsmodule/curve25519/curve25519.c | 18 ++++ crypto/fipsmodule/curve25519/internal.h | 8 ++ crypto/fipsmodule/self_check/self_check.c | 117 +++++++++++++--------- crypto/internal.h | 6 ++ 4 files changed, 102 insertions(+), 47 deletions(-) diff --git a/crypto/fipsmodule/curve25519/curve25519.c b/crypto/fipsmodule/curve25519/curve25519.c index 50aa6cdeb3..84b42661f2 100644 --- a/crypto/fipsmodule/curve25519/curve25519.c +++ b/crypto/fipsmodule/curve25519/curve25519.c @@ -72,6 +72,10 @@ void ed25519_sha512(uint8_t out[SHA512_DIGEST_LENGTH], void ED25519_keypair_from_seed(uint8_t out_public_key[ED25519_PUBLIC_KEY_LEN], uint8_t out_private_key[ED25519_PRIVATE_KEY_LEN], const uint8_t seed[ED25519_SEED_LEN]) { + // ED25519_keypair already ensures this with the same check, and is also the + // function that is approved for FIPS (sets the indicator). Ensuring it here + // for brevity. + boringssl_ensure_eddsa_self_test(); // Step: rfc8032 5.1.5.1 // Compute SHA512(seed). @@ -101,6 +105,7 @@ void ED25519_keypair_from_seed(uint8_t out_public_key[ED25519_PUBLIC_KEY_LEN], void ED25519_keypair(uint8_t out_public_key[ED25519_PUBLIC_KEY_LEN], uint8_t out_private_key[ED25519_PRIVATE_KEY_LEN]) { + boringssl_ensure_eddsa_self_test(); SET_DIT_AUTO_DISABLE; // Ed25519 key generation: rfc8032 5.1.5 @@ -119,6 +124,13 @@ void ED25519_keypair(uint8_t out_public_key[ED25519_PUBLIC_KEY_LEN], int ED25519_sign(uint8_t out_sig[ED25519_SIGNATURE_LEN], const uint8_t *message, size_t message_len, const uint8_t private_key[ED25519_PRIVATE_KEY_LEN]) { + boringssl_ensure_eddsa_self_test(); + return ED25519_sign_no_self_test(out_sig, message, message_len, private_key); +} + +int ED25519_sign_no_self_test(uint8_t out_sig[ED25519_SIGNATURE_LEN], + const uint8_t *message, size_t message_len, + const uint8_t private_key[ED25519_PRIVATE_KEY_LEN]) { // NOTE: The documentation on this function says that it returns zero on // allocation failure. While that can't happen with the current // implementation, we want to reserve the ability to allocate in this @@ -165,7 +177,13 @@ int ED25519_sign(uint8_t out_sig[ED25519_SIGNATURE_LEN], int ED25519_verify(const uint8_t *message, size_t message_len, const uint8_t signature[ED25519_SIGNATURE_LEN], const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]) { + boringssl_ensure_eddsa_self_test(); + return ED25519_verify_no_self_test(message, message_len, signature, public_key); +} +int ED25519_verify_no_self_test(const uint8_t *message, size_t message_len, + const uint8_t signature[ED25519_SIGNATURE_LEN], + const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]) { // Ed25519 verify: rfc8032 5.1.7 // Step: rfc8032 5.1.7.1 (up to decoding the public key) diff --git a/crypto/fipsmodule/curve25519/internal.h b/crypto/fipsmodule/curve25519/internal.h index ebedea9c81..159d6cb036 100644 --- a/crypto/fipsmodule/curve25519/internal.h +++ b/crypto/fipsmodule/curve25519/internal.h @@ -23,6 +23,14 @@ extern "C" { #include "../../internal.h" +int ED25519_sign_no_self_test(uint8_t out_sig[ED25519_SIGNATURE_LEN], + const uint8_t *message, size_t message_len, + const uint8_t private_key[ED25519_PRIVATE_KEY_LEN]); + +int ED25519_verify_no_self_test(const uint8_t *message, size_t message_len, + const uint8_t signature[ED25519_SIGNATURE_LEN], + const uint8_t public_key[ED25519_PUBLIC_KEY_LEN]); + // If (1) x86_64 or aarch64, (2) linux or apple, and (3) OPENSSL_NO_ASM is not // set, s2n-bignum path is capable. #if ((defined(OPENSSL_X86_64) && !defined(MY_ASSEMBLER_IS_TOO_OLD_FOR_512AVX)) || \ diff --git a/crypto/fipsmodule/self_check/self_check.c b/crypto/fipsmodule/self_check/self_check.c index a0e9218f74..a4b368bb2e 100644 --- a/crypto/fipsmodule/self_check/self_check.c +++ b/crypto/fipsmodule/self_check/self_check.c @@ -36,6 +36,7 @@ #include #include "../../internal.h" +#include "../curve25519/internal.h" #include "../dh/internal.h" #include "../ec/internal.h" #include "../ecdsa/internal.h" @@ -1470,6 +1471,61 @@ static int boringssl_self_test_ml_kem(void) { return ret; } +static int boringssl_self_test_eddsa(void) { + int ret = 0; + + const uint8_t kEd25519PrivateKey[ED25519_PRIVATE_KEY_SEED_LEN] = { + 0xb3, 0x99, 0x05, 0xbf, 0x43, 0x0b, 0x2a, 0xd2, 0x1d, 0xb6, 0x5d, + 0x49, 0xa6, 0xab, 0x03, 0xc1, 0x7d, 0xdb, 0x72, 0xe7, 0xa9, 0x8e, + 0xb9, 0x8f, 0xae, 0x59, 0x91, 0x7a, 0xe2, 0x5f, 0x92, 0x14}; + const uint8_t kEd25519PublicKey[ED25519_PUBLIC_KEY_LEN] = { + 0xe7, 0x75, 0xcf, 0x0e, 0x33, 0x48, 0x52, 0xa7, 0xe6, 0x99, 0xbe, + 0xba, 0x13, 0xbc, 0x24, 0xf8, 0x32, 0xf3, 0xc2, 0xa3, 0xa0, 0x3d, + 0xc9, 0x3c, 0x42, 0xb5, 0x92, 0x76, 0x15, 0xa5, 0x46, 0xba}; + const uint8_t kEd25519Signature[ED25519_SIGNATURE_LEN] = { + 0x30, 0x1a, 0x4c, 0x56, 0xe0, 0x37, 0x0b, 0x57, 0x2f, 0x7d, 0x8c, + 0x75, 0x1b, 0x5c, 0xfa, 0xb6, 0xc3, 0x98, 0x7c, 0x6f, 0x5d, 0xe8, + 0x7c, 0xac, 0x4d, 0x71, 0x16, 0x73, 0xda, 0x8c, 0xb2, 0x19, 0x86, + 0x03, 0xcd, 0x91, 0x82, 0x73, 0xa5, 0x34, 0x24, 0x93, 0xf1, 0xc1, + 0xad, 0x0e, 0x8a, 0x78, 0x45, 0x15, 0xa7, 0xfe, 0xc8, 0xc9, 0xbe, + 0xa2, 0xa3, 0xf1, 0xcf, 0x7b, 0x3a, 0x89, 0x10, 0x0f}; + const uint8_t kEd25519Message[128] = { + 0x13, 0x1d, 0x2a, 0xa9, 0x8f, 0x46, 0xfd, 0x5a, 0xca, 0xef, 0x8e, 0x92, + 0xfa, 0x8c, 0x50, 0xd4, 0x8b, 0xda, 0xdf, 0xfe, 0x13, 0xd7, 0x9c, 0xc7, + 0x1b, 0x95, 0x85, 0x5f, 0xaf, 0xa4, 0x84, 0x66, 0x50, 0x2a, 0x1c, 0x61, + 0x4d, 0xb7, 0x85, 0xfc, 0xc9, 0x4c, 0x50, 0x61, 0x65, 0x23, 0x93, 0x42, + 0xcb, 0x9b, 0x3e, 0xe6, 0x3b, 0x35, 0xdc, 0x2f, 0x7e, 0x78, 0x61, 0x15, + 0x42, 0xc7, 0xa6, 0x1b, 0x50, 0xf3, 0xb6, 0x8e, 0xcf, 0x1b, 0x70, 0xca, + 0xc0, 0x1b, 0x34, 0xef, 0x06, 0x1b, 0x3f, 0x7c, 0xaa, 0xc8, 0x26, 0x56, + 0xbf, 0xd5, 0x5a, 0x06, 0xb8, 0xeb, 0x7d, 0xbe, 0x82, 0x45, 0x17, 0xfe, + 0x3c, 0x56, 0x7d, 0xa5, 0xa0, 0x3e, 0x0b, 0xf2, 0xf1, 0xfe, 0xbb, 0x96, + 0x3c, 0x94, 0x1a, 0xfc, 0x36, 0xe4, 0x5a, 0x5a, 0xc5, 0xe2, 0x71, 0xcd, + 0x99, 0x56, 0xcc, 0xda, 0x0d, 0x62, 0xc8, 0x7c}; + uint8_t ed25519_private_key[ED25519_PRIVATE_KEY_LEN] = {0}; + OPENSSL_memcpy(ed25519_private_key, kEd25519PrivateKey, + ED25519_PRIVATE_KEY_SEED_LEN); + OPENSSL_memcpy(ed25519_private_key + ED25519_PRIVATE_KEY_SEED_LEN, + kEd25519PublicKey, ED25519_PUBLIC_KEY_LEN); + uint8_t ed25519_out_sig[ED25519_SIGNATURE_LEN] = {0}; + if (!ED25519_sign_no_self_test(&ed25519_out_sig[0], &kEd25519Message[0], + sizeof(kEd25519Message), + ed25519_private_key) || + !check_test(&kEd25519Signature[0], &ed25519_out_sig[0], + ED25519_SIGNATURE_LEN, "ED25519 sign")) { + fprintf(stderr, "ED25519 sign failed.\n"); + goto err; + } + if (!ED25519_verify_no_self_test(&kEd25519Message[0], sizeof(kEd25519Message), + ed25519_out_sig, kEd25519PublicKey)) { + fprintf(stderr, "ED25519 verify failed.\n"); + goto err; + } + + ret = 1; +err: + return ret; +} + #if defined(BORINGSSL_FIPS) static void run_self_test_rsa(void) { @@ -1520,6 +1576,18 @@ void boringssl_ensure_ml_kem_self_test(void) { CRYPTO_once(g_self_test_once_ml_kem_bss_get(), run_self_test_ml_kem); } +static void run_self_test_eddsa(void) { + if (!boringssl_self_test_eddsa()) { + BORINGSSL_FIPS_abort(); + } +} + +DEFINE_STATIC_ONCE(g_self_test_once_eddsa); + +void boringssl_ensure_eddsa_self_test(void) { + CRYPTO_once(g_self_test_once_eddsa_bss_get(), run_self_test_eddsa); +} + #endif // BORINGSSL_FIPS @@ -1937,52 +2005,6 @@ static int boringssl_self_test_fast(void) { goto err; } - const uint8_t kEd25519PrivateKey[ED25519_PRIVATE_KEY_SEED_LEN] = { - 0xb3, 0x99, 0x05, 0xbf, 0x43, 0x0b, 0x2a, 0xd2, 0x1d, 0xb6, 0x5d, - 0x49, 0xa6, 0xab, 0x03, 0xc1, 0x7d, 0xdb, 0x72, 0xe7, 0xa9, 0x8e, - 0xb9, 0x8f, 0xae, 0x59, 0x91, 0x7a, 0xe2, 0x5f, 0x92, 0x14}; - const uint8_t kEd25519PublicKey[ED25519_PUBLIC_KEY_LEN] = { - 0xe7, 0x75, 0xcf, 0x0e, 0x33, 0x48, 0x52, 0xa7, 0xe6, 0x99, 0xbe, - 0xba, 0x13, 0xbc, 0x24, 0xf8, 0x32, 0xf3, 0xc2, 0xa3, 0xa0, 0x3d, - 0xc9, 0x3c, 0x42, 0xb5, 0x92, 0x76, 0x15, 0xa5, 0x46, 0xba}; - const uint8_t kEd25519Signature[ED25519_SIGNATURE_LEN] = { - 0x30, 0x1a, 0x4c, 0x56, 0xe0, 0x37, 0x0b, 0x57, 0x2f, 0x7d, 0x8c, - 0x75, 0x1b, 0x5c, 0xfa, 0xb6, 0xc3, 0x98, 0x7c, 0x6f, 0x5d, 0xe8, - 0x7c, 0xac, 0x4d, 0x71, 0x16, 0x73, 0xda, 0x8c, 0xb2, 0x19, 0x86, - 0x03, 0xcd, 0x91, 0x82, 0x73, 0xa5, 0x34, 0x24, 0x93, 0xf1, 0xc1, - 0xad, 0x0e, 0x8a, 0x78, 0x45, 0x15, 0xa7, 0xfe, 0xc8, 0xc9, 0xbe, - 0xa2, 0xa3, 0xf1, 0xcf, 0x7b, 0x3a, 0x89, 0x10, 0x0f}; - const uint8_t kEd25519Message[128] = { - 0x13, 0x1d, 0x2a, 0xa9, 0x8f, 0x46, 0xfd, 0x5a, 0xca, 0xef, 0x8e, 0x92, - 0xfa, 0x8c, 0x50, 0xd4, 0x8b, 0xda, 0xdf, 0xfe, 0x13, 0xd7, 0x9c, 0xc7, - 0x1b, 0x95, 0x85, 0x5f, 0xaf, 0xa4, 0x84, 0x66, 0x50, 0x2a, 0x1c, 0x61, - 0x4d, 0xb7, 0x85, 0xfc, 0xc9, 0x4c, 0x50, 0x61, 0x65, 0x23, 0x93, 0x42, - 0xcb, 0x9b, 0x3e, 0xe6, 0x3b, 0x35, 0xdc, 0x2f, 0x7e, 0x78, 0x61, 0x15, - 0x42, 0xc7, 0xa6, 0x1b, 0x50, 0xf3, 0xb6, 0x8e, 0xcf, 0x1b, 0x70, 0xca, - 0xc0, 0x1b, 0x34, 0xef, 0x06, 0x1b, 0x3f, 0x7c, 0xaa, 0xc8, 0x26, 0x56, - 0xbf, 0xd5, 0x5a, 0x06, 0xb8, 0xeb, 0x7d, 0xbe, 0x82, 0x45, 0x17, 0xfe, - 0x3c, 0x56, 0x7d, 0xa5, 0xa0, 0x3e, 0x0b, 0xf2, 0xf1, 0xfe, 0xbb, 0x96, - 0x3c, 0x94, 0x1a, 0xfc, 0x36, 0xe4, 0x5a, 0x5a, 0xc5, 0xe2, 0x71, 0xcd, - 0x99, 0x56, 0xcc, 0xda, 0x0d, 0x62, 0xc8, 0x7c}; - uint8_t ed25519_private_key[ED25519_PRIVATE_KEY_LEN] = {0}; - OPENSSL_memcpy(ed25519_private_key, kEd25519PrivateKey, - ED25519_PRIVATE_KEY_SEED_LEN); - OPENSSL_memcpy(ed25519_private_key + ED25519_PRIVATE_KEY_SEED_LEN, - kEd25519PublicKey, ED25519_PUBLIC_KEY_LEN); - uint8_t ed25519_out_sig[ED25519_SIGNATURE_LEN] = {0}; - if (!ED25519_sign(&ed25519_out_sig[0], &kEd25519Message[0], - sizeof(kEd25519Message), ed25519_private_key) || - !check_test(&kEd25519Signature[0], &ed25519_out_sig[0], - ED25519_SIGNATURE_LEN, "ED25519 sign")) { - fprintf(stderr, "ED25519 sign failed.\n"); - goto err; - } - if (!ED25519_verify(&kEd25519Message[0], sizeof(kEd25519Message), - ed25519_out_sig, kEd25519PublicKey)) { - fprintf(stderr, "ED25519 verify failed.\n"); - goto err; - } - ret = 1; err: @@ -1997,7 +2019,8 @@ int BORINGSSL_self_test(void) { !boringssl_self_test_rsa() || !boringssl_self_test_ecc() || !boringssl_self_test_ffdh() || - !boringssl_self_test_ml_kem()) { + !boringssl_self_test_ml_kem() || + !boringssl_self_test_eddsa()) { return 0; } diff --git a/crypto/internal.h b/crypto/internal.h index 7f360e34ce..d45b13bff1 100644 --- a/crypto/internal.h +++ b/crypto/internal.h @@ -1301,6 +1301,11 @@ void boringssl_ensure_ffdh_self_test(void); // address space if unsuccessful. void boringssl_ensure_ml_kem_self_test(void); +// boringssl_ensure_eddsa_self_test checks whether the EDDSA self-test +// has been run in this address space. If not, it runs it and crashes the +// address space if unsuccessful. +void boringssl_ensure_eddsa_self_test(void); + #else // Outside of FIPS mode, the lazy tests are no-ops. @@ -1309,6 +1314,7 @@ OPENSSL_INLINE void boringssl_ensure_rsa_self_test(void) {} OPENSSL_INLINE void boringssl_ensure_ecc_self_test(void) {} OPENSSL_INLINE void boringssl_ensure_ffdh_self_test(void) {} OPENSSL_INLINE void boringssl_ensure_ml_kem_self_test(void) {} +OPENSSL_INLINE void boringssl_ensure_eddsa_self_test(void) {} #endif // FIPS