mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
crypto/internal/hpke: add ML-KEM and hybrid KEMs, and SHAKE KDFs
Updates #75300 Change-Id: I6a6a6964fbd45420b4001f53fa79228808e4778a Reviewed-on: https://go-review.googlesource.com/c/go/+/705797 Auto-Submit: Filippo Valsorda <filippo@golang.org> Reviewed-by: Junyang Shao <shaojunyang@google.com> Reviewed-by: Daniel McCarney <daniel@binaryparadox.net> Reviewed-by: Mark Freeman <markfreeman@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
7c985a2df4
commit
e15800c0ec
7 changed files with 1454 additions and 96 deletions
|
|
@ -43,6 +43,43 @@ type Recipient struct {
|
|||
func newContext(sharedSecret []byte, kemID uint16, kdf KDF, aead AEAD, info []byte) (*context, error) {
|
||||
sid := suiteID(kemID, kdf.ID(), aead.ID())
|
||||
|
||||
if kdf.oneStage() {
|
||||
secrets := make([]byte, 0, 2+2+len(sharedSecret))
|
||||
secrets = binary.BigEndian.AppendUint16(secrets, 0) // empty psk
|
||||
secrets = binary.BigEndian.AppendUint16(secrets, uint16(len(sharedSecret)))
|
||||
secrets = append(secrets, sharedSecret...)
|
||||
|
||||
ksContext := make([]byte, 0, 1+2+2+len(info))
|
||||
ksContext = append(ksContext, 0) // mode 0
|
||||
ksContext = binary.BigEndian.AppendUint16(ksContext, 0) // empty psk_id
|
||||
ksContext = binary.BigEndian.AppendUint16(ksContext, uint16(len(info)))
|
||||
ksContext = append(ksContext, info...)
|
||||
|
||||
secret, err := kdf.labeledDerive(sid, secrets, "secret", ksContext,
|
||||
uint16(aead.keySize()+aead.nonceSize()+kdf.size()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
key := secret[:aead.keySize()]
|
||||
baseNonce := secret[aead.keySize() : aead.keySize()+aead.nonceSize()]
|
||||
expSecret := secret[aead.keySize()+aead.nonceSize():]
|
||||
|
||||
a, err := aead.aead(key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
export := func(exporterContext string, length uint16) ([]byte, error) {
|
||||
return kdf.labeledDerive(sid, expSecret, "sec", []byte(exporterContext), length)
|
||||
}
|
||||
|
||||
return &context{
|
||||
aead: a,
|
||||
suiteID: sid,
|
||||
export: export,
|
||||
baseNonce: baseNonce,
|
||||
}, nil
|
||||
}
|
||||
|
||||
pskIDHash, err := kdf.labeledExtract(sid, nil, "psk_id_hash", nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -70,7 +107,7 @@ func newContext(sharedSecret []byte, kemID uint16, kdf KDF, aead AEAD, info []by
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
expSecret, err := kdf.labeledExpand(sid, secret, "exp", ksContext, uint16(len(secret)))
|
||||
expSecret, err := kdf.labeledExpand(sid, secret, "exp", ksContext, uint16(kdf.size()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ package hpke
|
|||
import (
|
||||
"bytes"
|
||||
"crypto/ecdh"
|
||||
"crypto/mlkem"
|
||||
"crypto/mlkem/mlkemtest"
|
||||
"crypto/sha3"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
|
|
@ -26,7 +28,16 @@ func mustDecodeHex(t *testing.T, in string) []byte {
|
|||
}
|
||||
|
||||
func TestVectors(t *testing.T) {
|
||||
vectorsJSON, err := os.ReadFile("testdata/rfc9180.json")
|
||||
t.Run("rfc9180", func(t *testing.T) {
|
||||
testVectors(t, "rfc9180")
|
||||
})
|
||||
t.Run("hpke-pq", func(t *testing.T) {
|
||||
testVectors(t, "hpke-pq")
|
||||
})
|
||||
}
|
||||
|
||||
func testVectors(t *testing.T, name string) {
|
||||
vectorsJSON, err := os.ReadFile("testdata/" + name + ".json")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -41,8 +52,22 @@ func TestVectors(t *testing.T) {
|
|||
SkRm string `json:"skRm"`
|
||||
PkRm string `json:"pkRm"`
|
||||
Enc string `json:"enc"`
|
||||
Encryptions string `json:"encryptions"`
|
||||
Exports string `json:"exports"`
|
||||
Encryptions []struct {
|
||||
Aad string `json:"aad"`
|
||||
Ct string `json:"ct"`
|
||||
Nonce string `json:"nonce"`
|
||||
Pt string `json:"pt"`
|
||||
} `json:"encryptions"`
|
||||
Exports []struct {
|
||||
Context string `json:"exporter_context"`
|
||||
L int `json:"L"`
|
||||
Value string `json:"exported_value"`
|
||||
} `json:"exports"`
|
||||
|
||||
// Instead of checking in a very large rfc9180.json, we computed
|
||||
// alternative accumulated values.
|
||||
AccEncryptions string `json:"encryptions_accumulated"`
|
||||
AccExports string `json:"exports_accumulated"`
|
||||
}
|
||||
if err := json.Unmarshal(vectorsJSON, &vectors); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -88,7 +113,7 @@ func TestVectors(t *testing.T) {
|
|||
}
|
||||
|
||||
ikmE := mustDecodeHex(t, vector.IkmE)
|
||||
setupDerandomizedEncap(t, vector.KEM, ikmE)
|
||||
setupDerandomizedEncap(t, vector.KEM, ikmE, kemSender)
|
||||
|
||||
info := mustDecodeHex(t, vector.Info)
|
||||
encap, sender, err := NewSender(kemSender, kdf, aead, info)
|
||||
|
|
@ -137,20 +162,24 @@ func TestVectors(t *testing.T) {
|
|||
t.Errorf("unexpected KEM sender bytes: got %x, want %x", kemRecipient.KEMSender().Bytes(), pubKeyBytes)
|
||||
}
|
||||
|
||||
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 != 0x0020 {
|
||||
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)
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
|
||||
recipient, err := NewRecipient(encap, kemRecipient, kdf, aead, info)
|
||||
|
|
@ -158,7 +187,7 @@ func TestVectors(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if aead != ExportOnly() {
|
||||
if aead != ExportOnly() && len(vector.AccEncryptions) != 0 {
|
||||
source, sink := sha3.NewSHAKE128(), sha3.NewSHAKE128()
|
||||
for range 1000 {
|
||||
aad, plaintext := drawRandomInput(t, source), drawRandomInput(t, source)
|
||||
|
|
@ -177,10 +206,32 @@ func TestVectors(t *testing.T) {
|
|||
}
|
||||
encryptions := make([]byte, 16)
|
||||
sink.Read(encryptions)
|
||||
expectedEncryptions := mustDecodeHex(t, vector.Encryptions)
|
||||
expectedEncryptions := mustDecodeHex(t, vector.AccEncryptions)
|
||||
if !bytes.Equal(encryptions, expectedEncryptions) {
|
||||
t.Errorf("unexpected accumulated encryptions, got: %x, want %x", encryptions, expectedEncryptions)
|
||||
}
|
||||
} else if aead != ExportOnly() {
|
||||
for _, enc := range vector.Encryptions {
|
||||
aad := mustDecodeHex(t, enc.Aad)
|
||||
plaintext := mustDecodeHex(t, enc.Pt)
|
||||
expectedCiphertext := mustDecodeHex(t, enc.Ct)
|
||||
|
||||
ciphertext, err := sender.Seal(aad, plaintext)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(ciphertext, expectedCiphertext) {
|
||||
t.Errorf("unexpected ciphertext, got: %x, want %x", ciphertext, expectedCiphertext)
|
||||
}
|
||||
|
||||
got, err := recipient.Open(aad, ciphertext)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(got, plaintext) {
|
||||
t.Errorf("unexpected plaintext: got %x want %x", got, plaintext)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if _, err := sender.Seal(nil, nil); err == nil {
|
||||
t.Error("expected error from Seal with export-only AEAD")
|
||||
|
|
@ -190,28 +241,51 @@ func TestVectors(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
source, sink := sha3.NewSHAKE128(), sha3.NewSHAKE128()
|
||||
for l := range 1000 {
|
||||
context := string(drawRandomInput(t, source))
|
||||
value, err := sender.Export(context, l)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
if len(vector.AccExports) != 0 {
|
||||
source, sink := sha3.NewSHAKE128(), sha3.NewSHAKE128()
|
||||
for l := range 1000 {
|
||||
context := string(drawRandomInput(t, source))
|
||||
value, err := sender.Export(context, l)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
sink.Write(value)
|
||||
got, err := recipient.Export(context, l)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(got, value) {
|
||||
t.Errorf("recipient: unexpected exported secret: got %x want %x", got, value)
|
||||
}
|
||||
}
|
||||
sink.Write(value)
|
||||
got, err := recipient.Export(context, l)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
exports := make([]byte, 16)
|
||||
sink.Read(exports)
|
||||
expectedExports := mustDecodeHex(t, vector.AccExports)
|
||||
if !bytes.Equal(exports, expectedExports) {
|
||||
t.Errorf("unexpected accumulated exports, got: %x, want %x", exports, expectedExports)
|
||||
}
|
||||
if !bytes.Equal(got, value) {
|
||||
t.Errorf("recipient: unexpected exported secret: got %x want %x", got, value)
|
||||
} else {
|
||||
for _, exp := range vector.Exports {
|
||||
context := string(mustDecodeHex(t, exp.Context))
|
||||
expectedValue := mustDecodeHex(t, exp.Value)
|
||||
|
||||
value, err := sender.Export(context, exp.L)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(value, expectedValue) {
|
||||
t.Errorf("unexpected exported value, got: %x, want %x", value, expectedValue)
|
||||
}
|
||||
|
||||
got, err := recipient.Export(context, exp.L)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(got, value) {
|
||||
t.Errorf("recipient: unexpected exported secret: got %x want %x", got, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
exports := make([]byte, 16)
|
||||
sink.Read(exports)
|
||||
expectedExports := mustDecodeHex(t, vector.Exports)
|
||||
if !bytes.Equal(exports, expectedExports) {
|
||||
t.Errorf("unexpected accumulated exports, got: %x, want %x", exports, expectedExports)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -230,17 +304,94 @@ func drawRandomInput(t *testing.T, r io.Reader) []byte {
|
|||
return b
|
||||
}
|
||||
|
||||
func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte) {
|
||||
r, err := NewKEMRecipientFromSeed(kemID, randBytes)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testingOnlyGenerateKey = func() *ecdh.PrivateKey {
|
||||
return r.(*dhKEMRecipient).priv.(*ecdh.PrivateKey)
|
||||
}
|
||||
func setupDerandomizedEncap(t *testing.T, kemID uint16, randBytes []byte, kem KEMSender) {
|
||||
t.Cleanup(func() {
|
||||
testingOnlyGenerateKey = nil
|
||||
testingOnlyEncapsulate = nil
|
||||
})
|
||||
switch kemID {
|
||||
case dhkemP256, dhkemP384, dhkemP521, dhkemX25519:
|
||||
r, err := NewKEMRecipientFromSeed(kemID, randBytes)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testingOnlyGenerateKey = func() *ecdh.PrivateKey {
|
||||
return r.(*dhKEMRecipient).priv.(*ecdh.PrivateKey)
|
||||
}
|
||||
case mlkem768:
|
||||
pq := kem.(*mlkemSender).pq.(*mlkem.EncapsulationKey768)
|
||||
testingOnlyEncapsulate = func() ([]byte, []byte) {
|
||||
ss, ct, err := mlkemtest.Encapsulate768(pq, randBytes)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return ss, ct
|
||||
}
|
||||
case mlkem1024:
|
||||
pq := kem.(*mlkemSender).pq.(*mlkem.EncapsulationKey1024)
|
||||
testingOnlyEncapsulate = func() ([]byte, []byte) {
|
||||
ss, ct, err := mlkemtest.Encapsulate1024(pq, randBytes)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return ss, ct
|
||||
}
|
||||
case mlkem768X25519:
|
||||
pqRand, tRand := randBytes[:32], randBytes[32:]
|
||||
pq := kem.(*hybridSender).pq.(*mlkem.EncapsulationKey768)
|
||||
k, err := ecdh.X25519().NewPrivateKey(tRand)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testingOnlyGenerateKey = func() *ecdh.PrivateKey {
|
||||
return k
|
||||
}
|
||||
testingOnlyEncapsulate = func() ([]byte, []byte) {
|
||||
ss, ct, err := mlkemtest.Encapsulate768(pq, pqRand)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return ss, ct
|
||||
}
|
||||
case mlkem768P256:
|
||||
// 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)
|
||||
k, err := ecdh.P256().NewPrivateKey(tRand)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testingOnlyGenerateKey = func() *ecdh.PrivateKey {
|
||||
return k
|
||||
}
|
||||
testingOnlyEncapsulate = func() ([]byte, []byte) {
|
||||
ss, ct, err := mlkemtest.Encapsulate768(pq, pqRand)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return ss, ct
|
||||
}
|
||||
case mlkem1024P384:
|
||||
pqRand, tRand := randBytes[:32], randBytes[32:]
|
||||
pq := kem.(*hybridSender).pq.(*mlkem.EncapsulationKey1024)
|
||||
k, err := ecdh.P384().NewPrivateKey(tRand)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testingOnlyGenerateKey = func() *ecdh.PrivateKey {
|
||||
return k
|
||||
}
|
||||
testingOnlyEncapsulate = func() ([]byte, []byte) {
|
||||
ss, ct, err := mlkemtest.Encapsulate1024(pq, pqRand)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return ss, ct
|
||||
}
|
||||
default:
|
||||
t.Fatalf("unsupported KEM %04x", kemID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSingletons(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -7,8 +7,10 @@ package hpke
|
|||
import (
|
||||
"crypto/hkdf"
|
||||
"crypto/sha256"
|
||||
"crypto/sha3"
|
||||
"crypto/sha512"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"hash"
|
||||
)
|
||||
|
|
@ -17,7 +19,10 @@ import (
|
|||
// key derivation.
|
||||
type KDF interface {
|
||||
ID() uint16
|
||||
labeledExtract(sid, salt []byte, label string, inputKey []byte) ([]byte, error)
|
||||
oneStage() bool
|
||||
size() int // Nh
|
||||
labeledDerive(suiteID, inputKey []byte, label string, context []byte, length uint16) ([]byte, error)
|
||||
labeledExtract(suiteID, salt []byte, label string, inputKey []byte) ([]byte, error)
|
||||
labeledExpand(suiteID, randomKey []byte, label string, info []byte, length uint16) ([]byte, error)
|
||||
}
|
||||
|
||||
|
|
@ -33,6 +38,10 @@ func NewKDF(id uint16) (KDF, error) {
|
|||
return HKDFSHA384(), nil
|
||||
case 0x0003: // HKDF-SHA512
|
||||
return HKDFSHA512(), nil
|
||||
case 0x0010: // SHAKE128
|
||||
return SHAKE128(), nil
|
||||
case 0x0011: // SHAKE256
|
||||
return SHAKE256(), nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported KDF %04x", id)
|
||||
}
|
||||
|
|
@ -50,20 +59,33 @@ func HKDFSHA512() KDF { return hkdfSHA512 }
|
|||
type hkdfKDF struct {
|
||||
hash func() hash.Hash
|
||||
id uint16
|
||||
nH int
|
||||
}
|
||||
|
||||
var hkdfSHA256 = &hkdfKDF{hash: sha256.New, id: 0x0001}
|
||||
var hkdfSHA384 = &hkdfKDF{hash: sha512.New384, id: 0x0002}
|
||||
var hkdfSHA512 = &hkdfKDF{hash: sha512.New, id: 0x0003}
|
||||
var hkdfSHA256 = &hkdfKDF{hash: sha256.New, id: 0x0001, nH: sha256.Size}
|
||||
var hkdfSHA384 = &hkdfKDF{hash: sha512.New384, id: 0x0002, nH: sha512.Size384}
|
||||
var hkdfSHA512 = &hkdfKDF{hash: sha512.New, id: 0x0003, nH: sha512.Size}
|
||||
|
||||
func (kdf *hkdfKDF) ID() uint16 {
|
||||
return kdf.id
|
||||
}
|
||||
|
||||
func (kdf *hkdfKDF) labeledExtract(sid []byte, salt []byte, label string, inputKey []byte) ([]byte, error) {
|
||||
labeledIKM := make([]byte, 0, 7+len(sid)+len(label)+len(inputKey))
|
||||
func (kdf *hkdfKDF) size() int {
|
||||
return kdf.nH
|
||||
}
|
||||
|
||||
func (kdf *hkdfKDF) oneStage() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (kdf *hkdfKDF) labeledDerive(_, _ []byte, _ string, _ []byte, _ uint16) ([]byte, error) {
|
||||
return nil, errors.New("hpke: internal error: labeledDerive called on two-stage KDF")
|
||||
}
|
||||
|
||||
func (kdf *hkdfKDF) labeledExtract(suiteID []byte, salt []byte, label string, inputKey []byte) ([]byte, error) {
|
||||
labeledIKM := make([]byte, 0, 7+len(suiteID)+len(label)+len(inputKey))
|
||||
labeledIKM = append(labeledIKM, []byte("HPKE-v1")...)
|
||||
labeledIKM = append(labeledIKM, sid...)
|
||||
labeledIKM = append(labeledIKM, suiteID...)
|
||||
labeledIKM = append(labeledIKM, label...)
|
||||
labeledIKM = append(labeledIKM, inputKey...)
|
||||
return hkdf.Extract(kdf.hash, labeledIKM, salt)
|
||||
|
|
@ -78,3 +100,56 @@ func (kdf *hkdfKDF) labeledExpand(suiteID []byte, randomKey []byte, label string
|
|||
labeledInfo = append(labeledInfo, info...)
|
||||
return hkdf.Expand(kdf.hash, randomKey, string(labeledInfo), int(length))
|
||||
}
|
||||
|
||||
// SHAKE128 returns a SHAKE128 KDF implementation.
|
||||
func SHAKE128() KDF {
|
||||
return shake128KDF
|
||||
}
|
||||
|
||||
// SHAKE256 returns a SHAKE256 KDF implementation.
|
||||
func SHAKE256() KDF {
|
||||
return shake256KDF
|
||||
}
|
||||
|
||||
type shakeKDF struct {
|
||||
hash func() *sha3.SHAKE
|
||||
id uint16
|
||||
nH int
|
||||
}
|
||||
|
||||
var shake128KDF = &shakeKDF{hash: sha3.NewSHAKE128, id: 0x0010, nH: 32}
|
||||
var shake256KDF = &shakeKDF{hash: sha3.NewSHAKE256, id: 0x0011, nH: 64}
|
||||
|
||||
func (kdf *shakeKDF) ID() uint16 {
|
||||
return kdf.id
|
||||
}
|
||||
|
||||
func (kdf *shakeKDF) size() int {
|
||||
return kdf.nH
|
||||
}
|
||||
|
||||
func (kdf *shakeKDF) oneStage() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (kdf *shakeKDF) labeledDerive(suiteID, inputKey []byte, label string, context []byte, length uint16) ([]byte, error) {
|
||||
H := kdf.hash()
|
||||
H.Write(inputKey)
|
||||
H.Write([]byte("HPKE-v1"))
|
||||
H.Write(suiteID)
|
||||
H.Write([]byte{byte(len(label) >> 8), byte(len(label))})
|
||||
H.Write([]byte(label))
|
||||
H.Write([]byte{byte(length >> 8), byte(length)})
|
||||
H.Write(context)
|
||||
out := make([]byte, length)
|
||||
H.Read(out)
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (kdf *shakeKDF) labeledExtract(_, _ []byte, _ string, _ []byte) ([]byte, error) {
|
||||
return nil, errors.New("hpke: internal error: labeledExtract called on one-stage KDF")
|
||||
}
|
||||
|
||||
func (kdf *shakeKDF) labeledExpand(_, _ []byte, _ string, _ []byte, _ uint16) ([]byte, error) {
|
||||
return nil, errors.New("hpke: internal error: labeledExpand called on one-stage KDF")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ package hpke
|
|||
|
||||
import (
|
||||
"crypto/ecdh"
|
||||
"crypto/mlkem"
|
||||
"crypto/rand"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
|
|
@ -61,6 +62,63 @@ func NewKEMSender(id uint16, pub []byte) (KEMSender, error) {
|
|||
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")
|
||||
}
|
||||
|
|
@ -116,6 +174,20 @@ func NewKEMRecipient(id uint16, priv []byte) (KEMRecipient, error) {
|
|||
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")
|
||||
}
|
||||
|
|
@ -125,6 +197,8 @@ func NewKEMRecipient(id uint16, priv []byte) (KEMRecipient, error) {
|
|||
// 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
|
||||
|
|
@ -147,6 +221,8 @@ func NewKEMRecipientFromSeed(id uint16, seed []byte) (KEMRecipient, error) {
|
|||
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")
|
||||
}
|
||||
|
|
|
|||
381
src/crypto/internal/hpke/pq.go
Normal file
381
src/crypto/internal/hpke/pq.go
Normal file
|
|
@ -0,0 +1,381 @@
|
|||
// Copyright 2025 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package hpke
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto"
|
||||
"crypto/ecdh"
|
||||
"crypto/mlkem"
|
||||
"crypto/rand"
|
||||
"crypto/sha3"
|
||||
"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,
|
||||
label: /**/ `\./` +
|
||||
/* */ `/^\`,
|
||||
}
|
||||
|
||||
var mlkem768P256Hybrid = hybrid{
|
||||
id: mlkem768P256,
|
||||
label: "MLKEM768-P256",
|
||||
}
|
||||
|
||||
var mlkem1024P384Hybrid = hybrid{
|
||||
id: mlkem1024P384,
|
||||
label: "MLKEM1024-P384",
|
||||
}
|
||||
|
||||
type hybrid struct {
|
||||
id uint16
|
||||
label string
|
||||
}
|
||||
|
||||
func (x *hybrid) ID() uint16 {
|
||||
return x.id
|
||||
}
|
||||
|
||||
func (x *hybrid) 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))
|
||||
return h.Sum(nil)
|
||||
}
|
||||
|
||||
type hybridSender struct {
|
||||
hybrid
|
||||
t *ecdh.PublicKey
|
||||
pq crypto.Encapsulator
|
||||
}
|
||||
|
||||
// NewHybridSender returns a KEMSender 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) {
|
||||
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
|
||||
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
|
||||
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
|
||||
default:
|
||||
return nil, errors.New("unsupported curve")
|
||||
}
|
||||
}
|
||||
|
||||
func (s *hybridSender) Bytes() []byte {
|
||||
return append(s.pq.Bytes(), s.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)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
if testingOnlyGenerateKey != nil {
|
||||
skE = testingOnlyGenerateKey()
|
||||
}
|
||||
ssT, err := skE.ECDH(s.t)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
ctT := skE.PublicKey().Bytes()
|
||||
|
||||
ssPQ, ctPQ := s.pq.Encapsulate()
|
||||
if testingOnlyEncapsulate != nil {
|
||||
ssPQ, ctPQ = testingOnlyEncapsulate()
|
||||
}
|
||||
|
||||
ss := s.sharedSecret(ssPQ, ssT, ctT, s.t.Bytes())
|
||||
ct := append(ctPQ, ctT...)
|
||||
return ss, ct, nil
|
||||
}
|
||||
|
||||
type hybridRecipient struct {
|
||||
hybrid
|
||||
seed []byte // can be nil
|
||||
t ecdh.KeyExchanger
|
||||
pq crypto.Decapsulator
|
||||
}
|
||||
|
||||
// NewHybridRecipient returns a KEMRecipient implementing
|
||||
//
|
||||
// - 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.Encapsulator()
|
||||
// (either *[mlkem.EncapsulationKey768] or *[mlkem.EncapsulationKey1024]).
|
||||
func NewHybridRecipient(t ecdh.KeyExchanger, pq crypto.Decapsulator) (KEMRecipient, error) {
|
||||
return newHybridRecipient(t, pq, nil)
|
||||
}
|
||||
|
||||
func newHybridRecipientFromSeed(id uint16, priv []byte) (KEMRecipient, error) {
|
||||
if len(priv) != 32 {
|
||||
return nil, errors.New("hpke: invalid hybrid KEM secret length")
|
||||
}
|
||||
|
||||
s := sha3.NewSHAKE256()
|
||||
s.Write(priv)
|
||||
|
||||
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")
|
||||
}
|
||||
|
||||
for {
|
||||
s.Read(seedT)
|
||||
k, err := curve.NewPrivateKey(seedT)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
return newHybridRecipient(k, pq, priv)
|
||||
}
|
||||
}
|
||||
|
||||
func newHybridRecipient(t ecdh.KeyExchanger, pq crypto.Decapsulator, seed []byte) (KEMRecipient, 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
|
||||
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
|
||||
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
|
||||
default:
|
||||
return nil, errors.New("unsupported curve")
|
||||
}
|
||||
}
|
||||
|
||||
func (r *hybridRecipient) Bytes() ([]byte, error) {
|
||||
if r.seed == nil {
|
||||
return nil, errors.New("private key seed not available")
|
||||
}
|
||||
return r.seed, nil
|
||||
}
|
||||
|
||||
func (r *hybridRecipient) KEMSender() KEMSender {
|
||||
return &hybridSender{
|
||||
hybrid: r.hybrid,
|
||||
t: r.t.PublicKey(),
|
||||
pq: r.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")
|
||||
}
|
||||
ssPQ, err := r.pq.Decapsulate(ctPQ)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pub, err := r.t.Curve().NewPublicKey(ctT)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ssT, err := r.t.ECDH(pub)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ss := r.sharedSecret(ssPQ, ssT, ctT, r.t.PublicKey().Bytes())
|
||||
return ss, nil
|
||||
}
|
||||
|
||||
type mlkemSender struct {
|
||||
id uint16
|
||||
pq interface {
|
||||
Bytes() []byte
|
||||
Encapsulate() (sharedKey []byte, ciphertext []byte)
|
||||
}
|
||||
}
|
||||
|
||||
// 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) {
|
||||
switch pub.(type) {
|
||||
case *mlkem.EncapsulationKey768:
|
||||
return &mlkemSender{
|
||||
id: mlkem768,
|
||||
pq: pub,
|
||||
}, nil
|
||||
case *mlkem.EncapsulationKey1024:
|
||||
return &mlkemSender{
|
||||
id: mlkem1024,
|
||||
pq: pub,
|
||||
}, nil
|
||||
default:
|
||||
return nil, errors.New("unsupported public key type")
|
||||
}
|
||||
}
|
||||
|
||||
func (s *mlkemSender) ID() uint16 {
|
||||
return s.id
|
||||
}
|
||||
|
||||
func (s *mlkemSender) Bytes() []byte {
|
||||
return s.pq.Bytes()
|
||||
}
|
||||
|
||||
func (s *mlkemSender) encap() (sharedSecret []byte, encapPub []byte, err error) {
|
||||
ss, ct := s.pq.Encapsulate()
|
||||
if testingOnlyEncapsulate != nil {
|
||||
ss, ct = testingOnlyEncapsulate()
|
||||
}
|
||||
return ss, ct, nil
|
||||
}
|
||||
|
||||
type mlkemRecipient struct {
|
||||
id uint16
|
||||
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) {
|
||||
switch priv.Encapsulator().(type) {
|
||||
case *mlkem.EncapsulationKey768:
|
||||
return &mlkemRecipient{
|
||||
id: mlkem768,
|
||||
pq: priv,
|
||||
}, nil
|
||||
case *mlkem.EncapsulationKey1024:
|
||||
return &mlkemRecipient{
|
||||
id: mlkem1024,
|
||||
pq: priv,
|
||||
}, nil
|
||||
default:
|
||||
return nil, errors.New("unsupported public key type")
|
||||
}
|
||||
}
|
||||
|
||||
func (r *mlkemRecipient) ID() uint16 {
|
||||
return r.id
|
||||
}
|
||||
|
||||
func (r *mlkemRecipient) Bytes() ([]byte, error) {
|
||||
pq, ok := r.pq.(interface {
|
||||
Bytes() []byte
|
||||
})
|
||||
if !ok {
|
||||
return nil, errors.New("private key seed not available")
|
||||
}
|
||||
return pq.Bytes(), nil
|
||||
}
|
||||
|
||||
func (r *mlkemRecipient) KEMSender() KEMSender {
|
||||
s := &mlkemSender{
|
||||
id: r.id,
|
||||
pq: r.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)
|
||||
}
|
||||
638
src/crypto/internal/hpke/testdata/hpke-pq.json
vendored
Normal file
638
src/crypto/internal/hpke/testdata/hpke-pq.json
vendored
Normal file
|
|
@ -0,0 +1,638 @@
|
|||
[
|
||||
{
|
||||
"mode": 0,
|
||||
"kem_id": 65,
|
||||
"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",
|
||||
"encryptions": [
|
||||
{
|
||||
"aad": "436f756e742d30",
|
||||
"ct": "a528e80411b867f5a402d643632ad9fefe153b866b8ab617615d112190ecb3c3db21ef249d5e4225c24d7e4480d35b84a2b1f3aea2ccb2da6f09ed051dca23e2dae3c4f1fc004100c998",
|
||||
"nonce": "896fc9ce567f7e89bb2643ff",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d31",
|
||||
"ct": "7bbb3f19ced7f51b85d130d3b81334819ac5646fee9ce6d14372508b25ac82ad3270f390865860fea485e68c05b4e23873951c95574807aa02ab8e9837011c7f9f586a33c4d94df7e102",
|
||||
"nonce": "896fc9ce567f7e89bb2643fe",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d32",
|
||||
"ct": "75f0f2c7bf3a9819f65de53b75119695955dba83c103a143b52de8170dc0157514d5aad48c1216b5db2e12b7bd8dc0569fcb894572b2fe959827fcdeb50d02a83d5c3716d91d20316387",
|
||||
"nonce": "896fc9ce567f7e89bb2643fd",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d33",
|
||||
"ct": "f0b0db46c408a92e0315f08ce13eca26f583a578934cae10202e67661e7666b5443063464ca7077eb33cd1d33148038aec10716b5e5b08ec7685752fc1238b6225b7e7b0ae0d8bcbc8f9",
|
||||
"nonce": "896fc9ce567f7e89bb2643fc",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d34",
|
||||
"ct": "59b582fa3ac23e5c50b586634c63841fce923abb8ec1c37982491b9e8b86a23db57104f9f417f75bee066f993efe169e6129e48d828a19d9ddad96b6ef520bf1cdca1f6f411f77229d15",
|
||||
"nonce": "896fc9ce567f7e89bb2643fb",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d35",
|
||||
"ct": "9769664cbf2489c44add64b40842605e75ebad15770442dd1bac52baf2f9ca4cdd575009ac8b24f203251f708790494fae18d01d16b2e708153a98114866049f496aaa98428fd28ee9d2",
|
||||
"nonce": "896fc9ce567f7e89bb2643fa",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d36",
|
||||
"ct": "c2605ae8bee1dae7a6966e61ebbcbae00b3fc35604f838d73d252ce791bccfe93603430cfecf661eed6a9cc3b332b9eb4fc85217c1815b5d9032f942ab4343bff2330cdd222c27778066",
|
||||
"nonce": "896fc9ce567f7e89bb2643f9",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d37",
|
||||
"ct": "7547df5a5a1da0527ed91bf4d2d77d386ad1a439fa32a0b97f8fc375cda558b850fe0a01864afda6ac4f82b8a311c92924c2361ca8d30629dbb49bf43a1da2fccb690521bbe29c9f77b9",
|
||||
"nonce": "896fc9ce567f7e89bb2643f8",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d38",
|
||||
"ct": "b4ac56139288019d7003794307bc625bcfcd547bc9e598ba4461701610426223720b45311b9d97da0530b1c462cee94ba3f4114c328e0f0235f08b43e7db77ced75337c46978fbab050b",
|
||||
"nonce": "896fc9ce567f7e89bb2643f7",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d39",
|
||||
"ct": "e914628cdddc8fd20e8d57f64e844a254eaee6c9d354f507fe615acc4426fb7d6541da6f07ef19ee3d5f185b2df94f1429fc381d0626f8648b6581ce43f1407aa0e49537eb64f0c230a3",
|
||||
"nonce": "896fc9ce567f7e89bb2643f6",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
}
|
||||
],
|
||||
"exports": [
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d30",
|
||||
"L": 32,
|
||||
"exported_value": "d96f8c466d898f2ca6bade6a9f822be8462c25361901d6e6dcc605c3f2edcc68"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d31",
|
||||
"L": 32,
|
||||
"exported_value": "65c028731764853dafe2c6d618ac5095a51f38357d5da2112eb56a262dec4207"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d32",
|
||||
"L": 32,
|
||||
"exported_value": "8769dd7841608eb74ac225c26d3a679206560b39c026215fb0c58e7f7799d128"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d33",
|
||||
"L": 32,
|
||||
"exported_value": "bdf53fdf4293691df6466a552a7362594fb3079dec5d96d61e042b6c65d5fea4"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d34",
|
||||
"L": 32,
|
||||
"exported_value": "b5ff8063e2b780d0c4e0515f0896f20f93ae718e4839b7004222311647ec05da"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
"kem_id": 66,
|
||||
"kdf_id": 2,
|
||||
"aead_id": 2,
|
||||
"info": "34663634363532303666366532303631323034373732363536333639363136653230353537323665",
|
||||
"ikmE": "5ac85a9de23bd722b5c4a911c8c1f4975f88e99194f2ab32cb57750c9bef9aa7",
|
||||
"ikmR": "da5a763616bc648737f70603d7d3ab8b929ce9ed0995d0c0d9f39efa4aab66cf2d06ec924a2c741cdedb300298bd1e39612565acd549b913619a5a72acc22c50",
|
||||
"skRm": "56d697706ceec890914e66a0ac107c7ec076fa26a60578c292ac8bb3282496e24c16df79e667ea353059628b9090e809620849d256e79ae18aa2bf310ccf041b",
|
||||
"pkRm": "a22aa0ebdc60550c5722c48ac7584bc30a1b5c0aa490c1211a52067db326077a7a8c334b7446931a781793fc64f84647aef35cf349bed7ba3fac8336708054151c1da5bb9a3e56a4d5829435006afaf5cf7829ccca2a1c2c621a82406540660839e5b0f5112533c0cbe5763a96a332c4244d1bdc3a875267f3b88a50e6272f8c9b834a17ea86a6029a9ad1e84fd06144e9ea99ae7b0051325d1a495853743592750ca0ac8ad88ba6a6934815754a6869bc5b55cfbec1cada508d02f81b4721a8eb4a9d20a75eb98c60745990a06124a14b75e7da4438f63276c4ae4e0717200619ccd515485b472e097822f61ea757877544c5b8547d86a457df0a577d0379d3593927e23b864802393538c5e3621302a425510a712026293064a767866bf99b8fc04f5fb31058aa2260f1bf3b9ac61a52ac27b4b42d0168aba143b5d7ca38fc6d98a91ac6652b5740a1eb2332ac728e01053f48123dbb44ce82b26b97453b23199c957bcdcdd86758995579f3807d102cfa39096ac505d545bd03d25175722f20aa32ce5849b878cb7d210e375ab269713c61856139d4bf95bbc519e858fb87551bb73a58b29afe5c82d5448047885af0f72006089db4e885a45b5ed2f3030188040c14986dcc54f7b90d64733869c9221da827dbdc80be1482144a5a27f90deb32c5f202b95624b75a6927855a5a2137736e0c086bf52257458c34900fa61c85cd416c135a3534a245ac2abf99094891e1cb00d21a3319abd99c598a3190f388bee25b2e0042448fa57475e90483018616e95ddc09b5d1762aaf2b0bc9348f3d4b9ad288a44a28960c22009866532c22ca086b74b308b42616b37fc9bea8a882cdb9ab28190b02e24c5bfcb732b0a959c26cf577adf2374e1e4205243742476b76333186f164bee8a91c3b02ce0af83706121fdfc2aeff28abebf12381d9bcc2ea01a34c7bfca7285eb614f1daae31a15f7cec8d5785270f7729ad3a5dcae399b55ba5552a18fc3c264d2b56b578b0d8c13f002d0d96d2c119c06fd66899dca8729e31433d681314aabaa452544454279afa0bfe0b99fa6801075b2d05962e83200933f576a63b5d2113cef27749c4f5c329fc2162592425a404965a10731a055b1374f62637b3085b16f3343b8a5dfe20cf7ab07ae803cccea8630563a685699036443aa0dc29a60c692307a7dd639570395734bc47733b60f33a466879707a785f31977e7574a2a22bc7ea5b598974c441971d7ff1a9eeaca97b452a9f231b065aa9e392b64619bcf1e021f1089a68ec653f78596d1c606627b6b61ab5638999b59cc25f703c0eec66c97037f9ac56d004c24d997d43ab452622bd35c035d2563e292cc4ad8caefbba3efa7b3fdf253f323b2d2558906ef265e0548a66c192bc8959700534f0044ccacac3cdf157ab0943e67cc9be783c08d24bf6894362c8cfef356552db7dc34226383796df28ce37f3194aa1137666b089e383ccac8380d3717f29215d400a2ed0a0382528bbbb9edd1164af77325130a2b5296e496c31cf27acf601ae612cc4733bb24e295136123bebcbb35a75806142a2aae79f07579e1c8b306882593f0508ef070ff779195c2b6784712b877c2f3346a154f19244bb250aba415c69ab7a67448470c650619b4203c7f4e4112719368f37224bdacd1afcbcf2548f58c50265b3c3c8456187fb2397e63bc09bac9ba459dcc85b6ea22542872a42aaa7e4c2c9a4e4277b8495dce117ade7289ba19206894405a8110f77267265af32627fb5079853e3158b36ad1a408b658995c8042d0bb3cbfd830c76db1eca171fc0550e2e56170aab216fe82e36b77f228b24a9ca09641b2a8eba4f2120825169498b353fcbe5534d48caa8472cf31830c497b7b7091011c06d52f25c61694519ab228af101b8f1b59f5ab5502a7a0574b93ad66c180715d5ab7104a57ee5f35c3c72c0a2bb30f2a6177f402159985104948524d7cc528ac63ed7847528c1dbf3c8dbf4c8c6f67912d35c276c3c51e1b8d64590f0eb3dd1444452591b6c93126decad85f568cf341323fb3958556bbd026091317453a7c381e1403fa7be94486ada15c19990b1425c479b598c9f311efab8c0fca7c8b4bab41833868e85a6bea677d583491f10cb8ad4b98cf51be5f73975f56ff38163bfd930538964dbf2bcffc581743939e7b5c2171c16cab15d1f0fc4184fba5cace63540",
|
||||
"enc": "b7099c523430e417d0bff82a8db4a963de8f70e67e813e0c334b7872005cd1fb474fb3bde363a4b8750a8335b6d030fef40ead3d57dd85b0ce41871c8989ec3663d3f51b5cffcc1767aa5671b84a1827a016d2731fc63744bbc3c2894995fac6829aced81598dfa717310f73a8582eca07bee0bcecfcad56976b81695fcc9ffd99f4d29844811301f8fc29977a6c6b5668b97230d59713c3285b6d08f8e8ebba31eec2210ebccecadcda0bc06521f9df4e64c8a0c7de32bca435fc9c95671ee86f6fb54d420589144d3100cee738fd8bf7abfe3ab4d4186011ad72aeae7f371bc25b303d19187da1de766eb0e18dc6829343f8666da82dda8c2fb63fef7c5e86132a129bf1313bf70573c71140f4f2dba670dbc3b3b8cf9b80c729d8afa48b23054970b3f737accde03c5f1a7d49c48f58e484257c8a12287554a4866c6de7a21761692ec4a77761f8f6c23a4e7824299bdaa8eff065f962d2dad24350092a1c92707eff38d031002cb00d92b8cd8392ba397abc5d923fe770625dbc73fc125e544cb2e5b4faf61b64e3ae30cee7447534e472d148113c60326e5233f87aef9b5ca30c9672aa3f2054f2fb2f1370725ef69f92d50fec117cfa2d11f9e5ec6021f54f69cc2e0cbff33a63c589e1bbbdfe496633514aed270e46dfa1d55efcadb1217a72502c88eaa611d610bdd81f3057d6db3c303b709e3511793986ce1ac427422d7547050f0920ddae7015fa1b76332a4a3f09c1447a013eeb8babc0a71b911efadac8f46b560027cb327297ed5fe05911e33aef6928b34f408f141c9256f2b4f1340d882ad5cf2e234cf5236dea7425a0d7c0e37029b7ddb0bc3be1bdb12914b4b0572ec16f6ccedffd05565a1b9793656bfe7c95630b8dacb624127961d3892b3c93873ba0928f5a7651a3baa1ba14ea83e1c1e4cfeb429167b151408ecbb5023330bfc557444af092888b1148471780c4671d5b8da43686891b979a1dd9a30461919c7e08ee5195e4523c2f378a0c4fd32b29ceb7080d1afbd7e5bb93602a1f3b0699ca7516e6121926c37b245497ab1722e989a251fc36511595537561391cbb0370f7365d76b7ff1e7f27caeb7c9c0962cf4ba7217ab8ba83a60a433ccc0d453179d0d77554d208e3188f8fd659dd3057dd9020635319a7f6b60011411b24cca3b5f2d25580bb4f12c586cff2664bf06c6d424217ed398e4791ed74d9830dabe9a9940035515a73e418028fa43f38df5e727165912da360a25a945b698fd23f58a31ac36149b98082bcb79c9253553c47341fd43d8d795b219e2de4ca760dd640028a3f38cb21ab2d5eddfd22c6d569e7cdf460cb7438168e11db35c662f7291ba549a64dddfd8bc8c90fc598a9e1df0940d1bbf1c5052a040eb2ebbde2cd165cc6bc9e011809795583b6bc0e6009bff39d5aecd49dfb2c4dac65cd98ed63451703c8fd8a4b809fc26e3265fac02c823b3750a23c6339be5e2e84c9ae49c3d19f3457cbdaf43b3842bd85405ac6417fb590ccbdf27a732bb8a9bf6867ad1fb8353d8e5e5b12ea879b5bc7b2943135bd5beff394a32fe0b24da0f8e8dce706a869d57d2a03371cd561a0c6fba8167a85931708ecd689bfb9caa20e2cfcdea6b34120ae5123f26e3e0a239e3fdf76102746d997fdc88c8281b15c57960d2f1208dae907f2504dde545d7451e5df181f8c1a033988f21a2da4ef428c694c20afc315faa53fdef729a770f7c0f00fd5f490e9b1ebf980175a7dfcdee1fa2942286ddebdb3c875fbdd5a78ae2699f6783be85a8bd2ad87f53a74a71c49038b477cdc4df7e83d52c8f5b3fe8b291e9f156f34586734b6c4222dcc6e6612bbc4abb8c71fc2b035c5d0d46079daefd23479fcd87d72ee4a680f2716940a9804eee01d741f3c528c5177ea798c7ae62534840e5216dd6710e177c0903800fb515e9df5268a5656564e79d9e6caf26f2cb1c265112b8c7ac29f02d555c73fa6ab47df3eafe53f2ccf617b79552fd993ea7cdde25c78878284fc03424b8148b554d67dd0050d917ecdd859f46025db2745c54402a3754d7255b545ac36b7bbe17da1bffd0202aa2827227453bbcf6346ac63e256e7ed4a2a1026fec041cc4b3105cc5b46da08f66ec2ee04252dc3edfd2d1fb50075ac14dd6a24bed6484b3f8ba0a57e199afaa31953e4e836fe8b57db60d66ea7f5180d48aa1cc2194a6f9f4ab078",
|
||||
"shared_secret": "0ad25b2cb0a13c15fd7f38e95b9337974d37adab6ab17055b7219429802456ca",
|
||||
"suite_id": "48504b45004200020002",
|
||||
"key": "df187c96fd7fc267cba306a5db99ade447d19a156e68c45121b3297e6b95c0a8",
|
||||
"base_nonce": "3401a104441f298afddaeb69",
|
||||
"exporter_secret": "93a466268ad865d2b8040c22f3bb55e27d799fa257eff50a2bd4b6237e82591d39303428a4d899f4b3e00fa520f53423",
|
||||
"encryptions": [
|
||||
{
|
||||
"aad": "436f756e742d30",
|
||||
"ct": "bb1268ed759b7890fbaaed0f29ffeba3e928f3ed2096479247a411e0cb791d881377f8aa7bbdaeda53ad627247d7747bebcf14b4d68155fec97bb94ab10dda603d1308484a12cd7e7375",
|
||||
"nonce": "3401a104441f298afddaeb69",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d31",
|
||||
"ct": "92616ae85b319e95d0bb9ca8deff125721ef8829190f8a03d104815fbba87e836fae86a03befc39a58bf496dafa5a9b228ca38071fa99f97acf3950f3c751087bdf74e5004b8aa625b84",
|
||||
"nonce": "3401a104441f298afddaeb68",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d32",
|
||||
"ct": "df950e1658465a3fe455485019c29a043b4a62165974dd79d681ecdf9a2b60211dcebbedf5892a8c15635fd1e09b8000d3b31cb316ef0fa9b2208512d3c2ce03029d206f1a54a0635303",
|
||||
"nonce": "3401a104441f298afddaeb6b",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d33",
|
||||
"ct": "7640b32f733b954627bb61eff09b72fa8d9f2f236f2760b6f06d557c05344bd843065251e8bea02f083828508317a630de7691e5557efc8a812339457a50c688597b0799c111f700f51c",
|
||||
"nonce": "3401a104441f298afddaeb6a",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d34",
|
||||
"ct": "98ddf0ca606c5fe033dac03568540402bc44297ef9bc108ed2a27ccf679f797c91218319d06e45343a62dc4e583328befe7f056c1adc1efbb2ea6a0931d1488732a170f190fad0f60a8f",
|
||||
"nonce": "3401a104441f298afddaeb6d",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d35",
|
||||
"ct": "ac9dbe13826580356e28837dd00b7b9da6c2b475507c681a41056c453ff1bda3f8cb2d1926609125d7bf3f7c04fe8379e54af3aa8ad4184e0137d106d85c5d8af19046c951e3b9ea242d",
|
||||
"nonce": "3401a104441f298afddaeb6c",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d36",
|
||||
"ct": "cf5da78fc372b29dc102662d1cf2ed8ecd625270b674f1abfdc53debcd27ab758aa68e546c465e30c9f5d4bbbcb0c130b22ee14a38d63f95ecaac847c888ba7c750306080d6187d25bc7",
|
||||
"nonce": "3401a104441f298afddaeb6f",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d37",
|
||||
"ct": "b544c40c3f66e184a8cc44a272735c9f37beba15fc33080de34e11d8a43473fe3c7eeefecd1a1affc8bba249fa56cfdaaa51ad289fdd857d54198e11be1a47e71dbad06486e1611251c4",
|
||||
"nonce": "3401a104441f298afddaeb6e",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d38",
|
||||
"ct": "190253666333e9391b89793d2456745a6a2a00b2765423867a5eb5cd4f8fb73e5b50e7770ca9bd700c3bc050b1aac79bcfe2819acc0c077dd867a743dfb0eba8fd215ef890d233faa03d",
|
||||
"nonce": "3401a104441f298afddaeb61",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d39",
|
||||
"ct": "e3a0080712ea8928467228004cc5131dda33d797919511b42b2875e36bc82cb7529a188d87b76e8031674fc260d61b013363be8f9a8db54a42f356a4a822c99fd317e5627fe2f75f249e",
|
||||
"nonce": "3401a104441f298afddaeb60",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
}
|
||||
],
|
||||
"exports": [
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d30",
|
||||
"L": 32,
|
||||
"exported_value": "26526de717a23744ad90e10de8112326315f1f0bbfde33fa226661d4bf05b655"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d31",
|
||||
"L": 32,
|
||||
"exported_value": "e76fa74cb51cbd50e2a3467112cfa7e4d1103bc18d5b2c5da134fe25bf8acafe"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d32",
|
||||
"L": 32,
|
||||
"exported_value": "2acb3471805b3dae2b3b437a77a16cf7d67ce1ea54b1cc2dd8e5e09c87fc5bfd"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d33",
|
||||
"L": 32,
|
||||
"exported_value": "fc0a2f1113ed4ab05245f0380a1f8615eacdb5b1110137383a39b32190acf27a"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d34",
|
||||
"L": 32,
|
||||
"exported_value": "9a306efa9d08911ed064ab514285c6b1e1088e3e6dbe375596bba2b417d637f5"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
"kem_id": 80,
|
||||
"kdf_id": 17,
|
||||
"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",
|
||||
"encryptions": [
|
||||
{
|
||||
"aad": "436f756e742d30",
|
||||
"ct": "40d6dfc211d77a7ad9cd421691fecfb6925a56cb211f765e9594a22ff4647688b8b45cf04a98895f875ce7d56723317eb5dcd367af4b9e05e053ce57cfb265b568546f7d982901638e96",
|
||||
"nonce": "535e5f6ed092bf955da90e52",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d31",
|
||||
"ct": "7d1658f44cc3b26761a1323078899bbd5127d23d455e30d684715e8e6b894cc527eb54f5967dfadabed103dcf44916193c7eadc90447d1a6c1e1517188bc2d7ee8c773676f1d74d4ff8f",
|
||||
"nonce": "535e5f6ed092bf955da90e53",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d32",
|
||||
"ct": "44636ae22b39958ff640f12f7009a44eb26bf79325f8e9b8e87b297d061e36e9bcc4432429b2f43810f11c94976200b3aa99add9d339482acd02d86b27ec446270d17a68d01484f7f6a3",
|
||||
"nonce": "535e5f6ed092bf955da90e50",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d33",
|
||||
"ct": "06829434b50306244675419ae1746e9d5c726ab1d86a2308480d5fbab39cb5ceb57d3f83af56babd8e246df938dec8f7d4726ec15cd1468571f437a10b6605282b2e8d66f50cf4085190",
|
||||
"nonce": "535e5f6ed092bf955da90e51",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d34",
|
||||
"ct": "470cd4784977ed4c298a36a0c4888de0100d0d6ddb18ba72413643177fa594cd00abe0678f3db55ebc960010f50223f6d57891002418a2cb145d3159ab221bcdbc877351157b17c93d84",
|
||||
"nonce": "535e5f6ed092bf955da90e56",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d35",
|
||||
"ct": "999e8dae91dea10bef184db2b1a29c332d6037a4d11723a16bf934c07443bcd46a80235b98f2dda928814c899fd7f021d4203aed68618cd3ba34897b558bb877bb48f7c9f1747e372539",
|
||||
"nonce": "535e5f6ed092bf955da90e57",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d36",
|
||||
"ct": "f03c097d73b0f95b0b9ecbbc5633bb1a8722fd33bee91d6411fa68fa0d0d295a1232d7547b76fcd6f3fd27fc44df32b4a7bb0c9063989c7ea1694bd977bd6f462d3e636297ffc094a686",
|
||||
"nonce": "535e5f6ed092bf955da90e54",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d37",
|
||||
"ct": "b57891837a0b62f0c53f3c38f996d952b63f36a796e929031d619bc047ce1afdde543900f0d6561def958bc0855e67562bef2bb462e799881ef84902b0f62b19188595ac1b8d20759f22",
|
||||
"nonce": "535e5f6ed092bf955da90e55",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d38",
|
||||
"ct": "61bd50f7df22c75355c79aa20ac2b0d3fe27e25612ad42071cb4fe4d5f31d256d88531a82fa5fdb989d2e41666f12b6d54abe812ca00b5fe3a869a5625df55d0ebb5c48bc0432d3d3e5d",
|
||||
"nonce": "535e5f6ed092bf955da90e5a",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d39",
|
||||
"ct": "7abd8b3590ecc2115c5996dfe8bc00f9b289424f071450b331b6c9ff78b8e3a9c2fe3bdea864e75baf285028f069f2e2300febbffd5198daa5651009c3e6b6a01ee13991f47af15efe5f",
|
||||
"nonce": "535e5f6ed092bf955da90e5b",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
}
|
||||
],
|
||||
"exports": [
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d30",
|
||||
"L": 32,
|
||||
"exported_value": "bc3aaabca761d05f3be31de4f85747d6831d19138f31c357b31a88f3ac2cc296"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d31",
|
||||
"L": 32,
|
||||
"exported_value": "daa6b816eb25b8a9343ec9eec59531c362431d63ad310bb69b0108c5705eaafa"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d32",
|
||||
"L": 32,
|
||||
"exported_value": "19b1bd8610b8f6c2cdde347fb373cc0c841aef21c4c6ef2820503fd41998e26d"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d33",
|
||||
"L": 32,
|
||||
"exported_value": "ef585e5fa605bad40051756d04e13e99db4dfcf2dcba2372c40f00b842e54eaf"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d34",
|
||||
"L": 32,
|
||||
"exported_value": "074a94a2611786c8617d25d4426ebb36c480b4c6ce943d8842609b5860b21756"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
"kem_id": 25722,
|
||||
"kdf_id": 1,
|
||||
"aead_id": 1,
|
||||
"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",
|
||||
"encryptions": [
|
||||
{
|
||||
"aad": "436f756e742d30",
|
||||
"ct": "a9b7028bc9d12cdd33127ee5a0de9c4fd8d36c411cf5c63ac38ed37900fef8de1afa3506ad658d0573b8f89a259aa2cca779aff745fc374bf5d5d04c4f281db21ee297a61718387b1458",
|
||||
"nonce": "b60df75f9078b7eab806c8eb",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d31",
|
||||
"ct": "dba3473ccb66773187dfb56dd7813f5547f48cb63585705b593a5bf28a665b983b55c61af779ea842b12c687dad7800f2a92c87b42bb6f306d73698dcfd41a03ee071889889936107c26",
|
||||
"nonce": "b60df75f9078b7eab806c8ea",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d32",
|
||||
"ct": "7327a3add4c16fbde5bbcd14a5ae7508442864cbd8f656f850accae7d5d69d6020f936a592687880e10602acd95c0a0ef9edf0ae9f64ae0eebe13fa1936aff4d02eab42c769ae62fe7c2",
|
||||
"nonce": "b60df75f9078b7eab806c8e9",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d33",
|
||||
"ct": "28340dc8531e75ce8cdf1452c6034fa2a0db03165625a1d9dafe761453084f3590f256acea06c3df6043acf204c27ead2d0d37d2f16b3d42f714e614d01e9fe08e03c99f4d1a023bf9b8",
|
||||
"nonce": "b60df75f9078b7eab806c8e8",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d34",
|
||||
"ct": "bfdc54e46d9a2853a17c0262139dff433c01020220a05c38abe88870b1085c7e05234a188850a9d6039ef02342f7285a104574f87d8dd2edc96694d502274a658f574032dc5331cba567",
|
||||
"nonce": "b60df75f9078b7eab806c8ef",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d35",
|
||||
"ct": "c27b8b3c613a0057a76ea5503039c7eb24f5977a5f495323f942b42b7bc7a242b1a78cf900f09ab07620dc8f7d6be51b71a9b066d7d5cb909dde2712ca7ab745a21c28eb53e9296e43e9",
|
||||
"nonce": "b60df75f9078b7eab806c8ee",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d36",
|
||||
"ct": "d51c1fc59a0d7f7c435826acaff003b653595ee92d5ca9a562896b8248ad7beafa3bc439877734803edb26363a66d4199f461f6629062523b4df903b2075aad8500ed760ea17266edb00",
|
||||
"nonce": "b60df75f9078b7eab806c8ed",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d37",
|
||||
"ct": "e8cae014eff23a9e02fb2596d80e1492b857893be704cd273d9bcaa08b3bb9e15abcb84e1f5626118ac03d31bff1f146c15d65151894779b2625f010c37c32ee8a0cd9744e18b826f22c",
|
||||
"nonce": "b60df75f9078b7eab806c8ec",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d38",
|
||||
"ct": "8dee97a2d01eeaef514eb4e114825446668b2c1c4fc53d7dff0fe9cc2199abe3e40869b9be88c4e364a30fa6745108b401ec68f6a75279e042393f826bb012e61a32a63f1afe3f434e62",
|
||||
"nonce": "b60df75f9078b7eab806c8e3",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d39",
|
||||
"ct": "ea183fe12b40cb62cac4544e4e8adb14f14dee9c353c70b5dd1c1480b42fa574c1a1fe31f5606c5898e25eecc12fe6c09ac4ce506ee19f14f7da44551d0dc398d66a51437356fb250a50",
|
||||
"nonce": "b60df75f9078b7eab806c8e2",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
}
|
||||
],
|
||||
"exports": [
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d30",
|
||||
"L": 32,
|
||||
"exported_value": "239da4511fcb87285e0563603b3e2d060f2665e85896c746e906d16c3d6ef369"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d31",
|
||||
"L": 32,
|
||||
"exported_value": "a6bbde3c782f758e4cb3e9d5de727e45bd3a7c70c58e2d1b6c5c00cc9da5eed5"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d32",
|
||||
"L": 32,
|
||||
"exported_value": "d707baab60840604f673106061d493d3d388d58b36f72070a2d3f7aae6522111"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d33",
|
||||
"L": 32,
|
||||
"exported_value": "ab77be17ca98b4472214b1b585093bbcf0d5fc96aabaa2c3f346d97b4cb87760"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d34",
|
||||
"L": 32,
|
||||
"exported_value": "2b0b4d76a2b544f195900a697a13e0e2110fbb2ae961cd2cff98ba70f7828f0a"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
"kem_id": 25722,
|
||||
"kdf_id": 17,
|
||||
"aead_id": 1,
|
||||
"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",
|
||||
"encryptions": [
|
||||
{
|
||||
"aad": "436f756e742d30",
|
||||
"ct": "97a37c4fd15c9387cf793391eae5c8636571a70d6bf1e09c4b2ae898650212f8d1ff2f2e7a3c3cd30b74c5c17e114ec8d1d9517e756ca0c3e68d9b50f52452ca1fc3abb2227880f6770e",
|
||||
"nonce": "4ae85eb7577b1ab56c757317",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d31",
|
||||
"ct": "e2ebae829149550853104d9c46455acbb77cdcf31f951ce7ea89b353563272ee27d8acaa181b05f3806076cf43423d0d5dc3c1f8fbedd5031831c40ea4870cc6a106ffb3c6114935b57f",
|
||||
"nonce": "4ae85eb7577b1ab56c757316",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d32",
|
||||
"ct": "04521a1743333166c14efc5979189d9e74377a9c25fa224c05c30bf240abb9d317c84bff1fd14fb8ca5d3f6cc310540599145e3b9420b9341d08e85d9d7480a2ecc6ab750360ed9a7a0c",
|
||||
"nonce": "4ae85eb7577b1ab56c757315",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d33",
|
||||
"ct": "bceead76246fdeaf5cc3651f049ebd568a1bf3979ffa2cabde915d9747bc54d8cae2149320a5ef105e87317304155a4c8eb68828e3c19092e7aaa9b1b058ccf26496daf76c23acd6fec9",
|
||||
"nonce": "4ae85eb7577b1ab56c757314",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d34",
|
||||
"ct": "5ff46afd73de34d2e9ed5c763ace14f12d92801cbac9945f34b00c3fde0ed97f870d74397db8eba4a9595420ca0f6932970e378477260f050360dca0d0fe41f0ec690b3b33e17b12f2a4",
|
||||
"nonce": "4ae85eb7577b1ab56c757313",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d35",
|
||||
"ct": "ffa02d26fa38e869e49d71c2e25386a12944f7c1bf407666f3950b082c941a80c40d2d3bd49bf2da0498459b0c97f4134d30df9bea8c705c6865f3550f8da3174ec48e0a1ab528226eb3",
|
||||
"nonce": "4ae85eb7577b1ab56c757312",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d36",
|
||||
"ct": "7e7a02e21cd86621a008b57bde67a0e427a7d476fddfd2cc7b0455db0a38e34165c0a8236da67977486152258b2b56a4272c72e4baec4b7af8c7dd05490bb72bca75be39092d1e4c1e1e",
|
||||
"nonce": "4ae85eb7577b1ab56c757311",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d37",
|
||||
"ct": "d0a640866482db3e3a62e163e0bdc5844d37e80e41bc6bb4012914414a471f0eae9f7b371e77915d1e543874170b91dfe0d378d658168b60b7ac3753fbd31115eaf198355d4301d55948",
|
||||
"nonce": "4ae85eb7577b1ab56c757310",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d38",
|
||||
"ct": "0bf80745bfbd1630afa96276625959ecdb0629b4b810f21a8542f4b9fd778f8617d4dab98acf5d5d169dd09493af30862592c46656e51243e76746b5ae59cc814387ffd303fa4cfedd26",
|
||||
"nonce": "4ae85eb7577b1ab56c75731f",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d39",
|
||||
"ct": "56ceb7e69ebd45f1d7aba90aa0a5d1dfa6573424323738479d9760c13b45aec2328532d6c8ca011778bdaa68d403424a3836337140c08e1400cd3fe60d5855b8a7c2d3bd9041e87312c1",
|
||||
"nonce": "4ae85eb7577b1ab56c75731e",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
}
|
||||
],
|
||||
"exports": [
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d30",
|
||||
"L": 32,
|
||||
"exported_value": "f1a6a14d06c8876730951121f16029dec150ba5564b4e9c524b1f4e422010395"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d31",
|
||||
"L": 32,
|
||||
"exported_value": "04569a0a0288becbfc45d125db3c0db19a991ef75594835c4fa9e51b114e26e9"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d32",
|
||||
"L": 32,
|
||||
"exported_value": "3e769c28ffa998adc600aba15209bd4a4e821c89f1f463d771e1160f5088b467"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d33",
|
||||
"L": 32,
|
||||
"exported_value": "2a84eefbb0781cd1c5356ead3d81993480de5a4fc6c863e5efb18dcbcf1c7192"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d34",
|
||||
"L": 32,
|
||||
"exported_value": "28b7fb014cb2923046199b165e0f9e8bacfd20e09c0504076a172ab456a673c6"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
"kem_id": 81,
|
||||
"kdf_id": 17,
|
||||
"aead_id": 2,
|
||||
"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",
|
||||
"encryptions": [
|
||||
{
|
||||
"aad": "436f756e742d30",
|
||||
"ct": "410dcea19546fdc4cfa359f9e4b4dfb859cde8cf7af003ecc7b61061afab4ae0e43e8ef07433c2ea2e5cb20147c046728581ca20a684db53a3f4e1ddd5eb2d44e6396ac47b419e6768a5",
|
||||
"nonce": "c7a89d334c2e8194b1edad21",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d31",
|
||||
"ct": "7ccc492ce2125ef52f1875b160c450989014f4567af950438859b26ab05805ca8ae2cd12b51402b7f937d0a7cfb4349fc0b8b4607e1e9c02dc602dfea7a071f9922b8ac2d4c5c2d20cc1",
|
||||
"nonce": "c7a89d334c2e8194b1edad20",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d32",
|
||||
"ct": "5b22a7e3c32b848138f11622bb893dd11202c1b2db8b70de9f3e1b4e6cc7a9bdfa4542a880e9fc4a7d19b7925e7ee043694004e1fbcaab4bde276ddf984fcb0c44579f88924c7ef74916",
|
||||
"nonce": "c7a89d334c2e8194b1edad23",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d33",
|
||||
"ct": "2bb5cce87da64992882e5bd58db01a12b3de62e6079c6dc62c344c693ace32d0c11ba3e318d0e5a615b186b6480ef6c745e1c2cdabc18bdb05406a96487bb8a8a2d4d2c77649e03bae52",
|
||||
"nonce": "c7a89d334c2e8194b1edad22",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d34",
|
||||
"ct": "9b1e917752238902934705ac099cb5d508f25d1c710a0a415f69e28423f17293c4c62c52ebbb687dd76e12865ba45f3ea3ee3bae56a25d4620419633792cf49f957e83f9934d043970ee",
|
||||
"nonce": "c7a89d334c2e8194b1edad25",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d35",
|
||||
"ct": "9b469ab7109daf41eca2f2b9d04d8f8c392f352308414ecf2acf372ba82992eea0f033b79b654760ee8438fe88aeae648997bebe65572aca5c00ac18a3ea035cd88ebe1e93bf0508abca",
|
||||
"nonce": "c7a89d334c2e8194b1edad24",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d36",
|
||||
"ct": "8097e7e9f7b7019d6c334e5ccb3978404c834b98da3cda5eb2483f381721740413b2619bc19e731118c07b1d9b28e3ccfacd2b4dccd3f46d60db4f0d741015a77515c7d8d18c7d0bb299",
|
||||
"nonce": "c7a89d334c2e8194b1edad27",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d37",
|
||||
"ct": "6b393e65a6010cd6061faea22305f459d42a5d2785f11c5ac9aaa270ff14fe67221dfea5dde617fc06d0be00210ea7c6ac6b3580ef915f96f08ccfe27d4081e358657d1cb503a44fda7c",
|
||||
"nonce": "c7a89d334c2e8194b1edad26",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d38",
|
||||
"ct": "ead159c52f1ddac389f2de62da67f145aa249a3ae2de28a9b6967b6ca33735c04d5765d44ad9b569feb34dbd83d3a761cb33d324d7e977da23f3012769cf78a0a873f6251773553c0997",
|
||||
"nonce": "c7a89d334c2e8194b1edad29",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
},
|
||||
{
|
||||
"aad": "436f756e742d39",
|
||||
"ct": "3d365582e95091eb2ff61f349bf07625f8427f73082b5fadc11fb07cadce97623d3df5798bae06e21e00b770660baff684780b97bf2e42880f5693d878decc6d365711af656f355077c3",
|
||||
"nonce": "c7a89d334c2e8194b1edad28",
|
||||
"pt": "34323635363137353734373932303639373332303734373237353734363832633230373437323735373436383230363236353631373537343739"
|
||||
}
|
||||
],
|
||||
"exports": [
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d30",
|
||||
"L": 32,
|
||||
"exported_value": "d6ba5a1c3992f58cc3bca9ce836c62e9462afce8165f30522f979448d8bf870e"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d31",
|
||||
"L": 32,
|
||||
"exported_value": "4fad21ed77ccfe53276cfb3b9590f503e5b9d21d71b1a68381430363819a3fb8"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d32",
|
||||
"L": 32,
|
||||
"exported_value": "7b72232d09bb59c6e516767e76b3973baef641336f048690cbe02c96ab03c5f1"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d33",
|
||||
"L": 32,
|
||||
"exported_value": "fb42df2dd53b34fd025bd781ebeeef8a63eaaa297f6e40a0a66d67c6797cd1ad"
|
||||
},
|
||||
{
|
||||
"exporter_context": "70736575646f72616e646f6d34",
|
||||
"L": 32,
|
||||
"exported_value": "35a724c68efddb240fc6ca41c173875aa3b9394e6ec10c9288458d1f59dca60d"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
84
src/crypto/internal/hpke/testdata/rfc9180.json
vendored
84
src/crypto/internal/hpke/testdata/rfc9180.json
vendored
|
|
@ -10,8 +10,8 @@
|
|||
"skRm": "4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8",
|
||||
"pkRm": "3948cfe0ad1ddb695d780e59077195da6c56506b027329794ab02bca80815c4d",
|
||||
"enc": "37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431",
|
||||
"encryptions": "dcabb32ad8e8acea785275323395abd0",
|
||||
"exports": "45db490fc51c86ba46cca1217f66a75e"
|
||||
"encryptions_accumulated": "dcabb32ad8e8acea785275323395abd0",
|
||||
"exports_accumulated": "45db490fc51c86ba46cca1217f66a75e"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -24,8 +24,8 @@
|
|||
"skRm": "497b4502664cfea5d5af0b39934dac72242a74f8480451e1aee7d6a53320333d",
|
||||
"pkRm": "430f4b9859665145a6b1ba274024487bd66f03a2dd577d7753c68d7d7d00c00c",
|
||||
"enc": "6c93e09869df3402d7bf231bf540fadd35cd56be14f97178f0954db94b7fc256",
|
||||
"encryptions": "1702e73e1e71705faa8241022af1deea",
|
||||
"exports": "5cb678bf1c52afbd9afb58b8f7c1ced3"
|
||||
"encryptions_accumulated": "1702e73e1e71705faa8241022af1deea",
|
||||
"exports_accumulated": "5cb678bf1c52afbd9afb58b8f7c1ced3"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -38,8 +38,8 @@
|
|||
"skRm": "8057991eef8f1f1af18f4a9491d16a1ce333f695d4db8e38da75975c4478e0fb",
|
||||
"pkRm": "4310ee97d88cc1f088a5576c77ab0cf5c3ac797f3d95139c6c84b5429c59662a",
|
||||
"enc": "1afa08d3dec047a643885163f1180476fa7ddb54c6a8029ea33f95796bf2ac4a",
|
||||
"encryptions": "225fb3d35da3bb25e4371bcee4273502",
|
||||
"exports": "54e2189c04100b583c84452f94eb9a4a"
|
||||
"encryptions_accumulated": "225fb3d35da3bb25e4371bcee4273502",
|
||||
"exports_accumulated": "54e2189c04100b583c84452f94eb9a4a"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
"skRm": "33d196c830a12f9ac65d6e565a590d80f04ee9b19c83c87f2c170d972a812848",
|
||||
"pkRm": "194141ca6c3c3beb4792cd97ba0ea1faff09d98435012345766ee33aae2d7664",
|
||||
"enc": "e5e8f9bfff6c2f29791fc351d2c25ce1299aa5eaca78a757c0b4fb4bcd830918",
|
||||
"exports": "3fe376e3f9c349bc5eae67bbce867a16"
|
||||
"exports_accumulated": "3fe376e3f9c349bc5eae67bbce867a16"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -65,8 +65,8 @@
|
|||
"skRm": "ddfbb71d7ea8ebd98fa9cc211aa7b535d258fe9ab4a08bc9896af270e35aad35",
|
||||
"pkRm": "adf16c696b87995879b27d470d37212f38a58bfe7f84e6d50db638b8f2c22340",
|
||||
"enc": "8998da4c3d6ade83c53e861a022c046db909f1c31107196ab4c2f4dd37e1a949",
|
||||
"encryptions": "19a0d0fb001f83e7606948507842f913",
|
||||
"exports": "e5d853af841b92602804e7a40c1f2487"
|
||||
"encryptions_accumulated": "19a0d0fb001f83e7606948507842f913",
|
||||
"exports_accumulated": "e5d853af841b92602804e7a40c1f2487"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -79,8 +79,8 @@
|
|||
"skRm": "bdd8943c1e60191f3ea4e69fc4f322aa1086db9650f1f952fdce88395a4bd1af",
|
||||
"pkRm": "aa7bddcf5ca0b2c0cf760b5dffc62740a8e761ec572032a809bebc87aaf7575e",
|
||||
"enc": "c12ba9fb91d7ebb03057d8bea4398688dcc1d1d1ff3b97f09b96b9bf89bd1e4a",
|
||||
"encryptions": "20402e520fdbfee76b2b0af73d810deb",
|
||||
"exports": "80b7f603f0966ca059dd5e8a7cede735"
|
||||
"encryptions_accumulated": "20402e520fdbfee76b2b0af73d810deb",
|
||||
"exports_accumulated": "80b7f603f0966ca059dd5e8a7cede735"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -93,8 +93,8 @@
|
|||
"skRm": "fad15f488c09c167bd18d8f48f282e30d944d624c5676742ad820119de44ea91",
|
||||
"pkRm": "06aa193a5612d89a1935c33f1fda3109fcdf4b867da4c4507879f184340b0e0e",
|
||||
"enc": "1d38fc578d4209ea0ef3ee5f1128ac4876a9549d74dc2d2f46e75942a6188244",
|
||||
"encryptions": "c03e64ef58b22065f04be776d77e160c",
|
||||
"exports": "fa84b4458d580b5069a1be60b4785eac"
|
||||
"encryptions_accumulated": "c03e64ef58b22065f04be776d77e160c",
|
||||
"exports_accumulated": "fa84b4458d580b5069a1be60b4785eac"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -107,7 +107,7 @@
|
|||
"skRm": "7596739457c72bbd6758c7021cfcb4d2fcd677d1232896b8f00da223c5519c36",
|
||||
"pkRm": "9a83674c1bc12909fd59635ba1445592b82a7c01d4dad3ffc8f3975e76c43732",
|
||||
"enc": "444fbbf83d64fef654dfb2a17997d82ca37cd8aeb8094371da33afb95e0c5b0e",
|
||||
"exports": "7557bdf93eadf06e3682fce3d765277f"
|
||||
"exports_accumulated": "7557bdf93eadf06e3682fce3d765277f"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -120,8 +120,8 @@
|
|||
"skRm": "f3ce7fdae57e1a310d87f1ebbde6f328be0a99cdbcadf4d6589cf29de4b8ffd2",
|
||||
"pkRm": "04fe8c19ce0905191ebc298a9245792531f26f0cece2460639e8bc39cb7f706a826a779b4cf969b8a0e539c7f62fb3d30ad6aa8f80e30f1d128aafd68a2ce72ea0",
|
||||
"enc": "04a92719c6195d5085104f469a8b9814d5838ff72b60501e2c4466e5e67b325ac98536d7b61a1af4b78e5b7f951c0900be863c403ce65c9bfcb9382657222d18c4",
|
||||
"encryptions": "fcb852ae6a1e19e874fbd18a199df3e4",
|
||||
"exports": "655be1f8b189a6b103528ac6d28d3109"
|
||||
"encryptions_accumulated": "fcb852ae6a1e19e874fbd18a199df3e4",
|
||||
"exports_accumulated": "655be1f8b189a6b103528ac6d28d3109"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -134,8 +134,8 @@
|
|||
"skRm": "317f915db7bc629c48fe765587897e01e282d3e8445f79f27f65d031a88082b2",
|
||||
"pkRm": "04abc7e49a4c6b3566d77d0304addc6ed0e98512ffccf505e6a8e3eb25c685136f853148544876de76c0f2ef99cdc3a05ccf5ded7860c7c021238f9e2073d2356c",
|
||||
"enc": "04c06b4f6bebc7bb495cb797ab753f911aff80aefb86fd8b6fcc35525f3ab5f03e0b21bd31a86c6048af3cb2d98e0d3bf01da5cc4c39ff5370d331a4f1f7d5a4e0",
|
||||
"encryptions": "8d3263541fc1695b6e88ff3a1208577c",
|
||||
"exports": "038af0baa5ce3c4c5f371c3823b15217"
|
||||
"encryptions_accumulated": "8d3263541fc1695b6e88ff3a1208577c",
|
||||
"exports_accumulated": "038af0baa5ce3c4c5f371c3823b15217"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -148,8 +148,8 @@
|
|||
"skRm": "a4d1c55836aa30f9b3fbb6ac98d338c877c2867dd3a77396d13f68d3ab150d3b",
|
||||
"pkRm": "04a697bffde9405c992883c5c439d6cc358170b51af72812333b015621dc0f40bad9bb726f68a5c013806a790ec716ab8669f84f6b694596c2987cf35baba2a006",
|
||||
"enc": "04c07836a0206e04e31d8ae99bfd549380b072a1b1b82e563c935c095827824fc1559eac6fb9e3c70cd3193968994e7fe9781aa103f5b50e934b5b2f387e381291",
|
||||
"encryptions": "702cdecae9ba5c571c8b00ad1f313dbf",
|
||||
"exports": "2e0951156f1e7718a81be3004d606800"
|
||||
"encryptions_accumulated": "702cdecae9ba5c571c8b00ad1f313dbf",
|
||||
"exports_accumulated": "2e0951156f1e7718a81be3004d606800"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -162,7 +162,7 @@
|
|||
"skRm": "62c3868357a464f8461d03aa0182c7cebcde841036aea7230ddc7339f1088346",
|
||||
"pkRm": "046c6bb9e1976402c692fef72552f4aaeedd83a5e5079de3d7ae732da0f397b15921fb9c52c9866affc8e29c0271a35937023a9245982ec18bab1eb157cf16fc33",
|
||||
"enc": "04d804370b7e24b94749eb1dc8df6d4d4a5d75f9effad01739ebcad5c54a40d57aaa8b4190fc124dbde2e4f1e1d1b012a3bc4038157dc29b55533a932306d8d38d",
|
||||
"exports": "a6d39296bc2704db6194b7d6180ede8a"
|
||||
"exports_accumulated": "a6d39296bc2704db6194b7d6180ede8a"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -175,8 +175,8 @@
|
|||
"skRm": "3ac8530ad1b01885960fab38cf3cdc4f7aef121eaa239f222623614b4079fb38",
|
||||
"pkRm": "04085aa5b665dc3826f9650ccbcc471be268c8ada866422f739e2d531d4a8818a9466bc6b449357096232919ec4fe9070ccbac4aac30f4a1a53efcf7af90610edd",
|
||||
"enc": "0493ed86735bdfb978cc055c98b45695ad7ce61ce748f4dd63c525a3b8d53a15565c6897888070070c1579db1f86aaa56deb8297e64db7e8924e72866f9a472580",
|
||||
"encryptions": "3d670fc7760ce5b208454bb678fbc1dd",
|
||||
"exports": "0a3e30b572dafc58b998cd51959924be"
|
||||
"encryptions_accumulated": "3d670fc7760ce5b208454bb678fbc1dd",
|
||||
"exports_accumulated": "0a3e30b572dafc58b998cd51959924be"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -189,8 +189,8 @@
|
|||
"skRm": "9648e8711e9b6cb12dc19abf9da350cf61c3669c017b1db17bb36913b54a051d",
|
||||
"pkRm": "0400f209b1bf3b35b405d750ef577d0b2dc81784005d1c67ff4f6d2860d7640ca379e22ac7fa105d94bc195758f4dfc0b82252098a8350c1bfeda8275ce4dd4262",
|
||||
"enc": "0404dc39344526dbfa728afba96986d575811b5af199c11f821a0e603a4d191b25544a402f25364964b2c129cb417b3c1dab4dfc0854f3084e843f731654392726",
|
||||
"encryptions": "9da1683aade69d882aa094aa57201481",
|
||||
"exports": "80ab8f941a71d59f566e5032c6e2c675"
|
||||
"encryptions_accumulated": "9da1683aade69d882aa094aa57201481",
|
||||
"exports_accumulated": "80ab8f941a71d59f566e5032c6e2c675"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -203,8 +203,8 @@
|
|||
"skRm": "ebedc3ca088ad03dfbbfcd43f438c4bb5486376b8ccaea0dc25fc64b2f7fc0da",
|
||||
"pkRm": "048fed808e948d46d95f778bd45236ce0c464567a1dc6f148ba71dc5aeff2ad52a43c71851b99a2cdbf1dad68d00baad45007e0af443ff80ad1b55322c658b7372",
|
||||
"enc": "044415d6537c2e9dd4c8b73f2868b5b9e7e8e3d836990dc2fd5b466d1324c88f2df8436bac7aa2e6ebbfd13bd09eaaa7c57c7495643bacba2121dca2f2040e1c5f",
|
||||
"encryptions": "f025dca38d668cee68e7c434e1b98f9f",
|
||||
"exports": "2efbb7ade3f87133810f507fdd73f874"
|
||||
"encryptions_accumulated": "f025dca38d668cee68e7c434e1b98f9f",
|
||||
"exports_accumulated": "2efbb7ade3f87133810f507fdd73f874"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -217,7 +217,7 @@
|
|||
"skRm": "9d34abe85f6da91b286fbbcfbd12c64402de3d7f63819e6c613037746b4eae6b",
|
||||
"pkRm": "0453a4d1a4333b291e32d50a77ac9157bbc946059941cf9ed5784c15adbc7ad8fe6bf34a504ed81fd9bc1b6bb066a037da30fccd6c0b42d72bf37b9fef43c8e498",
|
||||
"enc": "04f910248e120076be2a4c93428ac0c8a6b89621cfef19f0f9e113d835cf39d5feabbf6d26444ebbb49c991ec22338ade3a5edff35a929be67c4e5f33dcff96706",
|
||||
"exports": "6df17307eeb20a9180cff75ea183dd60"
|
||||
"exports_accumulated": "6df17307eeb20a9180cff75ea183dd60"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -230,8 +230,8 @@
|
|||
"skRm": "009227b4b91cf1eb6eecb6c0c0bae93a272d24e11c63bd4c34a581c49f9c3ca01c16bbd32a0a1fac22784f2ae985c85f183baad103b2d02aee787179dfc1a94fea11",
|
||||
"pkRm": "0400b81073b1612cf7fdb6db07b35cf4bc17bda5854f3d270ecd9ea99f6c07b46795b8014b66c523ceed6f4829c18bc3886c891b63fa902500ce3ddeb1fbec7e608ac70050b76a0a7fc081dbf1cb30b005981113e635eb501a973aba662d7f16fcc12897dd752d657d37774bb16197c0d9724eecc1ed65349fb6ac1f280749e7669766f8cd",
|
||||
"enc": "0400bec215e31718cd2eff5ba61d55d062d723527ec2029d7679a9c867d5c68219c9b217a9d7f78562dc0af3242fef35d1d6f4a28ee75f0d4b31bc918937b559b70762004c4fd6ad7373db7e31da8735fbd6171bbdcfa770211420682c760a40a482cc24f4125edbea9cb31fe71d5d796cfe788dc408857697a52fef711fb921fa7c385218",
|
||||
"encryptions": "94209973d36203eef2e56d155ef241d5",
|
||||
"exports": "31f25ea5e192561bce5f2c2822a9432c"
|
||||
"encryptions_accumulated": "94209973d36203eef2e56d155ef241d5",
|
||||
"exports_accumulated": "31f25ea5e192561bce5f2c2822a9432c"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -244,8 +244,8 @@
|
|||
"skRm": "01a27e65890d64a121cfe59b41484b63fd1213c989c00e05a049ac4ede1f5caeec52bf43a59bdc36731cb6f8a0b7d7724b047ff52803c421ee99d61d4ea2e569c825",
|
||||
"pkRm": "0400eb4010ca82412c044b52bdc218625c4ea797e061236206843e318882b3c1642e7e14e7cc1b4b171a433075ac0c8563043829eee51059a8b68197c8a7f6922465650075f40b6f440fdf525e2512b0c2023709294d912d8c68f94140390bff228097ce2d5f89b2b21f50d4c0892cfb955c380293962d5fe72060913870b61adc8b111953",
|
||||
"enc": "0401c1cf49cafa9e26e24a9e20d7fa44a50a4e88d27236ef17358e79f3615a97f825899a985b3edb5195cad24a4fb64828701e81fbfd9a7ef673efde508e789509bd7c00fd5bfe053377bbee22e40ae5d64aa6fb47b314b5ab7d71b652db9259962dce742317d54084f0cf62a4b7e3f3caa9e6afb8efd6bf1eb8a2e13a7e73ec9213070d68",
|
||||
"encryptions": "69d16fa7c814cd8be9aa2122fda8768f",
|
||||
"exports": "d295fad3aef8be1f89d785800f83a30b"
|
||||
"encryptions_accumulated": "69d16fa7c814cd8be9aa2122fda8768f",
|
||||
"exports_accumulated": "d295fad3aef8be1f89d785800f83a30b"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -258,8 +258,8 @@
|
|||
"skRm": "0168c8bf969b30bd949e154bf2db1964535e3f230f6604545bc9a33e9cd80fb17f4002170a9c91d55d7dd21db48e687cea83083498768cc008c6adf1e0ca08a309bd",
|
||||
"pkRm": "040086b1a785a52af34a9a830332999896e99c5df0007a2ec3243ee3676ba040e60fde21bacf8e5f8db26b5acd42a2c81160286d54a2f124ca8816ac697993727431e50002aa5f5ebe70d88ff56445ade400fb979b466c9046123bbf5be72db9d90d1cde0bb7c217cff8ea0484445150eaf60170b039f54a5f6baeb7288bc62b1dedb59a1b",
|
||||
"enc": "0401f828650ec526a647386324a31dadf75b54550b06707ae3e1fb83874b2633c935bb862bc4f07791ccfafbb08a1f00e18c531a34fec76f2cf3d581e7915fa40bbc3b010ab7c3d9162ea69928e71640ecff08b97f4fa9e8c66dfe563a13bf561cee7635563f91d387e2a38ee674ea28b24c633a988d1a08968b455e96307c64bda3f094b7",
|
||||
"encryptions": "586d5a92612828afbd7fdcea96006892",
|
||||
"exports": "a70389af65de4452a3f3147b66bd5c73"
|
||||
"encryptions_accumulated": "586d5a92612828afbd7fdcea96006892",
|
||||
"exports_accumulated": "a70389af65de4452a3f3147b66bd5c73"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -272,7 +272,7 @@
|
|||
"skRm": "01ca47cf2f6f36fef46a01a46b393c30672224dd566aa3dd07a229519c49632c83d800e66149c3a7a07b840060549accd0d480ec5c71d2a975f88f6aa2fc0810b393",
|
||||
"pkRm": "040143b7db23907d3ae1c43ef4882a6cdb142ca05a21c2475985c199807dd143e898136c65faf1ca1b6c6c2e8a92d67a0ab9c24f8c5cff7610cb942a73eb2ec4217c26018d67621cc78a60ec4bd1e23f90eb772adba2cf5a566020ee651f017b280a155c016679bd7e7ebad49e28e7ab679f66765f4ef34eae6b38a99f31bc73ea0f0d694d",
|
||||
"enc": "040073dda7343ce32926c028c3be28508cccb751e2d4c6187bcc4e9b1de82d3d70c5702c6c866a920d9d9a574f5a4d4a0102db76207d5b3b77da16bb57486c5cc2a95f006b5d2e15efb24e297bdf8f2b6d7b25bf226d1b6efca47627b484d2942c14df6fe018d82ab9fb7306370c248864ea48fe5ca94934993517aacaa3b6bca8f92efc84",
|
||||
"exports": "d8fa94ac5e6829caf5ab4cdd1e05f5e1"
|
||||
"exports_accumulated": "d8fa94ac5e6829caf5ab4cdd1e05f5e1"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -285,8 +285,8 @@
|
|||
"skRm": "019db24a3e8b1f383436cd06997dd864eb091418ff561e3876cee2e4762a0cc0b69688af9a7a4963c90d394b2be579144af97d4933c0e6c2c2d13e7505ea51a06b0d",
|
||||
"pkRm": "0401e06b350786c48a60dfc50eed324b58ecafc4efba26242c46c14274bd97f0989487a6fae0626188fea971ae1cb53f5d0e87188c1c62af92254f17138bbcebf5acd0018e574ee1d695813ce9dc45b404d2cf9c04f27627c4c55da1f936d813fd39435d0713d4a3cdc5409954a1180eb2672bdfc4e0e79c04eda89f857f625e058742a1c8",
|
||||
"enc": "0400ac8d1611948105f23cf5e6842b07bd39b352d9d1e7bff2c93ac063731d6372e2661eff2afce604d4a679b49195f15e4fa228432aed971f2d46c1beb51fb3e5812501fe199c3d94c1b199393642500443dd82ce1c01701a1279cc3d74e29773030e26a70d3512f761e1eb0d7882209599eb9acd295f5939311c55e737f11c19988878d6",
|
||||
"encryptions": "207972885962115e69daaa3bc5015151",
|
||||
"exports": "8e9c577501320d86ee84407840188f5f"
|
||||
"encryptions_accumulated": "207972885962115e69daaa3bc5015151",
|
||||
"exports_accumulated": "8e9c577501320d86ee84407840188f5f"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -299,8 +299,8 @@
|
|||
"skRm": "01462680369ae375e4b3791070a7458ed527842f6a98a79ff5e0d4cbde83c27196a3916956655523a6a2556a7af62c5cadabe2ef9da3760bb21e005202f7b2462847",
|
||||
"pkRm": "0401b45498c1714e2dce167d3caf162e45e0642afc7ed435df7902ccae0e84ba0f7d373f646b7738bbbdca11ed91bdeae3cdcba3301f2457be452f271fa6837580e661012af49583a62e48d44bed350c7118c0d8dc861c238c72a2bda17f64704f464b57338e7f40b60959480c0e58e6559b190d81663ed816e523b6b6a418f66d2451ec64",
|
||||
"enc": "040138b385ca16bb0d5fa0c0665fbbd7e69e3ee29f63991d3e9b5fa740aab8900aaeed46ed73a49055758425a0ce36507c54b29cc5b85a5cee6bae0cf1c21f2731ece2013dc3fb7c8d21654bb161b463962ca19e8c654ff24c94dd2898de12051f1ed0692237fb02b2f8d1dc1c73e9b366b529eb436e98a996ee522aef863dd5739d2f29b0",
|
||||
"encryptions": "31769e36bcca13288177eb1c92f616ae",
|
||||
"exports": "fbffd93db9f000f51cf8ab4c1127fbda"
|
||||
"encryptions_accumulated": "31769e36bcca13288177eb1c92f616ae",
|
||||
"exports_accumulated": "fbffd93db9f000f51cf8ab4c1127fbda"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -313,8 +313,8 @@
|
|||
"skRm": "015b59f17366a1d4442e5b92d883a8f35fe8d88fea0e5bac6dfac7153c78fd0c6248c618b083899a7d62ba6e00e8a22cdde628dd5399b9a3377bb898792ff6f54ab9",
|
||||
"pkRm": "040084698a47358f06a92926ee826a6784341285ee45f4b8269de271a8c6f03d5e8e24f628de13f5c37377b7cabfbd67bc98f9e8e758dfbee128b2fe752cd32f0f3ccd0061baec1ed7c6b52b7558bc120f783e5999c8952242d9a20baf421ccfc2a2b87c42d7b5b806fea6d518d5e9cd7bfd6c85beb5adeb72da41ac3d4f27bba83cff24d7",
|
||||
"enc": "0400edc201c9b32988897a7f7b19104ebb54fc749faa41a67e9931e87ec30677194898074afb9a5f40a97df2972368a0c594e5b60e90d1ff83e9e35f8ff3ad200fd6d70028b5645debe9f1f335dbc1225c066218e85cf82a05fbe361fa477740b906cb3083076e4d17232513d102627597d38e354762cf05b3bd0f33dc4d0fb78531afd3fd",
|
||||
"encryptions": "aa69356025f552372770ef126fa2e59a",
|
||||
"exports": "1fcffb5d8bc1d825daf904a0c6f4a4d3"
|
||||
"encryptions_accumulated": "aa69356025f552372770ef126fa2e59a",
|
||||
"exports_accumulated": "1fcffb5d8bc1d825daf904a0c6f4a4d3"
|
||||
},
|
||||
{
|
||||
"mode": 0,
|
||||
|
|
@ -327,6 +327,6 @@
|
|||
"skRm": "0045fe00b1d55eb64182d334e301e9ac553d6dbafbf69935e65f5bf89c761b9188c0e4d50a0167de6b98af7bebd05b2627f45f5fca84690cd86a61ba5a612870cf53",
|
||||
"pkRm": "0401635b3074ad37b752696d5ca311da9cc790a899116030e4c71b83edd06ced92fdd238f6c921132852f20e6a2cbcf2659739232f4a69390f2b14d80667bcf9b71983000a919d29366554f53107a6c4cc7f8b24fa2de97b42433610cbd236d5a2c668e991ff4c4383e9fe0a9e7858fc39064e31fca1964e809a2f898c32fba46ce33575b8",
|
||||
"enc": "0400932d9ff83ca4b799968bda0dd9dac4d02c9232cdcf133db7c53cfbf3d80a299fd99bc42da38bb78f57976bdb69988819b6e2924fadacdad8c05052997cf50b29110139f000af5b2c599b05fc63537d60a8384ca984821f8cd12621577a974ebadaf98bfdad6d1643dd4316062d7c0bda5ba0f0a2719992e993af615568abf19a256993",
|
||||
"exports": "29c0f6150908f6e0d979172f23f1d57b"
|
||||
"exports_accumulated": "29c0f6150908f6e0d979172f23f1d57b"
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue