diff --git a/src/crypto/internal/hpke/hpke.go b/src/crypto/internal/hpke/hpke.go index 8ede6ec8dd1..d2df2484003 100644 --- a/src/crypto/internal/hpke/hpke.go +++ b/src/crypto/internal/hpke/hpke.go @@ -132,12 +132,12 @@ func newContext(sharedSecret []byte, kemID uint16, kdf KDF, aead AEAD, info []by // // The returned enc ciphertext can be used to instantiate a matching receiving // HPKE context with the corresponding KEM decapsulation key. -func NewSender(kem KEMSender, kdf KDF, aead AEAD, info []byte) (enc []byte, s *Sender, err error) { - sharedSecret, encapsulatedKey, err := kem.encap() +func NewSender(pk PublicKey, kdf KDF, aead AEAD, info []byte) (enc []byte, s *Sender, err error) { + sharedSecret, encapsulatedKey, err := pk.encap() if err != nil { return nil, nil, err } - context, err := newContext(sharedSecret, kem.ID(), kdf, aead, info) + context, err := newContext(sharedSecret, pk.KEM().ID(), kdf, aead, info) if err != nil { return nil, nil, err } @@ -151,12 +151,12 @@ func NewSender(kem KEMSender, kdf KDF, aead AEAD, info []byte) (enc []byte, s *S // The enc parameter must have been produced by a matching sending HPKE context // with the corresponding KEM encapsulation key. The info parameter is // additional public information that must match between sender and recipient. -func NewRecipient(enc []byte, kem KEMRecipient, kdf KDF, aead AEAD, info []byte) (*Recipient, error) { - sharedSecret, err := kem.decap(enc) +func NewRecipient(enc []byte, k PrivateKey, kdf KDF, aead AEAD, info []byte) (*Recipient, error) { + sharedSecret, err := k.decap(enc) if err != nil { return nil, err } - context, err := newContext(sharedSecret, kem.ID(), kdf, aead, info) + context, err := newContext(sharedSecret, k.KEM().ID(), kdf, aead, info) if err != nil { return nil, err } @@ -179,16 +179,17 @@ func (s *Sender) Seal(aad, plaintext []byte) ([]byte, error) { // Seal instantiates a single-use HPKE sending HPKE context like [NewSender], // and then encrypts the provided plaintext like [Sender.Seal] (with no aad). -func Seal(kem KEMSender, kdf KDF, aead AEAD, info, plaintext []byte) (enc, ct []byte, err error) { - enc, s, err := NewSender(kem, kdf, aead, info) +// Seal returns the concatenation of the encapsulated key and the ciphertext. +func Seal(pk PublicKey, kdf KDF, aead AEAD, info, plaintext []byte) ([]byte, error) { + enc, s, err := NewSender(pk, kdf, aead, info) if err != nil { - return nil, nil, err + return nil, err } - ct, err = s.Seal(nil, plaintext) + ct, err := s.Seal(nil, plaintext) if err != nil { - return nil, nil, err + return nil, err } - return enc, ct, err + return append(enc, ct...), nil } // Export produces a secret value derived from the shared key between sender and @@ -219,8 +220,14 @@ func (r *Recipient) Open(aad, ciphertext []byte) ([]byte, error) { // Open instantiates a single-use HPKE receiving HPKE context like [NewRecipient], // and then decrypts the provided ciphertext like [Recipient.Open] (with no aad). -func Open(enc []byte, kem KEMRecipient, kdf KDF, aead AEAD, info, ciphertext []byte) ([]byte, error) { - r, err := NewRecipient(enc, kem, kdf, aead, info) +// ciphertext must be the concatenation of the encapsulated key and the actual ciphertext. +func Open(k PrivateKey, kdf KDF, aead AEAD, info, ciphertext []byte) ([]byte, error) { + encSize := k.KEM().encSize() + if len(ciphertext) < encSize { + return nil, errors.New("ciphertext too short") + } + enc, ciphertext := ciphertext[:encSize], ciphertext[encSize:] + r, err := NewRecipient(enc, k, kdf, aead, info) if err != nil { return nil, err } diff --git a/src/crypto/internal/hpke/hpke_test.go b/src/crypto/internal/hpke/hpke_test.go index a9742709a78..b54a234fe55 100644 --- a/src/crypto/internal/hpke/hpke_test.go +++ b/src/crypto/internal/hpke/hpke_test.go @@ -18,6 +18,57 @@ import ( "testing" ) +func Example() { + // In this example, we use MLKEM768-X25519 as the KEM, HKDF-SHA256 as the + // KDF, and AES-256-GCM as the AEAD to encrypt a single message from a + // sender to a recipient using the one-shot API. + + kem, kdf, aead := MLKEM768X25519(), HKDFSHA256(), AES256GCM() + + // Recipient side + var ( + recipientPrivateKey PrivateKey + publicKeyBytes []byte + ) + { + k, err := kem.GenerateKey() + if err != nil { + panic(err) + } + recipientPrivateKey = k + publicKeyBytes = k.PublicKey().Bytes() + } + + // Sender side + var ciphertext []byte + { + publicKey, err := kem.NewPublicKey(publicKeyBytes) + if err != nil { + panic(err) + } + + message := []byte("|-()-|") + ct, err := Seal(publicKey, kdf, aead, []byte("example"), message) + if err != nil { + panic(err) + } + + ciphertext = ct + } + + // Recipient side + { + plaintext, err := Open(recipientPrivateKey, kdf, aead, []byte("example"), ciphertext) + if err != nil { + panic(err) + } + fmt.Printf("Decrypted message: %s\n", plaintext) + } + + // Output: + // Decrypted message: |-()-| +} + func mustDecodeHex(t *testing.T, in string) []byte { t.Helper() b, err := hex.DecodeString(in) @@ -83,6 +134,12 @@ func testVectors(t *testing.T, name string) { if vector.KEM == 0x0021 { t.Skip("KEM 0x0021 (DHKEM(X448)) not supported") } + if vector.KEM == 0x0040 { + t.Skip("KEM 0x0040 (ML-KEM-512) not supported") + } + if vector.KDF == 0x0012 || vector.KDF == 0x0013 { + t.Skipf("TurboSHAKE KDF not supported") + } kdf, err := NewKDF(vector.KDF) if err != nil { @@ -100,26 +157,37 @@ func testVectors(t *testing.T, name string) { t.Errorf("unexpected AEAD ID: got %04x, want %04x", aead.ID(), vector.AEAD) } - pubKeyBytes := mustDecodeHex(t, vector.PkRm) - kemSender, err := NewKEMSender(vector.KEM, pubKeyBytes) + kem, err := NewKEM(vector.KEM) if err != nil { t.Fatal(err) } - if kemSender.ID() != vector.KEM { - t.Errorf("unexpected KEM ID: got %04x, want %04x", kemSender.ID(), vector.KEM) + if kem.ID() != vector.KEM { + t.Errorf("unexpected KEM ID: got %04x, want %04x", kem.ID(), vector.KEM) + } + + pubKeyBytes := mustDecodeHex(t, vector.PkRm) + kemSender, err := kem.NewPublicKey(pubKeyBytes) + if err != nil { + t.Fatal(err) + } + if kemSender.KEM() != kem { + t.Errorf("unexpected KEM from sender: got %04x, want %04x", kemSender.KEM().ID(), kem.ID()) } if !bytes.Equal(kemSender.Bytes(), pubKeyBytes) { t.Errorf("unexpected KEM bytes: got %x, want %x", kemSender.Bytes(), pubKeyBytes) } ikmE := mustDecodeHex(t, vector.IkmE) - setupDerandomizedEncap(t, vector.KEM, ikmE, kemSender) + setupDerandomizedEncap(t, ikmE, kemSender) info := mustDecodeHex(t, vector.Info) encap, sender, err := NewSender(kemSender, kdf, aead, info) if err != nil { t.Fatal(err) } + if len(encap) != kem.encSize() { + t.Errorf("unexpected encapsulated key size: got %d, want %d", len(encap), kem.encSize()) + } expectedEncap := mustDecodeHex(t, vector.Enc) if !bytes.Equal(encap, expectedEncap) { @@ -127,23 +195,23 @@ func testVectors(t *testing.T, name string) { } privKeyBytes := mustDecodeHex(t, vector.SkRm) - kemRecipient, err := NewKEMRecipient(vector.KEM, privKeyBytes) + kemRecipient, err := kem.NewPrivateKey(privKeyBytes) if err != nil { t.Fatal(err) } - if kemRecipient.ID() != vector.KEM { - t.Errorf("unexpected KEM ID: got %04x, want %04x", kemRecipient.ID(), vector.KEM) + if kemRecipient.KEM() != kem { + t.Errorf("unexpected KEM from recipient: got %04x, want %04x", kemRecipient.KEM().ID(), kem.ID()) } kemRecipientBytes, err := kemRecipient.Bytes() if err != nil { t.Fatal(err) } // X25519 serialized keys must be clamped, so the bytes might not match. - if !bytes.Equal(kemRecipientBytes, privKeyBytes) && vector.KEM != dhkemX25519 { + if !bytes.Equal(kemRecipientBytes, privKeyBytes) && vector.KEM != DHKEM(ecdh.X25519()).ID() { t.Errorf("unexpected KEM bytes: got %x, want %x", kemRecipientBytes, privKeyBytes) } - if vector.KEM == dhkemX25519 { - kem2, err := NewKEMRecipient(vector.KEM, kemRecipientBytes) + if vector.KEM == DHKEM(ecdh.X25519()).ID() { + kem2, err := kem.NewPrivateKey(kemRecipientBytes) if err != nil { t.Fatal(err) } @@ -154,32 +222,28 @@ func testVectors(t *testing.T, name string) { if !bytes.Equal(kemRecipientBytes2, kemRecipientBytes) { t.Errorf("X25519 re-serialized key differs: got %x, want %x", kemRecipientBytes2, kemRecipientBytes) } - if !bytes.Equal(kem2.KEMSender().Bytes(), pubKeyBytes) { - t.Errorf("X25519 re-derived public key differs: got %x, want %x", kem2.KEMSender().Bytes(), pubKeyBytes) + if !bytes.Equal(kem2.PublicKey().Bytes(), pubKeyBytes) { + t.Errorf("X25519 re-derived public key differs: got %x, want %x", kem2.PublicKey().Bytes(), pubKeyBytes) } } - if !bytes.Equal(kemRecipient.KEMSender().Bytes(), pubKeyBytes) { - t.Errorf("unexpected KEM sender bytes: got %x, want %x", kemRecipient.KEMSender().Bytes(), pubKeyBytes) + if !bytes.Equal(kemRecipient.PublicKey().Bytes(), pubKeyBytes) { + t.Errorf("unexpected KEM sender bytes: got %x, want %x", kemRecipient.PublicKey().Bytes(), pubKeyBytes) } - // NewKEMRecipientFromSeed is not implemented for the PQ KEMs yet. - if vector.KEM != mlkem768 && vector.KEM != mlkem1024 && vector.KEM != mlkem768X25519 && - vector.KEM != mlkem768P256 && vector.KEM != mlkem1024P384 { - seed := mustDecodeHex(t, vector.IkmR) - seedRecipient, err := NewKEMRecipientFromSeed(vector.KEM, seed) - if err != nil { - t.Fatal(err) - } - seedRecipientBytes, err := seedRecipient.Bytes() - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(seedRecipientBytes, privKeyBytes) && vector.KEM != dhkemX25519 { - t.Errorf("unexpected KEM bytes from seed: got %x, want %x", seedRecipientBytes, privKeyBytes) - } - if !bytes.Equal(seedRecipient.KEMSender().Bytes(), pubKeyBytes) { - t.Errorf("unexpected KEM sender bytes from seed: got %x, want %x", seedRecipient.KEMSender().Bytes(), pubKeyBytes) - } + ikm := mustDecodeHex(t, vector.IkmR) + derivRecipient, err := kem.DeriveKeyPair(ikm) + if err != nil { + t.Fatal(err) + } + derivRecipientBytes, err := derivRecipient.Bytes() + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(derivRecipientBytes, privKeyBytes) && vector.KEM != DHKEM(ecdh.X25519()).ID() { + t.Errorf("unexpected KEM bytes from seed: got %x, want %x", derivRecipientBytes, privKeyBytes) + } + if !bytes.Equal(derivRecipient.PublicKey().Bytes(), pubKeyBytes) { + t.Errorf("unexpected KEM sender bytes from seed: got %x, want %x", derivRecipient.PublicKey().Bytes(), pubKeyBytes) } recipient, err := NewRecipient(encap, kemRecipient, kdf, aead, info) @@ -304,22 +368,22 @@ func drawRandomInput(t *testing.T, r io.Reader) []byte { return b } -func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte, kem KEMSender) { +func setupDerandomizedEncap(t *testing.T, randBytes []byte, pk PublicKey) { t.Cleanup(func() { testingOnlyGenerateKey = nil testingOnlyEncapsulate = nil }) - switch kemID { - case dhkemP256, dhkemP384, dhkemP521, dhkemX25519: - r, err := NewKEMRecipientFromSeed(kemID, randBytes) + switch pk.KEM() { + case DHKEM(ecdh.P256()), DHKEM(ecdh.P384()), DHKEM(ecdh.P521()), DHKEM(ecdh.X25519()): + r, err := pk.KEM().DeriveKeyPair(randBytes) if err != nil { t.Fatal(err) } testingOnlyGenerateKey = func() *ecdh.PrivateKey { - return r.(*dhKEMRecipient).priv.(*ecdh.PrivateKey) + return r.(*dhKEMPrivateKey).priv.(*ecdh.PrivateKey) } case mlkem768: - pq := kem.(*mlkemSender).pq.(*mlkem.EncapsulationKey768) + pq := pk.(*mlkemPublicKey).pq.(*mlkem.EncapsulationKey768) testingOnlyEncapsulate = func() ([]byte, []byte) { ss, ct, err := mlkemtest.Encapsulate768(pq, randBytes) if err != nil { @@ -328,7 +392,7 @@ func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte, kem KE return ss, ct } case mlkem1024: - pq := kem.(*mlkemSender).pq.(*mlkem.EncapsulationKey1024) + pq := pk.(*mlkemPublicKey).pq.(*mlkem.EncapsulationKey1024) testingOnlyEncapsulate = func() ([]byte, []byte) { ss, ct, err := mlkemtest.Encapsulate1024(pq, randBytes) if err != nil { @@ -338,7 +402,7 @@ func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte, kem KE } case mlkem768X25519: pqRand, tRand := randBytes[:32], randBytes[32:] - pq := kem.(*hybridSender).pq.(*mlkem.EncapsulationKey768) + pq := pk.(*hybridPublicKey).pq.(*mlkem.EncapsulationKey768) k, err := ecdh.X25519().NewPrivateKey(tRand) if err != nil { t.Fatal(err) @@ -357,7 +421,7 @@ func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte, kem KE // The rest of randBytes are the following candidates for rejection // sampling, but they are never reached. pqRand, tRand := randBytes[:32], randBytes[32:64] - pq := kem.(*hybridSender).pq.(*mlkem.EncapsulationKey768) + pq := pk.(*hybridPublicKey).pq.(*mlkem.EncapsulationKey768) k, err := ecdh.P256().NewPrivateKey(tRand) if err != nil { t.Fatal(err) @@ -374,7 +438,7 @@ func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte, kem KE } case mlkem1024P384: pqRand, tRand := randBytes[:32], randBytes[32:] - pq := kem.(*hybridSender).pq.(*mlkem.EncapsulationKey1024) + pq := pk.(*hybridPublicKey).pq.(*mlkem.EncapsulationKey1024) k, err := ecdh.P384().NewPrivateKey(tRand) if err != nil { t.Fatal(err) @@ -390,7 +454,7 @@ func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte, kem KE return ss, ct } default: - t.Fatalf("unsupported KEM %04x", kemID) + t.Fatalf("unsupported KEM %04x", pk.KEM().ID()) } } @@ -416,4 +480,31 @@ func TestSingletons(t *testing.T) { if ExportOnly() != ExportOnly() { t.Error("ExportOnly() != ExportOnly()") } + if DHKEM(ecdh.P256()) != DHKEM(ecdh.P256()) { + t.Error("DHKEM(P-256) != DHKEM(P-256)") + } + if DHKEM(ecdh.P384()) != DHKEM(ecdh.P384()) { + t.Error("DHKEM(P-384) != DHKEM(P-384)") + } + if DHKEM(ecdh.P521()) != DHKEM(ecdh.P521()) { + t.Error("DHKEM(P-521) != DHKEM(P-521)") + } + if DHKEM(ecdh.X25519()) != DHKEM(ecdh.X25519()) { + t.Error("DHKEM(X25519) != DHKEM(X25519)") + } + if MLKEM768() != MLKEM768() { + t.Error("MLKEM768() != MLKEM768()") + } + if MLKEM1024() != MLKEM1024() { + t.Error("MLKEM1024() != MLKEM1024()") + } + if MLKEM768X25519() != MLKEM768X25519() { + t.Error("MLKEM768X25519() != MLKEM768X25519()") + } + if MLKEM768P256() != MLKEM768P256() { + t.Error("MLKEM768P256() != MLKEM768P256()") + } + if MLKEM1024P384() != MLKEM1024P384() { + t.Error("MLKEM1024P384() != MLKEM1024P384()") + } } diff --git a/src/crypto/internal/hpke/kem.go b/src/crypto/internal/hpke/kem.go index c787ef5c412..4aa87fc0b44 100644 --- a/src/crypto/internal/hpke/kem.go +++ b/src/crypto/internal/hpke/kem.go @@ -6,129 +6,90 @@ package hpke import ( "crypto/ecdh" - "crypto/mlkem" "crypto/rand" "encoding/binary" "errors" ) -const ( - dhkemP256 = 0x0010 // DHKEM(P-256, HKDF-SHA256) - dhkemP384 = 0x0011 // DHKEM(P-384, HKDF-SHA384) - dhkemP521 = 0x0012 // DHKEM(P-521, HKDF-SHA512) - dhkemX25519 = 0x0020 // DHKEM(X25519, HKDF-SHA256) -) - -// A KEMSender is an instantiation of a KEM (one of the three components of an -// HPKE ciphersuite) with an encapsulation key (i.e. the public key). -type KEMSender interface { +// A KEM is a Key Encapsulation Mechanism, one of the three components of an +// HPKE ciphersuite. +type KEM interface { // ID returns the HPKE KEM identifier. ID() uint16 + // GenerateKey generates a new key pair. + GenerateKey() (PrivateKey, error) + + // NewPublicKey deserializes a public key from bytes. + // + // It implements DeserializePublicKey, as defined in RFC 9180. + NewPublicKey([]byte) (PublicKey, error) + + // NewPrivateKey deserializes a private key from bytes. + // + // It implements DeserializePrivateKey, as defined in RFC 9180. + NewPrivateKey([]byte) (PrivateKey, error) + + // DeriveKeyPair derives a key pair from the given input keying material. + // + // It implements DeriveKeyPair, as defined in RFC 9180. + DeriveKeyPair(ikm []byte) (PrivateKey, error) + + encSize() int +} + +// NewKEM returns the KEM implementation for the given KEM ID. +// +// Applications are encouraged to use specific implementations like [DHKEM] or +// [MLKEM768X25519] instead, unless runtime agility is required. +func NewKEM(id uint16) (KEM, error) { + switch id { + case 0x0010: // DHKEM(P-256, HKDF-SHA256) + return DHKEM(ecdh.P256()), nil + case 0x0011: // DHKEM(P-384, HKDF-SHA384) + return DHKEM(ecdh.P384()), nil + case 0x0012: // DHKEM(P-521, HKDF-SHA512) + return DHKEM(ecdh.P521()), nil + case 0x0020: // DHKEM(X25519, HKDF-SHA256) + return DHKEM(ecdh.X25519()), nil + case 0x0041: // ML-KEM-768 + return MLKEM768(), nil + case 0x0042: // ML-KEM-1024 + return MLKEM1024(), nil + case 0x647a: // MLKEM768-X25519 + return MLKEM768X25519(), nil + case 0x0050: // MLKEM768-P256 + return MLKEM768P256(), nil + case 0x0051: // MLKEM1024-P384 + return MLKEM1024P384(), nil + default: + return nil, errors.New("unsupported KEM") + } +} + +// A PublicKey is an instantiation of a KEM (one of the three components of an +// HPKE ciphersuite) with an encapsulation key (i.e. the public key). +// +// A PublicKey is usually obtained from a method of the corresponding [KEM] or +// [PrivateKey], such as [KEM.NewPublicKey] or [PrivateKey.PublicKey]. +type PublicKey interface { + // KEM returns the instantiated KEM. + KEM() KEM + // Bytes returns the public key as the output of SerializePublicKey. Bytes() []byte encap() (sharedSecret, enc []byte, err error) } -// NewKEMSender implements DeserializePublicKey and returns a KEMSender -// for the given KEM ID and public key bytes. -// -// Applications are encouraged to use [ecdh.Curve.NewPublicKey] with -// [NewECDHSender] instead, unless runtime agility is required. -func NewKEMSender(id uint16, pub []byte) (KEMSender, error) { - switch id { - case dhkemP256: - k, err := ecdh.P256().NewPublicKey(pub) - if err != nil { - return nil, err - } - return NewECDHSender(k) - case dhkemP384: - k, err := ecdh.P384().NewPublicKey(pub) - if err != nil { - return nil, err - } - return NewECDHSender(k) - case dhkemP521: - k, err := ecdh.P521().NewPublicKey(pub) - if err != nil { - return nil, err - } - return NewECDHSender(k) - case dhkemX25519: - k, err := ecdh.X25519().NewPublicKey(pub) - if err != nil { - return nil, err - } - return NewECDHSender(k) - case mlkem768: - if len(pub) != mlkem.EncapsulationKeySize768 { - return nil, errors.New("invalid public key size") - } - pq, err := mlkem.NewEncapsulationKey768(pub) - if err != nil { - return nil, err - } - return NewMLKEMSender(pq) - case mlkem1024: - if len(pub) != mlkem.EncapsulationKeySize1024 { - return nil, errors.New("invalid public key size") - } - pq, err := mlkem.NewEncapsulationKey1024(pub) - if err != nil { - return nil, err - } - return NewMLKEMSender(pq) - case mlkem768X25519: - if len(pub) != mlkem.EncapsulationKeySize768+32 { - return nil, errors.New("invalid public key size") - } - pq, err := mlkem.NewEncapsulationKey768(pub[:mlkem.EncapsulationKeySize768]) - if err != nil { - return nil, err - } - k, err := ecdh.X25519().NewPublicKey(pub[mlkem.EncapsulationKeySize768:]) - if err != nil { - return nil, err - } - return NewHybridSender(k, pq) - case mlkem768P256: - if len(pub) != mlkem.EncapsulationKeySize768+65 { - return nil, errors.New("invalid public key size") - } - pq, err := mlkem.NewEncapsulationKey768(pub[:mlkem.EncapsulationKeySize768]) - if err != nil { - return nil, err - } - k, err := ecdh.P256().NewPublicKey(pub[mlkem.EncapsulationKeySize768:]) - if err != nil { - return nil, err - } - return NewHybridSender(k, pq) - case mlkem1024P384: - if len(pub) != mlkem.EncapsulationKeySize1024+97 { - return nil, errors.New("invalid public key size") - } - pq, err := mlkem.NewEncapsulationKey1024(pub[:mlkem.EncapsulationKeySize1024]) - if err != nil { - return nil, err - } - k, err := ecdh.P384().NewPublicKey(pub[mlkem.EncapsulationKeySize1024:]) - if err != nil { - return nil, err - } - return NewHybridSender(k, pq) - default: - return nil, errors.New("unsupported KEM") - } -} - -// A KEMRecipient is an instantiation of a KEM (one of the three components of +// A PrivateKey is an instantiation of a KEM (one of the three components of // an HPKE ciphersuite) with a decapsulation key (i.e. the secret key). -type KEMRecipient interface { - // ID returns the HPKE KEM identifier. - ID() uint16 +// +// A PrivateKey is usually obtained from a method of the corresponding [KEM], +// such as [KEM.GenerateKey] or [KEM.NewPrivateKey]. +type PrivateKey interface { + // KEM returns the instantiated KEM. + KEM() KEM // Bytes returns the private key as the output of SerializePrivateKey, as // defined in RFC 9180. @@ -137,117 +98,232 @@ type KEMRecipient interface { // This is a requirement of RFC 9180, Section 7.1.2. Bytes() ([]byte, error) - // KEMSender returns the corresponding KEMSender for this recipient. - KEMSender() KEMSender + // PublicKey returns the corresponding PublicKey. + PublicKey() PublicKey decap(enc []byte) (sharedSecret []byte, err error) } -// NewKEMRecipient implements DeserializePrivateKey, as defined in RFC 9180, and -// returns a KEMRecipient for the given KEM ID and private key bytes. -// -// Applications are encouraged to use [ecdh.Curve.NewPrivateKey] with -// [NewECDHRecipient] instead, unless runtime agility is required. -func NewKEMRecipient(id uint16, priv []byte) (KEMRecipient, error) { - switch id { - case dhkemP256: - k, err := ecdh.P256().NewPrivateKey(priv) - if err != nil { - return nil, err - } - return NewECDHRecipient(k) - case dhkemP384: - k, err := ecdh.P384().NewPrivateKey(priv) - if err != nil { - return nil, err - } - return NewECDHRecipient(k) - case dhkemP521: - k, err := ecdh.P521().NewPrivateKey(priv) - if err != nil { - return nil, err - } - return NewECDHRecipient(k) - case dhkemX25519: - k, err := ecdh.X25519().NewPrivateKey(priv) - if err != nil { - return nil, err - } - return NewECDHRecipient(k) - case mlkem768: - pq, err := mlkem.NewDecapsulationKey768(priv) - if err != nil { - return nil, err - } - return NewMLKEMRecipient(pq) - case mlkem1024: - pq, err := mlkem.NewDecapsulationKey1024(priv) - if err != nil { - return nil, err - } - return NewMLKEMRecipient(pq) - case mlkem768X25519, mlkem768P256, mlkem1024P384: - return newHybridRecipientFromSeed(id, priv) - default: - return nil, errors.New("unsupported KEM") - } +type dhKEM struct { + kdf KDF + id uint16 + curve ecdh.Curve + Nsecret uint16 + Nsk uint16 + Nenc int } -// NewKEMRecipientFromSeed implements DeriveKeyPair, as defined in RFC 9180, and -// returns a KEMRecipient for the given KEM ID and private key seed. -// -// Currently, it only supports the KEMs based on ECDH (DHKEM). -// -// TODO: rename to something about deriving. -func NewKEMRecipientFromSeed(id uint16, seed []byte) (KEMRecipient, error) { - // DeriveKeyPair from RFC 9180 Section 7.1.3. - var curve ecdh.Curve - var dh dhKEM - var Nsk uint16 - switch id { - case dhkemP256: - curve = ecdh.P256() - dh, _ = dhKEMForCurve(curve) - Nsk = 32 - case dhkemP384: - curve = ecdh.P384() - dh, _ = dhKEMForCurve(curve) - Nsk = 48 - case dhkemP521: - curve = ecdh.P521() - dh, _ = dhKEMForCurve(curve) - Nsk = 66 - case dhkemX25519: - curve = ecdh.X25519() - dh, _ = dhKEMForCurve(curve) - Nsk = 32 - // Do not implement the PQ KEMs for now, as the seed input is not - // stable yet. See https://github.com/hpkewg/hpke-pq/issues/30. - default: - return nil, errors.New("unsupported KEM") - } - suiteID := binary.BigEndian.AppendUint16([]byte("KEM"), dh.id) - prk, err := dh.kdf.labeledExtract(suiteID, nil, "dkp_prk", seed) +func (kem *dhKEM) extractAndExpand(dhKey, kemContext []byte) ([]byte, error) { + suiteID := binary.BigEndian.AppendUint16([]byte("KEM"), kem.id) + eaePRK, err := kem.kdf.labeledExtract(suiteID, nil, "eae_prk", dhKey) if err != nil { return nil, err } - if id == dhkemX25519 { - s, err := dh.kdf.labeledExpand(suiteID, prk, "sk", nil, Nsk) + return kem.kdf.labeledExpand(suiteID, eaePRK, "shared_secret", kemContext, kem.Nsecret) +} + +func (kem *dhKEM) ID() uint16 { + return kem.id +} + +func (kem *dhKEM) encSize() int { + return kem.Nenc +} + +var dhKEMP256 = &dhKEM{HKDFSHA256(), 0x0010, ecdh.P256(), 32, 32, 65} +var dhKEMP384 = &dhKEM{HKDFSHA384(), 0x0011, ecdh.P384(), 48, 48, 97} +var dhKEMP521 = &dhKEM{HKDFSHA512(), 0x0012, ecdh.P521(), 64, 66, 133} +var dhKEMX25519 = &dhKEM{HKDFSHA256(), 0x0020, ecdh.X25519(), 32, 32, 32} + +// DHKEM returns a KEM implementing one of +// +// - DHKEM(P-256, HKDF-SHA256) +// - DHKEM(P-384, HKDF-SHA384) +// - DHKEM(P-521, HKDF-SHA512) +// - DHKEM(X25519, HKDF-SHA256) +// +// depending on curve. +func DHKEM(curve ecdh.Curve) KEM { + switch curve { + case ecdh.P256(): + return dhKEMP256 + case ecdh.P384(): + return dhKEMP384 + case ecdh.P521(): + return dhKEMP521 + case ecdh.X25519(): + return dhKEMX25519 + default: + // The set of ecdh.Curve implementations is closed, because the + // interface has unexported methods. Therefore, this default case is + // only hit if a new curve is added that DHKEM doesn't support. + return unsupportedCurveKEM{} + } +} + +type unsupportedCurveKEM struct{} + +func (unsupportedCurveKEM) ID() uint16 { + return 0 +} +func (unsupportedCurveKEM) GenerateKey() (PrivateKey, error) { + return nil, errors.New("unsupported curve") +} +func (unsupportedCurveKEM) NewPublicKey([]byte) (PublicKey, error) { + return nil, errors.New("unsupported curve") +} +func (unsupportedCurveKEM) NewPrivateKey([]byte) (PrivateKey, error) { + return nil, errors.New("unsupported curve") +} +func (unsupportedCurveKEM) DeriveKeyPair([]byte) (PrivateKey, error) { + return nil, errors.New("unsupported curve") +} +func (unsupportedCurveKEM) encSize() int { + return 0 +} + +type dhKEMPublicKey struct { + kem *dhKEM + pub *ecdh.PublicKey +} + +// NewDHKEMPublicKey returns a PublicKey implementing +// +// - DHKEM(P-256, HKDF-SHA256) +// - DHKEM(P-384, HKDF-SHA384) +// - DHKEM(P-521, HKDF-SHA512) +// - DHKEM(X25519, HKDF-SHA256) +// +// depending on the underlying curve of pub ([ecdh.X25519], [ecdh.P256], +// [ecdh.P384], or [ecdh.P521]). +// +// This function is meant for applications that already have an instantiated +// crypto/ecdh public key. Otherwise, applications should use the +// [KEM.NewPublicKey] method of [DHKEM]. +func NewDHKEMPublicKey(pub *ecdh.PublicKey) (PublicKey, error) { + kem, ok := DHKEM(pub.Curve()).(*dhKEM) + if !ok { + return nil, errors.New("unsupported curve") + } + return &dhKEMPublicKey{ + kem: kem, + pub: pub, + }, nil +} + +func (kem *dhKEM) NewPublicKey(data []byte) (PublicKey, error) { + pub, err := kem.curve.NewPublicKey(data) + if err != nil { + return nil, err + } + return NewDHKEMPublicKey(pub) +} + +func (pk *dhKEMPublicKey) KEM() KEM { + return pk.kem +} + +func (pk *dhKEMPublicKey) Bytes() []byte { + return pk.pub.Bytes() +} + +// testingOnlyGenerateKey is only used during testing, to provide +// a fixed test key to use when checking the RFC 9180 vectors. +var testingOnlyGenerateKey func() *ecdh.PrivateKey + +func (pk *dhKEMPublicKey) encap() (sharedSecret []byte, encapPub []byte, err error) { + privEph, err := pk.pub.Curve().GenerateKey(rand.Reader) + if err != nil { + return nil, nil, err + } + if testingOnlyGenerateKey != nil { + privEph = testingOnlyGenerateKey() + } + dhVal, err := privEph.ECDH(pk.pub) + if err != nil { + return nil, nil, err + } + encPubEph := privEph.PublicKey().Bytes() + + encPubRecip := pk.pub.Bytes() + kemContext := append(encPubEph, encPubRecip...) + sharedSecret, err = pk.kem.extractAndExpand(dhVal, kemContext) + if err != nil { + return nil, nil, err + } + return sharedSecret, encPubEph, nil +} + +type dhKEMPrivateKey struct { + kem *dhKEM + priv ecdh.KeyExchanger +} + +// NewDHKEMPrivateKey returns a PrivateKey implementing +// +// - DHKEM(P-256, HKDF-SHA256) +// - DHKEM(P-384, HKDF-SHA384) +// - DHKEM(P-521, HKDF-SHA512) +// - DHKEM(X25519, HKDF-SHA256) +// +// depending on the underlying curve of priv ([ecdh.X25519], [ecdh.P256], +// [ecdh.P384], or [ecdh.P521]). +// +// This function is meant for applications that already have an instantiated +// crypto/ecdh private key, or another implementation of a [ecdh.KeyExchanger] +// (e.g. a hardware key). Otherwise, applications should use the +// [KEM.NewPrivateKey] method of [DHKEM]. +func NewDHKEMPrivateKey(priv ecdh.KeyExchanger) (PrivateKey, error) { + kem, ok := DHKEM(priv.Curve()).(*dhKEM) + if !ok { + return nil, errors.New("unsupported curve") + } + return &dhKEMPrivateKey{ + kem: kem, + priv: priv, + }, nil +} + +func (kem *dhKEM) GenerateKey() (PrivateKey, error) { + priv, err := kem.curve.GenerateKey(rand.Reader) + if err != nil { + return nil, err + } + return NewDHKEMPrivateKey(priv) +} + +func (kem *dhKEM) NewPrivateKey(ikm []byte) (PrivateKey, error) { + priv, err := kem.curve.NewPrivateKey(ikm) + if err != nil { + return nil, err + } + return NewDHKEMPrivateKey(priv) +} + +func (kem *dhKEM) DeriveKeyPair(ikm []byte) (PrivateKey, error) { + // DeriveKeyPair from RFC 9180 Section 7.1.3. + suiteID := binary.BigEndian.AppendUint16([]byte("KEM"), kem.id) + prk, err := kem.kdf.labeledExtract(suiteID, nil, "dkp_prk", ikm) + if err != nil { + return nil, err + } + if kem == dhKEMX25519 { + s, err := kem.kdf.labeledExpand(suiteID, prk, "sk", nil, kem.Nsk) if err != nil { return nil, err } - return NewKEMRecipient(id, s) + return kem.NewPrivateKey(s) } var counter uint8 for counter < 4 { - s, err := dh.kdf.labeledExpand(suiteID, prk, "candidate", []byte{counter}, Nsk) + s, err := kem.kdf.labeledExpand(suiteID, prk, "candidate", []byte{counter}, kem.Nsk) if err != nil { return nil, err } - if id == dhkemP521 { + if kem == dhKEMP521 { s[0] &= 0x01 } - r, err := NewKEMRecipient(id, s) + r, err := kem.NewPrivateKey(s) if err != nil { counter++ continue @@ -257,136 +333,11 @@ func NewKEMRecipientFromSeed(id uint16, seed []byte) (KEMRecipient, error) { panic("chance of four rejections is < 2^-128") } -type dhKEM struct { - kdf KDF - id uint16 - nSecret uint16 +func (k *dhKEMPrivateKey) KEM() KEM { + return k.kem } -func (dh *dhKEM) extractAndExpand(dhKey, kemContext []byte) ([]byte, error) { - suiteID := binary.BigEndian.AppendUint16([]byte("KEM"), dh.id) - eaePRK, err := dh.kdf.labeledExtract(suiteID, nil, "eae_prk", dhKey) - if err != nil { - return nil, err - } - return dh.kdf.labeledExpand(suiteID, eaePRK, "shared_secret", kemContext, dh.nSecret) -} - -func (dh *dhKEM) ID() uint16 { - return dh.id -} - -type dhKEMSender struct { - dhKEM - pub *ecdh.PublicKey -} - -// NewECDHSender returns a KEMSender implementing one of -// -// - DHKEM(P-256, HKDF-SHA256) -// - DHKEM(P-384, HKDF-SHA384) -// - DHKEM(P-521, HKDF-SHA512) -// - DHKEM(X25519, HKDF-SHA256) -// -// depending on the underlying curve of the provided public key. -func NewECDHSender(pub *ecdh.PublicKey) (KEMSender, error) { - dhKEM, err := dhKEMForCurve(pub.Curve()) - if err != nil { - return nil, err - } - return &dhKEMSender{ - pub: pub, - dhKEM: dhKEM, - }, nil -} - -func dhKEMForCurve(curve ecdh.Curve) (dhKEM, error) { - switch curve { - case ecdh.P256(): - return dhKEM{ - kdf: HKDFSHA256(), - id: dhkemP256, - nSecret: 32, - }, nil - case ecdh.P384(): - return dhKEM{ - kdf: HKDFSHA384(), - id: dhkemP384, - nSecret: 48, - }, nil - case ecdh.P521(): - return dhKEM{ - kdf: HKDFSHA512(), - id: dhkemP521, - nSecret: 64, - }, nil - case ecdh.X25519(): - return dhKEM{ - kdf: HKDFSHA256(), - id: dhkemX25519, - nSecret: 32, - }, nil - default: - return dhKEM{}, errors.New("unsupported curve") - } -} - -func (dh *dhKEMSender) Bytes() []byte { - return dh.pub.Bytes() -} - -// testingOnlyGenerateKey is only used during testing, to provide -// a fixed test key to use when checking the RFC 9180 vectors. -var testingOnlyGenerateKey func() *ecdh.PrivateKey - -func (dh *dhKEMSender) encap() (sharedSecret []byte, encapPub []byte, err error) { - privEph, err := dh.pub.Curve().GenerateKey(rand.Reader) - if err != nil { - return nil, nil, err - } - if testingOnlyGenerateKey != nil { - privEph = testingOnlyGenerateKey() - } - dhVal, err := privEph.ECDH(dh.pub) - if err != nil { - return nil, nil, err - } - encPubEph := privEph.PublicKey().Bytes() - - encPubRecip := dh.pub.Bytes() - kemContext := append(encPubEph, encPubRecip...) - sharedSecret, err = dh.extractAndExpand(dhVal, kemContext) - if err != nil { - return nil, nil, err - } - return sharedSecret, encPubEph, nil -} - -type dhKEMRecipient struct { - dhKEM - priv ecdh.KeyExchanger -} - -// NewECDHRecipient returns a KEMRecipient implementing one of -// -// - DHKEM(P-256, HKDF-SHA256) -// - DHKEM(P-384, HKDF-SHA384) -// - DHKEM(P-521, HKDF-SHA512) -// - DHKEM(X25519, HKDF-SHA256) -// -// depending on the underlying curve of the provided private key. -func NewECDHRecipient(priv ecdh.KeyExchanger) (KEMRecipient, error) { - dhKEM, err := dhKEMForCurve(priv.Curve()) - if err != nil { - return nil, err - } - return &dhKEMRecipient{ - priv: priv, - dhKEM: dhKEM, - }, nil -} - -func (dh *dhKEMRecipient) Bytes() ([]byte, error) { +func (k *dhKEMPrivateKey) Bytes() ([]byte, error) { // Bizarrely, RFC 9180, Section 7.1.2 says SerializePrivateKey MUST clamp // the output, which I thought we all agreed to instead do as part of the DH // function, letting private keys be random bytes. @@ -396,11 +347,11 @@ func (dh *dhKEMRecipient) Bytes() ([]byte, error) { // necessarily match the NewPrivateKey input. // // I'm sure this will not lead to any unexpected behavior or interop issue. - priv, ok := dh.priv.(*ecdh.PrivateKey) + priv, ok := k.priv.(*ecdh.PrivateKey) if !ok { return nil, errors.New("ecdh: private key does not support Bytes") } - if dh.id == dhkemX25519 { + if k.kem == dhKEMX25519 { b := priv.Bytes() b[0] &= 248 b[31] &= 127 @@ -410,22 +361,22 @@ func (dh *dhKEMRecipient) Bytes() ([]byte, error) { return priv.Bytes(), nil } -func (dh *dhKEMRecipient) KEMSender() KEMSender { - return &dhKEMSender{ - pub: dh.priv.PublicKey(), - dhKEM: dh.dhKEM, +func (k *dhKEMPrivateKey) PublicKey() PublicKey { + return &dhKEMPublicKey{ + kem: k.kem, + pub: k.priv.PublicKey(), } } -func (dh *dhKEMRecipient) decap(encPubEph []byte) ([]byte, error) { - pubEph, err := dh.priv.Curve().NewPublicKey(encPubEph) +func (k *dhKEMPrivateKey) decap(encPubEph []byte) ([]byte, error) { + pubEph, err := k.priv.Curve().NewPublicKey(encPubEph) if err != nil { return nil, err } - dhVal, err := dh.priv.ECDH(pubEph) + dhVal, err := k.priv.ECDH(pubEph) if err != nil { return nil, err } - kemContext := append(encPubEph, dh.priv.PublicKey().Bytes()...) - return dh.extractAndExpand(dhVal, kemContext) + kemContext := append(encPubEph, k.priv.PublicKey().Bytes()...) + return k.kem.extractAndExpand(dhVal, kemContext) } diff --git a/src/crypto/internal/hpke/pq.go b/src/crypto/internal/hpke/pq.go index 516f8e43cdb..dfcd084ab71 100644 --- a/src/crypto/internal/hpke/pq.go +++ b/src/crypto/internal/hpke/pq.go @@ -11,127 +11,221 @@ import ( "crypto/mlkem" "crypto/rand" "crypto/sha3" + "encoding/binary" "errors" ) -const ( - mlkem768 = 0x0041 // ML-KEM-768 - mlkem1024 = 0x0042 // ML-KEM-1024 - mlkem768X25519 = 0x647a // MLKEM768-X25519 - mlkem768P256 = 0x0050 // MLKEM768-P256 - mlkem1024P384 = 0x0051 // MLKEM1024-P384 -) - -var mlkem768X25519Hybrid = hybrid{ - id: mlkem768X25519, +var mlkem768X25519 = &hybridKEM{ + id: 0x647a, label: /**/ `\./` + /* */ `/^\`, + curve: ecdh.X25519(), + + curveSeedSize: 32, + curvePointSize: 32, + pqEncapsKeySize: mlkem.EncapsulationKeySize768, + pqCiphertextSize: mlkem.CiphertextSize768, + + pqNewPublicKey: func(data []byte) (crypto.Encapsulator, error) { + return mlkem.NewEncapsulationKey768(data) + }, + pqNewPrivateKey: func(data []byte) (crypto.Decapsulator, error) { + return mlkem.NewDecapsulationKey768(data) + }, + pqGenerateKey: func() (crypto.Decapsulator, error) { + return mlkem.GenerateKey768() + }, } -var mlkem768P256Hybrid = hybrid{ - id: mlkem768P256, +// MLKEM768X25519 returns a KEM implementing MLKEM768-X25519 (a.k.a. X-Wing) +// from draft-ietf-hpke-pq. +func MLKEM768X25519() KEM { + return mlkem768X25519 +} + +var mlkem768P256 = &hybridKEM{ + id: 0x0050, label: "MLKEM768-P256", + curve: ecdh.P256(), + + curveSeedSize: 32, + curvePointSize: 65, + pqEncapsKeySize: mlkem.EncapsulationKeySize768, + pqCiphertextSize: mlkem.CiphertextSize768, + + pqNewPublicKey: func(data []byte) (crypto.Encapsulator, error) { + return mlkem.NewEncapsulationKey768(data) + }, + pqNewPrivateKey: func(data []byte) (crypto.Decapsulator, error) { + return mlkem.NewDecapsulationKey768(data) + }, + pqGenerateKey: func() (crypto.Decapsulator, error) { + return mlkem.GenerateKey768() + }, } -var mlkem1024P384Hybrid = hybrid{ - id: mlkem1024P384, +// MLKEM768P256 returns a KEM implementing MLKEM768-P256 from draft-ietf-hpke-pq. +func MLKEM768P256() KEM { + return mlkem768P256 +} + +var mlkem1024P384 = &hybridKEM{ + id: 0x0051, label: "MLKEM1024-P384", + curve: ecdh.P384(), + + curveSeedSize: 48, + curvePointSize: 97, + pqEncapsKeySize: mlkem.EncapsulationKeySize1024, + pqCiphertextSize: mlkem.CiphertextSize1024, + + pqNewPublicKey: func(data []byte) (crypto.Encapsulator, error) { + return mlkem.NewEncapsulationKey1024(data) + }, + pqNewPrivateKey: func(data []byte) (crypto.Decapsulator, error) { + return mlkem.NewDecapsulationKey1024(data) + }, + pqGenerateKey: func() (crypto.Decapsulator, error) { + return mlkem.GenerateKey1024() + }, } -type hybrid struct { +// MLKEM1024P384 returns a KEM implementing MLKEM1024-P384 from draft-ietf-hpke-pq. +func MLKEM1024P384() KEM { + return mlkem1024P384 +} + +type hybridKEM struct { id uint16 label string + curve ecdh.Curve + + curveSeedSize int + curvePointSize int + pqEncapsKeySize int + pqCiphertextSize int + + pqNewPublicKey func(data []byte) (crypto.Encapsulator, error) + pqNewPrivateKey func(data []byte) (crypto.Decapsulator, error) + pqGenerateKey func() (crypto.Decapsulator, error) } -func (x *hybrid) ID() uint16 { - return x.id +func (kem *hybridKEM) ID() uint16 { + return kem.id } -func (x *hybrid) sharedSecret(ssPQ, ssT, ctT, ekT []byte) []byte { +func (kem *hybridKEM) encSize() int { + return kem.pqCiphertextSize + kem.curvePointSize +} + +func (kem *hybridKEM) sharedSecret(ssPQ, ssT, ctT, ekT []byte) []byte { h := sha3.New256() h.Write(ssPQ) h.Write(ssT) h.Write(ctT) h.Write(ekT) - h.Write([]byte(x.label)) + h.Write([]byte(kem.label)) return h.Sum(nil) } -type hybridSender struct { - hybrid - t *ecdh.PublicKey - pq crypto.Encapsulator +type hybridPublicKey struct { + kem *hybridKEM + t *ecdh.PublicKey + pq crypto.Encapsulator } -// NewHybridSender returns a KEMSender implementing one of +// NewHybridPublicKey returns a PublicKey implementing one of // // - MLKEM768-X25519 (a.k.a. X-Wing) // - MLKEM768-P256 // - MLKEM1024-P384 // // from draft-ietf-hpke-pq, depending on the underlying curve of t -// ([ecdh.X25519], [ecdh.P256], or [ecdh.P384]) and the type of pq -// (either *[mlkem.EncapsulationKey768] or *[mlkem.EncapsulationKey1024]). -func NewHybridSender(t *ecdh.PublicKey, pq crypto.Encapsulator) (KEMSender, error) { +// ([ecdh.X25519], [ecdh.P256], or [ecdh.P384]) and the type of pq (either +// *[mlkem.EncapsulationKey768] or *[mlkem.EncapsulationKey1024]). +// +// This function is meant for applications that already have instantiated +// crypto/ecdh and crypto/mlkem public keys. Otherwise, applications should use +// the [KEM.NewPublicKey] method of e.g. [MLKEM768X25519]. +func NewHybridPublicKey(pq crypto.Encapsulator, t *ecdh.PublicKey) (PublicKey, error) { switch t.Curve() { case ecdh.X25519(): if _, ok := pq.(*mlkem.EncapsulationKey768); !ok { return nil, errors.New("invalid PQ KEM for X25519 hybrid") } - return &hybridSender{mlkem768X25519Hybrid, t, pq}, nil + return &hybridPublicKey{mlkem768X25519, t, pq}, nil case ecdh.P256(): if _, ok := pq.(*mlkem.EncapsulationKey768); !ok { return nil, errors.New("invalid PQ KEM for P-256 hybrid") } - return &hybridSender{mlkem768P256Hybrid, t, pq}, nil + return &hybridPublicKey{mlkem768P256, t, pq}, nil case ecdh.P384(): if _, ok := pq.(*mlkem.EncapsulationKey1024); !ok { return nil, errors.New("invalid PQ KEM for P-384 hybrid") } - return &hybridSender{mlkem1024P384Hybrid, t, pq}, nil + return &hybridPublicKey{mlkem1024P384, t, pq}, nil default: return nil, errors.New("unsupported curve") } } -func (s *hybridSender) Bytes() []byte { - return append(s.pq.Bytes(), s.t.Bytes()...) +func (kem *hybridKEM) NewPublicKey(data []byte) (PublicKey, error) { + if len(data) != kem.pqEncapsKeySize+kem.curvePointSize { + return nil, errors.New("invalid public key size") + } + pq, err := kem.pqNewPublicKey(data[:kem.pqEncapsKeySize]) + if err != nil { + return nil, err + } + k, err := kem.curve.NewPublicKey(data[kem.pqEncapsKeySize:]) + if err != nil { + return nil, err + } + return NewHybridPublicKey(pq, k) +} + +func (pk *hybridPublicKey) KEM() KEM { + return pk.kem +} + +func (pk *hybridPublicKey) Bytes() []byte { + return append(pk.pq.Bytes(), pk.t.Bytes()...) } var testingOnlyEncapsulate func() (ss, ct []byte) -func (s *hybridSender) encap() (sharedSecret []byte, encapPub []byte, err error) { - skE, err := s.t.Curve().GenerateKey(rand.Reader) +func (pk *hybridPublicKey) encap() (sharedSecret []byte, encapPub []byte, err error) { + skE, err := pk.t.Curve().GenerateKey(rand.Reader) if err != nil { return nil, nil, err } if testingOnlyGenerateKey != nil { skE = testingOnlyGenerateKey() } - ssT, err := skE.ECDH(s.t) + ssT, err := skE.ECDH(pk.t) if err != nil { return nil, nil, err } ctT := skE.PublicKey().Bytes() - ssPQ, ctPQ := s.pq.Encapsulate() + ssPQ, ctPQ := pk.pq.Encapsulate() if testingOnlyEncapsulate != nil { ssPQ, ctPQ = testingOnlyEncapsulate() } - ss := s.sharedSecret(ssPQ, ssT, ctT, s.t.Bytes()) + ss := pk.kem.sharedSecret(ssPQ, ssT, ctT, pk.t.Bytes()) ct := append(ctPQ, ctT...) return ss, ct, nil } -type hybridRecipient struct { - hybrid +type hybridPrivateKey struct { + kem *hybridKEM seed []byte // can be nil t ecdh.KeyExchanger pq crypto.Decapsulator } -// NewHybridRecipient returns a KEMRecipient implementing +// NewHybridPrivateKey returns a PrivateKey implementing // // - MLKEM768-X25519 (a.k.a. X-Wing) // - MLKEM768-P256 @@ -140,11 +234,23 @@ type hybridRecipient struct { // from draft-ietf-hpke-pq, depending on the underlying curve of t // ([ecdh.X25519], [ecdh.P256], or [ecdh.P384]) and the type of pq.Encapsulator() // (either *[mlkem.EncapsulationKey768] or *[mlkem.EncapsulationKey1024]). -func NewHybridRecipient(t ecdh.KeyExchanger, pq crypto.Decapsulator) (KEMRecipient, error) { - return newHybridRecipient(t, pq, nil) +// +// This function is meant for applications that already have instantiated +// crypto/ecdh and crypto/mlkem private keys, or another implementation of a +// [ecdh.KeyExchanger] and [crypto.Decapsulator] (e.g. a hardware key). +// Otherwise, applications should use the [KEM.NewPrivateKey] method of e.g. +// [MLKEM768X25519]. +func NewHybridPrivateKey(pq crypto.Decapsulator, t ecdh.KeyExchanger) (PrivateKey, error) { + return newHybridPrivateKey(pq, t, nil) } -func newHybridRecipientFromSeed(id uint16, priv []byte) (KEMRecipient, error) { +func (kem *hybridKEM) GenerateKey() (PrivateKey, error) { + seed := make([]byte, 32) + rand.Read(seed) + return kem.NewPrivateKey(seed) +} + +func (kem *hybridKEM) NewPrivateKey(priv []byte) (PrivateKey, error) { if len(priv) != 32 { return nil, errors.New("hpke: invalid hybrid KEM secret length") } @@ -154,200 +260,256 @@ func newHybridRecipientFromSeed(id uint16, priv []byte) (KEMRecipient, error) { seedPQ := make([]byte, mlkem.SeedSize) s.Read(seedPQ) - - var pq crypto.Decapsulator - switch id { - case mlkem768X25519, mlkem768P256: - sk, err := mlkem.NewDecapsulationKey768(seedPQ) - if err != nil { - return nil, err - } - pq = sk - case mlkem1024P384: - sk, err := mlkem.NewDecapsulationKey1024(seedPQ) - if err != nil { - return nil, err - } - pq = sk - default: - return nil, errors.New("hpke: invalid hybrid KEM ID") - } - - var seedT []byte - var curve ecdh.Curve - switch id { - case mlkem768X25519: - seedT = make([]byte, 32) - curve = ecdh.X25519() - case mlkem768P256: - seedT = make([]byte, 32) - curve = ecdh.P256() - case mlkem1024P384: - seedT = make([]byte, 48) - curve = ecdh.P384() - default: - return nil, errors.New("hpke: invalid hybrid KEM ID") + pq, err := kem.pqNewPrivateKey(seedPQ) + if err != nil { + return nil, err } + seedT := make([]byte, kem.curveSeedSize) for { s.Read(seedT) - k, err := curve.NewPrivateKey(seedT) + k, err := kem.curve.NewPrivateKey(seedT) if err != nil { continue } - return newHybridRecipient(k, pq, priv) + return newHybridPrivateKey(pq, k, priv) } } -func newHybridRecipient(t ecdh.KeyExchanger, pq crypto.Decapsulator, seed []byte) (KEMRecipient, error) { +func newHybridPrivateKey(pq crypto.Decapsulator, t ecdh.KeyExchanger, seed []byte) (PrivateKey, error) { switch t.Curve() { case ecdh.X25519(): if _, ok := pq.Encapsulator().(*mlkem.EncapsulationKey768); !ok { return nil, errors.New("invalid PQ KEM for X25519 hybrid") } - return &hybridRecipient{mlkem768X25519Hybrid, bytes.Clone(seed), t, pq}, nil + return &hybridPrivateKey{mlkem768X25519, bytes.Clone(seed), t, pq}, nil case ecdh.P256(): if _, ok := pq.Encapsulator().(*mlkem.EncapsulationKey768); !ok { return nil, errors.New("invalid PQ KEM for P-256 hybrid") } - return &hybridRecipient{mlkem768P256Hybrid, bytes.Clone(seed), t, pq}, nil + return &hybridPrivateKey{mlkem768P256, bytes.Clone(seed), t, pq}, nil case ecdh.P384(): if _, ok := pq.Encapsulator().(*mlkem.EncapsulationKey1024); !ok { return nil, errors.New("invalid PQ KEM for P-384 hybrid") } - return &hybridRecipient{mlkem1024P384Hybrid, bytes.Clone(seed), t, pq}, nil + return &hybridPrivateKey{mlkem1024P384, bytes.Clone(seed), t, pq}, nil default: return nil, errors.New("unsupported curve") } } -func (r *hybridRecipient) Bytes() ([]byte, error) { - if r.seed == nil { +func (kem *hybridKEM) DeriveKeyPair(ikm []byte) (PrivateKey, error) { + suiteID := binary.BigEndian.AppendUint16([]byte("KEM"), kem.id) + dk, err := SHAKE256().labeledDerive(suiteID, ikm, "DeriveKeyPair", nil, 32) + if err != nil { + return nil, err + } + return kem.NewPrivateKey(dk) +} + +func (k *hybridPrivateKey) KEM() KEM { + return k.kem +} + +func (k *hybridPrivateKey) Bytes() ([]byte, error) { + if k.seed == nil { return nil, errors.New("private key seed not available") } - return r.seed, nil + return k.seed, nil } -func (r *hybridRecipient) KEMSender() KEMSender { - return &hybridSender{ - hybrid: r.hybrid, - t: r.t.PublicKey(), - pq: r.pq.Encapsulator(), +func (k *hybridPrivateKey) PublicKey() PublicKey { + return &hybridPublicKey{ + kem: k.kem, + t: k.t.PublicKey(), + pq: k.pq.Encapsulator(), } } -func (r *hybridRecipient) decap(enc []byte) ([]byte, error) { - var ctPQ, ctT []byte - switch r.id { - case mlkem768X25519: - if len(enc) != mlkem.CiphertextSize768+32 { - return nil, errors.New("invalid encapsulated key size") - } - ctPQ, ctT = enc[:mlkem.CiphertextSize768], enc[mlkem.CiphertextSize768:] - case mlkem768P256: - if len(enc) != mlkem.CiphertextSize768+65 { - return nil, errors.New("invalid encapsulated key size") - } - ctPQ, ctT = enc[:mlkem.CiphertextSize768], enc[mlkem.CiphertextSize768:] - case mlkem1024P384: - if len(enc) != mlkem.CiphertextSize1024+97 { - return nil, errors.New("invalid encapsulated key size") - } - ctPQ, ctT = enc[:mlkem.CiphertextSize1024], enc[mlkem.CiphertextSize1024:] - default: - return nil, errors.New("internal error: unsupported KEM") +func (k *hybridPrivateKey) decap(enc []byte) ([]byte, error) { + if len(enc) != k.kem.pqCiphertextSize+k.kem.curvePointSize { + return nil, errors.New("invalid encapsulated key size") } - ssPQ, err := r.pq.Decapsulate(ctPQ) + ctPQ, ctT := enc[:k.kem.pqCiphertextSize], enc[k.kem.pqCiphertextSize:] + ssPQ, err := k.pq.Decapsulate(ctPQ) if err != nil { return nil, err } - pub, err := r.t.Curve().NewPublicKey(ctT) + pub, err := k.t.Curve().NewPublicKey(ctT) if err != nil { return nil, err } - ssT, err := r.t.ECDH(pub) + ssT, err := k.t.ECDH(pub) if err != nil { return nil, err } - ss := r.sharedSecret(ssPQ, ssT, ctT, r.t.PublicKey().Bytes()) + ss := k.kem.sharedSecret(ssPQ, ssT, ctT, k.t.PublicKey().Bytes()) return ss, nil } -type mlkemSender struct { - id uint16 - pq interface { - Bytes() []byte - Encapsulate() (sharedKey []byte, ciphertext []byte) - } +var mlkem768 = &mlkemKEM{ + id: 0x0041, + ciphertextSize: mlkem.CiphertextSize768, + newPublicKey: func(data []byte) (crypto.Encapsulator, error) { + return mlkem.NewEncapsulationKey768(data) + }, + newPrivateKey: func(data []byte) (crypto.Decapsulator, error) { + return mlkem.NewDecapsulationKey768(data) + }, + generateKey: func() (crypto.Decapsulator, error) { + return mlkem.GenerateKey768() + }, } -// NewMLKEMSender returns a KEMSender implementing ML-KEM-768 or ML-KEM-1024 from -// draft-ietf-hpke-pq. pub must be either a *[mlkem.EncapsulationKey768] or a -// *[mlkem.EncapsulationKey1024]. -func NewMLKEMSender(pub crypto.Encapsulator) (KEMSender, error) { +// MLKEM768 returns a KEM implementing ML-KEM-768 from draft-ietf-hpke-pq. +func MLKEM768() KEM { + return mlkem768 +} + +var mlkem1024 = &mlkemKEM{ + id: 0x0042, + ciphertextSize: mlkem.CiphertextSize1024, + newPublicKey: func(data []byte) (crypto.Encapsulator, error) { + return mlkem.NewEncapsulationKey1024(data) + }, + newPrivateKey: func(data []byte) (crypto.Decapsulator, error) { + return mlkem.NewDecapsulationKey1024(data) + }, + generateKey: func() (crypto.Decapsulator, error) { + return mlkem.GenerateKey1024() + }, +} + +// MLKEM1024 returns a KEM implementing ML-KEM-1024 from draft-ietf-hpke-pq. +func MLKEM1024() KEM { + return mlkem1024 +} + +type mlkemKEM struct { + id uint16 + ciphertextSize int + newPublicKey func(data []byte) (crypto.Encapsulator, error) + newPrivateKey func(data []byte) (crypto.Decapsulator, error) + generateKey func() (crypto.Decapsulator, error) +} + +func (kem *mlkemKEM) ID() uint16 { + return kem.id +} + +func (kem *mlkemKEM) encSize() int { + return kem.ciphertextSize +} + +type mlkemPublicKey struct { + kem *mlkemKEM + pq crypto.Encapsulator +} + +// NewMLKEMPublicKey returns a KEMPublicKey implementing +// +// - ML-KEM-768 +// - ML-KEM-1024 +// +// from draft-ietf-hpke-pq, depending on the type of pub +// (*[mlkem.EncapsulationKey768] or *[mlkem.EncapsulationKey1024]). +// +// This function is meant for applications that already have an instantiated +// crypto/mlkem public key. Otherwise, applications should use the +// [KEM.NewPublicKey] method of e.g. [MLKEM768]. +func NewMLKEMPublicKey(pub crypto.Encapsulator) (PublicKey, error) { switch pub.(type) { case *mlkem.EncapsulationKey768: - return &mlkemSender{ - id: mlkem768, - pq: pub, - }, nil + return &mlkemPublicKey{mlkem768, pub}, nil case *mlkem.EncapsulationKey1024: - return &mlkemSender{ - id: mlkem1024, - pq: pub, - }, nil + return &mlkemPublicKey{mlkem1024, pub}, nil default: return nil, errors.New("unsupported public key type") } } -func (s *mlkemSender) ID() uint16 { - return s.id +func (kem *mlkemKEM) NewPublicKey(data []byte) (PublicKey, error) { + pq, err := kem.newPublicKey(data) + if err != nil { + return nil, err + } + return NewMLKEMPublicKey(pq) } -func (s *mlkemSender) Bytes() []byte { - return s.pq.Bytes() +func (pk *mlkemPublicKey) KEM() KEM { + return pk.kem } -func (s *mlkemSender) encap() (sharedSecret []byte, encapPub []byte, err error) { - ss, ct := s.pq.Encapsulate() +func (pk *mlkemPublicKey) Bytes() []byte { + return pk.pq.Bytes() +} + +func (pk *mlkemPublicKey) encap() (sharedSecret []byte, encapPub []byte, err error) { + ss, ct := pk.pq.Encapsulate() if testingOnlyEncapsulate != nil { ss, ct = testingOnlyEncapsulate() } return ss, ct, nil } -type mlkemRecipient struct { - id uint16 - pq crypto.Decapsulator +type mlkemPrivateKey struct { + kem *mlkemKEM + pq crypto.Decapsulator } -// NewMLKEMRecipient returns a KEMRecipient implementing ML-KEM-768 or ML-KEM-1024 -// from draft-ietf-hpke-pq. priv.Encapsulator() must return either a -// *[mlkem.EncapsulationKey768] or a *[mlkem.EncapsulationKey1024]. -func NewMLKEMRecipient(priv crypto.Decapsulator) (KEMRecipient, error) { +// NewMLKEMPrivateKey returns a KEMPrivateKey implementing +// +// - ML-KEM-768 +// - ML-KEM-1024 +// +// from draft-ietf-hpke-pq, depending on the type of priv.Encapsulator() +// (either *[mlkem.EncapsulationKey768] or *[mlkem.EncapsulationKey1024]). +// +// This function is meant for applications that already have an instantiated +// crypto/mlkem private key. Otherwise, applications should use the +// [KEM.NewPrivateKey] method of e.g. [MLKEM768]. +func NewMLKEMPrivateKey(priv crypto.Decapsulator) (PrivateKey, error) { switch priv.Encapsulator().(type) { case *mlkem.EncapsulationKey768: - return &mlkemRecipient{ - id: mlkem768, - pq: priv, - }, nil + return &mlkemPrivateKey{mlkem768, priv}, nil case *mlkem.EncapsulationKey1024: - return &mlkemRecipient{ - id: mlkem1024, - pq: priv, - }, nil + return &mlkemPrivateKey{mlkem1024, priv}, nil default: return nil, errors.New("unsupported public key type") } } -func (r *mlkemRecipient) ID() uint16 { - return r.id +func (kem *mlkemKEM) GenerateKey() (PrivateKey, error) { + pq, err := kem.generateKey() + if err != nil { + return nil, err + } + return NewMLKEMPrivateKey(pq) } -func (r *mlkemRecipient) Bytes() ([]byte, error) { - pq, ok := r.pq.(interface { +func (kem *mlkemKEM) NewPrivateKey(priv []byte) (PrivateKey, error) { + pq, err := kem.newPrivateKey(priv) + if err != nil { + return nil, err + } + return NewMLKEMPrivateKey(pq) +} + +func (kem *mlkemKEM) DeriveKeyPair(ikm []byte) (PrivateKey, error) { + suiteID := binary.BigEndian.AppendUint16([]byte("KEM"), kem.id) + dk, err := SHAKE256().labeledDerive(suiteID, ikm, "DeriveKeyPair", nil, 64) + if err != nil { + return nil, err + } + return kem.NewPrivateKey(dk) +} + +func (k *mlkemPrivateKey) KEM() KEM { + return k.kem +} + +func (k *mlkemPrivateKey) Bytes() ([]byte, error) { + pq, ok := k.pq.(interface { Bytes() []byte }) if !ok { @@ -356,26 +518,13 @@ func (r *mlkemRecipient) Bytes() ([]byte, error) { return pq.Bytes(), nil } -func (r *mlkemRecipient) KEMSender() KEMSender { - s := &mlkemSender{ - id: r.id, - pq: r.pq.Encapsulator(), +func (k *mlkemPrivateKey) PublicKey() PublicKey { + return &mlkemPublicKey{ + kem: k.kem, + pq: k.pq.Encapsulator(), } - return s } -func (r *mlkemRecipient) decap(enc []byte) ([]byte, error) { - switch r.id { - case mlkem768: - if len(enc) != mlkem.CiphertextSize768 { - return nil, errors.New("invalid encapsulated key size") - } - case mlkem1024: - if len(enc) != mlkem.CiphertextSize1024 { - return nil, errors.New("invalid encapsulated key size") - } - default: - return nil, errors.New("internal error: unsupported KEM") - } - return r.pq.Decapsulate(enc) +func (k *mlkemPrivateKey) decap(enc []byte) ([]byte, error) { + return k.pq.Decapsulate(enc) } diff --git a/src/crypto/internal/hpke/testdata/hpke-pq.json b/src/crypto/internal/hpke/testdata/hpke-pq.json index fecce18ee55..d58e79b26a6 100644 --- a/src/crypto/internal/hpke/testdata/hpke-pq.json +++ b/src/crypto/internal/hpke/testdata/hpke-pq.json @@ -1,79 +1,79 @@ [ { "mode": 0, - "kem_id": 65, + "kem_id": 64, "kdf_id": 1, "aead_id": 1, "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", - "ikmE": "bb6f164459ad14ed81c7462ab4fd851eb4cddf92e9c0f950ab92f3140315d783", - "ikmR": "f809e28259d6ec919522f25302ae57aa5676a2cb96dcb2f7c3841061d7444a19cda802c4033035f6f35e0f903bdf5f3033ab5ea61a48aff7784fe24edcdcad55", - "skRm": "21a0778609e04e541f418daee76136a576e2d68832a046091ef68a601587e99ff3372f29909893ba1f1a1fb1ee457cde6d431e9670b8b1aae32eac34623762d3", - "pkRm": "c310aa8499103f42a76337480d4c8662fb590e8ca93db6b28210b2a32b92e0aab999f8a24434c6c38b82744b04844b0030fa0f4ab2aa1e7850e041ba7cf85dae209734fa591511cfbe148e9dd433a2205c39342e41e67446fc6591cc728b992fdf897c242162a5b06051ec3d21d37851a7525a4767a1eb96aa4bb468a37bb82c0311ec7c7ce44a86719176375701a7c8312731f1c04f1d48b49a8a5358f6cd386a305e105230da56eef49fc7e89c3045b116931902120c4a790eb74915b0e350dc081c189b409250c4ccd987e60b765481b6e4590412a7c640230c4b4a6ac0e9c47bc7a27eeb48d043a9e9d920de3bb43632166eea92c330bf3026b4e3c0357d0216fdb360f4e3aecec65a984a594d74251e7b6a5c755c84e8096884785c7a54c771350b243a49a1445ec13d9e2bab3db304ecb7174e7bb5ff91310b877df88ba1768b0feaa3a1c20849fa0520836448f1624300645ace817c2b881652127f9ff307d376bed5618b5b976d82362a52324dbbfc352aaaab6377711b0c0c45f100062c5c9cc82f6715c256855e7e4575e55885b95840922017ad425f83817bac7c155ba8cd16297a332394fbd87dc55635c7a64eb9023c13f3a19d8262b48972618b117566cc5174c4245aa80e214aefb8652a75ab9d11121908667c2754507c80fd9a1b68456be1c924f488373a6499950b0a3c33c324aab024cac742760ce2601e5e9815568465fb51bdca224ad4e12f5380358f097eaff6004ec023a6cb1358154250b4403db6cedee695f05b7c8ef5c565583bbe8072ea6c1128908431f4aa41f826e779b01987843b835ce9e68ecc153081d0835f43bb39903500195d2e9b328c08185478b34cd3b071952d34608c813550d0a1a47540c7818c90cd125c55a97dd0b63a5e589aac09c22205954a13067e58b562502ea9baa77564443a969c1c51180c5c7e4393171b0a128fd0b343a407f1c27618fa0a159b74a3da278e2b2c5d09460f7554b1f3c002d7650e7cb236d20ab0b53ffcb14106694ce601c2c33c27242b3bd1cb327f0caea7033987572e9300ad2b039025c5093ed23fa8734188c728076a10645643e1a99703f77f830c85c5a2ab5db9492aa1315c603f8ab16b3fb191c18b86e2c6741349534c9c6c48fb12a5183ce8b558354342e59b98bf67a690bcc34db742694c63c664b631752c4fec288f37793ba84110e292376c3367c768400747d9f92c6c20227547781443bb69f38a606c7bab88391cb9817c823b10c4cf851560f350a659ba5c518c6bdc22ba2e4150d00c163874451027a6a7e53fb4506e2a23bcb23a5d9a7abc05b69a62d16943996ed7cc1d5f7b28c414139a4201685ba83ad99c50122b87f5bc8ba52cae1acb3564c2e4913c50b1971c218ffb16aaad0a20dec44e41c88e055ba7be75822fe09daa2011e0160a20b2acf71b3f160c83f4f28ac59222777c52bd5c4c35e8ac75b723bca39f7e27968c9561e463bb24e52bd89577562a7137081b90090da3010bd3ab342b63537d345ed89ca08b015be5a4587a111a7e6b0f703aa0c00b496de8297cdb4d98796a92aa3b795a148175cb3240ce0d708dff7ba9744b19cb1c6bc881ba86ea7d48a9aade964f9410338796fc8721bc207236b5d643230138d7e42d8f99161a51820aaa4ac36c", - "enc": "1e23cf030f470707d8f5db6b67c1a58519a094cee07e84c90210d9a543c6de64bf1164b1b123baf26a0ef00a991cbc34d2748dcc8c470d39ee8622ff03b0ff11891d5ee047bc3beca06db819d2438ec90b4cdbcb8d91617c378941bb185035ac01224bae0dbd0b92082b9b60ba730c563aa1640dae265ec52ec271b30eea0f0095d3462fd4b09a5ff57d4818c85bc27ffd3747fd4bf8aee3622fbf80ca542d19d831283e47f7f7991469cfdfc13db95f1bb6805566cea569f7687d7568dca67579d4b34765249800af7e529117b130bb2c0686427475301ba058fe9ed04e0c06c913a7bf63efef3918f5cdc594ad92c623201026f4403efa8e9275a36dcb1434b2e1c8f74c0d11dc1d01a346f1e9e48b33c448536c5adc3ba82c0734b4909d8c5c7bfe2179028e7354e11a7139b5cbbbec04a506ecc8698d74358b041a67c86ed6f2232bccbe4a2e15578276ba228d12f29b77e7158bb0815fd908a969169fb301e3bea89ec477e372c4c8ce361bdfd3b676388b989abc0756674c3a0be98f1b571a14f7a54eac9e23f20db882d2d81de1e474b6536d5e93a352b9c7584bd8b97086230ed34f2c452d9c484e9f1b456086a9559b23a912e4cd75e36a0afff4da9e68e921c420cb70aaf918645d51eca913f630116090eaf1086fc4dd99f6330a501bcfc8dc74cf3a1ae967b88fa68090efe5fbe56d16eca251f3debf495af0416cd488747dcc1439bbed333833f7da7a60690280892c2630bb6f4b6bff3479876a667b0839cf54a41b84fa619a405fd6b2dfcc725b708c84af166c6446ec1fd204704b8e4b5b8c9c67c20e8b14b2e7b28068669fc647609b2657841ef5b9a017fdb436591f8d25a091f32f103081de7ede783aadb1fb5f7e2b0192b29648605f04efde942e9e11af63f3e4ed969cfb76a2973a1a1f50e76dda8e88ab20305fef8010f93373d26c4dd90663fce4a334d133ea5aae056537e0ec515222e53243a330388c209268dc5731e8b24fe89956f980efba40f6e018765e1733aedb85162e362a8c6e85254489a6d72bb1be853dc499fc85ea5bf4b7f927d107a42b23eca7f3ad6af23cb6d61bf31fa73301eb0463d61acf968865e2e8221f66aad20c087e7a0db2b5f771ff55316fe673c53c9854ecdcce843dee2af88b3901a8b294e66fa5059919122ec43c5eb3eca38f903564716b476e59ed5cc427c3ba627a46d4e8b05461c6d1659408b9b55a60f4446cc907f0269af18466bea6160266fdeaf28a63ecc92f1f373125b602e57225e8739385b12dca153cbf05e05c1c07f187181e4ee800c9051f28dd073d5ec1773bdc1b09c71b520dfea0241634e2940b6239e7756b81badaad119b974a4e43f8549fada37069628e2f46da7e470764a634548dff86a88fc1eff10645cbc4ff772d246ff6cb3259de89be2a8af1e6e38d9298f7d374bee39cc200105d80999a35dbff442e765e4958a88d9b92cbb8d49d427f3af5ce43741e0e64d696292c4186ce35d598c97aaa31e5701a4a3b4b8fb8c44a6b", - "shared_secret": "400a08694eecefe2a0ce1df36e25a5a7428196d51c85bba0f7f3462ff568360a", - "suite_id": "48504b45004100010001", - "key": "389a07bfd902ed8e0b4cc34bc01ee85f", - "base_nonce": "896fc9ce567f7e89bb2643ff", - "exporter_secret": "71432eae67f88d9f873d143cd7bd896f809a6702da394ac28f9f7e2aa767a933", + "ikmE": "b0451916702d592d6358f6306f9e3ac1f5dc3329014f00d416fc231e4cb0b21b", + "ikmR": "1e3b1d6d1ce340c7fa402d6c3dabf8db8842429714abb88235701cef640629b80a8f68e5fd56cc470ab718539c93bf35f361bdd35d9d65c2e277ef967fe467e8", + "skRm": "ba0f0c4af2328dc89ec354c6b59c3714626773daf08f2d7e249309d9c331cc0f055b007c6947d28bfc52cc1e6af7086cd5db100a8147a4857615a4cd1e83ca63", + "pkRm": "8eac7c8b5ca25cbbc076fc1413a6110db16959041ddfa05fb3723a238ab1ac2a83b87b2979278293133c46e645d7e580bb6b44c8a1ba0089b9c2c44e25ca0100533b3e273fb4617f63341fbc00aa455bc7cc31ad4e22abcdf22bab319d187b835d64858db7668f45babf348258407e56d8714eb6344947185d824d6e1ba4746aa371889d625338d9199a3bc105adeb7f61290fda304f872c8e4106a8e3c3864011202ae9664cc590b44c55aefc4400379215210d28080effe9a88cc46c5e6337ffac99eec23fa1ab7bf8c26092db95d3ec449d422bdf410f8e5773cf836745b074b71044056b3b25b341139b9beb90bf64a2b7990b6d5b06a493b056d1e481566ccd98082ce5d022bb7a4ebddc87f5f921736661771c4e0617a9f8d1be2738bea8f57b1f3ba8c552ce5657725d539dcf4bc4814008ed05c052a0b848c994b43a69c0da278fd951e9e817ab39908fd95972973d0d033cd8e694dd12513a045886e5b892b76ef6387ad8801cb8b5c9fc7c1fc66a2ab845c5eca21e85b06e749cab30161efcc20c5a64426fc966fbca757a088effd1ca7c4134cad87c4e03a528bc303d3c08697916a5174ea87bbcefe6c2790213fd9a354d0609d03118345c99ae3ccc8a3c395dd8198c5c51b37ba959822fac0250cc981f9b46118b09c8bf5c77eb5768c8d9bc05070fa16668beba956ca4af56d7caebd7140a20a11a7c22a5d27c58e656221bad27064c3112914bd55bcfd052788c7416f53de45308bfa37270b43223b7b2e67c1fdee7b11f2520b35c04533c127df47c0a90b3dd094e0728632fa109416cbd4fdcb9958b3b6cb3517e06698db47c5f037d0cd0b6d9847a56f05ba213b211b5101654458f76c91d2b916012cb15594759e9593794ad26c804f598675266984ddbb9fd44768c923916e26d8e696c10251a414c61e71613e2a9046c612cc593c62f716a9828cba5a7777ea6b961e86bc0093ee9683956e4a2c115a14cf6bb7d771f19594f45d578c808748b78bd0412c7b12ab80e923b368b6c978436c783a392f65f42967ac1f80753a6ad38b16db644879c4a6dc613818e739397903c409c2a38e303d6d87e098391f558e28c7f982b48b9700904cba6fd3855", + "enc": "602149195315a9350529c1cba669db47f58c20275cebc68f9968f3e5bcfd67038e1096f47aeb4029656b7c8288fd85d734ec73f827bcd5f9f14ffc403e84135ba8032a4f002c5e38028a6d7aca106d4b0697e4706eddfaa5beee9e0030136cbf7a487d74ea90d419bb65a329f83ac496e85a45080eafba06a536a259bbca49dc5d2698e86d8901ed97e8919c58bdaa3a34430acbc0acdefa97fbb5667c58c1f1958b30a411647bf42ffc056c1718acce047f67f036075e5181135f6a4341e03d3b503dde15e1678f8b167519763055f3339466b9a310410c7eb5356b7b76fe7a38364c0e8c17fe0ec2e431e41b143794a5b2999e70d42bde653b43360c939392b088758ec2a87c4b08ba85ad951dcdd4dbcfe2f7011695c877a7736ac31fc85e208c0974384936d7b64e455355897025f40c049781456e814cc2da189e6a2f6c99f5d3f20fa9039e4b1f62d4899c2d82b449bda4a2239b6e7a6e802f5ae9bc5c882078abfb5088a5b4b727f9d1b4b2045c1c6b4de122b68f3e27cba0d39c2dbb44b26f60c7b5afa52166585f0f5d656a299ee82ae42a9a31a1ab3d387c53c0c639586740e3753cbe723156b5a5a472da0337fa26eb4651791bf653dd33d7c62a69686cdac505b5703c2a8b41640a01893a1b1792e9c9351bbd5a6768505cd74dad62570a24b6d6de277657ea700905ac28c03f18961fcd0da4c57df37254868e58c92cb1ae7ef90db8b92c25734ae5a9941cccc50ebe5e608c6ec254bda7635e45fb2c65008bb68b59a066caee2b91f83b28ef0111f7998046e54c731b7c55837e98161ccaa25a2e8061da0fdded26ea68665f03da247991325ccd3cc1e7c92effc8d4228c1e7db2c0bd2086b336ac6773bf9de5e07052d39db319c84f08972f101d87c440431d910d142ec44ae5b6b7fe18f57d58cae9ab63f9dc0b7c1e42bd02d22fc87d0096908138e15c7414aae4ed049dda42a7c49b39d5b958c225941069e2bc9ef5ae35e3b918cf9a6702c76be5476a4ac07c38ffa55ab6ae4c927a063e5b7f71dafae3aad28ce31a92b2cfde8212f047da47e1175e81addde6a9a1ab", + "shared_secret": "2fc9533e0ba8e59f0753280bc099674320bae39a0d4f817b6271789b2f4aef33", + "suite_id": "48504b45004000010001", + "key": "1c70cc9e7fd0247c168ca60a571b94bd", + "base_nonce": "388be5ab975de38b6b63492e", + "exporter_secret": "51885fdc6e31c3628f35b26fcfbc232d904d7f4b6e22e6ede588c6e0aad60f90", "encryptions": [ { "aad": "436f756e742d30", - "ct": "a528e80411b867f5a402d643632ad9fefe153b866b8ab617615d112190ecb3c3db21ef249d5e4225c24d7e4480d35b84a2b1f3aea2ccb2da6f09ed051dca23e2dae3c4f1fc004100c998", - "nonce": "896fc9ce567f7e89bb2643ff", + "ct": "7b2cbf3267568e7658d5f142438a320203d93dcc4da7c35cc6160cd3155d27476e84b45c97b8e99b4a4fdde2a4646f0fe22c126d95671b1eb02841aa6171843f901956d704ac203c16bb", + "nonce": "388be5ab975de38b6b63492e", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d31", - "ct": "7bbb3f19ced7f51b85d130d3b81334819ac5646fee9ce6d14372508b25ac82ad3270f390865860fea485e68c05b4e23873951c95574807aa02ab8e9837011c7f9f586a33c4d94df7e102", - "nonce": "896fc9ce567f7e89bb2643fe", + "ct": "4fa580ef1a1e04b215025d5f2e484de4a46ccb4058f9c1f6bf510d28608cd9f75f5a01b033fb7800d4bad1fe9e08f75bdea91e1987dd645b51e4ad0c8e9ffc2a8563fbe09eb415a9e3f0", + "nonce": "388be5ab975de38b6b63492f", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d32", - "ct": "75f0f2c7bf3a9819f65de53b75119695955dba83c103a143b52de8170dc0157514d5aad48c1216b5db2e12b7bd8dc0569fcb894572b2fe959827fcdeb50d02a83d5c3716d91d20316387", - "nonce": "896fc9ce567f7e89bb2643fd", + "ct": "391022ddca55bb7d752fea753c42137f150757a4e3ff63a7ab9a46b763c7767dd27819e80a6d22b9edf9df0074ce13a75cc6cafc386f11e31c53e51881e7aef511d17b3f67377bb69c6e", + "nonce": "388be5ab975de38b6b63492c", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d33", - "ct": "f0b0db46c408a92e0315f08ce13eca26f583a578934cae10202e67661e7666b5443063464ca7077eb33cd1d33148038aec10716b5e5b08ec7685752fc1238b6225b7e7b0ae0d8bcbc8f9", - "nonce": "896fc9ce567f7e89bb2643fc", + "ct": "5c5e1bab076151db3a9552b29f6be3a8108537f3874521cf3f141b2088bdfdf8d136b7b5ea868ce778169b0ddefd1bbb5d8d548fb359deac79835620f3446c08a4744d145026f977a23b", + "nonce": "388be5ab975de38b6b63492d", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d34", - "ct": "59b582fa3ac23e5c50b586634c63841fce923abb8ec1c37982491b9e8b86a23db57104f9f417f75bee066f993efe169e6129e48d828a19d9ddad96b6ef520bf1cdca1f6f411f77229d15", - "nonce": "896fc9ce567f7e89bb2643fb", + "ct": "f0463c8994eaadbb949bf601ca8e698f01a6030dc6b9f0e4e88c8707b1e89ed16d6d55b04908cb0dc4827946d449fe438b28d1e90ede4c072ff31698bfce8d54d0975e264d52e84f7346", + "nonce": "388be5ab975de38b6b63492a", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d35", - "ct": "9769664cbf2489c44add64b40842605e75ebad15770442dd1bac52baf2f9ca4cdd575009ac8b24f203251f708790494fae18d01d16b2e708153a98114866049f496aaa98428fd28ee9d2", - "nonce": "896fc9ce567f7e89bb2643fa", + "ct": "44fed22a38864e1fc9287ebf7ce113929b8da044c541c135a9f330027c5fababdea4e586635a6a005c51397e609f10a98799bd73726559a1f6d9b6ff77b05b6eaa2275942e965e46b7d5", + "nonce": "388be5ab975de38b6b63492b", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d36", - "ct": "c2605ae8bee1dae7a6966e61ebbcbae00b3fc35604f838d73d252ce791bccfe93603430cfecf661eed6a9cc3b332b9eb4fc85217c1815b5d9032f942ab4343bff2330cdd222c27778066", - "nonce": "896fc9ce567f7e89bb2643f9", + "ct": "6e7cce46c77a79bbfdf63b9997a0e3980daf4e315358a40ced6019adb0d6e7d368430a4f7a9fd0ecac24bfebd6b46fdd8655961e62bd873d32d4a55b5ab46eee8d201e62754d933f5e5f", + "nonce": "388be5ab975de38b6b634928", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d37", - "ct": "7547df5a5a1da0527ed91bf4d2d77d386ad1a439fa32a0b97f8fc375cda558b850fe0a01864afda6ac4f82b8a311c92924c2361ca8d30629dbb49bf43a1da2fccb690521bbe29c9f77b9", - "nonce": "896fc9ce567f7e89bb2643f8", + "ct": "82c186b67aaa9ae4de7e4212e94d3f2b2777215a797f933c0f5d30781145b02544d07eafa09242e84cc8ec0917ff034d96cb08d903eb4a34441753cc849bc949d773c7399af0cd9e75ae", + "nonce": "388be5ab975de38b6b634929", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d38", - "ct": "b4ac56139288019d7003794307bc625bcfcd547bc9e598ba4461701610426223720b45311b9d97da0530b1c462cee94ba3f4114c328e0f0235f08b43e7db77ced75337c46978fbab050b", - "nonce": "896fc9ce567f7e89bb2643f7", + "ct": "b353fa2e5f0c7f4a2d9dd93dc3f3c2803c435364f583702622693a5524697c70b1910153616fa9340a19f967c2da4bd68f4cf358e9e38d6a527ed82ff620146f6e9e3c3c6621b7c76951", + "nonce": "388be5ab975de38b6b634926", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d39", - "ct": "e914628cdddc8fd20e8d57f64e844a254eaee6c9d354f507fe615acc4426fb7d6541da6f07ef19ee3d5f185b2df94f1429fc381d0626f8648b6581ce43f1407aa0e49537eb64f0c230a3", - "nonce": "896fc9ce567f7e89bb2643f6", + "ct": "eea203f1dbffb1469fab12dc04aa58b2af27e7020497c2f37f932cc8407cda1186eabda9163f8301d36830a7165ff35fcbeb431cd2781aba131dd1f84f80b3eb77598a9bbe71012d9750", + "nonce": "388be5ab975de38b6b634927", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" } ], @@ -81,27 +81,133 @@ { "exporter_context": "70736575646f72616e646f6d30", "L": 32, - "exported_value": "d96f8c466d898f2ca6bade6a9f822be8462c25361901d6e6dcc605c3f2edcc68" + "exported_value": "9a6166b51568ad9c72f80a718dff2b6bb3894b7b5dcac4c2323d1fbe1c8e80f8" }, { "exporter_context": "70736575646f72616e646f6d31", "L": 32, - "exported_value": "65c028731764853dafe2c6d618ac5095a51f38357d5da2112eb56a262dec4207" + "exported_value": "941652eaf3a06b4300f89840b3bb3f85364870313875b10c2a1a084672ba0940" }, { "exporter_context": "70736575646f72616e646f6d32", "L": 32, - "exported_value": "8769dd7841608eb74ac225c26d3a679206560b39c026215fb0c58e7f7799d128" + "exported_value": "a455a11c021def4aa9d6e287246f0aa2b4697e83ba6d89b530f156eb35db147f" }, { "exporter_context": "70736575646f72616e646f6d33", "L": 32, - "exported_value": "bdf53fdf4293691df6466a552a7362594fb3079dec5d96d61e042b6c65d5fea4" + "exported_value": "29e17489149c6718945dea94f8b0b209384d1bbd81a4e9a3475c795858a1cbd9" }, { "exporter_context": "70736575646f72616e646f6d34", "L": 32, - "exported_value": "b5ff8063e2b780d0c4e0515f0896f20f93ae718e4839b7004222311647ec05da" + "exported_value": "43bc54430d1a9d9d9e0dd6075a5206ee633db6af96c0243a71f9c795f0170fe5" + } + ] + }, + { + "mode": 0, + "kem_id": 65, + "kdf_id": 1, + "aead_id": 1, + "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", + "ikmE": "54274849d6fa9d1c71d658b4bcdec56bba6a4a49e0178fe4639d321920c258c0", + "ikmR": "16835630bb0fbe89f7a5605bd673559f4a665773fd52aec4ea0cd4e7509e112ee5f9bbc75753ec5e86665343136139d2e8676ccd973ccf3114732dbae7445cf0", + "skRm": "3530176644619eb968895c1a251e8568e063278a7d9f4314b7d0ad973be2fd0b9560e77a2ca3f07958d782cab43cbae46e16bbc90277545d333e11ddcf18df61", + "pkRm": "a1b148974799dc3042a014273479423033ceb9716d732a5b1a661ff5297c0d3a75cc04410a1b75ce70c2b886939ae604320bb06767984f519ac0753fb3b24c1d41aebd7636b9c8343367788ab742c6428c036b11fb118a27f1022f5b5e7e14b1fb7634270b9d2d42c226c513af2701422b1d103237279025809a0244c90f3ac295eab9c35de3ca5d235754b0cd3ed59119e21805f48316877a735bb110f77730019d6682889cb649fb099be1269884f13ca7586aa9465c91621906549de239addb0bc740798b990763e8636027f94a3b6813ff511fed9c5717e15901d2a788faac1197c3f8d1b821da8c392497f5250de1b12f5800cfda207d438a6b85560d3c2c7dfdf2661a986569d67261e403bd937a89d36ae7bbc78089871d2422f3c25594016fc6dccfb47794a221074fa473c326cf2436b389d788c121042ac16ec3211dc3c289cb48a49ebb9848682f171b332f9b5ebff373e5033d9754b77903ad3013312900b98feb190162108214b3900c9ef41acab13a1505d021d622893b1baa93323e16008b3445af21087ea0765d8cd814405396d935265a974a39b91f93e31d0348865eb7979f1452e59751b1c97476f88d262187f3203531793d6d035091214467d022cd879a4c566e61d3b4c825828e03677d234e7980c8de4a0a5e948882e826c8d10cb2d49b2aacc05360798ef0abe47680a4d806c53acf0f2092e23467def40a7103611b887306774c442767cdc4be59e98509e2be4bc1bb2f175fefa186f2b39a66f1a96e11504d798d026947c9cac13bf3c330f52cf8837c3f340001e11849bc3024a99481f3477fdc6d1734095195189510100672b90b68868bd65b01a51c0df279e9bc94c414acbb2a8ca4745096ac5355fc6457f22935d52232d69559a3cfd6ca6349731e5f65594b44364854a6fc6705236c836391663d4328cbc47e7ff5a97b69707b842aac9091c613c744b53539ba5c514a40cddc7880748a7e1816ac8581e239244f3525ab63758d2030d44a7bb9a9ab4a403c9930c8d5e755816c20c1ec0e59741887086910a7030192243c9195bf9a9c9f5580bf404911c059f4c1b70644c892f420d1411920dc710920b9fbbc2204523b962c5d86129f91d7c464f989ffc2a8801ba19694755f494065f0669b2751f864643bac568ba848a12abfa15b295d177bd7b87332585c0aec3899f8442ef04e0a4b15b19c506ef8bb84b641e3b8c6199cc352f08316a9322a4a7969472dc1b130fed40e6141b019454c04cc00c2491e680017a892a38f33567880c586231a495063cad436ea8118474278bcc5adf6e0be18622193b58757f291f660ba459c98f3d19e2eb372cb43268a82ab855845bdf5b264a4b93a688beac81201e8484eb48ba6a908a90bb9e0c038d70775921a9c021caaf313cb31f2bbf4a71effc3ca8f378d80b4abd739bde0d4a8c6679184db9828f531ae63a399869ecba99e435c4d36837a0f29ce020426254157d00acfe6720165a4c6e44a434456ba606c323701a398b8384585c694cc9e8475a346529c94389b654778fd2392ee13b5610a925a520513345eda13955065a949d3ab4a35b65968c2a8e15389a533a8f6a88960780eeb074db08bec75dd725c35f95ad3ffacc0f93f6ed4593e6b99f27856d5f757300f81845476", + "enc": "f208b05a0a31e7bfa386471789e63ed19c037306acd4f46fa22638a9bdd8727e95da7fcbc96e48c3c6dc056cd8305a00a5bca8a1e93a0afe2e95a96f5e11ebd5aaa6403ceabb03f7e570fdc330551d573db8e20ef9da74c43f01e3e608086c4127b9a7a21e528167ad147839ea05858f96656551fe18add75ea8c539dacb30727826a8548c2fe7cc3cbd265f3b72bc1ecbd4c708a6b42b45e1cd8a9f9703751a1de534ecdc2206e842cc28d2199def060e66ad8cf8c1b4f1bc25529779b70ad2f778634fdb6c644c5d5229059d137a263777270e0926021bda68e0da63ee55b50610de504211501225baf5e4643ef6697bb58a4fa2133f8ceb11081c93a8bc99ba2962bfd4e7d37afb09e18ddb094ca6b417dfb663fdfff5fb0aa19acb178fbaa049edab4aebb4cd6e82e79c4d7d2a3ebc30f5feb21ac9b69016ae2d86a6b1d04f81833c646a101d7c493a76452519c7a573127e0eb6f2c33e845f0480f288ccaeb8c764bfe9616f44f2ab8e2608b758d66b045bc2dab5126edce6cff0ea5b46a8cc9a914f0885a8cf661de2031faab4d8fbaff1eb957bc006944cfcd9d2aac2a3f0fd1706e00306cf75c17b264342aa7e4d3322383b3e5be0bb0ae9944e8e6c0e35b99857b60647a2f508f8c5d5ca1cc99a2809a6e0f53ffdb9b0e38a4ccabd2193dc39fca692d52ca9931e69601f3e7e481fbd996818286a28c6234942e303e37f26d61e54f76169228f1e1019cd7b8c657cdc9f0e1bfa471a3ca6b7c575fbc95612d7feb7c6f9f861377b13293eff6f271556552f79a5dccbc0a9e23f7ac877fc8d17a636d7638bc5efb2b178bec0816936d479a59f09d2095a7926af0e957e8cfaf152796ef9b94fcfa103b8bc7257137fe6b5a37fd3e7b28db71f48714650bbf12f943ba1299dfb94ce797079d9cc2c010c1793da338a2718cea6dfeb774419deeb14271f8e323e5e80b9a21a853d3b41f945207cf22f76ed906224e6c213b88182f5c3ef12f38fa9756323322cadccc5f12c2ae9f25c9971e0250b3bce5307a6d8e28e215a7199f1d6d30eb0390f3c60ce14b32f9a4f64da363173013249d827aa104e42b6036e158773c19858485ef0f4e75936c846299dcefa7103ada6d42808247d66323ae82cb0493c8752fbf9e92dd6a7158fdfaf4f1d389cdb3a20c0b98e409282a43537a6eb6dfe29afd898f2e5976f8042c166ee0f89b96905245f06bee9ee1ee8110c818d4f01e6b6ccfdf0bccf7814c26c229ef570a9f1da1003fb1ef3aaf5157872c44ba77c607635faa93ab8e0bfcd07c881792e313e37c413a94e1179cc1b3ba703835ecc16c46aeac51befe03a0c197c380c55d821071ca3c5ff5b44f1768a1c888bc9f533c054f4dccc5ab839b7b366c75f1b232d2e3223336f875f121b5031591e378690eec5fae0c96be8402a2e214bbfb6364922dc66eba8bf128b13df4b2261bcddbdd49ff79f223e5a0c0c68503f30b97f242ca4cfe769a9449188595c3ddca23080f317c638d0508474959d60c06acb6a5e34", + "shared_secret": "02a5ae918c2061093153b64a9ab0e7fd0557b83c525ae40b5105445562acf451", + "suite_id": "48504b45004100010001", + "key": "10bb7d2e2caea3dfe5be5b67839a19f8", + "base_nonce": "4b26a28723c323f51bfe6e7c", + "exporter_secret": "e0fad26021e07668d9a455daa43aa39e21fe0fcb46cb479b1c71a44fc4f64cdd", + "encryptions": [ + { + "aad": "436f756e742d30", + "ct": "f46dae7e4b18a6c14d9d8758d84997e74766bd1f79d59f28e53ee3fd610bbe4616ce1da84f186da448a6b9990c9cb7e299cc744d371116da846aa0346adc53474903e1ce604e7bbeea8a", + "nonce": "4b26a28723c323f51bfe6e7c", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d31", + "ct": "f0051c99ec402db090087f7ea2de907113234774d2e6c36cff87d4e4ecc46a90e9916a5f3e6249b6de2e141b9f49b21f77d0259dc05f3d15045c33a84a9c176796fe1cc0cc7a265f9579", + "nonce": "4b26a28723c323f51bfe6e7d", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d32", + "ct": "f5a3b69c1239f0defc082cab5a76f863ae774d58f5d4909780dd9e2be5a87496e148286a114b8ef736144174f91b0fcc4bb1a446a7dc664c0341286c5a560aa1a04b4a30f8f9a8859d58", + "nonce": "4b26a28723c323f51bfe6e7e", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d33", + "ct": "ba959f80762a22aaef77d151c31e60c72f7c91668c3e3c7dbd8be6d12636cdcedd6e5f604eb1c16abf897a93dd2f4b1a5c8a73301b04da92f341ab0d32ef0af3476a352ed020ebbaab28", + "nonce": "4b26a28723c323f51bfe6e7f", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d34", + "ct": "cd5c0cae7e2a0eb7c6272b38e6ca4a3ccbca5353959e52de7d8d09bab9cf8faf880141258f756e06d351af8952452027261e7b49e3b814ff9180df85f6c32ada58a7cfcfb1f74d85b373", + "nonce": "4b26a28723c323f51bfe6e78", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d35", + "ct": "70b1f80675614765d12e7568b0c4374a1638eecf9e572c5c47258f1f78ea707538740b75ae68a121e4f096e4e4be75f3aae8d93d4017188a08f27d1f43b5b9cdc121c2882fa33382e4fc", + "nonce": "4b26a28723c323f51bfe6e79", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d36", + "ct": "77977a6a7e4134b98c296665a34be0edcd513c2556fbf2c5e9631183201ec105901e85f52e2474c29d221aeca8eea9db4a22590f3c2504e96b4151e3dbcea71c14d8a155bcd97b22c855", + "nonce": "4b26a28723c323f51bfe6e7a", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d37", + "ct": "eb96e1f80a79496fbbe9d5e961e9a725edd09202365240ee310df4e0a222aaf7a3b1a0213fdbff5b29baa684d674a2527a7acb8b1e59620146efa5f304e8b5277503dc1fb3be9a3f298c", + "nonce": "4b26a28723c323f51bfe6e7b", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d38", + "ct": "2b25c36b321d475d031dbcb640345433ef0e0655c6064b06e65300a5be8de5352aeaee7bdfd90862132c206deb2bfb1a8f25ca8abf753367b61f7cf9296e50da0e9610898b07938a5879", + "nonce": "4b26a28723c323f51bfe6e74", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d39", + "ct": "972f3fb949449fbe0343b3d90e3c0c0ff6fca573b5659d7e809c97189984af3f0ddad6b96245a1d98e8d210fbdd3c9ad7eae27a0494a651b20d6ccf5ba9759617168c08a578db137e9b6", + "nonce": "4b26a28723c323f51bfe6e75", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + } + ], + "exports": [ + { + "exporter_context": "70736575646f72616e646f6d30", + "L": 32, + "exported_value": "9f0882a3779fd74998b9c8ee1009e8bb00ef576b71cda1f0b3ce2a29df7872df" + }, + { + "exporter_context": "70736575646f72616e646f6d31", + "L": 32, + "exported_value": "5f7f4918f923103a198fe8dceb584b364e3209c8cb6a57591e4e73d9f4981586" + }, + { + "exporter_context": "70736575646f72616e646f6d32", + "L": 32, + "exported_value": "bac03295658e50b3af56f1625e5c75c2dc5cbbaf40e35d62335bced71033a1c7" + }, + { + "exporter_context": "70736575646f72616e646f6d33", + "L": 32, + "exported_value": "e62eaf1f8a45248d7b9eafc1e289267f633aff1c97d53e93dfcddaaf2a6aab4f" + }, + { + "exporter_context": "70736575646f72616e646f6d34", + "L": 32, + "exported_value": "e1b2cf7512f8cef31523f5dc20df0186fe51baaeb39e768802943c5050973537" } ] }, @@ -111,75 +217,75 @@ "kdf_id": 2, "aead_id": 2, "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", - "ikmE": "5ac85a9de23bd722b5c4a911c8c1f4975f88e99194f2ab32cb57750c9bef9aa7", - "ikmR": "da5a763616bc648737f70603d7d3ab8b929ce9ed0995d0c0d9f39efa4aab66cf2d06ec924a2c741cdedb300298bd1e39612565acd549b913619a5a72acc22c50", - "skRm": "56d697706ceec890914e66a0ac107c7ec076fa26a60578c292ac8bb3282496e24c16df79e667ea353059628b9090e809620849d256e79ae18aa2bf310ccf041b", - "pkRm": "a22aa0ebdc60550c5722c48ac7584bc30a1b5c0aa490c1211a52067db326077a7a8c334b7446931a781793fc64f84647aef35cf349bed7ba3fac8336708054151c1da5bb9a3e56a4d5829435006afaf5cf7829ccca2a1c2c621a82406540660839e5b0f5112533c0cbe5763a96a332c4244d1bdc3a875267f3b88a50e6272f8c9b834a17ea86a6029a9ad1e84fd06144e9ea99ae7b0051325d1a495853743592750ca0ac8ad88ba6a6934815754a6869bc5b55cfbec1cada508d02f81b4721a8eb4a9d20a75eb98c60745990a06124a14b75e7da4438f63276c4ae4e0717200619ccd515485b472e097822f61ea757877544c5b8547d86a457df0a577d0379d3593927e23b864802393538c5e3621302a425510a712026293064a767866bf99b8fc04f5fb31058aa2260f1bf3b9ac61a52ac27b4b42d0168aba143b5d7ca38fc6d98a91ac6652b5740a1eb2332ac728e01053f48123dbb44ce82b26b97453b23199c957bcdcdd86758995579f3807d102cfa39096ac505d545bd03d25175722f20aa32ce5849b878cb7d210e375ab269713c61856139d4bf95bbc519e858fb87551bb73a58b29afe5c82d5448047885af0f72006089db4e885a45b5ed2f3030188040c14986dcc54f7b90d64733869c9221da827dbdc80be1482144a5a27f90deb32c5f202b95624b75a6927855a5a2137736e0c086bf52257458c34900fa61c85cd416c135a3534a245ac2abf99094891e1cb00d21a3319abd99c598a3190f388bee25b2e0042448fa57475e90483018616e95ddc09b5d1762aaf2b0bc9348f3d4b9ad288a44a28960c22009866532c22ca086b74b308b42616b37fc9bea8a882cdb9ab28190b02e24c5bfcb732b0a959c26cf577adf2374e1e4205243742476b76333186f164bee8a91c3b02ce0af83706121fdfc2aeff28abebf12381d9bcc2ea01a34c7bfca7285eb614f1daae31a15f7cec8d5785270f7729ad3a5dcae399b55ba5552a18fc3c264d2b56b578b0d8c13f002d0d96d2c119c06fd66899dca8729e31433d681314aabaa452544454279afa0bfe0b99fa6801075b2d05962e83200933f576a63b5d2113cef27749c4f5c329fc2162592425a404965a10731a055b1374f62637b3085b16f3343b8a5dfe20cf7ab07ae803cccea8630563a685699036443aa0dc29a60c692307a7dd639570395734bc47733b60f33a466879707a785f31977e7574a2a22bc7ea5b598974c441971d7ff1a9eeaca97b452a9f231b065aa9e392b64619bcf1e021f1089a68ec653f78596d1c606627b6b61ab5638999b59cc25f703c0eec66c97037f9ac56d004c24d997d43ab452622bd35c035d2563e292cc4ad8caefbba3efa7b3fdf253f323b2d2558906ef265e0548a66c192bc8959700534f0044ccacac3cdf157ab0943e67cc9be783c08d24bf6894362c8cfef356552db7dc34226383796df28ce37f3194aa1137666b089e383ccac8380d3717f29215d400a2ed0a0382528bbbb9edd1164af77325130a2b5296e496c31cf27acf601ae612cc4733bb24e295136123bebcbb35a75806142a2aae79f07579e1c8b306882593f0508ef070ff779195c2b6784712b877c2f3346a154f19244bb250aba415c69ab7a67448470c650619b4203c7f4e4112719368f37224bdacd1afcbcf2548f58c50265b3c3c8456187fb2397e63bc09bac9ba459dcc85b6ea22542872a42aaa7e4c2c9a4e4277b8495dce117ade7289ba19206894405a8110f77267265af32627fb5079853e3158b36ad1a408b658995c8042d0bb3cbfd830c76db1eca171fc0550e2e56170aab216fe82e36b77f228b24a9ca09641b2a8eba4f2120825169498b353fcbe5534d48caa8472cf31830c497b7b7091011c06d52f25c61694519ab228af101b8f1b59f5ab5502a7a0574b93ad66c180715d5ab7104a57ee5f35c3c72c0a2bb30f2a6177f402159985104948524d7cc528ac63ed7847528c1dbf3c8dbf4c8c6f67912d35c276c3c51e1b8d64590f0eb3dd1444452591b6c93126decad85f568cf341323fb3958556bbd026091317453a7c381e1403fa7be94486ada15c19990b1425c479b598c9f311efab8c0fca7c8b4bab41833868e85a6bea677d583491f10cb8ad4b98cf51be5f73975f56ff38163bfd930538964dbf2bcffc581743939e7b5c2171c16cab15d1f0fc4184fba5cace63540", - "enc": "b7099c523430e417d0bff82a8db4a963de8f70e67e813e0c334b7872005cd1fb474fb3bde363a4b8750a8335b6d030fef40ead3d57dd85b0ce41871c8989ec3663d3f51b5cffcc1767aa5671b84a1827a016d2731fc63744bbc3c2894995fac6829aced81598dfa717310f73a8582eca07bee0bcecfcad56976b81695fcc9ffd99f4d29844811301f8fc29977a6c6b5668b97230d59713c3285b6d08f8e8ebba31eec2210ebccecadcda0bc06521f9df4e64c8a0c7de32bca435fc9c95671ee86f6fb54d420589144d3100cee738fd8bf7abfe3ab4d4186011ad72aeae7f371bc25b303d19187da1de766eb0e18dc6829343f8666da82dda8c2fb63fef7c5e86132a129bf1313bf70573c71140f4f2dba670dbc3b3b8cf9b80c729d8afa48b23054970b3f737accde03c5f1a7d49c48f58e484257c8a12287554a4866c6de7a21761692ec4a77761f8f6c23a4e7824299bdaa8eff065f962d2dad24350092a1c92707eff38d031002cb00d92b8cd8392ba397abc5d923fe770625dbc73fc125e544cb2e5b4faf61b64e3ae30cee7447534e472d148113c60326e5233f87aef9b5ca30c9672aa3f2054f2fb2f1370725ef69f92d50fec117cfa2d11f9e5ec6021f54f69cc2e0cbff33a63c589e1bbbdfe496633514aed270e46dfa1d55efcadb1217a72502c88eaa611d610bdd81f3057d6db3c303b709e3511793986ce1ac427422d7547050f0920ddae7015fa1b76332a4a3f09c1447a013eeb8babc0a71b911efadac8f46b560027cb327297ed5fe05911e33aef6928b34f408f141c9256f2b4f1340d882ad5cf2e234cf5236dea7425a0d7c0e37029b7ddb0bc3be1bdb12914b4b0572ec16f6ccedffd05565a1b9793656bfe7c95630b8dacb624127961d3892b3c93873ba0928f5a7651a3baa1ba14ea83e1c1e4cfeb429167b151408ecbb5023330bfc557444af092888b1148471780c4671d5b8da43686891b979a1dd9a30461919c7e08ee5195e4523c2f378a0c4fd32b29ceb7080d1afbd7e5bb93602a1f3b0699ca7516e6121926c37b245497ab1722e989a251fc36511595537561391cbb0370f7365d76b7ff1e7f27caeb7c9c0962cf4ba7217ab8ba83a60a433ccc0d453179d0d77554d208e3188f8fd659dd3057dd9020635319a7f6b60011411b24cca3b5f2d25580bb4f12c586cff2664bf06c6d424217ed398e4791ed74d9830dabe9a9940035515a73e418028fa43f38df5e727165912da360a25a945b698fd23f58a31ac36149b98082bcb79c9253553c47341fd43d8d795b219e2de4ca760dd640028a3f38cb21ab2d5eddfd22c6d569e7cdf460cb7438168e11db35c662f7291ba549a64dddfd8bc8c90fc598a9e1df0940d1bbf1c5052a040eb2ebbde2cd165cc6bc9e011809795583b6bc0e6009bff39d5aecd49dfb2c4dac65cd98ed63451703c8fd8a4b809fc26e3265fac02c823b3750a23c6339be5e2e84c9ae49c3d19f3457cbdaf43b3842bd85405ac6417fb590ccbdf27a732bb8a9bf6867ad1fb8353d8e5e5b12ea879b5bc7b2943135bd5beff394a32fe0b24da0f8e8dce706a869d57d2a03371cd561a0c6fba8167a85931708ecd689bfb9caa20e2cfcdea6b34120ae5123f26e3e0a239e3fdf76102746d997fdc88c8281b15c57960d2f1208dae907f2504dde545d7451e5df181f8c1a033988f21a2da4ef428c694c20afc315faa53fdef729a770f7c0f00fd5f490e9b1ebf980175a7dfcdee1fa2942286ddebdb3c875fbdd5a78ae2699f6783be85a8bd2ad87f53a74a71c49038b477cdc4df7e83d52c8f5b3fe8b291e9f156f34586734b6c4222dcc6e6612bbc4abb8c71fc2b035c5d0d46079daefd23479fcd87d72ee4a680f2716940a9804eee01d741f3c528c5177ea798c7ae62534840e5216dd6710e177c0903800fb515e9df5268a5656564e79d9e6caf26f2cb1c265112b8c7ac29f02d555c73fa6ab47df3eafe53f2ccf617b79552fd993ea7cdde25c78878284fc03424b8148b554d67dd0050d917ecdd859f46025db2745c54402a3754d7255b545ac36b7bbe17da1bffd0202aa2827227453bbcf6346ac63e256e7ed4a2a1026fec041cc4b3105cc5b46da08f66ec2ee04252dc3edfd2d1fb50075ac14dd6a24bed6484b3f8ba0a57e199afaa31953e4e836fe8b57db60d66ea7f5180d48aa1cc2194a6f9f4ab078", - "shared_secret": "0ad25b2cb0a13c15fd7f38e95b9337974d37adab6ab17055b7219429802456ca", + "ikmE": "b79ccf36c6d61fb48511de939a6a23be436eb9c744bdbd3a6aab85bcad61377b", + "ikmR": "7544cdff18a3f8789f512337a27b6c68efd145a30ed3dc630f5dcc5ec6932929bce1c023147c48c954fdc213a7c9c0dd8895b8d28ec5c5e44d0b30abf9d8ca47", + "skRm": "f279454d08150d5bd81252001d02e1099f12fb7e9be6da2fe427bbaa2d79b0ab67306c0153c052610c4fdba3fad3435aeb1b65817d442c5c18ce07ea42440005", + "pkRm": "3f1cc56f89842dab230c6c09ca701c98db48e54a993a498b4b3336536051318309c58a8bbee9274b19a7f297510601197f42940c4207fa027965828e42f4a254f919343505cd922bf800a9551a63d784cdc61cc1c3566a87c8b817b6ced8013315711e3696c3b0051ce7497d9bc92796b3b629ab28b55842ad52660d3b268599c467c92311b4a792e827e67131582c9e3d1c8da43ab201319aa95070e10748fc65a1316a6b22f03fae85a08691395b660e759a33f9c80ec74516c0249ba6388aa105095750c7cd947a747497a879006dcbabdb98bccf025450810884c7ba8c452447e5cf0ee75665468fb16c5314c2af5b05a0eb0084087c98d985bd53b95dbbe589f31401c52143f678605e712f87b4076eeb076bb3a099f3832426416805640bf57fbe64484a79262887954f540762ac3a388258767caf06d3cacc1b9adf21a6d7116c30d44562b8507d34045a760ece1169adb264168c10c7844323f93c67710f65e2879ada7edc7728a6eb63c9c37b7169a360cc4d9f391060a42da0203ff28b5a702b82f1707e6e777e3a793f0fe5c40ddb4b1cd642c25659989bbc0270412d750d9d50866b532ad2e83f171bbab0d928b280c76c0a3a2da8555ae823413118e52b31a9f6a576837b3f9c0e455244c757b3b6b59d0f892bbe566408b82df224366b613e0c4915256647a01c495529c125956c21e69bc7a651cb3abcf9d11251a2318dfb57aea391fa8948b9024105f244fc1c64c4a23c37cb71b3fb7f31c102f736109c6acace09c24edb015a7c17ba67afe241684b4181a874049058c7f3d157363b8839e4027859911d245dd22538d9d953ee3699deb143b8708e689430fb95451bc0360632401c2a9ba537a73c855973f87032c993f0f26cc3a27a6c67b5f8a84df1571498c3790cc3933e80b1e88b7d4814ab2980b6821795f4765539e951d80798a1e93df6c882d6ea05fb21914a0b7c0ee9cec700cd8e8a46cd6c571fa97f88f5496c6c1bbf671cf92642ee7a8c431152bf8ba3ddd474829c463258901058bf860cb49239ceb1074014fb4d1ecbac121b17769057ff272d531c87eee2703ff854592385a7b8bf87cbcf95422709b9b11a05291e18c61f672a84d55874b952588b1f8f8510fcc13899e575d91b11b2164cc1086359721280895b0fdb63bbcc63e4e84346523ef1ab391be9591af524b6dca27de0a06733a754c764329c3b8044baae259f5aea803304192ff382f3e4879a9ba8b88c0dd3890a6e1b1dc6619ce9346b607c3ef1f24c29aabd0fb954c80777db8a7ff59173aef05efd13544a621f04919d63c87b37658dfdd1c58930bd9b58ae275ca32b912349c975e308864ec95e133917ad9539e7178a9fc74e3fdcbc4478b3eb410d4292c5f78cb32e217d6e381639ca363693423fc29be35a1ab7528ed9b84eee867f426c2aa96522a637b0d4b164e9a527d6c9108ce77ccc33389c05cabde51a4531ce64d59a09aa6aa7e493349510e8c69ba4206381b50f008a18eda076240113acfc9fb8d0c852dc40a75784eb555e0408a3e6e613672b76ce346b3b5c27d4f09a4c89caab1426a320c229f95b06765847b027c3d9896762b769abb6fb31066694c413576f2ec29b93c0837b3c46d6065d7d9a801b0755383493bbc93e919b0bb3d6979a277695a298a8346e23e9508e6a9af1d2bbdca30f9c5c275176842a92b8db727fe1f92d52e70a1976851643c09f42cdf6ca739ee93904103427d05f49cb54f540c627939ad4811214b9a6e8d2b5e8d665ffa518ac10902707241472750c8c4d90fb9288da17fe4110a0032c853444f2aba97ea389c1e3590b206c8b6b76181c9ad510c6860bbebeca69ac1aced3a0147d1803d570047d3259f329b14f352fcd96669a6044280333f7c3ace6048dde44492f70bf8dbc7150b661a02460ba61992ee8974dc225125a87dcb4598eb2792bbccf390b9dc966632e918d58c7a16ccb4c0886422c3b467976ce405acec161cf3c34742cc912ff313390b26de1f56a341917d479ceabf13a8b6077f81158e075a1d55790f7495c76e3c348fa122165cae430b48a753ff7dcbea6d59135b97127b844358a4620299a5dca16b634897a947121417f9837b3a8a7baf610a41759aa8be73fa5f22c2656c0149408128c5aa202bf5be9e1d12f54ca0db54056b2c35830aa4a33467dacd61538d7db881c7ed5ded2", + "enc": "e29704446b36f5c02d8ecb2be8455ca5b7d9001bd7903fc9c048429e0fe9d9d15aaaaeea991cc9621e1101acac18b28af34df64226c1a5c0b7f26d5ea2b49fddef0b7f7262364f2c125ef297d7a66ec9a83b0f36421daca3eb525b8ba046000e9b7efe28f84f542381b692655ca3e65c2dba93795d3e1f1690f25cbe6a259917e5a9f0a729556dbf168a52296f12ede001bd48ee24107abdcdace0c10cc30b32400598f0ca10f38d5ef31d633f041b7778661b68f2a5945996e43037c8b480eef09915cfbf0ac73ac977e033135e293e30fb351e708f1207a6a4557d3006efcf15c91a3c15735dc70f0139c7ffebfa5dc80e571b08bb884424a233b61d5be2b45888a09b0a61e91e11867324586e8651166dfbe8ab865179e9eb2ff5f9591a375b6da49b614e7dadde84f62bedc588b0f9af80abb9ff0885e2819e8cbfbb7743cebeb086a53fcb646d7bce56715e7c7d0627216866ffafb80fb2ba30eefd831c5aae04be2cea479716749be3e50d10ddae80dbef3ac31975f36df700b2ed055ed36b9c1a8e988e59d52b427e27e21fef1798422df54be26cf201d36c37562cd031a358886e2212cc9112bc249d6e7769fbe3495f84433ff8ef06b33cc9f0fab46b62625eaa66c82300f4fa29b176ad76e71d7c735a2896911644c97b7844623e73172792d2fd61db3b83508f4614a4cd1f09569f2ef4b0d638aa1dac7fea128d1e0b544a3cd57acefe681e62b57de7641d500ecff2eaa34a782ffd5b174b74b15b90ada89cf1eb4c55b5676a98ec8354eb38fff7a5762bbba0b9b6683fd45e32bd0199a873766f4736a1884cdda1cd30106cab2cab691d4bddd3b87b683a98a84de8e64707d025086c36dddfcc9d02a8bc76f10dc44e832dd73986634e90345b7d6b2a9c8dd3acd18a7e5db8df2e5c3574961499a07178b634e1ebb4e4953401c51c4a8383bd699add80aa3f9de82782a78b69c3cca8bf383afbd556a9814764d088f43e98bfaf4d8e9590b07c742e12274ea9b568e854bee8e6d0f7e902a28f5b2fc72d6fd10c40e77a914829591f391c19260ae5f4e2aaa113f8fae3de4f9ce85d91eca28bc300e6504f58915eddea0a7552a5c701a90ab8dae72d990459860f3df2f4305aa60185e20e17f4173dd0749552c1a4edf0b654cd41de6c3b07bff1bc4c873f4c06506f04b1eab0f8fa5883577bfa504b3b7b9be7a1555d71d0d7660679104d3e7f84cbc1b575314df50e0050e2fd5aa9c4f571c1b2d26a41558af619e15ffcdd8e27eb5a81c474abcf118524da82c96dbb691dac5679e5821bb382708476041d87a7175bba2af8b0bbab27658ef5dcf7f242e47129e67bf5d00e7318aebb409ce4d0607136fa38e9eb2ec8f29f3b2f4ca485d19f8d55a3221bf095ea4c155856d169b744a756502ce85d8415a2b6bf1b629282bbaa75c179e63888b57460fb4c2c010bed08e42655c6709ffbc032fe9ba2532c09c64e9eae3fe47113555cabb3cebdcbc790dd1e145fdaa10932fe245e33a486465abc9e4d017f52c03e5524c7d8e2e59727fba297e3e96179d09af8d56f178ba484ad194a00c701c521c82cfca2d1461dc507d50fa2f1be73087ee594753dee96196814cfea07a49f0a445219106e9e1dfef08aff1f136c244880b793c1484c10ae852f22bce3fdca96ae4cf1d4674d6584be28e502b9cca5705e9d03dcfe1abaf8a0369bef7bbb7bd0f577f6343be4dadc159c2328c861584c88d9624b26ed5c6461a7cf20ed84a0af3475710655e7e50427b12a6d6c7a0fedc1d59ed983f29568105bc3498f4c7b5df5006679e6e753a9e8986d105edbe43402a4a6289e88f26439f9a47dd887dfa9bdd2680840700cfec8d03952afba5011a23f55d0188443479ee93b40d9e9850272c3ad46e0675a329aa6dc1c4854becbc67939cad13ff3f3832d95ca5053d5e867935cf1fc19b737bbbffae220bfbb8b6890f0541d9a6824e33f09207516659579370f5279091b802a15343ec70924bfaad3663df95bbe667270ff842233c63d79f94ff65fccbca72282d8694e72cd7fe70e40bb1adcd9188a056c81f36cc3b8c74daed3738846fcd729d9c871dbc81a06624ab589bff471afca442d8434c452853d43ad9a0d0e39413216e65ed05b7c8121f0b09abdd9d1cd5bae2816c7e1498e49eefef0c0b0ace052a192922fc8e2ab482e2e67c64db0810c5e4c68", + "shared_secret": "82e39853d199735aa5bf8fb3fbee412de8b39ae39cbad0bd7326c3cf1f6c6232", "suite_id": "48504b45004200020002", - "key": "df187c96fd7fc267cba306a5db99ade447d19a156e68c45121b3297e6b95c0a8", - "base_nonce": "3401a104441f298afddaeb69", - "exporter_secret": "93a466268ad865d2b8040c22f3bb55e27d799fa257eff50a2bd4b6237e82591d39303428a4d899f4b3e00fa520f53423", + "key": "ebd832651d7005d5a35804f59144f56e0314e41037eb8bccba607daea19dc555", + "base_nonce": "013887149dbdbc55d7839b50", + "exporter_secret": "8935fca4f779223c22ab972fe8a502fdf2a900679dfc2043daec923a367bb10b294386eaf52196dde82773c914c94f37", "encryptions": [ { "aad": "436f756e742d30", - "ct": "bb1268ed759b7890fbaaed0f29ffeba3e928f3ed2096479247a411e0cb791d881377f8aa7bbdaeda53ad627247d7747bebcf14b4d68155fec97bb94ab10dda603d1308484a12cd7e7375", - "nonce": "3401a104441f298afddaeb69", + "ct": "ba95e8b9f0e4379e073383af32ee83594859e83f2ccb767886fc9af7e7610181e6245a732465884ceecbfdb9301b6865e05cc45e3587d0655bddcaf72459649c92db3d0a40f343f9d344", + "nonce": "013887149dbdbc55d7839b50", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d31", - "ct": "92616ae85b319e95d0bb9ca8deff125721ef8829190f8a03d104815fbba87e836fae86a03befc39a58bf496dafa5a9b228ca38071fa99f97acf3950f3c751087bdf74e5004b8aa625b84", - "nonce": "3401a104441f298afddaeb68", + "ct": "ee00afc90fd18a09fb75cade86c1d0e6fac3f24dcfa6a01a185437570515f69b6fb893b0f42c5502366ec50b3d4181cf0f0fbcda62b1909870f77b0fb000d7be054fb3a59df4c1d727ab", + "nonce": "013887149dbdbc55d7839b51", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d32", - "ct": "df950e1658465a3fe455485019c29a043b4a62165974dd79d681ecdf9a2b60211dcebbedf5892a8c15635fd1e09b8000d3b31cb316ef0fa9b2208512d3c2ce03029d206f1a54a0635303", - "nonce": "3401a104441f298afddaeb6b", + "ct": "3c1289e325df47042f142897d38e965e39e54140ba0d7efe4fe47f45bed3d54bc010b94e7fb3f790557f191812df1f21531558b3d4d1fa0c81863fc438bb6a293df247ca695a64aca140", + "nonce": "013887149dbdbc55d7839b52", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d33", - "ct": "7640b32f733b954627bb61eff09b72fa8d9f2f236f2760b6f06d557c05344bd843065251e8bea02f083828508317a630de7691e5557efc8a812339457a50c688597b0799c111f700f51c", - "nonce": "3401a104441f298afddaeb6a", + "ct": "5ea8a9aca17669792f0d1575a878477d5c4df693226698f62476efce2549a00a69b594f7776ab70b4ffa4ff4ffb3f6b78f6d8ffee59ab62f4301a87948667e4f6d8b7efad4215df3d0d1", + "nonce": "013887149dbdbc55d7839b53", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d34", - "ct": "98ddf0ca606c5fe033dac03568540402bc44297ef9bc108ed2a27ccf679f797c91218319d06e45343a62dc4e583328befe7f056c1adc1efbb2ea6a0931d1488732a170f190fad0f60a8f", - "nonce": "3401a104441f298afddaeb6d", + "ct": "55d64b7b3ffe781c69b05f74599aae39b38588f3d6e0d833cdfaf920ef1df4bd1fd658fe005f157ef9d368f45d0f3cd41068c9059c62ca535ad58781afc351f4b38611dcecc5d40c9d5d", + "nonce": "013887149dbdbc55d7839b54", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d35", - "ct": "ac9dbe13826580356e28837dd00b7b9da6c2b475507c681a41056c453ff1bda3f8cb2d1926609125d7bf3f7c04fe8379e54af3aa8ad4184e0137d106d85c5d8af19046c951e3b9ea242d", - "nonce": "3401a104441f298afddaeb6c", + "ct": "03f577ef31fbbaf54252e9c9ac402360d7e87633d70c9ce384f89462e8bf7d52aa8b3ce760436ec89b5dea72770ba47bbe11a5d27fede61c6bb1730300334b4c6a447839dff17982720a", + "nonce": "013887149dbdbc55d7839b55", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d36", - "ct": "cf5da78fc372b29dc102662d1cf2ed8ecd625270b674f1abfdc53debcd27ab758aa68e546c465e30c9f5d4bbbcb0c130b22ee14a38d63f95ecaac847c888ba7c750306080d6187d25bc7", - "nonce": "3401a104441f298afddaeb6f", + "ct": "8416cc680f83defd1f362e4728db97e2bb8d05b395a45b4429aef680295fe887f15b6cf2f1c713271e9c768ede2195e229461f2634989d2c1b348d02337c518d06800aa5049680d68ba0", + "nonce": "013887149dbdbc55d7839b56", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d37", - "ct": "b544c40c3f66e184a8cc44a272735c9f37beba15fc33080de34e11d8a43473fe3c7eeefecd1a1affc8bba249fa56cfdaaa51ad289fdd857d54198e11be1a47e71dbad06486e1611251c4", - "nonce": "3401a104441f298afddaeb6e", + "ct": "9c3c8a2e6940930a9b09aa88070dfa7678acb40f133c4aaf50d1cf82da0e04bd4451593a1f3ff1f862ee8776e2904df06bd566e6e1265d10f129f947daa5caf1735dda05aa4417f9fb09", + "nonce": "013887149dbdbc55d7839b57", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d38", - "ct": "190253666333e9391b89793d2456745a6a2a00b2765423867a5eb5cd4f8fb73e5b50e7770ca9bd700c3bc050b1aac79bcfe2819acc0c077dd867a743dfb0eba8fd215ef890d233faa03d", - "nonce": "3401a104441f298afddaeb61", + "ct": "fc64a28c49e056a846114179947087c57bb09fd3db49e4f149e22c01d817dca290def7771dc66a20bd26dbb28d366f7e44c3e5b02b8f7e37921d3fc4f3b0865410f5cd8bb919ad824744", + "nonce": "013887149dbdbc55d7839b58", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d39", - "ct": "e3a0080712ea8928467228004cc5131dda33d797919511b42b2875e36bc82cb7529a188d87b76e8031674fc260d61b013363be8f9a8db54a42f356a4a822c99fd317e5627fe2f75f249e", - "nonce": "3401a104441f298afddaeb60", + "ct": "6b011b9de556f1f06f811804b3a1b4040574b064b60b762027545ae317b1e6a8de53cdf253d81477a596433c91c1ca4cf3f06b573be0dee810ccd65d286e1c272cfbc3af0a439e1bf0b4", + "nonce": "013887149dbdbc55d7839b59", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" } ], @@ -187,105 +293,105 @@ { "exporter_context": "70736575646f72616e646f6d30", "L": 32, - "exported_value": "26526de717a23744ad90e10de8112326315f1f0bbfde33fa226661d4bf05b655" + "exported_value": "e35760f027e72a66915f5fa27d59383295a42242af91511563e6f0bd135fce81" }, { "exporter_context": "70736575646f72616e646f6d31", "L": 32, - "exported_value": "e76fa74cb51cbd50e2a3467112cfa7e4d1103bc18d5b2c5da134fe25bf8acafe" + "exported_value": "30ec84fd5f4f49cd6ab82f09e903ee4192e92d116381510361b455b5d29df750" }, { "exporter_context": "70736575646f72616e646f6d32", "L": 32, - "exported_value": "2acb3471805b3dae2b3b437a77a16cf7d67ce1ea54b1cc2dd8e5e09c87fc5bfd" + "exported_value": "ed31f4bd4b7c5acf3245c5ae651b04bf4164ed3a700c0b040306108b1a315cea" }, { "exporter_context": "70736575646f72616e646f6d33", "L": 32, - "exported_value": "fc0a2f1113ed4ab05245f0380a1f8615eacdb5b1110137383a39b32190acf27a" + "exported_value": "db0e641c78de3f9adc2c441a770d848446f47315c8f8dc004a12551115341dc0" }, { "exporter_context": "70736575646f72616e646f6d34", "L": 32, - "exported_value": "9a306efa9d08911ed064ab514285c6b1e1088e3e6dbe375596bba2b417d637f5" + "exported_value": "03471a43a65a317c6f35a3beafb2a73bce0b710d7b23155d2aa615a41c917731" } ] }, { "mode": 0, "kem_id": 80, - "kdf_id": 17, + "kdf_id": 1, "aead_id": 1, "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", - "ikmE": "be082e80c10b5e02f8a277c13bb7e8843bfeb63dea62b66aee938f3e612c15492a7898393af59bc7ead87fceae41ec2a4771792236f529cc7ccbb3f8a45abec8938532ff66603cb0e75cf3ee047e9c9d037944add03d58dfdb5f4584b50613a3f1b8f832e407e076cbb1dc8a1314f26e2a11385cb903cb8f561b6d44cd10f61e", - "ikmR": "b7a20420265f1a189b2a19a272b5e0bd57702b8a2c46e947bbfdb4ef8f9fb158", - "skRm": "76b99c8d2d9d1bc1ba3009c7fb70120efcc12a4bef5fe4f9f7cf058c9a546df1", - "pkRm": "b01903f6a605a4c806dd7096ecd22f0c74827e67b61d1aa53dc9c7c0387ed1a059f2146d9193c9b0759fb52cb19251caf9061415f5140a41598d6cbcbe34508a648a87c82e5d10c19c404033796d87485ffb0c0968f20fc333c297b56e35f6832a0235ec851ee4ea41e6f5aeb5910f5667006e794d9a5928ae998d11a2875d6424ddb43bb955ad8fc9b56a03bc78a18290a0549fa548b25a4b29d28210040c2672c26a427de0400c1de3ae35ca227b060a8728226e4282ffba6344a3c9990b2000eab4b3b76f99e9b2f9b6a5c026c847e3192590aee72b846b435c767090d9930c8e33624e1a8c0274729176432f12c6b37883c51a998bf194863500618a8cfad126ade415987a09fbc258e3a72b8a3ca8b7092dfee0b9df0bb7e3cb486893106c8251cd311140e5aaf11c9af7f9b65ba29657bba80ba58571a76265b014e425cebae44eb8f830b7362606c594ced0816f7a3853e8614537a5e5e782a821873ad97635d2b5239296a20c1344fc41013848e1d10bde4abf9a336954857bd8f972e68046a0747dffa7b9edb59722d2a8f83aa389ec352c681d8f9523f77c2ea8080306d710f4b08fcef9a3f2d2386c1748f8790954ab8dd8e149f5f63da912bb63148b59410d65109c76500fe4520c18956de476a1e26976cc29064d4382e40344f32a003e0598864c06f4bc43181ab203f254f7acc1c282726079199947146ef99dbd545ddb96cf4edc37cf0b4872971996f850af391803f0776fc1171d64284450815c06017bf135fa1bb744819249bb3551c4532695c1b641542daa4a37422e241b5ff6d242bb4ca76b676fbd11898990377b8917f65a456376bd0791577600298f4897e359222363327346a52a9229d8d671fe23998b74678da4028ef49e5918236e501e7104110efcc36ac56578368be9145256953ca1e342e24a63a3e91a6d42727575a50427233ee453d3c910b0b1c9e48bc4f7949baa110c5e1cce8c3aacaa00c44fb3a92fc2af2ed2135f997c5bf853915ba0eea5b9a99a0604752a8f5954aa1229b3f9715e51687f825e6d78616a18a85ef707e6e60ae8f224b6d8b9061022e5ccceddfcab17d8758245b0bd125308969027921e10b8abae2118ea3134ec30118378253d2b78431c98b0826399913bbac1a287e26b7f82a28bba29358b89642449b1572c662b0be09061e5aa8f46357d0e537014bb9456a181098b695f9149019a2743fb177846c52ab154f4f2cd00fd8dd3b29efa37c8c2f1b21e6733c6605cf5e05451b8c0fb6c0119a8661ab497ff103deabc1152540ba19357ace9a40a89c783721187fc310e633c7cf1acd2abb9b308376f42054905aeaf806118b3526bf900929728a10b4f2eb804d309c1f9019312d08747eb35d99872d4412852d409b10b0c11146aa9e33c2306131fb89f82b16e525b43ebe57e72e912e3e11381093b01f6b704a599f6ccb242cbb9fbd92c1965a250f8be432a25bf281dd90c0609e558170001a53263db6c19897376441b20b689c7615366493545fba04575ca73c9db87d033c7eb6896b2497273dcb01257b422d1573896b089c32cfe8151178373734c15fa0449a30169b3883c35877a7fe108b9e54b30aa0f8a2cabd760bb7c2e49c915ced38fd75c12e40f2753c057864b832dbce9f5bb507e1ce904a48c0c56cc79dc4120517e4ea4acbd86287388b911c91a78d0d1f14ad1e6cbbc1e6129c6fa81ee42a35bba961e230fd72196f87c621e695aa433c54fdf155151", - "enc": "728a7311daac4cf076c7cb52915a15008aeba3ff1b1f990034b7acf93eb23790be6eac80bfbed1c2f36a14dc4dcbf9c5d21b60cf0d98352620852376b1ee001325c55d53d2ad1e706d937b86232881478a68c77656e601ea1c0cb4c6d57797a09ede05e77ebd85c30691c02720af0a05614a2c4d49a73429254f1151d241919bf63e73c58a1110f22bad05907f4f3bf531eaf1e9a4d080b2a0699b3e6ae07877ceccf9d434105979b29f6d9ac0fee641dffd87e6c77c4b7ce9e59f3a340b40efa8c39e944f0b5a95e48d8a65cf6f405c22c7bbdfc78c1cecfeb12e133e1418cd5c1a5244c46bf7b181dec750eb4462b5786ff242a64d2d0113876d12004edf3729456e415afb1d4a60ce187e270cb4fd2b41245ac0621cbd8fb3f89392ab9e69daee75793df32f0aa138af050c2a96574f2e8de610602e3078adbd2c5b1c3e933e9569cbb5c39c2c009fcf2a77b6fc636e0b3c89aec5ee43de033fd18aea10eaa164fa417cbaab314388e753928916e202f66dfb7335219588ce5cd0da1c77d3d0e6410c40328f39f22b4fefff4212beaaf7e1a563d9980ba737b6e3bbf8446c5a301f59b6d7198d897d79b4b93d87a10d9df14189e8df1ae65739fa46d8c498f0a06efda274f53d25814855f2d57dea1412ebf63839e9b6a1011052beac4e40bc7d6a218b76695298e943b9b0fb8aed2c2c10f944136ee240779dbb4636d92efffee5d38b67b67348d6b32f4bc6a3ed10c666e94ee1367820cdfb790abfdadc75940b3c3f028117261e18c0c613778488cd7097ba418a6fb9c6368b7ffdc7570896d1a7c8c69375050c3376a302f994b7ba123724205c4b481c0a37b8adde45e26a74bdb9299356bfff59a800ff0af31ad4eb1f890cbb2135f58041ea4bd995c1a282c08d2b1ee3cdbbd2a0bbdd3bd79e849b37ccf27cc0fa88dd1cd3886281ed1cb2c6513bb004a1847dfed8c7b33c22e2fb3bf6c48e4317d2fd369c156700f48873c627d53d08018f9186d817de511dd575068c94f40dd8e8bc041288b7cfcf275314c7a2e5b92045603aec2f5bc803de63fef0b4e834c9c2d83db78393afdc2d0d16e53e76e928d6752d2c1ea0dd1f1447fee935ce22d4d87491e784969cc179075b65241c5b18c3293042b06b0191aafa6d0fedf021e25d08e5b811e9ac0df8e7966b804c671d3c680762d70e889226a71077234330cec2fe32d0ee92d43b8e4aaa5313ee6f99935f64912cc288489afd027857cbd34fe7dc0700684586f3f3054e7fab67fa45bda2eee532a0be23c1f5b8272873202e15f7d4e699a0f93edeed84a00e5cd52453c91c5c88eb1e4bfc1493112be2dd118f5a465d9a645a249651662b4b487ae87e9dc963fc31192f25f08b139eef4ebba062d531e5502aae9748b9911fcdd311c919c2112f199bc92875002633f13496d4e0362cd0add7e778a3595f37d330a40c546b6dfb0bf0f434deb481cc8fd1dbf803b588022b5a90ec48fbb617009c0db34ad7a2b4e12712e2c7b4f27b21f85a7a653f7f3a03c80400d9b60fe27c865f7d80c2c731e3e90f355831bb2a07f833ca63a971863210029cb04772f7eb1a61bc01cced66ea177968e65a7e910a796336e98c3f64e29750", - "shared_secret": "409740cfaa6a15e3c9efd4a308ba409fe71b0e2ab4afec0ed429c1e93b454715", - "suite_id": "48504b45005000110001", - "key": "13b2a239b371b2cf6a7e48681087dcdb", - "base_nonce": "535e5f6ed092bf955da90e52", - "exporter_secret": "ffd1592c58f042123a4f77b8a6a96591184403049bffd1c1375e1b31af3c24b6ed756560b6b86e946a59a3e1658c17a4d9cac15c7d2aea1d39ae158a6dbe5512", + "ikmE": "93f347b9b3d83b860c47c6abc515490bf0d50775db3ebb660ecaf9ae5d6c309441bc577accfd8e9d87791ae51b05b01ac8727672c01f71776d0698b02a8059f46a17533a410438058744866e0ff78b7220d4ce4d96e130d30b65eb35011ed134a5c606031a8e93afa8a760b491fbc084b0622a28d430f3211b14b340396616dd", + "ikmR": "eeae80edb6af9026dcbd638fcef2f4a19e03ef68ed699e507780f2c7d167ca53", + "skRm": "dfa3a04d54a0ec2f7edec57185e3df94063855fc7af64f25b815417a2c6eb0e4", + "pkRm": "ecab6a5f147046838ef641bf65f52fcce29e6130038573128e839a1ad7cb1a35a9c95c3a41d7464b365a3043b17a153c6a09382c580fcec41f38940d336309636c775bb20461f9814be668deea4d07623f545241445b72bc15125c8b90a7c41cda17292f93ab55659fdeab787340011e5c3de9e4a699660ff5256db96224b2586fecf6475fa76bc0978fd25b1099603053f48023baa119074011e01ca3f92a09ca088c2a9af0697416e661eebc46a2069c31042c570678cc229f6e502121112f4a148acc59990d6c378db26f97398bd2929a19d0c50b5713400b70f9d50c79388510c13bdf975f4b4c60f7fa643f059afaa580b61975fd59aa98b4c5f2cac3422b9f89f73d14a18a15942a5567c4baa09359a45d1ed35177959bbfe196c7314f95f0a40d24c6668b10de95a7e08cafb46873c99611bbdb8e1d5cb0c8c2beff0b41fae1000ec9cea1032a3a6838c3605397d59fb28c9975aa5f958725598a0c82b788f7fa22dd741a0e673497617043374e47f69903c891f47787ad069132a93eb6f9b15ff9923318a5c382c0fc7b432d8a00652197941684a9567a92515c71daa8daf80f2e425488f88bffea0ca2a6c682d8aa68264ef00241f0ba62e2d529add964129997f51a4a0d195b6d5b0c31634ae81cad7fa53442c76646a996b60c3e5f1818fdfa1895c0aa8cf393f91baeef237861e48bbb236c3460b949800ae4c3255454582a04abc3777c94f3ba0f3a4b4309024d117e5a3597e53a6655e17524805dbb4386af689609310f8c85c101bcbdca7c9fbec251a4f62e18b839bf46a1da5034a8887683a2b56133b7909665c5a097b7f40be725131156396bd60ff6021f17672795a375eefc66ce667e2d861a03242a2c67ab845301b2882cc62b54ba040a425611f8599744b741e55643bbeb0851b30ba7ca922d0078407396272355ee3c08a91670f2b8488b3c9c8791778a000aa263a75322831468679f795578863e67e149ccab053b39497be4ca149133a2e91cabc8390119900fda90d7b2413da2bcd9d244600178b7164446fb3a3dc433a415a8001085b45bbad32843835464999717ef180f51fc8660e63b400c957c609dc2bb6e43326fb33ab6c6c66dfe78a70bf5394c9262d65a395f857989854b95f99481d1862a5a3b5555ab9d44b1cb0bc9df89395b192bf4c43dde2bbb610850c6024c8591a7e6933746921421575d703a45e2bc08f86376c2a1cb2d133cf0346ccaeaadb81929c2d6126091c06ca81f95e413507b91e0f0cf548a5e79c344fd962c56c895238395abfa90bb27b7b646707120a894c3c947411ba11255f5a6a032cb3dbd06b80d1229e9dbcaa3fc84fe65561c3c4a8333cb7d1b4df823466041123fb604c14349ff8bc4b02ba1de71303cb99cfb3649f16703cea12780688cab0529a4a8cf1b09b5ed705231964a74622718248be25234add881a02a7572cb5ded432ef95a078f626c0006a0a0cc4e7992b08b52c552d80b1c71c3906b32ae52974b10447cf6ac6dc3a3dd53151611288dac5dddd98679b611d0c805d48aa5069451a03c3e9e880228e581901a5cc45c34cfc1cd258a7f7a10b90c281dd3da315a0b3a5c9669f3640c27d33028f922764585f8ae61cd138197f7f30615fcf00c2413dd168044c9a4e65e5f68e93f4b04edadc409f9fdbacde2f03203b08d8f35d316fc7e0a2fc57799c2ca8332a514c58c4260f57f980a241a6f98942c92c8c90f33541460657dde1040a84055924a69", + "enc": "ed5b96e04d48095bed5a54589775ee4979362198c7727fdcd62fbd6d0d4552aa5ae2a30283049bcbde84dd6e4c8a330bdf9ccf04190fbde2c63c0c9026740d5d00750e4c6244ac0e7b6a6edb8782f0ac040b4161d3a9f6500ffd1cfe6e93298ccaae1dc04a6519f52d96e43c4e7477cbdefdd17b65e002e2b04d1f3d5715dfa3a0014faba0eee73a2f30d9a71dfa4ef9a0a37ee45a7f67c9209efff17badd21d452bbae583b046a602614ffe168bdd8ec27048dc5d95f58f8b70134c161282816dffbf9f88db63f28b39ed958cae9b5ea26f0ee54927d1483b644f338be3cb6b20157fd4b91b4fa7266b32bacbd73e12afe877181d0123f02212902b1eb436c0970c395355ce6d92568014da811cd369ac68cb3d4be48318a2072965358bf0799f1320ee1a98268d8a5796c965bbc19d8b5ec7322e5390bd93aa85103e4dfbe35f16331afa21a128c62a0f9bdd04e321d266187413263fdc40522ca665df0272ac2a0418b692148fc3c2aa9273aaf424f9ddff17fb714e40be0595e6f3cc2d4e82732622ef545218ddbde8b902ff2df9150dd4a3d6af2300f57e9b72b6eccf95bfe26ced55081e01d4723a81abd0f00d44a40020d85d9c7c73ad4b129f7ebbba4d6c57e6251c58e824b47624e2e2a78c734cf21e76f0d7faaceba8b7b1ad1d663d8edc09b20d475fe79c6947f6a56fa371bb0c80625ba85fe475812137e216709fe99bb1a8d63ea38b34c89c1bde2b8685b146bf185537e53df86bae6dad3950fc946fd47893f48fdd1066a5fef1aeeb75144f0966717e12b092fd96a30503d7ffb84d1125bfb6422f296c1ef82701e5cca93a79a440a4b29a9de5961b582237fb7d71e5380df2bb8861c5dc2c6bead3ba60a35f6104bb50481e1436cac2828798011b9ba20a39017576be7a49559a3eb9b1212bfede28f72beffe5b40254df490ce0cbcc9110159d24cbe6b48227c5d0bc91c70d7f5204693122d06abee77b99fce86e12c51e6a460d5b47a0f19dfc5e0b6fbdb454abd151efbea1bc514074405497308a7278da302e9f64b033f78df23a31ecf071bf1f9cb30d9a7ea1cc87dd0066f3c1aaa0222caa580f8333ddffbdcb795da1869882ba55497b33ea610e38031de9923e1ef1f2cd48af494507a7765c7e67734e81a4d3683823dc7d15e8364280f255b8bdc7972c6d5f1385d11ea8bd5d7225fc5987a3a6d65bcd20b5334fb7036785950dda89bbcfd337ac286d87bf5447f3c7d16930a07995236970a65acb5c0cb56cb6294046296711b7bf3d7c1d40d26efb9550a50d653cea6844caf567dde9e78786b91a21eca728ef80f4b066962edd50144f2a0e7f7a36934a6ad42ccb51bfe75c66839af77456a126d71f09b40640fbc3eca319b16c525f422fefc83e4a2c9c2ae18f1c967a77660dc3acb57bc12e1f6692fdf1ee034fe8e0f5808143c4f342c5e6a37c520dc3a4c14e77ffe260e1027ec91bb4682417cfcd505b5c45e01e1532e8925eeeaa48ab5fd80e28dad7034aab8afdf96c6234842aca004f0aced6022c4e2f067b928d4908de20aa3f2d14307bacc6ec685b026858d06f5e98da3f120d5e8ab830248c49c3c4a4f0830298100999cbae5419d5ef0e557f0", + "shared_secret": "3688931682c215e9e06ad620eba7faa70dd0d38081b4ea3d5b636ee062578991", + "suite_id": "48504b45005000010001", + "key": "73d38ac7f53e00cf8f45a8a1c404db15", + "base_nonce": "3285a52336faa9bd2d1dc154", + "exporter_secret": "1109e3cdb4b327d00442091b96fdcf11d589d7b51485eaeef46a1969eb78d3ff", "encryptions": [ { "aad": "436f756e742d30", - "ct": "40d6dfc211d77a7ad9cd421691fecfb6925a56cb211f765e9594a22ff4647688b8b45cf04a98895f875ce7d56723317eb5dcd367af4b9e05e053ce57cfb265b568546f7d982901638e96", - "nonce": "535e5f6ed092bf955da90e52", + "ct": "7be7af12b6976de87ef38a5454e94dbca114430bc8ebf32bd81a631b2c5c7fe67fe01acc69197d53dcb207c48073b9b3ea9fb5e1d20f817b48c7b3257291ae26742bba1be707d78202d6", + "nonce": "3285a52336faa9bd2d1dc154", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d31", - "ct": "7d1658f44cc3b26761a1323078899bbd5127d23d455e30d684715e8e6b894cc527eb54f5967dfadabed103dcf44916193c7eadc90447d1a6c1e1517188bc2d7ee8c773676f1d74d4ff8f", - "nonce": "535e5f6ed092bf955da90e53", + "ct": "b9e5d23242fd7cd8999282f58e324d5b9d278221311c2489187cc723ba58298c9c07b1c44bcf97ae312f5fdc67257fb8eaf4787d1250eb807bf5fef90f1740ce98cfa2d5a87f32868b06", + "nonce": "3285a52336faa9bd2d1dc155", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d32", - "ct": "44636ae22b39958ff640f12f7009a44eb26bf79325f8e9b8e87b297d061e36e9bcc4432429b2f43810f11c94976200b3aa99add9d339482acd02d86b27ec446270d17a68d01484f7f6a3", - "nonce": "535e5f6ed092bf955da90e50", + "ct": "f30fecec3515de28777547caada8dad061cc6d349cccdc4f1e33e3b7caf960276a41a46f5e5e3bff66ffe9f7207c4998d53b744a1e8693276a6e63aa292a725801431e8b491251ad4210", + "nonce": "3285a52336faa9bd2d1dc156", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d33", - "ct": "06829434b50306244675419ae1746e9d5c726ab1d86a2308480d5fbab39cb5ceb57d3f83af56babd8e246df938dec8f7d4726ec15cd1468571f437a10b6605282b2e8d66f50cf4085190", - "nonce": "535e5f6ed092bf955da90e51", + "ct": "0843f8d4beeb2ba621dbab9be2fa9b5700cfc649d91cdd6239edd7b1936688dbde5df676eb27d70a3292786a92a6013fdc1217d0640140be0637334a6dcfd7295e736ed18e118c7ceded", + "nonce": "3285a52336faa9bd2d1dc157", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d34", - "ct": "470cd4784977ed4c298a36a0c4888de0100d0d6ddb18ba72413643177fa594cd00abe0678f3db55ebc960010f50223f6d57891002418a2cb145d3159ab221bcdbc877351157b17c93d84", - "nonce": "535e5f6ed092bf955da90e56", + "ct": "25d0c73fda170f305f79728beb5dbc26fa9bc61dc0ac2a58dd2627c7a2f9491f769bf43a00934d73836269abfcd30807e0885bbfa9db5e59774ffe8d0c25b39e5aff446b8477d7abb969", + "nonce": "3285a52336faa9bd2d1dc150", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d35", - "ct": "999e8dae91dea10bef184db2b1a29c332d6037a4d11723a16bf934c07443bcd46a80235b98f2dda928814c899fd7f021d4203aed68618cd3ba34897b558bb877bb48f7c9f1747e372539", - "nonce": "535e5f6ed092bf955da90e57", + "ct": "cc09a83e476f47254e23aae994f1f987e599286498f7d49f097051fa456d2122e182f74a74c4c240af1dd44fa47d3c1d49b7f901caa90f772bf77818f55a5384922def70f2747447ecfc", + "nonce": "3285a52336faa9bd2d1dc151", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d36", - "ct": "f03c097d73b0f95b0b9ecbbc5633bb1a8722fd33bee91d6411fa68fa0d0d295a1232d7547b76fcd6f3fd27fc44df32b4a7bb0c9063989c7ea1694bd977bd6f462d3e636297ffc094a686", - "nonce": "535e5f6ed092bf955da90e54", + "ct": "06ef6f67a5b9cd3b7a800cf94a42c4418c8e56d41a1fd73eca8452fbdc16a65afcee161589565a9f8753a063b47694557e8bd26a40687bd27fae52930ca2dab851a0c2d52828ab58ed57", + "nonce": "3285a52336faa9bd2d1dc152", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d37", - "ct": "b57891837a0b62f0c53f3c38f996d952b63f36a796e929031d619bc047ce1afdde543900f0d6561def958bc0855e67562bef2bb462e799881ef84902b0f62b19188595ac1b8d20759f22", - "nonce": "535e5f6ed092bf955da90e55", + "ct": "b286a4287d4f4b17d1112164e05fde12e687fbd867cd044a3415bb962bd27f75255d1d974257c457c1c617657c627c464b10196cecbcb8f8169d01886d0b3bdc53479a70ccdd0beaf534", + "nonce": "3285a52336faa9bd2d1dc153", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d38", - "ct": "61bd50f7df22c75355c79aa20ac2b0d3fe27e25612ad42071cb4fe4d5f31d256d88531a82fa5fdb989d2e41666f12b6d54abe812ca00b5fe3a869a5625df55d0ebb5c48bc0432d3d3e5d", - "nonce": "535e5f6ed092bf955da90e5a", + "ct": "a110b6995c33ef0fc7444f062d182e73615b8931ea415619fb57a6989fcb30bde2739a27eb54b6273729d676eff56fbd6d6a1f7067eff93885d124fe5203be649e901ab5cca8578fcdca", + "nonce": "3285a52336faa9bd2d1dc15c", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d39", - "ct": "7abd8b3590ecc2115c5996dfe8bc00f9b289424f071450b331b6c9ff78b8e3a9c2fe3bdea864e75baf285028f069f2e2300febbffd5198daa5651009c3e6b6a01ee13991f47af15efe5f", - "nonce": "535e5f6ed092bf955da90e5b", + "ct": "73c8e514dcc915f997348ced30795f3ed03d098cefe2fe8bd5439609405171aa5fddcc362e9a56799030addfda4e50f2951361b441f1b41b8a5222a69b2fc444d4fc39b85614695284ec", + "nonce": "3285a52336faa9bd2d1dc15d", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" } ], @@ -293,27 +399,27 @@ { "exporter_context": "70736575646f72616e646f6d30", "L": 32, - "exported_value": "bc3aaabca761d05f3be31de4f85747d6831d19138f31c357b31a88f3ac2cc296" + "exported_value": "8ccc068f1e0364d9dfcd6f138f0f964e7d30275fa300548bd45b4022dc884851" }, { "exporter_context": "70736575646f72616e646f6d31", "L": 32, - "exported_value": "daa6b816eb25b8a9343ec9eec59531c362431d63ad310bb69b0108c5705eaafa" + "exported_value": "95a615054a532f857ad1b59d2a1695fa676395060809f9c5b208e8d235db2764" }, { "exporter_context": "70736575646f72616e646f6d32", "L": 32, - "exported_value": "19b1bd8610b8f6c2cdde347fb373cc0c841aef21c4c6ef2820503fd41998e26d" + "exported_value": "0a678a6385518d2bc45541721df4545e6fcf8f843c10794f551a69ababa39e31" }, { "exporter_context": "70736575646f72616e646f6d33", "L": 32, - "exported_value": "ef585e5fa605bad40051756d04e13e99db4dfcf2dcba2372c40f00b842e54eaf" + "exported_value": "e9f5a0ab3ab64939777cef0bd3865eeba1589c1a1fcfa437e36f22107b08fef8" }, { "exporter_context": "70736575646f72616e646f6d34", "L": 32, - "exported_value": "074a94a2611786c8617d25d4426ebb36c480b4c6ce943d8842609b5860b21756" + "exported_value": "d3a915ba660a940af4233eed669fcebe50ea5b102004091917263cac57ee0386" } ] }, @@ -321,77 +427,77 @@ "mode": 0, "kem_id": 25722, "kdf_id": 1, - "aead_id": 1, + "aead_id": 3, "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", - "ikmE": "f2f85a8fab6b4485b10332824214d5f7f9a448111782652f7cdb52fb1b242234a5db2928dd73ab6a4d16c4708d393fd479d938612e5ee0833f75990003a89572", - "ikmR": "0a91fd2da3045f3e858323419f1da6a18b82560d4bf1b6946f8fdd01f9678816", - "skRm": "3176785d9379471fa0080e44ffcaf8455f3f758c2dccb1ac807997a374449012", - "pkRm": "59f42550265a9efa4ccfbc7c5082c9bdb5b1025153208b0bd8a3974142b915f403f53072c40acad7b8404a61bd34b56271a2ab4e626e83e441c5f7be0d39c932835a2d419928fb56811bb5645172b39a1d1997c8edf60e81f8a7349849c3798f2c25c94e8299e250c07ad48ae84039ddd93893250336085954a86c8e23155dca7035a433517c2ed7961a4ae16dc6297d68534d4caa6e9ff21540932928f54bc1395a9d0133e830303841139ef617a904bd18e359f5cb1c9a938d94a573c575184c274951d6cd2f02abbb34288ba12f0a965c175a6cb6405067960c7e8c4014c51c682a8d7119c363209900fd89ab5b5b60106aa1560280fa0eb221375e57a915855299345212a33111526b68e42163b01a5c0778b381ba5505796efb03833637576b3f72614168103dfb87a5c9dcb32611144f2132de8cc1e00961b6275151896c0da04d5c421b1f0bd028c4b9582acfc4467ff523bed2d002e99a4f240c4c51f26fb48b830b31ad3199bd6295c7d1e70794317f57655f96b6a2ed361a0979707f3a3e4d16938257a60ee5c9ab7b865c05a4e41087d6dabcee3ba67c8864b3fbcdf451bb31ec6035b504dfd81a0804bed30000d7f4747b56510115c03e3409fd8c95b544c8698b3c11684e9fd734a227881a35056eb17bcc1ca2286059636c75dce88d3f5208289b2a98b1806664b7bb9963eb1627c04b6d6f0629f90c992351cb2a65b5cce31ad67b93c513c367053c8f0acbbf7a19775052be51bcd09b39af729761172bd1645acc8cb01c0b14464a17c05c1497747a09d7c415a86e559c30d30658ef734fdff1857ed4c53c628941e66273a9b5993210c74b3f05d26be483566004cd20068773ea17eb4750fb21692a530bca87261a95bec2824f84320062835472cbc343ebcb255093be0a4dc5793733121213b13a3af193191052cd7bba041053a51442a67410063b0a2663ab5f136443d93fd0b042535377de65a5827c253f051c6e599187baa93300c682253f6cc417cf48c4d676487a740aee96303db395576a18491647e5086f8c47b6233510c21b5617d0b61a34ccbca8cb5938b0eb913b3736c62a379b6cd1004227c42595bcaaf10257a0440426a2c426490afb71cdc63749f61ff1d9879c02436e6b16e8e301fb3aaaf032910ad567ce96c180610bf84a8696e26bb8bc23068bb5f4391f28618434484595ea49b708862fb92ec353261aac8674f619f2744b33565f006d6acfcc9e4c13241be170457a54a4784fa8c8c012a821f3b53484f0b6723b3bd8d43424104074c89fbce399adc845d9fa60722a27a0802e9a0216d7c1a5c99b320e8bb602330a7cdc6758bc2aa7f8c657f78d7c297213b85eda0ca69edc61a90b7a521b3688a388e661740fe13300f96c7f03a4bcb2c0c7e1899d13a2ab81165de70655c86bb0f378f990cec2604de52b2ed6515129c8c207c86f3aac1b964bc8af9201dab94541e073fce1c7986881fd795f4843685d8c855703c5566404b16a05b6705dc9b56b7428a7fc34831db6198e777ec4015845936172d36464f1b753617a8eba7ed2c463fa244b5b54a2a60c5357d44b287b8301b6128b717e9cc85707f29189309dcd64602e2b1a0692808dd2b797dcb95a056aa52bdc823509684f64d88584f68b8b4107fca88897ef5d0f32e519b518b7393a2db0c532f25b54f5f0e98a7d1f8f8aaf4e7e104d693f28", - "enc": "566edd39d7d3674cd40d83ae91725090d43048c4f376091959b44cdcf8042b03b5f1da6343a21c7fb56562e8b206ac10a5903a3319a966bd8e7b8ce546791caf7bf42295b3e350cd9d5a8d94755d7fec776a595d4fccf1d8be45d14a2877d6b431fd6de4ddbf00ebfb8b1467cfbfdae69717498573b0a5fd5f27b052864b88902bf84788771d6ba0b0a6fc4603a3389771fc2e6cecfc96842373e2767fbc0495f8aa273f253c6700109db4c4fc13d34aeae67edf3e3eace7169eda44860edf2264d7df5bcac69b2dd457f3c5af8007c7f66ec3460dfbc1108f7d6d142465b2d63d7b1565fa1cc1f14419155f234fe0c8cb03201a22b50552c8af58ada4d4df53a1e5fb388f4e8cbd177aed7379c22c6c05ba8c5a84924f32535af48115f5d0bd66a7d39a2993076e6ef32c0897dad9934c31480b8815ed0446b592b93a4ec9005075ff1d929977c19d3df199ee25786dcb6a265ca534d42111becb3428dd90e1ce0cd02fa3883fa18cffbf28e412aca9c9c389057b59605deac766cc4baa516eed4a03087e4ba39dc98033792b5a4a8408be85c6e85dac70aa42458b6730d3a2b7b4adbd53fa0b8d371042e1c9b658b82a0db1e928a45c72c19eac443971729826719153d9d52e8f112d23b42093d57e0f1f473e9e9383eda8ff8acc240a61b8ef0a89e2378093315b600d861d05167b01504b781f1f3ccdc241a7a379979babac7c4b1f5a916e50d8f921d3c56b63302282f05951a8eac2cd7e9db89a08d95dcd972e244eda5e83131a79e30e227ba82476537961b79b9b2fa94c4e4b2154db63598ae44102cd2ea945014414d42993fc723be691c4257469f9287fd907937c891b4005a86fc57e809cdca3d4898eb7caf2ed35ab21f92cef85037ac9f2eefc3b808fc8dff8fc70c801e0835e5485e8e76cf0974a7c733e12c35c3cff0e063de27493d9c520f6a91747668832f597658f5e7ec5d69506bb7aadf7f5697267d8b9e060accd38674b659d138f4b2b17d2b72f2bb40454279b255f6110cd93727f35cbc3e61276124f1f3a39651ccc5df66f7d9ae07755064cd797e49a35b275e6457ca3283bd74ca283ff568f362fb380f1b81d54a52694982b4be84ebac395b0753c775ba66905866ff52c095a171499e4ff7d400b689f544ef4b4d304f85356639b4629e82b5ea905591e08ceca94be3669f5631cda96d91ce84f4375371e92a507a689f742c10a85a2c81bbd7ff9ec9d28b94e92529df00624d302bb14bb2c8937a5ae9250b9cb5f226c39dfa467165752dc3396944305a8bf8e6556d1b3840d17c72391790da2abb1b55dd32a9f83e3af60124b7badb3138fd421aeac38eadeb6500582131da9ec0374eaedd1e5963e9691c2130fadc0b903c2ad3a8aba01890a4287076e19b10e678d521193c3ee1c312ea1f3e196883f175dfc14831bcef031b6870aff2e3d2e8cccb82332ca7ae520c24c27a22507ea4cfecf184e6890d368d3e6c93fbda5ab43688e8c4a6b299a1241b44f6de47051b97b8178ba628be399da7bc2611f5f745802b81d86a077050634b253df9b1652a921ed99daa122", - "shared_secret": "d8b2f76cc375bdc4ab9e0ef2a5925204a414a6f0cfa898a66070d7dcc62296e8", - "suite_id": "48504b45647a00010001", - "key": "ccbd004438cd821262da32b7cf715d10", - "base_nonce": "b60df75f9078b7eab806c8eb", - "exporter_secret": "7bb48e181a3bbae21acad0690fcc30daad8937afae471dfdc559949d5d23c4ef", + "ikmE": "a3a869097e0241158eca5dc6c9e695f9e0d2ee5db51c09c435aab69d56509a43d94ff76d7d47cf79ecf75394261236cec024bd849cc782e14f7f0738af83daed", + "ikmR": "0379761fa4f6869592b0d1f9a71eb92b122dc030a7a8858132109f6b1a4bbde4", + "skRm": "b3f98b03126a431ccecc62ae0f68e102c2d8e1cc7b21ba85d821d8e31761e0f8", + "pkRm": "3c282de306815eb40990929aeee0839bb37a71a052a9e5242cf15f4c4aa366e5142da0bb8da49e83840972355000288edfacce195826d1da5fff509dc5694d8ae6590fa763bd7213ece64e74c82134e3b8bb571c841967e44a500c2acfc7c1aba59273a5bb326ef52aa43471a9ecb54ad5c12d19bc05797d59980ae788039c265978586bbf92ce4c4b9013f3853f501a0a7b834f4843324b9bd3a07ff7f954d97aadb7d8621c58c75bc47995d02a2f70cc3d2bc519a8606fc0c9eca0b30a998bd237297dbc0298b106dc00c2a541bdfa9a26c95ba67167acb81ac705f1952fd173e6e23331c56db6913305384d52c51ef7facb92c08024a69e26437e1c289f77d455d08a1500c4a703acb376f424d57234fccaae84b3ae8d000ea8b128c4e259b6a976ffe650a5d9063c83996cbb00b30220ae43170eda370d623f481b24e4692e07a10777ab703d4b4a73c71e7a33a6f52b2aae7a4423aa5b69f58480b7acb04a6dac780a345317b40b171ae0264fb057810bce9c6b5a58027e3ef851e02cce85718c396824e3986a35e12873ba1ee6ec4c2cf0a767234baa61367af5a85f443272fc1e8c338769b8c2b9f1c58859cf920a9c26f71da71a60abf1c3e1824775b12e9608c711938475801036281e8d45a06942ba1164573ee1077b7a40ec213fe79575556bcab9f6823cab8c23297d67897bbec17b4ba6752c8913d0b781b9932a6df03505e3aa25fb6f75c20286b08b375bced9613cad18cbd42ac4063827afe5680e3cacaa96ba8f6c523236ca69da4475999abf18a25a433c94792988945ddfbb8413d367d3ac1315705797aa74632704b936cc96e689969118fac11b4f4c927a66aa670b4d8147a23a42aa6a309dc5f204902726c7ea6f1c6231a262308148c2d2ac81123050188b44a80aa8153bc5915aa8c207b22895a8339549d281c014162200d63cb2015a265ac48f0a3c93b9c71e05986e780c18f38c8fc5734fb7b22f34cc851413a3d17090021eef6b7019b5b93012753b150ffec031a038602ff62ffc6713c290a33ef86dbce641d579aa92c5aa1b4a6520b921efbc3c95156b34658dd14a7cead366a351c7a173907bd403c0cbc9b562281ed3712a4b6233d60f09d80e38e67a01c1660bc02a31303560632db6c63bdbb0bdda46b4faa77ba4cabfdf0789185c295c40220f65689675882fcc452b802a4baa895ebc50a931178d442c857ccfd503b678864a83565fec19c7ab782484877144745fc7227d582237498916a03a4ada6321b62abda04674f39338078ac087b1a52b77781d5574d41a2d320802b9d9bda34c8e356a5725fbae10599b83b97114c6cefca08f8d04809b8a79f9f0a26f2b9007f501a81679f0104c67f244cf514067e04f1aac0c823a6e2cb9517d5722eb3a8326a7b23ed62266f04acca740adb142bac5ba66c5a6b122a3180b97ccd6cf9bfc77a639515bb861a5cbbcc7f53d19b0cd66a0b64df56a15a98bff77182b7751ecc703bc947f516279a3b566485931415c4a9264bd7fcc36f1c4a1e15c3c8c17cab12805d9f585f4cba9bd496805f04c2d930a8e25248c02a362f8a56109cf263a0591ec4bb8bc6604d30dec4c715106266968653686289d7ff82e53d504f85fae5d4f64210866450ad272b3e4849b83de72a2e3b9fcf15ff88bc7348a401a95215ca1b16cbbfe5e082dd66029e768dadf2e52e283ce5d", + "enc": "b440cb006466e8ee9d161b371b6fa1ec419d6a7589492378dc678fedbcf9e7debfb47f7e0b5368b0e77ef5b5866686b65231dbd1c1a42e0af9b0abb06c795a1af0734b450dbb60fe0486b1497d7b09d0c46617a40c5f8c8ab51c2e8e1f48023f73b7c4716bba2e905d5fb42c3dedff166553ecf033305a57bf436317e6513deea2f65537065bb5d82dc4b8a965c3e939b910dc6b027e01673a6e1399b93976292ef9fd81120ef2f6c47d94a1c77d9fe16ba7107a8a6a4ce9ce0d302847d602167de077e17dbb7e0154202f76c381c4b6d8bca51680dab4dbf373da8f09aa23d2174fb36681ce42108f7baadcb35626baf30a416bd79b3e249585079c277b79b7b31108ef061f25b5d4e548f6f5cc3d4c24fa0f1716843bb63ad00a78f37d2e2b81517810abe9853829bed7b3ba309ad697d8a5f66af4dd237c25725e9c6263744bf8641d475d4792ab0535d2b4fdfcf0c5d95118f5779521023016d49751794a1ce66f2a652436843978937562a4a5e8628d2b720890d7f3b21c151399ba7db03cd15516c6a94b84f6d01a37ba92cc7ac6c480dc9f67c3a066378180bcd2922d3f5c65d69fd0b96aadc055d6b05ebb1105acc609f200e0c945a10e4e11371e23369de2069ccd7175a652c3cd09eb7f17c9b65b4aa79b26468f9b21f8c0aa8f7471d5cfbf3697d3eedea9351597ce981e7cf745c2950070c1f82f132b48584d03ba1262cb856ff6b5ae25992df8612d24f068b4325d3360673ed3ef6e2a57de297d5482c5cc355bc07f1d975fc6d60cd7109bf5a77a0ff7b2c5d9f4a276d30cb49da48b8b90b644b15a5b68fcc67c25f09a8e567cbe4fa2e2ba11c02993e9e9b4116a7c60da64a71932800aec2fb4d2eceef57c6fc2308f3adcd9b46a28748516284bdb4b3a36851512c5e0e6ed37ef5f00b07dc3c42667cf95cad764e47f48a994d17c103f8225755c76008013897c03c31043df0eb39a603e09caeaa41ae24488fe96e4d83b4ae5481045f4a7cfd7c80b31ce9eeb8fdecd34be1245f368ab5a3215cbcdfbe0529e1fbc4ba0041cfaba09836c25dd6219e75fbc6f143e74d686ecd9e1a416881bc21a9129fb865e82332985798f701f7952c4e69e7b4e6bd03bffdc0c65e2a2fde89f73b8659fd2cc7dfb070d3e95581d1bc587a2d9c4bf142fdc1f20856d3cfb64d35744ee279b829184723221e9fb19f012ab99c4bb1a904a116727b667c5a11a0e11f3e31682b0c114345ecc3ee153bccd884654bd5a8a023aa3db878148736f6a090f92785423a9ba2b037b3b90ee91657ba48a125360dae75a6fddfea406ca823a5e4fbb54aa8909fbd85d95d2ed256ed5d6a9194fad0d81a44d3172abf6b90cecd1ed2080762d670db4d3437ef8e9e7d39db4b4215c33f8d19240ed4bf2de8b1076b345707043a735bf9e96e16c8b670cf2df0ce8db638c7d84a13ee7b35266c7f0e60d2cb2e5734e9d646a871d0dfd8b4ee5f825bf799a1251ed21e54510e9c605bc83a0bd9673aee80e8d064a95c3c3151ffd27608173637fb9de30b3c02d96eecac05dbf7c2fbc98b4a1f6972ce928322a22e2b75c", + "shared_secret": "b90cf181d95351d1091569487caaf6c3434eeb181a2c4c04631980ce139afa67", + "suite_id": "48504b45647a00010003", + "key": "4a4c042267e8ec360c83b2baf0d5e3dcca73a86531cdf67ec41d95bccfe12387", + "base_nonce": "5ddfaaee10a4dfd0d8e1b49f", + "exporter_secret": "145e4b99cabeaa6f5a380367d140d308746ea25d96f937288f85403b5c4384ae", "encryptions": [ { "aad": "436f756e742d30", - "ct": "a9b7028bc9d12cdd33127ee5a0de9c4fd8d36c411cf5c63ac38ed37900fef8de1afa3506ad658d0573b8f89a259aa2cca779aff745fc374bf5d5d04c4f281db21ee297a61718387b1458", - "nonce": "b60df75f9078b7eab806c8eb", + "ct": "ac355d192158cd54250e1702be51e9d2eafe5f9292a9f153e02a2323e1ff071a30947836c38c63c986c28ccf05e00d4e5fe066a48ab8d5b39c69d32da80c93dc868daa0f853a6cbdd640", + "nonce": "5ddfaaee10a4dfd0d8e1b49f", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d31", - "ct": "dba3473ccb66773187dfb56dd7813f5547f48cb63585705b593a5bf28a665b983b55c61af779ea842b12c687dad7800f2a92c87b42bb6f306d73698dcfd41a03ee071889889936107c26", - "nonce": "b60df75f9078b7eab806c8ea", + "ct": "712e40f2971afcfbf899f766c47d815265c1a0f52dba3bd68dfe6d14918f114b1d85f5ed0409a9b6caa370f1ed94b9d564080dd7468f629881db3aee6db91b5479a634ff18b819694d43", + "nonce": "5ddfaaee10a4dfd0d8e1b49e", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d32", - "ct": "7327a3add4c16fbde5bbcd14a5ae7508442864cbd8f656f850accae7d5d69d6020f936a592687880e10602acd95c0a0ef9edf0ae9f64ae0eebe13fa1936aff4d02eab42c769ae62fe7c2", - "nonce": "b60df75f9078b7eab806c8e9", + "ct": "f11c81d6a2d45fa589095aecaa499b7af97081376227f7a0970936ee5f034990f88ce1cee9696864419b9770d40c9ecf35a27eb16fa0c039b0039cc3b11ac1cf81ebaf6278467529ab06", + "nonce": "5ddfaaee10a4dfd0d8e1b49d", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d33", - "ct": "28340dc8531e75ce8cdf1452c6034fa2a0db03165625a1d9dafe761453084f3590f256acea06c3df6043acf204c27ead2d0d37d2f16b3d42f714e614d01e9fe08e03c99f4d1a023bf9b8", - "nonce": "b60df75f9078b7eab806c8e8", + "ct": "fa4e91f12655a69406b6508ae7b9fbbf051cc12fee4cf8dc2d3de22f2b3e9f509f7218b8907d296e1af3e607be2d1d66f0e4fc778f84825ab4a5f0eede6332d65f3ca5b3022db90ccde7", + "nonce": "5ddfaaee10a4dfd0d8e1b49c", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d34", - "ct": "bfdc54e46d9a2853a17c0262139dff433c01020220a05c38abe88870b1085c7e05234a188850a9d6039ef02342f7285a104574f87d8dd2edc96694d502274a658f574032dc5331cba567", - "nonce": "b60df75f9078b7eab806c8ef", + "ct": "25b2f4ffb6c23c860f88eb97bc0f25059da15910963a4d4d4ada731f75ddfbde4b4b08d6bf140c342cfd266921714db083927442a2bfed5c56c45f8d6e48317579a718b0ffc1590b3168", + "nonce": "5ddfaaee10a4dfd0d8e1b49b", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d35", - "ct": "c27b8b3c613a0057a76ea5503039c7eb24f5977a5f495323f942b42b7bc7a242b1a78cf900f09ab07620dc8f7d6be51b71a9b066d7d5cb909dde2712ca7ab745a21c28eb53e9296e43e9", - "nonce": "b60df75f9078b7eab806c8ee", + "ct": "deb2e5362bf1b325f3165239138a943f3fbc39b6a36ccb0e9bfe98d2321d6308a6f6c921fdc2776374bc4e967b0bf6d7a249a1b937e0d213f8988af8bd6601e097df66cedc9f07f7d711", + "nonce": "5ddfaaee10a4dfd0d8e1b49a", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d36", - "ct": "d51c1fc59a0d7f7c435826acaff003b653595ee92d5ca9a562896b8248ad7beafa3bc439877734803edb26363a66d4199f461f6629062523b4df903b2075aad8500ed760ea17266edb00", - "nonce": "b60df75f9078b7eab806c8ed", + "ct": "b15d463193eabcfe25dac6980fc95aae379aa480b971deed85cc11550daff84bc835580b71d8a37dc5ed3b40a6d392734206c8b31d5f15e70b4beaa046c90b545d64e7e66be53ad80285", + "nonce": "5ddfaaee10a4dfd0d8e1b499", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d37", - "ct": "e8cae014eff23a9e02fb2596d80e1492b857893be704cd273d9bcaa08b3bb9e15abcb84e1f5626118ac03d31bff1f146c15d65151894779b2625f010c37c32ee8a0cd9744e18b826f22c", - "nonce": "b60df75f9078b7eab806c8ec", + "ct": "5307b7d16e86656a69860247fe9979611ebb3bd378f7950765fefd26bebe57592fc7544b75f88086b6cfb8f53dcd100d05026871e661d9e8c9d10493d486ae81f400f4cf7a52462ef623", + "nonce": "5ddfaaee10a4dfd0d8e1b498", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d38", - "ct": "8dee97a2d01eeaef514eb4e114825446668b2c1c4fc53d7dff0fe9cc2199abe3e40869b9be88c4e364a30fa6745108b401ec68f6a75279e042393f826bb012e61a32a63f1afe3f434e62", - "nonce": "b60df75f9078b7eab806c8e3", + "ct": "6f5839b9683dca37b52fdafd292385f80a70e6270724a11448702efca5ee48a474912e93896941074dd79b94e394ddeb04801ebf682c099ead1a210c485f654703a35e0a72f7e2ce9847", + "nonce": "5ddfaaee10a4dfd0d8e1b497", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d39", - "ct": "ea183fe12b40cb62cac4544e4e8adb14f14dee9c353c70b5dd1c1480b42fa574c1a1fe31f5606c5898e25eecc12fe6c09ac4ce506ee19f14f7da44551d0dc398d66a51437356fb250a50", - "nonce": "b60df75f9078b7eab806c8e2", + "ct": "ef220699580defba59db627f5a79811c434b0a79826511fe8e1a8e06ec47959c7d8821ebd7a687bf2f77740b3629c545c7569d6fb6c97b934ad23aa85d5552511658815c791e4386f493", + "nonce": "5ddfaaee10a4dfd0d8e1b496", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" } ], @@ -399,27 +505,663 @@ { "exporter_context": "70736575646f72616e646f6d30", "L": 32, - "exported_value": "239da4511fcb87285e0563603b3e2d060f2665e85896c746e906d16c3d6ef369" + "exported_value": "74e80a263b1c880d6d71a7525e6ba39ddf1024e53e32765d91db4924d44baff1" }, { "exporter_context": "70736575646f72616e646f6d31", "L": 32, - "exported_value": "a6bbde3c782f758e4cb3e9d5de727e45bd3a7c70c58e2d1b6c5c00cc9da5eed5" + "exported_value": "697c3732b9b884d51d3a20ce3049cf29b5c34e19b3a9943df9d93a59b505ef13" }, { "exporter_context": "70736575646f72616e646f6d32", "L": 32, - "exported_value": "d707baab60840604f673106061d493d3d388d58b36f72070a2d3f7aae6522111" + "exported_value": "0b65e43e2e6f95a7a1c524afb99fc78fb3a8b1faa22bb0c3c955ef2c73018ac9" }, { "exporter_context": "70736575646f72616e646f6d33", "L": 32, - "exported_value": "ab77be17ca98b4472214b1b585093bbcf0d5fc96aabaa2c3f346d97b4cb87760" + "exported_value": "b3653c71602aaaefd5a664c2301e512268f2f20289e7f268c526dd41a226a03d" }, { "exporter_context": "70736575646f72616e646f6d34", "L": 32, - "exported_value": "2b0b4d76a2b544f195900a697a13e0e2110fbb2ae961cd2cff98ba70f7828f0a" + "exported_value": "42426bda8927b8c98e63fddfa045a91db94d9df535f177037c7faf8114eb16ee" + } + ] + }, + { + "mode": 0, + "kem_id": 81, + "kdf_id": 2, + "aead_id": 2, + "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", + "ikmE": "6348148038b95c85a5cc10f9f2588090f269aa2aff80136df5d91cb863f0d29016d193591c0260600ce442e4db3255f95458f5580055b2d0e7b61a1ae226fd81689170775864984f69d203add08af3c9", + "ikmR": "0ac1e0b6b264f0de171b33b9fea8b6695c06f46bd5f838fa29cbcae1c6ce1119", + "skRm": "f1f10a30f20972ad29572652176e80ee17d2bd8a259e2b194eb05b8171a7f791", + "pkRm": "9e61cbb1024fb5421dcf61263ab45a1dd7987f214991d52ca43b6592da99ea746457b452d54c44adb90601b142393022d6865d5a04b42e7146d4a69bed3c83c8c341c4816f3408cb502568538aa52b6972e6cb1f227073f828481d187c98091c8b12279a382ba314831f98470a351eba6c7748821243a813f8bc3e0c126fe422c073a06f4f51acada064d0a8cff93655d69900b5924e32a17ebe97b61fca49f1a01c338c9f4be3a9150cba89259086b10184972fdd9218d7887ac706981a68b7d59ac333c4530b859cb9025b3da153688a2e97eb90dc4c73c7336c866525c64224ff5b8c7ee21dcb85af8007990b2694c184525ff0c019b4143dba13a6c78461696bb8c228444a9353b7776fe6a997f9bbbe30731ff7a9af746d78d88b39bb51aa4b8383103816338f1146707a3c07252553d50b54e3cca002369839d673050c0f69f6a3799b676f12b20454a0d3d1cf007d3ad9084145b18c4113986ab0ad2098c065b9266a8a015be7238abaaafbd564ea83ae4c238e147460b1268731d46c964c1af35a1d4ac56f1888334c73b7032c0e414a2ccbe43f89c1207d0cb25b348790814d70a9ca2b44658ebb50aee329e268abc620a5cf74610fb1a1b551a12e5ca3f1c220da4a9c0b4657f09abbb9d01c8c5766941577328633aa36a2aa788a819a6ac5f864034c1a9609125849c72e8c6387ec1820929a0189a8c7fcb20424cf78e7bfbf84b2b8485266d260a6e02e615a4a8fec3467163995e4a0e27c0e3ac5b7715b87c016851ab335d2b34c487c6c4a6baf5777c979e134ec464e7c7430ff7514c720bd4b340addc04b71b083b445bc5f10953ebc9be7941e6700690fe06e8d8a116b7096b08931771376ccd8ac6774c31d857ee5e309e30761e283ac09705864149c0ae4308c02864bd1b2190a1abce71f9a441dbaf3a87fb29b5d97349ed84297d0951743323a9ca97f9b6de720349fc63c7fa50d352431f6dc964ce09220939e0c8167db8ba6d97989ba204514476caac1459394aeed80154480741c813fdf60b5669c9db51a6840789a858c5df6d339dc86c2afca91815bb79488c3f21a9ddf432b33178956f374b2e4b01b6580f1810028618f7de42f4b52b266d9569e4c3ece4656b4f83dc25b7c7f05451736c8673a11a967500e9894fdba85359935a60a234c955ce9f93b20c64f229c66b6784bb6968351b74f5724c0ff6ba6c8e007e2eabfd3c5563ce4afbd120b600509ca661b7b1609718c7ba18c790f6a731b07b917c78f44dbc4a3f81bcd70292986cf33023cdc40014c33012d0c8ac0580fff60c7edb5b52a94582be5822e745054831a7a1c4daf11030145a50c69364a89c32215754fa77d0724ae92d00987252f19c5041304b5ffb835e9585787b9927ab496c3751bb4a80770f3b0eae62334f40db9830e8514483e847bdefb9999a08c08db3b8d9a82d7372ea54095d1d0a6d16415ec3a378e58cf88eb4198037a28353b0be221fe179adcd5527ff9bf3457121fec3b5fe642057b9facab0b03903474ba50ce3048ffa20f6fe30618901c0a241fe4370ba8303e7a526681932ec5e980a3eb162c028ec7c939fbe3235e74b938d31321d7906b85baecd94ae3f915d1303716a924ae611c97c5b856551785f31fc5a686c6d8ca495cb353bb6ad8281cfc9913b3a396550c7aeee90f851ba9223b00dffb4860b6951d202eb4068b50a64fa0275d6c9c514e1140cc6339e49a83fe895920803bd8438df470c568a23218b98a488623ea9a6809ba0610e7ccf00195e5f204df487631d609e3f24a763731bf753ba723173e7448c2025b4b60194d21cbc1eab61a346566e083db1a9b9bb259e36b5e7ce070e7414d6797a9b24c524436590db00198c136873a1799babfc4c87e30c78306f0bb9cfc440153734d33a8b6eb5731352cc4d75cb6f1b94c8654150a653f3c8f0eb160d8950b1a256e81859c6898a13f2472946927997a86bc858e41b5a84137caa9dc444a39314f993632ec7c21711e87a45c9a0739e0456c1ab74a4c00604faa601534978b260e631a10ebe2ae268ac31fd792eba11893f1ac28356808351293c717d0196234cc198de3c3f3086e08995adca62a24b69b9ca7bb53409e57c19c7bb9a062c80c56e67cdfc4c529355620e63a0d7567e14404b76a20494cda2bc2e53b66550dc99142a125b4f10ac9cb7fe990c6176bee2a4104d06403ae9d140541505c081727e95c2c794161df56c5aa10f40cf6b1aa471a9cddc4a8bc1b980955ec743415f38b4f72e2dc9ffcdf8240cad77957bd5965c49443235e6dd97d624d561a6c81e33b0ab35ba0ad9a5455f3136b3ac590d1cfe7c6", + "enc": "3c7ac781a006bca477854486be194790689fe87d95dc180ccbee287619d392f840faa8b3ef5ae177021049e2f7beb266ba6319b1019cf93b7693afde54ade2f9b6d5db36d98468322af21bdd0696a8f4ef0dfc0d234712c10626e251b2bd61c75682e83a79c0a16ccfe9405ee8423fa8feb6008dbe9b2c0ef8a990bc15f6e5f9be700f3fede382ca07302dba47d2a41f5495feca52fc0ec62d56e44f7b9765fb57e8c575c477da4be0743268d7c8cff1e5d10d3b5a6af2219d447cfcd7c1a818fda687873ca98811c6552d2d5ba3e0ceed24081516826aa35b0fd77b05563e318e1c2919f0f458850c6747d6f7ccb86cf7dee21ecf003bb7753ad345d98c2bfa1f2895208c2e2513fac654e5b012f2b62606fe1894feda99f55295a9f581ada452385e76fc78585e432284e4374d4472454dd68e14dad147592979b69c200c7eb7e4fda53d65d7c90463ed18782dfb592d897abdae12f0bae774aabbf89fdff8bdd9b6ae2767a97c6c8d6cc19612de4336b8012b50b7030b31cbfa5809404601aa98096f2b8b2512b0cab87bc8d261f83e0fd4a40dcd0258771d2484da0eda3e60cc834ce92a5bfd63eada6a9d0ea43df9f4740abcebc3999b3f900197e119640a86d8aa5b31e863b5b0c92fca9b7c9a537dc493a70a8f19983eafb25efa03560dc64ee7860b789a8bbb21c7e5f665be4b33405943fe0c573205062aa83aa8495d603c3316aab816dc7c1e6185e5a1999673f461322898b54159d8b0454767aba6bc020b914494b615a3a3c083d4d1ab568a635f7e3b67ecb7ed92a73c5026b218a1822487f30da0fa16885abf2af973a696cb7a46b0bbdb9c8e045e06fc81bb64464c50d1dca71f3dbebd191806194c690f2c16754248580373ba230da2e09d4a8bc5f886b0a53a1c653dce64d3c02a962c5a8e929bcbfce673ad2428718e2564655deae6cae4e65b235c29e9ed615e8d4cbfbc3412ebd5cfb8b90fea91d96b355a1037602a30161dd9c8374b2a986fa4482991c1f33d02d505be3d496e797c2cacc5e0587f3ee5c0241f430a9a0d2031373faa21533e34e03f230326f092604b62eb024e94fbb503df15ae9435f8134cc67c970204479a140040b461badf393e8d77c1a7562628df44f5f9f0e3b182307132764ae475b37cd3ee8e313b9630418c522bef06ea7643ccc5c00211073335fdbc084e3d5a142962f1bca66c0f638f6d13a580e66fb878782a8540b28fca9fb57300ea4ae561be3a2c95bebd51a7777545df8b93aed396e70135048e0a8bc962993064a8a3b8bda7d193dd7540c05841a8e3615d081e2dcdc26278baada99d3e128aa94d1a99ce3c4c8e483e250409dfd8a41044db77647921dc2ce00edb27f5291ca273b82caae2abe8bfe290e7fa087f7b7094faf32b3b6fcdbca61d8902104e1c19f2d92e912cad7129c1d42936afa10f54b39a7d0db3c67f7bf365b417cd2d8bf749d022bcec9a6592db43b06b28da0516e97b7ee7dd0cd9896a4030ecc77c4cccc8990d97514b43f132a5f8654f41599ac1004ce6e7a27831b1bc816ec4184bb6e023c12c88e181cd216670dd9aa779474d1b533d9908492922ca7ad778eb27c009304abb6e9ce85d3aabc5a523729201954f05c5316fc530ee69bd502d428d76ed838705660cecf87ae7d0aba0f348270c2d77f5c16a5dce9dd69adb27fb8a0c4dc988de3002b3e6df34ca9674dce43d3654dbb5bf8d727f500729a7ba8c1dd65e9e8251c8aca6de2b7027f751735f63bfc356054ac989d05f13f93a298fcbabe0ea42b2f35c53d724fb35163557e1da76d67acbd39821550f1d6289c6dec1a7040af912ce34b80e16bdcefc0f65ec6451b65c8a971c78ac6a9df6c2c6c2bf542ae72038b43aa481ba99c47cdfd35d03f1119ae4a3933221ec8303fa7450fa7b27a69b5f2f2636776757d9cf02a167e387ae0916ab2323bf4a9468db125a88e47938d8d864ec556a2752345cd17ba7f6bfd5ec2d47bc598d9b4771b0f5b6cad502e65954b498d3afe51e541c50f3bc3a0a728d97f3398af83ed707500f8441127d34a724317ed87ec6d47cbef9f6cde81b098181e2ef4bfe5ba7476d604bc05c98c3dc0ec6866ab5fc749552446028f630edcc49b1f24adf18f80f9b8f295c96c29004b856754d1f585162033216df34e926fe59e1350123f429f9d6d42e62b1279c409ddc7aca7f6774dd0464ccf6e1afab9943a483a6ea316f4b81a1ea11a3c1630c7cc22996bd975f0e870ef7a946da29c92e815ef004db3cf45eac7dcc4f3b52364e37ee2e09ec90a7022f709f18039f119140e02e919894a96a74f2a8c1c885c66c424ad6f81263791a", + "shared_secret": "295f5c336824d9726e2d92b0f6c4bbc689038071ac6a61bd9427d6779e5ef3f6", + "suite_id": "48504b45005100020002", + "key": "30875ecda9168f62085985807a0792185babd2da480ec2ecf2d54c4fdab7e54d", + "base_nonce": "9860c77b82a05e053d4a27bf", + "exporter_secret": "8c9e05ea5fabd826b79fffb7af5024973728298ae7246b9b387333f5a26996cc2e203748fff2108dfaa79e71a236e1df", + "encryptions": [ + { + "aad": "436f756e742d30", + "ct": "58d7c48ed3f702c537ee4329993917013a02c4bb4c6d859cf2a8babfcab3c1837af507b25ac10909742c0b8aa5f664879b0cce8714ab264767cc258514e950058a8b9fdfbaf4d00c5d19", + "nonce": "9860c77b82a05e053d4a27bf", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d31", + "ct": "19d81fd364870a7e1d0749937209fc9e7ace7012f6497f68ccc380fbe0a39a8309d508db416b27335c0e1b3565b59d7bf00b68dfd1cfedcee3f3225a6edb52478ff5a6f0254cf61b4795", + "nonce": "9860c77b82a05e053d4a27be", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d32", + "ct": "764366be0d358ff54b43e609883fb83812692e295644606730978b0e1e9291f46dea22e6a2e6c0fea485330487a4edc3a166ff0e7f0c0869122ddf6f15612dd3fd17c203ded1b0cb366e", + "nonce": "9860c77b82a05e053d4a27bd", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d33", + "ct": "773980d14bad114e718a0f040d15ca433801778d1c6b16bc59029d759f1abdb9ce2a1249925dc4607a855015b3e5e812d03dfe5abb9724052985d5071cdb9b0193a2ef79b5644b80810d", + "nonce": "9860c77b82a05e053d4a27bc", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d34", + "ct": "af6dc202d8f066caa06db9982ce90172fe3217820472255c6fa2c5ba6b105b4535f4c7aac75ef9782d0397d834b51738beef8a126952066d42d931d72509da5939b42b205b5a67413f28", + "nonce": "9860c77b82a05e053d4a27bb", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d35", + "ct": "c531fd42c65150792a4ad66a21da4171301c15ffd3cb5db85f3b745f43868c8e99a03ca7a2e966cc7770c4d51f019bf7e93784f526af31f3432ade1277feec6fb63f7fc35b99e4810e79", + "nonce": "9860c77b82a05e053d4a27ba", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d36", + "ct": "3fe0aee6591dbba81516bcb614add1c2cfd9072a4df0b6cd58ca212606cdde8b1cb3d4501772f9f6a936ad39bb62e44d7dee15986995e2158e04467dee349dc21a600c12c9922f9f0431", + "nonce": "9860c77b82a05e053d4a27b9", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d37", + "ct": "8fcccfe513c0886c6177d59eed5000f6c1bd3ded70e2be70de011a9eb163186f0153bd7fed25f8b5f0dad1ef3cc72ed9f5866b4f90c96ce4a03262030363d3b851b030d88bb7c40a33f7", + "nonce": "9860c77b82a05e053d4a27b8", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d38", + "ct": "c34ae2512bbc83e78d9cdc96a68ac456f3d8b436ccbf0aec3a6d06a7f5d5eddc2b73d830743eea5d13eb1f6fb0afd3989e6360dfd0049ad9f1c27c914bdd5fe4a60b46e4bdf043bd9ac7", + "nonce": "9860c77b82a05e053d4a27b7", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d39", + "ct": "6931419b9282a4a181fc54209c9edefd1f4476ad8615d23370d9d1bf1ebe54a5cba33d0ab63458a28c262b6f6ac5b88f19c93d43ce9881d7589e0e3c694c4c07f85036e1925d9c97e1fc", + "nonce": "9860c77b82a05e053d4a27b6", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + } + ], + "exports": [ + { + "exporter_context": "70736575646f72616e646f6d30", + "L": 32, + "exported_value": "80c72970a944788041845d9e25708627692c7d3f0ecd1f4d5062a0c279e18b7d" + }, + { + "exporter_context": "70736575646f72616e646f6d31", + "L": 32, + "exported_value": "2d0f120a1cc74193455f47271da31b149eeda334a84679596734f2f9eef043bb" + }, + { + "exporter_context": "70736575646f72616e646f6d32", + "L": 32, + "exported_value": "5922cfa1078c62a13067495acaaaac8196e3014712e09d24a105d8c851376a98" + }, + { + "exporter_context": "70736575646f72616e646f6d33", + "L": 32, + "exported_value": "36e99dbbdce27ce4a71bc6ad691ed0936d241732ac6dc644979cff03f8eaa271" + }, + { + "exporter_context": "70736575646f72616e646f6d34", + "L": 32, + "exported_value": "39c659546ea345a8e45cd962403c27403886f9d5ad79614ba4cbca74f9d31e25" + } + ] + }, + { + "mode": 0, + "kem_id": 16, + "kdf_id": 16, + "aead_id": 1, + "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", + "ikmE": "96c7bf099d3c15329e8d2f2ec6415f0e2b0dc8ba891e7674d7a3b2d2c0ab5332", + "ikmR": "a7fd76a516c362036444bcfdb2690221ecec758eaadb3ff279478d29fef19fea", + "skRm": "aaf50bb090817310c6a9616d9f3ad0532114f7e3e649ff758c372afd41a5ac72", + "pkRm": "0466e73549bd3b77560153bf99aaff6657adcf4ac69c49d9e1645806ad13e7eb996ee704f53fa76ca2417f2a5f8846d260b399b0b2fb590638b74b20c6e42da032", + "enc": "047bf609c4e794449ba692975449c0a05f6bece9a113d1a9fc4b7024a03bda7d28d022cd9c91530b45de3659189aba21d5144aea491c7edea1de1635d06589e9e1", + "shared_secret": "04ea1f816264101eae8b7ab26fd5689e357b41fb69facb32303ec68442277326", + "suite_id": "48504b45001000100001", + "key": "8148293af4d9ccb6a3ea1116ae1bbe7e", + "base_nonce": "5055d867d32c17e6d5090d8f", + "exporter_secret": "d43cc0ab61579dfa14381223f62341df5309935dd0e031496c7674e780148ad7", + "encryptions": [ + { + "aad": "436f756e742d30", + "ct": "7dd7a425170ed146015596fd4276f4f180f506f50f9fc6ac38b817b03bfd62fa95ec802c88bca05bfeda130f35f4f0a3e15c982f91e49747ec0d274fc2ca97244847e5e0c5d5d9ebbd84", + "nonce": "5055d867d32c17e6d5090d8f", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d31", + "ct": "3558cfc695e0997fce70179f6cc8cdfc17c310bfe725582f0d6446acc2b8d4d567ab0543a5b450fdd1fff5c41b8fe883a4d2cf1655fde11007df070c6509ba4678aa8b940660aa631176", + "nonce": "5055d867d32c17e6d5090d8e", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d32", + "ct": "f52759ff0f3cf819ac14ecd25f525fdb8e8183680c7e10dfff1fbff9004c745b1b518c5794547298713236bd122a1d5817cb0d9fd7489841d5ea84e60ce7dd0594c137ca7d888b1bbd30", + "nonce": "5055d867d32c17e6d5090d8d", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d33", + "ct": "ecf73a896c94cfdc906e3e51a5ff5d4ab74afbd8a42c0d7237745c16bbf60d155170ad798cb79ec9bcced2ab110e03640cde0bf0fe7594e514a640d7ed34c9a0768c46a5daf00b370302", + "nonce": "5055d867d32c17e6d5090d8c", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d34", + "ct": "c2d5c74b133d7cbc3fe4c8c84fa41ca41814a3ac89f9ff7101d3ba1f607651f4b24c3fe6fb4835438f7d0657f5aa5ca6282d0c24f3d9af93e456e82891adf1f959b0f80cc680695aba5c", + "nonce": "5055d867d32c17e6d5090d8b", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d35", + "ct": "bda4490582e7051dc22577587aa9745aa88024ca6d0b390dcdaabe42992475c2264b512f67b0146c711cf2b01c402d7756dfeed03429ea661f38d6442363dfba5f621b36a43cd917f21c", + "nonce": "5055d867d32c17e6d5090d8a", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d36", + "ct": "b24a18706bccfa169174a28f46915940d23a3840e08b572552c8156b76bb303f792ac375f03d8179cc1b99101fbe37a3b7349eab6702f803c23fd89f42208800a3b4c82d38062226c822", + "nonce": "5055d867d32c17e6d5090d89", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d37", + "ct": "32eb0506dd5254921bd2bd78eb3c45df39acc49622093fab57cbffbfca66a80825c64136af6694067d659615ba7a94ccb7139f05b6c09d068cc9b9643a3f9d492b8e2c579d6d24fb0641", + "nonce": "5055d867d32c17e6d5090d88", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d38", + "ct": "2206f910f3183a707018848108db1af71558e74a370fca7a444f7721d0d312e1810ce6ed9628222bda44d54c7561c1dc439cde4ab3631dab23528af2b212701261b57f02756ee4279c2c", + "nonce": "5055d867d32c17e6d5090d87", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d39", + "ct": "dafbabc8c9f3729bad9f55d51da0c93b97943641672252181ff0e7e8fc4362a6c781edf45b1c4457e9bbb8e76c789fa02993b39d7fafbd76a36fc16b2ad118b9d39362ac41960a9889b2", + "nonce": "5055d867d32c17e6d5090d86", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + } + ], + "exports": [ + { + "exporter_context": "70736575646f72616e646f6d30", + "L": 32, + "exported_value": "6c8d18456476bdf3d7ad7e3e714f27a4cedf6918c0084541cfc554fd24df689f" + }, + { + "exporter_context": "70736575646f72616e646f6d31", + "L": 32, + "exported_value": "6aaedb9b733dfed62e801dd0b98ac96d51aeb550fc7242835040a6194b2da678" + }, + { + "exporter_context": "70736575646f72616e646f6d32", + "L": 32, + "exported_value": "af32bdf3ec4f880056897abd9b370bf33655216ce09534a991a9556c5041a74a" + }, + { + "exporter_context": "70736575646f72616e646f6d33", + "L": 32, + "exported_value": "894d66236051daca86d63aef0418fa1819b956693780fe7f0b0b8978631a7a1f" + }, + { + "exporter_context": "70736575646f72616e646f6d34", + "L": 32, + "exported_value": "af90e62c885209b6b096b7c6cac281f6300644baa8384e48cc5c31fa86687253" + } + ] + }, + { + "mode": 0, + "kem_id": 17, + "kdf_id": 17, + "aead_id": 2, + "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", + "ikmE": "a7447f62f4f6faf98140eed3531f3e3bf2c8f6d5e2fa2f2c56b97f3dcc79b695417a18b547b201dcd7d9b1583124b12a", + "ikmR": "8f51b7b6c1d043bc3fa3ed7a634cf506f8b4306874826ee1a43a50f605e6c25837d683d0db0f95491670dd4af71f37e7", + "skRm": "8970827e22fb4858ac58dc874bc7ec02a171536b89fc0f9ac268c2933c935babf27dea033a71ff11fed88f496a50d8e2", + "pkRm": "04e31383ea4abef5358ffbe602c13ea7d6c906c94c32af863a08dde6f6247bacaf32ae43108c34a05799dbb101a3311e0acce749a10eb5976629fb574bf9fa8f7129fd91fbafd1fe0e1a36cab2969d2d9f598abe586668ba4116ca597436de19a5", + "enc": "04839b259c8318f1f37971a0f6b2634581c4f981c1d93e5bcc2dce977389b23ea39aec3845f5f9265a7632d18914b63f4dc5d21a6b8674d52711a69368a42945ae9a3f101f03847d64333648c03999cb54ca438892496d808cfaf2194390b025f5", + "shared_secret": "3e788110069ce163aedf40839e5c0affbde08a0f739573ce2fa65b05e6a8867b4b9f746ab44dead83f7573a5c176e065", + "suite_id": "48504b45001100110002", + "key": "8e420c8e053254f46b521463478087c5fcc7aa73379854ca76cbe4d0b0133fe8", + "base_nonce": "f1f6dfbdd7553b6e11300419", + "exporter_secret": "88763b08dc5fb36bf081c412d9f157fc87974eae220e0398a84060338e26a7551f399a7656b12435994a9b039d47f6b4f6b7c378e86b118450e43eaa9a9f980f", + "encryptions": [ + { + "aad": "436f756e742d30", + "ct": "8ae5aefdd44f9458890db14dd61019c262744b44a6bee6fb174535c98d683afa3ac391b7c81ee6e5c87f1c58cc4b50b53c4cf260223cff639c6c3e3215b794ebd6e0c689ab622d9e145b", + "nonce": "f1f6dfbdd7553b6e11300419", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d31", + "ct": "039d4d4aec84d7c3334cf5541eb18ca7f150a04d80f54322898ec30651be8e3ed19cc8c8df1fb0ce29af73d1f5162048caa9e026fb45d24b551817117c61ccb93f6026e9386ef7dd3f4c", + "nonce": "f1f6dfbdd7553b6e11300418", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d32", + "ct": "54ec7f08307809f01fdf02a1dfea4deeac375de5c75bca57e8c2d4802351064f9b79954546ca91413aa49844fcc74f9037884e946c8abf720c567e264b19cd246850fa5a085e01832e74", + "nonce": "f1f6dfbdd7553b6e1130041b", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d33", + "ct": "c629eca609e2138ba7f6be17a98b00110dfe2cf61939587002793bcb2b431cbfcb4b3a00ceb6de9727d7d11f37a4ceb7514177e631911dd5010050f87d8658612570469155e06315e353", + "nonce": "f1f6dfbdd7553b6e1130041a", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d34", + "ct": "3a8028856e82a11131be5bcd16b68e844957b87521c5b2bffc22f0bfbd9530dfc5c8a7c3329b4979ecb2655f68c73e514d4a3612382b752193ae77d7af0d034196d9b65bf4a5273be0bb", + "nonce": "f1f6dfbdd7553b6e1130041d", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d35", + "ct": "e45f30fa2c40b4c7012310c3a922ad006925a84fcfa03e37980ba4b934fb3ffe67da7686035e9581c282762fa2e6b3bbccf69e52b5c07228a4a57fed01f46641c7d58f4688b45714dc15", + "nonce": "f1f6dfbdd7553b6e1130041c", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d36", + "ct": "1d82effda9c252e242e0f28de57407bf24bc37c39096d1f7f258b297ab4af92af64ff8e161e5545c8f35c8bd864ff5b562743df6f06c782599123ee75b50ae5324b9f360ffa559554c49", + "nonce": "f1f6dfbdd7553b6e1130041f", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d37", + "ct": "e51cdd4887f55c4e58541fcd68d783845d39612852bbba0fb68891f86812d0cf2a1c1bf4924ebbf879f07465f7d68ef0a706b1071a1fbb883611e9f72139bfea6362025517e2a5178df0", + "nonce": "f1f6dfbdd7553b6e1130041e", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d38", + "ct": "e4444a038a275cf90e231d899444bf40be60e668c9a78bee4a2082e621446ebfc6fad989196ae383233db2ed95e5b43f94f8f2fcdaf488f4d81e6ef6c06cb312c8b1a0e31eec304d597b", + "nonce": "f1f6dfbdd7553b6e11300411", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d39", + "ct": "5dbd05ededf89d8eb21e87bd63841a4b6fa4d9dd39a58d0076a5d321b09ec76bb392ea18585a6556596ae95768c4028d0cdd52f12296eac1fd9cf2a40021f014639465c4c5d3f0f777fb", + "nonce": "f1f6dfbdd7553b6e11300410", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + } + ], + "exports": [ + { + "exporter_context": "70736575646f72616e646f6d30", + "L": 32, + "exported_value": "2f37cd2b477ea838ac23f1ec147ad875febaa1dd6d40f2e6f8f8b7f1ffd83aaf" + }, + { + "exporter_context": "70736575646f72616e646f6d31", + "L": 32, + "exported_value": "5739f7c71e13054582deb5f36c1b492a1716597ae85e9bcb3b57f8fbbd7cac20" + }, + { + "exporter_context": "70736575646f72616e646f6d32", + "L": 32, + "exported_value": "5e42175487a19530d1526ec95a1495ddc3b84c65beb59e1af2956d6dc31c64e0" + }, + { + "exporter_context": "70736575646f72616e646f6d33", + "L": 32, + "exported_value": "0ae95a4fa9fa5e65bc8c4ec3215ad92b628b10c8aabd39d478e0ede1214d6ea7" + }, + { + "exporter_context": "70736575646f72616e646f6d34", + "L": 32, + "exported_value": "4dae3c1cb648e4ef417b5234a3451a7afe5db3b97759312cdaf700ebdb921c02" + } + ] + }, + { + "mode": 0, + "kem_id": 32, + "kdf_id": 18, + "aead_id": 3, + "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", + "ikmE": "c06b6e86a54a949ee574b3a6c825942b1f25a53db4e766514f8992a11637f2df", + "ikmR": "dc20bda0ba90accb76c2cf8ef6af44c3f21bfd60884cd0f502459c48cebc9fec", + "skRm": "9c42767aaf46eb76c3432f8ec5d7a5e4730dbdcbd336e55980124b01c4ceb279", + "pkRm": "ef8f6e2fdaa8dfdce94c9e02aef1714c1cd80c0a1fde4977aa57f4d1b77d5d39", + "enc": "16881517e796589386b3af6a47d6273d7f31bce93ebe4ba5f715d288a9781729", + "shared_secret": "c2233acd6db9f7cfc6e65098b5b1f755fd3f42a94e7e8a26e66bf03320727d41", + "suite_id": "48504b45002000120003", + "key": "515da1c0a943594c2f9ffd5f09029c3254ba5ed8563108a8425fed0467f6be59", + "base_nonce": "add4df506db477afe9e0d01d", + "exporter_secret": "85ee7cc2542f4a44d1ed595ddb3203336b8da8caa9d7e913145956e8ad7ed0e4", + "encryptions": [ + { + "aad": "436f756e742d30", + "ct": "db1eb8d49ddc1055bf036b8571e865347905b028bbf5fc4e805a6245ba2258ee6a44ec44898ebac911cfe9101730b7ce010f7ed44764163b28fa5f2e805297a467d1b3911d234556e0eb", + "nonce": "add4df506db477afe9e0d01d", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d31", + "ct": "bc53f3a9dc0b0cd3b5d91da56730f393b34ef7287d7d4472f83aec64dbf18e8d49c46e097e2c001eda6595249a95392d2efb882c9e0fcf36c52315ed593ec90bec066397646176be4bbd", + "nonce": "add4df506db477afe9e0d01c", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d32", + "ct": "330d90da5501c07c4748cd294d5efa6d39c3465b4725f69cfc68c4e5af1d1eaa5746042bbd609eaa11194b4ff5c006391ec6ece1e06a2f6f78740a5e77b5b81e07afc659dc77d5324e3a", + "nonce": "add4df506db477afe9e0d01f", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d33", + "ct": "ed353513e6992df17d459952e9f542301d8f49a9b01b0cd38ed349cecac22196a2bca5d309806cfa28c709a91309b4811e0969220276527d92a5de75a26a9d7ffa773ff504010bed60c0", + "nonce": "add4df506db477afe9e0d01e", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d34", + "ct": "023065b5ec334e23c6c868b7d6fb924d8d02c79f3428fefc902d634284cfc0a720186cbcd42ce2087125938817d76f6a993f91b0f03e219007bc804202eac2a48080c29f60f2cf7b52f0", + "nonce": "add4df506db477afe9e0d019", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d35", + "ct": "45a70360fa9b62de65ddfb834ec16523b031336dbcfad3f9a53217fea04673bc7cfb60c75913f0d8c7104a391ea4cc04e7656eb5512c0e8697043e59993764f59273b13f98f658d0bef0", + "nonce": "add4df506db477afe9e0d018", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d36", + "ct": "fb0b5a138185c14b2359e3ab40491db47de4febb548983cf3b1e0058c3e089f32e1712aa001418c69c15a1f8b511a278e51fd0285dde803782c48ed0e644e1541bc395a2906de8b60d8b", + "nonce": "add4df506db477afe9e0d01b", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d37", + "ct": "7a3da562afac770e456101d8747eeb97d83d8b38657ce789dbff00afd716cd6b0a7cca62981ab60473840cd5532f550b96f4ac9425785b570b290bdf9d8590c3fa6fbb806fdcb20ebf9b", + "nonce": "add4df506db477afe9e0d01a", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d38", + "ct": "4dbce315a3acb5599c55345b02e7563f9d729528e045bf2c78026cadb76b86e5f01b86b686a31e6008998fde761823fdbb152631b376206fbba038065e411204caa4ff6788c9b047eba2", + "nonce": "add4df506db477afe9e0d015", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d39", + "ct": "08f462e26cfb43ffffc9bac6e8345641b70dedbff333b030cdf068ff664eb680262f595911de584b896f04e9dc0c1a800b7328d38f04966ac0372cc34d60080568d74bd66288d2c3de06", + "nonce": "add4df506db477afe9e0d014", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + } + ], + "exports": [ + { + "exporter_context": "70736575646f72616e646f6d30", + "L": 32, + "exported_value": "cb0b6502e374d2594ed5f8787625ce4541fd4908b3121341e20c124d6e2330eb" + }, + { + "exporter_context": "70736575646f72616e646f6d31", + "L": 32, + "exported_value": "611c82773c6cd693e24b9039791661ba50be3ba679824b2c919a8596e64c589e" + }, + { + "exporter_context": "70736575646f72616e646f6d32", + "L": 32, + "exported_value": "b8d5e13a02b55ff62601b000904ef10116f77e117fbbaa1870c4ba0340580b8e" + }, + { + "exporter_context": "70736575646f72616e646f6d33", + "L": 32, + "exported_value": "3fa653d07a25986918a6f5c032464ba49ed7e7dc9e6e0c931164d09aee06b988" + }, + { + "exporter_context": "70736575646f72616e646f6d34", + "L": 32, + "exported_value": "fc4787633bc77513c5ce119d716184d1369c94598b48aa0c420e2a6c61f1401c" + } + ] + }, + { + "mode": 0, + "kem_id": 33, + "kdf_id": 19, + "aead_id": 3, + "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", + "ikmE": "6d2603126151841be9fc82e04f7d2e8ec48a63e1e9014ecde3219b88c9a7800d9e578d6abfcd408ede13ae2ce446d0a0c0dae32ea4ac5a0c", + "ikmR": "68b98ac8cb448ab708201dbda774500d8a60a5a78445e628c3084ee43575db5370ea9d09a93f6c81683d2057399df83fb4d6aa6a848669e8", + "skRm": "74970bc93b6b47ca260c15ddf87f0ef7bd7856cf99cd4896dd30c8448ee0d6a497c78754c6bd2c2745f5da3d0bf395fe2e53793c262d44b1", + "pkRm": "ad40243d93eb1c8e9c4e0ac75344365d138c560fc9d55cc0af77f9ec354f83d251c650188b67031d4bad75e2aeb375ea8cb1bbc1df888c8c", + "enc": "1525ab8ee0687468ea1e4c5904ee1d4d274176d2e5c375dc5b8ef9ddc6999da2e8925c42bb30d064afe4343e12512f65a210ddff3efa1fbf", + "shared_secret": "19f9b9d4c9651b775dca8458b77e43388dbfa3bebf7e0264d843fcd7356e73e31962eb6e8589ab9a110d19e457c480a8f5f5da81e39a6eb1d563abf10a484f7c", + "suite_id": "48504b45002100130003", + "key": "acfe385ea5cc06e8baa39f688957ed69c076c3d8dc11a0f6d8cd38c07ff19356", + "base_nonce": "d66dbdc61ce293dde7e6fd55", + "exporter_secret": "e0a5bf27409e978f82885767ba5d08690c9ad3947357ed5b9c536fad0fff678924f223cbdb4c80d1b8bf31b8fb7b344d30540d3619e09f830ff03c144e89b478", + "encryptions": [ + { + "aad": "436f756e742d30", + "ct": "66e7172da145177b7ab4d509c51ba797da0a55833ca7990cc61fd87ed123eb466cdf0708845b17f87aa37fd55fc04fe41f349232add1e69e81dac0bdd87d218a82f1f53c01f42e94aa70", + "nonce": "d66dbdc61ce293dde7e6fd55", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d31", + "ct": "338963b975052d9272e78efa775e461a7d83757c2a72f33dcc031bd1cc064b1fea4fc36badb18eebce87a2ab33fbdc962f8808a16fb9e507083a020f38099ae69912db44111d8b669068", + "nonce": "d66dbdc61ce293dde7e6fd54", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d32", + "ct": "27c4db43a0f33b789d68352e8a6c9c4321aa81a4162c274924f5adc917f3a66da2f1ee368af4ad23dfebeeb155c96d10ac007c7ff60a37bbf4219053138c5f337fb206c3088998a38f0a", + "nonce": "d66dbdc61ce293dde7e6fd57", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d33", + "ct": "4017721ef2415f4dacc2947f68c634df13b733afbf862eb8c637d5aa14feadd2a305a6a9434b4914190b552e5d94d7c4f50533d0448fdb9b035e1ceea51f9e01e807408b5ef4ea629d08", + "nonce": "d66dbdc61ce293dde7e6fd56", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d34", + "ct": "c865e2e84ae0d4f34b1652eb2e04bdb3add6f659b9a5bd251208c398e46ccf6037d302a683a8473da90dc61fe2562944cf9ab7cc955bcf971f8dc831d580f858dde854c84b2e2e91ca7f", + "nonce": "d66dbdc61ce293dde7e6fd51", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d35", + "ct": "bbd8691906d29fdf36f61a85397a73ea991d100b6b479be58512fb8fbeabbb2157df061705feba2c63e4e0867f0317db4fd920c900a3715beb0c1d49fcd6dbc2a331dd898dcd8bfcc7c9", + "nonce": "d66dbdc61ce293dde7e6fd50", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d36", + "ct": "3782bd8ad12af9b88b56068f5763edacd19fd86e76fd2c9907c4fe7e0cec15840ef5fbe5aeb7c238786c89a9b807259246e3b662c34844125bb6c926dec86a4a911449858d00695d35f5", + "nonce": "d66dbdc61ce293dde7e6fd53", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d37", + "ct": "09fdca1fb6811f62f92c846f42c08c9a24aefd61be882598f9fdb127f3e6ac71f8f33d8289a787e076912616b2592763b36075f7b50984efc0d30a1de4616ad2483c7fad2b51f4c239c7", + "nonce": "d66dbdc61ce293dde7e6fd52", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d38", + "ct": "92767e6bb671fdcca73dc06e13c04aa04bc3d9d8db6d58861dcc63eb12205a79cb361c328fb0b70251e7023d0d0b9bfbacd9ed9f5c8e2c3862f53faad0f2b49983c52763c120b49439de", + "nonce": "d66dbdc61ce293dde7e6fd5d", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d39", + "ct": "6a2f40cb89b98400183bfab1c18a72892066524ac1186fd19e24df505f421ad830d7f2339cb683c81b2133f765a17eb5c6eba734ad43d57da547313c3740a4a7fd2047d4a71626f3f38e", + "nonce": "d66dbdc61ce293dde7e6fd5c", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + } + ], + "exports": [ + { + "exporter_context": "70736575646f72616e646f6d30", + "L": 32, + "exported_value": "294aaa547f92a75388115df08f5ed0e71ffdc775d179b59403802317a890422b" + }, + { + "exporter_context": "70736575646f72616e646f6d31", + "L": 32, + "exported_value": "abf0e0554616c30e3db681486c7f9cd5cc9ee5ef53fc42b6a213e2e4b5b751cb" + }, + { + "exporter_context": "70736575646f72616e646f6d32", + "L": 32, + "exported_value": "e2a65d82c10d6cfba493458fab961eb200c9d8ec46659f39fa9b23955c07d123" + }, + { + "exporter_context": "70736575646f72616e646f6d33", + "L": 32, + "exported_value": "4efa1e5d10d96e7739701f475415425ab96dc7b31602b4d17e8c71f4a6be053b" + }, + { + "exporter_context": "70736575646f72616e646f6d34", + "L": 32, + "exported_value": "ae05af65dbb4ad6ad4980de206f2697c9ea85cade602f232bc0a4a79e361ca1f" + } + ] + }, + { + "mode": 0, + "kem_id": 80, + "kdf_id": 16, + "aead_id": 2, + "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", + "ikmE": "921de292ad41875cdf0d18b80b5a70ffecc4ed2ab70a5ffe2c5dc6d852a4235c572dc13c0e09a93a80d470ff9cc7ef24d2bbb5f426384e021bb606a20c1d1054b81136238047e707c501e376a3471a6364e9c48a7fa4fe4a3400b7de42d35196f4d55db218a77f75034a051f056eeb978251381c25637786c478ae4e6f66c570", + "ikmR": "b5f7219caa1488cc677386064255e6638f60f66d0ca90c8510aa46e908b92fea", + "skRm": "97981e2761ed8ee8ce18b516d9b677fb13466f123268abccfc1cf2974fc9ed7e", + "pkRm": "86402706266c010967751a03f6fcaec78162a3160eeba56332c275ca139e1de9aa28820979566104a89d44e389b5ca0198b6216ae216c8092dea727af816a45b4367d746cbadac0ec2740bc94092cb694c50c18a63c33e000c4ea01724f3264620f3cb9564a56f1254e6a99b27212ca701281677c1030c15a11629ac8b82fca96104124a74164a17a9385dbb22ee758e7c58bdf9a0420bdbc18f8044b19c77e6e88bbec43fffa6600b14150cf83c62a98cc46c95cca4c2b0121ab95a9a5521110a0a18a554cc5027761a53641dd087550b0a34396d8e9a0dd81549df90babc7983b309460dec9b8252248c49a50c79c6d2015c8b288cce4759d864575633148a643cd014658a6b7303262d7904c190649a85e69f5c173f1839c208911bf0231451d3398fdbc55329b250261eaa70898f31a9b027abcd4c057c617827d247ba181f7cc9b435489eea803656765737b7c56015af4a7cba4fd5bc300c0a92a24d0ee74aed3495bf36a37cc0ce1a0762b0568748c2b7c51c8fa0f0aa7ca590c0ea0efdf00f1c7476bb7a0fcf7088b9cb7bb2d21151b96b8288030cca55d41abbce1a59906293f8110b5241431d71a371706d07592f9ac47e2ec33f18a4c41c8b4c7ca695c4665abab6c529565479313220e18797f80af5f64444d939b0f1161cb091ef466f3e04bae3c9b1d5e0af8d9c733b0059bc42cbaaba9774a7b74945968ae7b0652b5f6e9bab39e341fdc8641e3c65736b415138342bc593441539601aafefdab23332a16fd12e146b6e6bbc46eb1666a608786e764b7a2a4ea033ba0374cfa9919f383c9096d72619776f9a158f39c318d90462b58c9bfe6cb4d3b252bde61f9ba753c1b7b52825473a51a5719c57969b9c10cc4db3361de3f004562c356585839c634b4d06a41396951a66a43c98cb235636e24c9abd2bb5c217c1a67065cd062cd883434622afcf50a1bde7ae1b9a134002885230830c919d00507421dc7e21051a8228674fcc489bd3af29a870c5db5ca3819ebed5c0a432699b3b93381665b1e7bde9c579ff907cc622933db22e5dc826699308349112ec87046fb0517b503033e7a0a00643bdf60e786cb74a63683064667bb3734c4766e652c15673599a867c9dab4f3d827d926609055aa8fc870462691eda085f0c2ab171e23d7b982610797eb8ab5f00da80daf9ac813a38307a09e42640a6a75b6baa9c1b30793a513d8593103694216a6768063a9c55037c739193e9f70d911b0806c9c320442ddc357c16457b9f2459a8724875539945721ed87801e72308a8ebb383b324e7da0fc4105248dc2a4064131fe5120b3a9ac6f86ac428b7208887774a3f53212537191b6096b776c0ce175862b5fb545e66ce97664ef9f3071b476f3b70c27b74777e95953851b1d88a59f0774387588edfb7291a630f09f716084acd6713c5e8a579c4c6b74a93a9eb35ac491405af6a595707b178904340a80273c454023690c85b2f508b5a988b9eecd8143bc3056626212accbd756057f5d998bfd172e022b0df085852f30ac57584ba9190ff3901c0c77e5e7c3f94f4006d700d9082bd79b0a280b60d6efcc142eb65be80050c0a753779b99b0183937b418bf8010149bd84ad2ce420d5c33624fcbef2d0036ea77aa6eedaba3c3e2352462361dbb6048404cf06ca698f8bb23dc71f601251990cb32b4a3e1d54b153462669752d12e4a905f82252fd9cc4a92ae90374e911b29aa544488ec5089d033e72c94292f198f791", + "enc": "a6c234b8590d0eb310f48bdb90dfed980ba6efd4134ac8e0bf09eb9a6b9ab08e603882e58b5c4edc9a474a8f65dd7b5c90fcc9883e055b4ea466f085f75e528c7ea0006ba6c2b68678b233aa7dc73b3c4542ba82f05852ae7c92e0749f2f99a79a06318e9bc71bfa15fe38252e5f309de0b7ddc7f408046ebef97c7310503505910d92bf5b6c3709bdce5f4f9434c32599798af171db99435e94316ec027e2e29ff3985007e0b81941cfc37cd4623e3c2a06f3761699420dcd4d99b43063bfa91e24364c8b81ae2a6c3e7eb693ac52d5e29c3db05fa076f14645280453a72508e068a80ce5e2dd8fc6f187dffe96d3822b5269116d3c86e40135518b4890dae0a862e782642f3f5f3340324a4319451aa1fbd4c438c0b742151a6ac553b0be542f594e6f649895b87ebae9151ddd99f9eeb4352b04343bf83f7dccc5e87917f3d9f1691f85381bb923da7a1e32af7743960398fff21b924b3cdf165517b794c399368c48cdae947bfadf5359f54a41ae7c94ebf11bc4754973471edeb8b8f4304736f40ba1b443bb7ede23b6f8a1dd7b39e6061bf24325af854783984126565121e0100249c123c5ebbd38e6c77dac2f34912493e800619d49c1d5a661b57bdf2eab69e6bfb4348555e984d6c273c41892add8f84ddee96a61ee0f01d17edad5634b9394b2d77688e4e483c0c3181892abea43e101ef8144bf43f9e188c7343ae2de211ed628666d7a9e61db7c17db02a6a640f74ec56c5923c43b95f72bb313586a8454e810201e9d6ff0ce16c598d6fd2c1c6a2c73eccb0bcf81382c5737a6efdddf55a6f1d3edbbd4d4dbefb0885299c30dfe2cb93fe926759a922e6367d9c3b9f14484513ee45471af433150357cf91ebbf3e09a1373c1392be2a117cade16e493201e4e359193de9cf49334b3d14cf0f54c0f7c3e6619e23a406ca9127bdf60c6efb2df47cb6d7e9bef5c19b39cfcbef7ea5683ed8974bb6eee2d4e676c3a37427990b0e70a89f127365e1c940353f210561bd0c2cc957378316bc38e4ff7d82b731c72a7655e4fc67746bb43241a481ee1f1d37f03dc092cd6d223225488b10d89a39a8578caacc581267f2bd827a51a4aba741a2fa485273a302bc953f73ebcebc31a1f8403946eb4c72659d00f56256f8868ba18e01b435e0e5bcfe573e9a951093076e7d38c9559616c2fe85ff3e5480c81121acc1dba52c0f6a84a8f04fb20a4cb318320468798a52740fc6677a2515a85e6824750584f76fe60e874fcd56f94228572d75d9776d06b8af10875958fa1c9fb338cf15480008228ce4ffc65f9989c474e11d5ce8e7f2d0e08b36a5ca7483641305cf13b44d25848acfff9aec140348955843b270155bc5a06c294e3b8851ed766a8c82782c003b8190a761b725eefc880874fa9ece5f431d459c0c9965041ed6ffe45884724d81dd9371df2cab61402762017669e0bb8e7fc2a88cb5926c7ef3710989bf0a9f1fe57432545b36f131195c2c7550de7c763661a29887ef32163cb7be0db850e4c238f044cddfcf2b63c511502150c1271ef24936686161e2b1581f9ba9317d9031f9f6212ea33567ce6c24251cd8de20494be772dedceb91436a749119727d373c220e7", + "shared_secret": "d429a36ef033a91f0d903b5bcb0b1a9c7e35ab0f071cce04e8e46ba60f5a1d44", + "suite_id": "48504b45005000100002", + "key": "d1f04c59d173d7f0c6b0453ebaf8310b75ce26028dbb6714283a8654309a9905", + "base_nonce": "0e06b572ff5668e108569efd", + "exporter_secret": "60ae531b37a85f374827b7c1a5553548d6bdff998ff949d2b7a2df58dcb42ad1", + "encryptions": [ + { + "aad": "436f756e742d30", + "ct": "04fce9b3e43bb7cede542dacf54e08ecc47097a30cefe707c9d8fbdec5f67ba33121a0ffed0a68abda27a8b536d7cc5dca6fa8e493c3e1c5106541ced45e52c8f69d333b0fe82121950f", + "nonce": "0e06b572ff5668e108569efd", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d31", + "ct": "1a4e0ffc70cc4d32d31a782c4d053c50470bc9f3a260e687ab9ba87122879e7fe90d39382d80431a46c9ebfa7243e8a734eb58896da596a93f0e769b5ae9188525744ab070f4b55c8dc3", + "nonce": "0e06b572ff5668e108569efc", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d32", + "ct": "8b1e7cd26e9e2ee87c2bc080a8406a71991ee71245317e2a0a723f55539b3fae0cf0eae18541773f165a4ff9e645fe1e15ed93603676e9991e499d355285cf7b8d646ad082129d70b8f4", + "nonce": "0e06b572ff5668e108569eff", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d33", + "ct": "73198cab9cc0f3ecfa00b0ff0fe669ee8f1facc18f81d4d10d486510a72f49ed8d9452314e56022c5d3a1f17f86fdc718de1f1da0fa1c263f324892c87c12005592fce57e903c71a99af", + "nonce": "0e06b572ff5668e108569efe", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d34", + "ct": "b9eb8d6ad364db67cc978a92440f1dab5f7076363ead4ad4f8f4fb7036689625f94fde6b574daab8186d5d352115f664ffe947f31d55361351cd228241d3bc48e8d3d1a7689e67b6477d", + "nonce": "0e06b572ff5668e108569ef9", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d35", + "ct": "f9407ba95c6183c23ba2a046049297f7fcfd9b7f291274f8bf693ff9221d90f8dfa0ff6c4b1d3f98432819da62094003e7396cfbb396ffa76e2131d8c8d181629dde3b165891518f91dc", + "nonce": "0e06b572ff5668e108569ef8", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d36", + "ct": "3fc68c9b7b31938f47d730febf38394c595afb19e5a42a776570fc1c66e0c42042ba546d45ca7da97ab3dbf86a0626cb159472f212af91a82e2c2d250e61b5d0f39c16c728953bbc1ab3", + "nonce": "0e06b572ff5668e108569efb", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d37", + "ct": "3c23e0b92c2bee04d35649990e1a99754eb937ef50e71e097f020764e4410dd8e9aa44e484b5e6c62e8514cd4d0aebf48c45b08819f88425f7d1ec070a923683da453c7b2d425d213c63", + "nonce": "0e06b572ff5668e108569efa", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d38", + "ct": "fdf95a33f922fca1f1c2aecf70c1318eb4732e89dc54f8567cdd69b0a7661b2189b31a64b06a5c423b4cc78e4106a7d3bd30da7a05a9694ad6ed13ff543e119fdbef246c50cfb19b5c8d", + "nonce": "0e06b572ff5668e108569ef5", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + }, + { + "aad": "436f756e742d39", + "ct": "360a32e536bf5178afc6c676f0db58ffa411a2182251b277a8f4010d713b065e2342771fc9de8b3d2e7d4a5e95a757d5e3cb3c33ffca96c7eed77feab46c7ba09a6349e72c5f42fe8d84", + "nonce": "0e06b572ff5668e108569ef4", + "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" + } + ], + "exports": [ + { + "exporter_context": "70736575646f72616e646f6d30", + "L": 32, + "exported_value": "8461aca597f1e1eb0ea51f9ea5b08002cf6fed3a9c380ad232688e2c7a7d3bb1" + }, + { + "exporter_context": "70736575646f72616e646f6d31", + "L": 32, + "exported_value": "596fefe88796efd2fffe3926bf285ad0a4b6c126c5b86cee90b1b68dd4902bac" + }, + { + "exporter_context": "70736575646f72616e646f6d32", + "L": 32, + "exported_value": "b332ccf3be8e7ede848e17c457ffb78afc59257164cd2ae26b5b964c74a569f1" + }, + { + "exporter_context": "70736575646f72616e646f6d33", + "L": 32, + "exported_value": "b5f87bb01e1918b56a8efb2946c16d7bb228059529390ea2b3bb3c032e5c8318" + }, + { + "exporter_context": "70736575646f72616e646f6d34", + "L": 32, + "exported_value": "835558ac9e5804543573361d287094e6237c27c868c24eedc1937a115d43eac8" } ] }, @@ -427,77 +1169,77 @@ "mode": 0, "kem_id": 25722, "kdf_id": 17, - "aead_id": 1, + "aead_id": 3, "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", - "ikmE": "4daf23feb0de27c26bac6e15225790ff84f1fbbd6345a49a241242190fcf87141b15d54d36dd137635ae7c9b0525775326f67b1d78006a450db3ad0232323b97", - "ikmR": "470a473f067489f6d54c028b12f6783fcc39e676e432f6162c0905091c871b5f", - "skRm": "9325b43a77a4783f78dab142503839ed1c914954d83f2f61b5c57b3ec4083f03", - "pkRm": "ce41c74a54cbe548c91e05c047267f223809f31125cb68296a5ba650990f8f0672bb77ce8896c8148052b5507ce7c3701ca827e0946836e356b194301fb173d0e18a3d57511cba36b084cf7039b0956c9ec37a66cb43cb21836b05799253c6289a7c9ef21baa462177b0a1b28b5301d5507d98a6231e136dff19a721276e4b6681da049db4976d5ca3675ac0724823a4fcec65e1839893b859a483777d49b8ffebcaad81b843072215852b4cc37764391bf9f33f6777763616709286b4853219b05c6261e1374d9558ee5b9be4943096b8ac1ac7c59116c324a89fc8655e5337122b8707e5533a0e172affa1831c5b5e2e748ad96b9c5f449c732946223b48eb07af5b6c099d92115df61b6885116d73cec5b36e6455310e629979623d8a711be793bc51b238d6928450936a539993c810b8d31424a7763fe74612782ace208709ffdbbcb2c9a213507053c4b3531c9ed7b8483fc57a790713f9913ae36a61964174252320ee720f747a36f1a695ca01758a0c4a7a41927242549a5332eb45b47e2675c0578d4e3b2cfe682a15e20a80f325b61b20bdaca3174a1af8fb57bfc66db900bf761a459caccb6bf3c3981326d2e5c7eb45a94c2b3024e20d047992dcaa6ef20a27dcc1379f1b21bba706b42482bfa49cb2867c42c373daac87f00bb6a977c7158c3fd0c532ed13b52ea53086626f10b4135542a67b108e66f66bda0c4c25c90a5495adb957106cf08854fc486570afc6f17f072874a825507a562579370d33a49e44687dfca766a9060b1c61093b5183dc3864f589b3f57771d4a5b6063592e28c18b2608283db88562bb44b34a33670b242f618b77b81643aa98b071471aa82a5bb58ab2288f8219fbb4b52fc6a797cc76eceb60fb5f0c42197c270aa35b4b76a21d2387aba9694e6247824bedc57c59e06bceab714c5914103874090b4757d089ae5c76a21d5af13419c0726052ef23060719a3cd0ae46867378c0001f800b7a917a901c8687683209fb53ac6b3c97597fe433a02aab80fa655a363c0069dc97e525c7bbab496776aba382c984da65d4cb42d1e8cb25399eec4195aca15258417aa35ba9f1b7c4155a28f7db0a1a7aa57edc1279326e7393162220708170942bd06ffd82cebce7311d8b63e49a8b55e482b2abc08bfbc5a505911cc5cdb042cc064b44814c23125a5b405754253b0ae72689e90293e455859b04d0bb76228b668635f539fdfb9fbb347bd308b53c5257151530b09c8ad555224d820e46231a13d17538397acd72cb3f26407cb269ffd856d71c14598242a84b3dcdc3c1a9112a67794ea171c0c6a53558c042365b31a0e3c5df6b39d7d58d1a17a8e6b96688474438c68ed2b960c83b482ac15949fa58943632f6724b4986a7639590b98cc22160569314657bb083781a27a480271ad89b79573d71cc8e8e439142d01755b310726671e06ba35f57cb4249a0caa35514b812ef03b110425ba5b5143a997986913c938a61adb3025c14aae550822a647c0b6a9089f4ac9d41c227e7ba5785274a1c75d563cf45e37daa99268ce03fafa3966013174aa05b256b8c78c2b826c17570725ffe326392327845c74964c8cb71a42463a0aa55a30ec23b9ee97fdcd4d05c876887e185fb875a40e924b0bd8ae78c381af7e48253b423a45c06ceda6629c4a882ccdaecc6678b3b93595658b031f9567f931134f02a4e602b", - "enc": "5b2f62d07e2648a16960dc08a677018a2154b2f6e8b1bcc57072a216c2da639b3129349ed51c84dfcb83c605613313975c2f316d6bc59d9cb547dbeeaf4173c22162a1462a0be8a03e906cd154d81ba795fe17d3f4bbcf1ae16cdfcef35396659314693724e73e41e6ebf7032164c1e51cd6d243ec373af6e89a34bfdabc41e05eb31688dabe8461af6a92aa66f6ecd9c3aebbb6257dc059be19ca3a19f3ce4dbc44d946d157338885e1a39b6701a8340116f2000534fb91d7a69110e99dceda9d072479d24293e7d9a6dfe2046691da10a8bfd694a09de72f69acb7ed7d7bea2a7e032d41abc221134b41b6812a442eb1494f878bf390bc1ac9ce9a9ac9140ec80b5213fb517b175e6f36c8088b4d5dbb18789a8a07464017f984fe0c07f4a54fadf8cc4c25de9acb18da420e7efa5e317d58dba33614893e4da482a348e46fb4012f7582a198a80d1daafc306f60ad88aef1b6c0537aad44243e8e8ff3b4b8f5b40b02ee35d526e405b2b6b2bc02ed7206a09c8165f9d85be56438d14b9e4c13ade93dee2ee0c261559a049493bdbba78d59970bf4483b9eeed93e29ac6c7d89331315ce63a3a8299e99ccc9e1fc699ec1cc0c4152abef8d5e6cd5bbd1d223d1556c46654d972316498d2ebc4cdc770e056b2c16f1bb5326155ca4563d408a88b30ceccf634d3d6dedce6090221dadc5b37756428e052acc2a77810731f6180be3a79658b242d2a19f69a1823e50e5ae080f9495603c1ed4c718e8f256bbad456dada428e2ea8c38c3c4bbaaec396228d6a32dc43aa05f49e87e182bf65759610776a06b956b640a08c90c207c50b9c8b7048839cf0dd087facd421d38f5731786548ab25e99c19cff9a721ad7f72ae023bbc4093c585650a92cfc1b7e55212bd4b29ae480b8d5c3c26bbeefc8eb04faa1833f92eaceacdb05367af90a5b12c9fd3c196d2b046778950e4f0a2ad00dc8dcc6e9a4c49a1e478166bfb3f06875dcc346c14b251f9390f6f88fa68e99d3d9d588c41f6d68ac0c797693be89a7497b507b94c46a4e62510f0444becb8d3b3988f4f2790b89925d84514916f69f8d24fc5ee6eec2603221a2e76a90f62b0b29a02f6c18f7ddd816b5f395888d9f947a65e37d499984d5ae04a07ba5716bf76ad5b15f8af1decab6594a713d26244e2ddc213251bc5452ed7e1a338ae5855bc10b661e5df8c67e0c24775d328d87b51372ed227928b369f2517c01fe39d4c097a827f36ce761fac2a826a63425fc0a4358a4932bf170539621087cde3f12a24d9568aea138e3810760d9460af670c3147b539da88778a1d10c766e6454cf8173e3f61677665ad54f1f1d980ae1988255cd8f13144c6893d1650f4b8760ab49343624eeff0cf54b05e2e91b9a8a58157c73d3b117fc88cc90c3860d3c97c27d90547ba18a8caf58be3401f7c5b1291fa8bb11c458764b214661c06319b3fc2107972de2293127a568ade7f5d91519419204b3ed51ef95b69e4baa41e4d06806161ef5175bb67f01ca31b1ba8b3bf212c32e803552ccaf8dccddb1fae77479f7faa903d2133a5afc2ec89925dcb91766", - "shared_secret": "c4ed17cd0c22aa695629abbe5bafb1d03875922134021625a73b4ddf47f12daa", - "suite_id": "48504b45647a00110001", - "key": "733d70af7cdd4dca3267f8700bb13f4f", - "base_nonce": "4ae85eb7577b1ab56c757317", - "exporter_secret": "5d901a2fe7e997ea1d47dcece5b0c676c9ed29bb3dcae0a11606f4b12c21fa7307b97bd5dd821519860190f53f073a054c7ded634e0c162d3e85b61ac8f88f38", + "ikmE": "2c8f82e0c5ce6aa2ae57c5b99b57076c32ef7b3e18a24b82836bc98d9745c9d5113b4ca12df3c92f78b06c473dedd42822408ebcc3cf82838eb793c6272659ce", + "ikmR": "9ed657ed25ee70055f12f2f1cf6f93165e5a6760a7bf6d4c2d9d6028c482781c", + "skRm": "977e67dd1cb3cbe7d2ba07816bd3d3d00f9b57a1c69426a628f4a1ca5ecb49fc", + "pkRm": "9911845091bd0729a5ff90815ca83add7c72e099c0c863164b31bfd9b626043a4b0a3c7b12c4346cacaf27e87a0cda5213cbbb5b900906629367090ac18b9d7771360998579c4236ba94530fd66610a98565f5ab16c09dd03b773e08960f86774b25ce60453880aa36f968965b8249e027317b0b8c034cc6c0fc4fed09123da353d6e12fa56186f5e84965274141a387f0c34b9f61913f1ab157a84818cacdce5c301d4b90068180ec7571be800cea28344e7686c90903737cbfab5c3271d4cf895319dabc6b8f6960206c9fcbd047d21292a49a8668f57d7d3c970e5c33f6c7a031aa97835872d18b400c2198a25105b64a1160a2b4a41b8e129182b91649daeaafde5b00c535006eda51fdf18da2b1bf9118597d9b0339f6240f847225da6859d654b2093ced52524d6205b46ba381e186aafa980f10c2b48034e925ba66134c0f22c9c449834ca3c64aeb30a2ba7e45753e754008f1738846fba70a53047c204ee7ca4bc941360e5b5b7c436d63cb8805f0afe89b611091a3cc4a8097dc3dc1c16582fb77cd877ce0f082ee191a51fa52b9f963c4db588e5b50f5403c253627c0c1b51535a24bcb5050577df039640f184c3a0515fa8a3dda7420164abffb2a7638e18ec08884c270a37b2920a9dabe11062f0434503499987b823ab6496d11f6cda0d10922646e2f32b191435c3ada4b2daac669173498212c1b836113da02e8951f8b3a649d6c3e78440064fb0c51f85d21abc5ab850198273042e48005a730da18635c2aa088d095334126903291f380967df663027bca4bc9ab39175ccfa62a068a9756aab81306bce4938092b7496b4a4eb2704022b36b3c9b1059e0611f086c3ba6c41c740fc49b1aad086b6cbb3e3bb257aaec638ce016ca8669e7402ab36b7f4d82a5a9759517f59a6be70abba022b114cb47566385c22b7ee10fa7d9c58453a87283cbc0c84798c1b5bd7086f06936fda6cf2c009a48699c7d701c6e0945bf21263c939facb1787b05704fd42e66c30211c3b7bf9b65b4bb0f8e487a4b32aebb5740a79c60967c978bb474158802c78148cf12188cb8041ccb0d1a322420150a19878033292cfddbcfd2da7111734f7ed2c377a4b0b1a49bdc411f8a05686da0b5ce08ad7ae25d7543008740c56a385579b16a8701ce83ebb848d286d187b8859bcdfa49b894fa9830581eca7a37fab258642b6ddc3c485866b69976016bea5af9d8395c2cc09b9c0f731b22e6769b32227ca607c1c6c167bff02608590f47e451f69a47bf745b2f86cee45c2347cb2994a78f70e9966cb10a65705dced887bc1c6125d523a2e0ce9de8885c25b54fc4cea0582a81c8bf958acdb283200b649953f9a243d4aeca6024f195cc5f62c4b2e913d2f423dc1a1a2f08c307b28b4f65bba5d32b49d77e68d471302cc2531507ff04bdf508c83d585756dc93bd08cd82d6984ef15c82aa978d00513aea8d7d2b76db37c007352f39aba1c643172c99ca2b334ea51298c4d9bf9c3886cb83353189173f8a225c09601c5958d8a335c57838a6ec5bce7021c081a0ad0a7a7211b93f584b83858ce387ca04758a84a774b4a709c90616c4100d68085323215f66d602f0e843c2871a8fe2c634412c6790376c50733bf524b6c8d7bac81e8469a091c29e66f3ea4ac94fb4283dbc8b2723e154e82ee50b21d3400e90272b58104aebfeeb97768e234968d50a", + "enc": "fa6f9ba3cd3c61e4612e030a17eac4ec810232396e5eb9897c9b7763beaaa4a3b722dc90e2d878ef19a467d2174b619e44ad48501f8894e417c7da658113606ce8c9281ae60ee4041efd415be95896ee6e7b81b4b4606319dc99229967519fff17acc3f09b2743c4d3793d94d12aee939e4375b5c1a93171c7bbc74142311ee6483150b55f785b4d73ff6022ae53e5176da2a5350523fdc004512b315d0021d59986dafd6f1dd6c56b4bd17a743f43a3ff9dd44c917eb1edee00d27c3010fe6adc2d65e243b12c87f8a061b9dd61ef5a9dd6560b15e59745e1b38e35f980a1cfbd604eecf700e52e558950cd6bf1956c7d9af0d88bcb26aa5a88982ca226fa29c4221dd55b465dfe6c3c0c092e53d5cb778676136ab2e0e42c346b84120bef9b7d47e91317c16c2ce9cdc3a342be4a4d1e43dfb3ef59873bad243ac73ce5460d114e2de013b41bf302729d17d101468223adc86b738f06823fe386ccca745c5178c310ae09f9d8c06387baec3268d2ad9cd2bb7ef20e49c0bb1a0d7e4458f29a1c3d4bcf0645a8559087fb81fa2251f44a5653b5af9028190ce7ad24ebff6415dc8869d7d8a1033ae7335f20fdec661d05b126135a666e6420cd247ce081a228dfa588e5366eb569c9546440902545868d9748c920a53afdd2ef7883b00be19e976b8e3785666c2516d2ad1a1423a5aa157487d27dcba1b935e0250a7c770b769446c459d79724fd655a3436131401e04209da7c062122ec1068a066d98b5eea3082fd91ad77c7918e91305bb6e280e03de2dd0f7a7b8fe8ebaa805620caf025e018cc70f0e4d2a021a2b60b92165c8e49a12367ba96feb33773d62fcd6d98f8d2c10397d08f0028e4920c0d685bfe2cabf429132aef2103fa7b3b392c5b1e82f7b08bace4b60f65a64a2a84401179f234fc82bb671302c24df8f2c333e5dcb86c98066e2e0f3ca5fa3690e32ba6eb91f4b9ef20c013b73f50c30aa6f26f675f432c528a53b23ed910af850edc6dd045a2c21336e6cac0cdc828a6b6520396b087d33e07a134f31a0cf421eba121e7132bd6f2e05962b8876fcfb470ce90f7f2519ef7a2c14b84323743518312378904b601c880531894a4a27a3889f72ea5757d0df133997c4e47238a845cc81dd0285f31a85821fa2f743a5b2cce98f759c5c3e00d962e1d059c4bdd35299e70af9aec743f0ff94ea25d3593951d90f0eb2428481934e12b7c3049d1669d257ed758276c41d61db2fc9510281e780937bc04e5affdf3abbf1e8210a11c43b65977eae043b83181a5fa2e2ab0650d224e2f1833f711c6f9eea63ebe416a3eec59eb464aa969e696e3e2e13bc27989b6ece98c049a05b5748c1ced459d74a6202d9d952fb902bca93a882d68b19d9f4090bca812c5081a26c1ad2f2824ffcb024d400e177a7ed266855b8b810c2c0e42cbb46e7b9f0c72c6899519b19f2222008ade44c731d678002533c12bff5a9a769f62075f40318d8fb0f3f73004d41c2b05730cd83480b9881f3e159274814b7e8e1bb859b5283b6df723cd5224140c5f9980a4624172406e5e6f613189f7dc4fa24372", + "shared_secret": "123e5d533b9b848e8a99543aa042a9a28cbae017a3d7730c5b6adcb23dfbc27f", + "suite_id": "48504b45647a00110003", + "key": "71663e55023184f6a4674fcb36a7789398d3c33efe1210ad1bbf4a1ad8aaaa6a", + "base_nonce": "57bd1f0b8f5dd860e69d1f70", + "exporter_secret": "84512f28ef61a222be1cac276c4751c89bc3c6318ee548e713dd940f8e1d8066589b922674736919f42053b03451b97ac8a0ebabdcfe3df67260be07cd57b0a7", "encryptions": [ { "aad": "436f756e742d30", - "ct": "97a37c4fd15c9387cf793391eae5c8636571a70d6bf1e09c4b2ae898650212f8d1ff2f2e7a3c3cd30b74c5c17e114ec8d1d9517e756ca0c3e68d9b50f52452ca1fc3abb2227880f6770e", - "nonce": "4ae85eb7577b1ab56c757317", + "ct": "47178a0360cb65c161cc69702a7c8875827cfe17345d5d6048c4b964010b9291108b022107ebba751f76b571a46fd9357097fbb9a43ee985b5b9d889b364ea02e91cc37d847c0a890456", + "nonce": "57bd1f0b8f5dd860e69d1f70", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d31", - "ct": "e2ebae829149550853104d9c46455acbb77cdcf31f951ce7ea89b353563272ee27d8acaa181b05f3806076cf43423d0d5dc3c1f8fbedd5031831c40ea4870cc6a106ffb3c6114935b57f", - "nonce": "4ae85eb7577b1ab56c757316", + "ct": "0d03c2ae21f8c7fd487c4f2fe223a480785f3ef89c4593c010ac01bf2206ea68825177168c286e19deff59c7b3fb267b76924e4a18bcd4b92d121f2408750a5b83c506512c80fdbfe933", + "nonce": "57bd1f0b8f5dd860e69d1f71", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d32", - "ct": "04521a1743333166c14efc5979189d9e74377a9c25fa224c05c30bf240abb9d317c84bff1fd14fb8ca5d3f6cc310540599145e3b9420b9341d08e85d9d7480a2ecc6ab750360ed9a7a0c", - "nonce": "4ae85eb7577b1ab56c757315", + "ct": "9cdf8ac7423474b4c9e7b46d5e3d9060a87ea85e979065b02dd6d17066a0266ac5769def51f6bff9df1e30c6936afb02557f4121c598e2e95e9f8e4f9b9d7be796776d2b8e634fe0d807", + "nonce": "57bd1f0b8f5dd860e69d1f72", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d33", - "ct": "bceead76246fdeaf5cc3651f049ebd568a1bf3979ffa2cabde915d9747bc54d8cae2149320a5ef105e87317304155a4c8eb68828e3c19092e7aaa9b1b058ccf26496daf76c23acd6fec9", - "nonce": "4ae85eb7577b1ab56c757314", + "ct": "95e471af9a80656008556a2504348b77481b0b7fe8b7f8592601de1218e4a1f9d632b662864fcdc933702a64353150761e03c2b3cefe1706909536bb7bf8644135a1a5dd0d01dc07fd90", + "nonce": "57bd1f0b8f5dd860e69d1f73", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d34", - "ct": "5ff46afd73de34d2e9ed5c763ace14f12d92801cbac9945f34b00c3fde0ed97f870d74397db8eba4a9595420ca0f6932970e378477260f050360dca0d0fe41f0ec690b3b33e17b12f2a4", - "nonce": "4ae85eb7577b1ab56c757313", + "ct": "e563176585c627b43bd71ecaaa48d3a3d19893e3c61fe87e8862b91c57210abf584ea420c887784f303051f8b79144d54f469e394d7daaa426747d47d1d62b22552efe80ffee07dd3358", + "nonce": "57bd1f0b8f5dd860e69d1f74", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d35", - "ct": "ffa02d26fa38e869e49d71c2e25386a12944f7c1bf407666f3950b082c941a80c40d2d3bd49bf2da0498459b0c97f4134d30df9bea8c705c6865f3550f8da3174ec48e0a1ab528226eb3", - "nonce": "4ae85eb7577b1ab56c757312", + "ct": "a265fbf951b3293f8ce676515a8c64490a8a726f5c04813e9b4db2f6a0e04eda00d8777701b7eab15f8b62ef70b21e5ebe302d4e8fcf748e3878d3f78772637dc0ac07ca9e69c4d6401b", + "nonce": "57bd1f0b8f5dd860e69d1f75", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d36", - "ct": "7e7a02e21cd86621a008b57bde67a0e427a7d476fddfd2cc7b0455db0a38e34165c0a8236da67977486152258b2b56a4272c72e4baec4b7af8c7dd05490bb72bca75be39092d1e4c1e1e", - "nonce": "4ae85eb7577b1ab56c757311", + "ct": "195b86b6173bdb1402c8e743dd57b2a48569b121af1d8a6388d62be6f8ce3debfac9977013aa3988b9756ac2bebacd0d20372f3b248a83b6dd81878a109a2ff6dbb08d2175fa5634247d", + "nonce": "57bd1f0b8f5dd860e69d1f76", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d37", - "ct": "d0a640866482db3e3a62e163e0bdc5844d37e80e41bc6bb4012914414a471f0eae9f7b371e77915d1e543874170b91dfe0d378d658168b60b7ac3753fbd31115eaf198355d4301d55948", - "nonce": "4ae85eb7577b1ab56c757310", + "ct": "ec5e13eb3e1ba33bd99a634a1b7085ee3402ee4c58055111cec0c3acee12ae083bb0682a48c67d779c9579143987b6d32a927007d71e6741a5cf6d8a1b287a7c23e3d04c1f847c5486dd", + "nonce": "57bd1f0b8f5dd860e69d1f77", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d38", - "ct": "0bf80745bfbd1630afa96276625959ecdb0629b4b810f21a8542f4b9fd778f8617d4dab98acf5d5d169dd09493af30862592c46656e51243e76746b5ae59cc814387ffd303fa4cfedd26", - "nonce": "4ae85eb7577b1ab56c75731f", + "ct": "d2a8554c51640fdcf96d174bcaefa7ed865724d5e830de2a168497090cb2ca2233949f63469749cfcbc2cf72b7ead25ed8ba38e18e77e77b59ce3bbea6382759da95117beb3a6f735916", + "nonce": "57bd1f0b8f5dd860e69d1f78", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d39", - "ct": "56ceb7e69ebd45f1d7aba90aa0a5d1dfa6573424323738479d9760c13b45aec2328532d6c8ca011778bdaa68d403424a3836337140c08e1400cd3fe60d5855b8a7c2d3bd9041e87312c1", - "nonce": "4ae85eb7577b1ab56c75731e", + "ct": "827fc6de9c0cb23a06317e33330bbafdd6d4b4dbbf3227a6cd35e7fa27aa4ab7a5c416c135cc6aad29a9dd4ddd5d808e87f898ca02549dad081d5e675eb530e031df568d6ac3c1a679e5", + "nonce": "57bd1f0b8f5dd860e69d1f79", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" } ], @@ -505,105 +1247,105 @@ { "exporter_context": "70736575646f72616e646f6d30", "L": 32, - "exported_value": "f1a6a14d06c8876730951121f16029dec150ba5564b4e9c524b1f4e422010395" + "exported_value": "fb85fd013ee7b6cbf28ab09a2e20af5621349fafa549baa292a90d8e51e83cb2" }, { "exporter_context": "70736575646f72616e646f6d31", "L": 32, - "exported_value": "04569a0a0288becbfc45d125db3c0db19a991ef75594835c4fa9e51b114e26e9" + "exported_value": "937065d5393f93efc519c1614361d8e66131bbdbfbff6ce8d44b3d50a91a1272" }, { "exporter_context": "70736575646f72616e646f6d32", "L": 32, - "exported_value": "3e769c28ffa998adc600aba15209bd4a4e821c89f1f463d771e1160f5088b467" + "exported_value": "9c7336c0f212d0f17c6453c21d709907d87c87101f8c18590ee286dc9be47492" }, { "exporter_context": "70736575646f72616e646f6d33", "L": 32, - "exported_value": "2a84eefbb0781cd1c5356ead3d81993480de5a4fc6c863e5efb18dcbcf1c7192" + "exported_value": "9b4f7bdef7179bce71e47177baab9a6e4b016fe731c98509710d6dba783f7ef9" }, { "exporter_context": "70736575646f72616e646f6d34", "L": 32, - "exported_value": "28b7fb014cb2923046199b165e0f9e8bacfd20e09c0504076a172ab456a673c6" + "exported_value": "240f677428ffbb160262e71c96e50dc921b7819d19e803177730fdb0cf543486" } ] }, { "mode": 0, - "kem_id": 81, - "kdf_id": 17, - "aead_id": 2, + "kem_id": 66, + "kdf_id": 19, + "aead_id": 1, "info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665", - "ikmE": "71a1487f50f72963b6dcc18a41b97eef849966faa408e29ef6b61c122833e007dd03f6224a6278fb9fc95653e9fe913c4fa9fdfe109c2ae1b6d5b2f8a9ec1db2a34c7b11bfbbe8b03040a2b1c43d12cb", - "ikmR": "4ffa2746dccf12951adbed2898f37a23df8e82c59be1e8c90ce635685bf94024", - "skRm": "24d96ba896e14aec31c431a9dbaddd43816e63b20b45322505b5f0aaf4a84ff6", - "pkRm": "639951ef45491a06a18ff60eb4c1a22caa431e43b99ee1ab02f4c5687c1c67e05559c36af669254f68992d163eb81219d67920d979261cb6249e2c9acd2307ee5c60eb3cc98a4896b28444a68456e5f245b64a4e25989863277a55b28850798b888c056cb64fe9b79e72f2040f8b6113f98c4b83588c327cfd0a68d5737e5cd6150118a2ee6852ae6a48ea2c4e62811860945ca44190b521afed6b70622a316bec46e87740fb4a6276c00580308b1ec00ee593cf7a62772c6b1b51791d5e5a2589e9149c617e7a54062c9b8535f393aec093f2a5b0aaa476be689a769862bca4a1d6d5cbab296d7855423a9a9d7872a247a6175d63a77e379701264897444f23a9a94ed5191c3069af7a32ecbc23944abc13c9b3b9343dbf1c1ff46b3337f825577531a971ac823c89f4f67b3bb233ee039d195a4f6ed6cd944b6304569a2335cefbbc24a713cbf7e329bb632054589311384f36234cbf159f52a72be8102efd4306b2e289457492a911103d896153d49bff25835fe94383ec93a760b95a8837e82062ace3b2e582c2851583ecf404215064f137093b1b22a7e3b63d17089700b8575ccc1b5c040a1199b6ec091d22cfd5f96519b8b441953ca890927d7843caa7c28d2ace2b9606ac3883a0121a082162698a07d1997a8c4b777e85aaf8fac214d14acd0b286338663090528d0621af72bb7e350b2f606150b04a8342b8abc55401393d16440791a2aa53703484fa6bcf253a410611a8bab31391aa94ec5b6bc1720035a932ca9e6c987545787496f22acbf6187c84386b2c9fbedb27b7982c4c281fda088117f85b0cc743dcc3acdd9ba0de3acc4500700229202c0387e8e5c18b1266e432741649844c2c8f53d120185560cfbb67d406a85449694145595ea298296905cdcb08b9cc40e7a7b67d1a3ccf5bbf26e0083779abfd8c1576604475c933cbda93ba5b1d6c974e881a27beca1c921814e52743dee8749b859ed8e87d014a93d8526069d753aaeba2ff3c319c293dde0731046c3ff04357694296355c5902798df9645ac4f34e28b481cef89407fcc9a5e21b053925a24baf49091dbc8c8afbf27bf3004d98545b58c67facb51c85dc5ff511046438ae1a175775ab0557cb915f0a9a6e05344f622a5e8c69cb28838317354e5a5d4a33982401168d8563167148a737afdb21653693111d533369668d61b0ac99753b7ab70e351222edf30656f05a5e13065e7cb05e32a888c749dc2c0f3961c8f988924aa17b7a8bbfbc490946b00043844ae3484ecb5954add7c711c29bf03900ab52095c467037b99f77721bfc12b288909bbe4c830d041a21398ed216aa1ff14ab7473db07c68ad94c4ed0ac5d1054509a91d703869e7acae4cc2be9ff479a518b62d8641f72708bf601e3886b59ac6337e63691f50b8182ccbe289b62d0c4f02193cb27bbd3521166ef1cfa2950ce3aa70f6a15ea5d44e430733ce1856cd5957c9c41e6b223520ba66879c3dcbb57340ac89018703dae623a4f03334e719b2765a92c36d0f7acaafb2ba22f63529419a4f5b1f03e3903fe2aa49fb04236426eee8cb6b331ea2837c21b15bc71523b8344c7fc3588d8061339c7da32133068c0697c73659aa3648c7292ee82f33362df01cc1bf4a174bd533c467b92ac79807d10c2d65280eaabc3383966e665ea10284c3fb96caa36ff4108867a6524b69a424f406dd85cba25cbe860982a74c8d45b37a60b27156eb77d421385045631b66542dc6a4e327b777809802aa9b5a4c9a1aea6061aa9986bba3b3e6c544383f7b26641988703e625dd6c26a256726d44a8a5067157803b091d89ac75b1e718b4a36632af1f61016b46fb8cc4e8468865062048715a4b961435f72449846066fdb66ca40823cf2499b3100c66a6775601f1a916ab2ea336923443c93c6a60494c0db4d35782216bbc4a66409625c5efe32bffda386dba329c60418a8ca1976da6635b531fddb241420afa2628ae96a67bdeb4ec80a751676b7197669f6646faed39643fb3a34908836b7ca01ab198f4a75aafc0a581a70c507cb3bd88daa9207000ccf12e31244f38d2beb265b19cf1948c5c3547fdcdba12c77c33a1b953bbb3682453325b2206e55365d84a40f4a8f88f79164fc65702b5a7b4bc3753162e9ea18d6436bf6b1080b545ebb653e9b6fab123856c5fa592304550ed37203d3ec0cd56567890025b904b07c9f928360d6065df5837f50f20e7d43aa018279f390c68c591bd22cce189d0a4e457455631678d702d72bac5cfd87b22fb59c86fb626b7efbe5e020ff4e7fd0c56387c6872081bc9626816e748e5c4cb059023fbcb99ef8ed59690799a384", - "enc": "d809742b5a48faff3c119420866f6b60bb7471266a3dfed4f23c4d34304d2f0ee10ec39036cac8a442b93e1b30f3b66bb7daf521e3d525ed155220b87188196d5452434319b8c18ccb2a6633b3dedc83ab877ff1b0b6eb9ca96b1d6b692792b9ec391c1352179988fdadd8c3fde13d319c3e3d0d36a69f2dbf10135f5c7fdea3873a5c398bf21a1b22117de2b4d80e08a9f0b6af8f7cf8e108102bc1e1d8f2af26ac7a3fb49160ae3b9ce91fd63e013f36d351ecfbff1c41e745f6eec4d3e2c8b7b44ae1b8127ebc14b6a85716f24601385229e4cae8204607d7ec9a4bd998e746b2709f10bdfcf9f795a9f8e374a1d8b607d4bad26b44a5463295d1e9d4eb889cc2af7dd13d28d3764e66049a827721e678b982f95e5ef7c3fd4b54e932c262f635684d85da138f29838db10b7a953cfb7ee8e237b9da0588af24e1545b2bf154a35e6606cc0a00377f3a3ff49b392db57ea7c480e900f7b54597ff48ac5db9c0ccc713146161a1f87353a71f30d4e5c8181cf61ea62e5e9e16159b93be9d096bb240a9e743f9e3ce15b3f3a948f2ee7bbe29e767326221ef966baa2481b946531fe86359e870f3ab7b8bcbbf5cc4cca3310ebb05ec6b5f642f0f8f976757d326440576d2212673daf7f96a8adbbba69b87738c3caa2706cb51782a5374a52b64e55f780fa67954a8eef2a5335fe24d33c01f124077e24881a2305de6d0ccc94dd6d55aa52744013368c0c0988a5a80a8986ea639a2d79c88cfcee6267508f6c81751e76715c9be4d3ff0070199459eeed7c2576c6c397367aa1bc0b8eff100fe524cc3d80ce6d63b0a07f828ce8316a49d08d48275e5bdc3121431a188e26a16931554d72d493ee1f563feb54b77e554cb2914e67be04b625108ffa00bbae998a5270e04848aafa3b38cb71abf50565cb28225c558282a91e6b0ac7b33962f13e3e955bd80192c3e5014eca6719b6ecf9b81dd5c6e161b7a87ce51ba058da76a8efc83796bf8c01fff2e7d7b5b59e1a52f6a70d42e61684e2e77b8cf63b7e38b22ed51e423aafc5c3c72ae19f2f756511b8f0cfd9221ebac6168591fe27d95b87ea705f48dd83540f29ffa2879c45ca362bd1d4144fa66e9bea9bd3144b8bd72176fe1c785680ccabb1d06b2f37b37f2830c688daf478ec72911d9e973c40ea6aa76484bf8cfd86c38e3ea5f1db0151339311b1e7d752adf56e732e9f845012a8cdbf46a499e9cf64098b793eb25830b7bc80871769d12b98c8bf19789b0b4d41214fade97e31dfa4e52370611e6054be4de77c1cde689c695cf46be7c0c0182f6a8e809076f07e947e23fb44936a1b0b535ecbcc5c26ee192c8e67d20238cc3751cd34bc98cdbb1ea74b40716fcd959efeafa8b139c410c0d2706bc6f18a2db9d58a10b0768b5ca28a5704d6831f719839509e36484cafa4577850033fc26e54121fce3d0e93c3f1e5553aae509b13419e49ec3e95d90812b086636511b51066d9ade723235042ea60d36540139fe1be9d7dac19d490b95c8f72637fb7168e3b04d3efa76f2f6436694bc3e667bcd6794ca1a07eadbad0548b96ecdcd7ba1ed72216b954d3f7e0ea14979c08e1eb1dcd23af08d667318cf450e9df80107ee7228fd00065f5bea54d3843aff60afdae36c7b9687d361696ca4f59731c5ad610f603593a51aed324fa8ae79174f38aa7622b49dd94a71f50e1853f6ccee50c3dc33b99de61035a7edb6e9f3ea8473223ed8c461f0e83553690cf26e7c4980e02c8d2037e77bc5ae8ae31e6d4223d6309eb2c097562cdc4bf0dd4422cb5a78565f7ccf8128a7b45a13981a3ca436ee99656def793f03d64bf991bd30ac1214172fa5b48cd0ab0cf2121989be7e9eef6d2f9656e574a1637fe14bae04ed2481316f3f023beb7ef0db955672139a68f488e762598eb9780e38a1532bc87961e3e8fd874d7a84c83d93b265f4e7d2ab948fda9cf4b41a5e237471bc1137e33408916c6d30086cd4ba1271dc139eb365d6d765403a2bb79d0a2bfe6119e7d295d43797c619c83d05d873f1abd643c3540e0ef746be536244eaf908784eca4405ddf2e7b46a27db004847ed6949b946f4a9f1ee4526678535b299eb79affefc96e8063f6d39e776b30ec9182e216072c6b32987ba2ff3a6b4093c600065afdfa97f10cce33511c3999e05171492b8844861f3d50985baa1b3ce40a7fdc8de2077d6db04d428c5e395a13940ceeb5b9f65e5e2e85ec3c4e25fb3150377f0162bab083a4fad917f74287afe7c059fd9a8127e155104800ce29829862ff2c4b75a02b7d56d1b841c258e600092f8f091713a662e6a8fcbb7fd32f06e67d7c7565c9aa75f5b", - "shared_secret": "3cb910d7d3b10d9b89aa587cdc7870e866cac5d2b643e381f453b95dc5c0d763", - "suite_id": "48504b45005100110002", - "key": "2c2e398fc8951e52cd45b291429893c3092cd2fdb89ad996b42eec2b15c063cc", - "base_nonce": "c7a89d334c2e8194b1edad21", - "exporter_secret": "39c103cd4b4f8c76d1d506b6c89eb3e66caef12023bf7b57b4afeac11267b0f9570757bdf3fa83de54b018f5338ac28b4f01f03c653f61f3c238d72f857e4ae8", + "ikmE": "a20456fa8c2a558686a231eea685c004974b90f53a716e9cc1716ddab8619efe", + "ikmR": "0278ee11918f9507508c01c00eecf2d031ea1fdfcad5eb80a4f4d5354be66152b0e2ed983c5d27069244dc174b7c1a53b4a4f89c535f56a0d0d80689bffb61bc", + "skRm": "d919b835b98c968e6a1e85a6e7c54be8774df0a4d00775626dea7c0fd0750d92fa2c8655a59401910e2da51f5bf78b2014840fed74753f760ac85586c0891570", + "pkRm": "94986ff91865dceb5545dc66ab563a66b69f44e5a1fc3b070b65b8bca63297abcf3711afe3f90e020b8440c0aee97927e2b8bdc1c3009503bf6ef459e8f14edc8bac14e08b9c9ab57448b49ae185a8572a5d60b1c899c268fc3b6ab357a025ac0d6b00092b72cbc10b6e5194b66bc21602acaf0c718c0cc68e4aaf385a00f91b5cd4b103fb932149a7b9d85a1b87564714b27ad8e7910794618c16a3378692c3dbb3c414ad46189ba6f6b70c27c54fc7153d50a17d9a3f8d9c23d6a96677c01b1c883dd359014409a3c1799cad15b3cf231d4f7580a8e0b369f674a404c2255850aea820f6db2d85d72238a421cddc7502cc6d6b954ace72893a1b2d2067a7fc55351f264fdc70afcda13d22d765a817803dc875157a8065da2545c14a32f6b1621395c375720d0c44f9901af5667c7f83cd0a57783965c9b849701f3a97d5c49de0145b99602e821566e0a72fc517c75e47af7f390633d42f42942c174a7472222c79b610a1a58118fb20dde85a6e7c152dc88aa9c136f9114309605db2a71d0e6c9e31d64846c710c8e83c2dd931f05455950886a0150143a06dbfb2271f37793ceb995efc753d299114dba8778156ae553d555139de082f0fab58e1b2801f852ce69a9d1f7658c447a817c3605c92743e14a11e04b67fa19faee6658bf1c0cc880bd7fb631d6cc0c850157fd011818175715cacbf4c27fbe694dfac8783e4a2b04b13d512a33a836aab7476cc1663a7247a7b0b970f5874d6a87e8682261cb76f2124a89b8b8623fc646039bc2de0914bfa40d6d5137be3926f533bc30477d3320a93744a2c08118b48a441e42c8d6b0da6d810d23bc476e3256e864f1c97132a2b98fe2465630132d3bcb323bc6f9b713cee867b3eb65e3723a8a5c82f90f203a570c4d27b0ca7e82b6400aa6be29ca4736688e826680577a9dba091b1ac6a618ed933b71d6954c3baa10e87834ae645d3a088b324b701c720662949e6139a59636b27b76d4478023a59cd9524c449c5863b28c5d0a129c45367a9a2b922fbb82f7a6f14f0596ab35676d285fbdb01e0da254504205bb65150808cca0968f5096727a00e20e1613764793ba348216b866cca6874198cc058a7a10975b82954a7a2ab5969cbd4eb360483677b779294aa3fed103b2615471ec979003087c201b4b9aa85717c22a1b2cbede1266fb8011677a085ac8e140b9f1f73caeedb22da4225d8676a9e245ed5a652b8d4a8d854b62df62d267c578047941ab8c694d864cc8327435879a7e1831ce0404e8543f8b12c3b6c113fb11a7ae5c84d3768dc88202a12c47e9299198c54a5221585130f2a7a268b38b29c34626a60492796cabdf692f1767cb68c8042868c1f896d0450778e7620f2161d44307c84b85d7c22997fd4414f0b4d5873457b67ab186cc0a990937f3376bb348e84b33b22c039308c6d451a0c9efa57eb681afb2274fb65b605d66344a3b6e8da6428632ad9343dccb54f01b2ad2c992fa03b21a0f8a1920cd00fc0398527a808864ae7a0329272c5b2d6355f174db475576130123108be6e3a4c57c4a35f4c936c7204af07a22f2865add016ce16938c084878d5c0fea2379fa8c62a1a03d464c364448065a01795f62eab904929e39548692255cbc4b0d061be105d995589cd458628d7b6d33219bd1b5d3a671acecb08f7e8c3b989cbd4cb9daec9bc370c02ceb969f8bb9de8fcbbce7167a3ab62e45a46f795624e06a6938b8b9fba309a447ee8e548b3b349141a8f6e9a3aa98453f32952a3b8af2cd91661949ac7536aa5e286ddb9b8237467a550c31931887ebb681e949e886269267acedc9c209c8b44e29ba93eabae80e24022633793b52c836cc1bb7222e1d15d51892cd76b2ec8e0b7c504a074577847b51098eccbef252a103a45200b66f0479afd4462e6b262ab392d0c14117a4a02c422b309a9c97ab87fed847afd1c498a746be5e9193ea82903826632609f979984c63374910721e0334bd6d0b12201a3c8f31456a767f3077a1a0ab9165701a2456cadc7b8b4686b8d7b0fc7722e6e176faf3c8ba9fc76414b50d8441ceeba4666c7679d544f6766c85e696f542283b6b5160fa1220c949cd4a76d84429d3ef5aadf1586171b1076b59f6f50734920427811810d712479eb9bdac568c6c2a93773b6d171315f48064dbadf351e25a5223aae6f94d75714c01cb15b33fd24eb", + "enc": "0ad5cf05cd1f610cd9ea6480bb51d65173a58470aa1904a9ca851695e1ebafefccc7c9e9bd8fa8fdab6b41914b35a0e0abfa287e13e38e863d04849b36cddc4ea337b95f60bae825d7f7881baec5a46e136ec4becfc5d022272cdc0700a639d5fa5e3a52a191e4da1a42a13c81ccfea6cb5b0b7c8613f82cd642fefe39c8844030561337dce23ca41f8233638a952581b1546ed24a4bc59ddfad87079fdbb7f69b71f36bc50eccb11970db724ae3ca42e3420635263a4859f254d83def930037ecc8f3aa8237e31aab421d6c29bbe2ab53ae012cb9ed4ac5dbdc40f2ffecce6eda07b0b491389932756828df6e30c982e98ffc26a3dfb507467bce4932fcf9459cd13c4ae48532f3a1d51177d4c586732608c8a2e89fb4bcb68cee4884c9ed7750ad5c925dbe5b6356279e85377db7dfe39395ab04a69700373ec05c54a758bf9aba9a8ac40114fe006892e1bde91c4eb9326917b96b0c0f7d94a8abe5500943c2d78f3a54271e2ef9163fa3613356a750d6803bda6b0ac7d8227b3a5865e30d373c7d14a9b6bb5ead190f5b04516dd17cec64ee934d648d05231679c18cc493c964a8ac1e95b239c1887d68888f2ad37aad8714237efb55572077921b856a326fd8d58c062d1be6d694495bc7634c5dad6559fde36f3bf25f574acc3227c4a04b0b0d7402548d1ffcdae97f706372dab7de7ea9f4572adb15c5020e2be1a0b2f91dccf0c922ecb8724c67ceacdeaca785a24252326b03db8dc2858a91d1441dd00be776e3246e2d3d4c7e7b348f3199d7a95d978c7c1b037ba1ae66c9082dc8ee0e4dc1d740537aba93fad1d91728c110bde37479456aa29599d3fee6923fb345c7322afdc43f08d5e5afb28a4a415af33d6b7aa17c5f1d3b18371ba5f81f618a324c9133c72acf73a7a14f896fe24c1f0ef9452c5eb81e3c8b20437366700d36f784c193866af646501a6fe4863ab6c26b608eed321a603ffccb13ec72dc0d5334299516fd6bb7ff4743c11fb9a6f6803a3c2f4b787a57491db12ff571772e84432b189dcc508f6e487f627700d367037d8ed883e59e8f63944aba263cdaa8e7f60bd35984a95e67fdf4387cef322622932f97ffcf57e0568fd3d0b177eac13372ae2f36f8bfed6edf21fe5f3b4a7e7519391b5566f6420849263977fc13407d7da86c496d1c96f90405ace6ccfd0dd529c2a37b96fe40982164f805c578c2ec3bd0c1b932c09148f4efcf38fe7954234573315954b86c96c7b1b281d3a719366a66e4d73efdedeb3dee2e060b4c5542b097b80d1c39f58de5f88685ccc4cd7ab4da0123af67ecbdcbc145dcbda52354147a11c103ff8bc7783774aeb9dfa96c23cd9a016233046a93a71ed1b47b8e2887f22e9b4dbd145527c613aaa8e5333b9e7467ca61841d37f805664f9ecedfc8f62fcaf392a2362a419eabf35aba64b332ac001b6df6039db869cfad027ade89c926448ba86b8a547e0f0d27606bbffdac20cd40a494a6bfcfea1b487ec6c7ad416b298f4ae272823b4502cc1db8735424302797dea67a46dc84b3e537f64e8f4c006efd4b2cb134b7f7d886fcbfcaccf0091703e425f58e35ebe927a51396fceff741a3ca3b6542acc966a58306dca3dd81955035bd827c6b882660c132fc6130f8c40cdea47bf0414a4a08740ced69013ab823a4d2ab25bc060e36ae7c8209644a9e76105eff422c0591d0d4dc6a3cbba78069bdd3998123daa49d638f0f1b7f1974336ad335bce3fdee61b87443e6f3198ae55a48f3dd6475b2d6042fae8dc6cdabbcab267696aa60e140b2bfef0cbb770915e95f16c094bf39250847a772dac0da8e9c2441ef1c488c34936d98f231aa21f28f33f41769e145e07983fac02aab9e82a36c9af934e89b5695650169796d674fd0eee16276c9f4ffd1a0a13c888a46e396db1c3b44be870884e14ad077b0db4325ad2016c722a3c814aa1920cf7bd6f42622d060967a5629915619c1f23a9b92707ec4c458d4495ffee88df7488fd990ce1633f61a0ace2c9983ae9197d6b9ded3fa0ae0fd660f8d4392cc5731b1013ab4e0adde644e75974384c44e3b80b2023f0c7bdab2e0cd4d39490a4e7462c9142a88045279b01df1865bbcdc32393959eb0a3e01e07e2665477f31973361a9890d4d6fb58563cb365e6682a55f70a6fb7d6664fc81081cf356f056a5c4e05e85040853a33b99356c4a3f75", + "shared_secret": "c2575ffa4d3ac41eb1b7e31cff87172128a33a0f3065313351cb8e556e13a9b1", + "suite_id": "48504b45004200130001", + "key": "441ee6f135d3300ede9f1852f1f42bcb", + "base_nonce": "310a20009a7d1a664530eafd", + "exporter_secret": "f8da246a278b45236e0f139a7d565a7a86981f0251996a2a8320aeb94ef09cf3917b54007e23bc3f6cd902716ddcdf5ca39f69884263020b06995939bd528d2c", "encryptions": [ { "aad": "436f756e742d30", - "ct": "410dcea19546fdc4cfa359f9e4b4dfb859cde8cf7af003ecc7b61061afab4ae0e43e8ef07433c2ea2e5cb20147c046728581ca20a684db53a3f4e1ddd5eb2d44e6396ac47b419e6768a5", - "nonce": "c7a89d334c2e8194b1edad21", + "ct": "356251f31223c1de2adeb0e15789fdda984b39a140d7cc979afc67cc1b336768678e48edb73a31aa4aa7fa38fd2f351aae8f772373a8c7027993b1d7bf8ec762afa26ac12e6cbad02304", + "nonce": "310a20009a7d1a664530eafd", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d31", - "ct": "7ccc492ce2125ef52f1875b160c450989014f4567af950438859b26ab05805ca8ae2cd12b51402b7f937d0a7cfb4349fc0b8b4607e1e9c02dc602dfea7a071f9922b8ac2d4c5c2d20cc1", - "nonce": "c7a89d334c2e8194b1edad20", + "ct": "d67254890363dc9151b526b158e65e96955340969a0b1e805bf34e52923f0f361d45e19def328ed3181c2ed5189214c12087c588ca096ae248828cebb2bd4d790ff6bcbca82b5b0b8cb3", + "nonce": "310a20009a7d1a664530eafc", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d32", - "ct": "5b22a7e3c32b848138f11622bb893dd11202c1b2db8b70de9f3e1b4e6cc7a9bdfa4542a880e9fc4a7d19b7925e7ee043694004e1fbcaab4bde276ddf984fcb0c44579f88924c7ef74916", - "nonce": "c7a89d334c2e8194b1edad23", + "ct": "e80864680ab8a4e6f05cccd557694898e0744f20c0b3521e9a2376bee6da3def3e6215af2987729662b5b138e51b255d02ac44b643b9e59f77306b5aec7d4ef06d954da9dbd329dcc39a", + "nonce": "310a20009a7d1a664530eaff", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d33", - "ct": "2bb5cce87da64992882e5bd58db01a12b3de62e6079c6dc62c344c693ace32d0c11ba3e318d0e5a615b186b6480ef6c745e1c2cdabc18bdb05406a96487bb8a8a2d4d2c77649e03bae52", - "nonce": "c7a89d334c2e8194b1edad22", + "ct": "414edbbc9ed90cd0c9a5c52114cfa0b38b200d44f66b73d33ab0b56fdbba4dc3ae30f83ecf333bcc1969a21b120368181dd7d0c40d09c827e31c039a1ade051e824688faf1770e183b09", + "nonce": "310a20009a7d1a664530eafe", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d34", - "ct": "9b1e917752238902934705ac099cb5d508f25d1c710a0a415f69e28423f17293c4c62c52ebbb687dd76e12865ba45f3ea3ee3bae56a25d4620419633792cf49f957e83f9934d043970ee", - "nonce": "c7a89d334c2e8194b1edad25", + "ct": "ab5cfb41054b0a4aee98bd8f791c2d1cac6be826d3e1ef34a3d11ad683d31bad5c40ad590edcc5c76b0d4b49fd3ca8fd369a6dcc2e6764bd117615340a05021b82ac9275d9d9b3e896d1", + "nonce": "310a20009a7d1a664530eaf9", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d35", - "ct": "9b469ab7109daf41eca2f2b9d04d8f8c392f352308414ecf2acf372ba82992eea0f033b79b654760ee8438fe88aeae648997bebe65572aca5c00ac18a3ea035cd88ebe1e93bf0508abca", - "nonce": "c7a89d334c2e8194b1edad24", + "ct": "35b85c8573ceb3d4e5f6d11eb7968a5dee839e3acb00cb9e4dc594de4c156014783d7feaf006e07598d622f04b2df905fafbddaa715b707f4de674a5e4fbcc9cf7bce879a002689c453c", + "nonce": "310a20009a7d1a664530eaf8", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d36", - "ct": "8097e7e9f7b7019d6c334e5ccb3978404c834b98da3cda5eb2483f381721740413b2619bc19e731118c07b1d9b28e3ccfacd2b4dccd3f46d60db4f0d741015a77515c7d8d18c7d0bb299", - "nonce": "c7a89d334c2e8194b1edad27", + "ct": "fea0f4fd72a86ff845cd391af465cdd32d38a5099fb99c797e7d6933eb25527f020c9667cb2044e0a9a48b1991f76d08873f013002c176aee8453b38af7291a322d65859edccbd20a270", + "nonce": "310a20009a7d1a664530eafb", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d37", - "ct": "6b393e65a6010cd6061faea22305f459d42a5d2785f11c5ac9aaa270ff14fe67221dfea5dde617fc06d0be00210ea7c6ac6b3580ef915f96f08ccfe27d4081e358657d1cb503a44fda7c", - "nonce": "c7a89d334c2e8194b1edad26", + "ct": "d2602b28e89965a304d09b0e93339f6c2dcb41eef81937d8980a228f85428b6e11cf3990875ff3b9b47f62beaab6ff4e59b41a11b5182165e4a6d7ca63e4bf016bc8b2148ca1cc683a30", + "nonce": "310a20009a7d1a664530eafa", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d38", - "ct": "ead159c52f1ddac389f2de62da67f145aa249a3ae2de28a9b6967b6ca33735c04d5765d44ad9b569feb34dbd83d3a761cb33d324d7e977da23f3012769cf78a0a873f6251773553c0997", - "nonce": "c7a89d334c2e8194b1edad29", + "ct": "c5069a5f1df75ded2932b3b99bd2a7f998a773ba83772674e01e72c313f73cdb4ba73e30968813f4aeb31cc3b69ce2537292c3e48a831d275e01c4d5a8cf9b0255654240574c2548cd91", + "nonce": "310a20009a7d1a664530eaf5", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" }, { "aad": "436f756e742d39", - "ct": "3d365582e95091eb2ff61f349bf07625f8427f73082b5fadc11fb07cadce97623d3df5798bae06e21e00b770660baff684780b97bf2e42880f5693d878decc6d365711af656f355077c3", - "nonce": "c7a89d334c2e8194b1edad28", + "ct": "ce12c2444cf3a5a1b06de09d857118211be0553dfcd986371b5af0fd7054e604f1525b7d8fc00253a28317a3ddddf61897551750184d197886106ec687796e4270a9ea6bef86c7cd608d", + "nonce": "310a20009a7d1a664530eaf4", "pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739" } ], @@ -611,27 +1353,27 @@ { "exporter_context": "70736575646f72616e646f6d30", "L": 32, - "exported_value": "d6ba5a1c3992f58cc3bca9ce836c62e9462afce8165f30522f979448d8bf870e" + "exported_value": "191181ed02b2f817fa25ded3752b71d8d61c34c051c362cc283f58002974c225" }, { "exporter_context": "70736575646f72616e646f6d31", "L": 32, - "exported_value": "4fad21ed77ccfe53276cfb3b9590f503e5b9d21d71b1a68381430363819a3fb8" + "exported_value": "a623dba86c60ac34914c65563c3989592085110280b11b49b6722588fcea2d96" }, { "exporter_context": "70736575646f72616e646f6d32", "L": 32, - "exported_value": "7b72232d09bb59c6e516767e76b3973baef641336f048690cbe02c96ab03c5f1" + "exported_value": "814f7a487b3d96fcd10ee069d86a61f7acdba088617e9bec9ab5d596f8ac6655" }, { "exporter_context": "70736575646f72616e646f6d33", "L": 32, - "exported_value": "fb42df2dd53b34fd025bd781ebeeef8a63eaaa297f6e40a0a66d67c6797cd1ad" + "exported_value": "26e6a79f6556555df3c8392dbfcb8ffddb4bb0d2e7de6a2fc010f445be447056" }, { "exporter_context": "70736575646f72616e646f6d34", "L": 32, - "exported_value": "35a724c68efddb240fc6ca41c173875aa3b9394e6ec10c9288458d1f59dca60d" + "exported_value": "8f0aa253ccdab7f34efa5264fcce34e702f5e9509b54507a6446a1cb5541bda2" } ] } diff --git a/src/crypto/tls/ech.go b/src/crypto/tls/ech.go index c56642f738b..fb02197e2ba 100644 --- a/src/crypto/tls/ech.go +++ b/src/crypto/tls/ech.go @@ -149,7 +149,7 @@ func parseECHConfigList(data []byte) ([]echConfig, error) { return configs, nil } -func pickECHConfig(list []echConfig) (*echConfig, hpke.KEMSender, hpke.KDF, hpke.AEAD) { +func pickECHConfig(list []echConfig) (*echConfig, hpke.PublicKey, hpke.KDF, hpke.AEAD) { for _, ec := range list { if !validDNSName(string(ec.PublicName)) { continue @@ -166,10 +166,16 @@ func pickECHConfig(list []echConfig) (*echConfig, hpke.KEMSender, hpke.KDF, hpke if unsupportedExt { continue } - s, err := hpke.NewKEMSender(ec.KemID, ec.PublicKey) + kem, err := hpke.NewKEM(ec.KemID) if err != nil { continue } + pub, err := kem.NewPublicKey(ec.PublicKey) + if err != nil { + // This is an error in the config, but killing the connection feels + // excessive. + continue + } for _, cs := range ec.SymmetricCipherSuite { // All of the supported AEADs and KDFs are fine, rather than // imposing some sort of preference here, we just pick the first @@ -182,7 +188,7 @@ func pickECHConfig(list []echConfig) (*echConfig, hpke.KEMSender, hpke.KDF, hpke if err != nil { continue } - return &ec, s, kdf, aead + return &ec, pub, kdf, aead } } return nil, nil, nil, nil @@ -568,7 +574,12 @@ func (c *Conn) processECHClientHello(outer *clientHelloMsg, echKeys []EncryptedC if skip { continue } - echPriv, err := hpke.NewKEMRecipient(config.KemID, echKey.PrivateKey) + kem, err := hpke.NewKEM(config.KemID) + if err != nil { + c.sendAlert(alertInternalError) + return nil, nil, fmt.Errorf("tls: invalid EncryptedClientHelloKey Config KEM: %s", err) + } + echPriv, err := kem.NewPrivateKey(echKey.PrivateKey) if err != nil { c.sendAlert(alertInternalError) return nil, nil, fmt.Errorf("tls: invalid EncryptedClientHelloKey PrivateKey: %s", err)