]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
ASN.1 format tagging seed, key now octet string
authorViktor Dukhovni <openssl-users@dukhovni.org>
Wed, 5 Feb 2025 05:30:15 +0000 (16:30 +1100)
committerTomas Mraz <tomas@openssl.org>
Fri, 14 Feb 2025 09:50:59 +0000 (10:50 +0100)
- The main ASN.1 private key syntax is the one from Russ Housley's post
  on the LAMPS list, subsequently amended to tag the seed instead of the
  key (each of the three parameter sets will have a fixed size for the
  `expandedKey`):

    ML-DSA-PrivateKey ::= CHOICE {
      seed [0] IMPLICIT OCTET STRING SIZE (64),
      expandedKey OCTET STRING SIZE (1632 | 2400 | 3168)
      both SEQUENCE {
        seed OCTET STRING SIZE (64),
        expandedKey OCTET STRING SIZE (1632 | 2400 | 3168) } }

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26639)

19 files changed:
doc/man7/EVP_PKEY-ML-KEM.pod
providers/implementations/encode_decode/ml_kem_codecs.c
providers/implementations/encode_decode/ml_kem_codecs.h
test/recipes/15-test_ml_kem_codecs.t
test/recipes/15-test_ml_kem_codecs_data/prv-1024-oqskeypair.pem [moved from test/recipes/15-test_ml_kem_codecs_data/prv-1024-pair-oqs.pem with 100% similarity]
test/recipes/15-test_ml_kem_codecs_data/prv-1024-priv-only.pem
test/recipes/15-test_ml_kem_codecs_data/prv-1024-priv-oqs.pem [deleted file]
test/recipes/15-test_ml_kem_codecs_data/prv-1024-seed-only.pem
test/recipes/15-test_ml_kem_codecs_data/prv-1024-seed-priv.pem
test/recipes/15-test_ml_kem_codecs_data/prv-512-oqskeypair.pem [moved from test/recipes/15-test_ml_kem_codecs_data/prv-512-pair-oqs.pem with 100% similarity]
test/recipes/15-test_ml_kem_codecs_data/prv-512-priv-only.pem
test/recipes/15-test_ml_kem_codecs_data/prv-512-priv-oqs.pem [deleted file]
test/recipes/15-test_ml_kem_codecs_data/prv-512-seed-only.pem
test/recipes/15-test_ml_kem_codecs_data/prv-512-seed-priv.pem
test/recipes/15-test_ml_kem_codecs_data/prv-768-oqskeypair.pem [moved from test/recipes/15-test_ml_kem_codecs_data/prv-768-pair-oqs.pem with 100% similarity]
test/recipes/15-test_ml_kem_codecs_data/prv-768-priv-only.pem
test/recipes/15-test_ml_kem_codecs_data/prv-768-priv-oqs.pem [deleted file]
test/recipes/15-test_ml_kem_codecs_data/prv-768-seed-only.pem
test/recipes/15-test_ml_kem_codecs_data/prv-768-seed-priv.pem

index ca690a53ca57d410c0cac3db08ab13a51e5da27a..f71a96a982271be9214bff271f24e5dc9b3acd0d 100644 (file)
@@ -169,21 +169,13 @@ decapsulation key B<dk> is present in the above sequence.
 If the C<priv-only> format is not included in the list, this format will not be
 recognised on input.
 
-=item C<priv-oqs>:
-
-This format represents B<PKCS#8> objects in which the private key is a DER
-encoding of an octet string containing the FIPS 203 decapsulation key B<dk>.
-This format is used in some builds of the C<oqsprovider>.
-If the C<priv-oqs> format is not included in the list, this format will not be
-recognised on input.
-
-=item C<pair-oqs>:
+=item C<oqskeypair>:
 
 This format represents B<PKCS#8> objects in which the private key is a DER
 encoding of an octet string containing the concatenaton of the FIPS 203
 decapsulation key B<dk> and the encapsulation key B<ek>.
 This encoding is used in some builds of the C<oqsprovider>.
-If the C<pair-oqs> format is not included in the list, this format will not be
+If the C<oqskeypair> format is not included in the list, this format will not be
 recognised on input.
 
 =item C<bare-seed>:
@@ -223,8 +215,8 @@ If C<seed-only> is listed first, then the seed will be output without the key
 when available, otherwise the output will have just the key.
 If C<priv-only> is listed first, then just the key is output regardless of
 whether the seed is present.
-The legacy C<oqs> and C<bare> formats can also be output, by listing those
-first.
+The legacy C<oqskeypair>, C<bare-seed> and C<bare-priv> formats can also be
+output, by listing those first.
 
 =back
 
index 9f46fed549539887eb35ce37b55f948e0121543b..21a95bae5619d43d75cb4392db5522ac58de8076 100644 (file)
  * For each parameter set we support a few PKCS#8 input formats, three
  * corresponding to the "either or both" variants of:
  *
- *  ML-KEM-PrivateKey ::= SEQUENCE {
- *    seed OCTET STRING SIZE (64) OPTIONAL,
- *    expandedKey [1] IMPLICIT OCTET STRING SIZE (1632 | 2400 | 3172) OPTIONAL }
- *   (WITH COMPONENTS {..., seed  PRESENT } |
- *    WITH COMPONENTS {..., expandedKey  PRESENT })
+ *  ML-KEM-PrivateKey ::= CHOICE {
+ *    seed [0] IMPLICIT OCTET STRING SIZE (64),
+ *    expandedKey OCTET STRING SIZE (1632 | 2400 | 3168)
+ *    both SEQUENCE {
+ *      seed OCTET STRING SIZE (64),
+ *      expandedKey OCTET STRING SIZE (1632 | 2400 | 3168) } }
  *
- * and two more for historical OQS encodings.
+ * one more for a historical OQS encoding:
  *
- * - OQS private key: OCTET STRING
  * - OQS private + public key: OCTET STRING
  *   (The public key is ignored, just as with PKCS#8 v2.)
  *
- * and two more that are "inspired" by the IETF non-ASN.1 seed encoding.
+ * and two more that are the minimal IETF non-ASN.1 seed encoding:
  *
  * - Bare seed (just the 64 bytes)
  * - Bare priv (just the key bytes)
  *
- * An offset of zero means that particular field is absent.
+ * A length of zero means that particular field is absent.
+ *
+ * The p8_shift is 0 when the top-level tag+length occupy four bytes, 2 when
+ * they occupy two by†es, and 4 when no tag is used at all.
  *
  * On output the PKCS8 info table order is important:
  * - When we have a seed we'll use the first entry with a non-zero seed offset.
  * - Otherwise, the first entry with a zero seed offset.
  *
  * As written, when possible, we prefer to output both the seed and private
- * key, otherwise, just the private key ([1] IMPLICIT OCTET STRING form).
+ * key, otherwise, just the private key.
  *
  * The various lengths in the PKCS#8 tag/len fields could have been left
  * zeroed, and filled in on the fly from the algorithm parameters, but that
  * into the tables.  Had they been zeroed, one table could cover all three
  * ML-KEM parameter sets.
  */
-#define NUM_PKCS8_FORMATS   7
+#define NUM_PKCS8_FORMATS   6
 
 /*-
  * ML-KEM-512:
  * Public key bytes:   800 (0x0320)
  * Private key bytes: 1632 (0x0660)
  */
-static const ML_KEM_SPKI_INFO ml_kem_512_spki_info = {
+static const ML_KEM_SPKI_FMT ml_kem_512_spkifmt = {
     { 0x30, 0x82, 0x03, 0x32, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48,
       0x01, 0x65, 0x03, 0x04, 0x04, 0x01, 0x03, 0x82, 0x03, 0x21, 0x00, }
 };
-static const ML_KEM_PKCS8_INFO ml_kem_512_pkcs8_info[] = {
-    { "seed-priv", 0x06aa, 0x308206a6, 0x0440, 6, 0x40, 0x81820660, 0x4a, 0x0660, 0x0000, 0x0000 },
-    { "priv-only", 0x0668, 0x30820664, 0,      0, 0x00, 0x81820660, 0x08, 0x0660, 0x0000, 0x0000 },
-    { "seed-only", 0x0044, 0x30420440, 0,      4, 0x40, 0,          0x00, 0x0000, 0x0000, 0x0000 },
-    { "priv-oqs",  0x0664, 0x04820660, 0,      0, 0x00, 0x04820660, 0x04, 0x0660, 0x0000, 0x0000 },
-    { "pair-oqs",  0x0984, 0x04820980, 0,      0, 0x00, 0x04820980, 0x04, 0x0660, 0x0664, 0x0320 },
-    { "bare-seed", 0x0040, 0,          0,      0, 0x40, 0,          0x00, 0x0000, 0x0000, 0x0000 },
-    { "bare-priv", 0x0660, 0,          0,      0, 0x00, 0,          0x00, 0x0660, 0x0000, 0x0000 },
+static const ML_KEM_PKCS8_FMT ml_kem_512_p8fmt[NUM_PKCS8_FORMATS] = {
+    { "seed-priv",  0x06aa, 0, 0x308206a6, 0x0440, 6, 0x40, 0x04820660, 0x4a, 0x0660, 0,      0      },
+    { "priv-only",  0x0664, 0, 0x04820660, 0,      0, 0,    0,          0x04, 0x0660, 0,      0      },
+    { "oqskeypair", 0x0984, 0, 0x04820980, 0,      0, 0,    0,          0x04, 0x0660, 0x0664, 0x0320 },
+    { "seed-only",  0x0042, 2, 0x8040,     0,      2, 0x40, 0,          0,    0,      0,      0      },
+    { "bare-priv",  0x0660, 4, 0,          0,      0, 0,    0,          0,    0x0660, 0,      0      },
+    { "bare-seed",  0x0040, 4, 0,          0,      0, 0x40, 0,          0,    0,      0,      0      },
 };
 
 /*-
@@ -78,18 +80,17 @@ static const ML_KEM_PKCS8_INFO ml_kem_512_pkcs8_info[] = {
  * Public key bytes:  1184 (0x04a0)
  * Private key bytes: 2400 (0x0960)
  */
-static const ML_KEM_SPKI_INFO ml_kem_768_spki_info = {
+static const ML_KEM_SPKI_FMT ml_kem_768_spkifmt = {
     { 0x30, 0x82, 0x04, 0xb2, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48,
       0x01, 0x65, 0x03, 0x04, 0x04, 0x02, 0x03, 0x82, 0x04, 0xa1, 0x00, }
 };
-static const ML_KEM_PKCS8_INFO ml_kem_768_pkcs8_info[] = {
-    { "seed-priv", 0x09aa, 0x308209a6, 0x0440, 6, 0x40, 0x81820960, 0x4a, 0x0960, 0x0000, 0x0000 },
-    { "priv-only", 0x0968, 0x30820964, 0,      0, 0x00, 0x81820960, 0x08, 0x0960, 0x0000, 0x0000 },
-    { "seed-only", 0x0044, 0x30420440, 0,      4, 0x40, 0,          0x00, 0x0000, 0x0000, 0x0000 },
-    { "priv-oqs",  0x0964, 0x04820960, 0,      0, 0x00, 0x04820960, 0x04, 0x0960, 0x0000, 0x0000 },
-    { "pair-oqs",  0x0e04, 0x04820e00, 0,      0, 0x00, 0x04820e00, 0x04, 0x0960, 0x0964, 0x04a0 },
-    { "bare-seed", 0x0040, 0,          0,      0, 0x40, 0,          0x00, 0x0000, 0x0000, 0x0000 },
-    { "bare-priv", 0x0960, 0,          0,      0, 0x00, 0,          0x00, 0x0960, 0x0000, 0x0000 },
+static const ML_KEM_PKCS8_FMT ml_kem_768_p8fmt[NUM_PKCS8_FORMATS] = {
+    { "seed-priv",  0x09aa, 0, 0x308209a6, 0x0440, 6, 0x40, 0x04820960, 0x4a, 0x0960, 0,      0,     },
+    { "priv-only",  0x0964, 0, 0x04820960, 0,      0, 0,    0,          0x04, 0x0960, 0,      0,     },
+    { "oqskeypair", 0x0e04, 0, 0x04820e00, 0,      0, 0,    0,          0x04, 0x0960, 0x0964, 0x04a0 },
+    { "seed-only",  0x0042, 2, 0x8040,     0,      2, 0x40, 0,          0,    0,      0,      0,     },
+    { "bare-priv",  0x0960, 4, 0,          0,      0, 0,    0,          0,    0x0960, 0,      0,     },
+    { "bare-seed",  0x0040, 4, 0,          0,      0, 0x40, 0,          0,    0,      0,      0,     },
 };
 
 /*-
@@ -97,18 +98,17 @@ static const ML_KEM_PKCS8_INFO ml_kem_768_pkcs8_info[] = {
  * Private key bytes: 3168 (0x0c60)
  * Public key bytes:  1568 (0x0620)
  */
-static const ML_KEM_SPKI_INFO ml_kem_1024_spki_info = {
+static const ML_KEM_SPKI_FMT ml_kem_1024_spkifmt = {
     { 0x30, 0x82, 0x06, 0x32, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48,
       0x01, 0x65, 0x03, 0x04, 0x04, 0x03, 0x03, 0x82, 0x06, 0x21, 0x00, }
 };
-static const ML_KEM_PKCS8_INFO ml_kem_1024_pkcs8_info[] = {
-    { "seed-priv", 0x0caa, 0x30820ca6, 0x0440, 6, 0x40, 0x81820c60, 0x4a, 0x0c60, 0x0000, 0x0000 },
-    { "priv-only", 0x0c68, 0x30820c64, 0,      0, 0x00, 0x81820c60, 0x08, 0x0c60, 0x0000, 0x0000 },
-    { "seed-only", 0x0044, 0x30420440, 0,      4, 0x40, 0,          0x00, 0x0000, 0x0000, 0x0000 },
-    { "priv-oqs",  0x0c64, 0x04820c60, 0,      0, 0x00, 0x04820c60, 0x04, 0x0c60, 0x0000, 0x0000 },
-    { "pair-oqs",  0x1284, 0x04821280, 0,      0, 0x00, 0x04821280, 0x04, 0x0c60, 0x0c64, 0x0620 },
-    { "bare-seed", 0x0040, 0,          0,      0, 0x40, 0,          0x00, 0x0000, 0x0000, 0x0000 },
-    { "bare-priv", 0x0c60, 0,          0,      0, 0x00, 0,          0x00, 0x0c60, 0x0000, 0x0000 },
+static const ML_KEM_PKCS8_FMT ml_kem_1024_p8fmt[NUM_PKCS8_FORMATS] = {
+    { "seed-priv",  0x0caa, 0, 0x30820ca6, 0x0440, 6, 0x40, 0x04820c60, 0x4a, 0x0c60, 0,      0      },
+    { "priv-only",  0x0c64, 0, 0x04820c60, 0,      0, 0,    0,          0x04, 0x0c60, 0,      0      },
+    { "oqskeypair", 0x1284, 0, 0x04821280, 0,      0, 0,    0,          0x04, 0x0c60, 0x0c64, 0x0620 },
+    { "seed-only",  0x0042, 2, 0x8040,     0,      2, 0x40, 0,          0,    0,      0,      0      },
+    { "bare-priv",  0x0c60, 4, 0,          0,      0, 0,    0,          0,    0x0c60, 0,      0      },
+    { "bare-seed",  0x0040, 4, 0,          0,      0, 0x40, 0,          0,    0,      0,      0      },
 };
 
 /* Indices of slots in the `codecs` table below */
@@ -120,9 +120,9 @@ static const ML_KEM_PKCS8_INFO ml_kem_1024_pkcs8_info[] = {
  * Per-variant fixed parameters
  */
 static const ML_KEM_CODEC codecs[3] = {
-    { &ml_kem_512_spki_info,  ml_kem_512_pkcs8_info },
-    { &ml_kem_768_spki_info,  ml_kem_768_pkcs8_info },
-    { &ml_kem_1024_spki_info, ml_kem_1024_pkcs8_info }
+    { &ml_kem_512_spkifmt,  ml_kem_512_p8fmt },
+    { &ml_kem_768_spkifmt,  ml_kem_768_p8fmt },
+    { &ml_kem_1024_spkifmt, ml_kem_1024_p8fmt }
 };
 
 /* Retrieve the parameters of one of the ML-KEM variants */
@@ -139,10 +139,10 @@ static const ML_KEM_CODEC *ml_kem_get_codec(int evp_type)
     return NULL;
 }
 
-static int vp8_pref_cmp(const void *va, const void *vb)
+static int pref_cmp(const void *va, const void *vb)
 {
-    const ML_KEM_PKCS8_PREF *a = va;
-    const ML_KEM_PKCS8_PREF *b = vb;
+    const ML_KEM_PKCS8_FMT_PREF *a = va;
+    const ML_KEM_PKCS8_FMT_PREF *b = vb;
 
     /*
      * Zeros sort last, otherwise the sort is in increasing order.
@@ -151,29 +151,30 @@ static int vp8_pref_cmp(const void *va, const void *vb)
      * as required by qsort(3).  When overflow or underflow is possible, the
      * correct transitive comparison would be: (b < a) - (a < b).
      */
-    if (a->vp8_pref > 0 && b->vp8_pref > 0)
-        return a->vp8_pref - b->vp8_pref;
+    if (a->pref > 0 && b->pref > 0)
+        return a->pref - b->pref;
     /* A preference of 0 is "larger" than (sorts after) any nonzero value. */
-    return b->vp8_pref - a->vp8_pref;
+    return b->pref - a->pref;
 }
 
-static ML_KEM_PKCS8_PREF *vp8_order(const char *algorithm_name,
-                                    const ML_KEM_PKCS8_INFO *pkcs8_info,
-                                    const char *direction, const char *formats)
+static
+ML_KEM_PKCS8_FMT_PREF *vp8_order(const char *algorithm_name,
+                                 const ML_KEM_PKCS8_FMT *p8fmt,
+                                 const char *direction, const char *formats)
 {
-    ML_KEM_PKCS8_PREF *ret;
+    ML_KEM_PKCS8_FMT_PREF *ret;
     int i, count = 0;
     const char *fmt = formats, *end;
     const char *sep = "\t ,";
 
-    /* Reserve an extra terminal slot with vp8_entry == NULL */
+    /* Reserve an extra terminal slot with fmt == NULL */
     if ((ret = OPENSSL_zalloc((NUM_PKCS8_FORMATS + 1) * sizeof(*ret))) == NULL)
         return NULL;
 
     /* Entries that match a format will get a non-zero preference. */
     for (i = 0; i < NUM_PKCS8_FORMATS; ++i) {
-        ret[i].vp8_entry = &pkcs8_info[i];
-        ret[i].vp8_pref = 0;
+        ret[i].fmt = &p8fmt[i];
+        ret[i].pref = 0;
     }
 
     /* Default to compile-time table order when none specified. */
@@ -190,12 +191,12 @@ static ML_KEM_PKCS8_PREF *vp8_order(const char *algorithm_name,
         end = fmt + strcspn(fmt, sep);
         for (i = 0; i < NUM_PKCS8_FORMATS; ++i) {
             /* Skip slots already selected or with a different name. */
-            if (ret[i].vp8_pref > 0
-                || OPENSSL_strncasecmp(ret[i].vp8_entry->p8_name,
+            if (ret[i].pref > 0
+                || OPENSSL_strncasecmp(ret[i].fmt->p8_name,
                                        fmt, (end - fmt)) != 0)
                 continue;
             /* First time match */
-            ret[i].vp8_pref = ++count;
+            ret[i].pref = ++count;
             break;
         }
         fmt = end;
@@ -210,9 +211,9 @@ static ML_KEM_PKCS8_PREF *vp8_order(const char *algorithm_name,
         return NULL;
     }
     /* Sort by preference, with 0's last */
-    qsort(ret, NUM_PKCS8_FORMATS, sizeof(*ret), vp8_pref_cmp);
+    qsort(ret, NUM_PKCS8_FORMATS, sizeof(*ret), pref_cmp);
     /* Terminate the list at first unselected entry, perhaps reserved slot. */
-    ret[count].vp8_entry = NULL;
+    ret[count].fmt = NULL;
     return ret;
 }
 
@@ -223,13 +224,13 @@ ossl_ml_kem_d2i_PUBKEY(const uint8_t *pubenc, int publen, int evp_type,
     OSSL_LIB_CTX *libctx = PROV_LIBCTX_OF(provctx);
     const ML_KEM_VINFO *v;
     const ML_KEM_CODEC *codec;
-    const ML_KEM_SPKI_INFO *vspki;
+    const ML_KEM_SPKI_FMT *vspki;
     ML_KEM_KEY *ret;
 
     if ((v = ossl_ml_kem_get_vinfo(evp_type)) == NULL
         || (codec = ml_kem_get_codec(evp_type)) == NULL)
         return NULL;
-    vspki = codec->spki_info;
+    vspki = codec->spkifmt;
     if (publen != ML_KEM_SPKI_OVERHEAD + (ossl_ssize_t) v->pubkey_bytes
         || memcmp(pubenc, vspki->asn1_prefix, ML_KEM_SPKI_OVERHEAD) != 0)
         return NULL;
@@ -258,15 +259,15 @@ ossl_ml_kem_d2i_PKCS8(const uint8_t *prvenc, int prvlen,
     OSSL_LIB_CTX *libctx = PROV_LIBCTX_OF(provctx);
     const ML_KEM_VINFO *v;
     const ML_KEM_CODEC *codec;
-    ML_KEM_PKCS8_PREF *vp8_alloc = NULL, *vp8_slot;
-    const ML_KEM_PKCS8_INFO *vp8;
+    ML_KEM_PKCS8_FMT_PREF *fmt_slots = NULL, *slot;
+    const ML_KEM_PKCS8_FMT *p8fmt;
     ML_KEM_KEY *key = NULL, *ret = NULL;
     PKCS8_PRIV_KEY_INFO *p8inf = NULL;
     const uint8_t *buf, *pos;
     const X509_ALGOR *alg = NULL;
     const char *formats;
     int len, ptype;
-    uint32_t magic, p8_magic;
+    uint32_t magic;
     uint16_t seed_magic;
 
     /* Which ML-KEM variant? */
@@ -287,9 +288,9 @@ ossl_ml_kem_d2i_PKCS8(const uint8_t *prvenc, int prvlen,
     /* Get the list of enabled decoders. Their order is not important here. */
     formats = ossl_prov_ctx_get_param(
         provctx, OSSL_PKEY_PARAM_ML_KEM_INPUT_FORMATS, NULL);
-    vp8_slot = vp8_alloc = vp8_order(v->algorithm_name, codec->pkcs8_info,
-                                     "input", formats);
-    if (vp8_alloc == NULL)
+    fmt_slots = vp8_order(v->algorithm_name, codec->p8fmt,
+                          "input", formats);
+    if (fmt_slots == NULL)
         goto end;
 
     /* Parameters must be absent. */
@@ -305,51 +306,49 @@ ossl_ml_kem_d2i_PKCS8(const uint8_t *prvenc, int prvlen,
 
     /* Find the matching p8 info slot, that also has the expected length. */
     pos = OPENSSL_load_u32_be(&magic, buf);
-    for (vp8_slot = vp8_alloc; vp8_slot->vp8_entry != NULL; ++vp8_slot) {
-        if (len != (ossl_ssize_t)vp8_slot->vp8_entry->p8_bytes)
+    for (slot = fmt_slots; (p8fmt = slot->fmt) != NULL; ++slot) {
+        if (len != (ossl_ssize_t)p8fmt->p8_bytes)
             continue;
-        /* p8_magic == 0, signals a non-ASN.1 length-based encoding */
-        if ((p8_magic = vp8_slot->vp8_entry->p8_magic) == 0) {
-            pos = buf;
+        if (p8fmt->p8_shift == sizeof(magic)
+            || (magic >> (p8fmt->p8_shift * 8)) == p8fmt->p8_magic) {
+            pos -= p8fmt->p8_shift;
             break;
         }
-        if (magic == p8_magic)
-            break;
     }
-    if ((vp8 = vp8_slot->vp8_entry) == NULL
-        || (vp8->seed_length > 0 && vp8->seed_length != ML_KEM_SEED_BYTES)
-        || (vp8->priv_length > 0 && vp8->priv_length != v->prvkey_bytes)
-        || (vp8->pub_length > 0 && vp8->pub_length != v->pubkey_bytes)) {
+    if (p8fmt == NULL
+        || (p8fmt->seed_length > 0 && p8fmt->seed_length != ML_KEM_SEED_BYTES)
+        || (p8fmt->priv_length > 0 && p8fmt->priv_length != v->prvkey_bytes)
+        || (p8fmt->pub_length > 0 && p8fmt->pub_length != v->pubkey_bytes)) {
         ERR_raise_data(ERR_LIB_PROV, PROV_R_ML_KEM_NO_FORMAT,
                        "no matching enabled %s private key input formats",
                        v->algorithm_name);
         goto end;
     }
 
-    if (vp8->seed_length > 0) {
+    if (p8fmt->seed_length > 0) {
         /* Check |seed| tag/len, if not subsumed by |magic|. */
-        if (pos + sizeof(uint16_t) == buf + vp8->seed_offset) {
+        if (pos + sizeof(uint16_t) == buf + p8fmt->seed_offset) {
             pos = OPENSSL_load_u16_be(&seed_magic, pos);
-            if (seed_magic != vp8->seed_magic)
+            if (seed_magic != p8fmt->seed_magic)
                 goto end;
-        } else if (pos != buf + vp8->seed_offset) {
+        } else if (pos != buf + p8fmt->seed_offset) {
             goto end;
         }
         pos += ML_KEM_SEED_BYTES;
     }
-    if (vp8->priv_length > 0) {
+    if (p8fmt->priv_length > 0) {
         /* Check |priv| tag/len */
-        if (pos + sizeof(uint32_t) == buf + vp8->priv_offset) {
+        if (pos + sizeof(uint32_t) == buf + p8fmt->priv_offset) {
             pos = OPENSSL_load_u32_be(&magic, pos);
-            if (magic != vp8->priv_magic)
+            if (magic != p8fmt->priv_magic)
                 goto end;
-        } else if (pos != buf + vp8->priv_offset) {
+        } else if (pos != buf + p8fmt->priv_offset) {
             goto end;
         }
         pos += v->prvkey_bytes;
     }
-    if (vp8->pub_length > 0) {
-        if (pos != buf + vp8->pub_offset)
+    if (p8fmt->pub_length > 0) {
+        if (pos != buf + p8fmt->pub_offset)
             goto end;
         pos += v->pubkey_bytes;
     }
@@ -366,8 +365,8 @@ ossl_ml_kem_d2i_PKCS8(const uint8_t *prvenc, int prvlen,
         provctx, OSSL_PKEY_PARAM_ML_KEM_RETAIN_SEED, 1);
     key->prefer_seed = ossl_prov_ctx_get_bool_param(
         provctx, OSSL_PKEY_PARAM_ML_KEM_PREFER_SEED, 1);
-    if (vp8->seed_length > 0) {
-        if (!ossl_ml_kem_set_seed(buf + vp8->seed_offset,
+    if (p8fmt->seed_length > 0) {
+        if (!ossl_ml_kem_set_seed(buf + p8fmt->seed_offset,
                                   ML_KEM_SEED_BYTES, key)) {
             ERR_raise_data(ERR_LIB_OSSL_DECODER, ERR_R_INTERNAL_ERROR,
                            "error storing %s private key seed",
@@ -375,20 +374,20 @@ ossl_ml_kem_d2i_PKCS8(const uint8_t *prvenc, int prvlen,
             goto end;
         }
     }
-    if (vp8->priv_length > 0) {
-        if ((key->encoded_dk = OPENSSL_malloc(vp8->priv_length)) == NULL) {
+    if (p8fmt->priv_length > 0) {
+        if ((key->encoded_dk = OPENSSL_malloc(p8fmt->priv_length)) == NULL) {
             ERR_raise_data(ERR_LIB_PROV, PROV_R_INVALID_KEY,
                            "error parsing %s private key",
                            v->algorithm_name);
             goto end;
         }
-        memcpy(key->encoded_dk, buf + vp8->priv_offset, vp8->priv_length);
+        memcpy(key->encoded_dk, buf + p8fmt->priv_offset, p8fmt->priv_length);
     }
     /* Any OQS public key content is ignored */
     ret = key;
 
   end:
-    OPENSSL_free(vp8_alloc);
+    OPENSSL_free(fmt_slots);
     PKCS8_PRIV_KEY_INFO_free(p8inf);
     if (ret == NULL)
         ossl_ml_kem_key_free(key);
@@ -428,8 +427,8 @@ int ossl_ml_kem_i2d_prvkey(const ML_KEM_KEY *key, uint8_t **out,
 {
     const ML_KEM_VINFO *v = key->vinfo;
     const ML_KEM_CODEC *codec;
-    ML_KEM_PKCS8_PREF *vp8_alloc, *vp8_slot;
-    const ML_KEM_PKCS8_INFO *vp8;
+    ML_KEM_PKCS8_FMT_PREF *fmt_slots, *slot;
+    const ML_KEM_PKCS8_FMT *p8fmt;
     uint8_t *buf = NULL, *pos;
     const char *formats;
     int len = ML_KEM_SEED_BYTES;
@@ -448,27 +447,26 @@ int ossl_ml_kem_i2d_prvkey(const ML_KEM_KEY *key, uint8_t **out,
 
     formats = ossl_prov_ctx_get_param(
         provctx, OSSL_PKEY_PARAM_ML_KEM_OUTPUT_FORMATS, NULL);
-    vp8_slot = vp8_alloc = vp8_order(v->algorithm_name, codec->pkcs8_info,
-                                     "output", formats);
-    if (vp8_alloc == NULL)
+    fmt_slots = vp8_order(v->algorithm_name, codec->p8fmt,
+                          "output", formats);
+    if (fmt_slots == NULL)
         return 0;
 
     /* If we don't have a seed, skip seedful entries */
-    if (!ossl_ml_kem_have_seed(key))
-        while (vp8_slot->vp8_entry != NULL
-               && vp8_slot->vp8_entry->seed_length != 0)
-            ++vp8_slot;
+    for (slot = fmt_slots; (p8fmt = slot->fmt) != NULL; ++slot)
+        if (ossl_ml_kem_have_seed(key) || p8fmt->seed_length == 0)
+            break;
     /* No matching table entries, give up */
-    if ((vp8 = vp8_slot->vp8_entry) == NULL
-        || (vp8->seed_length > 0 && vp8->seed_length != ML_KEM_SEED_BYTES)
-        || (vp8->priv_length > 0 && vp8->priv_length != v->prvkey_bytes)
-        || (vp8->pub_length > 0 && vp8->pub_length != v->pubkey_bytes)) {
+    if (p8fmt == NULL
+        || (p8fmt->seed_length > 0 && p8fmt->seed_length != ML_KEM_SEED_BYTES)
+        || (p8fmt->priv_length > 0 && p8fmt->priv_length != v->prvkey_bytes)
+        || (p8fmt->pub_length > 0 && p8fmt->pub_length != v->pubkey_bytes)) {
         ERR_raise_data(ERR_LIB_PROV, PROV_R_ML_KEM_NO_FORMAT,
                        "no matching enabled %s private key output formats",
                        v->algorithm_name);
         goto end;
     }
-    len = vp8->p8_bytes;
+    len = p8fmt->p8_bytes;
 
     if (out == NULL) {
         ret = len;
@@ -478,16 +476,30 @@ int ossl_ml_kem_i2d_prvkey(const ML_KEM_KEY *key, uint8_t **out,
     if ((pos = buf = OPENSSL_malloc((size_t) len)) == NULL)
         goto end;
 
-    if (vp8->p8_magic != 0)
-        pos = OPENSSL_store_u32_be(pos, vp8->p8_magic);
-    if (vp8->seed_length != 0) {
+    switch (p8fmt->p8_shift) {
+    case 0:
+        pos = OPENSSL_store_u32_be(pos, p8fmt->p8_magic);
+        break;
+    case 2:
+        pos = OPENSSL_store_u16_be(pos, (uint16_t)p8fmt->p8_magic);
+        break;
+    case 4:
+        break;
+    default:
+        ERR_raise_data(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR,
+                       "error encoding %s private key",
+                       v->algorithm_name);
+        goto end;
+    }
+
+    if (p8fmt->seed_length != 0) {
         /*
          * Either the tag/len were already included in |magic| or they require
          * us to write two bytes now.
          */
-        if (pos + sizeof(uint16_t) == buf + vp8->seed_offset)
-            pos = OPENSSL_store_u16_be(pos, vp8->seed_magic);
-        if (pos != buf + vp8->seed_offset
+        if (pos + sizeof(uint16_t) == buf + p8fmt->seed_offset)
+            pos = OPENSSL_store_u16_be(pos, p8fmt->seed_magic);
+        if (pos != buf + p8fmt->seed_offset
             || !ossl_ml_kem_encode_seed(pos, ML_KEM_SEED_BYTES, key)) {
             ERR_raise_data(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR,
                            "error encoding %s private key",
@@ -496,10 +508,10 @@ int ossl_ml_kem_i2d_prvkey(const ML_KEM_KEY *key, uint8_t **out,
         }
         pos += ML_KEM_SEED_BYTES;
     }
-    if (vp8->priv_length != 0) {
-        if (pos + sizeof(uint32_t) == buf + vp8->priv_offset)
-            pos = OPENSSL_store_u32_be(pos, vp8->priv_magic);
-        if (pos != buf + vp8->priv_offset
+    if (p8fmt->priv_length != 0) {
+        if (pos + sizeof(uint32_t) == buf + p8fmt->priv_offset)
+            pos = OPENSSL_store_u32_be(pos, p8fmt->priv_magic);
+        if (pos != buf + p8fmt->priv_offset
             || !ossl_ml_kem_encode_private_key(pos, v->prvkey_bytes, key)) {
             ERR_raise_data(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR,
                            "error encoding %s private key",
@@ -509,9 +521,9 @@ int ossl_ml_kem_i2d_prvkey(const ML_KEM_KEY *key, uint8_t **out,
         pos += v->prvkey_bytes;
     }
     /* OQS form output with tacked-on public key */
-    if (vp8->pub_length != 0) {
+    if (p8fmt->pub_length != 0) {
         /* The OQS pubkey is never separately DER-wrapped */
-        if (pos != buf + vp8->pub_offset
+        if (pos != buf + p8fmt->pub_offset
             || !ossl_ml_kem_encode_public_key(pos, v->pubkey_bytes, key)) {
             ERR_raise_data(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR,
                            "error encoding %s private key",
@@ -527,7 +539,7 @@ int ossl_ml_kem_i2d_prvkey(const ML_KEM_KEY *key, uint8_t **out,
     }
 
   end:
-    OPENSSL_free(vp8_alloc);
+    OPENSSL_free(fmt_slots);
     if (ret == 0)
         OPENSSL_free(buf);
     return ret;
index 510dcdcd59b8ba47361b4b5ed812ec10bb8aed02..4d64a536f65b0400fe0b634a78aa621eca2e8044 100644 (file)
 # define ML_KEM_SPKI_OVERHEAD   22
 typedef struct {
     const uint8_t asn1_prefix[ML_KEM_SPKI_OVERHEAD];
-} ML_KEM_SPKI_INFO;
+} ML_KEM_SPKI_FMT;
 
 /*-
  * For each parameter set we support a few PKCS#8 input formats, three
  * corresponding to the "either or both" variants of:
  *
- *  ML-KEM-PrivateKey ::= SEQUENCE {
- *    seed OCTET STRING SIZE (64) OPTIONAL,
- *    expandedKey [1] IMPLICIT OCTET STRING SIZE (1632 | 2400 | 3172) OPTIONAL }
- *   (WITH COMPONENTS {..., seed  PRESENT } |
- *    WITH COMPONENTS {..., expandedKey  PRESENT })
+ *  ML-KEM-PrivateKey ::= CHOICE {
+ *    seed [0] IMPLICIT OCTET STRING SIZE (64),
+ *    expandedKey OCTET STRING SIZE (1632 | 2400 | 3168)
+ *    both SEQUENCE {
+ *      seed OCTET STRING SIZE (64),
+ *      expandedKey OCTET STRING SIZE (1632 | 2400 | 3168) } }
  *
- * and two more for historical OQS encodings.
+ * one more for a historical OQS encoding:
  *
- * - OQS private key: OCTET STRING
  * - OQS private + public key: OCTET STRING
  *   (The public key is ignored, just as with PKCS#8 v2.)
  *
- * An offset of zero means that particular field is absent.
+ * and two more that are the minimal IETF non-ASN.1 seed encoding:
+ *
+ * - Bare seed (just the 32 bytes)
+ * - Bare priv (just the key bytes)
+ *
+ * A length of zero means that particular field is absent.
+ *
+ * The p8_shift is 0 when the top-level tag+length occupy four bytes, 2 when
+ * they occupy two by†es, and 4 when no tag is used at all.
  */
 typedef struct {
-    const char *p8_name;
-    size_t p8_bytes;
-    uint32_t p8_magic;
-    uint16_t seed_magic;
-    size_t seed_offset;
-    size_t seed_length;
-    uint32_t priv_magic;
-    size_t priv_offset;
-    size_t priv_length;
-    size_t pub_offset;
-    size_t pub_length;
-} ML_KEM_PKCS8_INFO;
+    const char *p8_name;    /* Format name */
+    size_t p8_bytes;        /* Total P8 encoding length */
+    int    p8_shift;        /* 4 - (top-level tag + len) */
+    uint32_t p8_magic;      /* The tag + len value */
+    uint16_t seed_magic;    /* Interior tag + len for the seed */
+    size_t seed_offset;     /* Seed offset from start */
+    size_t seed_length;     /* Seed bytes */
+    uint32_t priv_magic;    /* Interior tag + len for the key */
+    size_t priv_offset;     /* Key offset from start */
+    size_t priv_length;     /* Key bytes */
+    size_t pub_offset;      /* Pubkey offset */
+    size_t pub_length;      /* Pubkey bytes */
+} ML_KEM_PKCS8_FMT;
 
 typedef struct {
-    const ML_KEM_SPKI_INFO *spki_info;
-    const ML_KEM_PKCS8_INFO *pkcs8_info;
+    const ML_KEM_SPKI_FMT *spkifmt;
+    const ML_KEM_PKCS8_FMT *p8fmt;
 } ML_KEM_CODEC;
 
 typedef struct {
-    const ML_KEM_PKCS8_INFO *vp8_entry;
-    int vp8_pref;
-} ML_KEM_PKCS8_PREF;
+    const ML_KEM_PKCS8_FMT *fmt;
+    int pref;
+} ML_KEM_PKCS8_FMT_PREF;
 
 __owur
 ML_KEM_KEY *ossl_ml_kem_d2i_PUBKEY(const uint8_t *pubenc, int publen,
index 096da4577210e0237dab3c3c75b8125c2e0dc1f5..ade7c8b5c4a5a66a5cfdd2681338e743c64eb7f2 100644 (file)
@@ -20,7 +20,7 @@ use OpenSSL::Test::Utils;
 setup("test_ml_kem_codecs");
 
 my @algs = qw(512 768 1024);
-my @formats = qw(seed-priv priv-only seed-only priv-oqs pair-oqs bare-seed bare-priv);
+my @formats = qw(seed-priv priv-only seed-only oqskeypair bare-seed bare-priv);
 
 plan skip_all => "ML-KEM isn't supported in this build"
     if disabled("ml-kem");
@@ -33,7 +33,7 @@ foreach my $alg (@algs) {
     my $pub = sprintf("pub-%s.pem", $alg);
     my %formats = map { ($_, sprintf("prv-%s-%s.pem", $alg, $_)) } @formats;
 
-    # 31(1 + 5 * 6) tests
+    # (1 + 6 * @formats) tests
     my $i = 0;
     my $in0 = data_file($pub);
     my $der0 = sprintf("pub-%s.%d.der", $alg, $i++);
@@ -67,7 +67,7 @@ foreach my $alg (@algs) {
                      '-provparam', "ml-kem.input_formats=$rest"])));
     }
 
-    # 13(3 + 5 * 2) tests
+    # (3 + 2 * @formats) tests
     # Check encap/decap ciphertext and shared secrets
     $i = 0;
     my $refct = sprintf("ct-%s.dat", $alg);
@@ -147,7 +147,7 @@ foreach my $alg (@algs) {
     ok(!compare(data_file($formats{'priv-only'}), $privpref),
         sprintf("seed non-preference via provparam key match: %s", $alg));
 
-    # 10(5 * 2) tests
+    # (2 * @formats) tests
     # Check text encoding
     while (my ($f, $k) = each %formats) {
         my $txt =  sprintf("prv-%s-%s.txt", $alg,
index b1806552921a4dc6f8c8003fb9c68fcfe3c5a606..88ab9330872094a0ca3664603af7387080163526 100644 (file)
@@ -1,69 +1,69 @@
 -----BEGIN PRIVATE KEY-----
-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
+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
+JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
 -----END PRIVATE KEY-----
diff --git a/test/recipes/15-test_ml_kem_codecs_data/prv-1024-priv-oqs.pem b/test/recipes/15-test_ml_kem_codecs_data/prv-1024-priv-oqs.pem
deleted file mode 100644 (file)
index 88ab933..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
------END PRIVATE KEY-----
index 11eae07e2fbda444e17cf565708684599d8cd90b..e9d8768804ffe9d73133834dc45dc792a8ce4a3e 100644 (file)
@@ -1,4 +1,4 @@
 -----BEGIN PRIVATE KEY-----
-MFYCAQAwCwYJYIZIAWUDBAQDBEQwQgRAAAECAwQFBgcICQoLDA0ODxAREhMUFRYX
-GBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
+MFQCAQAwCwYJYIZIAWUDBAQDBEKAQAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ
+GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj8=
 -----END PRIVATE KEY-----
index c47bab77d1cae12dea8e95df4a91c2ad5c64409a..ff3dcbed4c8c3534e89b49796189e629adb89747 100644 (file)
@@ -1,6 +1,6 @@
 -----BEGIN PRIVATE KEY-----
 MIIMvgIBADALBglghkgBZQMEBAMEggyqMIIMpgRAAAECAwQFBgcICQoLDA0ODxAR
-EhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P4GC
+EhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+PwSC
 DGD3e39rFcc/4sxUa2f7d0yhm0LNRj6p+7mEykd6d7bHEIfL8FGr5HNqkHLG6HDI
 MRxVlj9QCjx7G48qWFWPScYlJ7bFlLXnrLO89ZcnOldDUX0VEgi9SqYedbpnsL1Z
 SplJGWJ6wKgE1InhcTNrwzn0ZmcG5RNEErNmgj1QMYyL8mGrEgoooE/sAcwV8rcZ
index 766f08ddc0e82f701b1190d57f7446b4bc989f0c..418dfa0ade637390194fed371fa6a61e2c1f89d7 100644 (file)
@@ -1,37 +1,37 @@
 -----BEGIN PRIVATE KEY-----
-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
+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
+JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
 -----END PRIVATE KEY-----
diff --git a/test/recipes/15-test_ml_kem_codecs_data/prv-512-priv-oqs.pem b/test/recipes/15-test_ml_kem_codecs_data/prv-512-priv-oqs.pem
deleted file mode 100644 (file)
index 418dfa0..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
------END PRIVATE KEY-----
index a68827174623edafbfc2e109184b8451c32dacef..8222519fa76abf8563d85692ee1d5f5646de3ab9 100644 (file)
@@ -1,4 +1,4 @@
 -----BEGIN PRIVATE KEY-----
-MFYCAQAwCwYJYIZIAWUDBAQBBEQwQgRAAAECAwQFBgcICQoLDA0ODxAREhMUFRYX
-GBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
+MFQCAQAwCwYJYIZIAWUDBAQBBEKAQAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ
+GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj8=
 -----END PRIVATE KEY-----
index 4e4021d90d342a18a1bc6ab0f0b5efae291652ed..51d4be476fd52eb87ebae53d21ed6aaa5d2d1f50 100644 (file)
@@ -1,6 +1,6 @@
 -----BEGIN PRIVATE KEY-----
 MIIGvgIBADALBglghkgBZQMEBAEEggaqMIIGpgRAAAECAwQFBgcICQoLDA0ODxAR
-EhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P4GC
+EhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+PwSC
 BmBwVU/UNjRPJ4Wxs7G6wYS2Z5ADM2wm8Vp96HjEglxr4D88SkgPdbdIaq0x06AF
 GGI/0gerUo3WJyFJWDWuAGLDZ7dKcbrxCq0OiikCB2vjE0i+sVzMCVfN67Sv8iZ1
 a7xgG2Voq3hKy66zRwLw+GomICEYsisj+DVYd2x5wU26mDN5yAPg3MMWChF1cDDm
index 8de6eb5373e6a316b95db219846066940064ed0f..9b2f13cea142999af0879195deab4427653ec443 100644 (file)
@@ -1,53 +1,53 @@
 -----BEGIN PRIVATE KEY-----
-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
+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
+qcDGBzIls0cDpK8Ek4LEdXPaaP3pJFrUROMbH721IfH2Hze8DO8pIGfmcNKKH/2Q
+T28RkKmWkYoTA3psq/PDc7+Cls03qzO6d0aAnMP4reGzY5vVe/zGllCqrx3hmPxM
+BGMpnlLEYXgMxCj8XQSlxRhQy6bCpSdDQGdXk92gm+RMKeY5XGX4XSoKfG30EeaR
+Gx8stsNRzS6HX1G2OL53YJfpPi8rL4PaC+70qoW6nnY6tkUCoMpSIunqtbO3CI7V
+IGDoyCablDpxqwrhxbG2h9LgGc+ANrz5v257rDqqNuQWYPqkVA8mSM2ToYnsXC3q
+cLrKqk/8kG+QgQ6htnvyTyx4z2uogarqYcBlK/+VsbrkQm0Xc7nMLKgsIeOMY247
+HFIyRJhrC+ioP13Vzy1Udi+zxev1m46IUwKxzkcDPt92D04Cm+QLbVZrGd11is1c
+dBKHgTEkT5AXLFPyZmPCHZBTAdSLr5HJF8x3eenYgCzBDYmjcFCZoq06OoiWdDwR
+RGmAk74lfay2bceFIouRLI2WXRSqKDQsOsSpP++lMrIJRd3BAgE5wU1ji5CMTd3p
+oGRblbLkQU1Au3nwRBODDxWoc8KLtwWcJ0EAIBXyBAjwWOcVsL+ZW1OAt90yWgVq
+uX5lmivgzfbDNzHGg6Y0t3HoySoTmu5LsOSccHcyHUL8GZ98HymMpiXSI6XCY6A8
+xIFZt4EmZbeGN+ThhyCywpprmfQnZqTLxNxQi6lLqDuJw6XHj4uya72beb64yBgk
+kPV5PuW5YBO3S34WninRYvExVGTqfXJDbYm3VRYRksgcwt0ci4u6eV70Ju4cwBw3
+qqN7LP+LCjeLR8vQtNSTmM/CcSlZaZ+gvYzYRmasxh9UG4T6lrnIVOTnXpFErdtE
+uFZqV9+7VFzkI8AzRvKywakXgNFSqN4aTUycrN5zksmWiIzCOZwCw4szU634rKso
+OSTaAKBbduc4xyyTDWy6Ca4WiZD6of7yIm54CGHUFu/0AvT3WfxkirH5cQAQkIf5
+bksUjSyzHkgFMU6gzZX7Aj6sDZiUdLpCAde0HSb1OUshfupbNLcaizeTHA5ZQnHg
+t8czJXJAIz57pzVgPkJah97ncHnjfLKKIXZFlM5TUNjaK2KgcXSUMDLsicmICcc7
+ZCPTDB0oOnZqZNiXA8PWKbSXgo1IMgw0YhB5eimKoQ1CPI3aBp0CvFnmzfA6CWuL
+PaTKubgMpKFJB2cszvHsT68jSgvFt+nUc/KzEzs7JqHRdctnp4BZGWmcAvdlMbmc
+X4kYBwS7TKRTXFuJcmecZgoHxeUUuHAJyGLrj1FXaV77P8QKne9rgcHMAqJJrk8J
+StDZvTSFwcHGgIBSCnyMYyAyzuc4FU5cUXbAfaVgJHdqQw/nbqz2ZaP3uDIQIhW8
+gvEJOcg1VwQzao+sHYHkuwSFql18dNa1m75cXpcqDYusQRtVtdVVfNaAoaj3G064
+a8SMmgUJcxpUvZ1ykLJ5Y+Q3Lcmxmc/crAsBrNKKYjlREuTENkjWIsSMgjTQFEDo
+zDdskn8jpa/JrAR0xmInTkJFJchVLs47P+JlFt6QG8fVFb3olVjmJslcgLkzQvgB
+AATznmxslIccXjRMqzlmyDX5qWpZr9McQChrOLHBp4RwurlHUYk0RTzoZzapGfH1
+ptUQqG9UVPw5gMtcdlvSvV97NrFBDWY1yM60fE3aDXaijqyTnHHDAkgEhmxxYmZY
+RCFjwsIhF+UKzvzmN4qYVlIwKk7wws4Mxxa3eW4ray43d9+hrD2iWaMbWptTD4y2
+OKgaYqwwGEmrr5WnMBvaMAaJCb/bfmfbzLs4pVUaJbGjoPaFdIrVdT2IgPABbGJ0
+hhZjhMVXH+I2WQA2TQODEeLYdds2ZoaTK17GAkMKNp6Hpu9cM4eGZXglvUwFes65
+I+sJNeaQXmO0ztf4CFenc91ksVDSZhLqmsEgUtsgF78YQ8y0sygbaQ3HKK36hcAC
+gbjjwJKHM1+Fa0/CiS9povV5Ia2gGRTECYhmLVd2lmKnhjUbm2ZJPat5WU2YbeIQ
+DWW6D/TqWLgVONJKRDWiWPrCVASqf0H2WLE4UGXhWNy2ARVzJyD0BFmqrBXkBpU6
+kKxSmX0czQcAYO/GXbnmUzVEZ/rVbscTyG51QMQjrPJmn1L6b0rGiI2HHvPoR8Ap
+qKr7uS4XskqgebH0GbphdbRCr7EZCdSla3CgM1soc5IYqnyTSOLDwvPrPRWkHmQX
+wN2Uv+shQZsxGnuxOhgLvoMyGKmmsXRHzIXyJYWVh6cwdwSay8/UTQ8CVDjhXRU4
+Jw1Ybhv4MZKpRZz2PA6XL4UpdnmDHs8SFQmFHLg0D28Qew+hoO/Rs2qBibwIXE9c
+t4TlU/QbkY+AOXzhlW94W+43fKmqi+aZitowwmt8PYxrVSVMyWIDsgxCruCsTh67
+QI5JqeP4edCrB4XrcCVCXRMFoimcAV4SDRY7DhlJTOVyU9AkbRgnRcuBl6t0OLPB
+u3lyvsWjBuujVnhVwBRpn+9lrlTHcKDYXBhADPZCrtxmB3e6SxOFAr1aeBL2IfhK
+SClrmN1DIrbxWCi4qPDgCoukSlPDqLFDVxsHQKvVZ9rxzenHnCBLbV4lnRdmoxu7
+y05qBc9FAhdrMBwcL0Ekd1AVe87IXoCbMKTWDXdHzdD1uZqoyCaYdRd5OqqAgKCx
+JKhVjfcrvje3X07btr6CFtbGM/srIoDiURPYaV5DSBw+6zl+sZJQUim2eiAeqJPD
+4ssy2ovDQvpN6gV4ok4W2Pj5ODqVt3BQ9Nn9L1cz7sHWPvPCPr+ZGBc2aacgISIj
+JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
 -----END PRIVATE KEY-----
diff --git a/test/recipes/15-test_ml_kem_codecs_data/prv-768-priv-oqs.pem b/test/recipes/15-test_ml_kem_codecs_data/prv-768-priv-oqs.pem
deleted file mode 100644 (file)
index 9b2f13c..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
------END PRIVATE KEY-----
index 4d613a3b438e8dc5702223782e0ce5268486bc16..4e7d5a0b970ebd53951c9c5bd6be7c052d823556 100644 (file)
@@ -1,4 +1,4 @@
 -----BEGIN PRIVATE KEY-----
-MFYCAQAwCwYJYIZIAWUDBAQCBEQwQgRAAAECAwQFBgcICQoLDA0ODxAREhMUFRYX
-GBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==
+MFQCAQAwCwYJYIZIAWUDBAQCBEKAQAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ
+GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj8=
 -----END PRIVATE KEY-----
index 79cbb141db7c92a27af2f1e28032c2404b8b887d..0c603dbdf42e6b96e534e24f84079ac502251729 100644 (file)
@@ -1,6 +1,6 @@
 -----BEGIN PRIVATE KEY-----
 MIIJvgIBADALBglghkgBZQMEBAIEggmqMIIJpgRAAAECAwQFBgcICQoLDA0ODxAR
-EhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P4GC
+EhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+PwSC
 CWAn0qd/M3VvYSCO8ROr6CWVhz1KvHMOW11nlSm/akzrY4NCcjGoYS9BVQUVrLpS
 5I6ti5QoM7vmhl0T0Up50sXD4H8KBW2N56rfyroFjEk8gLN8q4xWJ1O7O6a27IKX
 +IXqp1QNUwAVqEQG5VsTZrV34jbOWKJtih61pE1UIyPCFn2b9KR/mFaZygW65DuN