Merge "external/boringssl: Sync to 3989c99706bf30054798ff82f1cb010e50e385f5." am: 4bb310c73d am: 51bd044aca am: b509a7d12c
Original change: https://android-review.googlesource.com/c/platform/external/boringssl/+/1458438
Change-Id: I31946feff4896e146f3f12f51e5dfa4ccb4377f6
diff --git a/BORINGSSL_REVISION b/BORINGSSL_REVISION
index d103898..63be497 100644
--- a/BORINGSSL_REVISION
+++ b/BORINGSSL_REVISION
@@ -1 +1 @@
-3743aafdacff2f7b083615a043a37101f740fa53
+3989c99706bf30054798ff82f1cb010e50e385f5
diff --git a/android-sources.cmake b/android-sources.cmake
index 10e6d39..830e789 100644
--- a/android-sources.cmake
+++ b/android-sources.cmake
@@ -167,6 +167,7 @@
${BORINGSSL_ROOT}src/crypto/thread_win.c
${BORINGSSL_ROOT}src/crypto/trust_token/pmbtoken.c
${BORINGSSL_ROOT}src/crypto/trust_token/trust_token.c
+ ${BORINGSSL_ROOT}src/crypto/trust_token/voprf.c
${BORINGSSL_ROOT}src/crypto/x509/a_digest.c
${BORINGSSL_ROOT}src/crypto/x509/a_sign.c
${BORINGSSL_ROOT}src/crypto/x509/a_strex.c
diff --git a/eureka.mk b/eureka.mk
index e9ddad0..9bc1654 100644
--- a/eureka.mk
+++ b/eureka.mk
@@ -165,6 +165,7 @@
src/crypto/thread_win.c\
src/crypto/trust_token/pmbtoken.c\
src/crypto/trust_token/trust_token.c\
+ src/crypto/trust_token/voprf.c\
src/crypto/x509/a_digest.c\
src/crypto/x509/a_sign.c\
src/crypto/x509/a_strex.c\
diff --git a/sources.bp b/sources.bp
index 4f40be2..820a699 100644
--- a/sources.bp
+++ b/sources.bp
@@ -166,6 +166,7 @@
"src/crypto/thread_win.c",
"src/crypto/trust_token/pmbtoken.c",
"src/crypto/trust_token/trust_token.c",
+ "src/crypto/trust_token/voprf.c",
"src/crypto/x509/a_digest.c",
"src/crypto/x509/a_sign.c",
"src/crypto/x509/a_strex.c",
diff --git a/sources.mk b/sources.mk
index d89d354..e62a7b7 100644
--- a/sources.mk
+++ b/sources.mk
@@ -165,6 +165,7 @@
src/crypto/thread_win.c\
src/crypto/trust_token/pmbtoken.c\
src/crypto/trust_token/trust_token.c\
+ src/crypto/trust_token/voprf.c\
src/crypto/x509/a_digest.c\
src/crypto/x509/a_sign.c\
src/crypto/x509/a_strex.c\
diff --git a/src/.clang-format b/src/.clang-format
index 3ccecaa..55644fa 100644
--- a/src/.clang-format
+++ b/src/.clang-format
@@ -8,4 +8,38 @@
# IncludeCategories does not recognize <openssl/header.h>. We should
# reconfigure IncludeCategories to match. For now, keep it at Preserve.
IncludeBlocks: Preserve
-
+TypenameMacros: ['LHASH_OF', 'STACK_OF']
+StatementMacros:
+ - "DECLARE_PEM_read"
+ - "DECLARE_PEM_read_bio"
+ - "DECLARE_PEM_read_fp"
+ - "DECLARE_PEM_rw"
+ - "DECLARE_PEM_rw_cb"
+ - "DECLARE_PEM_rw_const"
+ - "DECLARE_PEM_write"
+ - "DECLARE_PEM_write_bio"
+ - "DECLARE_PEM_write_bio_const"
+ - "DECLARE_PEM_write_cb"
+ - "DECLARE_PEM_write_cb_bio"
+ - "DECLARE_PEM_write_cb_fp"
+ - "DECLARE_PEM_write_const"
+ - "DECLARE_PEM_write_fp"
+ - "DECLARE_PEM_write_fp_const"
+ - "IMPLEMENT_PEM_read"
+ - "IMPLEMENT_PEM_read_bio"
+ - "IMPLEMENT_PEM_read_fp"
+ - "IMPLEMENT_PEM_rw"
+ - "IMPLEMENT_PEM_rw_cb"
+ - "IMPLEMENT_PEM_rw_const"
+ - "IMPLEMENT_PEM_write"
+ - "IMPLEMENT_PEM_write_bio"
+ - "IMPLEMENT_PEM_write_bio_const"
+ - "IMPLEMENT_PEM_write_cb"
+ - "IMPLEMENT_PEM_write_cb_bio"
+ - "IMPLEMENT_PEM_write_cb_bio_const"
+ - "IMPLEMENT_PEM_write_cb_const"
+ - "IMPLEMENT_PEM_write_cb_fp"
+ - "IMPLEMENT_PEM_write_cb_fp_const"
+ - "IMPLEMENT_PEM_write_const"
+ - "IMPLEMENT_PEM_write_fp"
+ - "IMPLEMENT_PEM_write_fp_const"
diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt
index a872626..2771768 100644
--- a/src/crypto/CMakeLists.txt
+++ b/src/crypto/CMakeLists.txt
@@ -340,6 +340,7 @@
thread_win.c
trust_token/pmbtoken.c
trust_token/trust_token.c
+ trust_token/voprf.c
x509/a_digest.c
x509/a_sign.c
x509/a_strex.c
diff --git a/src/crypto/bio/bio.c b/src/crypto/bio/bio.c
index 7d97c3e..3d36e28 100644
--- a/src/crypto/bio/bio.c
+++ b/src/crypto/bio/bio.c
@@ -262,6 +262,8 @@
int BIO_get_retry_reason(const BIO *bio) { return bio->retry_reason; }
+void BIO_set_retry_reason(BIO *bio, int reason) { bio->retry_reason = reason; }
+
void BIO_clear_flags(BIO *bio, int flags) {
bio->flags &= ~flags;
}
diff --git a/src/crypto/fipsmodule/fips_shared.lds b/src/crypto/fipsmodule/fips_shared.lds
index c3db101..323de73 100644
--- a/src/crypto/fipsmodule/fips_shared.lds
+++ b/src/crypto/fipsmodule/fips_shared.lds
@@ -8,18 +8,17 @@
.rodata : {
BORINGSSL_bcm_rodata_start = .;
*(.rodata)
+ *(.rodata.*)
BORINGSSL_bcm_rodata_end = .;
}
/DISCARD/ : {
+ /* These sections shouldn't exist. In order to catch any slip-ups, direct
+ * the linker to discard them. */
*(.rela.dyn)
*(.data)
*(.rel.ro)
*(*.text.*)
*(*.data.*)
-
- /* This should be included to catch any unexpected rodata subsections, but
- it crashes the linker!
- *(*.rodata.*) */
}
}
diff --git a/src/crypto/fipsmodule/rand/fork_detect.c b/src/crypto/fipsmodule/rand/fork_detect.c
index eafe615..8dd2c95 100644
--- a/src/crypto/fipsmodule/rand/fork_detect.c
+++ b/src/crypto/fipsmodule/rand/fork_detect.c
@@ -20,9 +20,7 @@
#include "fork_detect.h"
-// Android-changed: Don't compile fork_detect() for Trusty.
-// TODO(prb): Remove when better fix lands upstream.
-#if defined(OPENSSL_LINUX) && !defined(OPENSSL_TRUSTY)
+#if defined(OPENSSL_LINUX)
#include <sys/mman.h>
#include <unistd.h>
#include <stdlib.h>
diff --git a/src/crypto/hpke/hpke_test.cc b/src/crypto/hpke/hpke_test.cc
index 49c9b06..3239e47 100644
--- a/src/crypto/hpke/hpke_test.cc
+++ b/src/crypto/hpke/hpke_test.cc
@@ -413,11 +413,8 @@
// are empty.
TEST(HPKETest, EmptyPSK) {
const uint8_t kMockEnc[X25519_PUBLIC_VALUE_LEN] = {0xff};
- const uint8_t kMockPSK[100] = {0xff};
- const bssl::Span<const uint8_t> kPSKValues[] = {
- {kMockPSK, sizeof(kMockPSK)},
- {nullptr, 0},
- };
+ const std::vector<uint8_t> kPSKValues[] = {std::vector<uint8_t>(100, 0xff),
+ {}};
// Generate the receiver's keypair.
uint8_t secret_key_r[X25519_PRIVATE_KEY_LEN];
@@ -427,8 +424,8 @@
// Vary the PSK and PSKID inputs for the sender and receiver, trying all four
// permutations of empty and nonempty inputs.
- for (const auto psk : kPSKValues) {
- for (const auto psk_id : kPSKValues) {
+ for (const auto &psk : kPSKValues) {
+ for (const auto &psk_id : kPSKValues) {
const bool kExpectSuccess = psk.size() > 0 && psk_id.size() > 0;
ASSERT_EQ(ERR_get_error(), 0u);
diff --git a/src/crypto/trust_token/internal.h b/src/crypto/trust_token/internal.h
index c935888..0aa1936 100644
--- a/src/crypto/trust_token/internal.h
+++ b/src/crypto/trust_token/internal.h
@@ -30,16 +30,20 @@
#endif
-// PMBTokens.
-//
-// PMBTokens is described in https://eprint.iacr.org/2020/072/20200324:214215
-// and provides anonymous tokens with private metadata. We implement the
-// construction with validity verification, described in appendix H,
-// construction 6.
+// For the following cryptographic schemes, we use P-384 instead of our usual
+// choice of P-256. See Appendix I of
+// https://eprint.iacr.org/2020/072/20200324:214215 which describes two attacks
+// which may affect smaller curves. In particular, p-1 for P-256 is smooth,
+// giving a low complexity for the p-1 attack. P-384's p-1 has a 281-bit prime
+// factor,
+// 3055465788140352002733946906144561090641249606160407884365391979704929268480326390471.
+// This lower-bounds the p-1 attack at O(2^140). The p+1 attack is lower-bounded
+// by O(p^(1/3)) or O(2^128), so we do not need to check the smoothness of p+1.
-// PMBTOKEN_NONCE_SIZE is the size of nonces used as part of the PMBToken
+
+// TRUST_TOKEN_NONCE_SIZE is the size of nonces used as part of the Trust_Token
// protocol.
-#define PMBTOKEN_NONCE_SIZE 64
+#define TRUST_TOKEN_NONCE_SIZE 64
typedef struct {
// TODO(https://crbug.com/boringssl/334): These should store |EC_PRECOMP| so
@@ -47,7 +51,7 @@
EC_AFFINE pub0;
EC_AFFINE pub1;
EC_AFFINE pubs;
-} PMBTOKEN_CLIENT_KEY;
+} TRUST_TOKEN_CLIENT_KEY;
typedef struct {
EC_SCALAR x0;
@@ -62,47 +66,47 @@
EC_PRECOMP pub1_precomp;
EC_AFFINE pubs;
EC_PRECOMP pubs_precomp;
-} PMBTOKEN_ISSUER_KEY;
+} TRUST_TOKEN_ISSUER_KEY;
-// PMBTOKEN_PRETOKEN represents the intermediate state a client keeps during a
-// PMBToken issuance operation.
+// TRUST_TOKEN_PRETOKEN represents the intermediate state a client keeps during
+// a Trust_Token issuance operation.
typedef struct pmb_pretoken_st {
- uint8_t t[PMBTOKEN_NONCE_SIZE];
+ uint8_t t[TRUST_TOKEN_NONCE_SIZE];
EC_SCALAR r;
EC_AFFINE Tp;
-} PMBTOKEN_PRETOKEN;
+} TRUST_TOKEN_PRETOKEN;
-// PMBTOKEN_PRETOKEN_free releases the memory associated with |token|.
-OPENSSL_EXPORT void PMBTOKEN_PRETOKEN_free(PMBTOKEN_PRETOKEN *token);
+// TRUST_TOKEN_PRETOKEN_free releases the memory associated with |token|.
+OPENSSL_EXPORT void TRUST_TOKEN_PRETOKEN_free(TRUST_TOKEN_PRETOKEN *token);
-DEFINE_STACK_OF(PMBTOKEN_PRETOKEN)
+DEFINE_STACK_OF(TRUST_TOKEN_PRETOKEN)
+
+
+// PMBTokens.
+//
+// PMBTokens is described in https://eprint.iacr.org/2020/072/20200324:214215
+// and provides anonymous tokens with private metadata. We implement the
+// construction with validity verification, described in appendix H,
+// construction 6.
// The following functions implement the corresponding |TRUST_TOKENS_METHOD|
// functions for |TRUST_TOKENS_experiment_v1|'s PMBTokens construction which
// uses P-384.
-//
-// We use P-384 instead of our usual choice of P-256. See Appendix I which
-// describes two attacks which may affect smaller curves. In particular, p-1 for
-// P-256 is smooth, giving a low complexity for the p-1 attack. P-384's p-1 has
-// a 281-bit prime factor,
-// 3055465788140352002733946906144561090641249606160407884365391979704929268480326390471.
-// This lower-bounds the p-1 attack at O(2^140). The p+1 attack is lower-bounded
-// by O(p^(1/3)) or O(2^128), so we do not need to check the smoothness of p+1.
int pmbtoken_exp1_generate_key(CBB *out_private, CBB *out_public);
-int pmbtoken_exp1_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+int pmbtoken_exp1_client_key_from_bytes(TRUST_TOKEN_CLIENT_KEY *key,
const uint8_t *in, size_t len);
-int pmbtoken_exp1_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+int pmbtoken_exp1_issuer_key_from_bytes(TRUST_TOKEN_ISSUER_KEY *key,
const uint8_t *in, size_t len);
-STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp1_blind(CBB *cbb, size_t count);
-int pmbtoken_exp1_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+STACK_OF(TRUST_TOKEN_PRETOKEN) * pmbtoken_exp1_blind(CBB *cbb, size_t count);
+int pmbtoken_exp1_sign(const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
size_t num_requested, size_t num_to_issue,
uint8_t private_metadata);
STACK_OF(TRUST_TOKEN) *
- pmbtoken_exp1_unblind(const PMBTOKEN_CLIENT_KEY *key,
- const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+ pmbtoken_exp1_unblind(const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens,
CBS *cbs, size_t count, uint32_t key_id);
-int pmbtoken_exp1_read(const PMBTOKEN_ISSUER_KEY *key,
- uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+int pmbtoken_exp1_read(const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t *out_private_metadata, const uint8_t *token,
size_t token_len);
@@ -113,29 +117,21 @@
// The following functions implement the corresponding |TRUST_TOKENS_METHOD|
// functions for |TRUST_TOKENS_experiment_v2|'s PMBTokens construction which
// uses P-384.
-//
-// We use P-384 instead of our usual choice of P-256. See Appendix I which
-// describes two attacks which may affect smaller curves. In particular, p-1 for
-// P-256 is smooth, giving a low complexity for the p-1 attack. P-384's p-1 has
-// a 281-bit prime factor,
-// 3055465788140352002733946906144561090641249606160407884365391979704929268480326390471.
-// This lower-bounds the p-1 attack at O(2^140). The p+1 attack is lower-bounded
-// by O(p^(1/3)) or O(2^128), so we do not need to check the smoothness of p+1.
int pmbtoken_exp2_generate_key(CBB *out_private, CBB *out_public);
-int pmbtoken_exp2_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+int pmbtoken_exp2_client_key_from_bytes(TRUST_TOKEN_CLIENT_KEY *key,
const uint8_t *in, size_t len);
-int pmbtoken_exp2_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+int pmbtoken_exp2_issuer_key_from_bytes(TRUST_TOKEN_ISSUER_KEY *key,
const uint8_t *in, size_t len);
-STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp2_blind(CBB *cbb, size_t count);
-int pmbtoken_exp2_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+STACK_OF(TRUST_TOKEN_PRETOKEN) * pmbtoken_exp2_blind(CBB *cbb, size_t count);
+int pmbtoken_exp2_sign(const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
size_t num_requested, size_t num_to_issue,
uint8_t private_metadata);
STACK_OF(TRUST_TOKEN) *
- pmbtoken_exp2_unblind(const PMBTOKEN_CLIENT_KEY *key,
- const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+ pmbtoken_exp2_unblind(const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens,
CBS *cbs, size_t count, uint32_t key_id);
-int pmbtoken_exp2_read(const PMBTOKEN_ISSUER_KEY *key,
- uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+int pmbtoken_exp2_read(const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t *out_private_metadata, const uint8_t *token,
size_t token_len);
@@ -144,6 +140,37 @@
OPENSSL_EXPORT int pmbtoken_exp2_get_h_for_testing(uint8_t out[97]);
+// VOPRF.
+//
+// VOPRFs are described in https://tools.ietf.org/html/draft-irtf-cfrg-voprf-04
+// and provide anonymous tokens. This implementation uses TrustToken DSTs and
+// the DLEQ batching primitive from
+// https://eprint.iacr.org/2020/072/20200324:214215.
+// VOPRF only uses the |pub|' field of the TRUST_TOKEN_CLIENT_KEY and
+// |xs|/|pubs| fields of the TRUST_TOKEN_ISSUER_KEY.
+
+// The following functions implement the corresponding |TRUST_TOKENS_METHOD|
+// functions for |TRUST_TOKENS_experiment_v2|'s VOPRF construction which uses
+// P-384.
+int voprf_exp2_generate_key(CBB *out_private, CBB *out_public);
+int voprf_exp2_client_key_from_bytes(TRUST_TOKEN_CLIENT_KEY *key,
+ const uint8_t *in, size_t len);
+int voprf_exp2_issuer_key_from_bytes(TRUST_TOKEN_ISSUER_KEY *key,
+ const uint8_t *in, size_t len);
+STACK_OF(TRUST_TOKEN_PRETOKEN) * voprf_exp2_blind(CBB *cbb, size_t count);
+int voprf_exp2_sign(const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+ size_t num_requested, size_t num_to_issue,
+ uint8_t private_metadata);
+STACK_OF(TRUST_TOKEN) *
+ voprf_exp2_unblind(const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens,
+ CBS *cbs, size_t count, uint32_t key_id);
+int voprf_exp2_read(const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
+ uint8_t *out_private_metadata, const uint8_t *token,
+ size_t token_len);
+
+
// Trust Tokens internals.
struct trust_token_method_st {
@@ -155,23 +182,23 @@
// client_key_from_bytes decodes a client key from |in| and sets |key|
// to the resulting key. It returns one on success and zero
// on failure.
- int (*client_key_from_bytes)(PMBTOKEN_CLIENT_KEY *key, const uint8_t *in,
+ int (*client_key_from_bytes)(TRUST_TOKEN_CLIENT_KEY *key, const uint8_t *in,
size_t len);
// issuer_key_from_bytes decodes a issuer key from |in| and sets |key|
// to the resulting key. It returns one on success and zero
// on failure.
- int (*issuer_key_from_bytes)(PMBTOKEN_ISSUER_KEY *key, const uint8_t *in,
+ int (*issuer_key_from_bytes)(TRUST_TOKEN_ISSUER_KEY *key, const uint8_t *in,
size_t len);
// blind generates a new issuance request for |count| tokens. On
- // success, it returns a newly-allocated |STACK_OF(PMBTOKEN_PRETOKEN)| and
+ // success, it returns a newly-allocated |STACK_OF(TRUST_TOKEN_PRETOKEN)| and
// writes a request to the issuer to |cbb|. On failure, it returns NULL. The
- // |STACK_OF(PMBTOKEN_PRETOKEN)|s should be passed to |pmbtoken_unblind| when
+ // |STACK_OF(TRUST_TOKEN_PRETOKEN)|s should be passed to |pmbtoken_unblind| when
// the server responds.
//
// This function implements the AT.Usr0 operation.
- STACK_OF(PMBTOKEN_PRETOKEN) *(*blind)(CBB *cbb, size_t count);
+ STACK_OF(TRUST_TOKEN_PRETOKEN) * (*blind)(CBB *cbb, size_t count);
// sign parses a request for |num_requested| tokens from |cbs| and
// issues |num_to_issue| tokens with |key| and a private metadata value of
@@ -179,7 +206,7 @@
// success and zero on failure.
//
// This function implements the AT.Sig operation.
- int (*sign)(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+ int (*sign)(const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
size_t num_requested, size_t num_to_issue,
uint8_t private_metadata);
@@ -192,8 +219,8 @@
//
// This function implements the AT.Usr1 operation.
STACK_OF(TRUST_TOKEN) *
- (*unblind)(const PMBTOKEN_CLIENT_KEY *key,
- const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens, CBS *cbs,
+ (*unblind)(const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens, CBS *cbs,
size_t count, uint32_t key_id);
// read parses a PMBToken from |token| and verifies it using |key|. On
@@ -201,8 +228,8 @@
// |out_nonce| and |*out_private_metadata|. Otherwise, it returns zero. Note
// that, unlike the output of |unblind|, |token| does not have a
// four-byte key ID prepended.
- int (*read)(const PMBTOKEN_ISSUER_KEY *key,
- uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+ int (*read)(const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t *out_private_metadata, const uint8_t *token,
size_t token_len);
@@ -219,14 +246,14 @@
// Structure representing a single Trust Token public key with the specified ID.
struct trust_token_client_key_st {
uint32_t id;
- PMBTOKEN_CLIENT_KEY key;
+ TRUST_TOKEN_CLIENT_KEY key;
};
// Structure representing a single Trust Token private key with the specified
// ID.
struct trust_token_issuer_key_st {
uint32_t id;
- PMBTOKEN_ISSUER_KEY key;
+ TRUST_TOKEN_ISSUER_KEY key;
};
struct trust_token_client_st {
@@ -243,7 +270,7 @@
size_t num_keys;
// pretokens is the intermediate state during an active issuance.
- STACK_OF(PMBTOKEN_PRETOKEN)* pretokens;
+ STACK_OF(TRUST_TOKEN_PRETOKEN)* pretokens;
// srr_key is the public key used to verify the signature of the SRR.
EVP_PKEY *srr_key;
@@ -281,7 +308,7 @@
BSSL_NAMESPACE_BEGIN
-BORINGSSL_MAKE_DELETER(PMBTOKEN_PRETOKEN, PMBTOKEN_PRETOKEN_free)
+BORINGSSL_MAKE_DELETER(TRUST_TOKEN_PRETOKEN, TRUST_TOKEN_PRETOKEN_free)
BSSL_NAMESPACE_END
diff --git a/src/crypto/trust_token/pmbtoken.c b/src/crypto/trust_token/pmbtoken.c
index f9132e6..a6549b9 100644
--- a/src/crypto/trust_token/pmbtoken.c
+++ b/src/crypto/trust_token/pmbtoken.c
@@ -31,10 +31,10 @@
typedef int (*hash_t_func_t)(const EC_GROUP *group, EC_RAW_POINT *out,
- const uint8_t t[PMBTOKEN_NONCE_SIZE]);
+ const uint8_t t[TRUST_TOKEN_NONCE_SIZE]);
typedef int (*hash_s_func_t)(const EC_GROUP *group, EC_RAW_POINT *out,
const EC_AFFINE *t,
- const uint8_t s[PMBTOKEN_NONCE_SIZE]);
+ const uint8_t s[TRUST_TOKEN_NONCE_SIZE]);
typedef int (*hash_c_func_t)(const EC_GROUP *group, EC_SCALAR *out,
uint8_t *buf, size_t len);
@@ -165,10 +165,6 @@
scalars, 3);
}
-void PMBTOKEN_PRETOKEN_free(PMBTOKEN_PRETOKEN *pretoken) {
- OPENSSL_free(pretoken);
-}
-
static int pmbtoken_generate_key(const PMBTOKEN_METHOD *method,
CBB *out_private, CBB *out_public) {
const EC_GROUP *group = method->group;
@@ -211,7 +207,7 @@
}
static int pmbtoken_client_key_from_bytes(const PMBTOKEN_METHOD *method,
- PMBTOKEN_CLIENT_KEY *key,
+ TRUST_TOKEN_CLIENT_KEY *key,
const uint8_t *in, size_t len) {
CBS cbs;
CBS_init(&cbs, in, len);
@@ -230,7 +226,7 @@
}
static int pmbtoken_issuer_key_from_bytes(const PMBTOKEN_METHOD *method,
- PMBTOKEN_ISSUER_KEY *key,
+ TRUST_TOKEN_ISSUER_KEY *key,
const uint8_t *in, size_t len) {
const EC_GROUP *group = method->group;
CBS cbs, tmp;
@@ -269,10 +265,10 @@
return 1;
}
-static STACK_OF(PMBTOKEN_PRETOKEN) *
+static STACK_OF(TRUST_TOKEN_PRETOKEN) *
pmbtoken_blind(const PMBTOKEN_METHOD *method, CBB *cbb, size_t count) {
const EC_GROUP *group = method->group;
- STACK_OF(PMBTOKEN_PRETOKEN) *pretokens = sk_PMBTOKEN_PRETOKEN_new_null();
+ STACK_OF(TRUST_TOKEN_PRETOKEN) *pretokens = sk_TRUST_TOKEN_PRETOKEN_new_null();
if (pretokens == NULL) {
OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
goto err;
@@ -280,11 +276,11 @@
for (size_t i = 0; i < count; i++) {
// Insert |pretoken| into |pretokens| early to simplify error-handling.
- PMBTOKEN_PRETOKEN *pretoken = OPENSSL_malloc(sizeof(PMBTOKEN_PRETOKEN));
+ TRUST_TOKEN_PRETOKEN *pretoken = OPENSSL_malloc(sizeof(TRUST_TOKEN_PRETOKEN));
if (pretoken == NULL ||
- !sk_PMBTOKEN_PRETOKEN_push(pretokens, pretoken)) {
+ !sk_TRUST_TOKEN_PRETOKEN_push(pretokens, pretoken)) {
OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
- PMBTOKEN_PRETOKEN_free(pretoken);
+ TRUST_TOKEN_PRETOKEN_free(pretoken);
goto err;
}
@@ -319,7 +315,7 @@
return pretokens;
err:
- sk_PMBTOKEN_PRETOKEN_pop_free(pretokens, PMBTOKEN_PRETOKEN_free);
+ sk_TRUST_TOKEN_PRETOKEN_pop_free(pretokens, TRUST_TOKEN_PRETOKEN_free);
return NULL;
}
@@ -455,9 +451,10 @@
// DLEQOR2 with only one value (n=1).
static int dleq_generate(const PMBTOKEN_METHOD *method, CBB *cbb,
- const PMBTOKEN_ISSUER_KEY *priv, const EC_RAW_POINT *T,
- const EC_RAW_POINT *S, const EC_RAW_POINT *W,
- const EC_RAW_POINT *Ws, uint8_t private_metadata) {
+ const TRUST_TOKEN_ISSUER_KEY *priv,
+ const EC_RAW_POINT *T, const EC_RAW_POINT *S,
+ const EC_RAW_POINT *W, const EC_RAW_POINT *Ws,
+ uint8_t private_metadata) {
const EC_GROUP *group = method->group;
// We generate a DLEQ proof for the validity token and a DLEQOR2 proof for the
@@ -616,7 +613,7 @@
}
static int dleq_verify(const PMBTOKEN_METHOD *method, CBS *cbs,
- const PMBTOKEN_CLIENT_KEY *pub, const EC_RAW_POINT *T,
+ const TRUST_TOKEN_CLIENT_KEY *pub, const EC_RAW_POINT *T,
const EC_RAW_POINT *S, const EC_RAW_POINT *W,
const EC_RAW_POINT *Ws) {
const EC_GROUP *group = method->group;
@@ -735,7 +732,7 @@
}
static int pmbtoken_sign(const PMBTOKEN_METHOD *method,
- const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+ const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
size_t num_requested, size_t num_to_issue,
uint8_t private_metadata) {
const EC_GROUP *group = method->group;
@@ -785,8 +782,8 @@
ec_scalar_select(group, &xb, mask, &key->x1, &key->x0);
ec_scalar_select(group, &yb, mask, &key->y1, &key->y0);
- uint8_t s[PMBTOKEN_NONCE_SIZE];
- RAND_bytes(s, PMBTOKEN_NONCE_SIZE);
+ uint8_t s[TRUST_TOKEN_NONCE_SIZE];
+ RAND_bytes(s, TRUST_TOKEN_NONCE_SIZE);
// The |jacobians| and |affines| contain Sp, Wp, and Wsp.
EC_RAW_POINT jacobians[3];
EC_AFFINE affines[3];
@@ -796,9 +793,11 @@
!ec_point_mul_scalar_batch(group, &jacobians[2], &Tp, &key->xs,
&jacobians[0], &key->ys, NULL, NULL) ||
!ec_jacobian_to_affine_batch(group, affines, jacobians, 3) ||
- !CBB_add_bytes(cbb, s, PMBTOKEN_NONCE_SIZE) ||
- !cbb_add_prefixed_point(cbb, group, &affines[1], method->prefix_point) ||
- !cbb_add_prefixed_point(cbb, group, &affines[2], method->prefix_point)) {
+ !CBB_add_bytes(cbb, s, TRUST_TOKEN_NONCE_SIZE) ||
+ !cbb_add_prefixed_point(cbb, group, &affines[1],
+ method->prefix_point) ||
+ !cbb_add_prefixed_point(cbb, group, &affines[2],
+ method->prefix_point)) {
goto err;
}
@@ -877,11 +876,11 @@
static STACK_OF(TRUST_TOKEN) *
pmbtoken_unblind(const PMBTOKEN_METHOD *method,
- const PMBTOKEN_CLIENT_KEY *key,
- const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens, CBS *cbs,
+ const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens, CBS *cbs,
size_t count, uint32_t key_id) {
const EC_GROUP *group = method->group;
- if (count > sk_PMBTOKEN_PRETOKEN_num(pretokens)) {
+ if (count > sk_TRUST_TOKEN_PRETOKEN_num(pretokens)) {
OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
return NULL;
}
@@ -919,12 +918,12 @@
}
for (size_t i = 0; i < count; i++) {
- const PMBTOKEN_PRETOKEN *pretoken =
- sk_PMBTOKEN_PRETOKEN_value(pretokens, i);
+ const TRUST_TOKEN_PRETOKEN *pretoken =
+ sk_TRUST_TOKEN_PRETOKEN_value(pretokens, i);
- uint8_t s[PMBTOKEN_NONCE_SIZE];
+ uint8_t s[TRUST_TOKEN_NONCE_SIZE];
EC_AFFINE Wp_affine, Wsp_affine;
- if (!CBS_copy_bytes(cbs, s, PMBTOKEN_NONCE_SIZE) ||
+ if (!CBS_copy_bytes(cbs, s, TRUST_TOKEN_NONCE_SIZE) ||
!cbs_get_prefixed_point(cbs, group, &Wp_affine, method->prefix_point) ||
!cbs_get_prefixed_point(cbs, group, &Wsp_affine,
method->prefix_point)) {
@@ -963,9 +962,10 @@
// above.
CBB token_cbb;
size_t point_len = 1 + 2 * BN_num_bytes(&group->field);
- if (!CBB_init(&token_cbb, 4 + PMBTOKEN_NONCE_SIZE + 3 * (2 + point_len)) ||
+ if (!CBB_init(&token_cbb,
+ 4 + TRUST_TOKEN_NONCE_SIZE + 3 * (2 + point_len)) ||
!CBB_add_u32(&token_cbb, key_id) ||
- !CBB_add_bytes(&token_cbb, pretoken->t, PMBTOKEN_NONCE_SIZE) ||
+ !CBB_add_bytes(&token_cbb, pretoken->t, TRUST_TOKEN_NONCE_SIZE) ||
!cbb_add_prefixed_point(&token_cbb, group, &affines[0],
method->prefix_point) ||
!cbb_add_prefixed_point(&token_cbb, group, &affines[1],
@@ -1034,15 +1034,15 @@
}
static int pmbtoken_read(const PMBTOKEN_METHOD *method,
- const PMBTOKEN_ISSUER_KEY *key,
- uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+ const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t *out_private_metadata, const uint8_t *token,
size_t token_len) {
const EC_GROUP *group = method->group;
CBS cbs;
CBS_init(&cbs, token, token_len);
EC_AFFINE S, W, Ws;
- if (!CBS_copy_bytes(&cbs, out_nonce, PMBTOKEN_NONCE_SIZE) ||
+ if (!CBS_copy_bytes(&cbs, out_nonce, TRUST_TOKEN_NONCE_SIZE) ||
!cbs_get_prefixed_point(&cbs, group, &S, method->prefix_point) ||
!cbs_get_prefixed_point(&cbs, group, &W, method->prefix_point) ||
!cbs_get_prefixed_point(&cbs, group, &Ws, method->prefix_point) ||
@@ -1101,15 +1101,15 @@
// PMBTokens experiment v1.
static int pmbtoken_exp1_hash_t(const EC_GROUP *group, EC_RAW_POINT *out,
- const uint8_t t[PMBTOKEN_NONCE_SIZE]) {
+ const uint8_t t[TRUST_TOKEN_NONCE_SIZE]) {
const uint8_t kHashTLabel[] = "PMBTokens Experiment V1 HashT";
return ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
- group, out, kHashTLabel, sizeof(kHashTLabel), t, PMBTOKEN_NONCE_SIZE);
+ group, out, kHashTLabel, sizeof(kHashTLabel), t, TRUST_TOKEN_NONCE_SIZE);
}
static int pmbtoken_exp1_hash_s(const EC_GROUP *group, EC_RAW_POINT *out,
const EC_AFFINE *t,
- const uint8_t s[PMBTOKEN_NONCE_SIZE]) {
+ const uint8_t s[TRUST_TOKEN_NONCE_SIZE]) {
const uint8_t kHashSLabel[] = "PMBTokens Experiment V1 HashS";
int ret = 0;
CBB cbb;
@@ -1117,7 +1117,7 @@
size_t len;
if (!CBB_init(&cbb, 0) ||
!point_to_cbb(&cbb, group, t) ||
- !CBB_add_bytes(&cbb, s, PMBTOKEN_NONCE_SIZE) ||
+ !CBB_add_bytes(&cbb, s, TRUST_TOKEN_NONCE_SIZE) ||
!CBB_finish(&cbb, &buf, &len) ||
!ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
group, out, kHashSLabel, sizeof(kHashSLabel), buf, len)) {
@@ -1182,7 +1182,7 @@
return pmbtoken_generate_key(&pmbtoken_exp1_method, out_private, out_public);
}
-int pmbtoken_exp1_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+int pmbtoken_exp1_client_key_from_bytes(TRUST_TOKEN_CLIENT_KEY *key,
const uint8_t *in, size_t len) {
if (!pmbtoken_exp1_init_method()) {
return 0;
@@ -1190,7 +1190,7 @@
return pmbtoken_client_key_from_bytes(&pmbtoken_exp1_method, key, in, len);
}
-int pmbtoken_exp1_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+int pmbtoken_exp1_issuer_key_from_bytes(TRUST_TOKEN_ISSUER_KEY *key,
const uint8_t *in, size_t len) {
if (!pmbtoken_exp1_init_method()) {
return 0;
@@ -1198,14 +1198,14 @@
return pmbtoken_issuer_key_from_bytes(&pmbtoken_exp1_method, key, in, len);
}
-STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp1_blind(CBB *cbb, size_t count) {
+STACK_OF(TRUST_TOKEN_PRETOKEN) * pmbtoken_exp1_blind(CBB *cbb, size_t count) {
if (!pmbtoken_exp1_init_method()) {
return NULL;
}
return pmbtoken_blind(&pmbtoken_exp1_method, cbb, count);
}
-int pmbtoken_exp1_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+int pmbtoken_exp1_sign(const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
size_t num_requested, size_t num_to_issue,
uint8_t private_metadata) {
if (!pmbtoken_exp1_init_method()) {
@@ -1216,8 +1216,8 @@
}
STACK_OF(TRUST_TOKEN) *
- pmbtoken_exp1_unblind(const PMBTOKEN_CLIENT_KEY *key,
- const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+ pmbtoken_exp1_unblind(const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens,
CBS *cbs, size_t count, uint32_t key_id) {
if (!pmbtoken_exp1_init_method()) {
return NULL;
@@ -1226,8 +1226,8 @@
key_id);
}
-int pmbtoken_exp1_read(const PMBTOKEN_ISSUER_KEY *key,
- uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+int pmbtoken_exp1_read(const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t *out_private_metadata, const uint8_t *token,
size_t token_len) {
if (!pmbtoken_exp1_init_method()) {
@@ -1251,15 +1251,15 @@
// PMBTokens experiment v2.
static int pmbtoken_exp2_hash_t(const EC_GROUP *group, EC_RAW_POINT *out,
- const uint8_t t[PMBTOKEN_NONCE_SIZE]) {
+ const uint8_t t[TRUST_TOKEN_NONCE_SIZE]) {
const uint8_t kHashTLabel[] = "PMBTokens Experiment V2 HashT";
return ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
- group, out, kHashTLabel, sizeof(kHashTLabel), t, PMBTOKEN_NONCE_SIZE);
+ group, out, kHashTLabel, sizeof(kHashTLabel), t, TRUST_TOKEN_NONCE_SIZE);
}
static int pmbtoken_exp2_hash_s(const EC_GROUP *group, EC_RAW_POINT *out,
const EC_AFFINE *t,
- const uint8_t s[PMBTOKEN_NONCE_SIZE]) {
+ const uint8_t s[TRUST_TOKEN_NONCE_SIZE]) {
const uint8_t kHashSLabel[] = "PMBTokens Experiment V2 HashS";
int ret = 0;
CBB cbb;
@@ -1267,7 +1267,7 @@
size_t len;
if (!CBB_init(&cbb, 0) ||
!point_to_cbb(&cbb, group, t) ||
- !CBB_add_bytes(&cbb, s, PMBTOKEN_NONCE_SIZE) ||
+ !CBB_add_bytes(&cbb, s, TRUST_TOKEN_NONCE_SIZE) ||
!CBB_finish(&cbb, &buf, &len) ||
!ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
group, out, kHashSLabel, sizeof(kHashSLabel), buf, len)) {
@@ -1332,7 +1332,7 @@
return pmbtoken_generate_key(&pmbtoken_exp2_method, out_private, out_public);
}
-int pmbtoken_exp2_client_key_from_bytes(PMBTOKEN_CLIENT_KEY *key,
+int pmbtoken_exp2_client_key_from_bytes(TRUST_TOKEN_CLIENT_KEY *key,
const uint8_t *in, size_t len) {
if (!pmbtoken_exp2_init_method()) {
return 0;
@@ -1340,7 +1340,7 @@
return pmbtoken_client_key_from_bytes(&pmbtoken_exp2_method, key, in, len);
}
-int pmbtoken_exp2_issuer_key_from_bytes(PMBTOKEN_ISSUER_KEY *key,
+int pmbtoken_exp2_issuer_key_from_bytes(TRUST_TOKEN_ISSUER_KEY *key,
const uint8_t *in, size_t len) {
if (!pmbtoken_exp2_init_method()) {
return 0;
@@ -1348,14 +1348,14 @@
return pmbtoken_issuer_key_from_bytes(&pmbtoken_exp2_method, key, in, len);
}
-STACK_OF(PMBTOKEN_PRETOKEN) * pmbtoken_exp2_blind(CBB *cbb, size_t count) {
+STACK_OF(TRUST_TOKEN_PRETOKEN) * pmbtoken_exp2_blind(CBB *cbb, size_t count) {
if (!pmbtoken_exp2_init_method()) {
return NULL;
}
return pmbtoken_blind(&pmbtoken_exp2_method, cbb, count);
}
-int pmbtoken_exp2_sign(const PMBTOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+int pmbtoken_exp2_sign(const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
size_t num_requested, size_t num_to_issue,
uint8_t private_metadata) {
if (!pmbtoken_exp2_init_method()) {
@@ -1366,8 +1366,8 @@
}
STACK_OF(TRUST_TOKEN) *
- pmbtoken_exp2_unblind(const PMBTOKEN_CLIENT_KEY *key,
- const STACK_OF(PMBTOKEN_PRETOKEN) * pretokens,
+ pmbtoken_exp2_unblind(const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens,
CBS *cbs, size_t count, uint32_t key_id) {
if (!pmbtoken_exp2_init_method()) {
return NULL;
@@ -1376,8 +1376,8 @@
key_id);
}
-int pmbtoken_exp2_read(const PMBTOKEN_ISSUER_KEY *key,
- uint8_t out_nonce[PMBTOKEN_NONCE_SIZE],
+int pmbtoken_exp2_read(const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t *out_private_metadata, const uint8_t *token,
size_t token_len) {
if (!pmbtoken_exp2_init_method()) {
diff --git a/src/crypto/trust_token/trust_token.c b/src/crypto/trust_token/trust_token.c
index fea619e..a4891d8 100644
--- a/src/crypto/trust_token/trust_token.c
+++ b/src/crypto/trust_token/trust_token.c
@@ -43,15 +43,15 @@
return &kMethod;
}
-const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_pp(void) {
+const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_voprf(void) {
static const TRUST_TOKEN_METHOD kMethod = {
- pmbtoken_exp2_generate_key,
- pmbtoken_exp2_client_key_from_bytes,
- pmbtoken_exp2_issuer_key_from_bytes,
- pmbtoken_exp2_blind,
- pmbtoken_exp2_sign,
- pmbtoken_exp2_unblind,
- pmbtoken_exp2_read,
+ voprf_exp2_generate_key,
+ voprf_exp2_client_key_from_bytes,
+ voprf_exp2_issuer_key_from_bytes,
+ voprf_exp2_blind,
+ voprf_exp2_sign,
+ voprf_exp2_unblind,
+ voprf_exp2_read,
0, /* has_private_metadata */
6, /* max_keys */
0, /* has_srr */
@@ -75,6 +75,10 @@
return &kMethod;
}
+void TRUST_TOKEN_PRETOKEN_free(TRUST_TOKEN_PRETOKEN *pretoken) {
+ OPENSSL_free(pretoken);
+}
+
TRUST_TOKEN *TRUST_TOKEN_new(const uint8_t *data, size_t len) {
TRUST_TOKEN *ret = OPENSSL_malloc(sizeof(TRUST_TOKEN));
if (ret == NULL) {
@@ -160,7 +164,7 @@
return;
}
EVP_PKEY_free(ctx->srr_key);
- sk_PMBTOKEN_PRETOKEN_pop_free(ctx->pretokens, PMBTOKEN_PRETOKEN_free);
+ sk_TRUST_TOKEN_PRETOKEN_pop_free(ctx->pretokens, TRUST_TOKEN_PRETOKEN_free);
OPENSSL_free(ctx);
}
@@ -206,7 +210,7 @@
int ret = 0;
CBB request;
- STACK_OF(PMBTOKEN_PRETOKEN) *pretokens = NULL;
+ STACK_OF(TRUST_TOKEN_PRETOKEN) *pretokens = NULL;
if (!CBB_init(&request, 0) ||
!CBB_add_u16(&request, count)) {
OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
@@ -223,14 +227,14 @@
goto err;
}
- sk_PMBTOKEN_PRETOKEN_pop_free(ctx->pretokens, PMBTOKEN_PRETOKEN_free);
+ sk_TRUST_TOKEN_PRETOKEN_pop_free(ctx->pretokens, TRUST_TOKEN_PRETOKEN_free);
ctx->pretokens = pretokens;
pretokens = NULL;
ret = 1;
err:
CBB_cleanup(&request);
- sk_PMBTOKEN_PRETOKEN_pop_free(pretokens, PMBTOKEN_PRETOKEN_free);
+ sk_TRUST_TOKEN_PRETOKEN_pop_free(pretokens, TRUST_TOKEN_PRETOKEN_free);
return ret;
}
@@ -264,7 +268,7 @@
return NULL;
}
- if (count > sk_PMBTOKEN_PRETOKEN_num(ctx->pretokens)) {
+ if (count > sk_TRUST_TOKEN_PRETOKEN_num(ctx->pretokens)) {
OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
return NULL;
}
@@ -281,7 +285,7 @@
return NULL;
}
- sk_PMBTOKEN_PRETOKEN_pop_free(ctx->pretokens, PMBTOKEN_PRETOKEN_free);
+ sk_TRUST_TOKEN_PRETOKEN_pop_free(ctx->pretokens, TRUST_TOKEN_PRETOKEN_free);
ctx->pretokens = NULL;
*out_key_index = key_index;
@@ -315,30 +319,39 @@
size_t response_len) {
CBS in, srr, sig;
CBS_init(&in, response, response_len);
+ if (!ctx->method->has_srr) {
+ if (!CBS_stow(&in, out_rr, out_rr_len)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+
+ *out_sig = NULL;
+ *out_sig_len = 0;
+ return 1;
+ }
+
if (!CBS_get_u16_length_prefixed(&in, &srr) ||
- !CBS_get_u16_length_prefixed(&in, &sig)) {
+ !CBS_get_u16_length_prefixed(&in, &sig) ||
+ CBS_len(&in) != 0) {
OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_ERROR);
return 0;
}
- if (ctx->method->has_srr) {
- if (ctx->srr_key == NULL) {
- OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_NO_SRR_KEY_CONFIGURED);
- return 0;
- }
+ if (ctx->srr_key == NULL) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_NO_SRR_KEY_CONFIGURED);
+ return 0;
+ }
- EVP_MD_CTX md_ctx;
- EVP_MD_CTX_init(&md_ctx);
- int sig_ok =
- EVP_DigestVerifyInit(&md_ctx, NULL, NULL, NULL, ctx->srr_key) &&
- EVP_DigestVerify(&md_ctx, CBS_data(&sig), CBS_len(&sig), CBS_data(&srr),
- CBS_len(&srr));
- EVP_MD_CTX_cleanup(&md_ctx);
+ EVP_MD_CTX md_ctx;
+ EVP_MD_CTX_init(&md_ctx);
+ int sig_ok = EVP_DigestVerifyInit(&md_ctx, NULL, NULL, NULL, ctx->srr_key) &&
+ EVP_DigestVerify(&md_ctx, CBS_data(&sig), CBS_len(&sig),
+ CBS_data(&srr), CBS_len(&srr));
+ EVP_MD_CTX_cleanup(&md_ctx);
- if (!sig_ok) {
- OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_SRR_SIGNATURE_ERROR);
- return 0;
- }
+ if (!sig_ok) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_SRR_SIGNATURE_ERROR);
+ return 0;
}
uint8_t *srr_buf = NULL, *sig_buf = NULL;
@@ -588,7 +601,7 @@
const struct trust_token_issuer_key_st *key =
trust_token_issuer_get_key(ctx, public_metadata);
- uint8_t nonce[PMBTOKEN_NONCE_SIZE];
+ uint8_t nonce[TRUST_TOKEN_NONCE_SIZE];
if (key == NULL ||
!ctx->method->read(&key->key, nonce, &private_metadata,
CBS_data(&token_cbs), CBS_len(&token_cbs))) {
@@ -672,16 +685,56 @@
goto err;
}
- CBB child;
- uint8_t *ptr;
- if (!CBB_add_u16_length_prefixed(&response, &child) ||
- !CBB_add_bytes(&child, srr_buf, srr_len) ||
- !CBB_add_u16_length_prefixed(&response, &child) ||
- !CBB_reserve(&child, &ptr, sig_len) ||
- !EVP_DigestSign(&md_ctx, ptr, &sig_len, srr_buf, srr_len) ||
- !CBB_did_write(&child, sig_len)) {
- OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
- goto err;
+ // Merge SRR and Signature into single string.
+ // TODO(svaldez): Expose API to construct this from the caller.
+ if (!ctx->method->has_srr) {
+ static const char kSRRHeader[] = "body=:";
+ static const char kSRRSplit[] = ":, signature=:";
+ static const char kSRREnd[] = ":";
+
+ size_t srr_b64_len, sig_b64_len;
+ if (!EVP_EncodedLength(&srr_b64_len, srr_len) ||
+ !EVP_EncodedLength(&sig_b64_len, sig_len)) {
+ goto err;
+ }
+
+ sig_buf = OPENSSL_malloc(sig_len);
+ uint8_t *srr_b64_buf = OPENSSL_malloc(srr_b64_len);
+ uint8_t *sig_b64_buf = OPENSSL_malloc(sig_b64_len);
+ if (!sig_buf ||
+ !srr_b64_buf ||
+ !sig_b64_buf ||
+ !EVP_DigestSign(&md_ctx, sig_buf, &sig_len, srr_buf, srr_len) ||
+ !CBB_add_bytes(&response, (const uint8_t *)kSRRHeader,
+ strlen(kSRRHeader)) ||
+ !CBB_add_bytes(&response, srr_b64_buf,
+ EVP_EncodeBlock(srr_b64_buf, srr_buf, srr_len)) ||
+ !CBB_add_bytes(&response, (const uint8_t *)kSRRSplit,
+ strlen(kSRRSplit)) ||
+ !CBB_add_bytes(&response, sig_b64_buf,
+ EVP_EncodeBlock(sig_b64_buf, sig_buf, sig_len)) ||
+ !CBB_add_bytes(&response, (const uint8_t *)kSRREnd, strlen(kSRREnd))) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ OPENSSL_free(srr_b64_buf);
+ OPENSSL_free(sig_b64_buf);
+ goto err;
+ }
+
+ OPENSSL_free(srr_b64_buf);
+ OPENSSL_free(sig_b64_buf);
+ } else {
+ CBB child;
+ uint8_t *ptr;
+ if (!CBB_add_u16_length_prefixed(&response, &child) ||
+ !CBB_add_bytes(&child, srr_buf, srr_len) ||
+ !CBB_add_u16_length_prefixed(&response, &child) ||
+ !CBB_reserve(&child, &ptr, sig_len) ||
+ !EVP_DigestSign(&md_ctx, ptr, &sig_len, srr_buf, srr_len) ||
+ !CBB_did_write(&child, sig_len) ||
+ !CBB_flush(&response)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
}
if (!CBS_stow(&client_data, &client_data_buf, &client_data_len) ||
@@ -690,7 +743,7 @@
goto err;
}
- TRUST_TOKEN *token = TRUST_TOKEN_new(nonce, PMBTOKEN_NONCE_SIZE);
+ TRUST_TOKEN *token = TRUST_TOKEN_new(nonce, TRUST_TOKEN_NONCE_SIZE);
if (token == NULL) {
OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
goto err;
diff --git a/src/crypto/trust_token/trust_token_test.cc b/src/crypto/trust_token/trust_token_test.cc
index b282500..7f9b79e 100644
--- a/src/crypto/trust_token/trust_token_test.cc
+++ b/src/crypto/trust_token/trust_token_test.cc
@@ -56,16 +56,16 @@
ASSERT_EQ(301u, pub_key_len);
}
-TEST(TrustTokenTest, KeyGenExp2PP) {
+TEST(TrustTokenTest, KeyGenExp2VOPRF) {
uint8_t priv_key[TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE];
uint8_t pub_key[TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE];
size_t priv_key_len, pub_key_len;
ASSERT_TRUE(TRUST_TOKEN_generate_key(
- TRUST_TOKEN_experiment_v2_pp(), priv_key, &priv_key_len,
+ TRUST_TOKEN_experiment_v2_voprf(), priv_key, &priv_key_len,
TRUST_TOKEN_MAX_PRIVATE_KEY_SIZE, pub_key, &pub_key_len,
TRUST_TOKEN_MAX_PUBLIC_KEY_SIZE, 0x0001));
- ASSERT_EQ(292u, priv_key_len);
- ASSERT_EQ(295u, pub_key_len);
+ ASSERT_EQ(52u, priv_key_len);
+ ASSERT_EQ(101u, pub_key_len);
}
TEST(TrustTokenTest, KeyGenExp2PMB) {
@@ -127,7 +127,7 @@
static std::vector<const TRUST_TOKEN_METHOD *> AllMethods() {
return {
TRUST_TOKEN_experiment_v1(),
- TRUST_TOKEN_experiment_v2_pp(),
+ TRUST_TOKEN_experiment_v2_voprf(),
TRUST_TOKEN_experiment_v2_pmb()
};
}
@@ -389,10 +389,14 @@
Bytes(client_data, client_data_len));
resp_len = 10;
+ // If the protocol doesn't use SRRs, TRUST_TOKEN_CLIENT_finish_redemtpion
+ // leaves all SRR validation to the caller.
uint8_t *srr = NULL, *sig = NULL;
size_t srr_len, sig_len;
- ASSERT_FALSE(TRUST_TOKEN_CLIENT_finish_redemption(
- client.get(), &srr, &srr_len, &sig, &sig_len, redeem_resp, resp_len));
+ bool expect_failure = !method()->has_srr;
+ ASSERT_EQ(expect_failure, TRUST_TOKEN_CLIENT_finish_redemption(
+ client.get(), &srr, &srr_len, &sig, &sig_len,
+ redeem_resp, resp_len));
bssl::UniquePtr<uint8_t> free_srr(srr);
bssl::UniquePtr<uint8_t> free_sig(sig);
}
@@ -534,6 +538,27 @@
bssl::UniquePtr<uint8_t> free_srr(srr);
bssl::UniquePtr<uint8_t> free_sig(sig);
+ if (!method()->has_srr) {
+ size_t b64_len;
+ ASSERT_TRUE(EVP_EncodedLength(&b64_len, sizeof(kExpectedSRR) - 1));
+ b64_len -= 1;
+
+ const char kSRRHeader[] = "body=:";
+ ASSERT_LT(sizeof(kSRRHeader) - 1 + b64_len, srr_len);
+
+ ASSERT_EQ(Bytes(kSRRHeader, sizeof(kSRRHeader) - 1),
+ Bytes(srr, sizeof(kSRRHeader) - 1));
+ uint8_t *decoded_srr =
+ (uint8_t *)OPENSSL_malloc(sizeof(kExpectedSRR) + 1);
+ ASSERT_TRUE(decoded_srr);
+ ASSERT_LT(
+ int(sizeof(kExpectedSRR) - 1),
+ EVP_DecodeBlock(decoded_srr, srr + sizeof(kSRRHeader) - 1, b64_len));
+ srr = decoded_srr;
+ srr_len = sizeof(kExpectedSRR) - 1;
+ free_srr.reset(srr);
+ }
+
const uint8_t kTokenHashDSTLabel[] = "TrustTokenV0 TokenHash";
uint8_t token_hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha_ctx;
@@ -547,8 +572,8 @@
uint8_t decode_private_metadata;
ASSERT_TRUE(TRUST_TOKEN_decode_private_metadata(
- method(), &decode_private_metadata, metadata_key, sizeof(metadata_key),
- token_hash, sizeof(token_hash), srr[27]));
+ method(), &decode_private_metadata, metadata_key,
+ sizeof(metadata_key), token_hash, sizeof(token_hash), srr[27]));
ASSERT_EQ(srr[18], public_metadata());
ASSERT_EQ(decode_private_metadata, private_metadata());
@@ -623,10 +648,13 @@
const EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
size_t token_length =
- PMBTOKEN_NONCE_SIZE + 2 * (1 + 2 * BN_num_bytes(&group->field));
+ TRUST_TOKEN_NONCE_SIZE + 2 * (1 + 2 * BN_num_bytes(&group->field));
if (method() == TRUST_TOKEN_experiment_v1()) {
token_length += 4;
}
+ if (method() == TRUST_TOKEN_experiment_v2_voprf()) {
+ token_length = 1 + 2 * BN_num_bytes(&group->field);
+ }
for (size_t i = 0; i < count; i++) {
ASSERT_TRUE(CBB_add_bytes(bad_response.get(), CBS_data(&real_response),
token_length));
@@ -683,10 +711,13 @@
const EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
size_t token_length =
- PMBTOKEN_NONCE_SIZE + 2 * (1 + 2 * BN_num_bytes(&group->field));
+ TRUST_TOKEN_NONCE_SIZE + 2 * (1 + 2 * BN_num_bytes(&group->field));
if (method() == TRUST_TOKEN_experiment_v1()) {
token_length += 4;
}
+ if (method() == TRUST_TOKEN_experiment_v2_voprf()) {
+ token_length = 1 + 2 * BN_num_bytes(&group->field);
+ }
for (size_t i = 0; i < count; i++) {
ASSERT_TRUE(CBB_add_bytes(bad_response.get(), CBS_data(&real_response),
token_length));
@@ -734,7 +765,11 @@
};
TEST_P(TrustTokenBadKeyTest, BadKey) {
- if (!method()->has_private_metadata && private_metadata()) {
+ // For versions without private metadata, only corruptions of 'xs' (the 4th
+ // entry in |scalars| below) result in a bad key, as the other scalars are
+ // unused internally.
+ if (!method()->has_private_metadata &&
+ (private_metadata() || corrupted_key() != 4)) {
return;
}
diff --git a/src/crypto/trust_token/voprf.c b/src/crypto/trust_token/voprf.c
new file mode 100644
index 0000000..f93ee9c
--- /dev/null
+++ b/src/crypto/trust_token/voprf.c
@@ -0,0 +1,766 @@
+/* Copyright (c) 2020, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <openssl/trust_token.h>
+
+#include <openssl/bn.h>
+#include <openssl/bytestring.h>
+#include <openssl/ec.h>
+#include <openssl/err.h>
+#include <openssl/mem.h>
+#include <openssl/nid.h>
+#include <openssl/rand.h>
+
+#include "../ec_extra/internal.h"
+#include "../fipsmodule/ec/internal.h"
+
+#include "internal.h"
+
+
+typedef int (*hash_to_group_func_t)(const EC_GROUP *group, EC_RAW_POINT *out,
+ const uint8_t t[TRUST_TOKEN_NONCE_SIZE]);
+typedef int (*hash_to_scalar_func_t)(const EC_GROUP *group, EC_SCALAR *out,
+ uint8_t *buf, size_t len);
+
+typedef struct {
+ const EC_GROUP *group;
+
+ // hash_to_group implements the HashToGroup operation for VOPRFs. It returns
+ // one on success and zero on error.
+ hash_to_group_func_t hash_to_group;
+ // hash_to_scalar implements the HashToScalar operation for VOPRFs. It returns
+ // one on success and zero on error.
+ hash_to_scalar_func_t hash_to_scalar;
+} VOPRF_METHOD;
+
+static const uint8_t kDefaultAdditionalData[32] = {0};
+
+static int voprf_init_method(VOPRF_METHOD *method, int curve_nid,
+ hash_to_group_func_t hash_to_group,
+ hash_to_scalar_func_t hash_to_scalar) {
+ method->group = EC_GROUP_new_by_curve_name(curve_nid);
+ if (method->group == NULL) {
+ return 0;
+ }
+
+ method->hash_to_group = hash_to_group;
+ method->hash_to_scalar = hash_to_scalar;
+
+ return 1;
+}
+
+static int cbb_add_point(CBB *out, const EC_GROUP *group,
+ const EC_AFFINE *point) {
+ size_t len =
+ ec_point_to_bytes(group, point, POINT_CONVERSION_UNCOMPRESSED, NULL, 0);
+ if (len == 0) {
+ return 0;
+ }
+
+ uint8_t *p;
+ return CBB_add_space(out, &p, len) &&
+ ec_point_to_bytes(group, point, POINT_CONVERSION_UNCOMPRESSED, p,
+ len) == len &&
+ CBB_flush(out);
+}
+
+static int cbs_get_point(CBS *cbs, const EC_GROUP *group, EC_AFFINE *out) {
+ CBS child;
+ size_t plen = 1 + 2 * BN_num_bytes(&group->field);
+ if (!CBS_get_bytes(cbs, &child, plen) ||
+ !ec_point_from_uncompressed(group, out, CBS_data(&child),
+ CBS_len(&child))) {
+ return 0;
+ }
+ return 1;
+}
+
+static int scalar_to_cbb(CBB *out, const EC_GROUP *group,
+ const EC_SCALAR *scalar) {
+ uint8_t *buf;
+ size_t scalar_len = BN_num_bytes(&group->order);
+ if (!CBB_add_space(out, &buf, scalar_len)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ ec_scalar_to_bytes(group, buf, &scalar_len, scalar);
+ return 1;
+}
+
+static int scalar_from_cbs(CBS *cbs, const EC_GROUP *group, EC_SCALAR *out) {
+ size_t scalar_len = BN_num_bytes(&group->order);
+ CBS tmp;
+ if (!CBS_get_bytes(cbs, &tmp, scalar_len)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ return 0;
+ }
+
+ ec_scalar_from_bytes(group, out, CBS_data(&tmp), CBS_len(&tmp));
+ return 1;
+}
+
+static int voprf_generate_key(const VOPRF_METHOD *method, CBB *out_private,
+ CBB *out_public) {
+ const EC_GROUP *group = method->group;
+ EC_RAW_POINT pub;
+ EC_SCALAR priv;
+ EC_AFFINE pub_affine;
+ if (!ec_random_nonzero_scalar(group, &priv, kDefaultAdditionalData) ||
+ !ec_point_mul_scalar_base(group, &pub, &priv) ||
+ !ec_jacobian_to_affine(group, &pub_affine, &pub)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_KEYGEN_FAILURE);
+ return 0;
+ }
+
+ if (!scalar_to_cbb(out_private, group, &priv) ||
+ !cbb_add_point(out_public, group, &pub_affine)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_BUFFER_TOO_SMALL);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int voprf_client_key_from_bytes(const VOPRF_METHOD *method,
+ TRUST_TOKEN_CLIENT_KEY *key,
+ const uint8_t *in, size_t len) {
+ const EC_GROUP *group = method->group;
+ if (!ec_point_from_uncompressed(group, &key->pubs, in, len)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int voprf_issuer_key_from_bytes(const VOPRF_METHOD *method,
+ TRUST_TOKEN_ISSUER_KEY *key,
+ const uint8_t *in, size_t len) {
+ const EC_GROUP *group = method->group;
+ if (!ec_scalar_from_bytes(group, &key->xs, in, len)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ return 0;
+ }
+
+ // Recompute the public key.
+ EC_RAW_POINT pub;
+ if (!ec_point_mul_scalar_base(group, &pub, &key->xs) ||
+ !ec_jacobian_to_affine(group, &key->pubs, &pub)) {
+ return 0;
+ }
+
+ return 1;
+}
+
+static STACK_OF(TRUST_TOKEN_PRETOKEN) *
+ voprf_blind(const VOPRF_METHOD *method, CBB *cbb, size_t count) {
+ const EC_GROUP *group = method->group;
+ STACK_OF(TRUST_TOKEN_PRETOKEN) *pretokens =
+ sk_TRUST_TOKEN_PRETOKEN_new_null();
+ if (pretokens == NULL) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ for (size_t i = 0; i < count; i++) {
+ // Insert |pretoken| into |pretokens| early to simplify error-handling.
+ TRUST_TOKEN_PRETOKEN *pretoken =
+ OPENSSL_malloc(sizeof(TRUST_TOKEN_PRETOKEN));
+ if (pretoken == NULL ||
+ !sk_TRUST_TOKEN_PRETOKEN_push(pretokens, pretoken)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ TRUST_TOKEN_PRETOKEN_free(pretoken);
+ goto err;
+ }
+
+ RAND_bytes(pretoken->t, sizeof(pretoken->t));
+
+ // We sample r in Montgomery form to simplify inverting.
+ EC_SCALAR r;
+ if (!ec_random_nonzero_scalar(group, &r,
+ kDefaultAdditionalData)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ // pretoken->r is rinv.
+ ec_scalar_inv0_montgomery(group, &pretoken->r, &r);
+ // Convert both out of Montgomery form.
+ ec_scalar_from_montgomery(group, &r, &r);
+ ec_scalar_from_montgomery(group, &pretoken->r, &pretoken->r);
+
+ // Tp is the blinded token in the VOPRF protocol.
+ EC_RAW_POINT P, Tp;
+ if (!method->hash_to_group(group, &P, pretoken->t) ||
+ !ec_point_mul_scalar(group, &Tp, &P, &r) ||
+ !ec_jacobian_to_affine(group, &pretoken->Tp, &Tp)) {
+ goto err;
+ }
+
+ if (!cbb_add_point(cbb, group, &pretoken->Tp)) {
+ goto err;
+ }
+ }
+
+ return pretokens;
+
+err:
+ sk_TRUST_TOKEN_PRETOKEN_pop_free(pretokens, TRUST_TOKEN_PRETOKEN_free);
+ return NULL;
+}
+
+static int hash_to_scalar_dleq(const VOPRF_METHOD *method, EC_SCALAR *out,
+ const EC_AFFINE *X, const EC_AFFINE *T,
+ const EC_AFFINE *W, const EC_AFFINE *K0,
+ const EC_AFFINE *K1) {
+ static const uint8_t kDLEQLabel[] = "DLEQ";
+
+ int ok = 0;
+ CBB cbb;
+ CBB_zero(&cbb);
+ uint8_t *buf = NULL;
+ size_t len;
+ if (!CBB_init(&cbb, 0) ||
+ !CBB_add_bytes(&cbb, kDLEQLabel, sizeof(kDLEQLabel)) ||
+ !cbb_add_point(&cbb, method->group, X) ||
+ !cbb_add_point(&cbb, method->group, T) ||
+ !cbb_add_point(&cbb, method->group, W) ||
+ !cbb_add_point(&cbb, method->group, K0) ||
+ !cbb_add_point(&cbb, method->group, K1) ||
+ !CBB_finish(&cbb, &buf, &len) ||
+ !method->hash_to_scalar(method->group, out, buf, len)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ ok = 1;
+
+err:
+ CBB_cleanup(&cbb);
+ OPENSSL_free(buf);
+ return ok;
+}
+
+static int hash_to_scalar_batch(const VOPRF_METHOD *method, EC_SCALAR *out,
+ const CBB *points, size_t index) {
+ static const uint8_t kDLEQBatchLabel[] = "DLEQ BATCH";
+ if (index > 0xffff) {
+ // The protocol supports only two-byte batches.
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+ return 0;
+ }
+
+ int ok = 0;
+ CBB cbb;
+ CBB_zero(&cbb);
+ uint8_t *buf = NULL;
+ size_t len;
+ if (!CBB_init(&cbb, 0) ||
+ !CBB_add_bytes(&cbb, kDLEQBatchLabel, sizeof(kDLEQBatchLabel)) ||
+ !CBB_add_bytes(&cbb, CBB_data(points), CBB_len(points)) ||
+ !CBB_add_u16(&cbb, (uint16_t)index) ||
+ !CBB_finish(&cbb, &buf, &len) ||
+ !method->hash_to_scalar(method->group, out, buf, len)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ ok = 1;
+
+err:
+ CBB_cleanup(&cbb);
+ OPENSSL_free(buf);
+ return ok;
+}
+
+static int dleq_generate(const VOPRF_METHOD *method, CBB *cbb,
+ const TRUST_TOKEN_ISSUER_KEY *priv,
+ const EC_RAW_POINT *T, const EC_RAW_POINT *W) {
+ const EC_GROUP *group = method->group;
+
+ enum {
+ idx_T,
+ idx_W,
+ idx_k0,
+ idx_k1,
+ num_idx,
+ };
+ EC_RAW_POINT jacobians[num_idx];
+
+ // Setup the DLEQ proof.
+ EC_SCALAR r;
+ if (// r <- Zp
+ !ec_random_nonzero_scalar(group, &r, kDefaultAdditionalData) ||
+ // k0;k1 = r*(G;T)
+ !ec_point_mul_scalar_base(group, &jacobians[idx_k0], &r) ||
+ !ec_point_mul_scalar(group, &jacobians[idx_k1], T, &r)) {
+ return 0;
+ }
+
+ EC_AFFINE affines[num_idx];
+ jacobians[idx_T] = *T;
+ jacobians[idx_W] = *W;
+ if (!ec_jacobian_to_affine_batch(group, affines, jacobians, num_idx)) {
+ return 0;
+ }
+
+ // Compute c = Hc(...).
+ EC_SCALAR c;
+ if (!hash_to_scalar_dleq(method, &c, &priv->pubs, &affines[idx_T],
+ &affines[idx_W], &affines[idx_k0],
+ &affines[idx_k1])) {
+ return 0;
+ }
+
+
+ EC_SCALAR c_mont;
+ ec_scalar_to_montgomery(group, &c_mont, &c);
+
+ // u = r + c*xs
+ EC_SCALAR u;
+ ec_scalar_mul_montgomery(group, &u, &priv->xs, &c_mont);
+ ec_scalar_add(group, &u, &r, &u);
+
+ // Store DLEQ proof in transcript.
+ if (!scalar_to_cbb(cbb, group, &c) ||
+ !scalar_to_cbb(cbb, group, &u)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int mul_public_2(const EC_GROUP *group, EC_RAW_POINT *out,
+ const EC_RAW_POINT *p0, const EC_SCALAR *scalar0,
+ const EC_RAW_POINT *p1, const EC_SCALAR *scalar1) {
+ EC_RAW_POINT points[2] = {*p0, *p1};
+ EC_SCALAR scalars[2] = {*scalar0, *scalar1};
+ return ec_point_mul_scalar_public_batch(group, out, /*g_scalar=*/NULL, points,
+ scalars, 2);
+}
+
+static int dleq_verify(const VOPRF_METHOD *method, CBS *cbs,
+ const TRUST_TOKEN_CLIENT_KEY *pub, const EC_RAW_POINT *T,
+ const EC_RAW_POINT *W) {
+ const EC_GROUP *group = method->group;
+
+
+ enum {
+ idx_T,
+ idx_W,
+ idx_k0,
+ idx_k1,
+ num_idx,
+ };
+ EC_RAW_POINT jacobians[num_idx];
+
+ // Decode the DLEQ proof.
+ EC_SCALAR c, u;
+ if (!scalar_from_cbs(cbs, group, &c) ||
+ !scalar_from_cbs(cbs, group, &u)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ return 0;
+ }
+
+ // k0;k1 = u*(G;T) - c*(pub;W)
+ EC_RAW_POINT pubs;
+ ec_affine_to_jacobian(group, &pubs, &pub->pubs);
+ EC_SCALAR minus_c;
+ ec_scalar_neg(group, &minus_c, &c);
+ if (!ec_point_mul_scalar_public(group, &jacobians[idx_k0], &u, &pubs,
+ &minus_c) ||
+ !mul_public_2(group, &jacobians[idx_k1], T, &u, W, &minus_c)) {
+ return 0;
+ }
+
+ // Check the DLEQ proof.
+ EC_AFFINE affines[num_idx];
+ jacobians[idx_T] = *T;
+ jacobians[idx_W] = *W;
+ if (!ec_jacobian_to_affine_batch(group, affines, jacobians, num_idx)) {
+ return 0;
+ }
+
+ // Compute c = Hc(...).
+ EC_SCALAR calculated;
+ if (!hash_to_scalar_dleq(method, &calculated, &pub->pubs, &affines[idx_T],
+ &affines[idx_W], &affines[idx_k0],
+ &affines[idx_k1])) {
+ return 0;
+ }
+
+ // c == calculated
+ if (!ec_scalar_equal_vartime(group, &c, &calculated)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_PROOF);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int voprf_sign(const VOPRF_METHOD *method,
+ const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+ size_t num_requested, size_t num_to_issue) {
+ const EC_GROUP *group = method->group;
+ if (num_requested < num_to_issue) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+
+ if (num_to_issue > ((size_t)-1) / sizeof(EC_RAW_POINT) ||
+ num_to_issue > ((size_t)-1) / sizeof(EC_SCALAR)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+ return 0;
+ }
+
+ int ret = 0;
+ EC_RAW_POINT *BTs = OPENSSL_malloc(num_to_issue * sizeof(EC_RAW_POINT));
+ EC_RAW_POINT *Zs = OPENSSL_malloc(num_to_issue * sizeof(EC_RAW_POINT));
+ EC_SCALAR *es = OPENSSL_malloc(num_to_issue * sizeof(EC_SCALAR));
+ CBB batch_cbb;
+ CBB_zero(&batch_cbb);
+ if (!BTs ||
+ !Zs ||
+ !es ||
+ !CBB_init(&batch_cbb, 0) ||
+ !cbb_add_point(&batch_cbb, method->group, &key->pubs)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ for (size_t i = 0; i < num_to_issue; i++) {
+ EC_AFFINE BT_affine, Z_affine;
+ EC_RAW_POINT BT, Z;
+ if (!cbs_get_point(cbs, group, &BT_affine)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ goto err;
+ }
+ ec_affine_to_jacobian(group, &BT, &BT_affine);
+ if (!ec_point_mul_scalar(group, &Z, &BT, &key->xs) ||
+ !ec_jacobian_to_affine(group, &Z_affine, &Z) ||
+ !cbb_add_point(cbb, group, &Z_affine)) {
+ goto err;
+ }
+
+ if (!cbb_add_point(&batch_cbb, group, &BT_affine) ||
+ !cbb_add_point(&batch_cbb, group, &Z_affine)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ BTs[i] = BT;
+ Zs[i] = Z;
+
+ if (!CBB_flush(cbb)) {
+ goto err;
+ }
+ }
+
+ // The DLEQ batching construction is described in appendix B of
+ // https://eprint.iacr.org/2020/072/20200324:214215. Note the additional
+ // computations all act on public inputs.
+ for (size_t i = 0; i < num_to_issue; i++) {
+ if (!hash_to_scalar_batch(method, &es[i], &batch_cbb, i)) {
+ goto err;
+ }
+ }
+
+ EC_RAW_POINT BT_batch, Z_batch;
+ if (!ec_point_mul_scalar_public_batch(group, &BT_batch,
+ /*g_scalar=*/NULL, BTs, es,
+ num_to_issue) ||
+ !ec_point_mul_scalar_public_batch(group, &Z_batch,
+ /*g_scalar=*/NULL, Zs, es,
+ num_to_issue)) {
+ goto err;
+ }
+
+ CBB proof;
+ if (!CBB_add_u16_length_prefixed(cbb, &proof) ||
+ !dleq_generate(method, &proof, key, &BT_batch, &Z_batch) ||
+ !CBB_flush(cbb)) {
+ goto err;
+ }
+
+ // Skip over any unused requests.
+ size_t point_len = 1 + 2 * BN_num_bytes(&group->field);
+ if (!CBS_skip(cbs, point_len * (num_requested - num_to_issue))) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ goto err;
+ }
+
+ ret = 1;
+
+err:
+ OPENSSL_free(BTs);
+ OPENSSL_free(Zs);
+ OPENSSL_free(es);
+ CBB_cleanup(&batch_cbb);
+ return ret;
+}
+
+static STACK_OF(TRUST_TOKEN) *
+ voprf_unblind(const VOPRF_METHOD *method, const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens, CBS *cbs,
+ size_t count, uint32_t key_id) {
+ const EC_GROUP *group = method->group;
+ if (count > sk_TRUST_TOKEN_PRETOKEN_num(pretokens)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ return NULL;
+ }
+
+ int ok = 0;
+ STACK_OF(TRUST_TOKEN) *ret = sk_TRUST_TOKEN_new_null();
+ if (ret == NULL) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ if (count > ((size_t)-1) / sizeof(EC_RAW_POINT) ||
+ count > ((size_t)-1) / sizeof(EC_SCALAR)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_OVERFLOW);
+ return 0;
+ }
+ EC_RAW_POINT *BTs = OPENSSL_malloc(count * sizeof(EC_RAW_POINT));
+ EC_RAW_POINT *Zs = OPENSSL_malloc(count * sizeof(EC_RAW_POINT));
+ EC_SCALAR *es = OPENSSL_malloc(count * sizeof(EC_SCALAR));
+ CBB batch_cbb;
+ CBB_zero(&batch_cbb);
+ if (!BTs ||
+ !Zs ||
+ !es ||
+ !CBB_init(&batch_cbb, 0) ||
+ !cbb_add_point(&batch_cbb, method->group, &key->pubs)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ for (size_t i = 0; i < count; i++) {
+ const TRUST_TOKEN_PRETOKEN *pretoken =
+ sk_TRUST_TOKEN_PRETOKEN_value(pretokens, i);
+
+ EC_AFFINE Z_affine;
+ if (!cbs_get_point(cbs, group, &Z_affine)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_DECODE_FAILURE);
+ goto err;
+ }
+
+ ec_affine_to_jacobian(group, &BTs[i], &pretoken->Tp);
+ ec_affine_to_jacobian(group, &Zs[i], &Z_affine);
+
+ if (!cbb_add_point(&batch_cbb, group, &pretoken->Tp) ||
+ !cbb_add_point(&batch_cbb, group, &Z_affine)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ // Unblind the token.
+ // pretoken->r is rinv.
+ EC_RAW_POINT N;
+ EC_AFFINE N_affine;
+ if (!ec_point_mul_scalar(group, &N, &Zs[i], &pretoken->r) ||
+ !ec_jacobian_to_affine(group, &N_affine, &N)) {
+ goto err;
+ }
+
+ // Serialize the token. Include |key_id| to avoid an extra copy in the layer
+ // above.
+ CBB token_cbb;
+ size_t point_len = 1 + 2 * BN_num_bytes(&group->field);
+ if (!CBB_init(&token_cbb, 4 + TRUST_TOKEN_NONCE_SIZE + (2 + point_len)) ||
+ !CBB_add_u32(&token_cbb, key_id) ||
+ !CBB_add_bytes(&token_cbb, pretoken->t, TRUST_TOKEN_NONCE_SIZE) ||
+ !cbb_add_point(&token_cbb, group, &N_affine) ||
+ !CBB_flush(&token_cbb)) {
+ CBB_cleanup(&token_cbb);
+ goto err;
+ }
+
+ TRUST_TOKEN *token =
+ TRUST_TOKEN_new(CBB_data(&token_cbb), CBB_len(&token_cbb));
+ CBB_cleanup(&token_cbb);
+ if (token == NULL ||
+ !sk_TRUST_TOKEN_push(ret, token)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_MALLOC_FAILURE);
+ TRUST_TOKEN_free(token);
+ goto err;
+ }
+ }
+
+ // The DLEQ batching construction is described in appendix B of
+ // https://eprint.iacr.org/2020/072/20200324:214215. Note the additional
+ // computations all act on public inputs.
+ for (size_t i = 0; i < count; i++) {
+ if (!hash_to_scalar_batch(method, &es[i], &batch_cbb, i)) {
+ goto err;
+ }
+ }
+
+ EC_RAW_POINT BT_batch, Z_batch;
+ if (!ec_point_mul_scalar_public_batch(group, &BT_batch,
+ /*g_scalar=*/NULL, BTs, es, count) ||
+ !ec_point_mul_scalar_public_batch(group, &Z_batch,
+ /*g_scalar=*/NULL, Zs, es, count)) {
+ goto err;
+ }
+
+ CBS proof;
+ if (!CBS_get_u16_length_prefixed(cbs, &proof) ||
+ !dleq_verify(method, &proof, key, &BT_batch, &Z_batch) ||
+ CBS_len(&proof) != 0) {
+ goto err;
+ }
+
+ ok = 1;
+
+err:
+ OPENSSL_free(BTs);
+ OPENSSL_free(Zs);
+ OPENSSL_free(es);
+ CBB_cleanup(&batch_cbb);
+ if (!ok) {
+ sk_TRUST_TOKEN_pop_free(ret, TRUST_TOKEN_free);
+ ret = NULL;
+ }
+ return ret;
+}
+
+static int voprf_read(const VOPRF_METHOD *method,
+ const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
+ const uint8_t *token, size_t token_len) {
+ const EC_GROUP *group = method->group;
+ CBS cbs;
+ CBS_init(&cbs, token, token_len);
+ EC_AFFINE Ws;
+ if (!CBS_copy_bytes(&cbs, out_nonce, TRUST_TOKEN_NONCE_SIZE) ||
+ !cbs_get_point(&cbs, group, &Ws) ||
+ CBS_len(&cbs) != 0) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_INVALID_TOKEN);
+ return 0;
+ }
+
+
+ EC_RAW_POINT T;
+ if (!method->hash_to_group(group, &T, out_nonce)) {
+ return 0;
+ }
+
+ EC_RAW_POINT Ws_calculated;
+ if (!ec_point_mul_scalar(group, &Ws_calculated, &T, &key->xs) ||
+ !ec_affine_jacobian_equal(group, &Ws, &Ws_calculated)) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, TRUST_TOKEN_R_BAD_VALIDITY_CHECK);
+ return 0;
+ }
+
+ return 1;
+}
+
+
+// VOPRF experiment v2.
+
+static int voprf_exp2_hash_to_group(const EC_GROUP *group, EC_RAW_POINT *out,
+ const uint8_t t[TRUST_TOKEN_NONCE_SIZE]) {
+ const uint8_t kHashTLabel[] = "TrustToken VOPRF Experiment V2 HashToGroup";
+ return ec_hash_to_curve_p384_xmd_sha512_sswu_draft07(
+ group, out, kHashTLabel, sizeof(kHashTLabel), t, TRUST_TOKEN_NONCE_SIZE);
+}
+
+static int voprf_exp2_hash_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
+ uint8_t *buf, size_t len) {
+ const uint8_t kHashCLabel[] = "TrustToken VOPRF Experiment V2 HashToScalar";
+ return ec_hash_to_scalar_p384_xmd_sha512_draft07(
+ group, out, kHashCLabel, sizeof(kHashCLabel), buf, len);
+}
+
+static int voprf_exp2_ok = 0;
+static VOPRF_METHOD voprf_exp2_method;
+static CRYPTO_once_t voprf_exp2_method_once = CRYPTO_ONCE_INIT;
+
+static void voprf_exp2_init_method_impl(void) {
+ voprf_exp2_ok =
+ voprf_init_method(&voprf_exp2_method, NID_secp384r1,
+ voprf_exp2_hash_to_group, voprf_exp2_hash_to_scalar);
+}
+
+static int voprf_exp2_init_method(void) {
+ CRYPTO_once(&voprf_exp2_method_once, voprf_exp2_init_method_impl);
+ if (!voprf_exp2_ok) {
+ OPENSSL_PUT_ERROR(TRUST_TOKEN, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+ return 1;
+}
+
+int voprf_exp2_generate_key(CBB *out_private, CBB *out_public) {
+ if (!voprf_exp2_init_method()) {
+ return 0;
+ }
+
+ return voprf_generate_key(&voprf_exp2_method, out_private, out_public);
+}
+
+int voprf_exp2_client_key_from_bytes(TRUST_TOKEN_CLIENT_KEY *key,
+ const uint8_t *in, size_t len) {
+ if (!voprf_exp2_init_method()) {
+ return 0;
+ }
+ return voprf_client_key_from_bytes(&voprf_exp2_method, key, in, len);
+}
+
+int voprf_exp2_issuer_key_from_bytes(TRUST_TOKEN_ISSUER_KEY *key,
+ const uint8_t *in, size_t len) {
+ if (!voprf_exp2_init_method()) {
+ return 0;
+ }
+ return voprf_issuer_key_from_bytes(&voprf_exp2_method, key, in, len);
+}
+
+STACK_OF(TRUST_TOKEN_PRETOKEN) * voprf_exp2_blind(CBB *cbb, size_t count) {
+ if (!voprf_exp2_init_method()) {
+ return NULL;
+ }
+ return voprf_blind(&voprf_exp2_method, cbb, count);
+}
+
+int voprf_exp2_sign(const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs,
+ size_t num_requested, size_t num_to_issue,
+ uint8_t private_metadata) {
+ if (!voprf_exp2_init_method() || private_metadata != 0) {
+ return 0;
+ }
+ return voprf_sign(&voprf_exp2_method, key, cbb, cbs, num_requested,
+ num_to_issue);
+}
+
+STACK_OF(TRUST_TOKEN) *
+ voprf_exp2_unblind(const TRUST_TOKEN_CLIENT_KEY *key,
+ const STACK_OF(TRUST_TOKEN_PRETOKEN) * pretokens,
+ CBS *cbs, size_t count, uint32_t key_id) {
+ if (!voprf_exp2_init_method()) {
+ return NULL;
+ }
+ return voprf_unblind(&voprf_exp2_method, key, pretokens, cbs, count,
+ key_id);
+}
+
+int voprf_exp2_read(const TRUST_TOKEN_ISSUER_KEY *key,
+ uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE],
+ uint8_t *out_private_metadata, const uint8_t *token,
+ size_t token_len) {
+ if (!voprf_exp2_init_method()) {
+ return 0;
+ }
+ return voprf_read(&voprf_exp2_method, key, out_nonce, token, token_len);
+}
diff --git a/src/crypto/x509/x509_set.c b/src/crypto/x509/x509_set.c
index 6fd0d63..470bf70 100644
--- a/src/crypto/x509/x509_set.c
+++ b/src/crypto/x509/x509_set.c
@@ -221,7 +221,7 @@
return (X509_PUBKEY_set(&(x->cert_info->key), pkey));
}
-STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x)
+const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x)
{
return x->cert_info->extensions;
}
diff --git a/src/crypto/x509/x509_test.cc b/src/crypto/x509/x509_test.cc
index 599abf5..458f746 100644
--- a/src/crypto/x509/x509_test.cc
+++ b/src/crypto/x509/x509_test.cc
@@ -37,201 +37,212 @@
std::string GetTestData(const char *path);
-static const char kCrossSigningRootPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICcTCCAdqgAwIBAgIIagJHiPvE0MowDQYJKoZIhvcNAQELBQAwPDEaMBgGA1UE\n"
- "ChMRQm9yaW5nU1NMIFRFU1RJTkcxHjAcBgNVBAMTFUNyb3NzLXNpZ25pbmcgUm9v\n"
- "dCBDQTAgFw0xNTAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowPDEaMBgGA1UE\n"
- "ChMRQm9yaW5nU1NMIFRFU1RJTkcxHjAcBgNVBAMTFUNyb3NzLXNpZ25pbmcgUm9v\n"
- "dCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwo3qFvSB9Zmlbpzn9wJp\n"
- "ikI75Rxkatez8VkLqyxbOhPYl2Haz8F5p1gDG96dCI6jcLGgu3AKT9uhEQyyUko5\n"
- "EKYasazSeA9CQrdyhPg0mkTYVETnPM1W/ebid1YtqQbq1CMWlq2aTDoSGAReGFKP\n"
- "RTdXAbuAXzpCfi/d8LqV13UCAwEAAaN6MHgwDgYDVR0PAQH/BAQDAgIEMB0GA1Ud\n"
- "JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MBkGA1Ud\n"
- "DgQSBBBHKHC7V3Z/3oLvEZx0RZRwMBsGA1UdIwQUMBKAEEcocLtXdn/egu8RnHRF\n"
- "lHAwDQYJKoZIhvcNAQELBQADgYEAnglibsy6mGtpIXivtlcz4zIEnHw/lNW+r/eC\n"
- "CY7evZTmOoOuC/x9SS3MF9vawt1HFUummWM6ZgErqVBOXIB4//ykrcCgf5ZbF5Hr\n"
- "+3EFprKhBqYiXdD8hpBkrBoXwn85LPYWNd2TceCrx0YtLIprE2R5MB2RIq8y4Jk3\n"
- "YFXvkME=\n"
- "-----END CERTIFICATE-----\n";
+static const char kCrossSigningRootPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICcTCCAdqgAwIBAgIIagJHiPvE0MowDQYJKoZIhvcNAQELBQAwPDEaMBgGA1UE
+ChMRQm9yaW5nU1NMIFRFU1RJTkcxHjAcBgNVBAMTFUNyb3NzLXNpZ25pbmcgUm9v
+dCBDQTAgFw0xNTAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowPDEaMBgGA1UE
+ChMRQm9yaW5nU1NMIFRFU1RJTkcxHjAcBgNVBAMTFUNyb3NzLXNpZ25pbmcgUm9v
+dCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwo3qFvSB9Zmlbpzn9wJp
+ikI75Rxkatez8VkLqyxbOhPYl2Haz8F5p1gDG96dCI6jcLGgu3AKT9uhEQyyUko5
+EKYasazSeA9CQrdyhPg0mkTYVETnPM1W/ebid1YtqQbq1CMWlq2aTDoSGAReGFKP
+RTdXAbuAXzpCfi/d8LqV13UCAwEAAaN6MHgwDgYDVR0PAQH/BAQDAgIEMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MBkGA1Ud
+DgQSBBBHKHC7V3Z/3oLvEZx0RZRwMBsGA1UdIwQUMBKAEEcocLtXdn/egu8RnHRF
+lHAwDQYJKoZIhvcNAQELBQADgYEAnglibsy6mGtpIXivtlcz4zIEnHw/lNW+r/eC
+CY7evZTmOoOuC/x9SS3MF9vawt1HFUummWM6ZgErqVBOXIB4//ykrcCgf5ZbF5Hr
++3EFprKhBqYiXdD8hpBkrBoXwn85LPYWNd2TceCrx0YtLIprE2R5MB2RIq8y4Jk3
+YFXvkME=
+-----END CERTIFICATE-----
+)";
-static const char kRootCAPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICVTCCAb6gAwIBAgIIAj5CwoHlWuYwDQYJKoZIhvcNAQELBQAwLjEaMBgGA1UE\n"
- "ChMRQm9yaW5nU1NMIFRFU1RJTkcxEDAOBgNVBAMTB1Jvb3QgQ0EwIBcNMTUwMTAx\n"
- "MDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMC4xGjAYBgNVBAoTEUJvcmluZ1NTTCBU\n"
- "RVNUSU5HMRAwDgYDVQQDEwdSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n"
- "iQKBgQDpDn8RDOZa5oaDcPZRBy4CeBH1siSSOO4mYgLHlPE+oXdqwI/VImi2XeJM\n"
- "2uCFETXCknJJjYG0iJdrt/yyRFvZTQZw+QzGj+mz36NqhGxDWb6dstB2m8PX+plZ\n"
- "w7jl81MDvUnWs8yiQ/6twgu5AbhWKZQDJKcNKCEpqa6UW0r5nwIDAQABo3oweDAO\n"
- "BgNVHQ8BAf8EBAMCAgQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA8G\n"
- "A1UdEwEB/wQFMAMBAf8wGQYDVR0OBBIEEEA31wH7QC+4HH5UBCeMWQEwGwYDVR0j\n"
- "BBQwEoAQQDfXAftAL7gcflQEJ4xZATANBgkqhkiG9w0BAQsFAAOBgQDXylEK77Za\n"
- "kKeY6ZerrScWyZhrjIGtHFu09qVpdJEzrk87k2G7iHHR9CAvSofCgEExKtWNS9dN\n"
- "+9WiZp/U48iHLk7qaYXdEuO07No4BYtXn+lkOykE+FUxmA4wvOF1cTd2tdj3MzX2\n"
- "kfGIBAYhzGZWhY3JbhIfTEfY1PNM1pWChQ==\n"
- "-----END CERTIFICATE-----\n";
+static const char kRootCAPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICVTCCAb6gAwIBAgIIAj5CwoHlWuYwDQYJKoZIhvcNAQELBQAwLjEaMBgGA1UE
+ChMRQm9yaW5nU1NMIFRFU1RJTkcxEDAOBgNVBAMTB1Jvb3QgQ0EwIBcNMTUwMTAx
+MDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMC4xGjAYBgNVBAoTEUJvcmluZ1NTTCBU
+RVNUSU5HMRAwDgYDVQQDEwdSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
+iQKBgQDpDn8RDOZa5oaDcPZRBy4CeBH1siSSOO4mYgLHlPE+oXdqwI/VImi2XeJM
+2uCFETXCknJJjYG0iJdrt/yyRFvZTQZw+QzGj+mz36NqhGxDWb6dstB2m8PX+plZ
+w7jl81MDvUnWs8yiQ/6twgu5AbhWKZQDJKcNKCEpqa6UW0r5nwIDAQABo3oweDAO
+BgNVHQ8BAf8EBAMCAgQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA8G
+A1UdEwEB/wQFMAMBAf8wGQYDVR0OBBIEEEA31wH7QC+4HH5UBCeMWQEwGwYDVR0j
+BBQwEoAQQDfXAftAL7gcflQEJ4xZATANBgkqhkiG9w0BAQsFAAOBgQDXylEK77Za
+kKeY6ZerrScWyZhrjIGtHFu09qVpdJEzrk87k2G7iHHR9CAvSofCgEExKtWNS9dN
++9WiZp/U48iHLk7qaYXdEuO07No4BYtXn+lkOykE+FUxmA4wvOF1cTd2tdj3MzX2
+kfGIBAYhzGZWhY3JbhIfTEfY1PNM1pWChQ==
+-----END CERTIFICATE-----
+)";
-static const char kRootCrossSignedPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICYzCCAcygAwIBAgIIAj5CwoHlWuYwDQYJKoZIhvcNAQELBQAwPDEaMBgGA1UE\n"
- "ChMRQm9yaW5nU1NMIFRFU1RJTkcxHjAcBgNVBAMTFUNyb3NzLXNpZ25pbmcgUm9v\n"
- "dCBDQTAgFw0xNTAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowLjEaMBgGA1UE\n"
- "ChMRQm9yaW5nU1NMIFRFU1RJTkcxEDAOBgNVBAMTB1Jvb3QgQ0EwgZ8wDQYJKoZI\n"
- "hvcNAQEBBQADgY0AMIGJAoGBAOkOfxEM5lrmhoNw9lEHLgJ4EfWyJJI47iZiAseU\n"
- "8T6hd2rAj9UiaLZd4kza4IURNcKSckmNgbSIl2u3/LJEW9lNBnD5DMaP6bPfo2qE\n"
- "bENZvp2y0Habw9f6mVnDuOXzUwO9SdazzKJD/q3CC7kBuFYplAMkpw0oISmprpRb\n"
- "SvmfAgMBAAGjejB4MA4GA1UdDwEB/wQEAwICBDAdBgNVHSUEFjAUBggrBgEFBQcD\n"
- "AQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAZBgNVHQ4EEgQQQDfXAftAL7gc\n"
- "flQEJ4xZATAbBgNVHSMEFDASgBBHKHC7V3Z/3oLvEZx0RZRwMA0GCSqGSIb3DQEB\n"
- "CwUAA4GBAErTxYJ0en9HVRHAAr5OO5wuk5Iq3VMc79TMyQLCXVL8YH8Uk7KEwv+q\n"
- "9MEKZv2eR/Vfm4HlXlUuIqfgUXbwrAYC/YVVX86Wnbpy/jc73NYVCq8FEZeO+0XU\n"
- "90SWAPDdp+iL7aZdimnMtG1qlM1edmz8AKbrhN/R3IbA2CL0nCWV\n"
- "-----END CERTIFICATE-----\n";
+static const char kRootCrossSignedPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICYzCCAcygAwIBAgIIAj5CwoHlWuYwDQYJKoZIhvcNAQELBQAwPDEaMBgGA1UE
+ChMRQm9yaW5nU1NMIFRFU1RJTkcxHjAcBgNVBAMTFUNyb3NzLXNpZ25pbmcgUm9v
+dCBDQTAgFw0xNTAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowLjEaMBgGA1UE
+ChMRQm9yaW5nU1NMIFRFU1RJTkcxEDAOBgNVBAMTB1Jvb3QgQ0EwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBAOkOfxEM5lrmhoNw9lEHLgJ4EfWyJJI47iZiAseU
+8T6hd2rAj9UiaLZd4kza4IURNcKSckmNgbSIl2u3/LJEW9lNBnD5DMaP6bPfo2qE
+bENZvp2y0Habw9f6mVnDuOXzUwO9SdazzKJD/q3CC7kBuFYplAMkpw0oISmprpRb
+SvmfAgMBAAGjejB4MA4GA1UdDwEB/wQEAwICBDAdBgNVHSUEFjAUBggrBgEFBQcD
+AQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAZBgNVHQ4EEgQQQDfXAftAL7gc
+flQEJ4xZATAbBgNVHSMEFDASgBBHKHC7V3Z/3oLvEZx0RZRwMA0GCSqGSIb3DQEB
+CwUAA4GBAErTxYJ0en9HVRHAAr5OO5wuk5Iq3VMc79TMyQLCXVL8YH8Uk7KEwv+q
+9MEKZv2eR/Vfm4HlXlUuIqfgUXbwrAYC/YVVX86Wnbpy/jc73NYVCq8FEZeO+0XU
+90SWAPDdp+iL7aZdimnMtG1qlM1edmz8AKbrhN/R3IbA2CL0nCWV
+-----END CERTIFICATE-----
+)";
-static const char kIntermediatePEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICXjCCAcegAwIBAgIJAKJMH+7rscPcMA0GCSqGSIb3DQEBCwUAMC4xGjAYBgNV\n"
- "BAoTEUJvcmluZ1NTTCBURVNUSU5HMRAwDgYDVQQDEwdSb290IENBMCAXDTE1MDEw\n"
- "MTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjA2MRowGAYDVQQKExFCb3JpbmdTU0wg\n"
- "VEVTVElORzEYMBYGA1UEAxMPSW50ZXJtZWRpYXRlIENBMIGfMA0GCSqGSIb3DQEB\n"
- "AQUAA4GNADCBiQKBgQC7YtI0l8ocTYJ0gKyXTtPL4iMJCNY4OcxXl48jkncVG1Hl\n"
- "blicgNUa1r9m9YFtVkxvBinb8dXiUpEGhVg4awRPDcatlsBSEBuJkiZGYbRcAmSu\n"
- "CmZYnf6u3aYQ18SU8WqVERPpE4cwVVs+6kwlzRw0+XDoZAczu8ZezVhCUc6NbQID\n"
- "AQABo3oweDAOBgNVHQ8BAf8EBAMCAgQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\n"
- "AQUFBwMCMA8GA1UdEwEB/wQFMAMBAf8wGQYDVR0OBBIEEIwaaKi1dttdV3sfjRSy\n"
- "BqMwGwYDVR0jBBQwEoAQQDfXAftAL7gcflQEJ4xZATANBgkqhkiG9w0BAQsFAAOB\n"
- "gQCvnolNWEHuQS8PFVVyuLR+FKBeUUdrVbSfHSzTqNAqQGp0C9fk5oCzDq6ZgTfY\n"
- "ESXM4cJhb3IAnW0UM0NFsYSKQJ50JZL2L3z5ZLQhHdbs4RmODGoC40BVdnJ4/qgB\n"
- "aGSh09eQRvAVmbVCviDK2ipkWNegdyI19jFfNP5uIkGlYg==\n"
- "-----END CERTIFICATE-----\n";
+static const char kIntermediatePEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICXjCCAcegAwIBAgIJAKJMH+7rscPcMA0GCSqGSIb3DQEBCwUAMC4xGjAYBgNV
+BAoTEUJvcmluZ1NTTCBURVNUSU5HMRAwDgYDVQQDEwdSb290IENBMCAXDTE1MDEw
+MTAwMDAwMFoYDzIxMDAwMTAxMDAwMDAwWjA2MRowGAYDVQQKExFCb3JpbmdTU0wg
+VEVTVElORzEYMBYGA1UEAxMPSW50ZXJtZWRpYXRlIENBMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQC7YtI0l8ocTYJ0gKyXTtPL4iMJCNY4OcxXl48jkncVG1Hl
+blicgNUa1r9m9YFtVkxvBinb8dXiUpEGhVg4awRPDcatlsBSEBuJkiZGYbRcAmSu
+CmZYnf6u3aYQ18SU8WqVERPpE4cwVVs+6kwlzRw0+XDoZAczu8ZezVhCUc6NbQID
+AQABo3oweDAOBgNVHQ8BAf8EBAMCAgQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
+AQUFBwMCMA8GA1UdEwEB/wQFMAMBAf8wGQYDVR0OBBIEEIwaaKi1dttdV3sfjRSy
+BqMwGwYDVR0jBBQwEoAQQDfXAftAL7gcflQEJ4xZATANBgkqhkiG9w0BAQsFAAOB
+gQCvnolNWEHuQS8PFVVyuLR+FKBeUUdrVbSfHSzTqNAqQGp0C9fk5oCzDq6ZgTfY
+ESXM4cJhb3IAnW0UM0NFsYSKQJ50JZL2L3z5ZLQhHdbs4RmODGoC40BVdnJ4/qgB
+aGSh09eQRvAVmbVCviDK2ipkWNegdyI19jFfNP5uIkGlYg==
+-----END CERTIFICATE-----
+)";
-static const char kIntermediateSelfSignedPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICZjCCAc+gAwIBAgIJAKJMH+7rscPcMA0GCSqGSIb3DQEBCwUAMDYxGjAYBgNV\n"
- "BAoTEUJvcmluZ1NTTCBURVNUSU5HMRgwFgYDVQQDEw9JbnRlcm1lZGlhdGUgQ0Ew\n"
- "IBcNMTUwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMDYxGjAYBgNVBAoTEUJv\n"
- "cmluZ1NTTCBURVNUSU5HMRgwFgYDVQQDEw9JbnRlcm1lZGlhdGUgQ0EwgZ8wDQYJ\n"
- "KoZIhvcNAQEBBQADgY0AMIGJAoGBALti0jSXyhxNgnSArJdO08viIwkI1jg5zFeX\n"
- "jyOSdxUbUeVuWJyA1RrWv2b1gW1WTG8GKdvx1eJSkQaFWDhrBE8Nxq2WwFIQG4mS\n"
- "JkZhtFwCZK4KZlid/q7dphDXxJTxapURE+kThzBVWz7qTCXNHDT5cOhkBzO7xl7N\n"
- "WEJRzo1tAgMBAAGjejB4MA4GA1UdDwEB/wQEAwICBDAdBgNVHSUEFjAUBggrBgEF\n"
- "BQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAZBgNVHQ4EEgQQjBpoqLV2\n"
- "211Xex+NFLIGozAbBgNVHSMEFDASgBCMGmiotXbbXVd7H40UsgajMA0GCSqGSIb3\n"
- "DQEBCwUAA4GBALcccSrAQ0/EqQBsx0ZDTUydHXXNP2DrUkpUKmAXIe8McqIVSlkT\n"
- "6H4xz7z8VRKBo9j+drjjtCw2i0CQc8aOLxRb5WJ8eVLnaW2XRlUqAzhF0CrulfVI\n"
- "E4Vs6ZLU+fra1WAuIj6qFiigRja+3YkZArG8tMA9vtlhTX/g7YBZIkqH\n"
- "-----END CERTIFICATE-----\n";
+static const char kIntermediateSelfSignedPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICZjCCAc+gAwIBAgIJAKJMH+7rscPcMA0GCSqGSIb3DQEBCwUAMDYxGjAYBgNV
+BAoTEUJvcmluZ1NTTCBURVNUSU5HMRgwFgYDVQQDEw9JbnRlcm1lZGlhdGUgQ0Ew
+IBcNMTUwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMDYxGjAYBgNVBAoTEUJv
+cmluZ1NTTCBURVNUSU5HMRgwFgYDVQQDEw9JbnRlcm1lZGlhdGUgQ0EwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBALti0jSXyhxNgnSArJdO08viIwkI1jg5zFeX
+jyOSdxUbUeVuWJyA1RrWv2b1gW1WTG8GKdvx1eJSkQaFWDhrBE8Nxq2WwFIQG4mS
+JkZhtFwCZK4KZlid/q7dphDXxJTxapURE+kThzBVWz7qTCXNHDT5cOhkBzO7xl7N
+WEJRzo1tAgMBAAGjejB4MA4GA1UdDwEB/wQEAwICBDAdBgNVHSUEFjAUBggrBgEF
+BQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAZBgNVHQ4EEgQQjBpoqLV2
+211Xex+NFLIGozAbBgNVHSMEFDASgBCMGmiotXbbXVd7H40UsgajMA0GCSqGSIb3
+DQEBCwUAA4GBALcccSrAQ0/EqQBsx0ZDTUydHXXNP2DrUkpUKmAXIe8McqIVSlkT
+6H4xz7z8VRKBo9j+drjjtCw2i0CQc8aOLxRb5WJ8eVLnaW2XRlUqAzhF0CrulfVI
+E4Vs6ZLU+fra1WAuIj6qFiigRja+3YkZArG8tMA9vtlhTX/g7YBZIkqH
+-----END CERTIFICATE-----
+)";
-static const char kLeafPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICXjCCAcegAwIBAgIIWjO48ufpunYwDQYJKoZIhvcNAQELBQAwNjEaMBgGA1UE\n"
- "ChMRQm9yaW5nU1NMIFRFU1RJTkcxGDAWBgNVBAMTD0ludGVybWVkaWF0ZSBDQTAg\n"
- "Fw0xNTAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowMjEaMBgGA1UEChMRQm9y\n"
- "aW5nU1NMIFRFU1RJTkcxFDASBgNVBAMTC2V4YW1wbGUuY29tMIGfMA0GCSqGSIb3\n"
- "DQEBAQUAA4GNADCBiQKBgQDD0U0ZYgqShJ7oOjsyNKyVXEHqeafmk/bAoPqY/h1c\n"
- "oPw2E8KmeqiUSoTPjG5IXSblOxcqpbAXgnjPzo8DI3GNMhAf8SYNYsoH7gc7Uy7j\n"
- "5x8bUrisGnuTHqkqH6d4/e7ETJ7i3CpR8bvK16DggEvQTudLipz8FBHtYhFakfdh\n"
- "TwIDAQABo3cwdTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG\n"
- "CCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwGQYDVR0OBBIEEKN5pvbur7mlXjeMEYA0\n"
- "4nUwGwYDVR0jBBQwEoAQjBpoqLV2211Xex+NFLIGozANBgkqhkiG9w0BAQsFAAOB\n"
- "gQBj/p+JChp//LnXWC1k121LM/ii7hFzQzMrt70bny406SGz9jAjaPOX4S3gt38y\n"
- "rhjpPukBlSzgQXFg66y6q5qp1nQTD1Cw6NkKBe9WuBlY3iYfmsf7WT8nhlT1CttU\n"
- "xNCwyMX9mtdXdQicOfNjIGUCD5OLV5PgHFPRKiHHioBAhg==\n"
- "-----END CERTIFICATE-----\n";
+static const char kLeafPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICXjCCAcegAwIBAgIIWjO48ufpunYwDQYJKoZIhvcNAQELBQAwNjEaMBgGA1UE
+ChMRQm9yaW5nU1NMIFRFU1RJTkcxGDAWBgNVBAMTD0ludGVybWVkaWF0ZSBDQTAg
+Fw0xNTAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowMjEaMBgGA1UEChMRQm9y
+aW5nU1NMIFRFU1RJTkcxFDASBgNVBAMTC2V4YW1wbGUuY29tMIGfMA0GCSqGSIb3
+DQEBAQUAA4GNADCBiQKBgQDD0U0ZYgqShJ7oOjsyNKyVXEHqeafmk/bAoPqY/h1c
+oPw2E8KmeqiUSoTPjG5IXSblOxcqpbAXgnjPzo8DI3GNMhAf8SYNYsoH7gc7Uy7j
+5x8bUrisGnuTHqkqH6d4/e7ETJ7i3CpR8bvK16DggEvQTudLipz8FBHtYhFakfdh
+TwIDAQABo3cwdTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
+CCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwGQYDVR0OBBIEEKN5pvbur7mlXjeMEYA0
+4nUwGwYDVR0jBBQwEoAQjBpoqLV2211Xex+NFLIGozANBgkqhkiG9w0BAQsFAAOB
+gQBj/p+JChp//LnXWC1k121LM/ii7hFzQzMrt70bny406SGz9jAjaPOX4S3gt38y
+rhjpPukBlSzgQXFg66y6q5qp1nQTD1Cw6NkKBe9WuBlY3iYfmsf7WT8nhlT1CttU
+xNCwyMX9mtdXdQicOfNjIGUCD5OLV5PgHFPRKiHHioBAhg==
+-----END CERTIFICATE-----
+)";
-static const char kLeafNoKeyUsagePEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICNTCCAZ6gAwIBAgIJAIFQGaLQ0G2mMA0GCSqGSIb3DQEBCwUAMDYxGjAYBgNV\n"
- "BAoTEUJvcmluZ1NTTCBURVNUSU5HMRgwFgYDVQQDEw9JbnRlcm1lZGlhdGUgQ0Ew\n"
- "IBcNMTUwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMDcxGjAYBgNVBAoTEUJv\n"
- "cmluZ1NTTCBURVNUSU5HMRkwFwYDVQQDExBldmlsLmV4YW1wbGUuY29tMIGfMA0G\n"
- "CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOKoZe75NPz77EOaMMl4/0s3PyQw++zJvp\n"
- "ejHAxZiTPCJgMbEHLrSzNoHdopg+CLUH5bE4wTXM8w9Inv5P8OAFJt7gJuPUunmk\n"
- "j+NoU3QfzOR6BroePcz1vXX9jyVHRs087M/sLqWRHu9IR+/A+UTcBaWaFiDVUxtJ\n"
- "YOwFMwjNPQIDAQABo0gwRjAMBgNVHRMBAf8EAjAAMBkGA1UdDgQSBBBJfLEUWHq1\n"
- "27rZ1AVx2J5GMBsGA1UdIwQUMBKAEIwaaKi1dttdV3sfjRSyBqMwDQYJKoZIhvcN\n"
- "AQELBQADgYEALVKN2Y3LZJOtu6SxFIYKxbLaXhTGTdIjxipZhmbBRDFjbZjZZOTe\n"
- "6Oo+VDNPYco4rBexK7umYXJyfTqoY0E8dbiImhTcGTEj7OAB3DbBomgU1AYe+t2D\n"
- "uwBqh4Y3Eto+Zn4pMVsxGEfUpjzjZDel7bN1/oU/9KWPpDfywfUmjgk=\n"
- "-----END CERTIFICATE-----\n";
+static const char kLeafNoKeyUsagePEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICNTCCAZ6gAwIBAgIJAIFQGaLQ0G2mMA0GCSqGSIb3DQEBCwUAMDYxGjAYBgNV
+BAoTEUJvcmluZ1NTTCBURVNUSU5HMRgwFgYDVQQDEw9JbnRlcm1lZGlhdGUgQ0Ew
+IBcNMTUwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMDcxGjAYBgNVBAoTEUJv
+cmluZ1NTTCBURVNUSU5HMRkwFwYDVQQDExBldmlsLmV4YW1wbGUuY29tMIGfMA0G
+CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOKoZe75NPz77EOaMMl4/0s3PyQw++zJvp
+ejHAxZiTPCJgMbEHLrSzNoHdopg+CLUH5bE4wTXM8w9Inv5P8OAFJt7gJuPUunmk
+j+NoU3QfzOR6BroePcz1vXX9jyVHRs087M/sLqWRHu9IR+/A+UTcBaWaFiDVUxtJ
+YOwFMwjNPQIDAQABo0gwRjAMBgNVHRMBAf8EAjAAMBkGA1UdDgQSBBBJfLEUWHq1
+27rZ1AVx2J5GMBsGA1UdIwQUMBKAEIwaaKi1dttdV3sfjRSyBqMwDQYJKoZIhvcN
+AQELBQADgYEALVKN2Y3LZJOtu6SxFIYKxbLaXhTGTdIjxipZhmbBRDFjbZjZZOTe
+6Oo+VDNPYco4rBexK7umYXJyfTqoY0E8dbiImhTcGTEj7OAB3DbBomgU1AYe+t2D
+uwBqh4Y3Eto+Zn4pMVsxGEfUpjzjZDel7bN1/oU/9KWPpDfywfUmjgk=
+-----END CERTIFICATE-----
+)";
-static const char kForgeryPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICZzCCAdCgAwIBAgIIdTlMzQoKkeMwDQYJKoZIhvcNAQELBQAwNzEaMBgGA1UE\n"
- "ChMRQm9yaW5nU1NMIFRFU1RJTkcxGTAXBgNVBAMTEGV2aWwuZXhhbXBsZS5jb20w\n"
- "IBcNMTUwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMDoxGjAYBgNVBAoTEUJv\n"
- "cmluZ1NTTCBURVNUSU5HMRwwGgYDVQQDExNmb3JnZXJ5LmV4YW1wbGUuY29tMIGf\n"
- "MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDADTwruBQZGb7Ay6s9HiYv5d1lwtEy\n"
- "xQdA2Sy8Rn8uA20Q4KgqwVY7wzIZ+z5Butrsmwb70gdG1XU+yRaDeE7XVoW6jSpm\n"
- "0sw35/5vJbTcL4THEFbnX0OPZnvpuZDFUkvVtq5kxpDWsVyM24G8EEq7kPih3Sa3\n"
- "OMhXVXF8kso6UQIDAQABo3cwdTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYI\n"
- "KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwGQYDVR0OBBIEEEYJ/WHM\n"
- "8p64erPWIg4/liwwGwYDVR0jBBQwEoAQSXyxFFh6tdu62dQFcdieRjANBgkqhkiG\n"
- "9w0BAQsFAAOBgQA+zH7bHPElWRWJvjxDqRexmYLn+D3Aivs8XgXQJsM94W0EzSUf\n"
- "DSLfRgaQwcb2gg2xpDFoG+W0vc6O651uF23WGt5JaFFJJxqjII05IexfCNhuPmp4\n"
- "4UZAXPttuJXpn74IY1tuouaM06B3vXKZR+/ityKmfJvSwxacmFcK+2ziAg==\n"
- "-----END CERTIFICATE-----\n";
+static const char kForgeryPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICZzCCAdCgAwIBAgIIdTlMzQoKkeMwDQYJKoZIhvcNAQELBQAwNzEaMBgGA1UE
+ChMRQm9yaW5nU1NMIFRFU1RJTkcxGTAXBgNVBAMTEGV2aWwuZXhhbXBsZS5jb20w
+IBcNMTUwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMDoxGjAYBgNVBAoTEUJv
+cmluZ1NTTCBURVNUSU5HMRwwGgYDVQQDExNmb3JnZXJ5LmV4YW1wbGUuY29tMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDADTwruBQZGb7Ay6s9HiYv5d1lwtEy
+xQdA2Sy8Rn8uA20Q4KgqwVY7wzIZ+z5Butrsmwb70gdG1XU+yRaDeE7XVoW6jSpm
+0sw35/5vJbTcL4THEFbnX0OPZnvpuZDFUkvVtq5kxpDWsVyM24G8EEq7kPih3Sa3
+OMhXVXF8kso6UQIDAQABo3cwdTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwGQYDVR0OBBIEEEYJ/WHM
+8p64erPWIg4/liwwGwYDVR0jBBQwEoAQSXyxFFh6tdu62dQFcdieRjANBgkqhkiG
+9w0BAQsFAAOBgQA+zH7bHPElWRWJvjxDqRexmYLn+D3Aivs8XgXQJsM94W0EzSUf
+DSLfRgaQwcb2gg2xpDFoG+W0vc6O651uF23WGt5JaFFJJxqjII05IexfCNhuPmp4
+4UZAXPttuJXpn74IY1tuouaM06B3vXKZR+/ityKmfJvSwxacmFcK+2ziAg==
+-----END CERTIFICATE-----
+)";
// kExamplePSSCert is an example RSA-PSS self-signed certificate, signed with
// the default hash functions.
-static const char kExamplePSSCert[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICYjCCAcagAwIBAgIJAI3qUyT6SIfzMBIGCSqGSIb3DQEBCjAFogMCAWowRTEL\n"
- "MAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVy\n"
- "bmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xNDEwMDkxOTA5NTVaFw0xNTEwMDkxOTA5\n"
- "NTVaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK\n"
- "DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwgZ8wDQYJKoZIhvcNAQEBBQADgY0A\n"
- "MIGJAoGBAPi4bIO0vNmoV8CltFl2jFQdeesiUgR+0zfrQf2D+fCmhRU0dXFahKg8\n"
- "0u9aTtPel4rd/7vPCqqGkr64UOTNb4AzMHYTj8p73OxaymPHAyXvqIqDWHYg+hZ3\n"
- "13mSYwFIGth7Z/FSVUlO1m5KXNd6NzYM3t2PROjCpywrta9kS2EHAgMBAAGjUDBO\n"
- "MB0GA1UdDgQWBBTQQfuJQR6nrVrsNF1JEflVgXgfEzAfBgNVHSMEGDAWgBTQQfuJ\n"
- "QR6nrVrsNF1JEflVgXgfEzAMBgNVHRMEBTADAQH/MBIGCSqGSIb3DQEBCjAFogMC\n"
- "AWoDgYEASUy2RZcgNbNQZA0/7F+V1YTLEXwD16bm+iSVnzGwtexmQVEYIZG74K/w\n"
- "xbdZQdTbpNJkp1QPjPfh0zsatw6dmt5QoZ8K8No0DjR9dgf+Wvv5WJvJUIQBoAVN\n"
- "Z0IL+OQFz6+LcTHxD27JJCebrATXZA0wThGTQDm7crL+a+SujBY=\n"
- "-----END CERTIFICATE-----\n";
+static const char kExamplePSSCert[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICYjCCAcagAwIBAgIJAI3qUyT6SIfzMBIGCSqGSIb3DQEBCjAFogMCAWowRTEL
+MAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVy
+bmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xNDEwMDkxOTA5NTVaFw0xNTEwMDkxOTA5
+NTVaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK
+DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
+MIGJAoGBAPi4bIO0vNmoV8CltFl2jFQdeesiUgR+0zfrQf2D+fCmhRU0dXFahKg8
+0u9aTtPel4rd/7vPCqqGkr64UOTNb4AzMHYTj8p73OxaymPHAyXvqIqDWHYg+hZ3
+13mSYwFIGth7Z/FSVUlO1m5KXNd6NzYM3t2PROjCpywrta9kS2EHAgMBAAGjUDBO
+MB0GA1UdDgQWBBTQQfuJQR6nrVrsNF1JEflVgXgfEzAfBgNVHSMEGDAWgBTQQfuJ
+QR6nrVrsNF1JEflVgXgfEzAMBgNVHRMEBTADAQH/MBIGCSqGSIb3DQEBCjAFogMC
+AWoDgYEASUy2RZcgNbNQZA0/7F+V1YTLEXwD16bm+iSVnzGwtexmQVEYIZG74K/w
+xbdZQdTbpNJkp1QPjPfh0zsatw6dmt5QoZ8K8No0DjR9dgf+Wvv5WJvJUIQBoAVN
+Z0IL+OQFz6+LcTHxD27JJCebrATXZA0wThGTQDm7crL+a+SujBY=
+-----END CERTIFICATE-----
+)";
// kBadPSSCertPEM is a self-signed RSA-PSS certificate with bad parameters.
-static const char kBadPSSCertPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIDdjCCAjqgAwIBAgIJANcwZLyfEv7DMD4GCSqGSIb3DQEBCjAxoA0wCwYJYIZI\n"
- "AWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIEAgIA3jAnMSUwIwYD\n"
- "VQQDDBxUZXN0IEludmFsaWQgUFNTIGNlcnRpZmljYXRlMB4XDTE1MTEwNDE2MDIz\n"
- "NVoXDTE1MTIwNDE2MDIzNVowJzElMCMGA1UEAwwcVGVzdCBJbnZhbGlkIFBTUyBj\n"
- "ZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMTaM7WH\n"
- "qVCAGAIA+zL1KWvvASTrhlq+1ePdO7wsrWX2KiYoTYrJYTnxhLnn0wrHqApt79nL\n"
- "IBG7cfShyZqFHOY/IzlYPMVt+gPo293gw96Fds5JBsjhjkyGnOyr9OUntFqvxDbT\n"
- "IIFU7o9IdxD4edaqjRv+fegVE+B79pDk4s0ujsk6dULtCg9Rst0ucGFo19mr+b7k\n"
- "dbfn8pZ72ZNDJPueVdrUAWw9oll61UcYfk75XdrLk6JlL41GrYHc8KlfXf43gGQq\n"
- "QfrpHkg4Ih2cI6Wt2nhFGAzrlcorzLliQIUJRIhM8h4IgDfpBpaPdVQLqS2pFbXa\n"
- "5eQjqiyJwak2vJ8CAwEAAaNQME4wHQYDVR0OBBYEFCt180N4oGUt5LbzBwQ4Ia+2\n"
- "4V97MB8GA1UdIwQYMBaAFCt180N4oGUt5LbzBwQ4Ia+24V97MAwGA1UdEwQFMAMB\n"
- "Af8wMQYJKoZIhvcNAQEKMCSgDTALBglghkgBZQMEAgGhDTALBgkqhkiG9w0BAQii\n"
- "BAICAN4DggEBAAjBtm90lGxgddjc4Xu/nbXXFHVs2zVcHv/mqOZoQkGB9r/BVgLb\n"
- "xhHrFZ2pHGElbUYPfifdS9ztB73e1d4J+P29o0yBqfd4/wGAc/JA8qgn6AAEO/Xn\n"
- "plhFeTRJQtLZVl75CkHXgUGUd3h+ADvKtcBuW9dSUncaUrgNKR8u/h/2sMG38RWY\n"
- "DzBddC/66YTa3r7KkVUfW7yqRQfELiGKdcm+bjlTEMsvS+EhHup9CzbpoCx2Fx9p\n"
- "NPtFY3yEObQhmL1JyoCRWqBE75GzFPbRaiux5UpEkns+i3trkGssZzsOuVqHNTNZ\n"
- "lC9+9hPHIoc9UMmAQNo1vGIW3NWVoeGbaJ8=\n"
- "-----END CERTIFICATE-----\n";
+static const char kBadPSSCertPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIDdjCCAjqgAwIBAgIJANcwZLyfEv7DMD4GCSqGSIb3DQEBCjAxoA0wCwYJYIZI
+AWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIEAgIA3jAnMSUwIwYD
+VQQDDBxUZXN0IEludmFsaWQgUFNTIGNlcnRpZmljYXRlMB4XDTE1MTEwNDE2MDIz
+NVoXDTE1MTIwNDE2MDIzNVowJzElMCMGA1UEAwwcVGVzdCBJbnZhbGlkIFBTUyBj
+ZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMTaM7WH
+qVCAGAIA+zL1KWvvASTrhlq+1ePdO7wsrWX2KiYoTYrJYTnxhLnn0wrHqApt79nL
+IBG7cfShyZqFHOY/IzlYPMVt+gPo293gw96Fds5JBsjhjkyGnOyr9OUntFqvxDbT
+IIFU7o9IdxD4edaqjRv+fegVE+B79pDk4s0ujsk6dULtCg9Rst0ucGFo19mr+b7k
+dbfn8pZ72ZNDJPueVdrUAWw9oll61UcYfk75XdrLk6JlL41GrYHc8KlfXf43gGQq
+QfrpHkg4Ih2cI6Wt2nhFGAzrlcorzLliQIUJRIhM8h4IgDfpBpaPdVQLqS2pFbXa
+5eQjqiyJwak2vJ8CAwEAAaNQME4wHQYDVR0OBBYEFCt180N4oGUt5LbzBwQ4Ia+2
+4V97MB8GA1UdIwQYMBaAFCt180N4oGUt5LbzBwQ4Ia+24V97MAwGA1UdEwQFMAMB
+Af8wMQYJKoZIhvcNAQEKMCSgDTALBglghkgBZQMEAgGhDTALBgkqhkiG9w0BAQii
+BAICAN4DggEBAAjBtm90lGxgddjc4Xu/nbXXFHVs2zVcHv/mqOZoQkGB9r/BVgLb
+xhHrFZ2pHGElbUYPfifdS9ztB73e1d4J+P29o0yBqfd4/wGAc/JA8qgn6AAEO/Xn
+plhFeTRJQtLZVl75CkHXgUGUd3h+ADvKtcBuW9dSUncaUrgNKR8u/h/2sMG38RWY
+DzBddC/66YTa3r7KkVUfW7yqRQfELiGKdcm+bjlTEMsvS+EhHup9CzbpoCx2Fx9p
+NPtFY3yEObQhmL1JyoCRWqBE75GzFPbRaiux5UpEkns+i3trkGssZzsOuVqHNTNZ
+lC9+9hPHIoc9UMmAQNo1vGIW3NWVoeGbaJ8=
+-----END CERTIFICATE-----
+)";
-static const char kRSAKey[] =
- "-----BEGIN RSA PRIVATE KEY-----\n"
- "MIICXgIBAAKBgQDYK8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92\n"
- "kWdGMdAQhLciHnAjkXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiF\n"
- "KKAnHmUcrgfVW28tQ+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQAB\n"
- "AoGBAIBy09Fd4DOq/Ijp8HeKuCMKTHqTW1xGHshLQ6jwVV2vWZIn9aIgmDsvkjCe\n"
- "i6ssZvnbjVcwzSoByhjN8ZCf/i15HECWDFFh6gt0P5z0MnChwzZmvatV/FXCT0j+\n"
- "WmGNB/gkehKjGXLLcjTb6dRYVJSCZhVuOLLcbWIV10gggJQBAkEA8S8sGe4ezyyZ\n"
- "m4e9r95g6s43kPqtj5rewTsUxt+2n4eVodD+ZUlCULWVNAFLkYRTBCASlSrm9Xhj\n"
- "QpmWAHJUkQJBAOVzQdFUaewLtdOJoPCtpYoY1zd22eae8TQEmpGOR11L6kbxLQsk\n"
- "aMly/DOnOaa82tqAGTdqDEZgSNmCeKKknmECQAvpnY8GUOVAubGR6c+W90iBuQLj\n"
- "LtFp/9ihd2w/PoDwrHZaoUYVcT4VSfJQog/k7kjE4MYXYWL8eEKg3WTWQNECQQDk\n"
- "104Wi91Umd1PzF0ijd2jXOERJU1wEKe6XLkYYNHWQAe5l4J4MWj9OdxFXAxIuuR/\n"
- "tfDwbqkta4xcux67//khAkEAvvRXLHTaa6VFzTaiiO8SaFsHV3lQyXOtMrBpB5jd\n"
- "moZWgjHvB2W9Ckn7sDqsPB+U2tyX0joDdQEyuiMECDY8oQ==\n"
- "-----END RSA PRIVATE KEY-----\n";
+static const char kRSAKey[] = R"(
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQDYK8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92
+kWdGMdAQhLciHnAjkXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiF
+KKAnHmUcrgfVW28tQ+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQAB
+AoGBAIBy09Fd4DOq/Ijp8HeKuCMKTHqTW1xGHshLQ6jwVV2vWZIn9aIgmDsvkjCe
+i6ssZvnbjVcwzSoByhjN8ZCf/i15HECWDFFh6gt0P5z0MnChwzZmvatV/FXCT0j+
+WmGNB/gkehKjGXLLcjTb6dRYVJSCZhVuOLLcbWIV10gggJQBAkEA8S8sGe4ezyyZ
+m4e9r95g6s43kPqtj5rewTsUxt+2n4eVodD+ZUlCULWVNAFLkYRTBCASlSrm9Xhj
+QpmWAHJUkQJBAOVzQdFUaewLtdOJoPCtpYoY1zd22eae8TQEmpGOR11L6kbxLQsk
+aMly/DOnOaa82tqAGTdqDEZgSNmCeKKknmECQAvpnY8GUOVAubGR6c+W90iBuQLj
+LtFp/9ihd2w/PoDwrHZaoUYVcT4VSfJQog/k7kjE4MYXYWL8eEKg3WTWQNECQQDk
+104Wi91Umd1PzF0ijd2jXOERJU1wEKe6XLkYYNHWQAe5l4J4MWj9OdxFXAxIuuR/
+tfDwbqkta4xcux67//khAkEAvvRXLHTaa6VFzTaiiO8SaFsHV3lQyXOtMrBpB5jd
+moZWgjHvB2W9Ckn7sDqsPB+U2tyX0joDdQEyuiMECDY8oQ==
+-----END RSA PRIVATE KEY-----
+)";
// kCRLTestRoot is a test root certificate. It has private key:
//
@@ -262,207 +273,219 @@
// Lbf3v2dvxOpTNTONWjp2c+iUQo8QxJCZr5Sfb21oQ9Ktcrmc/CY7LeBVDibXwxdM
// vRG8kBzvslFWh7REzC3u06GSVhyKDfW93kN2cKVwGoahRlhj7oHuZQ==
// -----END RSA PRIVATE KEY-----
-static const char kCRLTestRoot[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIDbzCCAlegAwIBAgIJAODri7v0dDUFMA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV\n"
- "BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW\n"
- "aWV3MRIwEAYDVQQKDAlCb3JpbmdTU0wwHhcNMTYwOTI2MTUwNjI2WhcNMjYwOTI0\n"
- "MTUwNjI2WjBOMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQG\n"
- "A1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJQm9yaW5nU1NMMIIBIjANBgkq\n"
- "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo16WiLWZuaymsD8n5SKPmxV1y6jjgr3B\n"
- "S/dUBpbrzd1aeFzNlI8l2jfAnzUyp+I21RQ+nh/MhqjGElkTtK9xMn1Y+S9GMRh+\n"
- "5R/Du0iCb1tCZIPY07Tgrb0KMNWe0v2QKVVruuYSgxIWodBfxlKO64Z8AJ5IbnWp\n"
- "uRqO6rctN9qUoMlTIAB6dL4G0tDJ/PGFWOJYwOMEIX54bly2wgyYJVBKiRRt4f7n\n"
- "8H922qmvPNA9idmX9G1VAtgV6x97XXi7ULORIQvn9lVQF6nTYDBJhyuPB+mLThbL\n"
- "P2o9orxGx7aCtnnBZUIxUvHNOI0FaSaZH7Fi0xsZ/GkG2HZe7ImPJwIDAQABo1Aw\n"
- "TjAdBgNVHQ4EFgQUWPt3N5cZ/CRvubbrkqfBnAqhq94wHwYDVR0jBBgwFoAUWPt3\n"
- "N5cZ/CRvubbrkqfBnAqhq94wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC\n"
- "AQEAORu6M0MOwXy+3VEBwNilfTxyqDfruQsc1jA4PT8Oe8zora1WxE1JB4q2FJOz\n"
- "EAuM3H/NXvEnBuN+ITvKZAJUfm4NKX97qmjMJwLKWe1gVv+VQTr63aR7mgWJReQN\n"
- "XdMztlVeZs2dppV6uEg3ia1X0G7LARxGpA9ETbMyCpb39XxlYuTClcbA5ftDN99B\n"
- "3Xg9KNdd++Ew22O3HWRDvdDpTO/JkzQfzi3sYwUtzMEonENhczJhGf7bQMmvL/w5\n"
- "24Wxj4Z7KzzWIHsNqE/RIs6RV3fcW61j/mRgW2XyoWnMVeBzvcJr9NXp4VQYmFPw\n"
- "amd8GKMZQvP0ufGnUn7D7uartA==\n"
- "-----END CERTIFICATE-----\n";
+static const char kCRLTestRoot[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIDbzCCAlegAwIBAgIJAODri7v0dDUFMA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW
+aWV3MRIwEAYDVQQKDAlCb3JpbmdTU0wwHhcNMTYwOTI2MTUwNjI2WhcNMjYwOTI0
+MTUwNjI2WjBOMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQG
+A1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJQm9yaW5nU1NMMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo16WiLWZuaymsD8n5SKPmxV1y6jjgr3B
+S/dUBpbrzd1aeFzNlI8l2jfAnzUyp+I21RQ+nh/MhqjGElkTtK9xMn1Y+S9GMRh+
+5R/Du0iCb1tCZIPY07Tgrb0KMNWe0v2QKVVruuYSgxIWodBfxlKO64Z8AJ5IbnWp
+uRqO6rctN9qUoMlTIAB6dL4G0tDJ/PGFWOJYwOMEIX54bly2wgyYJVBKiRRt4f7n
+8H922qmvPNA9idmX9G1VAtgV6x97XXi7ULORIQvn9lVQF6nTYDBJhyuPB+mLThbL
+P2o9orxGx7aCtnnBZUIxUvHNOI0FaSaZH7Fi0xsZ/GkG2HZe7ImPJwIDAQABo1Aw
+TjAdBgNVHQ4EFgQUWPt3N5cZ/CRvubbrkqfBnAqhq94wHwYDVR0jBBgwFoAUWPt3
+N5cZ/CRvubbrkqfBnAqhq94wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
+AQEAORu6M0MOwXy+3VEBwNilfTxyqDfruQsc1jA4PT8Oe8zora1WxE1JB4q2FJOz
+EAuM3H/NXvEnBuN+ITvKZAJUfm4NKX97qmjMJwLKWe1gVv+VQTr63aR7mgWJReQN
+XdMztlVeZs2dppV6uEg3ia1X0G7LARxGpA9ETbMyCpb39XxlYuTClcbA5ftDN99B
+3Xg9KNdd++Ew22O3HWRDvdDpTO/JkzQfzi3sYwUtzMEonENhczJhGf7bQMmvL/w5
+24Wxj4Z7KzzWIHsNqE/RIs6RV3fcW61j/mRgW2XyoWnMVeBzvcJr9NXp4VQYmFPw
+amd8GKMZQvP0ufGnUn7D7uartA==
+-----END CERTIFICATE-----
+)";
-static const char kCRLTestLeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIDkDCCAnigAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwTjELMAkGA1UEBhMCVVMx\n"
- "EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEjAQ\n"
- "BgNVBAoMCUJvcmluZ1NTTDAeFw0xNjA5MjYxNTA4MzFaFw0xNzA5MjYxNTA4MzFa\n"
- "MEsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQKDAlC\n"
- "b3JpbmdTU0wxEzARBgNVBAMMCmJvcmluZy5zc2wwggEiMA0GCSqGSIb3DQEBAQUA\n"
- "A4IBDwAwggEKAoIBAQDc5v1S1M0W+QWM+raWfO0LH8uvqEwuJQgODqMaGnSlWUx9\n"
- "8iQcnWfjyPja3lWg9K62hSOFDuSyEkysKHDxijz5R93CfLcfnVXjWQDJe7EJTTDP\n"
- "ozEvxN6RjAeYv7CF000euYr3QT5iyBjg76+bon1p0jHZBJeNPP1KqGYgyxp+hzpx\n"
- "e0gZmTlGAXd8JQK4v8kpdYwD6PPifFL/jpmQpqOtQmH/6zcLjY4ojmqpEdBqIKIX\n"
- "+saA29hMq0+NK3K+wgg31RU+cVWxu3tLOIiesETkeDgArjWRS1Vkzbi4v9SJxtNu\n"
- "OZuAxWiynRJw3JwH/OFHYZIvQqz68ZBoj96cepjPAgMBAAGjezB5MAkGA1UdEwQC\n"
- "MAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRl\n"
- "MB0GA1UdDgQWBBTGn0OVVh/aoYt0bvEKG+PIERqnDzAfBgNVHSMEGDAWgBRY+3c3\n"
- "lxn8JG+5tuuSp8GcCqGr3jANBgkqhkiG9w0BAQsFAAOCAQEAd2nM8gCQN2Dc8QJw\n"
- "XSZXyuI3DBGGCHcay/3iXu0JvTC3EiQo8J6Djv7WLI0N5KH8mkm40u89fJAB2lLZ\n"
- "ShuHVtcC182bOKnePgwp9CNwQ21p0rDEu/P3X46ZvFgdxx82E9xLa0tBB8PiPDWh\n"
- "lV16jbaKTgX5AZqjnsyjR5o9/mbZVupZJXx5Syq+XA8qiJfstSYJs4KyKK9UOjql\n"
- "ICkJVKpi2ahDBqX4MOH4SLfzVk8pqSpviS6yaA1RXqjpkxiN45WWaXDldVHMSkhC\n"
- "5CNXsXi4b1nAntu89crwSLA3rEwzCWeYj+BX7e1T9rr3oJdwOU/2KQtW1js1yQUG\n"
- "tjJMFw==\n"
- "-----END CERTIFICATE-----\n";
+static const char kCRLTestLeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIDkDCCAnigAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwTjELMAkGA1UEBhMCVVMx
+EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEjAQ
+BgNVBAoMCUJvcmluZ1NTTDAeFw0xNjA5MjYxNTA4MzFaFw0xNzA5MjYxNTA4MzFa
+MEsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQKDAlC
+b3JpbmdTU0wxEzARBgNVBAMMCmJvcmluZy5zc2wwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDc5v1S1M0W+QWM+raWfO0LH8uvqEwuJQgODqMaGnSlWUx9
+8iQcnWfjyPja3lWg9K62hSOFDuSyEkysKHDxijz5R93CfLcfnVXjWQDJe7EJTTDP
+ozEvxN6RjAeYv7CF000euYr3QT5iyBjg76+bon1p0jHZBJeNPP1KqGYgyxp+hzpx
+e0gZmTlGAXd8JQK4v8kpdYwD6PPifFL/jpmQpqOtQmH/6zcLjY4ojmqpEdBqIKIX
++saA29hMq0+NK3K+wgg31RU+cVWxu3tLOIiesETkeDgArjWRS1Vkzbi4v9SJxtNu
+OZuAxWiynRJw3JwH/OFHYZIvQqz68ZBoj96cepjPAgMBAAGjezB5MAkGA1UdEwQC
+MAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRl
+MB0GA1UdDgQWBBTGn0OVVh/aoYt0bvEKG+PIERqnDzAfBgNVHSMEGDAWgBRY+3c3
+lxn8JG+5tuuSp8GcCqGr3jANBgkqhkiG9w0BAQsFAAOCAQEAd2nM8gCQN2Dc8QJw
+XSZXyuI3DBGGCHcay/3iXu0JvTC3EiQo8J6Djv7WLI0N5KH8mkm40u89fJAB2lLZ
+ShuHVtcC182bOKnePgwp9CNwQ21p0rDEu/P3X46ZvFgdxx82E9xLa0tBB8PiPDWh
+lV16jbaKTgX5AZqjnsyjR5o9/mbZVupZJXx5Syq+XA8qiJfstSYJs4KyKK9UOjql
+ICkJVKpi2ahDBqX4MOH4SLfzVk8pqSpviS6yaA1RXqjpkxiN45WWaXDldVHMSkhC
+5CNXsXi4b1nAntu89crwSLA3rEwzCWeYj+BX7e1T9rr3oJdwOU/2KQtW1js1yQUG
+tjJMFw==
+-----END CERTIFICATE-----
+)";
-static const char kBasicCRL[] =
- "-----BEGIN X509 CRL-----\n"
- "MIIBpzCBkAIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
- "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
- "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoA4wDDAKBgNV\n"
- "HRQEAwIBATANBgkqhkiG9w0BAQsFAAOCAQEAnrBKKgvd9x9zwK9rtUvVeFeJ7+LN\n"
- "ZEAc+a5oxpPNEsJx6hXoApYEbzXMxuWBQoCs5iEBycSGudct21L+MVf27M38KrWo\n"
- "eOkq0a2siqViQZO2Fb/SUFR0k9zb8xl86Zf65lgPplALun0bV/HT7MJcl04Tc4os\n"
- "dsAReBs5nqTGNEd5AlC1iKHvQZkM//MD51DspKnDpsDiUVi54h9C1SpfZmX8H2Vv\n"
- "diyu0fZ/bPAM3VAGawatf/SyWfBMyKpoPXEG39oAzmjjOj8en82psn7m474IGaho\n"
- "/vBbhl1ms5qQiLYPjm4YELtnXQoFyC72tBjbdFd/ZE9k4CNKDbxFUXFbkw==\n"
- "-----END X509 CRL-----\n";
+static const char kBasicCRL[] = R"(
+-----BEGIN X509 CRL-----
+MIIBpzCBkAIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ
+Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoA4wDDAKBgNV
+HRQEAwIBATANBgkqhkiG9w0BAQsFAAOCAQEAnrBKKgvd9x9zwK9rtUvVeFeJ7+LN
+ZEAc+a5oxpPNEsJx6hXoApYEbzXMxuWBQoCs5iEBycSGudct21L+MVf27M38KrWo
+eOkq0a2siqViQZO2Fb/SUFR0k9zb8xl86Zf65lgPplALun0bV/HT7MJcl04Tc4os
+dsAReBs5nqTGNEd5AlC1iKHvQZkM//MD51DspKnDpsDiUVi54h9C1SpfZmX8H2Vv
+diyu0fZ/bPAM3VAGawatf/SyWfBMyKpoPXEG39oAzmjjOj8en82psn7m474IGaho
+/vBbhl1ms5qQiLYPjm4YELtnXQoFyC72tBjbdFd/ZE9k4CNKDbxFUXFbkw==
+-----END X509 CRL-----
+)";
-static const char kRevokedCRL[] =
- "-----BEGIN X509 CRL-----\n"
- "MIIBvjCBpwIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
- "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
- "Qm9yaW5nU1NMFw0xNjA5MjYxNTEyNDRaFw0xNjEwMjYxNTEyNDRaMBUwEwICEAAX\n"
- "DTE2MDkyNjE1MTIyNlqgDjAMMAoGA1UdFAQDAgECMA0GCSqGSIb3DQEBCwUAA4IB\n"
- "AQCUGaM4DcWzlQKrcZvI8TMeR8BpsvQeo5BoI/XZu2a8h//PyRyMwYeaOM+3zl0d\n"
- "sjgCT8b3C1FPgT+P2Lkowv7rJ+FHJRNQkogr+RuqCSPTq65ha4WKlRGWkMFybzVH\n"
- "NloxC+aU3lgp/NlX9yUtfqYmJek1CDrOOGPrAEAwj1l/BUeYKNGqfBWYJQtPJu+5\n"
- "OaSvIYGpETCZJscUWODmLEb/O3DM438vLvxonwGqXqS0KX37+CHpUlyhnSovxXxp\n"
- "Pz4aF+L7OtczxL0GYtD2fR9B7TDMqsNmHXgQrixvvOY7MUdLGbd4RfJL3yA53hyO\n"
- "xzfKY2TzxLiOmctG0hXFkH5J\n"
- "-----END X509 CRL-----\n";
+static const char kRevokedCRL[] = R"(
+-----BEGIN X509 CRL-----
+MIIBvjCBpwIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ
+Qm9yaW5nU1NMFw0xNjA5MjYxNTEyNDRaFw0xNjEwMjYxNTEyNDRaMBUwEwICEAAX
+DTE2MDkyNjE1MTIyNlqgDjAMMAoGA1UdFAQDAgECMA0GCSqGSIb3DQEBCwUAA4IB
+AQCUGaM4DcWzlQKrcZvI8TMeR8BpsvQeo5BoI/XZu2a8h//PyRyMwYeaOM+3zl0d
+sjgCT8b3C1FPgT+P2Lkowv7rJ+FHJRNQkogr+RuqCSPTq65ha4WKlRGWkMFybzVH
+NloxC+aU3lgp/NlX9yUtfqYmJek1CDrOOGPrAEAwj1l/BUeYKNGqfBWYJQtPJu+5
+OaSvIYGpETCZJscUWODmLEb/O3DM438vLvxonwGqXqS0KX37+CHpUlyhnSovxXxp
+Pz4aF+L7OtczxL0GYtD2fR9B7TDMqsNmHXgQrixvvOY7MUdLGbd4RfJL3yA53hyO
+xzfKY2TzxLiOmctG0hXFkH5J
+-----END X509 CRL-----
+)";
-static const char kBadIssuerCRL[] =
- "-----BEGIN X509 CRL-----\n"
- "MIIBwjCBqwIBATANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
- "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEWMBQGA1UECgwN\n"
- "Tm90IEJvcmluZ1NTTBcNMTYwOTI2MTUxMjQ0WhcNMTYxMDI2MTUxMjQ0WjAVMBMC\n"
- "AhAAFw0xNjA5MjYxNTEyMjZaoA4wDDAKBgNVHRQEAwIBAjANBgkqhkiG9w0BAQsF\n"
- "AAOCAQEAlBmjOA3Fs5UCq3GbyPEzHkfAabL0HqOQaCP12btmvIf/z8kcjMGHmjjP\n"
- "t85dHbI4Ak/G9wtRT4E/j9i5KML+6yfhRyUTUJKIK/kbqgkj06uuYWuFipURlpDB\n"
- "cm81RzZaMQvmlN5YKfzZV/clLX6mJiXpNQg6zjhj6wBAMI9ZfwVHmCjRqnwVmCUL\n"
- "TybvuTmkryGBqREwmSbHFFjg5ixG/ztwzON/Ly78aJ8Bql6ktCl9+/gh6VJcoZ0q\n"
- "L8V8aT8+Ghfi+zrXM8S9BmLQ9n0fQe0wzKrDZh14EK4sb7zmOzFHSxm3eEXyS98g\n"
- "Od4cjsc3ymNk88S4jpnLRtIVxZB+SQ==\n"
- "-----END X509 CRL-----\n";
+static const char kBadIssuerCRL[] = R"(
+-----BEGIN X509 CRL-----
+MIIBwjCBqwIBATANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEWMBQGA1UECgwN
+Tm90IEJvcmluZ1NTTBcNMTYwOTI2MTUxMjQ0WhcNMTYxMDI2MTUxMjQ0WjAVMBMC
+AhAAFw0xNjA5MjYxNTEyMjZaoA4wDDAKBgNVHRQEAwIBAjANBgkqhkiG9w0BAQsF
+AAOCAQEAlBmjOA3Fs5UCq3GbyPEzHkfAabL0HqOQaCP12btmvIf/z8kcjMGHmjjP
+t85dHbI4Ak/G9wtRT4E/j9i5KML+6yfhRyUTUJKIK/kbqgkj06uuYWuFipURlpDB
+cm81RzZaMQvmlN5YKfzZV/clLX6mJiXpNQg6zjhj6wBAMI9ZfwVHmCjRqnwVmCUL
+TybvuTmkryGBqREwmSbHFFjg5ixG/ztwzON/Ly78aJ8Bql6ktCl9+/gh6VJcoZ0q
+L8V8aT8+Ghfi+zrXM8S9BmLQ9n0fQe0wzKrDZh14EK4sb7zmOzFHSxm3eEXyS98g
+Od4cjsc3ymNk88S4jpnLRtIVxZB+SQ==
+-----END X509 CRL-----
+)";
// kKnownCriticalCRL is kBasicCRL but with a critical issuing distribution point
// extension.
-static const char kKnownCriticalCRL[] =
- "-----BEGIN X509 CRL-----\n"
- "MIIBuDCBoQIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
- "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
- "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoB8wHTAKBgNV\n"
- "HRQEAwIBATAPBgNVHRwBAf8EBTADgQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAs37Jq\n"
- "3Htcehm6C2PKXOHekwTqTLOPWsYHfF68kYhdzcopDZBeoKE7jLRkRRGFDaR/tfUs\n"
- "kwLSDNSQ8EwPb9PT1X8kmFn9QmJgWD6f6BzaH5ZZ9iBUwOcvrydlb/jnjdIZHQxs\n"
- "fKOAceW5XX3f7DANC3qwYLsQZR/APkfV8nXjPYVUz1kKj04uq/BbQviInjyUYixN\n"
- "xDx+GDWVVXccehcwAu983kAqP+JDaVQPBVksLuBXz2adrEWwvbLCnZeL3zH1IY9h\n"
- "6MFO6echpvGbU/H+dRX9UkhdJ7gdwKVD3RjfJl+DRVox9lz8Pbo5H699Tkv9/DQP\n"
- "9dMWxqhQlv23osLp\n"
- "-----END X509 CRL-----\n";
+static const char kKnownCriticalCRL[] = R"(
+-----BEGIN X509 CRL-----
+MIIBuDCBoQIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ
+Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoB8wHTAKBgNV
+HRQEAwIBATAPBgNVHRwBAf8EBTADgQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAs37Jq
+3Htcehm6C2PKXOHekwTqTLOPWsYHfF68kYhdzcopDZBeoKE7jLRkRRGFDaR/tfUs
+kwLSDNSQ8EwPb9PT1X8kmFn9QmJgWD6f6BzaH5ZZ9iBUwOcvrydlb/jnjdIZHQxs
+fKOAceW5XX3f7DANC3qwYLsQZR/APkfV8nXjPYVUz1kKj04uq/BbQviInjyUYixN
+xDx+GDWVVXccehcwAu983kAqP+JDaVQPBVksLuBXz2adrEWwvbLCnZeL3zH1IY9h
+6MFO6echpvGbU/H+dRX9UkhdJ7gdwKVD3RjfJl+DRVox9lz8Pbo5H699Tkv9/DQP
+9dMWxqhQlv23osLp
+-----END X509 CRL-----
+)";
// kUnknownCriticalCRL is kBasicCRL but with an unknown critical extension.
-static const char kUnknownCriticalCRL[] =
- "-----BEGIN X509 CRL-----\n"
- "MIIBvDCBpQIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
- "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
- "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCMwITAKBgNV\n"
- "HRQEAwIBATATBgwqhkiG9xIEAYS3CQABAf8EADANBgkqhkiG9w0BAQsFAAOCAQEA\n"
- "GvBP0xqL509InMj/3493YVRV+ldTpBv5uTD6jewzf5XdaxEQ/VjTNe5zKnxbpAib\n"
- "Kf7cwX0PMSkZjx7k7kKdDlEucwVvDoqC+O9aJcqVmM6GDyNb9xENxd0XCXja6MZC\n"
- "yVgP4AwLauB2vSiEprYJyI1APph3iAEeDm60lTXX/wBM/tupQDDujKh2GPyvBRfJ\n"
- "+wEDwGg3ICwvu4gO4zeC5qnFR+bpL9t5tOMAQnVZ0NWv+k7mkd2LbHdD44dxrfXC\n"
- "nhtfERx99SDmC/jtUAJrGhtCO8acr7exCeYcduN7KKCm91OeCJKK6OzWst0Og1DB\n"
- "kwzzU2rL3G65CrZ7H0SZsQ==\n"
- "-----END X509 CRL-----\n";
+static const char kUnknownCriticalCRL[] = R"(
+-----BEGIN X509 CRL-----
+MIIBvDCBpQIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ
+Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCMwITAKBgNV
+HRQEAwIBATATBgwqhkiG9xIEAYS3CQABAf8EADANBgkqhkiG9w0BAQsFAAOCAQEA
+GvBP0xqL509InMj/3493YVRV+ldTpBv5uTD6jewzf5XdaxEQ/VjTNe5zKnxbpAib
+Kf7cwX0PMSkZjx7k7kKdDlEucwVvDoqC+O9aJcqVmM6GDyNb9xENxd0XCXja6MZC
+yVgP4AwLauB2vSiEprYJyI1APph3iAEeDm60lTXX/wBM/tupQDDujKh2GPyvBRfJ
++wEDwGg3ICwvu4gO4zeC5qnFR+bpL9t5tOMAQnVZ0NWv+k7mkd2LbHdD44dxrfXC
+nhtfERx99SDmC/jtUAJrGhtCO8acr7exCeYcduN7KKCm91OeCJKK6OzWst0Og1DB
+kwzzU2rL3G65CrZ7H0SZsQ==
+-----END X509 CRL-----
+)";
// kUnknownCriticalCRL2 is kBasicCRL but with a critical issuing distribution
// point extension followed by an unknown critical extension
-static const char kUnknownCriticalCRL2[] =
- "-----BEGIN X509 CRL-----\n"
- "MIIBzTCBtgIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
- "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
- "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoDQwMjAKBgNV\n"
- "HRQEAwIBATAPBgNVHRwBAf8EBTADgQH/MBMGDCqGSIb3EgQBhLcJAAEB/wQAMA0G\n"
- "CSqGSIb3DQEBCwUAA4IBAQBgSogsC5kf2wzr+0hmZtmLXYd0itAiYO0Gh9AyaEOO\n"
- "myJFuqICHBSLXXUgwNkTUa2x2I/ivyReVFV756VOlWoaV2wJUs0zeCeVBgC9ZFsq\n"
- "5a+8OGgXwgoYESFV5Y3QRF2a1Ytzfbw/o6xLXzTngvMsLOs12D4B5SkopyEZibF4\n"
- "tXlRZyvEudTg3CCrjNP+p/GV07nZ3wcMmKJwQeilgzFUV7NaVCCo9jvPBGp0RxAN\n"
- "KNif7jmjK4hD5mswo/Eq5kxQIc+mTfuUFdgHuAu1hfLYe0YK+Hr4RFf6Qy4hl7Ne\n"
- "YjqkkSVIcr87u+8AznwdstnQzsyD27Jt7SjVORkYRywi\n"
- "-----END X509 CRL-----\n";
+static const char kUnknownCriticalCRL2[] = R"(
+-----BEGIN X509 CRL-----
+MIIBzTCBtgIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ
+Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoDQwMjAKBgNV
+HRQEAwIBATAPBgNVHRwBAf8EBTADgQH/MBMGDCqGSIb3EgQBhLcJAAEB/wQAMA0G
+CSqGSIb3DQEBCwUAA4IBAQBgSogsC5kf2wzr+0hmZtmLXYd0itAiYO0Gh9AyaEOO
+myJFuqICHBSLXXUgwNkTUa2x2I/ivyReVFV756VOlWoaV2wJUs0zeCeVBgC9ZFsq
+5a+8OGgXwgoYESFV5Y3QRF2a1Ytzfbw/o6xLXzTngvMsLOs12D4B5SkopyEZibF4
+tXlRZyvEudTg3CCrjNP+p/GV07nZ3wcMmKJwQeilgzFUV7NaVCCo9jvPBGp0RxAN
+KNif7jmjK4hD5mswo/Eq5kxQIc+mTfuUFdgHuAu1hfLYe0YK+Hr4RFf6Qy4hl7Ne
+YjqkkSVIcr87u+8AznwdstnQzsyD27Jt7SjVORkYRywi
+-----END X509 CRL-----
+)";
// kBadExtensionCRL is kBasicCRL but with an incorrectly-encoded issuing
// distribution point extension.
-static const char kBadExtensionCRL[] =
- "-----BEGIN X509 CRL-----\n"
- "MIIBujCBowIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n"
- "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n"
- "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCEwHzAKBgNV\n"
- "HRQEAwIBATARBgNVHRwBAf8EBzAFoQMBAf8wDQYJKoZIhvcNAQELBQADggEBAA+3\n"
- "i+5e5Ub8sccfgOBs6WVJFI9c8gvJjrJ8/dYfFIAuCyeocs7DFXn1n13CRZ+URR/Q\n"
- "mVWgU28+xeusuSPYFpd9cyYTcVyNUGNTI3lwgcE/yVjPaOmzSZKdPakApRxtpKKQ\n"
- "NN/56aQz3bnT/ZSHQNciRB8U6jiD9V30t0w+FDTpGaG+7bzzUH3UVF9xf9Ctp60A\n"
- "3mfLe0scas7owSt4AEFuj2SPvcE7yvdOXbu+IEv21cEJUVExJAbhvIweHXh6yRW+\n"
- "7VVeiNzdIjkZjyTmAzoXGha4+wbxXyBRbfH+XWcO/H+8nwyG8Gktdu2QB9S9nnIp\n"
- "o/1TpfOMSGhMyMoyPrk=\n"
- "-----END X509 CRL-----\n";
+static const char kBadExtensionCRL[] = R"(
+-----BEGIN X509 CRL-----
+MIIBujCBowIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ
+Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCEwHzAKBgNV
+HRQEAwIBATARBgNVHRwBAf8EBzAFoQMBAf8wDQYJKoZIhvcNAQELBQADggEBAA+3
+i+5e5Ub8sccfgOBs6WVJFI9c8gvJjrJ8/dYfFIAuCyeocs7DFXn1n13CRZ+URR/Q
+mVWgU28+xeusuSPYFpd9cyYTcVyNUGNTI3lwgcE/yVjPaOmzSZKdPakApRxtpKKQ
+NN/56aQz3bnT/ZSHQNciRB8U6jiD9V30t0w+FDTpGaG+7bzzUH3UVF9xf9Ctp60A
+3mfLe0scas7owSt4AEFuj2SPvcE7yvdOXbu+IEv21cEJUVExJAbhvIweHXh6yRW+
+7VVeiNzdIjkZjyTmAzoXGha4+wbxXyBRbfH+XWcO/H+8nwyG8Gktdu2QB9S9nnIp
+o/1TpfOMSGhMyMoyPrk=
+-----END X509 CRL-----
+)";
// kEd25519Cert is a self-signed Ed25519 certificate.
-static const char kEd25519Cert[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBkTCCAUOgAwIBAgIJAJwooam0UCDmMAUGAytlcDBFMQswCQYDVQQGEwJBVTET\n"
- "MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ\n"
- "dHkgTHRkMB4XDTE0MDQyMzIzMjE1N1oXDTE0MDUyMzIzMjE1N1owRTELMAkGA1UE\n"
- "BhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdp\n"
- "ZGdpdHMgUHR5IEx0ZDAqMAUGAytlcAMhANdamAGCsQq31Uv+08lkBzoO4XLz2qYj\n"
- "Ja8CGmj3B1Eao1AwTjAdBgNVHQ4EFgQUoux7eV+fJK2v3ah6QPU/lj1/+7UwHwYD\n"
- "VR0jBBgwFoAUoux7eV+fJK2v3ah6QPU/lj1/+7UwDAYDVR0TBAUwAwEB/zAFBgMr\n"
- "ZXADQQBuCzqji8VP9xU8mHEMjXGChX7YP5J664UyVKHKH9Z1u4wEbB8dJ3ScaWSL\n"
- "r+VHVKUhsrvcdCelnXRrrSD7xWAL\n"
- "-----END CERTIFICATE-----\n";
+static const char kEd25519Cert[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBkTCCAUOgAwIBAgIJAJwooam0UCDmMAUGAytlcDBFMQswCQYDVQQGEwJBVTET
+MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
+dHkgTHRkMB4XDTE0MDQyMzIzMjE1N1oXDTE0MDUyMzIzMjE1N1owRTELMAkGA1UE
+BhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdp
+ZGdpdHMgUHR5IEx0ZDAqMAUGAytlcAMhANdamAGCsQq31Uv+08lkBzoO4XLz2qYj
+Ja8CGmj3B1Eao1AwTjAdBgNVHQ4EFgQUoux7eV+fJK2v3ah6QPU/lj1/+7UwHwYD
+VR0jBBgwFoAUoux7eV+fJK2v3ah6QPU/lj1/+7UwDAYDVR0TBAUwAwEB/zAFBgMr
+ZXADQQBuCzqji8VP9xU8mHEMjXGChX7YP5J664UyVKHKH9Z1u4wEbB8dJ3ScaWSL
+r+VHVKUhsrvcdCelnXRrrSD7xWAL
+-----END CERTIFICATE-----
+)";
// kEd25519CertNull is an invalid self-signed Ed25519 with an explicit NULL in
// the signature algorithm.
-static const char kEd25519CertNull[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBlTCCAUWgAwIBAgIJAJwooam0UCDmMAcGAytlcAUAMEUxCzAJBgNVBAYTAkFV\n"
- "MRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRz\n"
- "IFB0eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYD\n"
- "VQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQg\n"
- "V2lkZ2l0cyBQdHkgTHRkMCowBQYDK2VwAyEA11qYAYKxCrfVS/7TyWQHOg7hcvPa\n"
- "piMlrwIaaPcHURqjUDBOMB0GA1UdDgQWBBSi7Ht5X58kra/dqHpA9T+WPX/7tTAf\n"
- "BgNVHSMEGDAWgBSi7Ht5X58kra/dqHpA9T+WPX/7tTAMBgNVHRMEBTADAQH/MAcG\n"
- "AytlcAUAA0EA70uefNocdJohkKPNROKVyBuBD3LXMyvmdTklsaxSRY3PcZdOohlr\n"
- "recgVPpVS7B+d9g4EwtZXIh4lodTBDHBBw==\n"
- "-----END CERTIFICATE-----\n";
+static const char kEd25519CertNull[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBlTCCAUWgAwIBAgIJAJwooam0UCDmMAcGAytlcAUAMEUxCzAJBgNVBAYTAkFV
+MRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRz
+IFB0eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYD
+VQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQg
+V2lkZ2l0cyBQdHkgTHRkMCowBQYDK2VwAyEA11qYAYKxCrfVS/7TyWQHOg7hcvPa
+piMlrwIaaPcHURqjUDBOMB0GA1UdDgQWBBSi7Ht5X58kra/dqHpA9T+WPX/7tTAf
+BgNVHSMEGDAWgBSi7Ht5X58kra/dqHpA9T+WPX/7tTAMBgNVHRMEBTADAQH/MAcG
+AytlcAUAA0EA70uefNocdJohkKPNROKVyBuBD3LXMyvmdTklsaxSRY3PcZdOohlr
+recgVPpVS7B+d9g4EwtZXIh4lodTBDHBBw==
+-----END CERTIFICATE-----
+)";
// kSANTypesLeaf is a leaf certificate (signed by |kSANTypesRoot|) which
// contains SANS for example.com, test@example.com, 127.0.0.1, and
// https://example.com/. (The latter is useless for now since crypto/x509
// doesn't deal with URI SANs directly.)
-static const char kSANTypesLeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIClzCCAgCgAwIBAgIJAOjwnT/iW+qmMA0GCSqGSIb3DQEBCwUAMCsxFzAVBgNV\n"
- "BAoTDkJvcmluZ1NTTCBUZXN0MRAwDgYDVQQDEwdSb290IENBMB4XDTE1MDEwMTAw\n"
- "MDAwMFoXDTI1MDEwMTAwMDAwMFowLzEXMBUGA1UEChMOQm9yaW5nU1NMIFRlc3Qx\n"
- "FDASBgNVBAMTC2V4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\n"
- "gQDbRn2TLhInBki8Bighq37EtqJd/h5SRYh6NkelCA2SQlvCgcC+l3mYQPtPbRT9\n"
- "KxOLwqUuZ9jUCZ7WIji3Sgt0cyvCNPHRk+WW2XR781ifbGE8wLBB1NkrKyQjd1sc\n"
- "O711Xc4gVM+hY4cdHiTE8x0aUIuqthRD7ZendWL0FMhS1wIDAQABo4G+MIG7MA4G\n"
- "A1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYD\n"
- "VR0TAQH/BAIwADAZBgNVHQ4EEgQQn5EWH0NDPkmm3m22gNefYDAbBgNVHSMEFDAS\n"
- "gBBAN9cB+0AvuBx+VAQnjFkBMEQGA1UdEQQ9MDuCC2V4YW1wbGUuY29tgRB0ZXN0\n"
- "QGV4YW1wbGUuY29thwR/AAABhhRodHRwczovL2V4YW1wbGUuY29tLzANBgkqhkiG\n"
- "9w0BAQsFAAOBgQBtwJvY6+Tk6D6DOtDVaNoJ5y8E25CCuE/Ga4OuIcYJas+yLckf\n"
- "dZwUV3GUG2oBXl2MrpUFxXd4hKBO1CmlBY+hZEeIx0Yp6QWK9P/vnZeydOTP26mk\n"
- "jusJ2PqSmtKNU1Zcaba4d29oFejmOAfeguhR8AHpsc/zHEaS5Q9cJsuJcw==\n"
- "-----END CERTIFICATE-----\n";
+static const char kSANTypesLeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIClzCCAgCgAwIBAgIJAOjwnT/iW+qmMA0GCSqGSIb3DQEBCwUAMCsxFzAVBgNV
+BAoTDkJvcmluZ1NTTCBUZXN0MRAwDgYDVQQDEwdSb290IENBMB4XDTE1MDEwMTAw
+MDAwMFoXDTI1MDEwMTAwMDAwMFowLzEXMBUGA1UEChMOQm9yaW5nU1NMIFRlc3Qx
+FDASBgNVBAMTC2V4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDbRn2TLhInBki8Bighq37EtqJd/h5SRYh6NkelCA2SQlvCgcC+l3mYQPtPbRT9
+KxOLwqUuZ9jUCZ7WIji3Sgt0cyvCNPHRk+WW2XR781ifbGE8wLBB1NkrKyQjd1sc
+O711Xc4gVM+hY4cdHiTE8x0aUIuqthRD7ZendWL0FMhS1wIDAQABo4G+MIG7MA4G
+A1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYD
+VR0TAQH/BAIwADAZBgNVHQ4EEgQQn5EWH0NDPkmm3m22gNefYDAbBgNVHSMEFDAS
+gBBAN9cB+0AvuBx+VAQnjFkBMEQGA1UdEQQ9MDuCC2V4YW1wbGUuY29tgRB0ZXN0
+QGV4YW1wbGUuY29thwR/AAABhhRodHRwczovL2V4YW1wbGUuY29tLzANBgkqhkiG
+9w0BAQsFAAOBgQBtwJvY6+Tk6D6DOtDVaNoJ5y8E25CCuE/Ga4OuIcYJas+yLckf
+dZwUV3GUG2oBXl2MrpUFxXd4hKBO1CmlBY+hZEeIx0Yp6QWK9P/vnZeydOTP26mk
+jusJ2PqSmtKNU1Zcaba4d29oFejmOAfeguhR8AHpsc/zHEaS5Q9cJsuJcw==
+-----END CERTIFICATE-----
+)";
// -----BEGIN RSA PRIVATE KEY-----
// MIICWwIBAAKBgQDbRn2TLhInBki8Bighq37EtqJd/h5SRYh6NkelCA2SQlvCgcC+
@@ -480,22 +503,23 @@
// YvJUG1zoHwUVrxxbR3DbpTODlktLcl/0b97D0IkH3w==
// -----END RSA PRIVATE KEY-----
-static const char kSANTypesRoot[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICTTCCAbagAwIBAgIIAj5CwoHlWuYwDQYJKoZIhvcNAQELBQAwKzEXMBUGA1UE\n"
- "ChMOQm9yaW5nU1NMIFRlc3QxEDAOBgNVBAMTB1Jvb3QgQ0EwHhcNMTUwMTAxMDAw\n"
- "MDAwWhcNMjUwMTAxMDAwMDAwWjArMRcwFQYDVQQKEw5Cb3JpbmdTU0wgVGVzdDEQ\n"
- "MA4GA1UEAxMHUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6Q5/\n"
- "EQzmWuaGg3D2UQcuAngR9bIkkjjuJmICx5TxPqF3asCP1SJotl3iTNrghRE1wpJy\n"
- "SY2BtIiXa7f8skRb2U0GcPkMxo/ps9+jaoRsQ1m+nbLQdpvD1/qZWcO45fNTA71J\n"
- "1rPMokP+rcILuQG4VimUAySnDSghKamulFtK+Z8CAwEAAaN6MHgwDgYDVR0PAQH/\n"
- "BAQDAgIEMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8E\n"
- "BTADAQH/MBkGA1UdDgQSBBBAN9cB+0AvuBx+VAQnjFkBMBsGA1UdIwQUMBKAEEA3\n"
- "1wH7QC+4HH5UBCeMWQEwDQYJKoZIhvcNAQELBQADgYEAc4N6hTE62/3gwg+kyc2f\n"
- "c/Jj1mHrOt+0NRaBnmvbmNpsEjHS96Ef4Wt/ZlPXPkkv1C1VosJnOIMF3Q522wRH\n"
- "bqaxARldS12VAa3gcWisDWD+SqSyDxjyojz0XDiJkTrFuCTCUiZO+1GLB7SO10Ms\n"
- "d5YVX0c90VMnUhF/dlrqS9U=\n"
- "-----END CERTIFICATE-----\n";
+static const char kSANTypesRoot[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICTTCCAbagAwIBAgIIAj5CwoHlWuYwDQYJKoZIhvcNAQELBQAwKzEXMBUGA1UE
+ChMOQm9yaW5nU1NMIFRlc3QxEDAOBgNVBAMTB1Jvb3QgQ0EwHhcNMTUwMTAxMDAw
+MDAwWhcNMjUwMTAxMDAwMDAwWjArMRcwFQYDVQQKEw5Cb3JpbmdTU0wgVGVzdDEQ
+MA4GA1UEAxMHUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6Q5/
+EQzmWuaGg3D2UQcuAngR9bIkkjjuJmICx5TxPqF3asCP1SJotl3iTNrghRE1wpJy
+SY2BtIiXa7f8skRb2U0GcPkMxo/ps9+jaoRsQ1m+nbLQdpvD1/qZWcO45fNTA71J
+1rPMokP+rcILuQG4VimUAySnDSghKamulFtK+Z8CAwEAAaN6MHgwDgYDVR0PAQH/
+BAQDAgIEMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8E
+BTADAQH/MBkGA1UdDgQSBBBAN9cB+0AvuBx+VAQnjFkBMBsGA1UdIwQUMBKAEEA3
+1wH7QC+4HH5UBCeMWQEwDQYJKoZIhvcNAQELBQADgYEAc4N6hTE62/3gwg+kyc2f
+c/Jj1mHrOt+0NRaBnmvbmNpsEjHS96Ef4Wt/ZlPXPkkv1C1VosJnOIMF3Q522wRH
+bqaxARldS12VAa3gcWisDWD+SqSyDxjyojz0XDiJkTrFuCTCUiZO+1GLB7SO10Ms
+d5YVX0c90VMnUhF/dlrqS9U=
+-----END CERTIFICATE-----
+)";
// -----BEGIN RSA PRIVATE KEY-----
// MIICXAIBAAKBgQDpDn8RDOZa5oaDcPZRBy4CeBH1siSSOO4mYgLHlPE+oXdqwI/V
@@ -592,157 +616,166 @@
// kNoBasicConstraintsCertSignIntermediate doesn't have isCA set, but contains
// certSign in the keyUsage.
-static const char kNoBasicConstraintsCertSignIntermediate[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBqjCCAROgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowHzEdMBsGA1UEAxMUTm8gQmFzaWMgQ29uc3RyYWludHMw\n"
- "WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASEFMblfxIEDO8My7wHtHWTuDzNyID1\n"
- "OsPkMGkn32O/pSyXxXuAqDeFoMVffUMTyfm8JcYugSEbrv2qEXXM4bZRoy8wLTAO\n"
- "BgNVHQ8BAf8EBAMCAgQwGwYDVR0jBBQwEoAQQDfXAftAL7gcflQEJ4xZATANBgkq\n"
- "hkiG9w0BAQsFAAOBgQC1Lh6hIAm3K5kRh5iIydU0YAEm7eV6ZSskERDUq3DLJyl9\n"
- "ZUZCHUzvb464dkwZjeNzaUVS1pdElJslwX3DtGgeJLJGCnk8zUjBjaNrrDm0kzPW\n"
- "xKt/6oif1ci/KCKqKNXJAIFbc4e+IiBpenwpxHk3If4NM+Ek0nKoO8Uj0NkgTQ==\n"
- "-----END CERTIFICATE-----\n";
+static const char kNoBasicConstraintsCertSignIntermediate[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBqjCCAROgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowHzEdMBsGA1UEAxMUTm8gQmFzaWMgQ29uc3RyYWludHMw
+WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASEFMblfxIEDO8My7wHtHWTuDzNyID1
+OsPkMGkn32O/pSyXxXuAqDeFoMVffUMTyfm8JcYugSEbrv2qEXXM4bZRoy8wLTAO
+BgNVHQ8BAf8EBAMCAgQwGwYDVR0jBBQwEoAQQDfXAftAL7gcflQEJ4xZATANBgkq
+hkiG9w0BAQsFAAOBgQC1Lh6hIAm3K5kRh5iIydU0YAEm7eV6ZSskERDUq3DLJyl9
+ZUZCHUzvb464dkwZjeNzaUVS1pdElJslwX3DtGgeJLJGCnk8zUjBjaNrrDm0kzPW
+xKt/6oif1ci/KCKqKNXJAIFbc4e+IiBpenwpxHk3If4NM+Ek0nKoO8Uj0NkgTQ==
+-----END CERTIFICATE-----
+)";
-static const char kNoBasicConstraintsCertSignLeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBUDCB96ADAgECAgEDMAoGCCqGSM49BAMCMB8xHTAbBgNVBAMTFE5vIEJhc2lj\n"
- "IENvbnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIwOTkwMTAxMDAwMDAwWjAx\n"
- "MS8wLQYDVQQDEyZMZWFmIGZyb20gQ0Egd2l0aCBubyBCYXNpYyBDb25zdHJhaW50\n"
- "czBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEsYPMwzdJKjB+2gpC90ib2ilHoB\n"
- "w/arQ6ikUX0CNUDDaKaOu/jF39ogzVlg4lDFrjCKShSfCCcrwgONv70IZGijEDAO\n"
- "MAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDSAAwRQIgbV7R99yM+okXSIs6Fp3o\n"
- "eCOXiDL60IBxaTOcLS44ywcCIQDbn87Gj5cFgHBYAkzdHqDsyGXkxQTHDq9jmX24\n"
- "Djy3Zw==\n"
- "-----END CERTIFICATE-----\n";
+static const char kNoBasicConstraintsCertSignLeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBUDCB96ADAgECAgEDMAoGCCqGSM49BAMCMB8xHTAbBgNVBAMTFE5vIEJhc2lj
+IENvbnN0cmFpbnRzMCAXDTAwMDEwMTAwMDAwMFoYDzIwOTkwMTAxMDAwMDAwWjAx
+MS8wLQYDVQQDEyZMZWFmIGZyb20gQ0Egd2l0aCBubyBCYXNpYyBDb25zdHJhaW50
+czBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEsYPMwzdJKjB+2gpC90ib2ilHoB
+w/arQ6ikUX0CNUDDaKaOu/jF39ogzVlg4lDFrjCKShSfCCcrwgONv70IZGijEDAO
+MAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDSAAwRQIgbV7R99yM+okXSIs6Fp3o
+eCOXiDL60IBxaTOcLS44ywcCIQDbn87Gj5cFgHBYAkzdHqDsyGXkxQTHDq9jmX24
+Djy3Zw==
+-----END CERTIFICATE-----
+)";
// kNoBasicConstraintsNetscapeCAIntermediate doesn't have isCA set, but contains
// a Netscape certificate-type extension that asserts a type of "SSL CA".
-static const char kNoBasicConstraintsNetscapeCAIntermediate[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBuDCCASGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowKjEoMCYGA1UEAxMfTm8gQmFzaWMgQ29uc3RyYWludHMg\n"
- "KE5ldHNjYXBlKTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCeMbmCaOtMzXBqi\n"
- "PrCdNOH23CkaawUA+pAezitAN4RXS1O2CGK5sJjGPVVeogROU8G7/b+mU+ciZIzH\n"
- "1PP8FJKjMjAwMBsGA1UdIwQUMBKAEEA31wH7QC+4HH5UBCeMWQEwEQYJYIZIAYb4\n"
- "QgEBBAQDAgIEMA0GCSqGSIb3DQEBCwUAA4GBAAgNWjh7cfBTClTAk+Ml//5xb9Ju\n"
- "tkBhG6Rm+kkMD+qiSMO6t7xS7CsA0+jIBjkdEYaLZ3oxtQCBdZsVNxUvRxZ0AUfF\n"
- "G3DtRFTsrI1f7IQhpMuqEMF4shPW+5x54hrq0Fo6xMs6XoinJZcTUaaB8EeXRF6M\n"
- "P9p6HuyLrmn0c/F0\n"
- "-----END CERTIFICATE-----\n";
+static const char kNoBasicConstraintsNetscapeCAIntermediate[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBuDCCASGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowKjEoMCYGA1UEAxMfTm8gQmFzaWMgQ29uc3RyYWludHMg
+KE5ldHNjYXBlKTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCeMbmCaOtMzXBqi
+PrCdNOH23CkaawUA+pAezitAN4RXS1O2CGK5sJjGPVVeogROU8G7/b+mU+ciZIzH
+1PP8FJKjMjAwMBsGA1UdIwQUMBKAEEA31wH7QC+4HH5UBCeMWQEwEQYJYIZIAYb4
+QgEBBAQDAgIEMA0GCSqGSIb3DQEBCwUAA4GBAAgNWjh7cfBTClTAk+Ml//5xb9Ju
+tkBhG6Rm+kkMD+qiSMO6t7xS7CsA0+jIBjkdEYaLZ3oxtQCBdZsVNxUvRxZ0AUfF
+G3DtRFTsrI1f7IQhpMuqEMF4shPW+5x54hrq0Fo6xMs6XoinJZcTUaaB8EeXRF6M
+P9p6HuyLrmn0c/F0
+-----END CERTIFICATE-----
+)";
-static const char kNoBasicConstraintsNetscapeCALeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBXDCCAQKgAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9ObyBCYXNp\n"
- "YyBDb25zdHJhaW50cyAoTmV0c2NhcGUpMCAXDTAwMDEwMTAwMDAwMFoYDzIwOTkw\n"
- "MTAxMDAwMDAwWjAxMS8wLQYDVQQDEyZMZWFmIGZyb20gQ0Egd2l0aCBubyBCYXNp\n"
- "YyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDlJKolDu3R2\n"
- "tPqSDycr0QJcWhxdBv76V0EEVflcHRxED6vAioTEcnQszt1OfKtBZvjlo0yp6i6Q\n"
- "DaYit0ZInmWjEDAOMAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDSAAwRQIhAJsh\n"
- "aZL6BHeEfoUBj1oZ2Ln91qzj3UCVMJ+vrmwAFdYyAiA3wp2JphgchvmoUFuzPXwj\n"
- "XyPwWPbymSTpzKhB4xB7qQ==\n"
- "-----END CERTIFICATE-----\n";
+static const char kNoBasicConstraintsNetscapeCALeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBXDCCAQKgAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDEx9ObyBCYXNp
+YyBDb25zdHJhaW50cyAoTmV0c2NhcGUpMCAXDTAwMDEwMTAwMDAwMFoYDzIwOTkw
+MTAxMDAwMDAwWjAxMS8wLQYDVQQDEyZMZWFmIGZyb20gQ0Egd2l0aCBubyBCYXNp
+YyBDb25zdHJhaW50czBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDlJKolDu3R2
+tPqSDycr0QJcWhxdBv76V0EEVflcHRxED6vAioTEcnQszt1OfKtBZvjlo0yp6i6Q
+DaYit0ZInmWjEDAOMAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDSAAwRQIhAJsh
+aZL6BHeEfoUBj1oZ2Ln91qzj3UCVMJ+vrmwAFdYyAiA3wp2JphgchvmoUFuzPXwj
+XyPwWPbymSTpzKhB4xB7qQ==
+-----END CERTIFICATE-----
+)";
-static const char kSelfSignedMismatchAlgorithms[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIFMjCCAxqgAwIBAgIJAL0mG5fOeJ7xMA0GCSqGSIb3DQEBDQUAMC0xCzAJBgNV\n"
- "BAYTAkdCMQ8wDQYDVQQHDAZMb25kb24xDTALBgNVBAoMBFRlc3QwIBcNMTgwOTE3\n"
- "MTIxNzU3WhgPMjExODA4MjQxMjE3NTdaMC0xCzAJBgNVBAYTAkdCMQ8wDQYDVQQH\n"
- "DAZMb25kb24xDTALBgNVBAoMBFRlc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw\n"
- "ggIKAoICAQDCMhBrRAGGw+n2GdctBr/cEK4FZA6ajiHjihgpCHoSBdyL4R2jGKLS\n"
- "g0WgaMXa1HpkKN7LcIySosEBPlmcRkr1RqbEvQStOSvoFCXYvtx3alM6HTbXMcDR\n"
- "mqoKoABP6LXsPSoMWIgqMtP2X9EOppzHVIK1yFYFfbIlvYUV2Ka+MuMe0Vh5wvD1\n"
- "4GanPb+cWSKgdRSVQovCCMY3yWtZKVEaxRpCsk/mYYIFWz0tcgMjIKwDx1XXgiAV\n"
- "nU6NK43xbaw3XhtnaD/pv9lhTTbNrlcln9LjTD097BaK4R+1AEPHnpfxA9Ui3upn\n"
- "kbsNUdGdOB0ksZi/vd7lh833YgquQUIAhYrbfvq/HFCpVV1gljzlS3sqULYpLE//\n"
- "i3OsuL2mE+CYIJGpIi2GeJJWXciNMTJDOqTn+fRDtVb4RPp4Y70DJirp7XzaBi3q\n"
- "H0edANCzPSRCDbZsOhzIXhXshldiXVRX666DDlbMQgLTEnNKrkwv6DmU8o15XQsb\n"
- "8k1Os2YwXmkEOxUQ7AJZXVTZSf6UK9Znmdq1ZrHjybMfRUkHVxJcnKvrxfryralv\n"
- "gzfvu+D6HuxrCo3Ojqa+nDgIbxKEBtdrcsMhq1jWPFhjwo1fSadAkKOfdCAuXJRD\n"
- "THg3b4Sf+W7Cpc570YHrIpBf7WFl2XsPcEM0mJZ5+yATASCubNozQwIDAQABo1Mw\n"
- "UTAdBgNVHQ4EFgQUES0hupZSqY21JOba10QyZuxm91EwHwYDVR0jBBgwFoAUES0h\n"
- "upZSqY21JOba10QyZuxm91EwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsF\n"
- "AAOCAgEABTN5S30ng/RMpBweDm2N561PdpaCdiRXtAFCRVWR2mkDYC/Xj9Vqe6be\n"
- "PyM7L/5OKYVjzF1yJu67z/dx+ja5o+41g17jdqla7hyPx+9B4uRyDh+1KJTa+duj\n"
- "mw/aA1LCr6O6W4WizDOsChJ6FaB2Y1+GlFnKWb5nUdhVJqXQE1WOX9dZnw8Y4Npd\n"
- "VmAsjWot0BZorJrt3fwfcv3QfA896twkbo7Llv/8qzg4sXZXZ4ZtgAOqnPngiSn+\n"
- "JT/vYCXZ406VvAFpFqMcVz2dO/VGuL8lGIMHRKNyafrsV81EzH1W/XmRWOgvgj6r\n"
- "yQI63ln/AMY72HQ97xLkE1xKunGz6bK5Ug5+O43Uftc4Mb6MUgzo+ZqEQ3Ob+cAV\n"
- "cvjmtwDaPO/O39O5Xq0tLTlkn2/cKf4OQ6S++GDxzyRVHh5JXgP4j9+jfZY57Woy\n"
- "R1bE7N50JjY4cDermBJKdlBIjL7UPhqmLyaG7V0hBitFlgGBUCcJtJOV0xYd5aF3\n"
- "pxNkvMXhBmh95fjxJ0cJjpO7tN1RAwtMMNgsl7OUbuVRQCHOPW5DgP5qY21jDeRn\n"
- "BY82382l+9QzykmJLI5MZnmj4BA9uIDCwMtoTTvP++SsvhUAbuvh7MOOUQL0EY4m\n"
- "KStYq7X9PKseN+PvmfeoffIKc5R/Ha39oi7cGMVHCr8aiEhsf94=\n"
- "-----END CERTIFICATE-----\n";
+static const char kSelfSignedMismatchAlgorithms[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIFMjCCAxqgAwIBAgIJAL0mG5fOeJ7xMA0GCSqGSIb3DQEBDQUAMC0xCzAJBgNV
+BAYTAkdCMQ8wDQYDVQQHDAZMb25kb24xDTALBgNVBAoMBFRlc3QwIBcNMTgwOTE3
+MTIxNzU3WhgPMjExODA4MjQxMjE3NTdaMC0xCzAJBgNVBAYTAkdCMQ8wDQYDVQQH
+DAZMb25kb24xDTALBgNVBAoMBFRlc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDCMhBrRAGGw+n2GdctBr/cEK4FZA6ajiHjihgpCHoSBdyL4R2jGKLS
+g0WgaMXa1HpkKN7LcIySosEBPlmcRkr1RqbEvQStOSvoFCXYvtx3alM6HTbXMcDR
+mqoKoABP6LXsPSoMWIgqMtP2X9EOppzHVIK1yFYFfbIlvYUV2Ka+MuMe0Vh5wvD1
+4GanPb+cWSKgdRSVQovCCMY3yWtZKVEaxRpCsk/mYYIFWz0tcgMjIKwDx1XXgiAV
+nU6NK43xbaw3XhtnaD/pv9lhTTbNrlcln9LjTD097BaK4R+1AEPHnpfxA9Ui3upn
+kbsNUdGdOB0ksZi/vd7lh833YgquQUIAhYrbfvq/HFCpVV1gljzlS3sqULYpLE//
+i3OsuL2mE+CYIJGpIi2GeJJWXciNMTJDOqTn+fRDtVb4RPp4Y70DJirp7XzaBi3q
+H0edANCzPSRCDbZsOhzIXhXshldiXVRX666DDlbMQgLTEnNKrkwv6DmU8o15XQsb
+8k1Os2YwXmkEOxUQ7AJZXVTZSf6UK9Znmdq1ZrHjybMfRUkHVxJcnKvrxfryralv
+gzfvu+D6HuxrCo3Ojqa+nDgIbxKEBtdrcsMhq1jWPFhjwo1fSadAkKOfdCAuXJRD
+THg3b4Sf+W7Cpc570YHrIpBf7WFl2XsPcEM0mJZ5+yATASCubNozQwIDAQABo1Mw
+UTAdBgNVHQ4EFgQUES0hupZSqY21JOba10QyZuxm91EwHwYDVR0jBBgwFoAUES0h
+upZSqY21JOba10QyZuxm91EwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsF
+AAOCAgEABTN5S30ng/RMpBweDm2N561PdpaCdiRXtAFCRVWR2mkDYC/Xj9Vqe6be
+PyM7L/5OKYVjzF1yJu67z/dx+ja5o+41g17jdqla7hyPx+9B4uRyDh+1KJTa+duj
+mw/aA1LCr6O6W4WizDOsChJ6FaB2Y1+GlFnKWb5nUdhVJqXQE1WOX9dZnw8Y4Npd
+VmAsjWot0BZorJrt3fwfcv3QfA896twkbo7Llv/8qzg4sXZXZ4ZtgAOqnPngiSn+
+JT/vYCXZ406VvAFpFqMcVz2dO/VGuL8lGIMHRKNyafrsV81EzH1W/XmRWOgvgj6r
+yQI63ln/AMY72HQ97xLkE1xKunGz6bK5Ug5+O43Uftc4Mb6MUgzo+ZqEQ3Ob+cAV
+cvjmtwDaPO/O39O5Xq0tLTlkn2/cKf4OQ6S++GDxzyRVHh5JXgP4j9+jfZY57Woy
+R1bE7N50JjY4cDermBJKdlBIjL7UPhqmLyaG7V0hBitFlgGBUCcJtJOV0xYd5aF3
+pxNkvMXhBmh95fjxJ0cJjpO7tN1RAwtMMNgsl7OUbuVRQCHOPW5DgP5qY21jDeRn
+BY82382l+9QzykmJLI5MZnmj4BA9uIDCwMtoTTvP++SsvhUAbuvh7MOOUQL0EY4m
+KStYq7X9PKseN+PvmfeoffIKc5R/Ha39oi7cGMVHCr8aiEhsf94=
+-----END CERTIFICATE-----
+)";
// kCommonNameWithSANs is a leaf certificate signed by kSANTypesRoot, with
// *.host1.test as the common name and a SAN list of *.host2.test and
// foo.host3.test.
-static const char kCommonNameWithSANs[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIB2zCCAUSgAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowNzEeMBwGA1UEChMVQ29tbW9uIG5hbWUgd2l0aCBTQU5z\n"
- "MRUwEwYDVQQDDAwqLmhvc3QxLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC\n"
- "AASgWzfnFnpQrokSLIC+LhCKJDUAY/2usfIDpOnafYoYCasbYetkmOslgyY4Nn07\n"
- "zjvjNROprA/0bdULXAkdL9bNo0gwRjAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQn\n"
- "jFkBMCcGA1UdEQQgMB6CDCouaG9zdDIudGVzdIIOZm9vLmhvc3QzLnRlc3QwDQYJ\n"
- "KoZIhvcNAQELBQADgYEAtv2e3hBhsslXB1HTxgusjoschWOVtvGZUaYlhkKzKTCL\n"
- "4YpDn50BccnucBU/b9phYvaEZtyzOv4ZXhxTGyLnLrIVB9x5ikfCcfl+LNYNjDwM\n"
- "enm/h1zOfJ7wXLyscD4kU29Wc/zxBd70thIgLYn16CC1S9NtXKsXXDXv5VVH/bg=\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNameWithSANs[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIB2zCCAUSgAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowNzEeMBwGA1UEChMVQ29tbW9uIG5hbWUgd2l0aCBTQU5z
+MRUwEwYDVQQDDAwqLmhvc3QxLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC
+AASgWzfnFnpQrokSLIC+LhCKJDUAY/2usfIDpOnafYoYCasbYetkmOslgyY4Nn07
+zjvjNROprA/0bdULXAkdL9bNo0gwRjAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQn
+jFkBMCcGA1UdEQQgMB6CDCouaG9zdDIudGVzdIIOZm9vLmhvc3QzLnRlc3QwDQYJ
+KoZIhvcNAQELBQADgYEAtv2e3hBhsslXB1HTxgusjoschWOVtvGZUaYlhkKzKTCL
+4YpDn50BccnucBU/b9phYvaEZtyzOv4ZXhxTGyLnLrIVB9x5ikfCcfl+LNYNjDwM
+enm/h1zOfJ7wXLyscD4kU29Wc/zxBd70thIgLYn16CC1S9NtXKsXXDXv5VVH/bg=
+-----END CERTIFICATE-----
+)";
// kCommonNameWithSANs is a leaf certificate signed by kSANTypesRoot, with
// *.host1.test as the common name and no SAN list.
-static const char kCommonNameWithoutSANs[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBtTCCAR6gAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowOjEhMB8GA1UEChMYQ29tbW9uIG5hbWUgd2l0aG91dCBT\n"
- "QU5zMRUwEwYDVQQDDAwqLmhvc3QxLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMB\n"
- "BwNCAARt2vjlIrPE+kr11VS1rRP/AYQu4fvf1bNw/K9rwYlVBhmLMPYasEmpCtKE\n"
- "0bDIFydtDYC3wZDpSS+YiaG40sdAox8wHTAbBgNVHSMEFDASgBBAN9cB+0AvuBx+\n"
- "VAQnjFkBMA0GCSqGSIb3DQEBCwUAA4GBAHRbIeaCEytOpJpw9O2dlB656AHe1+t5\n"
- "4JiS5mvtzoVOLn7fFk5EFQtZS7sG1Uc2XjlSw+iyvFoTFEqfKyU/mIdc2vBuPwA2\n"
- "+YXT8aE4S+UZ9oz5j0gDpikGnkSCW0cyHD8L8fntNjaQRSaM482JpmtdmuxClmWO\n"
- "pFFXI2B5usgI\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNameWithoutSANs[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBtTCCAR6gAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowOjEhMB8GA1UEChMYQ29tbW9uIG5hbWUgd2l0aG91dCBT
+QU5zMRUwEwYDVQQDDAwqLmhvc3QxLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMB
+BwNCAARt2vjlIrPE+kr11VS1rRP/AYQu4fvf1bNw/K9rwYlVBhmLMPYasEmpCtKE
+0bDIFydtDYC3wZDpSS+YiaG40sdAox8wHTAbBgNVHSMEFDASgBBAN9cB+0AvuBx+
+VAQnjFkBMA0GCSqGSIb3DQEBCwUAA4GBAHRbIeaCEytOpJpw9O2dlB656AHe1+t5
+4JiS5mvtzoVOLn7fFk5EFQtZS7sG1Uc2XjlSw+iyvFoTFEqfKyU/mIdc2vBuPwA2
++YXT8aE4S+UZ9oz5j0gDpikGnkSCW0cyHD8L8fntNjaQRSaM482JpmtdmuxClmWO
+pFFXI2B5usgI
+-----END CERTIFICATE-----
+)";
// kCommonNameWithEmailSAN is a leaf certificate signed by kSANTypesRoot, with
// *.host1.test as the common name and the email address test@host2.test in the
// SAN list.
-static const char kCommonNameWithEmailSAN[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBvDCCASWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFzEVMBMGA1UEAwwMKi5ob3N0MS50ZXN0MFkwEwYHKoZI\n"
- "zj0CAQYIKoZIzj0DAQcDQgAEtevOxcTjpPzlNGoUMFfZyr1k03/Hiuh+EsnuScDs\n"
- "8XLKi6fDkvSaDClI99ycabQZRPIrvyT+dglDC6ugQd+CYqNJMEcwDAYDVR0TAQH/\n"
- "BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMBoGA1UdEQQTMBGBD3Rl\n"
- "c3RAaG9zdDIudGVzdDANBgkqhkiG9w0BAQsFAAOBgQCGbqb78OWJWl4zb+qw0Dz2\n"
- "HJgZZJt6/+nNG/XJKdaYeS4eofsbwsJI4fuuOF6ZvYCJxVNtGqdfZDgycvFA9hjv\n"
- "NGosBF1/spP17cmzTahLjxs71jDvHV/EQJbKGl/Zpta1Em1VrzSrwoOFabPXzZTJ\n"
- "aet/mER21Z/9ZsTUoJQPJw==\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNameWithEmailSAN[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBvDCCASWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFzEVMBMGA1UEAwwMKi5ob3N0MS50ZXN0MFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEtevOxcTjpPzlNGoUMFfZyr1k03/Hiuh+EsnuScDs
+8XLKi6fDkvSaDClI99ycabQZRPIrvyT+dglDC6ugQd+CYqNJMEcwDAYDVR0TAQH/
+BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMBoGA1UdEQQTMBGBD3Rl
+c3RAaG9zdDIudGVzdDANBgkqhkiG9w0BAQsFAAOBgQCGbqb78OWJWl4zb+qw0Dz2
+HJgZZJt6/+nNG/XJKdaYeS4eofsbwsJI4fuuOF6ZvYCJxVNtGqdfZDgycvFA9hjv
+NGosBF1/spP17cmzTahLjxs71jDvHV/EQJbKGl/Zpta1Em1VrzSrwoOFabPXzZTJ
+aet/mER21Z/9ZsTUoJQPJw==
+-----END CERTIFICATE-----
+)";
// kCommonNameWithIPSAN is a leaf certificate signed by kSANTypesRoot, with
// *.host1.test as the common name and the IP address 127.0.0.1 in the
// SAN list.
-static const char kCommonNameWithIPSAN[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBsTCCARqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFzEVMBMGA1UEAwwMKi5ob3N0MS50ZXN0MFkwEwYHKoZI\n"
- "zj0CAQYIKoZIzj0DAQcDQgAEFKrgkxm8PysXbwnHQeTD3p8YY0+sY4ssnZgmj8wX\n"
- "KTyn893fdBHWlz71GO6t82wMTF5d+ZYwI2XU52pfl4SB2aM+MDwwDAYDVR0TAQH/\n"
- "BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMA8GA1UdEQQIMAaHBH8A\n"
- "AAEwDQYJKoZIhvcNAQELBQADgYEAQWZ8Oj059ZjS109V/ijMYT28xuAN5n6HHxCO\n"
- "DopTP56Zu9+gme5wTETWEfocspZvgecoUOcedTFoKSQ7JafO09NcVLA+D6ddYpju\n"
- "mgfuiLy9dDhqvX/NHaLBMxOBWWbOLwWE+ibyX+pOzjWRCw1L7eUXOr6PhZAOQsmU\n"
- "D0+O6KI=\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNameWithIPSAN[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBsTCCARqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFzEVMBMGA1UEAwwMKi5ob3N0MS50ZXN0MFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEFKrgkxm8PysXbwnHQeTD3p8YY0+sY4ssnZgmj8wX
+KTyn893fdBHWlz71GO6t82wMTF5d+ZYwI2XU52pfl4SB2aM+MDwwDAYDVR0TAQH/
+BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMA8GA1UdEQQIMAaHBH8A
+AAEwDQYJKoZIhvcNAQELBQADgYEAQWZ8Oj059ZjS109V/ijMYT28xuAN5n6HHxCO
+DopTP56Zu9+gme5wTETWEfocspZvgecoUOcedTFoKSQ7JafO09NcVLA+D6ddYpju
+mgfuiLy9dDhqvX/NHaLBMxOBWWbOLwWE+ibyX+pOzjWRCw1L7eUXOr6PhZAOQsmU
+D0+O6KI=
+-----END CERTIFICATE-----
+)";
// kConstrainedIntermediate is an intermediate signed by kSANTypesRoot, with
// permitted DNS names of permitted1.test and foo.permitted2.test and an
@@ -753,84 +786,89 @@
// JhNOfIv/d8heWFBeKOfMR+RfaROhRANCAASbbbWYiN6mn+BCpg4XNpibOH0D/DN4
// kZ5C/Ml2YVomC9T83OKk2CzB8fPAabPb4P4Vv+fIabpEfjWS5nzKLY1y
// -----END PRIVATE KEY-----
-static const char kConstrainedIntermediate[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICDjCCAXegAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowKDEmMCQGA1UEAxMdTmFtZSBDb25zdHJhaW50cyBJbnRl\n"
- "cm1lZGlhdGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASbbbWYiN6mn+BCpg4X\n"
- "NpibOH0D/DN4kZ5C/Ml2YVomC9T83OKk2CzB8fPAabPb4P4Vv+fIabpEfjWS5nzK\n"
- "LY1yo4GJMIGGMA8GA1UdEwEB/wQFMAMBAf8wGwYDVR0jBBQwEoAQQDfXAftAL7gc\n"
- "flQEJ4xZATBWBgNVHR4BAf8ETDBKoCowEYIPcGVybWl0dGVkMS50ZXN0MBWCE2Zv\n"
- "by5wZXJtaXR0ZWQyLnRlc3ShHDAaghhleGNsdWRlZC5wZXJtaXR0ZWQxLnRlc3Qw\n"
- "DQYJKoZIhvcNAQELBQADgYEAFq1Ka05hiKREwRpSceQPzIIH4B5a5IVBg5/EvmQI\n"
- "9V0fXyAE1GmahPt70sIBxIgzNTEaY8P/IoOuCdlZWe0msmyEO3S6YSAzOWR5Van6\n"
- "cXmFM1uMd95TlkxUMRdV+jKJTvG6R/BM2zltaV7Xt662k5HtzT5Svw0rZlFaggZz\n"
- "UyM=\n"
- "-----END CERTIFICATE-----\n";
+static const char kConstrainedIntermediate[] = R"(
+-----BEGIN CERTIFICATE-----
+MIICDjCCAXegAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowKDEmMCQGA1UEAxMdTmFtZSBDb25zdHJhaW50cyBJbnRl
+cm1lZGlhdGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASbbbWYiN6mn+BCpg4X
+NpibOH0D/DN4kZ5C/Ml2YVomC9T83OKk2CzB8fPAabPb4P4Vv+fIabpEfjWS5nzK
+LY1yo4GJMIGGMA8GA1UdEwEB/wQFMAMBAf8wGwYDVR0jBBQwEoAQQDfXAftAL7gc
+flQEJ4xZATBWBgNVHR4BAf8ETDBKoCowEYIPcGVybWl0dGVkMS50ZXN0MBWCE2Zv
+by5wZXJtaXR0ZWQyLnRlc3ShHDAaghhleGNsdWRlZC5wZXJtaXR0ZWQxLnRlc3Qw
+DQYJKoZIhvcNAQELBQADgYEAFq1Ka05hiKREwRpSceQPzIIH4B5a5IVBg5/EvmQI
+9V0fXyAE1GmahPt70sIBxIgzNTEaY8P/IoOuCdlZWe0msmyEO3S6YSAzOWR5Van6
+cXmFM1uMd95TlkxUMRdV+jKJTvG6R/BM2zltaV7Xt662k5HtzT5Svw0rZlFaggZz
+UyM=
+-----END CERTIFICATE-----
+)";
// kCommonNamePermittedLeaf is a leaf certificate signed by
// kConstrainedIntermediate. Its common name is permitted by the name
// constraints.
-static const char kCommonNamePermittedLeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBaDCCAQ2gAwIBAgIBAzAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
- "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
- "MTAwMDAwMFowPjEeMBwGA1UEChMVQ29tbW9uIG5hbWUgcGVybWl0dGVkMRwwGgYD\n"
- "VQQDExNmb28ucGVybWl0dGVkMS50ZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n"
- "QgAENX5Ycs8q8MRzPYUz6DqLHhJR3wcmniFRgkiEa7MxE/mRe00y0VGwH7xi7Aoc\n"
- "emXPrtD4JwN5bssbcxWGAKYYzaMQMA4wDAYDVR0TAQH/BAIwADAKBggqhkjOPQQD\n"
- "AgNJADBGAiEAtsnWuRQXtw2xbieC78Y8SVEtTjcZUx8uZyQe1GPLfGICIQDR4fNY\n"
- "yg3PC94ydPNQZVsFxAne32CbonWWsokalTFpUQ==\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNamePermittedLeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAzAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv
+bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw
+MTAwMDAwMFowPjEeMBwGA1UEChMVQ29tbW9uIG5hbWUgcGVybWl0dGVkMRwwGgYD
+VQQDExNmb28ucGVybWl0dGVkMS50ZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+QgAENX5Ycs8q8MRzPYUz6DqLHhJR3wcmniFRgkiEa7MxE/mRe00y0VGwH7xi7Aoc
+emXPrtD4JwN5bssbcxWGAKYYzaMQMA4wDAYDVR0TAQH/BAIwADAKBggqhkjOPQQD
+AgNJADBGAiEAtsnWuRQXtw2xbieC78Y8SVEtTjcZUx8uZyQe1GPLfGICIQDR4fNY
+yg3PC94ydPNQZVsFxAne32CbonWWsokalTFpUQ==
+-----END CERTIFICATE-----
+)";
static const char kCommonNamePermitted[] = "foo.permitted1.test";
// kCommonNameNotPermittedLeaf is a leaf certificate signed by
// kConstrainedIntermediate. Its common name is not permitted by the name
// constraints.
-static const char kCommonNameNotPermittedLeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBazCCARCgAwIBAgIBBDAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
- "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
- "MTAwMDAwMFowQTEiMCAGA1UEChMZQ29tbW9uIG5hbWUgbm90IHBlcm1pdHRlZDEb\n"
- "MBkGA1UEAxMSbm90LXBlcm1pdHRlZC50ZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0D\n"
- "AQcDQgAEzfghKuWf0JoXb0Drp09C3yXMSQQ1byt+AUaymvsHOWsxQ9v1Q+vkF/IM\n"
- "HRqGTk2TyxrB2iClVEn/Uu+YtYox1KMQMA4wDAYDVR0TAQH/BAIwADAKBggqhkjO\n"
- "PQQDAgNJADBGAiEAxaUslxmoWL1tIvnDz7gDkto/HcmdU0jHVuUQLXcCG8wCIQCN\n"
- "5xZjitlCQU8UB5qSu9wH4B+0JcVO3Ss4Az76HEJWMw==\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNameNotPermittedLeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBazCCARCgAwIBAgIBBDAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv
+bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw
+MTAwMDAwMFowQTEiMCAGA1UEChMZQ29tbW9uIG5hbWUgbm90IHBlcm1pdHRlZDEb
+MBkGA1UEAxMSbm90LXBlcm1pdHRlZC50ZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0D
+AQcDQgAEzfghKuWf0JoXb0Drp09C3yXMSQQ1byt+AUaymvsHOWsxQ9v1Q+vkF/IM
+HRqGTk2TyxrB2iClVEn/Uu+YtYox1KMQMA4wDAYDVR0TAQH/BAIwADAKBggqhkjO
+PQQDAgNJADBGAiEAxaUslxmoWL1tIvnDz7gDkto/HcmdU0jHVuUQLXcCG8wCIQCN
+5xZjitlCQU8UB5qSu9wH4B+0JcVO3Ss4Az76HEJWMw==
+-----END CERTIFICATE-----
+)";
static const char kCommonNameNotPermitted[] = "not-permitted.test";
// kCommonNameNotPermittedWithSANsLeaf is a leaf certificate signed by
// kConstrainedIntermediate. Its common name is not permitted by the name
// constraints but it has a SAN list.
-static const char kCommonNameNotPermittedWithSANsLeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBqTCCAU+gAwIBAgIBBjAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
- "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
- "MTAwMDAwMFowSzEsMCoGA1UEChMjQ29tbW9uIG5hbWUgbm90IHBlcm1pdHRlZCB3\n"
- "aXRoIFNBTlMxGzAZBgNVBAMTEm5vdC1wZXJtaXR0ZWQudGVzdDBZMBMGByqGSM49\n"
- "AgEGCCqGSM49AwEHA0IABKsn9wOApXFHrqhLdQgbFSeaSoAIbxgO0zVSRZUb5naR\n"
- "93zoL3MFOvZEF8xiEqh7le+l3XuUig0fwqpcsZzRNJajRTBDMAwGA1UdEwEB/wQC\n"
- "MAAwMwYDVR0RBCwwKoITZm9vLnBlcm1pdHRlZDEudGVzdIITZm9vLnBlcm1pdHRl\n"
- "ZDIudGVzdDAKBggqhkjOPQQDAgNIADBFAiACk+1f184KkKAXuntmrz+Ygcq8MiZl\n"
- "4delx44FtcNaegIhAIA5nYfzxNcTXxDo3U+x1vSLH6Y7faLvHiFySp7O//q+\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNameNotPermittedWithSANsLeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBqTCCAU+gAwIBAgIBBjAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv
+bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw
+MTAwMDAwMFowSzEsMCoGA1UEChMjQ29tbW9uIG5hbWUgbm90IHBlcm1pdHRlZCB3
+aXRoIFNBTlMxGzAZBgNVBAMTEm5vdC1wZXJtaXR0ZWQudGVzdDBZMBMGByqGSM49
+AgEGCCqGSM49AwEHA0IABKsn9wOApXFHrqhLdQgbFSeaSoAIbxgO0zVSRZUb5naR
+93zoL3MFOvZEF8xiEqh7le+l3XuUig0fwqpcsZzRNJajRTBDMAwGA1UdEwEB/wQC
+MAAwMwYDVR0RBCwwKoITZm9vLnBlcm1pdHRlZDEudGVzdIITZm9vLnBlcm1pdHRl
+ZDIudGVzdDAKBggqhkjOPQQDAgNIADBFAiACk+1f184KkKAXuntmrz+Ygcq8MiZl
+4delx44FtcNaegIhAIA5nYfzxNcTXxDo3U+x1vSLH6Y7faLvHiFySp7O//q+
+-----END CERTIFICATE-----
+)";
static const char kCommonNameNotPermittedWithSANs[] = "not-permitted.test";
// kCommonNameNotDNSLeaf is a leaf certificate signed by
// kConstrainedIntermediate. Its common name is not a DNS name.
-static const char kCommonNameNotDNSLeaf[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBYTCCAQagAwIBAgIBCDAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
- "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
- "MTAwMDAwMFowNzEcMBoGA1UEChMTQ29tbW9uIG5hbWUgbm90IEROUzEXMBUGA1UE\n"
- "AxMOTm90IGEgRE5TIG5hbWUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASnueyc\n"
- "Zxtnw5ke2J2T0/LwAK37auQP/RSFd9mem+BJVbgviawtAlignJmafp7Zw4/GdYEJ\n"
- "Vm8qlriOJtluvXGcoxAwDjAMBgNVHRMBAf8EAjAAMAoGCCqGSM49BAMCA0kAMEYC\n"
- "IQChUAmVNI39VHe0zemRE09VDcSEgOxr1nTvjLcg/Q8pVQIhAJYZnJI0YZAi05QH\n"
- "RHNlAkTK2TnUaVn3fGSylaLiFS1r\n"
- "-----END CERTIFICATE-----\n";
+static const char kCommonNameNotDNSLeaf[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBYTCCAQagAwIBAgIBCDAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv
+bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw
+MTAwMDAwMFowNzEcMBoGA1UEChMTQ29tbW9uIG5hbWUgbm90IEROUzEXMBUGA1UE
+AxMOTm90IGEgRE5TIG5hbWUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASnueyc
+Zxtnw5ke2J2T0/LwAK37auQP/RSFd9mem+BJVbgviawtAlignJmafp7Zw4/GdYEJ
+Vm8qlriOJtluvXGcoxAwDjAMBgNVHRMBAf8EAjAAMAoGCCqGSM49BAMCA0kAMEYC
+IQChUAmVNI39VHe0zemRE09VDcSEgOxr1nTvjLcg/Q8pVQIhAJYZnJI0YZAi05QH
+RHNlAkTK2TnUaVn3fGSylaLiFS1r
+-----END CERTIFICATE-----
+)";
static const char kCommonNameNotDNS[] = "Not a DNS name";
// The following six certificates are issued by |kSANTypesRoot| and have
@@ -861,88 +899,94 @@
// pem.Encode(os.Stdout, &pem.Block{Type: "CERTIFICATE", Bytes: leafDER})
// }
-static const char kMicrosoftSGCCert[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBtDCCAR2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C\n"
- "AQYIKoZIzj0DAQcDQgAEEn61v3Vs+q6bTyyRnrJvuKBE8PTNVLbXGB52jig4Qse2\n"
- "mGygNEysS0uzZ0luz+rn2hDRUFL6sHLUs1d8UMbI/6NEMEIwFQYDVR0lBA4wDAYK\n"
- "KwYBBAGCNwoDAzAMBgNVHRMBAf8EAjAAMBsGA1UdIwQUMBKAEEA31wH7QC+4HH5U\n"
- "BCeMWQEwDQYJKoZIhvcNAQELBQADgYEAgDQI9RSo3E3ZVnU71TV/LjG9xwHtfk6I\n"
- "rlNnlJJ0lsTHAuMc1mwCbzhtsmasetwYlIa9G8GFWB9Gh/QqHA7G649iGGmXShqe\n"
- "aVDuWgeSEJxBPE2jILoMm4pEYF7jfonTn7XXX6O78yuSlP+NPIU0gUKHkWZ1sWk0\n"
- "cC4l0r/6jik=\n"
- "-----END CERTIFICATE-----\n";
+static const char kMicrosoftSGCCert[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBtDCCAR2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C
+AQYIKoZIzj0DAQcDQgAEEn61v3Vs+q6bTyyRnrJvuKBE8PTNVLbXGB52jig4Qse2
+mGygNEysS0uzZ0luz+rn2hDRUFL6sHLUs1d8UMbI/6NEMEIwFQYDVR0lBA4wDAYK
+KwYBBAGCNwoDAzAMBgNVHRMBAf8EAjAAMBsGA1UdIwQUMBKAEEA31wH7QC+4HH5U
+BCeMWQEwDQYJKoZIhvcNAQELBQADgYEAgDQI9RSo3E3ZVnU71TV/LjG9xwHtfk6I
+rlNnlJJ0lsTHAuMc1mwCbzhtsmasetwYlIa9G8GFWB9Gh/QqHA7G649iGGmXShqe
+aVDuWgeSEJxBPE2jILoMm4pEYF7jfonTn7XXX6O78yuSlP+NPIU0gUKHkWZ1sWk0
+cC4l0r/6jik=
+-----END CERTIFICATE-----
+)";
-static const char kNetscapeSGCCert[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBszCCARygAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C\n"
- "AQYIKoZIzj0DAQcDQgAE3NbT+TnBfq1DWJCezjaUL52YhDU7cOkI2S2PoWgJ1v7x\n"
- "kKLwBonUFZjppZs69SyBHeJdti+KoJ3qTW+hCG08EaNDMEEwFAYDVR0lBA0wCwYJ\n"
- "YIZIAYb4QgQBMAwGA1UdEwEB/wQCMAAwGwYDVR0jBBQwEoAQQDfXAftAL7gcflQE\n"
- "J4xZATANBgkqhkiG9w0BAQsFAAOBgQBuiyVcfazekHkCWksxdFmjPmMtWCxFjkzc\n"
- "8VBxFE0CfSHQAfZ8J7tXd1FbAq/eXdZvvo8v0JB4sOM4Ex1ob1fuvDFHdSAHAD7W\n"
- "dhKIjJyzVojoxjCjyue0XMeEPl7RiqbdxoS/R5HFAqAF0T2OeQAqP9gTpOXoau1M\n"
- "RQHX6HQJJg==\n"
- "-----END CERTIFICATE-----\n";
+static const char kNetscapeSGCCert[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBszCCARygAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C
+AQYIKoZIzj0DAQcDQgAE3NbT+TnBfq1DWJCezjaUL52YhDU7cOkI2S2PoWgJ1v7x
+kKLwBonUFZjppZs69SyBHeJdti+KoJ3qTW+hCG08EaNDMEEwFAYDVR0lBA0wCwYJ
+YIZIAYb4QgQBMAwGA1UdEwEB/wQCMAAwGwYDVR0jBBQwEoAQQDfXAftAL7gcflQE
+J4xZATANBgkqhkiG9w0BAQsFAAOBgQBuiyVcfazekHkCWksxdFmjPmMtWCxFjkzc
+8VBxFE0CfSHQAfZ8J7tXd1FbAq/eXdZvvo8v0JB4sOM4Ex1ob1fuvDFHdSAHAD7W
+dhKIjJyzVojoxjCjyue0XMeEPl7RiqbdxoS/R5HFAqAF0T2OeQAqP9gTpOXoau1M
+RQHX6HQJJg==
+-----END CERTIFICATE-----
+)";
-static const char kServerEKUCert[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBsjCCARugAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C\n"
- "AQYIKoZIzj0DAQcDQgAEDd35i+VWPwIOKLrLWTuP5cqD+yJDB5nujEzPgkXP5LKJ\n"
- "SZRbHTqTdpYZB2jy6y90RY2Bsjx7FfZ7nN5G2g1GOKNCMEAwEwYDVR0lBAwwCgYI\n"
- "KwYBBQUHAwEwDAYDVR0TAQH/BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQn\n"
- "jFkBMA0GCSqGSIb3DQEBCwUAA4GBAIKmbMBjuivL/rxDu7u7Vr3o3cdmEggBJxwL\n"
- "iatNW3x1wg0645aNYOktW/iQ7mAAiziTY73GFyfiJDWqnY+CwA94ZWyQidjHdN/I\n"
- "6BR52sN/dkYEoInYEbmDNMc/if+T0yqeBQLP4BeKLiT8p0qqaimae6LgibS19hDP\n"
- "2hoEMdz2\n"
- "-----END CERTIFICATE-----\n";
+static const char kServerEKUCert[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBsjCCARugAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C
+AQYIKoZIzj0DAQcDQgAEDd35i+VWPwIOKLrLWTuP5cqD+yJDB5nujEzPgkXP5LKJ
+SZRbHTqTdpYZB2jy6y90RY2Bsjx7FfZ7nN5G2g1GOKNCMEAwEwYDVR0lBAwwCgYI
+KwYBBQUHAwEwDAYDVR0TAQH/BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQn
+jFkBMA0GCSqGSIb3DQEBCwUAA4GBAIKmbMBjuivL/rxDu7u7Vr3o3cdmEggBJxwL
+iatNW3x1wg0645aNYOktW/iQ7mAAiziTY73GFyfiJDWqnY+CwA94ZWyQidjHdN/I
+6BR52sN/dkYEoInYEbmDNMc/if+T0yqeBQLP4BeKLiT8p0qqaimae6LgibS19hDP
+2hoEMdz2
+-----END CERTIFICATE-----
+)";
-static const char kServerEKUPlusMicrosoftSGCCert[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBvjCCASegAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C\n"
- "AQYIKoZIzj0DAQcDQgAEDO1MYPxq+U4oXMIK8UnsS4C696wpcu4UOmcMJJ5CUd5Z\n"
- "ZpJShN6kYKnrb3GK/6xEgbUGntmrzSRG5FYqk6QgD6NOMEwwHwYDVR0lBBgwFgYI\n"
- "KwYBBQUHAwEGCisGAQQBgjcKAwMwDAYDVR0TAQH/BAIwADAbBgNVHSMEFDASgBBA\n"
- "N9cB+0AvuBx+VAQnjFkBMA0GCSqGSIb3DQEBCwUAA4GBAHOu2IBa4lHzVGS36HxS\n"
- "SejUE87Ji1ysM6BgkYbfxfS9MuV+J3UnqH57JjbH/3CFl4ZDWceF6SGBSCn8LqKa\n"
- "KHpwoNFU3zA99iQzVJgbUyN0PbKwHEanLyKDJZyFk71R39ToxhSNQgaQYjZYCy1H\n"
- "5V9oXd1bodEqVsOZ/mur24Ku\n"
- "-----END CERTIFICATE-----\n";
+static const char kServerEKUPlusMicrosoftSGCCert[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBvjCCASegAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C
+AQYIKoZIzj0DAQcDQgAEDO1MYPxq+U4oXMIK8UnsS4C696wpcu4UOmcMJJ5CUd5Z
+ZpJShN6kYKnrb3GK/6xEgbUGntmrzSRG5FYqk6QgD6NOMEwwHwYDVR0lBBgwFgYI
+KwYBBQUHAwEGCisGAQQBgjcKAwMwDAYDVR0TAQH/BAIwADAbBgNVHSMEFDASgBBA
+N9cB+0AvuBx+VAQnjFkBMA0GCSqGSIb3DQEBCwUAA4GBAHOu2IBa4lHzVGS36HxS
+SejUE87Ji1ysM6BgkYbfxfS9MuV+J3UnqH57JjbH/3CFl4ZDWceF6SGBSCn8LqKa
+KHpwoNFU3zA99iQzVJgbUyN0PbKwHEanLyKDJZyFk71R39ToxhSNQgaQYjZYCy1H
+5V9oXd1bodEqVsOZ/mur24Ku
+-----END CERTIFICATE-----
+)";
-static const char kAnyEKU[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBrjCCARegAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C\n"
- "AQYIKoZIzj0DAQcDQgAE9nsLABDporlTvx1OBUc4Hd5vxfX+8nS/OhbHmKtFLYNu\n"
- "1CLLrImbwMQYD2G+PgLO6sQHmASq2jmJKp6ZWsRkTqM+MDwwDwYDVR0lBAgwBgYE\n"
- "VR0lADAMBgNVHRMBAf8EAjAAMBsGA1UdIwQUMBKAEEA31wH7QC+4HH5UBCeMWQEw\n"
- "DQYJKoZIhvcNAQELBQADgYEAxgjgn1SAzQ+2GeCicZ5ndvVhKIeFelGCQ989XTVq\n"
- "uUbAYBW6v8GXNuVzoXYxDgNSanF6U+w+INrJ6daKVrIxAxdk9QFgBXqJoupuRAA3\n"
- "/OqnmYux0EqOTLbTK1P8DhaiaD0KV6dWGUwzqsgBmPkZ0lgNaPjvb1mKV3jhBkjz\n"
- "L6A=\n"
- "-----END CERTIFICATE-----\n";
+static const char kAnyEKU[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBrjCCARegAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C
+AQYIKoZIzj0DAQcDQgAE9nsLABDporlTvx1OBUc4Hd5vxfX+8nS/OhbHmKtFLYNu
+1CLLrImbwMQYD2G+PgLO6sQHmASq2jmJKp6ZWsRkTqM+MDwwDwYDVR0lBAgwBgYE
+VR0lADAMBgNVHRMBAf8EAjAAMBsGA1UdIwQUMBKAEEA31wH7QC+4HH5UBCeMWQEw
+DQYJKoZIhvcNAQELBQADgYEAxgjgn1SAzQ+2GeCicZ5ndvVhKIeFelGCQ989XTVq
+uUbAYBW6v8GXNuVzoXYxDgNSanF6U+w+INrJ6daKVrIxAxdk9QFgBXqJoupuRAA3
+/OqnmYux0EqOTLbTK1P8DhaiaD0KV6dWGUwzqsgBmPkZ0lgNaPjvb1mKV3jhBkjz
+L6A=
+-----END CERTIFICATE-----
+)";
-static const char kNoEKU[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBnTCCAQagAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
- "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
- "MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C\n"
- "AQYIKoZIzj0DAQcDQgAEpSFSqbYY86ZcMamE606dqdyjWlwhSHKOLUFsUUIzkMPz\n"
- "KHRu/x3Yzi8+Hm8eFK/TnCbkpYsYw4hIw00176dYzaMtMCswDAYDVR0TAQH/BAIw\n"
- "ADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMA0GCSqGSIb3DQEBCwUAA4GB\n"
- "AHvYzynIkjLThExHRS+385hfv4vgrQSMmCM1SAnEIjSBGsU7RPgiGAstN06XivuF\n"
- "T1fNugRmTu4OtOIbfdYkcjavJufw9hR9zWTt77CNMTy9XmOZLgdS5boFTtLCztr3\n"
- "TXHOSQQD8Dl4BK0wOet+TP6LBEjHlRFjAqK4bu9xpxV2\n"
- "-----END CERTIFICATE-----\n";
+static const char kNoEKU[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBnTCCAQagAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp
+bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y
+MDk5MDEwMTAwMDAwMFowFDESMBAGA1UEAxMJRUtVIG1zU0dDMFkwEwYHKoZIzj0C
+AQYIKoZIzj0DAQcDQgAEpSFSqbYY86ZcMamE606dqdyjWlwhSHKOLUFsUUIzkMPz
+KHRu/x3Yzi8+Hm8eFK/TnCbkpYsYw4hIw00176dYzaMtMCswDAYDVR0TAQH/BAIw
+ADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMA0GCSqGSIb3DQEBCwUAA4GB
+AHvYzynIkjLThExHRS+385hfv4vgrQSMmCM1SAnEIjSBGsU7RPgiGAstN06XivuF
+T1fNugRmTu4OtOIbfdYkcjavJufw9hR9zWTt77CNMTy9XmOZLgdS5boFTtLCztr3
+TXHOSQQD8Dl4BK0wOet+TP6LBEjHlRFjAqK4bu9xpxV2
+-----END CERTIFICATE-----
+)";
// CertFromPEM parses the given, NUL-terminated pem block and returns an
// |X509*|.
@@ -2315,120 +2359,134 @@
// kExplicitDefaultVersionPEM is an X.509v1 certificate with the version number
// encoded explicitly, rather than omitted as required by DER.
-static const char kExplicitDefaultVersionPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBfTCCASSgAwIBAAIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
- "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
- "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
- "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
- "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
- "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
- "HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w\n"
- "BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ\n"
- "FA==\n"
- "-----END CERTIFICATE-----\n";
+static const char kExplicitDefaultVersionPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBfTCCASSgAwIBAAIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC
+QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp
+dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ
+BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l
+dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni
+v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa
+HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w
+BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ
+FA==
+-----END CERTIFICATE-----
+)";
// kNegativeVersionPEM is an X.509 certificate with a negative version number.
-static const char kNegativeVersionPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBfTCCASSgAwIB/wIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
- "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
- "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
- "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
- "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
- "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
- "HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w\n"
- "BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ\n"
- "FA==\n"
- "-----END CERTIFICATE-----\n";
+static const char kNegativeVersionPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBfTCCASSgAwIB/wIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC
+QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp
+dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ
+BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l
+dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni
+v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa
+HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w
+BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ
+FA==
+-----END CERTIFICATE-----
+)";
// kFutureVersionPEM is an X.509 certificate with a version number value of
// three, which is not defined. (v3 has value two).
-static const char kFutureVersionPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBfTCCASSgAwIBAwIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
- "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
- "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
- "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
- "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
- "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
- "HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w\n"
- "BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ\n"
- "FA==\n"
- "-----END CERTIFICATE-----\n";
+static const char kFutureVersionPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBfTCCASSgAwIBAwIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC
+QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp
+dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ
+BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l
+dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni
+v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa
+HPUdfvGULUvPciLBMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb7idQhY5w
+BnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYfMlJhXnXJ
+FA==
+-----END CERTIFICATE-----
+)";
// kOverflowVersionPEM is an X.509 certificate with a version field which
// overflows |uint64_t|.
-static const char kOverflowVersionPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBoDCCAUegJgIkAP//////////////////////////////////////////////\n"
- "AgkA2UwE2kl9v+swCQYHKoZIzj0EATBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwK\n"
- "U29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4X\n"
- "DTE0MDQyMzIzMjE1N1oXDTE0MDUyMzIzMjE1N1owRTELMAkGA1UEBhMCQVUxEzAR\n"
- "BgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5\n"
- "IEx0ZDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOYraeK/ZZ+Xvi8eDZSKTNWX\n"
- "a7epHg1G+92pqR6d3LpaAefWl6gKGPnDxKMeVuJ8g0jbFhoc9R1+8ZQtS89yIsEw\n"
- "CQYHKoZIzj0EAQNIADBFAiEA8qA1XlE6NsOCeZvuJ1CFjnAGdJVX0il0APS+FYdd\n"
- "xAcCIHweeRRqIYPwenRoeV8UmZpotPHLnhVe5h8yUmFedckU\n"
- "-----END CERTIFICATE-----\n";
+static const char kOverflowVersionPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBoDCCAUegJgIkAP//////////////////////////////////////////////
+AgkA2UwE2kl9v+swCQYHKoZIzj0EATBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwK
+U29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4X
+DTE0MDQyMzIzMjE1N1oXDTE0MDUyMzIzMjE1N1owRTELMAkGA1UEBhMCQVUxEzAR
+BgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5
+IEx0ZDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOYraeK/ZZ+Xvi8eDZSKTNWX
+a7epHg1G+92pqR6d3LpaAefWl6gKGPnDxKMeVuJ8g0jbFhoc9R1+8ZQtS89yIsEw
+CQYHKoZIzj0EAQNIADBFAiEA8qA1XlE6NsOCeZvuJ1CFjnAGdJVX0il0APS+FYdd
+xAcCIHweeRRqIYPwenRoeV8UmZpotPHLnhVe5h8yUmFedckU
+-----END CERTIFICATE-----
+)";
+
+/*
+
+Test cases disabled. TODO re-enable in Jan 2021.
+https://crbug.com/boringssl/375
// kV1WithExtensionsPEM is an X.509v1 certificate with extensions.
-static const char kV1WithExtensionsPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIByjCCAXECCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw\n"
- "EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0\n"
- "eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG\n"
- "EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk\n"
- "Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+\n"
- "Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x\n"
- "lC1Lz3IiwaNQME4wHQYDVR0OBBYEFKuE0qyrlfCCThZ4B1VXX+QmjYLRMB8GA1Ud\n"
- "IwQYMBaAFKuE0qyrlfCCThZ4B1VXX+QmjYLRMAwGA1UdEwQFMAMBAf8wCQYHKoZI\n"
- "zj0EAQNIADBFAiEA8qA1XlE6NsOCeZvuJ1CFjnAGdJVX0il0APS+FYddxAcCIHwe\n"
- "eRRqIYPwenRoeV8UmZpotPHLnhVe5h8yUmFedckU\n"
- "-----END CERTIFICATE-----\n";
+static const char kV1WithExtensionsPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIByjCCAXECCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw
+EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0
+eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG
+EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk
+Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+
+Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x
+lC1Lz3IiwaNQME4wHQYDVR0OBBYEFKuE0qyrlfCCThZ4B1VXX+QmjYLRMB8GA1Ud
+IwQYMBaAFKuE0qyrlfCCThZ4B1VXX+QmjYLRMAwGA1UdEwQFMAMBAf8wCQYHKoZI
+zj0EAQNIADBFAiEA8qA1XlE6NsOCeZvuJ1CFjnAGdJVX0il0APS+FYddxAcCIHwe
+eRRqIYPwenRoeV8UmZpotPHLnhVe5h8yUmFedckU
+-----END CERTIFICATE-----
+)";
// kV2WithExtensionsPEM is an X.509v2 certificate with extensions.
-static const char kV2WithExtensionsPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBzzCCAXagAwIBAQIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC\n"
- "QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp\n"
- "dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ\n"
- "BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n"
- "dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni\n"
- "v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa\n"
- "HPUdfvGULUvPciLBo1AwTjAdBgNVHQ4EFgQUq4TSrKuV8IJOFngHVVdf5CaNgtEw\n"
- "HwYDVR0jBBgwFoAUq4TSrKuV8IJOFngHVVdf5CaNgtEwDAYDVR0TBAUwAwEB/zAJ\n"
- "BgcqhkjOPQQBA0gAMEUCIQDyoDVeUTo2w4J5m+4nUIWOcAZ0lVfSKXQA9L4Vh13E\n"
- "BwIgfB55FGohg/B6dGh5XxSZmmi08cueFV7mHzJSYV51yRQ=\n"
- "-----END CERTIFICATE-----\n";
+static const char kV2WithExtensionsPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBzzCCAXagAwIBAQIJANlMBNpJfb/rMAkGByqGSM49BAEwRTELMAkGA1UEBhMC
+QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp
+dHMgUHR5IEx0ZDAeFw0xNDA0MjMyMzIxNTdaFw0xNDA1MjMyMzIxNTdaMEUxCzAJ
+BgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l
+dCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATmK2ni
+v2Wfl74vHg2UikzVl2u3qR4NRvvdqakendy6WgHn1peoChj5w8SjHlbifINI2xYa
+HPUdfvGULUvPciLBo1AwTjAdBgNVHQ4EFgQUq4TSrKuV8IJOFngHVVdf5CaNgtEw
+HwYDVR0jBBgwFoAUq4TSrKuV8IJOFngHVVdf5CaNgtEwDAYDVR0TBAUwAwEB/zAJ
+BgcqhkjOPQQBA0gAMEUCIQDyoDVeUTo2w4J5m+4nUIWOcAZ0lVfSKXQA9L4Vh13E
+BwIgfB55FGohg/B6dGh5XxSZmmi08cueFV7mHzJSYV51yRQ=
+-----END CERTIFICATE-----
+)";
+*/
// kV1WithIssuerUniqueIDPEM is an X.509v1 certificate with an issuerUniqueID.
-static const char kV1WithIssuerUniqueIDPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBgzCCASoCCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw\n"
- "EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0\n"
- "eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG\n"
- "EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk\n"
- "Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+\n"
- "Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x\n"
- "lC1Lz3IiwYEJAAEjRWeJq83vMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb\n"
- "7idQhY5wBnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYf\n"
- "MlJhXnXJFA==\n"
- "-----END CERTIFICATE-----\n";
+static const char kV1WithIssuerUniqueIDPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBgzCCASoCCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw
+EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0
+eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG
+EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk
+Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+
+Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x
+lC1Lz3IiwYEJAAEjRWeJq83vMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb
+7idQhY5wBnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYf
+MlJhXnXJFA==
+-----END CERTIFICATE-----
+)";
// kV1WithSubjectUniqueIDPEM is an X.509v1 certificate with an issuerUniqueID.
-static const char kV1WithSubjectUniqueIDPEM[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIBgzCCASoCCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw\n"
- "EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0\n"
- "eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG\n"
- "EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk\n"
- "Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+\n"
- "Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x\n"
- "lC1Lz3IiwYIJAAEjRWeJq83vMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb\n"
- "7idQhY5wBnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYf\n"
- "MlJhXnXJFA==\n"
- "-----END CERTIFICATE-----\n";
+static const char kV1WithSubjectUniqueIDPEM[] = R"(
+-----BEGIN CERTIFICATE-----
+MIIBgzCCASoCCQDZTATaSX2/6zAJBgcqhkjOPQQBMEUxCzAJBgNVBAYTAkFVMRMw
+EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0
+eSBMdGQwHhcNMTQwNDIzMjMyMTU3WhcNMTQwNTIzMjMyMTU3WjBFMQswCQYDVQQG
+EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk
+Z2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5itp4r9ln5e+
+Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aXqAoY+cPEox5W4nyDSNsWGhz1HX7x
+lC1Lz3IiwYIJAAEjRWeJq83vMAkGByqGSM49BAEDSAAwRQIhAPKgNV5ROjbDgnmb
+7idQhY5wBnSVV9IpdAD0vhWHXcQHAiB8HnkUaiGD8Hp0aHlfFJmaaLTxy54VXuYf
+MlJhXnXJFA==
+-----END CERTIFICATE-----
+)";
// Test that the X.509 parser enforces versions are valid and match the fields
// present.
@@ -2440,8 +2498,10 @@
EXPECT_FALSE(CertFromPEM(kNegativeVersionPEM));
EXPECT_FALSE(CertFromPEM(kFutureVersionPEM));
EXPECT_FALSE(CertFromPEM(kOverflowVersionPEM));
- EXPECT_FALSE(CertFromPEM(kV1WithExtensionsPEM));
- EXPECT_FALSE(CertFromPEM(kV2WithExtensionsPEM));
+ // Test cases disabled. TODO re-enable in Jan 2021.
+ // https://crbug.com/boringssl/375
+ //EXPECT_FALSE(CertFromPEM(kV1WithExtensionsPEM));
+ //EXPECT_FALSE(CertFromPEM(kV2WithExtensionsPEM));
EXPECT_FALSE(CertFromPEM(kV1WithIssuerUniqueIDPEM));
EXPECT_FALSE(CertFromPEM(kV1WithSubjectUniqueIDPEM));
}
diff --git a/src/crypto/x509/x_x509.c b/src/crypto/x509/x_x509.c
index cddceb8..ab24651 100644
--- a/src/crypto/x509/x_x509.c
+++ b/src/crypto/x509/x_x509.c
@@ -136,10 +136,12 @@
}
/* Per RFC5280, section 4.1.2.9, extensions require v3. */
+ /* Check disabled. TODO re-enable in Jan 2021.
+ https://crbug.com/boringssl/375
if (version != 2 && ret->cert_info->extensions != NULL) {
OPENSSL_PUT_ERROR(X509, X509_R_INVALID_FIELD_FOR_VERSION);
return 0;
- }
+ }*/
break;
}
diff --git a/src/crypto/x509v3/pcy_data.c b/src/crypto/x509v3/pcy_data.c
index 498de4d..58584c2 100644
--- a/src/crypto/x509v3/pcy_data.c
+++ b/src/crypto/x509v3/pcy_data.c
@@ -98,13 +98,15 @@
} else
id = NULL;
ret = OPENSSL_malloc(sizeof(X509_POLICY_DATA));
- if (!ret)
+ if (!ret) {
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
+ ASN1_OBJECT_free(id);
return NULL;
+ }
ret->expected_policy_set = sk_ASN1_OBJECT_new_null();
if (!ret->expected_policy_set) {
OPENSSL_free(ret);
- if (id)
- ASN1_OBJECT_free(id);
+ ASN1_OBJECT_free(id);
return NULL;
}
diff --git a/src/crypto/x509v3/v3_alt.c b/src/crypto/x509v3/v3_alt.c
index 0e79b45..7a6e3e0 100644
--- a/src/crypto/x509v3/v3_alt.c
+++ b/src/crypto/x509v3/v3_alt.c
@@ -288,40 +288,40 @@
static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens)
{
- GENERAL_NAMES *ialt;
- GENERAL_NAME *gen;
- X509_EXTENSION *ext;
- int i;
- size_t j;
if (ctx && (ctx->flags == CTX_TEST))
return 1;
if (!ctx || !ctx->issuer_cert) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_NO_ISSUER_DETAILS);
- goto err;
+ return 0;
}
- i = X509_get_ext_by_NID(ctx->issuer_cert, NID_subject_alt_name, -1);
+ int i = X509_get_ext_by_NID(ctx->issuer_cert, NID_subject_alt_name, -1);
if (i < 0)
return 1;
+
+ int ret = 0;
+ GENERAL_NAMES *ialt = NULL;
+ X509_EXTENSION *ext;
if (!(ext = X509_get_ext(ctx->issuer_cert, i)) ||
!(ialt = X509V3_EXT_d2i(ext))) {
OPENSSL_PUT_ERROR(X509V3, X509V3_R_ISSUER_DECODE_ERROR);
goto err;
}
- for (j = 0; j < sk_GENERAL_NAME_num(ialt); j++) {
- gen = sk_GENERAL_NAME_value(ialt, j);
+ for (size_t j = 0; j < sk_GENERAL_NAME_num(ialt); j++) {
+ GENERAL_NAME *gen = sk_GENERAL_NAME_value(ialt, j);
if (!sk_GENERAL_NAME_push(gens, gen)) {
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
goto err;
}
+ /* Ownership of |gen| has moved from |ialt| to |gens|. */
+ sk_GENERAL_NAME_set(ialt, j, NULL);
}
- sk_GENERAL_NAME_free(ialt);
- return 1;
+ ret = 1;
- err:
- return 0;
-
+err:
+ GENERAL_NAMES_free(ialt);
+ return ret;
}
static GENERAL_NAMES *v2i_subject_alt(X509V3_EXT_METHOD *method,
diff --git a/src/include/openssl/base.h b/src/include/openssl/base.h
index d681bdf..0bdb1db 100644
--- a/src/include/openssl/base.h
+++ b/src/include/openssl/base.h
@@ -138,7 +138,10 @@
#define OPENSSL_WINDOWS
#endif
-#if defined(__linux__)
+// Trusty isn't Linux but currently defines __linux__. As a workaround, we
+// exclude it here.
+// TODO(b/169780122): Remove this workaround once Trusty no longer defines it.
+#if defined(__linux__) && !defined(TRUSTY)
#define OPENSSL_LINUX
#endif
diff --git a/src/include/openssl/bio.h b/src/include/openssl/bio.h
index da0dcdf..f25492a 100644
--- a/src/include/openssl/bio.h
+++ b/src/include/openssl/bio.h
@@ -199,6 +199,10 @@
// retried. The return value is one of the |BIO_RR_*| values.
OPENSSL_EXPORT int BIO_get_retry_reason(const BIO *bio);
+// BIO_set_retry_reason sets the special I/O operation that needs to be retried
+// to |reason|, which should be one of the |BIO_RR_*| values.
+OPENSSL_EXPORT void BIO_set_retry_reason(BIO *bio, int reason);
+
// BIO_clear_flags ANDs |bio->flags| with the bitwise-complement of |flags|.
OPENSSL_EXPORT void BIO_clear_flags(BIO *bio, int flags);
diff --git a/src/include/openssl/des.h b/src/include/openssl/des.h
index af1c822..539b2c5 100644
--- a/src/include/openssl/des.h
+++ b/src/include/openssl/des.h
@@ -65,6 +65,12 @@
// DES.
+//
+// This module is deprecated and retained for legacy reasons only. It is slow
+// and may leak key material with timing or cache side channels. Moreover,
+// single-keyed DES is broken and can be brute-forced in under a day.
+//
+// Use a modern cipher, such as AES-GCM or ChaCha20-Poly1305, instead.
typedef struct DES_cblock_st {
diff --git a/src/include/openssl/dh.h b/src/include/openssl/dh.h
index f3badcc..34e70c9 100644
--- a/src/include/openssl/dh.h
+++ b/src/include/openssl/dh.h
@@ -69,6 +69,10 @@
// DH contains functions for performing Diffie-Hellman key agreement in
// multiplicative groups.
+//
+// This module is deprecated and retained for legacy reasons only. It is not
+// considered a priority for performance or hardening work. Do not use it in
+// new code. Use X25519 or ECDH with P-256 instead.
// Allocation and destruction.
@@ -164,6 +168,14 @@
// writes it as a big-endian integer into |out|, which must have |DH_size|
// bytes of space. It returns the number of bytes written, or a negative number
// on error.
+//
+// Note the output may be shorter than |DH_size| bytes. Contrary to PKCS #3,
+// this function returns a variable-length shared key with leading zeros
+// removed. This may result in sporadic key mismatch and, if |dh| is reused,
+// side channel attacks such as https://raccoon-attack.com/.
+//
+// This is a legacy algorithm, so we do not provide a fixed-width variant. Use
+// X25519 or ECDH with P-256 instead.
OPENSSL_EXPORT int DH_compute_key(uint8_t *out, const BIGNUM *peers_key,
DH *dh);
diff --git a/src/include/openssl/opensslconf.h b/src/include/openssl/opensslconf.h
index 3c6ffd8..3f1faf3 100644
--- a/src/include/openssl/opensslconf.h
+++ b/src/include/openssl/opensslconf.h
@@ -55,6 +55,9 @@
#define OPENSSL_NO_RMD160
#define OPENSSL_NO_SCTP
#define OPENSSL_NO_SEED
+#define OPENSSL_NO_SM2
+#define OPENSSL_NO_SM3
+#define OPENSSL_NO_SM4
#define OPENSSL_NO_SRP
#define OPENSSL_NO_SSL2
#define OPENSSL_NO_SSL3
diff --git a/src/include/openssl/pem.h b/src/include/openssl/pem.h
index 9c0ff93..f39989e 100644
--- a/src/include/openssl/pem.h
+++ b/src/include/openssl/pem.h
@@ -62,64 +62,63 @@
#include <openssl/cipher.h>
#include <openssl/digest.h>
#include <openssl/evp.h>
-#include <openssl/stack.h>
#include <openssl/pkcs7.h>
+#include <openssl/stack.h>
#include <openssl/x509.h>
-/* For compatibility with open-iscsi, which assumes that it can get
- * |OPENSSL_malloc| from pem.h or err.h */
+// For compatibility with open-iscsi, which assumes that it can get
+// |OPENSSL_malloc| from pem.h or err.h
#include <openssl/crypto.h>
-#ifdef __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
-#define PEM_BUFSIZE 1024
+#define PEM_BUFSIZE 1024
-#define PEM_STRING_X509_OLD "X509 CERTIFICATE"
-#define PEM_STRING_X509 "CERTIFICATE"
-#define PEM_STRING_X509_PAIR "CERTIFICATE PAIR"
-#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
-#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
-#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
-#define PEM_STRING_X509_CRL "X509 CRL"
-#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
-#define PEM_STRING_PUBLIC "PUBLIC KEY"
-#define PEM_STRING_RSA "RSA PRIVATE KEY"
-#define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY"
-#define PEM_STRING_DSA "DSA PRIVATE KEY"
-#define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY"
+#define PEM_STRING_X509_OLD "X509 CERTIFICATE"
+#define PEM_STRING_X509 "CERTIFICATE"
+#define PEM_STRING_X509_PAIR "CERTIFICATE PAIR"
+#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
+#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
+#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
+#define PEM_STRING_X509_CRL "X509 CRL"
+#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
+#define PEM_STRING_PUBLIC "PUBLIC KEY"
+#define PEM_STRING_RSA "RSA PRIVATE KEY"
+#define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY"
+#define PEM_STRING_DSA "DSA PRIVATE KEY"
+#define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY"
#define PEM_STRING_EC "EC PRIVATE KEY"
-#define PEM_STRING_PKCS7 "PKCS7"
-#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
-#define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY"
-#define PEM_STRING_PKCS8INF "PRIVATE KEY"
-#define PEM_STRING_DHPARAMS "DH PARAMETERS"
-#define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS"
-#define PEM_STRING_DSAPARAMS "DSA PARAMETERS"
+#define PEM_STRING_PKCS7 "PKCS7"
+#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
+#define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY"
+#define PEM_STRING_PKCS8INF "PRIVATE KEY"
+#define PEM_STRING_DHPARAMS "DH PARAMETERS"
+#define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS"
+#define PEM_STRING_DSAPARAMS "DSA PARAMETERS"
#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
-#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
-#define PEM_STRING_CMS "CMS"
+#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
+#define PEM_STRING_CMS "CMS"
-/* enc_type is one off */
-#define PEM_TYPE_ENCRYPTED 10
-#define PEM_TYPE_MIC_ONLY 20
-#define PEM_TYPE_MIC_CLEAR 30
-#define PEM_TYPE_CLEAR 40
+// enc_type is one off
+#define PEM_TYPE_ENCRYPTED 10
+#define PEM_TYPE_MIC_ONLY 20
+#define PEM_TYPE_MIC_CLEAR 30
+#define PEM_TYPE_CLEAR 40
-/* These macros make the PEM_read/PEM_write functions easier to maintain and
- * write. Now they are all implemented with either:
- * IMPLEMENT_PEM_rw(...) or IMPLEMENT_PEM_rw_cb(...)
- */
+// These macros make the PEM_read/PEM_write functions easier to maintain and
+// write. Now they are all implemented with either:
+// IMPLEMENT_PEM_rw(...) or IMPLEMENT_PEM_rw_cb(...)
#ifdef OPENSSL_NO_FP_API
-#define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/
-#define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/
-#define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/
-#define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/
-#define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/
+#define IMPLEMENT_PEM_read_fp(name, type, str, asn1) //
+#define IMPLEMENT_PEM_write_fp(name, type, str, asn1) //
+#define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) //
+#define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) //
+#define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) //
#else
@@ -228,133 +227,178 @@
}
#define IMPLEMENT_PEM_write(name, type, str, asn1) \
- IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
- IMPLEMENT_PEM_write_fp(name, type, str, asn1)
+ IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
+ IMPLEMENT_PEM_write_fp(name, type, str, asn1)
#define IMPLEMENT_PEM_write_const(name, type, str, asn1) \
- IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \
- IMPLEMENT_PEM_write_fp_const(name, type, str, asn1)
+ IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \
+ IMPLEMENT_PEM_write_fp_const(name, type, str, asn1)
#define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \
- IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \
- IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1)
+ IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \
+ IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1)
#define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \
- IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \
- IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1)
+ IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \
+ IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1)
#define IMPLEMENT_PEM_read(name, type, str, asn1) \
- IMPLEMENT_PEM_read_bio(name, type, str, asn1) \
- IMPLEMENT_PEM_read_fp(name, type, str, asn1)
+ IMPLEMENT_PEM_read_bio(name, type, str, asn1) \
+ IMPLEMENT_PEM_read_fp(name, type, str, asn1)
#define IMPLEMENT_PEM_rw(name, type, str, asn1) \
- IMPLEMENT_PEM_read(name, type, str, asn1) \
- IMPLEMENT_PEM_write(name, type, str, asn1)
+ IMPLEMENT_PEM_read(name, type, str, asn1) \
+ IMPLEMENT_PEM_write(name, type, str, asn1)
#define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \
- IMPLEMENT_PEM_read(name, type, str, asn1) \
- IMPLEMENT_PEM_write_const(name, type, str, asn1)
+ IMPLEMENT_PEM_read(name, type, str, asn1) \
+ IMPLEMENT_PEM_write_const(name, type, str, asn1)
#define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \
- IMPLEMENT_PEM_read(name, type, str, asn1) \
- IMPLEMENT_PEM_write_cb(name, type, str, asn1)
+ IMPLEMENT_PEM_read(name, type, str, asn1) \
+ IMPLEMENT_PEM_write_cb(name, type, str, asn1)
-/* These are the same except they are for the declarations */
+// These are the same except they are for the declarations
#if defined(OPENSSL_NO_FP_API)
-#define DECLARE_PEM_read_fp(name, type) /**/
-#define DECLARE_PEM_write_fp(name, type) /**/
-#define DECLARE_PEM_write_cb_fp(name, type) /**/
+#define DECLARE_PEM_read_fp(name, type) //
+#define DECLARE_PEM_write_fp(name, type) //
+#define DECLARE_PEM_write_cb_fp(name, type) //
#else
-#define DECLARE_PEM_read_fp(name, type) \
- OPENSSL_EXPORT type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u);
+#define DECLARE_PEM_read_fp(name, type) \
+ OPENSSL_EXPORT type *PEM_read_##name(FILE *fp, type **x, \
+ pem_password_cb *cb, void *u);
#define DECLARE_PEM_write_fp(name, type) \
- OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x);
+ OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x);
#define DECLARE_PEM_write_fp_const(name, type) \
- OPENSSL_EXPORT int PEM_write_##name(FILE *fp, const type *x);
+ OPENSSL_EXPORT int PEM_write_##name(FILE *fp, const type *x);
-#define DECLARE_PEM_write_cb_fp(name, type) \
- OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \
- unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
+#define DECLARE_PEM_write_cb_fp(name, type) \
+ OPENSSL_EXPORT int PEM_write_##name( \
+ FILE *fp, type *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, \
+ pem_password_cb *cb, void *u);
#endif
-#define DECLARE_PEM_read_bio(name, type) \
- OPENSSL_EXPORT type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u);
+#define DECLARE_PEM_read_bio(name, type) \
+ OPENSSL_EXPORT type *PEM_read_bio_##name(BIO *bp, type **x, \
+ pem_password_cb *cb, void *u);
#define DECLARE_PEM_write_bio(name, type) \
- OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x);
+ OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x);
#define DECLARE_PEM_write_bio_const(name, type) \
- OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, const type *x);
+ OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, const type *x);
-#define DECLARE_PEM_write_cb_bio(name, type) \
- OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
- unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
+#define DECLARE_PEM_write_cb_bio(name, type) \
+ OPENSSL_EXPORT int PEM_write_bio_##name( \
+ BIO *bp, type *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, \
+ pem_password_cb *cb, void *u);
#define DECLARE_PEM_write(name, type) \
- DECLARE_PEM_write_bio(name, type) \
- DECLARE_PEM_write_fp(name, type)
+ DECLARE_PEM_write_bio(name, type) \
+ DECLARE_PEM_write_fp(name, type)
#define DECLARE_PEM_write_const(name, type) \
- DECLARE_PEM_write_bio_const(name, type) \
- DECLARE_PEM_write_fp_const(name, type)
+ DECLARE_PEM_write_bio_const(name, type) \
+ DECLARE_PEM_write_fp_const(name, type)
#define DECLARE_PEM_write_cb(name, type) \
- DECLARE_PEM_write_cb_bio(name, type) \
- DECLARE_PEM_write_cb_fp(name, type)
+ DECLARE_PEM_write_cb_bio(name, type) \
+ DECLARE_PEM_write_cb_fp(name, type)
#define DECLARE_PEM_read(name, type) \
- DECLARE_PEM_read_bio(name, type) \
- DECLARE_PEM_read_fp(name, type)
+ DECLARE_PEM_read_bio(name, type) \
+ DECLARE_PEM_read_fp(name, type)
#define DECLARE_PEM_rw(name, type) \
- DECLARE_PEM_read(name, type) \
- DECLARE_PEM_write(name, type)
+ DECLARE_PEM_read(name, type) \
+ DECLARE_PEM_write(name, type)
#define DECLARE_PEM_rw_const(name, type) \
- DECLARE_PEM_read(name, type) \
- DECLARE_PEM_write_const(name, type)
+ DECLARE_PEM_read(name, type) \
+ DECLARE_PEM_write_const(name, type)
#define DECLARE_PEM_rw_cb(name, type) \
- DECLARE_PEM_read(name, type) \
- DECLARE_PEM_write_cb(name, type)
+ DECLARE_PEM_read(name, type) \
+ DECLARE_PEM_write_cb(name, type)
-/* "userdata": new with OpenSSL 0.9.4 */
+// "userdata": new with OpenSSL 0.9.4
typedef int pem_password_cb(char *buf, int size, int rwflag, void *userdata);
-OPENSSL_EXPORT int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher);
-OPENSSL_EXPORT int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len, pem_password_cb *callback,void *u);
+OPENSSL_EXPORT int PEM_get_EVP_CIPHER_INFO(char *header,
+ EVP_CIPHER_INFO *cipher);
+OPENSSL_EXPORT int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data,
+ long *len, pem_password_cb *callback, void *u);
-OPENSSL_EXPORT int PEM_read_bio(BIO *bp, char **name, char **header, unsigned char **data,long *len);
-OPENSSL_EXPORT int PEM_write_bio(BIO *bp,const char *name, const char *hdr, const unsigned char *data, long len);
-OPENSSL_EXPORT int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char *name, BIO *bp, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT void * PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int PEM_ASN1_write_bio(i2d_of_void *i2d,const char *name,BIO *bp, void *x, const EVP_CIPHER *enc,unsigned char *kstr,int klen, pem_password_cb *cb, void *u);
+// PEM_read_bio reads from |bp|, until the next PEM block. If one is found, it
+// returns one and sets |*name|, |*header|, and |*data| to newly-allocated
+// buffers containing the PEM type, the header block, and the decoded data,
+// respectively. |*name| and |*header| are NUL-terminated C strings, while
+// |*data| has |*len| bytes. The caller must release each of |*name|, |*header|,
+// and |*data| with |OPENSSL_free| when done. If no PEM block is found, this
+// function returns zero and pushes |PEM_R_NO_START_LINE| to the error queue. If
+// one is found, but there is an error decoding it, it returns zero and pushes
+// some other error to the error queue.
+OPENSSL_EXPORT int PEM_read_bio(BIO *bp, char **name, char **header,
+ unsigned char **data, long *len);
-OPENSSL_EXPORT STACK_OF(X509_INFO) * PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cd, void *u);
+// PEM_write_bio writes a PEM block to |bp|, containing |len| bytes from |data|
+// as data. |name| and |hdr| are NUL-terminated C strings containing the PEM
+// type and header block, respectively. This function returns zero on error and
+// the number of bytes written on success.
+OPENSSL_EXPORT int PEM_write_bio(BIO *bp, const char *name, const char *hdr,
+ const unsigned char *data, long len);
-OPENSSL_EXPORT int PEM_read(FILE *fp, char **name, char **header, unsigned char **data,long *len);
-OPENSSL_EXPORT int PEM_write(FILE *fp, const char *name, const char *hdr, const unsigned char *data, long len);
-OPENSSL_EXPORT void * PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int PEM_ASN1_write(i2d_of_void *i2d,const char *name,FILE *fp, void *x,const EVP_CIPHER *enc,unsigned char *kstr, int klen,pem_password_cb *callback, void *u);
-OPENSSL_EXPORT STACK_OF(X509_INFO) * PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u);
+OPENSSL_EXPORT int PEM_bytes_read_bio(unsigned char **pdata, long *plen,
+ char **pnm, const char *name, BIO *bp,
+ pem_password_cb *cb, void *u);
+OPENSSL_EXPORT void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name,
+ BIO *bp, void **x, pem_password_cb *cb,
+ void *u);
+OPENSSL_EXPORT int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name,
+ BIO *bp, void *x, const EVP_CIPHER *enc,
+ unsigned char *kstr, int klen,
+ pem_password_cb *cb, void *u);
-/* PEM_def_callback treats |userdata| as a string and copies it into |buf|,
- * assuming its |size| is sufficient. Returns the length of the string, or 0
- * if there is not enough room. If either |buf| or |userdata| is NULL, 0 is
- * returned. Note that this is different from OpenSSL, which prompts for a
- * password. */
-OPENSSL_EXPORT int PEM_def_callback(char *buf, int size, int rwflag, void *userdata);
-OPENSSL_EXPORT void PEM_proc_type(char *buf, int type);
-OPENSSL_EXPORT void PEM_dek_info(char *buf, const char *type, int len, char *str);
+OPENSSL_EXPORT STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(
+ BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u);
+OPENSSL_EXPORT int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi,
+ EVP_CIPHER *enc, unsigned char *kstr,
+ int klen, pem_password_cb *cd,
+ void *u);
+
+OPENSSL_EXPORT int PEM_read(FILE *fp, char **name, char **header,
+ unsigned char **data, long *len);
+OPENSSL_EXPORT int PEM_write(FILE *fp, const char *name, const char *hdr,
+ const unsigned char *data, long len);
+OPENSSL_EXPORT void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp,
+ void **x, pem_password_cb *cb, void *u);
+OPENSSL_EXPORT int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp,
+ void *x, const EVP_CIPHER *enc,
+ unsigned char *kstr, int klen,
+ pem_password_cb *callback, void *u);
+OPENSSL_EXPORT STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp,
+ STACK_OF(X509_INFO) *sk,
+ pem_password_cb *cb,
+ void *u);
+
+// PEM_def_callback treats |userdata| as a string and copies it into |buf|,
+// assuming its |size| is sufficient. Returns the length of the string, or 0
+// if there is not enough room. If either |buf| or |userdata| is NULL, 0 is
+// returned. Note that this is different from OpenSSL, which prompts for a
+// password.
+OPENSSL_EXPORT int PEM_def_callback(char *buf, int size, int rwflag,
+ void *userdata);
+OPENSSL_EXPORT void PEM_proc_type(char *buf, int type);
+OPENSSL_EXPORT void PEM_dek_info(char *buf, const char *type, int len,
+ char *str);
DECLARE_PEM_rw(X509, X509)
@@ -397,22 +441,46 @@
DECLARE_PEM_rw(PUBKEY, EVP_PKEY)
-OPENSSL_EXPORT int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, char *, int, pem_password_cb *, void *);
-OPENSSL_EXPORT int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, char *kstr, int klen, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u);
+OPENSSL_EXPORT int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x,
+ int nid, char *kstr,
+ int klen,
+ pem_password_cb *cb,
+ void *u);
+OPENSSL_EXPORT int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *,
+ const EVP_CIPHER *, char *,
+ int, pem_password_cb *,
+ void *);
+OPENSSL_EXPORT int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x,
+ const EVP_CIPHER *enc, char *kstr,
+ int klen, pem_password_cb *cb,
+ void *u);
+OPENSSL_EXPORT int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
+ char *kstr, int klen,
+ pem_password_cb *cb, void *u);
+OPENSSL_EXPORT EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x,
+ pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, char *kstr, int klen, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u);
+OPENSSL_EXPORT int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x,
+ const EVP_CIPHER *enc, char *kstr,
+ int klen, pem_password_cb *cb,
+ void *u);
+OPENSSL_EXPORT int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
+ char *kstr, int klen,
+ pem_password_cb *cb, void *u);
+OPENSSL_EXPORT int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
+ char *kstr, int klen,
+ pem_password_cb *cb, void *u);
-OPENSSL_EXPORT EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u);
+OPENSSL_EXPORT EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x,
+ pem_password_cb *cb, void *u);
-OPENSSL_EXPORT int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc, char *kstr,int klen, pem_password_cb *cd, void *u);
+OPENSSL_EXPORT int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x,
+ const EVP_CIPHER *enc, char *kstr,
+ int klen, pem_password_cb *cd,
+ void *u);
-#ifdef __cplusplus
+#ifdef __cplusplus
}
#endif
@@ -432,4 +500,4 @@
#define PEM_R_UNSUPPORTED_CIPHER 113
#define PEM_R_UNSUPPORTED_ENCRYPTION 114
-#endif /* OPENSSL_HEADER_PEM_H */
+#endif // OPENSSL_HEADER_PEM_H
diff --git a/src/include/openssl/trust_token.h b/src/include/openssl/trust_token.h
index b6c00b2..7146995 100644
--- a/src/include/openssl/trust_token.h
+++ b/src/include/openssl/trust_token.h
@@ -40,13 +40,11 @@
// PMBTokens and P-384.
OPENSSL_EXPORT const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v1(void);
-// TRUST_TOKEN_experiment_v2_pp is an experimental Trust Tokens protocol using
-// PMBTokens (with no private metadata) and P-384 with up to 6 keys, without RR
-// verification.
+// TRUST_TOKEN_experiment_v2_voprf is an experimental Trust Tokens protocol
+// using VOPRFs and P-384 with up to 6 keys, without RR verification.
//
// This version is incomplete and should not be used.
-// TODO(svaldez): Update to use the PrivacyPass primitive
-OPENSSL_EXPORT const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_pp(void);
+OPENSSL_EXPORT const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_voprf(void);
// TRUST_TOKEN_experiment_v2_pmb is an experimental Trust Tokens protocol using
// PMBTokens and P-384 with up to 3 keys, without RR verification.
@@ -165,12 +163,8 @@
// |*out_rr| and |*out_rr_len| (respectively, |*out_sig| and |*out_sig_len|)
// to a newly-allocated buffer containing the SRR (respectively, the SRR
// signature). In other versions, it sets |*out_rr| and |*out_rr_len|
-// (respectively, |*out_sig| and |*out_sig_len|) to a newly-allocated buffer
-// containing the SRR (respectively, the SRR signature). It returns one on
-// success or zero on failure.
-//
-// TODO(svaldez): Return the entire response in |*out_rr| and omit |*out_sig| in
-// non-|TRUST_TOKEN_experiment_v1| versions.
+// to a newly-allocated buffer containing |response| and leaves all validation
+// to the caller. It returns one on success or zero on failure.
OPENSSL_EXPORT int TRUST_TOKEN_CLIENT_finish_redemption(
TRUST_TOKEN_CLIENT *ctx, uint8_t **out_rr, size_t *out_rr_len,
uint8_t **out_sig, size_t *out_sig_len, const uint8_t *response,
diff --git a/src/include/openssl/x509.h b/src/include/openssl/x509.h
index 9d307d4..38a4219 100644
--- a/src/include/openssl/x509.h
+++ b/src/include/openssl/x509.h
@@ -968,9 +968,8 @@
OPENSSL_EXPORT int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
OPENSSL_EXPORT EVP_PKEY *X509_get_pubkey(X509 *x);
OPENSSL_EXPORT ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);
-// TODO(davidben): |X509_get0_extensions| should return a const pointer to
-// match upstream.
-OPENSSL_EXPORT STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
+OPENSSL_EXPORT const STACK_OF(X509_EXTENSION) *
+ X509_get0_extensions(const X509 *x);
OPENSSL_EXPORT const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);
OPENSSL_EXPORT int X509_REQ_set_version(X509_REQ *x, long version);
diff --git a/src/ssl/bio_ssl.cc b/src/ssl/bio_ssl.cc
index 61afee5..a249889 100644
--- a/src/ssl/bio_ssl.cc
+++ b/src/ssl/bio_ssl.cc
@@ -37,12 +37,12 @@
case SSL_ERROR_WANT_ACCEPT:
BIO_set_retry_special(bio);
- bio->retry_reason = BIO_RR_ACCEPT;
+ BIO_set_retry_reason(bio, BIO_RR_ACCEPT);
break;
case SSL_ERROR_WANT_CONNECT:
BIO_set_retry_special(bio);
- bio->retry_reason = BIO_RR_CONNECT;
+ BIO_set_retry_reason(bio, BIO_RR_CONNECT);
break;
case SSL_ERROR_NONE:
@@ -77,7 +77,7 @@
case SSL_ERROR_WANT_CONNECT:
BIO_set_retry_special(bio);
- bio->retry_reason = BIO_RR_CONNECT;
+ BIO_set_retry_reason(bio, BIO_RR_CONNECT);
break;
case SSL_ERROR_NONE:
@@ -98,6 +98,17 @@
switch (cmd) {
case BIO_C_SET_SSL:
+ if (ssl != NULL) {
+ // OpenSSL allows reusing an SSL BIO with a different SSL object. We do
+ // not support this.
+ OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+ return 0;
+ }
+
+ // Note this differs from upstream OpenSSL, which synchronizes
+ // |bio->next_bio| with |ssl|'s rbio here, and on |BIO_CTRL_PUSH|. We call
+ // into the corresponding |BIO| directly. (We can implement the upstream
+ // behavior if it ends up necessary.)
bio->shutdown = num;
bio->ptr = ptr;
bio->init = 1;
@@ -117,9 +128,11 @@
return SSL_pending(ssl);
case BIO_CTRL_FLUSH: {
+ BIO *wbio = SSL_get_wbio(ssl);
BIO_clear_retry_flags(bio);
- long ret = BIO_ctrl(SSL_get_wbio(ssl), cmd, num, ptr);
- BIO_copy_next_retry(bio);
+ long ret = BIO_ctrl(wbio, cmd, num, ptr);
+ BIO_set_flags(bio, BIO_get_retry_flags(wbio));
+ BIO_set_retry_reason(bio, BIO_get_retry_reason(wbio));
return ret;
}
diff --git a/src/ssl/handshake.cc b/src/ssl/handshake.cc
index 7bceb1d..66d108e 100644
--- a/src/ssl/handshake.cc
+++ b/src/ssl/handshake.cc
@@ -235,13 +235,13 @@
return hs->transcript.Update(msg.raw);
}
-int ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert,
- const SSL_EXTENSION_TYPE *ext_types,
- size_t num_ext_types, int ignore_unknown) {
+bool ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert,
+ Span<const SSL_EXTENSION_TYPE> ext_types,
+ bool ignore_unknown) {
// Reset everything.
- for (size_t i = 0; i < num_ext_types; i++) {
- *ext_types[i].out_present = 0;
- CBS_init(ext_types[i].out_data, NULL, 0);
+ for (const SSL_EXTENSION_TYPE &ext_type : ext_types) {
+ *ext_type.out_present = false;
+ CBS_init(ext_type.out_data, nullptr, 0);
}
CBS copy = *cbs;
@@ -252,38 +252,38 @@
!CBS_get_u16_length_prefixed(©, &data)) {
OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
*out_alert = SSL_AD_DECODE_ERROR;
- return 0;
+ return false;
}
- const SSL_EXTENSION_TYPE *ext_type = NULL;
- for (size_t i = 0; i < num_ext_types; i++) {
- if (type == ext_types[i].type) {
- ext_type = &ext_types[i];
+ const SSL_EXTENSION_TYPE *found = nullptr;
+ for (const SSL_EXTENSION_TYPE &ext_type : ext_types) {
+ if (type == ext_type.type) {
+ found = &ext_type;
break;
}
}
- if (ext_type == NULL) {
+ if (found == nullptr) {
if (ignore_unknown) {
continue;
}
OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
*out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
- return 0;
+ return false;
}
// Duplicate ext_types are forbidden.
- if (*ext_type->out_present) {
+ if (*found->out_present) {
OPENSSL_PUT_ERROR(SSL, SSL_R_DUPLICATE_EXTENSION);
*out_alert = SSL_AD_ILLEGAL_PARAMETER;
- return 0;
+ return false;
}
- *ext_type->out_present = 1;
- *ext_type->out_data = data;
+ *found->out_present = 1;
+ *found->out_data = data;
}
- return 1;
+ return true;
}
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs) {
diff --git a/src/ssl/handshake_client.cc b/src/ssl/handshake_client.cc
index 1b7bb1b..5c800fb 100644
--- a/src/ssl/handshake_client.cc
+++ b/src/ssl/handshake_client.cc
@@ -358,8 +358,7 @@
uint8_t alert = SSL_AD_DECODE_ERROR;
if (!ssl_parse_extensions(&extensions, &alert, ext_types,
- OPENSSL_ARRAY_SIZE(ext_types),
- 1 /* ignore unknown */)) {
+ /*ignore_unknown=*/true)) {
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
return false;
}
diff --git a/src/ssl/internal.h b/src/ssl/internal.h
index ffc18a5..9dd206e 100644
--- a/src/ssl/internal.h
+++ b/src/ssl/internal.h
@@ -1926,12 +1926,12 @@
// ssl_parse_extensions parses a TLS extensions block out of |cbs| and advances
// it. It writes the parsed extensions to pointers denoted by |ext_types|. On
-// success, it fills in the |out_present| and |out_data| fields and returns one.
-// Otherwise, it sets |*out_alert| to an alert to send and returns zero. Unknown
-// extensions are rejected unless |ignore_unknown| is 1.
-int ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert,
- const SSL_EXTENSION_TYPE *ext_types,
- size_t num_ext_types, int ignore_unknown);
+// success, it fills in the |out_present| and |out_data| fields and returns
+// true. Otherwise, it sets |*out_alert| to an alert to send and returns false.
+// Unknown extensions are rejected unless |ignore_unknown| is true.
+bool ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert,
+ Span<const SSL_EXTENSION_TYPE> ext_types,
+ bool ignore_unknown);
// ssl_verify_peer_cert verifies the peer certificate for |hs|.
enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs);
diff --git a/src/ssl/ssl_session.cc b/src/ssl/ssl_session.cc
index 4c6d045..ef902f0 100644
--- a/src/ssl/ssl_session.cc
+++ b/src/ssl/ssl_session.cc
@@ -364,12 +364,6 @@
session->is_server = is_server;
session->ssl_version = ssl->version;
session->is_quic = ssl->quic_method != nullptr;
- if (is_server && ssl->enable_early_data && session->is_quic) {
- if (!session->quic_early_data_context.CopyFrom(
- hs->config->quic_early_data_context)) {
- return 0;
- }
- }
// Fill in the time from the |SSL_CTX|'s clock.
struct OPENSSL_timeval now;
diff --git a/src/ssl/ssl_test.cc b/src/ssl/ssl_test.cc
index eb45700..6584686 100644
--- a/src/ssl/ssl_test.cc
+++ b/src/ssl/ssl_test.cc
@@ -5434,6 +5434,46 @@
EXPECT_FALSE(SSL_in_early_data(server_.get()));
EXPECT_TRUE(SSL_early_data_accepted(client_.get()));
EXPECT_TRUE(SSL_early_data_accepted(server_.get()));
+
+ // Finish handling post-handshake messages after the first 0-RTT resumption.
+ EXPECT_TRUE(ProvideHandshakeData(client_.get()));
+ EXPECT_TRUE(SSL_process_quic_post_handshake(client_.get()));
+
+ // Perform a second 0-RTT resumption attempt, and confirm that 0-RTT is
+ // accepted again.
+ ASSERT_TRUE(CreateClientAndServer());
+ SSL_set_session(client_.get(), g_last_session.get());
+
+ // The client handshake should return immediately into the early data state.
+ ASSERT_EQ(SSL_do_handshake(client_.get()), 1);
+ EXPECT_TRUE(SSL_in_early_data(client_.get()));
+ // The transport should have keys for sending 0-RTT data.
+ EXPECT_TRUE(transport_->client()->HasWriteSecret(ssl_encryption_early_data));
+
+ // The server will consume the ClientHello and also enter the early data
+ // state.
+ ASSERT_TRUE(ProvideHandshakeData(server_.get()));
+ ASSERT_EQ(SSL_do_handshake(server_.get()), 1);
+ EXPECT_TRUE(SSL_in_early_data(server_.get()));
+ EXPECT_TRUE(transport_->SecretsMatch(ssl_encryption_early_data));
+ // At this point, the server has half-RTT write keys, but it cannot access
+ // 1-RTT read keys until client Finished.
+ EXPECT_TRUE(transport_->server()->HasWriteSecret(ssl_encryption_application));
+ EXPECT_FALSE(transport_->server()->HasReadSecret(ssl_encryption_application));
+
+ // Finish up the client and server handshakes.
+ ASSERT_TRUE(CompleteHandshakesForQUIC());
+
+ // Both sides can now exchange 1-RTT data.
+ ExpectHandshakeSuccess();
+ EXPECT_TRUE(SSL_session_reused(client_.get()));
+ EXPECT_TRUE(SSL_session_reused(server_.get()));
+ EXPECT_FALSE(SSL_in_early_data(client_.get()));
+ EXPECT_FALSE(SSL_in_early_data(server_.get()));
+ EXPECT_TRUE(SSL_early_data_accepted(client_.get()));
+ EXPECT_TRUE(SSL_early_data_accepted(server_.get()));
+ EXPECT_EQ(SSL_get_early_data_reason(client_.get()), ssl_early_data_accepted);
+ EXPECT_EQ(SSL_get_early_data_reason(server_.get()), ssl_early_data_accepted);
}
TEST_F(QUICMethodTest, ZeroRTTRejectMismatchedParameters) {
@@ -6489,5 +6529,64 @@
sizeof(kTicket)));
}
+TEST(SSLTest, BIO) {
+ bssl::UniquePtr<SSL_CTX> client_ctx(SSL_CTX_new(TLS_method()));
+ bssl::UniquePtr<SSL_CTX> server_ctx(SSL_CTX_new(TLS_method()));
+ ASSERT_TRUE(client_ctx);
+ ASSERT_TRUE(server_ctx);
+
+ bssl::UniquePtr<X509> cert = GetTestCertificate();
+ bssl::UniquePtr<EVP_PKEY> key = GetTestKey();
+ ASSERT_TRUE(cert);
+ ASSERT_TRUE(key);
+ ASSERT_TRUE(SSL_CTX_use_certificate(server_ctx.get(), cert.get()));
+ ASSERT_TRUE(SSL_CTX_use_PrivateKey(server_ctx.get(), key.get()));
+
+ for (bool take_ownership : {true, false}) {
+ // For simplicity, get the handshake out of the way first.
+ bssl::UniquePtr<SSL> client, server;
+ ASSERT_TRUE(ConnectClientAndServer(&client, &server, client_ctx.get(),
+ server_ctx.get()));
+
+ // Wrap |client| in an SSL BIO.
+ bssl::UniquePtr<BIO> client_bio(BIO_new(BIO_f_ssl()));
+ ASSERT_TRUE(client_bio);
+ ASSERT_EQ(1, BIO_set_ssl(client_bio.get(), client.get(), take_ownership));
+ if (take_ownership) {
+ client.release();
+ }
+
+ // Flushing the BIO should not crash.
+ EXPECT_EQ(1, BIO_flush(client_bio.get()));
+
+ // Exchange some data.
+ EXPECT_EQ(5, BIO_write(client_bio.get(), "hello", 5));
+ uint8_t buf[5];
+ ASSERT_EQ(5, SSL_read(server.get(), buf, sizeof(buf)));
+ EXPECT_EQ(Bytes("hello"), Bytes(buf));
+
+ EXPECT_EQ(5, SSL_write(server.get(), "world", 5));
+ ASSERT_EQ(5, BIO_read(client_bio.get(), buf, sizeof(buf)));
+ EXPECT_EQ(Bytes("world"), Bytes(buf));
+
+ // |BIO_should_read| should work.
+ EXPECT_EQ(-1, BIO_read(client_bio.get(), buf, sizeof(buf)));
+ EXPECT_TRUE(BIO_should_read(client_bio.get()));
+
+ // Writing data should eventually exceed the buffer size and fail, reporting
+ // |BIO_should_write|.
+ int ret;
+ for (int i = 0; i < 1024; i++) {
+ std::vector<uint8_t> buffer(1024);
+ ret = BIO_write(client_bio.get(), buffer.data(), buffer.size());
+ if (ret <= 0) {
+ break;
+ }
+ }
+ EXPECT_EQ(-1, ret);
+ EXPECT_TRUE(BIO_should_write(client_bio.get()));
+ }
+}
+
} // namespace
BSSL_NAMESPACE_END
diff --git a/src/ssl/test/bssl_shim.cc b/src/ssl/test/bssl_shim.cc
index a91524a..55f9c38 100644
--- a/src/ssl/test/bssl_shim.cc
+++ b/src/ssl/test/bssl_shim.cc
@@ -524,16 +524,18 @@
}
}
- if (!config->is_server) {
- const uint8_t *alpn_proto;
- unsigned alpn_proto_len;
- SSL_get0_alpn_selected(ssl, &alpn_proto, &alpn_proto_len);
- if (alpn_proto_len != config->expect_alpn.size() ||
- OPENSSL_memcmp(alpn_proto, config->expect_alpn.data(),
- alpn_proto_len) != 0) {
- fprintf(stderr, "negotiated alpn proto mismatch\n");
- return false;
- }
+ // On the server, the protocol selected in the ALPN callback must be echoed
+ // out of |SSL_get0_alpn_selected|. On the client, it should report what the
+ // test expected.
+ const std::string &expect_alpn =
+ config->is_server ? config->select_alpn : config->expect_alpn;
+ const uint8_t *alpn_proto;
+ unsigned alpn_proto_len;
+ SSL_get0_alpn_selected(ssl, &alpn_proto, &alpn_proto_len);
+ if (alpn_proto_len != expect_alpn.size() ||
+ OPENSSL_memcmp(alpn_proto, expect_alpn.data(), alpn_proto_len) != 0) {
+ fprintf(stderr, "negotiated alpn proto mismatch\n");
+ return false;
}
if (!config->expect_quic_transport_params.empty() && expect_handshake_done) {
@@ -802,6 +804,12 @@
}
if (!ret) {
+ // Print the |SSL_get_error| code. Otherwise, some failures are silent and
+ // hard to debug.
+ int ssl_err = SSL_get_error(ssl.get(), -1);
+ if (ssl_err != SSL_ERROR_NONE) {
+ fprintf(stderr, "SSL error: %s\n", SSL_error_description(ssl_err));
+ }
return false;
}
diff --git a/src/ssl/test/runner/common.go b/src/ssl/test/runner/common.go
index 6a744db..b7517e7 100644
--- a/src/ssl/test/runner/common.go
+++ b/src/ssl/test/runner/common.go
@@ -125,6 +125,7 @@
extensionQUICTransportParams uint16 = 0xffa5 // draft-ietf-quic-tls-13
extensionChannelID uint16 = 30032 // not IANA assigned
extensionDelegatedCredentials uint16 = 0x22 // draft-ietf-tls-subcerts-06
+ extensionDuplicate uint16 = 0xffff // not IANA assigned
)
// TLS signaling cipher suite values
@@ -249,6 +250,7 @@
ServerName string // server name requested by client, if any (server side only)
PeerCertificates []*x509.Certificate // certificate chain presented by remote peer
VerifiedChains [][]*x509.Certificate // verified chains built from PeerCertificates
+ OCSPResponse []byte // stapled OCSP response from the peer, if any
ChannelID *ecdsa.PublicKey // the channel ID for this connection
TokenBindingNegotiated bool // whether Token Binding was negotiated
TokenBindingParam uint8 // the negotiated Token Binding key parameter
diff --git a/src/ssl/test/runner/conn.go b/src/ssl/test/runner/conn.go
index a449f2f..04fe16c 100644
--- a/src/ssl/test/runner/conn.go
+++ b/src/ssl/test/runner/conn.go
@@ -1872,6 +1872,7 @@
state.CipherSuite = c.cipherSuite.id
state.PeerCertificates = c.peerCertificates
state.VerifiedChains = c.verifiedChains
+ state.OCSPResponse = c.ocspResponse
state.ServerName = c.serverName
state.ChannelID = c.channelID
state.TokenBindingNegotiated = c.tokenBindingNegotiated
@@ -1887,15 +1888,6 @@
return state
}
-// OCSPResponse returns the stapled OCSP response from the TLS server, if
-// any. (Only valid for client connections.)
-func (c *Conn) OCSPResponse() []byte {
- c.handshakeMutex.Lock()
- defer c.handshakeMutex.Unlock()
-
- return c.ocspResponse
-}
-
// VerifyHostname checks that the peer certificate chain is valid for
// connecting to host. If so, it returns nil; if not, it returns an error
// describing the problem.
diff --git a/src/ssl/test/runner/handshake_client.go b/src/ssl/test/runner/handshake_client.go
index 8548b78..241518f 100644
--- a/src/ssl/test/runner/handshake_client.go
+++ b/src/ssl/test/runner/handshake_client.go
@@ -100,6 +100,19 @@
return errors.New("tls: NextProtos values too large")
}
+ // Translate the bugs that modify ClientHello extension order into a
+ // list of prefix extensions. The marshal function will try these
+ // extensions before any others, followed by any remaining extensions in
+ // the default order.
+ var prefixExtensions []uint16
+ if c.config.Bugs.PSKBinderFirst && !c.config.Bugs.OnlyCorruptSecondPSKBinder {
+ prefixExtensions = append(prefixExtensions, extensionPreSharedKey)
+ }
+ if c.config.Bugs.SwapNPNAndALPN {
+ prefixExtensions = append(prefixExtensions, extensionALPN)
+ prefixExtensions = append(prefixExtensions, extensionNextProtoNeg)
+ }
+
minVersion := c.config.minVersion(c.isDTLS)
maxVersion := c.config.maxVersion(c.isDTLS)
hello := &clientHelloMsg{
@@ -119,15 +132,14 @@
channelIDSupported: c.config.ChannelID != nil,
tokenBindingParams: c.config.TokenBindingParams,
tokenBindingVersion: c.config.TokenBindingVersion,
- npnAfterAlpn: c.config.Bugs.SwapNPNAndALPN,
extendedMasterSecret: maxVersion >= VersionTLS10,
srtpProtectionProfiles: c.config.SRTPProtectionProfiles,
srtpMasterKeyIdentifier: c.config.Bugs.SRTPMasterKeyIdentifer,
customExtension: c.config.Bugs.CustomExtension,
- pskBinderFirst: c.config.Bugs.PSKBinderFirst && !c.config.Bugs.OnlyCorruptSecondPSKBinder,
omitExtensions: c.config.Bugs.OmitExtensions,
emptyExtensions: c.config.Bugs.EmptyExtensions,
delegatedCredentials: !c.config.Bugs.DisableDelegatedCredentials,
+ prefixExtensions: prefixExtensions,
}
if maxVersion >= VersionTLS13 {
@@ -608,7 +620,9 @@
hello.hasEarlyData = c.config.Bugs.SendEarlyDataOnSecondClientHello
// The first ClientHello may have skipped this due to OnlyCorruptSecondPSKBinder.
- hello.pskBinderFirst = c.config.Bugs.PSKBinderFirst
+ if c.config.Bugs.PSKBinderFirst && c.config.Bugs.OnlyCorruptSecondPSKBinder {
+ hello.prefixExtensions = append(hello.prefixExtensions, extensionPreSharedKey)
+ }
if c.config.Bugs.OmitPSKsOnSecondClientHello {
hello.pskIdentities = nil
hello.pskBinders = nil
diff --git a/src/ssl/test/runner/handshake_messages.go b/src/ssl/test/runner/handshake_messages.go
index 9d3b6bc..4378e77 100644
--- a/src/ssl/test/runner/handshake_messages.go
+++ b/src/ssl/test/runner/handshake_messages.go
@@ -5,7 +5,6 @@
package runner
import (
- "bytes"
"encoding/binary"
"fmt"
)
@@ -285,74 +284,18 @@
channelIDSupported bool
tokenBindingParams []byte
tokenBindingVersion uint16
- npnAfterAlpn bool
extendedMasterSecret bool
srtpProtectionProfiles []uint16
srtpMasterKeyIdentifier string
sctListSupported bool
customExtension string
hasGREASEExtension bool
- pskBinderFirst bool
omitExtensions bool
emptyExtensions bool
pad int
compressedCertAlgs []uint16
delegatedCredentials bool
-}
-
-func (m *clientHelloMsg) equal(i interface{}) bool {
- m1, ok := i.(*clientHelloMsg)
- if !ok {
- return false
- }
-
- return bytes.Equal(m.raw, m1.raw) &&
- m.isDTLS == m1.isDTLS &&
- m.vers == m1.vers &&
- bytes.Equal(m.random, m1.random) &&
- bytes.Equal(m.sessionId, m1.sessionId) &&
- bytes.Equal(m.cookie, m1.cookie) &&
- eqUint16s(m.cipherSuites, m1.cipherSuites) &&
- bytes.Equal(m.compressionMethods, m1.compressionMethods) &&
- m.nextProtoNeg == m1.nextProtoNeg &&
- m.serverName == m1.serverName &&
- m.ocspStapling == m1.ocspStapling &&
- eqCurveIDs(m.supportedCurves, m1.supportedCurves) &&
- bytes.Equal(m.supportedPoints, m1.supportedPoints) &&
- m.hasKeyShares == m1.hasKeyShares &&
- eqKeyShareEntryLists(m.keyShares, m1.keyShares) &&
- m.trailingKeyShareData == m1.trailingKeyShareData &&
- eqPSKIdentityLists(m.pskIdentities, m1.pskIdentities) &&
- bytes.Equal(m.pskKEModes, m1.pskKEModes) &&
- eqByteSlices(m.pskBinders, m1.pskBinders) &&
- m.hasEarlyData == m1.hasEarlyData &&
- bytes.Equal(m.tls13Cookie, m1.tls13Cookie) &&
- m.ticketSupported == m1.ticketSupported &&
- bytes.Equal(m.sessionTicket, m1.sessionTicket) &&
- eqSignatureAlgorithms(m.signatureAlgorithms, m1.signatureAlgorithms) &&
- eqSignatureAlgorithms(m.signatureAlgorithmsCert, m1.signatureAlgorithmsCert) &&
- eqUint16s(m.supportedVersions, m1.supportedVersions) &&
- bytes.Equal(m.secureRenegotiation, m1.secureRenegotiation) &&
- (m.secureRenegotiation == nil) == (m1.secureRenegotiation == nil) &&
- eqStrings(m.alpnProtocols, m1.alpnProtocols) &&
- bytes.Equal(m.quicTransportParams, m1.quicTransportParams) &&
- m.duplicateExtension == m1.duplicateExtension &&
- m.channelIDSupported == m1.channelIDSupported &&
- bytes.Equal(m.tokenBindingParams, m1.tokenBindingParams) &&
- m.tokenBindingVersion == m1.tokenBindingVersion &&
- m.npnAfterAlpn == m1.npnAfterAlpn &&
- m.extendedMasterSecret == m1.extendedMasterSecret &&
- eqUint16s(m.srtpProtectionProfiles, m1.srtpProtectionProfiles) &&
- m.srtpMasterKeyIdentifier == m1.srtpMasterKeyIdentifier &&
- m.sctListSupported == m1.sctListSupported &&
- m.customExtension == m1.customExtension &&
- m.hasGREASEExtension == m1.hasGREASEExtension &&
- m.pskBinderFirst == m1.pskBinderFirst &&
- m.omitExtensions == m1.omitExtensions &&
- m.emptyExtensions == m1.emptyExtensions &&
- m.pad == m1.pad &&
- eqUint16s(m.compressedCertAlgs, m1.compressedCertAlgs) &&
- m.delegatedCredentials == m1.delegatedCredentials
+ prefixExtensions []uint16
}
func (m *clientHelloMsg) marshalKeyShares(bb *byteBuilder) {
@@ -390,34 +333,20 @@
compressionMethods := hello.addU8LengthPrefixed()
compressionMethods.addBytes(m.compressionMethods)
- extensions := hello.addU16LengthPrefixed()
- if len(m.pskIdentities) > 0 && m.pskBinderFirst {
- extensions.addU16(extensionPreSharedKey)
- pskExtension := extensions.addU16LengthPrefixed()
-
- pskIdentities := pskExtension.addU16LengthPrefixed()
- for _, psk := range m.pskIdentities {
- pskIdentities.addU16LengthPrefixed().addBytes(psk.ticket)
- pskIdentities.addU32(psk.obfuscatedTicketAge)
- }
- pskBinders := pskExtension.addU16LengthPrefixed()
- for _, binder := range m.pskBinders {
- pskBinders.addU8LengthPrefixed().addBytes(binder)
- }
+ type extension struct {
+ id uint16
+ body []byte
}
+ var extensions []extension
+
if m.duplicateExtension {
// Add a duplicate bogus extension at the beginning and end.
- extensions.addU16(0xffff)
- extensions.addU16(0) // 0-length for empty extension
+ extensions = append(extensions, extension{id: extensionDuplicate})
}
- if m.nextProtoNeg && !m.npnAfterAlpn {
- extensions.addU16(extensionNextProtoNeg)
- extensions.addU16(0) // The length is always 0
+ if m.nextProtoNeg {
+ extensions = append(extensions, extension{id: extensionNextProtoNeg})
}
if len(m.serverName) > 0 {
- extensions.addU16(extensionServerName)
- serverNameList := extensions.addU16LengthPrefixed()
-
// RFC 3546, section 3.1
//
// struct {
@@ -437,138 +366,170 @@
// ServerName server_name_list<1..2^16-1>
// } ServerNameList;
+ serverNameList := newByteBuilder()
serverName := serverNameList.addU16LengthPrefixed()
serverName.addU8(0) // NameType host_name(0)
hostName := serverName.addU16LengthPrefixed()
hostName.addBytes([]byte(m.serverName))
+
+ extensions = append(extensions, extension{
+ id: extensionServerName,
+ body: serverNameList.finish(),
+ })
}
if m.ocspStapling {
- extensions.addU16(extensionStatusRequest)
- certificateStatusRequest := extensions.addU16LengthPrefixed()
-
+ certificateStatusRequest := newByteBuilder()
// RFC 4366, section 3.6
certificateStatusRequest.addU8(1) // OCSP type
// Two zero valued uint16s for the two lengths.
certificateStatusRequest.addU16(0) // ResponderID length
certificateStatusRequest.addU16(0) // Extensions length
+ extensions = append(extensions, extension{
+ id: extensionStatusRequest,
+ body: certificateStatusRequest.finish(),
+ })
}
if len(m.supportedCurves) > 0 {
// http://tools.ietf.org/html/rfc4492#section-5.1.1
- extensions.addU16(extensionSupportedCurves)
- supportedCurvesList := extensions.addU16LengthPrefixed()
+ supportedCurvesList := newByteBuilder()
supportedCurves := supportedCurvesList.addU16LengthPrefixed()
for _, curve := range m.supportedCurves {
supportedCurves.addU16(uint16(curve))
}
+ extensions = append(extensions, extension{
+ id: extensionSupportedCurves,
+ body: supportedCurvesList.finish(),
+ })
}
if len(m.supportedPoints) > 0 {
// http://tools.ietf.org/html/rfc4492#section-5.1.2
- extensions.addU16(extensionSupportedPoints)
- supportedPointsList := extensions.addU16LengthPrefixed()
+ supportedPointsList := newByteBuilder()
supportedPoints := supportedPointsList.addU8LengthPrefixed()
supportedPoints.addBytes(m.supportedPoints)
+ extensions = append(extensions, extension{
+ id: extensionSupportedPoints,
+ body: supportedPointsList.finish(),
+ })
}
if m.hasKeyShares {
- extensions.addU16(extensionKeyShare)
- keyShareList := extensions.addU16LengthPrefixed()
+ keyShareList := newByteBuilder()
m.marshalKeyShares(keyShareList)
+ extensions = append(extensions, extension{
+ id: extensionKeyShare,
+ body: keyShareList.finish(),
+ })
}
if len(m.pskKEModes) > 0 {
- extensions.addU16(extensionPSKKeyExchangeModes)
- pskModesExtension := extensions.addU16LengthPrefixed()
+ pskModesExtension := newByteBuilder()
pskModesExtension.addU8LengthPrefixed().addBytes(m.pskKEModes)
+ extensions = append(extensions, extension{
+ id: extensionPSKKeyExchangeModes,
+ body: pskModesExtension.finish(),
+ })
}
if m.hasEarlyData {
- extensions.addU16(extensionEarlyData)
- extensions.addU16(0) // The length is zero.
+ extensions = append(extensions, extension{id: extensionEarlyData})
}
if len(m.tls13Cookie) > 0 {
- extensions.addU16(extensionCookie)
- body := extensions.addU16LengthPrefixed()
+ body := newByteBuilder()
body.addU16LengthPrefixed().addBytes(m.tls13Cookie)
+ extensions = append(extensions, extension{
+ id: extensionCookie,
+ body: body.finish(),
+ })
}
if m.ticketSupported {
// http://tools.ietf.org/html/rfc5077#section-3.2
- extensions.addU16(extensionSessionTicket)
- sessionTicketExtension := extensions.addU16LengthPrefixed()
- sessionTicketExtension.addBytes(m.sessionTicket)
+ extensions = append(extensions, extension{
+ id: extensionSessionTicket,
+ body: m.sessionTicket,
+ })
}
if len(m.signatureAlgorithms) > 0 {
// https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1
- extensions.addU16(extensionSignatureAlgorithms)
- signatureAlgorithmsExtension := extensions.addU16LengthPrefixed()
+ signatureAlgorithmsExtension := newByteBuilder()
signatureAlgorithms := signatureAlgorithmsExtension.addU16LengthPrefixed()
for _, sigAlg := range m.signatureAlgorithms {
signatureAlgorithms.addU16(uint16(sigAlg))
}
+ extensions = append(extensions, extension{
+ id: extensionSignatureAlgorithms,
+ body: signatureAlgorithmsExtension.finish(),
+ })
}
if len(m.signatureAlgorithmsCert) > 0 {
- extensions.addU16(extensionSignatureAlgorithmsCert)
- signatureAlgorithmsCertExtension := extensions.addU16LengthPrefixed()
+ signatureAlgorithmsCertExtension := newByteBuilder()
signatureAlgorithmsCert := signatureAlgorithmsCertExtension.addU16LengthPrefixed()
for _, sigAlg := range m.signatureAlgorithmsCert {
signatureAlgorithmsCert.addU16(uint16(sigAlg))
}
+ extensions = append(extensions, extension{
+ id: extensionSignatureAlgorithmsCert,
+ body: signatureAlgorithmsCertExtension.finish(),
+ })
}
if len(m.supportedVersions) > 0 {
- extensions.addU16(extensionSupportedVersions)
- supportedVersionsExtension := extensions.addU16LengthPrefixed()
+ supportedVersionsExtension := newByteBuilder()
supportedVersions := supportedVersionsExtension.addU8LengthPrefixed()
for _, version := range m.supportedVersions {
supportedVersions.addU16(uint16(version))
}
+ extensions = append(extensions, extension{
+ id: extensionSupportedVersions,
+ body: supportedVersionsExtension.finish(),
+ })
}
if m.secureRenegotiation != nil {
- extensions.addU16(extensionRenegotiationInfo)
- secureRenegoExt := extensions.addU16LengthPrefixed()
- secureRenego := secureRenegoExt.addU8LengthPrefixed()
- secureRenego.addBytes(m.secureRenegotiation)
+ secureRenegoExt := newByteBuilder()
+ secureRenegoExt.addU8LengthPrefixed().addBytes(m.secureRenegotiation)
+ extensions = append(extensions, extension{
+ id: extensionRenegotiationInfo,
+ body: secureRenegoExt.finish(),
+ })
}
if len(m.alpnProtocols) > 0 {
// https://tools.ietf.org/html/rfc7301#section-3.1
- extensions.addU16(extensionALPN)
- alpnExtension := extensions.addU16LengthPrefixed()
-
+ alpnExtension := newByteBuilder()
protocolNameList := alpnExtension.addU16LengthPrefixed()
for _, s := range m.alpnProtocols {
protocolName := protocolNameList.addU8LengthPrefixed()
protocolName.addBytes([]byte(s))
}
+ extensions = append(extensions, extension{
+ id: extensionALPN,
+ body: alpnExtension.finish(),
+ })
}
if len(m.quicTransportParams) > 0 {
- extensions.addU16(extensionQUICTransportParams)
- params := extensions.addU16LengthPrefixed()
- params.addBytes(m.quicTransportParams)
+ extensions = append(extensions, extension{
+ id: extensionQUICTransportParams,
+ body: m.quicTransportParams,
+ })
}
if m.channelIDSupported {
- extensions.addU16(extensionChannelID)
- extensions.addU16(0) // Length is always 0
+ extensions = append(extensions, extension{id: extensionChannelID})
}
if m.tokenBindingParams != nil {
- extensions.addU16(extensionTokenBinding)
- tokbindExtension := extensions.addU16LengthPrefixed()
+ tokbindExtension := newByteBuilder()
tokbindExtension.addU16(m.tokenBindingVersion)
tokbindParams := tokbindExtension.addU8LengthPrefixed()
tokbindParams.addBytes(m.tokenBindingParams)
- }
- if m.nextProtoNeg && m.npnAfterAlpn {
- extensions.addU16(extensionNextProtoNeg)
- extensions.addU16(0) // Length is always 0
+ extensions = append(extensions, extension{
+ id: extensionTokenBinding,
+ body: tokbindExtension.finish(),
+ })
}
if m.duplicateExtension {
// Add a duplicate bogus extension at the beginning and end.
- extensions.addU16(0xffff)
- extensions.addU16(0)
+ extensions = append(extensions, extension{id: extensionDuplicate})
}
if m.extendedMasterSecret {
// https://tools.ietf.org/html/rfc7627
- extensions.addU16(extensionExtendedMasterSecret)
- extensions.addU16(0) // Length is always 0
+ extensions = append(extensions, extension{id: extensionExtendedMasterSecret})
}
if len(m.srtpProtectionProfiles) > 0 {
// https://tools.ietf.org/html/rfc5764#section-4.1.1
- extensions.addU16(extensionUseSRTP)
- useSrtpExt := extensions.addU16LengthPrefixed()
+ useSrtpExt := newByteBuilder()
srtpProtectionProfiles := useSrtpExt.addU16LengthPrefixed()
for _, p := range m.srtpProtectionProfiles {
@@ -576,38 +537,47 @@
}
srtpMki := useSrtpExt.addU8LengthPrefixed()
srtpMki.addBytes([]byte(m.srtpMasterKeyIdentifier))
+
+ extensions = append(extensions, extension{
+ id: extensionUseSRTP,
+ body: useSrtpExt.finish(),
+ })
}
if m.sctListSupported {
- extensions.addU16(extensionSignedCertificateTimestamp)
- extensions.addU16(0) // Length is always 0
+ extensions = append(extensions, extension{id: extensionSignedCertificateTimestamp})
}
if l := len(m.customExtension); l > 0 {
- extensions.addU16(extensionCustom)
- customExt := extensions.addU16LengthPrefixed()
- customExt.addBytes([]byte(m.customExtension))
+ extensions = append(extensions, extension{
+ id: extensionCustom,
+ body: []byte(m.customExtension),
+ })
}
if len(m.compressedCertAlgs) > 0 {
- extensions.addU16(extensionCompressedCertAlgs)
- body := extensions.addU16LengthPrefixed()
+ body := newByteBuilder()
algIDs := body.addU8LengthPrefixed()
for _, v := range m.compressedCertAlgs {
algIDs.addU16(v)
}
+ extensions = append(extensions, extension{
+ id: extensionCompressedCertAlgs,
+ body: body.finish(),
+ })
}
if m.delegatedCredentials {
- extensions.addU16(extensionDelegatedCredentials)
- body := extensions.addU16LengthPrefixed()
+ body := newByteBuilder()
signatureSchemeList := body.addU16LengthPrefixed()
for _, sigAlg := range m.signatureAlgorithms {
signatureSchemeList.addU16(uint16(sigAlg))
}
+ extensions = append(extensions, extension{
+ id: extensionDelegatedCredentials,
+ body: body.finish(),
+ })
}
// The PSK extension must be last. See https://tools.ietf.org/html/rfc8446#section-4.2.11
- if len(m.pskIdentities) > 0 && !m.pskBinderFirst {
- extensions.addU16(extensionPreSharedKey)
- pskExtension := extensions.addU16LengthPrefixed()
-
+ if len(m.pskIdentities) > 0 {
+ pskExtension := newByteBuilder()
pskIdentities := pskExtension.addU16LengthPrefixed()
for _, psk := range m.pskIdentities {
pskIdentities.addU16LengthPrefixed().addBytes(psk.ticket)
@@ -617,11 +587,43 @@
for _, binder := range m.pskBinders {
pskBinders.addU8LengthPrefixed().addBytes(binder)
}
+ extensions = append(extensions, extension{
+ id: extensionPreSharedKey,
+ body: pskExtension.finish(),
+ })
+ }
+
+ // Write each extension in |extensions| to the |hello| message, hoisting
+ // the extensions named in |m.prefixExtensions| to the front.
+ extensionsBB := hello.addU16LengthPrefixed()
+ extMap := make(map[uint16][]byte)
+ for _, ext := range extensions {
+ extMap[ext.id] = ext.body
+ }
+ // Write each of the prefix extensions, if we have it.
+ for _, extID := range m.prefixExtensions {
+ if body, ok := extMap[extID]; ok {
+ extensionsBB.addU16(extID)
+ extensionsBB.addU16LengthPrefixed().addBytes(body)
+ }
+ }
+ // Forget each of the prefix extensions. This loop is separate from the
+ // extension-writing loop because |m.prefixExtensions| may contain
+ // duplicates.
+ for _, extID := range m.prefixExtensions {
+ delete(extMap, extID)
+ }
+ // Write each of the remaining extensions in their original order.
+ for _, ext := range extensions {
+ if _, ok := extMap[ext.id]; ok {
+ extensionsBB.addU16(ext.id)
+ extensionsBB.addU16LengthPrefixed().addBytes(ext.body)
+ }
}
if m.pad != 0 && hello.len()%m.pad != 0 {
- extensions.addU16(extensionPadding)
- padding := extensions.addU16LengthPrefixed()
+ extensionsBB.addU16(extensionPadding)
+ padding := extensionsBB.addU16LengthPrefixed()
// Note hello.len() has changed at this point from the length
// prefix.
if l := hello.len() % m.pad; l != 0 {
@@ -1236,7 +1238,7 @@
func (m *serverExtensions) marshal(extensions *byteBuilder) {
if m.duplicateExtension {
// Add a duplicate bogus extension at the beginning and end.
- extensions.addU16(0xffff)
+ extensions.addU16(extensionDuplicate)
extensions.addU16(0) // length = 0 for empty extension
}
if m.nextProtoNeg && !m.npnAfterAlpn {
@@ -1286,7 +1288,7 @@
}
if m.duplicateExtension {
// Add a duplicate bogus extension at the beginning and end.
- extensions.addU16(0xffff)
+ extensions.addU16(extensionDuplicate)
extensions.addU16(0)
}
if m.extendedMasterSecret {
@@ -2534,90 +2536,3 @@
// ssl3NoCertificateMsg is a dummy message to handle SSL 3.0 using a warning
// alert in the handshake.
type ssl3NoCertificateMsg struct{}
-
-func eqUint16s(x, y []uint16) bool {
- if len(x) != len(y) {
- return false
- }
- for i, v := range x {
- if y[i] != v {
- return false
- }
- }
- return true
-}
-
-func eqCurveIDs(x, y []CurveID) bool {
- if len(x) != len(y) {
- return false
- }
- for i, v := range x {
- if y[i] != v {
- return false
- }
- }
- return true
-}
-
-func eqStrings(x, y []string) bool {
- if len(x) != len(y) {
- return false
- }
- for i, v := range x {
- if y[i] != v {
- return false
- }
- }
- return true
-}
-
-func eqByteSlices(x, y [][]byte) bool {
- if len(x) != len(y) {
- return false
- }
- for i, v := range x {
- if !bytes.Equal(v, y[i]) {
- return false
- }
- }
- return true
-}
-
-func eqSignatureAlgorithms(x, y []signatureAlgorithm) bool {
- if len(x) != len(y) {
- return false
- }
- for i, v := range x {
- v2 := y[i]
- if v != v2 {
- return false
- }
- }
- return true
-}
-
-func eqKeyShareEntryLists(x, y []keyShareEntry) bool {
- if len(x) != len(y) {
- return false
- }
- for i, v := range x {
- if y[i].group != v.group || !bytes.Equal(y[i].keyExchange, v.keyExchange) {
- return false
- }
- }
- return true
-
-}
-
-func eqPSKIdentityLists(x, y []pskIdentity) bool {
- if len(x) != len(y) {
- return false
- }
- for i, v := range x {
- if !bytes.Equal(y[i].ticket, v.ticket) || y[i].obfuscatedTicketAge != v.obfuscatedTicketAge {
- return false
- }
- }
- return true
-
-}
diff --git a/src/ssl/test/runner/handshake_server.go b/src/ssl/test/runner/handshake_server.go
index 931ecca..88e186d 100644
--- a/src/ssl/test/runner/handshake_server.go
+++ b/src/ssl/test/runner/handshake_server.go
@@ -185,18 +185,8 @@
if !bytes.Equal(newClientHello.cookie, helloVerifyRequest.cookie) {
return errors.New("dtls: invalid cookie")
}
-
- // Apart from the cookie, the two ClientHellos must
- // match. Note that clientHello.equal compares the
- // serialization, so we make a copy.
- oldClientHelloCopy := *hs.clientHello
- oldClientHelloCopy.raw = nil
- oldClientHelloCopy.cookie = nil
- newClientHelloCopy := *newClientHello
- newClientHelloCopy.raw = nil
- newClientHelloCopy.cookie = nil
- if !oldClientHelloCopy.equal(&newClientHelloCopy) {
- return errors.New("dtls: retransmitted ClientHello does not match")
+ if err := checkClientHellosEqual(hs.clientHello.raw, newClientHello.raw, c.isDTLS, nil); err != nil {
+ return err
}
hs.clientHello = newClientHello
}
@@ -465,12 +455,16 @@
pskIdentities := hs.clientHello.pskIdentities
pskKEModes := hs.clientHello.pskKEModes
+ var replacedPSKIdentities bool
if len(pskIdentities) == 0 && len(hs.clientHello.sessionTicket) > 0 && c.config.Bugs.AcceptAnySession {
+ // Pick up the ticket from the TLS 1.2 extension, to test the
+ // client does not get in a mixed up state.
psk := pskIdentity{
ticket: hs.clientHello.sessionTicket,
}
pskIdentities = []pskIdentity{psk}
pskKEModes = []byte{pskDHEKEMode}
+ replacedPSKIdentities = true
}
var pskIndex int
@@ -502,6 +496,13 @@
return errors.New("tls: invalid ticket age")
}
+ if !replacedPSKIdentities {
+ binderToVerify := hs.clientHello.pskBinders[i]
+ if err := verifyPSKBinder(c.wireVersion, hs.clientHello, sessionState, binderToVerify, []byte{}, []byte{}); err != nil {
+ return err
+ }
+ }
+
hs.sessionState = sessionState
hs.hello.hasPSKIdentity = true
hs.hello.pskIdentity = uint16(i)
@@ -519,15 +520,6 @@
hs.hello.pskIdentity = 0
}
- // Verify the PSK binder. Note there may not be a PSK binder if
- // AcceptAnyBinder is set. See https://crbug.com/boringssl/115.
- if hs.sessionState != nil && !config.Bugs.AcceptAnySession {
- binderToVerify := hs.clientHello.pskBinders[pskIndex]
- if err := verifyPSKBinder(c.wireVersion, hs.clientHello, hs.sessionState, binderToVerify, []byte{}, []byte{}); err != nil {
- return err
- }
- }
-
// Resolve PSK and compute the early secret.
if hs.sessionState != nil {
hs.finishedHash.addEntropy(hs.sessionState.masterSecret)
@@ -643,70 +635,84 @@
return fmt.Errorf("tls: client offered unexpected PSK identities after HelloRetryRequest")
}
- if newClientHello.hasEarlyData {
- return errors.New("tls: EarlyData sent in new ClientHello")
- }
-
applyBugsToClientHello(newClientHello, config)
// Check that the new ClientHello matches the old ClientHello,
- // except for relevant modifications.
- //
- // TODO(davidben): Make this check more precise.
- oldClientHelloCopy := *hs.clientHello
- oldClientHelloCopy.raw = nil
- oldClientHelloCopy.hasEarlyData = false
- newClientHelloCopy := *newClientHello
- newClientHelloCopy.raw = nil
+ // except for relevant modifications. See RFC 8446, section 4.1.2.
+ ignoreExtensions := []uint16{extensionPadding}
if helloRetryRequest.hasSelectedGroup {
- newKeyShares := newClientHelloCopy.keyShares
+ newKeyShares := newClientHello.keyShares
if len(newKeyShares) != 1 || newKeyShares[0].group != helloRetryRequest.selectedGroup {
return errors.New("tls: KeyShare from HelloRetryRequest not in new ClientHello")
}
selectedKeyShare = &newKeyShares[0]
- newClientHelloCopy.keyShares = oldClientHelloCopy.keyShares
+ ignoreExtensions = append(ignoreExtensions, extensionKeyShare)
}
if len(helloRetryRequest.cookie) > 0 {
- if !bytes.Equal(newClientHelloCopy.tls13Cookie, helloRetryRequest.cookie) {
+ if !bytes.Equal(newClientHello.tls13Cookie, helloRetryRequest.cookie) {
return errors.New("tls: cookie from HelloRetryRequest not present in new ClientHello")
}
- newClientHelloCopy.tls13Cookie = nil
+ ignoreExtensions = append(ignoreExtensions, extensionCookie)
}
- // PSK binders and obfuscated ticket age are both updated in the
- // second ClientHello.
- if len(oldClientHelloCopy.pskIdentities) != len(newClientHelloCopy.pskIdentities) {
- newClientHelloCopy.pskIdentities = oldClientHelloCopy.pskIdentities
- } else {
- if len(oldClientHelloCopy.pskIdentities) != len(newClientHelloCopy.pskIdentities) {
- return errors.New("tls: PSK identity count from old and new ClientHello do not match")
+ // The second ClientHello refreshes binders, and may drop PSK identities
+ // that are no longer consistent with the cipher suite.
+ oldPSKIdentities := hs.clientHello.pskIdentities
+ for _, identity := range newClientHello.pskIdentities {
+ // Skip to the matching PSK identity in oldPSKIdentities.
+ for len(oldPSKIdentities) > 0 && !bytes.Equal(oldPSKIdentities[0].ticket, identity.ticket) {
+ oldPSKIdentities = oldPSKIdentities[1:]
}
- for i, identity := range oldClientHelloCopy.pskIdentities {
- newClientHelloCopy.pskIdentities[i].obfuscatedTicketAge = identity.obfuscatedTicketAge
+ // The identity now either matches, or oldPSKIdentities is empty.
+ if len(oldPSKIdentities) == 0 {
+ return errors.New("tls: unexpected PSK identity in second ClientHello")
+ }
+ oldPSKIdentities = oldPSKIdentities[1:]
+ }
+ ignoreExtensions = append(ignoreExtensions, extensionPreSharedKey)
+
+ // Update the index for the identity we resumed. The client may have
+ // dropped some entries.
+ if hs.sessionState != nil {
+ var found bool
+ ticket := hs.clientHello.pskIdentities[pskIndex].ticket
+ for i, identity := range newClientHello.pskIdentities {
+ if bytes.Equal(identity.ticket, ticket) {
+ found = true
+ pskIndex = i
+ break
+ }
+ }
+ if found {
+ binderToVerify := newClientHello.pskBinders[pskIndex]
+ if err := verifyPSKBinder(c.wireVersion, newClientHello, hs.sessionState, binderToVerify, oldClientHelloBytes, helloRetryRequest.marshal()); err != nil {
+ return err
+ }
+ } else if !config.Bugs.AcceptAnySession {
+ // If AcceptAnySession is set, the client may have already noticed
+ // the selected session is incompatible with the HelloRetryRequest
+ // and correctly dropped the PSK identity. We may also have
+ // attempted to resume a session from the TLS 1.2 extension.
+ return errors.New("tls: second ClientHello is missing selected session")
}
}
- newClientHelloCopy.pskBinders = oldClientHelloCopy.pskBinders
- newClientHelloCopy.hasEarlyData = oldClientHelloCopy.hasEarlyData
- if !oldClientHelloCopy.equal(&newClientHelloCopy) {
- return errors.New("tls: new ClientHello does not match")
+ // The second ClientHello must stop offering early data.
+ if newClientHello.hasEarlyData {
+ return errors.New("tls: EarlyData sent in new ClientHello")
+ }
+ ignoreExtensions = append(ignoreExtensions, extensionEarlyData)
+
+ if err := checkClientHellosEqual(hs.clientHello.raw, newClientHello.raw, c.isDTLS, ignoreExtensions); err != nil {
+ return err
}
if firstHelloRetryRequest && config.Bugs.SecondHelloRetryRequest {
firstHelloRetryRequest = false
goto ResendHelloRetryRequest
}
-
- // Verify the PSK binder. Note there may not be a PSK binder if
- // AcceptAnyBinder is set. See https://crbug.com/115.
- if hs.sessionState != nil && !config.Bugs.AcceptAnySession {
- binderToVerify := newClientHello.pskBinders[pskIndex]
- if err := verifyPSKBinder(c.wireVersion, newClientHello, hs.sessionState, binderToVerify, oldClientHelloBytes, helloRetryRequest.marshal()); err != nil {
- return err
- }
- }
}
// Decide whether or not to accept early data.
@@ -2211,3 +2217,129 @@
return nil
}
+
+// checkClientHellosEqual checks whether a and b are equal ClientHello
+// messages. If isDTLS is true, the ClientHellos are parsed as DTLS and any
+// differences in the cookie field are ignored. Extensions listed in
+// ignoreExtensions may change or be removed between the two ClientHellos.
+func checkClientHellosEqual(a, b []byte, isDTLS bool, ignoreExtensions []uint16) error {
+ ignoreExtensionsSet := make(map[uint16]struct{})
+ for _, ext := range ignoreExtensions {
+ ignoreExtensionsSet[ext] = struct{}{}
+ }
+
+ // Skip the handshake message header.
+ aReader := byteReader(a[4:])
+ bReader := byteReader(b[4:])
+
+ var aVers, bVers uint16
+ var aRandom, bRandom []byte
+ var aSessionID, bSessionID []byte
+ if !aReader.readU16(&aVers) ||
+ !bReader.readU16(&bVers) ||
+ !aReader.readBytes(&aRandom, 32) ||
+ !bReader.readBytes(&bRandom, 32) ||
+ !aReader.readU8LengthPrefixedBytes(&aSessionID) ||
+ !bReader.readU8LengthPrefixedBytes(&bSessionID) {
+ return errors.New("tls: could not parse ClientHello")
+ }
+
+ if aVers != bVers {
+ return errors.New("tls: second ClientHello version did not match")
+ }
+ if !bytes.Equal(aRandom, bRandom) {
+ return errors.New("tls: second ClientHello random did not match")
+ }
+ if !bytes.Equal(aSessionID, bSessionID) {
+ return errors.New("tls: second ClientHello session ID did not match")
+ }
+
+ if isDTLS {
+ // DTLS 1.2 checks two ClientHellos match after a HelloVerifyRequest,
+ // where we expect the cookies to change. DTLS 1.3 forbids the legacy
+ // cookie altogether. If we implement DTLS 1.3, we'll need to ensure
+ // that parsing logic above this function rejects this cookie.
+ var aCookie, bCookie []byte
+ if !aReader.readU8LengthPrefixedBytes(&aCookie) ||
+ !bReader.readU8LengthPrefixedBytes(&bCookie) {
+ return errors.New("tls: could not parse ClientHello")
+ }
+ }
+
+ var aCipherSuites, bCipherSuites, aCompressionMethods, bCompressionMethods []byte
+ if !aReader.readU16LengthPrefixedBytes(&aCipherSuites) ||
+ !bReader.readU16LengthPrefixedBytes(&bCipherSuites) ||
+ !aReader.readU8LengthPrefixedBytes(&aCompressionMethods) ||
+ !bReader.readU8LengthPrefixedBytes(&bCompressionMethods) {
+ return errors.New("tls: could not parse ClientHello")
+ }
+ if !bytes.Equal(aCipherSuites, bCipherSuites) {
+ return errors.New("tls: second ClientHello cipher suites did not match")
+ }
+ if !bytes.Equal(aCompressionMethods, bCompressionMethods) {
+ return errors.New("tls: second ClientHello compression methods did not match")
+ }
+
+ if len(aReader) == 0 && len(bReader) == 0 {
+ // Both ClientHellos omit the extensions block.
+ return nil
+ }
+
+ var aExtensions, bExtensions byteReader
+ if !aReader.readU16LengthPrefixed(&aExtensions) ||
+ !bReader.readU16LengthPrefixed(&bExtensions) ||
+ len(aReader) != 0 ||
+ len(bReader) != 0 {
+ return errors.New("tls: could not parse ClientHello")
+ }
+
+ for len(aExtensions) != 0 {
+ var aID uint16
+ var aBody []byte
+ if !aExtensions.readU16(&aID) ||
+ !aExtensions.readU16LengthPrefixedBytes(&aBody) {
+ return errors.New("tls: could not parse ClientHello")
+ }
+ if _, ok := ignoreExtensionsSet[aID]; ok {
+ continue
+ }
+
+ for {
+ if len(bExtensions) == 0 {
+ return fmt.Errorf("tls: second ClientHello missing extension %d", aID)
+ }
+ var bID uint16
+ var bBody []byte
+ if !bExtensions.readU16(&bID) ||
+ !bExtensions.readU16LengthPrefixedBytes(&bBody) {
+ return errors.New("tls: could not parse ClientHello")
+ }
+ if _, ok := ignoreExtensionsSet[bID]; ok {
+ continue
+ }
+ if aID != bID {
+ return fmt.Errorf("tls: unexpected extension %d in second ClientHello (wanted %d)", bID, aID)
+ }
+ if !bytes.Equal(aBody, bBody) {
+ return fmt.Errorf("tls: extension %d in second ClientHello unexpectedly changed", aID)
+ }
+ break
+ }
+ }
+
+ // Any remaining extensions in the second ClientHello must be in the
+ // ignored set.
+ for len(bExtensions) != 0 {
+ var id uint16
+ var body []byte
+ if !bExtensions.readU16(&id) ||
+ !bExtensions.readU16LengthPrefixedBytes(&body) {
+ return errors.New("tls: could not parse ClientHello")
+ }
+ if _, ok := ignoreExtensionsSet[id]; !ok {
+ return fmt.Errorf("tls: unexpected extension %d in second ClientHello", id)
+ }
+ }
+
+ return nil
+}
diff --git a/src/ssl/test/runner/hpke/hpke.go b/src/ssl/test/runner/hpke/hpke.go
new file mode 100644
index 0000000..d508132
--- /dev/null
+++ b/src/ssl/test/runner/hpke/hpke.go
@@ -0,0 +1,252 @@
+// Copyright (c) 2020, Google Inc.
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+// Package hpke implements Hybrid Public Key Encryption (HPKE).
+//
+// See https://tools.ietf.org/html/draft-irtf-cfrg-hpke-05.
+package hpke
+
+import (
+ "crypto/aes"
+ "crypto/cipher"
+ "encoding/binary"
+ "errors"
+
+ "golang.org/x/crypto/chacha20poly1305"
+)
+
+// KEM scheme IDs.
+const (
+ X25519WithHKDFSHA256 uint16 = 0x0020
+)
+
+// HPKE AEAD IDs.
+const (
+ AES128GCM uint16 = 0x0001
+ AES256GCM uint16 = 0x0002
+ ChaCha20Poly1305 uint16 = 0x0003
+)
+
+// HPKE KDF IDs.
+const (
+ HKDFSHA256 uint16 = 0x0001
+ HKDFSHA384 uint16 = 0x0002
+ HKDFSHA512 uint16 = 0x0003
+)
+
+// Internal constants.
+const (
+ hpkeModeBase uint8 = 0
+ hpkeModePSK uint8 = 1
+)
+
+type GenerateKeyPairFunc func() (public []byte, secret []byte, e error)
+
+// Context holds the HPKE state for a sender or a receiver.
+type Context struct {
+ kemID uint16
+ kdfID uint16
+ aeadID uint16
+
+ aead cipher.AEAD
+
+ key []byte
+ baseNonce []byte
+ seq uint64
+ exporterSecret []byte
+}
+
+// SetupBaseSenderX25519 corresponds to the spec's SetupBaseS(), but only
+// supports X25519.
+func SetupBaseSenderX25519(kdfID, aeadID uint16, publicKeyR, info []byte, ephemKeygen GenerateKeyPairFunc) (context *Context, enc []byte, err error) {
+ sharedSecret, enc, err := x25519Encap(publicKeyR, ephemKeygen)
+ if err != nil {
+ return nil, nil, err
+ }
+ context, err = keySchedule(hpkeModeBase, X25519WithHKDFSHA256, kdfID, aeadID, sharedSecret, info, nil, nil)
+ return
+}
+
+// SetupBaseReceiverX25519 corresponds to the spec's SetupBaseR(), but only
+// supports X25519.
+func SetupBaseReceiverX25519(kdfID, aeadID uint16, enc, secretKeyR, info []byte) (context *Context, err error) {
+ sharedSecret, err := x25519Decap(enc, secretKeyR)
+ if err != nil {
+ return nil, err
+ }
+ return keySchedule(hpkeModeBase, X25519WithHKDFSHA256, kdfID, aeadID, sharedSecret, info, nil, nil)
+}
+
+// SetupPSKSenderX25519 corresponds to the spec's SetupPSKS(), but only supports
+// X25519.
+func SetupPSKSenderX25519(kdfID, aeadID uint16, publicKeyR, info, psk, pskID []byte, ephemKeygen GenerateKeyPairFunc) (context *Context, enc []byte, err error) {
+ sharedSecret, enc, err := x25519Encap(publicKeyR, ephemKeygen)
+ if err != nil {
+ return nil, nil, err
+ }
+ context, err = keySchedule(hpkeModePSK, X25519WithHKDFSHA256, kdfID, aeadID, sharedSecret, info, psk, pskID)
+ return
+}
+
+// SetupPSKReceiverX25519 corresponds to the spec's SetupPSKR(), but only
+// supports X25519.
+func SetupPSKReceiverX25519(kdfID, aeadID uint16, enc, secretKeyR, info, psk, pskID []byte) (context *Context, err error) {
+ sharedSecret, err := x25519Decap(enc, secretKeyR)
+ if err != nil {
+ return nil, err
+ }
+ context, err = keySchedule(hpkeModePSK, X25519WithHKDFSHA256, kdfID, aeadID, sharedSecret, info, psk, pskID)
+ if err != nil {
+ return nil, err
+ }
+ return context, nil
+}
+
+func (c *Context) Seal(additionalData, plaintext []byte) []byte {
+ ciphertext := c.aead.Seal(nil, c.computeNonce(), plaintext, additionalData)
+ c.incrementSeq()
+ return ciphertext
+}
+
+func (c *Context) Open(additionalData, ciphertext []byte) ([]byte, error) {
+ plaintext, err := c.aead.Open(nil, c.computeNonce(), ciphertext, additionalData)
+ if err != nil {
+ return nil, err
+ }
+ c.incrementSeq()
+ return plaintext, nil
+}
+
+func (c *Context) Export(exporterContext []byte, length int) []byte {
+ suiteID := buildSuiteID(c.kemID, c.kdfID, c.aeadID)
+ kdfHash := getKDFHash(c.kdfID)
+ return labeledExpand(kdfHash, c.exporterSecret, suiteID, []byte("sec"), exporterContext, length)
+}
+
+func buildSuiteID(kemID, kdfID, aeadID uint16) []byte {
+ ret := make([]byte, 0, 10)
+ ret = append(ret, "HPKE"...)
+ ret = appendBigEndianUint16(ret, kemID)
+ ret = appendBigEndianUint16(ret, kdfID)
+ ret = appendBigEndianUint16(ret, aeadID)
+ return ret
+}
+
+func newAEAD(aeadID uint16, key []byte) (cipher.AEAD, error) {
+ if len(key) != expectedKeyLength(aeadID) {
+ return nil, errors.New("wrong key length for specified AEAD")
+ }
+ switch aeadID {
+ case AES128GCM, AES256GCM:
+ block, err := aes.NewCipher(key)
+ if err != nil {
+ return nil, err
+ }
+ aead, err := cipher.NewGCM(block)
+ if err != nil {
+ return nil, err
+ }
+ return aead, nil
+ case ChaCha20Poly1305:
+ aead, err := chacha20poly1305.New(key)
+ if err != nil {
+ return nil, err
+ }
+ return aead, nil
+ }
+ return nil, errors.New("unsupported AEAD")
+}
+
+func keySchedule(mode uint8, kemID, kdfID, aeadID uint16, sharedSecret, info, psk, pskID []byte) (*Context, error) {
+ // Verify the PSK inputs.
+ switch mode {
+ case hpkeModeBase:
+ if len(psk) > 0 || len(pskID) > 0 {
+ panic("unnecessary psk inputs were provided")
+ }
+ case hpkeModePSK:
+ if len(psk) == 0 || len(pskID) == 0 {
+ panic("missing psk inputs")
+ }
+ default:
+ panic("unknown mode")
+ }
+
+ kdfHash := getKDFHash(kdfID)
+ suiteID := buildSuiteID(kemID, kdfID, aeadID)
+ pskIDHash := labeledExtract(kdfHash, nil, suiteID, []byte("psk_id_hash"), pskID)
+ infoHash := labeledExtract(kdfHash, nil, suiteID, []byte("info_hash"), info)
+
+ keyScheduleContext := make([]byte, 0)
+ keyScheduleContext = append(keyScheduleContext, mode)
+ keyScheduleContext = append(keyScheduleContext, pskIDHash...)
+ keyScheduleContext = append(keyScheduleContext, infoHash...)
+
+ pskHash := labeledExtract(kdfHash, nil, suiteID, []byte("psk_hash"), psk)
+ secret := labeledExtract(kdfHash, pskHash, suiteID, []byte("secret"), sharedSecret)
+ key := labeledExpand(kdfHash, secret, suiteID, []byte("key"), keyScheduleContext, expectedKeyLength(aeadID))
+
+ aead, err := newAEAD(aeadID, key)
+ if err != nil {
+ return nil, err
+ }
+
+ nonce := labeledExpand(kdfHash, secret, suiteID, []byte("nonce"), keyScheduleContext, aead.NonceSize())
+ exporterSecret := labeledExpand(kdfHash, secret, suiteID, []byte("exp"), keyScheduleContext, kdfHash.Size())
+
+ return &Context{
+ kemID: kemID,
+ kdfID: kdfID,
+ aeadID: aeadID,
+ aead: aead,
+ key: key,
+ baseNonce: nonce,
+ seq: 0,
+ exporterSecret: exporterSecret,
+ }, nil
+}
+
+func (c Context) computeNonce() []byte {
+ nonce := make([]byte, len(c.baseNonce))
+ // Write the big-endian |c.seq| value at the *end* of |baseNonce|.
+ binary.BigEndian.PutUint64(nonce[len(nonce)-8:], c.seq)
+ // XOR the big-endian |seq| with |c.baseNonce|.
+ for i, b := range c.baseNonce {
+ nonce[i] ^= b
+ }
+ return nonce
+}
+
+func (c *Context) incrementSeq() {
+ c.seq++
+ if c.seq == 0 {
+ panic("sequence overflow")
+ }
+}
+
+func expectedKeyLength(aeadID uint16) int {
+ switch aeadID {
+ case AES128GCM:
+ return 128 / 8
+ case AES256GCM:
+ return 256 / 8
+ case ChaCha20Poly1305:
+ return chacha20poly1305.KeySize
+ }
+ panic("unsupported AEAD")
+}
+
+func appendBigEndianUint16(b []byte, v uint16) []byte {
+ return append(b, byte(v>>8), byte(v))
+}
diff --git a/src/ssl/test/runner/hpke/hpke_test.go b/src/ssl/test/runner/hpke/hpke_test.go
new file mode 100644
index 0000000..c1c9bf4
--- /dev/null
+++ b/src/ssl/test/runner/hpke/hpke_test.go
@@ -0,0 +1,207 @@
+// Copyright (c) 2020, Google Inc.
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+package hpke
+
+import (
+ "bytes"
+ _ "crypto/sha256"
+ _ "crypto/sha512"
+ "encoding/hex"
+ "encoding/json"
+ "errors"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "path/filepath"
+ "testing"
+)
+
+var (
+ testDataDir = flag.String("testdata", "testdata", "The path to the test vector JSON file.")
+)
+
+// Simple round-trip test for fixed inputs.
+func TestRoundTrip(t *testing.T) {
+ publicKeyR, secretKeyR, err := GenerateKeyPair()
+ if err != nil {
+ t.Errorf("failed to generate key pair: %s", err)
+ return
+ }
+
+ // Set up the sender and receiver contexts.
+ senderContext, enc, err := SetupBaseSenderX25519(HKDFSHA256, AES256GCM, publicKeyR, nil, nil)
+ if err != nil {
+ t.Errorf("failed to set up sender: %s", err)
+ return
+ }
+ receiverContext, err := SetupBaseReceiverX25519(HKDFSHA256, AES256GCM, enc, secretKeyR, nil)
+ if err != nil {
+ t.Errorf("failed to set up receiver: %s", err)
+ return
+ }
+
+ // Seal() our plaintext with the sender context, then Open() the
+ // ciphertext with the receiver context.
+ plaintext := []byte("foobar")
+ ciphertext := senderContext.Seal(nil, plaintext)
+ decrypted, err := receiverContext.Open(nil, ciphertext)
+ if err != nil {
+ t.Errorf("encryption round trip failed: %s", err)
+ return
+ }
+ checkBytesEqual(t, "decrypted", decrypted, plaintext)
+}
+
+// HpkeTestVector defines the subset of test-vectors.json that we read.
+type HpkeTestVector struct {
+ KEM uint16 `json:"kem_id"`
+ Mode uint8 `json:"mode"`
+ KDF uint16 `json:"kdf_id"`
+ AEAD uint16 `json:"aead_id"`
+ Info HexString `json:"info"`
+ PSK HexString `json:"psk"`
+ PSKID HexString `json:"psk_id"`
+ SecretKeyR HexString `json:"skRm"`
+ SecretKeyE HexString `json:"skEm"`
+ PublicKeyR HexString `json:"pkRm"`
+ PublicKeyE HexString `json:"pkEm"`
+ Enc HexString `json:"enc"`
+ Encryptions []EncryptionTestVector `json:"encryptions"`
+ Exports []ExportTestVector `json:"exports"`
+}
+type EncryptionTestVector struct {
+ Plaintext HexString `json:"plaintext"`
+ AdditionalData HexString `json:"aad"`
+ Ciphertext HexString `json:"ciphertext"`
+}
+type ExportTestVector struct {
+ ExportContext HexString `json:"exportContext"`
+ ExportLength int `json:"exportLength"`
+ ExportValue HexString `json:"exportValue"`
+}
+
+// TestVectors checks all relevant test vectors in test-vectors.json.
+func TestVectors(t *testing.T) {
+ jsonStr, err := ioutil.ReadFile(filepath.Join(*testDataDir, "test-vectors.json"))
+ if err != nil {
+ t.Errorf("error reading test vectors: %s", err)
+ return
+ }
+
+ var testVectors []HpkeTestVector
+ err = json.Unmarshal(jsonStr, &testVectors)
+ if err != nil {
+ t.Errorf("error parsing test vectors: %s", err)
+ return
+ }
+
+ var numSkippedTests = 0
+
+ for testNum, testVec := range testVectors {
+ // Skip this vector if it specifies an unsupported KEM or Mode.
+ if testVec.KEM != X25519WithHKDFSHA256 ||
+ (testVec.Mode != hpkeModeBase && testVec.Mode != hpkeModePSK) {
+ numSkippedTests++
+ continue
+ }
+
+ testVec := testVec // capture the range variable
+ t.Run(fmt.Sprintf("test%d,KDF=%d,AEAD=%d", testNum, testVec.KDF, testVec.AEAD), func(t *testing.T) {
+ var senderContext *Context
+ var receiverContext *Context
+ var enc []byte
+ var err error
+
+ switch testVec.Mode {
+ case hpkeModeBase:
+ senderContext, enc, err = SetupBaseSenderX25519(testVec.KDF, testVec.AEAD, testVec.PublicKeyR, testVec.Info,
+ func() ([]byte, []byte, error) {
+ return testVec.PublicKeyE, testVec.SecretKeyE, nil
+ })
+ if err != nil {
+ t.Errorf("failed to set up sender: %s", err)
+ return
+ }
+ checkBytesEqual(t, "sender enc", enc, testVec.Enc)
+
+ receiverContext, err = SetupBaseReceiverX25519(testVec.KDF, testVec.AEAD, enc, testVec.SecretKeyR, testVec.Info)
+ if err != nil {
+ t.Errorf("failed to set up receiver: %s", err)
+ return
+ }
+ case hpkeModePSK:
+ senderContext, enc, err = SetupPSKSenderX25519(testVec.KDF, testVec.AEAD, testVec.PublicKeyR, testVec.Info, testVec.PSK, testVec.PSKID,
+ func() ([]byte, []byte, error) {
+ return testVec.PublicKeyE, testVec.SecretKeyE, nil
+ })
+ if err != nil {
+ t.Errorf("failed to set up sender: %s", err)
+ return
+ }
+ checkBytesEqual(t, "sender enc", enc, testVec.Enc)
+
+ receiverContext, err = SetupPSKReceiverX25519(testVec.KDF, testVec.AEAD, enc, testVec.SecretKeyR, testVec.Info, testVec.PSK, testVec.PSKID)
+ if err != nil {
+ t.Errorf("failed to set up receiver: %s", err)
+ return
+ }
+ default:
+ panic("unsupported mode")
+ }
+
+ for encryptionNum, e := range testVec.Encryptions {
+ ciphertext := senderContext.Seal(e.AdditionalData, e.Plaintext)
+ checkBytesEqual(t, "ciphertext", ciphertext, e.Ciphertext)
+
+ decrypted, err := receiverContext.Open(e.AdditionalData, ciphertext)
+ if err != nil {
+ t.Errorf("decryption %d failed: %s", encryptionNum, err)
+ return
+ }
+ checkBytesEqual(t, "decrypted plaintext", decrypted, e.Plaintext)
+ }
+
+ for _, ex := range testVec.Exports {
+ exportValue := senderContext.Export(ex.ExportContext, ex.ExportLength)
+ checkBytesEqual(t, "exportValue", exportValue, ex.ExportValue)
+
+ exportValue = receiverContext.Export(ex.ExportContext, ex.ExportLength)
+ checkBytesEqual(t, "exportValue", exportValue, ex.ExportValue)
+ }
+ })
+ }
+
+ if numSkippedTests == len(testVectors) {
+ panic("no test vectors were used")
+ }
+}
+
+// HexString enables us to unmarshal JSON strings containing hex byte strings.
+type HexString []byte
+
+func (h *HexString) UnmarshalJSON(data []byte) error {
+ if len(data) < 2 || data[0] != '"' || data[len(data)-1] != '"' {
+ return errors.New("missing double quotes")
+ }
+ var err error
+ *h, err = hex.DecodeString(string(data[1 : len(data)-1]))
+ return err
+}
+
+func checkBytesEqual(t *testing.T, name string, actual, expected []byte) {
+ if !bytes.Equal(actual, expected) {
+ t.Errorf("%s = %x; want %x", name, actual, expected)
+ }
+}
diff --git a/src/ssl/test/runner/hpke/kem.go b/src/ssl/test/runner/hpke/kem.go
new file mode 100644
index 0000000..7efc323
--- /dev/null
+++ b/src/ssl/test/runner/hpke/kem.go
@@ -0,0 +1,137 @@
+// Copyright (c) 2020, Google Inc.
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+package hpke
+
+import (
+ "crypto"
+ "crypto/rand"
+
+ "golang.org/x/crypto/curve25519"
+ "golang.org/x/crypto/hkdf"
+)
+
+const (
+ rfcLabel string = "HPKE-05 "
+)
+
+func getKDFHash(kdfID uint16) crypto.Hash {
+ switch kdfID {
+ case HKDFSHA256:
+ return crypto.SHA256
+ case HKDFSHA384:
+ return crypto.SHA384
+ case HKDFSHA512:
+ return crypto.SHA512
+ }
+ panic("unknown KDF")
+}
+
+func labeledExtract(kdfHash crypto.Hash, salt, suiteID, label, ikm []byte) []byte {
+ var labeledIKM []byte
+ labeledIKM = append(labeledIKM, rfcLabel...)
+ labeledIKM = append(labeledIKM, suiteID...)
+ labeledIKM = append(labeledIKM, label...)
+ labeledIKM = append(labeledIKM, ikm...)
+ return hkdf.Extract(kdfHash.New, labeledIKM, salt)
+}
+
+func labeledExpand(kdfHash crypto.Hash, prk, suiteID, label, info []byte, length int) []byte {
+ lengthU16 := uint16(length)
+ if int(lengthU16) != length {
+ panic("length must be a valid uint16 value")
+ }
+
+ var labeledInfo []byte
+ labeledInfo = appendBigEndianUint16(labeledInfo, lengthU16)
+ labeledInfo = append(labeledInfo, rfcLabel...)
+ labeledInfo = append(labeledInfo, suiteID...)
+ labeledInfo = append(labeledInfo, label...)
+ labeledInfo = append(labeledInfo, info...)
+
+ reader := hkdf.Expand(kdfHash.New, prk, labeledInfo)
+ key := make([]uint8, length)
+ _, err := reader.Read(key)
+ if err != nil {
+ panic("failed to perform HKDF expand operation")
+ }
+ return key
+}
+
+// GenerateKeyPair generates a random key pair.
+func GenerateKeyPair() (publicKey, secretKeyOut []byte, err error) {
+ // Generate a new private key.
+ var secretKey [curve25519.ScalarSize]byte
+ _, err = rand.Read(secretKey[:])
+ if err != nil {
+ return
+ }
+ // Compute the corresponding public key.
+ publicKey, err = curve25519.X25519(secretKey[:], curve25519.Basepoint)
+ if err != nil {
+ return
+ }
+ return publicKey, secretKey[:], nil
+}
+
+// x25519Encap returns an ephemeral, fixed-length symmetric key |sharedSecret|
+// and a fixed-length encapsulation of that key |enc| that can be decapsulated
+// by the receiver with the secret key corresponding to |publicKeyR|.
+// Internally, |keygenOptional| is used to generate an ephemeral keypair. If
+// |keygenOptional| is nil, |GenerateKeyPair| will be substituted.
+func x25519Encap(publicKeyR []byte, keygen GenerateKeyPairFunc) ([]byte, []byte, error) {
+ if keygen == nil {
+ keygen = GenerateKeyPair
+ }
+ publicKeyEphem, secretKeyEphem, err := keygen()
+ if err != nil {
+ return nil, nil, err
+ }
+ dh, err := curve25519.X25519(secretKeyEphem, publicKeyR)
+ if err != nil {
+ return nil, nil, err
+ }
+ sharedSecret := extractAndExpand(dh, publicKeyEphem, publicKeyR)
+ return sharedSecret, publicKeyEphem, nil
+}
+
+// x25519Decap uses the receiver's secret key |secretKeyR| to recover the
+// ephemeral symmetric key contained in |enc|.
+func x25519Decap(enc, secretKeyR []byte) ([]byte, error) {
+ dh, err := curve25519.X25519(secretKeyR, enc)
+ if err != nil {
+ return nil, err
+ }
+ // For simplicity, we recompute the receiver's public key. A production
+ // implementation of HPKE should incorporate it into the receiver key
+ // and halve the number of point multiplications needed.
+ publicKeyR, err := curve25519.X25519(secretKeyR, curve25519.Basepoint)
+ if err != nil {
+ return nil, err
+ }
+ return extractAndExpand(dh, enc, publicKeyR[:]), nil
+}
+
+func extractAndExpand(dh, enc, publicKeyR []byte) []byte {
+ var kemContext []byte
+ kemContext = append(kemContext, enc...)
+ kemContext = append(kemContext, publicKeyR...)
+
+ suite := []byte("KEM")
+ suite = appendBigEndianUint16(suite, X25519WithHKDFSHA256)
+
+ kdfHash := getKDFHash(HKDFSHA256)
+ prk := labeledExtract(kdfHash, nil, suite, []byte("eae_prk"), dh)
+ return labeledExpand(kdfHash, prk, suite, []byte("shared_secret"), kemContext, 32)
+}
diff --git a/src/ssl/test/runner/hpke/testdata/test-vectors.json b/src/ssl/test/runner/hpke/testdata/test-vectors.json
new file mode 100644
index 0000000..046d861
--- /dev/null
+++ b/src/ssl/test/runner/hpke/testdata/test-vectors.json
@@ -0,0 +1 @@
+[{"mode":0,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"1289f0db1d8f68d0c531b5e53a40911a2a2347059355d7c267717033fef2b08c","seedE":"a77ae3e14cc2ec9e603a9049423d48e66a5e3139e896e95cf19919430657adc7","skRm":"5a8aa0d2476b28521588e0c704b14db82cdd4970d340d293a9576deaee9ec1c7","skEm":"8c490e5b0c7dbe0c6d2192484d2b7a0423b3b4544f2481095a99dbf238fb350f","pkRm":"8756e2580c07c1d2ffcb662f5fadc6d6ff13da85abd7adfecf984aaa102c1269","pkEm":"8a07563949fac6232936ed6f36c4fa735930ecdeaef6734e314aeac35a56fd0a","enc":"8a07563949fac6232936ed6f36c4fa735930ecdeaef6734e314aeac35a56fd0a","shared_secret":"f3822302c852b924c5f984f192d39705ddd287ea93bb73e3c5f95ba6da7e01f5","key_schedule_context":"000c085d4e6d2e6a568b5dcf334f7badd56222cd79f2ac98b6f99059f311c3f16a44c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"98a35c8191d511d39a35afcb6cd4072d5038afb2bcc1ecb468626466b2870447","key":"550ee0b7ec1ea2532f2e2bac87040a4c","nonce":"2b855847756795a57229559a","exporter_secret":"1aabf0ea393517daa48a9eaf44a886f5e059d455988a65ae8d66b3c017fc3722","encryptions":[{"aad":"436f756e742d30","ciphertext":"971ba65db526758ea30ae748cd769bc8d90579b62a037816057f24ce427416bd47c05ed1c2446ac8e19ec9ae79","nonce":"2b855847756795a57229559a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"f18f1ec397667ca069b9a6ee0bebf0890cd5caa34bb9875b3600ca0142cba774dd35f2aafd79a02a08ca5f2806","nonce":"2b855847756795a57229559b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"51a8dea350fe6e753f743ec17c956de4cbdfa35f3018fc6a12752c51d1372c5093959f18c7253da9c953c6cfbe","nonce":"2b855847756795a572295598","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ee2c9cb45a5088256b061a28b528fcd252d2a014d73523bf3ffb0c8687d9996ec6fb69c487a0b62fbc45b04ccb","nonce":"2b855847756795a572295599","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2e5fa3a358e3ab64e5e981c4b89b5ae4cc5b800aaf726dc64ff857536a3db0e6d816199e711aac60c4670c2a31","nonce":"2b855847756795a57229559e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d2d0d40c685b3646527da571ff9bb23eee8d0f124a2ab937ad9aacb314209ba150b12bce3be844a414b2b81e15","nonce":"2b855847756795a57229559f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"107b5d77e79b423ddc8feb4f1d42094244d9363b1157e2a46de9b192d1ebaf6053164878a8e9f3ab6c87260355","nonce":"2b855847756795a57229559c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"64b5285667328e0fa12c51e282eb4d446c69404944134958dcbee1b947ce413eaff910146f2ae47586055c05ec","nonce":"2b855847756795a57229559d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"89dd974790c8491cd5539f51537708bd2cbf4d6e0322637fb4dbe6008e6f59b75e3c527587cfefdb37ca68e6cd","nonce":"2b855847756795a572295592","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"e84394b6142059384e270407a6360760827eba0e90c0d2dfd8d6170eed7667cf933fb9854ab766cede7306bda3","nonce":"2b855847756795a572295593","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"0df04ac640d34a56561419bab20a68e6b7331070208004f89c7b973f4c472e92"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"723c2c8f80e6b827e72bd8e80973a801a05514afe3d4bc46e82e505dceb953aa"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"38010c7d5d81093a11b55e2403a258e9a195bcf066817b332dd996b0a9bcbc9a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ebf6ab4c3186131de9b2c3c0bc3e2ad21dfcbc4efaf050cd0473f5b1535a8b6d"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c4823eeb3efd2d5216b2d3b16e542bf57470dc9b9ea9af6bce85b151a3589d90"}]},{"mode":1,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"326ee379f778718e6cb343f55668fbb9d0098ba0503cd4414a8f1ce252605c39","seedE":"0fa1407ccee05de0cceb2f2d2381d2df0602dbd43be90eefd288ce4ad0b3ba32","skRm":"4b41ef269169090551fcea177ecdf622bca86d82298e21cd93119b804ccc5eab","skEm":"e7d2b539792a48a24451303ccd0cfe77176b6cb06823c439edfd217458a1398a","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"a5c85773bed3a831e7096f7df4ff5d1d8bac48fc97bfac366141efab91892a3a","pkEm":"08d39d3e7f9b586341b6004dafba9679d2bd9340066edb247e3e919013efcd0f","enc":"08d39d3e7f9b586341b6004dafba9679d2bd9340066edb247e3e919013efcd0f","shared_secret":"9d4fe1809006b38854f056830b8900086f562207dce6010eadf23d2d5303cdf8","key_schedule_context":"01512564fc13bf3387a7d73eb72eb6b62766480582bfe146c4e5afb8788652269644c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"84d1c77bdf45e43e2e84f607573f0db0758c56f322500a673be8e2062d343b1f","key":"811e9b2d7a10f4f9d58786bf8a534ca6","nonce":"b79b0c5a8c3808e238b10411","exporter_secret":"7e9ef6d537503f815d0eaf70550a1f8e9af12c1cccb76919aafe93535547c150","encryptions":[{"aad":"436f756e742d30","ciphertext":"fb68f911b4e4033d1547f646ea30c9cee987fb4b4a8c30918e5de6e96de32fc63466f2fc05e09aeff552489741","nonce":"b79b0c5a8c3808e238b10411","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"85e7472fbb7e2341af35fb2a0795df9a85caa99a8f584056b11d452bc160470672e297f9892ce2c5020e794ae1","nonce":"b79b0c5a8c3808e238b10410","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"74229b7491102bcf94cf7633888bc48baa4e5a73cc544bfad4ff61585506facb44b359ade03c0b2b35c6430e4c","nonce":"b79b0c5a8c3808e238b10413","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"013476197af9440a8be89a0cf7d3802eae519d5f5b39cb600e8b285e16ad90c3d903f6108946616723e9a93b73","nonce":"b79b0c5a8c3808e238b10412","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5aeb09a3798d21dc2ca01f5c255624c9c8c20d75d79d19269eca7b280be0cb7851fae82b646bd5673d10368276","nonce":"b79b0c5a8c3808e238b10415","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e9cac48b89f3f8898a85562007854b9f61bdf2d2c3e32e9b6162e9fa2f83924d138194528946d96cf7988685a0","nonce":"b79b0c5a8c3808e238b10414","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2aa76414e0cb28ba7ba0f24d800bc4fec24d51cd1f75e839233ee10610bda97f3daf46fadb53ca01762bbe8a04","nonce":"b79b0c5a8c3808e238b10417","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"96148b343eb53df8d528af57214e65de028461ac69f2d9e371cb0aa4d732201d693766a17fd49ec6025bc98705","nonce":"b79b0c5a8c3808e238b10416","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"39b7e966e0ada05d8cd8a9beb5765941baad38473f18f705443f882a207ff96bfe1c71ae386e97e2fa91960bbe","nonce":"b79b0c5a8c3808e238b10419","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"25bd0d0614a38b19a05dff783a1bbd003c25cade55ba0e24e234b803991cae60ba7d105d35e47519a8cf598580","nonce":"b79b0c5a8c3808e238b10418","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bd292b132fae00243851451c3f3a87e9e11c3293c14d61b114b7e12e07245ffd"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"695de26bc9336caee01cb04826f6e224f4d2108066ab17fc18f0c993dce05f24"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c53f26ef1bf4f5fd5469d807c418a0e103d035c76ccdbc6afb5bc42b24968f6c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8cea4a595dfe3de84644ca8ea7ea9401a345f0db29bb4beebc2c471afc602ec4"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e6313f12f6c2054c69018f273211c54fcf2439d90173392eaa34b4caac929068"}]},{"mode":2,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"518df90f0f5044ce653180c700e4902d37a7ba1cd23482a76e18b300fecaac4e","seedS":"262a05ad0c08030cdbbaafc03d64f33b95bf8089f216c62ac39b72064a4b4dcb","seedE":"02900cb4856b5f222293a9bd7bda2f1f81c562dc3002336ad1c39f6572402b7d","skRm":"c4148fc8253ccf99b0738b94d376ff58e7eb3845494b5dc945c2f2dbda65da85","skSm":"6836d31499e13bdcc51b8318060e6a752849c9424d02e7f404bb03a0341b0878","skEm":"ca30ef092d6b9bfdf0dc96bc96c5153c8f61cffd01603936ca09fc6146ec523c","pkRm":"07828ba8fb4171c0393edf8cf975268e263245fea4726e16393f536ccca7c46e","pkSm":"76ce23e7f9144663772e283a16fc25950ad4a53b1200a8576442b159d14e5c3f","pkEm":"56a21e8b5416d187c3d865765794e7f361d631049ebbb6a64ed28fd071068121","enc":"56a21e8b5416d187c3d865765794e7f361d631049ebbb6a64ed28fd071068121","shared_secret":"dec9ae331e9017669151e07c06d1cd7f3dd318c180c9cad5223e1c2b019d2243","key_schedule_context":"020c085d4e6d2e6a568b5dcf334f7badd56222cd79f2ac98b6f99059f311c3f16a44c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"a78ac3f106be621d7ce48d7f02e9c69f23c042912697a985787c34e5340ca8e7","key":"82a24b8790521d6b2d260664d9bfaefc","nonce":"bb0cb3a72dff841c796fce56","exporter_secret":"933d7ef819b2fabc810db31f7fcbe5b16c4efa0f4b715e888466829d9b22062d","encryptions":[{"aad":"436f756e742d30","ciphertext":"86dea722bc4f4cb0983b70dbdb539cf79e393546805d90d3f832af5f907c86f37ac579976db191a479c9450f37","nonce":"bb0cb3a72dff841c796fce56","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"4f6b757fc0e807cf8f4726ed1bd05c6b87714b2332372795f7e8579fe21e104ff8180fea797855a62f71a37aea","nonce":"bb0cb3a72dff841c796fce57","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"999285da95ed93dfb48bbe99d46ebba43c98e35f6ccd4fed92edf9d618e98174b63a0a2c12ab91521669fdad2c","nonce":"bb0cb3a72dff841c796fce54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1a28de36d92f579a485b4ef4c598c7173bee06be8d9cab4aec6a81a0ec545855f72b82fbc078bd2f8cda61acb3","nonce":"bb0cb3a72dff841c796fce55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1ac6af74dfe65c63b046eb99fb9036ce759ddf5bfb3a396796892c78ce3f35beeedb7b3d1b515a9dff7d9af365","nonce":"bb0cb3a72dff841c796fce52","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d7bf489f2452682d7794df762ef0156887dc69e664ecaceeda81825838196cc77ded5ffcea7650cf1739ff7df5","nonce":"bb0cb3a72dff841c796fce53","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"7815584cffb6f9571a2cd317aa84b437dbca0e85bc6f67c075059ad8325007709515b3dfc87246fc7b9d4da2a4","nonce":"bb0cb3a72dff841c796fce50","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"02b863056cd2d58e1214a73cbb81d59ea1397d407da2709b32d65ccf38d86e91872332a51ce64c818788d6c0d0","nonce":"bb0cb3a72dff841c796fce51","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ef4debbf21e4ed4a1f8eb408907b6c7191196db3cfe301dc57d489fee24e7daf2a30753961d326a393f6d27121","nonce":"bb0cb3a72dff841c796fce5e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ea8b29a8489eba2c66d01aeb3d937d76374e5fdd86cbae3902cd6c0f4edbd64749453449ac50b86348ad839826","nonce":"bb0cb3a72dff841c796fce5f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"569accd852ca9f1bbb1cc2ac01126f5be0f40cff54c2192f6c7d2e9b4208aae8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"21e678d4feb8d3e63cad48c0bc0d7cd4d9898f3582306921d6f594c7548748eb"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9b6d0e4fc457c91692ffed826a7656e33f6deec5b502ac2b8eb895a6bb6e3a65"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d129c80ae79865868c859543aef97588ee135a7d2d42d026f8055313adb90535"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"082427af691bcea347bda235464d8389a104ec70b3ff1a24c63709a4ad3a9b7a"}]},{"mode":3,"kem_id":32,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"02a965d8f53bbdcc11cc618d4f31f69277500b75959ca97fd533058315511d1b","seedS":"e9c09a3e50073935e75d3846007a26088a93ebf58ad0bb30ad6c42a9d4d2419e","seedE":"c1d1028243a951dbf6469025f3a1304407b08fb932104e61c7aab42ab4f1995c","skRm":"a13722050e593c33f367a4d048dd6a6e0c25b1d8288d8f9ac7a3b00228cad946","skSm":"e19b525b64f4799822d229b5c6769ab4244773aa2d48720d3bbc36aa5b9d5aac","skEm":"d9ddce685897eeccc4390d07f30aceea8151d6c0d3468bc7f2a16702b2ac13e3","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"cbc7508f3232db133971f3c7dfd97f00c01de68ac8103f61fa60ac5ae2800153","pkSm":"48cddb9d276b4d14895e14973bfbd72db587c0036f9a75409b45334844360a7a","pkEm":"0f496b65ac352457865d9f6cb30e0ceaffee742accb016c2c1a7cec68a33244c","enc":"0f496b65ac352457865d9f6cb30e0ceaffee742accb016c2c1a7cec68a33244c","shared_secret":"83272c7b992c197f882d992ef6737bb7f4b17ddf103368e1d7e90b07c946b2e3","key_schedule_context":"03512564fc13bf3387a7d73eb72eb6b62766480582bfe146c4e5afb8788652269644c484c33962433c90728ac6c2893f828d58cebf58ba4fdae59b0a8f7ab84ff8","secret":"619e4c000edf5cb8c2b795fbf2dce842d0ff5cba4e12312f5fc67510eb059560","key":"b305d06827e854504246d9bbae3b1f80","nonce":"4940e55b734bbe1d46e24bd6","exporter_secret":"bd6ec34885e97fe0c07bda3454d47ece7b6e9a1a05f729223485e4335c40cbdf","encryptions":[{"aad":"436f756e742d30","ciphertext":"c7200a5246b4aa9e6878e22830d19466ca31394651ae84383f183991d3a8662415d60e1e073209e6dadd480ff2","nonce":"4940e55b734bbe1d46e24bd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"8071f54a0a43f77a30de1fd96133d91184b5f863525d7810eb9350aa25558bc470781e62c27fe9a566f15efdc8","nonce":"4940e55b734bbe1d46e24bd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"fc9747b21f74c098899e408d86c11d28617a1a3eb2d985fe4af7ccea202343df096920759614bfa2586f0f1c5a","nonce":"4940e55b734bbe1d46e24bd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"feb4cb8de805d855c0df8e75293a2a50cce58c9f4db7ead85e91eb10c498de2878961da5dab9d59237d524f4f6","nonce":"4940e55b734bbe1d46e24bd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d85c2d06220ae34064210c4129f8c95dd43c45fb87ab25885467dc2c6a663deb84043eedde254968c55ef693e6","nonce":"4940e55b734bbe1d46e24bd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f9f00677d11dfbc321f5bc94c34df253e4f413d01f3e3fcf916ac9a767d0830f17f6bfe772e28642eed51e865c","nonce":"4940e55b734bbe1d46e24bd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"061c0a2f036735c87afe3e1b091f634ca3dc1b33a393cdf7ddd054c68ea1d26e9c39322d332b2923017700d5a3","nonce":"4940e55b734bbe1d46e24bd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"9aba719d419a3b91e51c84b905d4bfbbe8ad9b1e47ec15c207b930d4a4cbdd585410390d41cf38107c08872a8f","nonce":"4940e55b734bbe1d46e24bd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"54fecbce208e6416f62f1e0e12af14937b5b292cb36d6a7df527d38a7f30de63e7846b18662507e46fa389b5af","nonce":"4940e55b734bbe1d46e24bde","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1d39d1782ab76f9293b709d0958b0faa7b6e8ae299017e42d6595064aaed942f254cdb48db49b5fad6a7842f53","nonce":"4940e55b734bbe1d46e24bdf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f8e91bf713455564a66e27755294012dda09d1b4bb7d5d8b893678173093aa3f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d98a71a97c5cc4c87f74b3bc8073aa41f393942c2a4f41b273676da28f99f139"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"39168f2f0360a48eebcc72bd19504e294b1b456a391014e15b97d0c318f2ae3a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1b41f68bd5f990aab48869931b433256f88899111ac158516e2a4326c83eb892"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9432ffb5d534c88e7e7e5ed8434206be52855547e130b2b75cc1000ced6fef0e"}]},{"mode":0,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"83ee68e36ddc609bf738125f72d9f1f27bce7c6934070a69b6c2a78ca921918b","seedE":"adda7fa5deb77a957f598da6f20c056993862b3286845e23e1cc08696ed2f1f2","skRm":"d7f9945b55b697a7452105630095894758508599694f401aaaed77a88364b8a1","skEm":"dfe953241ce3e4bd96b6f7421124136a3203aaa239fda95352eab223e821677d","pkRm":"f14d42cde2eaac0eb8e36c4658b927791941d6e2aefb8435d722b5fac3d3a842","pkEm":"97f8c9d24e6fc9f26de91a180fc2368b43aa7464185e3618d43bb341fb83b75b","enc":"97f8c9d24e6fc9f26de91a180fc2368b43aa7464185e3618d43bb341fb83b75b","shared_secret":"f00937b7094c31669fb1d349f12be9400267872ffd2292d50c5816bd52716a7a","key_schedule_context":"0052abd58a159195ab1612c2748d4ceeea5070496ba8c288bbe08601d1b2d14a4d873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"98f6a3a62bb3b8c2cdb9b0f0264616e8863eff6d0f7282b4c153a8e766e5a9c5","key":"2a893cfc4e62539953aa8ff2cc1431562f661ab3b33744f1d4f1708e841435ec","nonce":"5d1b1f352ad6bfcfe9c4da65","exporter_secret":"6786153d8812c7889346b007ec0ca4ec9d9fe1d07e1b1c4e437bc4c69df04be5","encryptions":[{"aad":"436f756e742d30","ciphertext":"922b657481e80bf18b8814a435d31c776759859e8ca40884157247c0cbed07bcbd3c22ed029a50da93d08fa065","nonce":"5d1b1f352ad6bfcfe9c4da65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"5b6efad025ff8edee5cee6b32f161cb33f2ba397469e9b35a48f9bad8a7a9dd2522748f68a1d64521d79097901","nonce":"5d1b1f352ad6bfcfe9c4da64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"a2039f9c4b3cf3a71ecf972c55541ae1bef3931a73d98c5178d8f2bbe0c0f56e058077719fc4e63a882f104f64","nonce":"5d1b1f352ad6bfcfe9c4da67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ac3967baf9b52e321eecc638ef42c53a7502b60890ac84200a1580bd825d4f89e83c2710c136e56644784f1a71","nonce":"5d1b1f352ad6bfcfe9c4da66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"cfe4cca91ae9bf4e3c6cfd5d3ab777cda301041ab8c695388f94bb883763b3f0dd85dfaf483c117549176107e8","nonce":"5d1b1f352ad6bfcfe9c4da61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"721543123239a19a8242c8aab8aa997c04d758fc7819930dda8633dbdc5af5e33c5a451f3d8cd1691e3eb28310","nonce":"5d1b1f352ad6bfcfe9c4da60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ef970051362035083bdf24d2262d5a597f4361922eace58811df54c3dc12fc6622f853e4dec8b483178f61567e","nonce":"5d1b1f352ad6bfcfe9c4da63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c5653e7a823bdf8d083e3fbdd7c9b9c2838c80cbfcd6d1adfd18d237f43a02d5a83c3808c1d4b4451dbbed5f98","nonce":"5d1b1f352ad6bfcfe9c4da62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"04278bdacd59166890abb0f67a19c577acb0b108801db93fba1e271522f98d43c2c2fcac66378d174463c146ee","nonce":"5d1b1f352ad6bfcfe9c4da6d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c0a4e4e239d9c59d61fa2809fc47476941b53b262d95aa14bf29ea24b6de10783148e2762d8900640d2798f255","nonce":"5d1b1f352ad6bfcfe9c4da6c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"de705a4b13a12250f4d5487de67705190737e6d1ba8b57f70d87ba585ea1cf85"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"f4e86ab469491b2a7ad91d17ddb8964884a114549f63d0985355d9b844dacd4c"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"47c20438e2a2fbca12b2ac55c2cccb1ff5ef0907c80ead4bd36ab1a10d57fb2e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ae7cd43f0d52ee38ac4655d5f2d191fd8ec573ab1d47702684dfea85b52b5a38"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"807d14a692749503f44e54660e8ebe4e93311715b9ba7d540973b2bb3c606825"}]},{"mode":1,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"9d0d68a6649cc66c65782569d4a79da1e2f73a34b84191d759569428479a510c","seedE":"8c51282bb46acb5132fbcf26f1e2cdab29408c19f0f66960d7264d7ce676a023","skRm":"cb798ffb68e7b3db33913c365bf45a811fca8382522ac8815b12b26d3377a049","skEm":"bf3981d4d9b43ea83365747e25d8ba71e14d21cca47e35e70b5311e1d48f8a0d","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4a9269e9db60008f5c7f3c7d39bb8c4923bc2f244b3ed9085191ef54cd10cf0c","pkEm":"8f65c9f75b4b774d36052dfac0bdd37a03f309b92c9a9ca47e903683be34d04d","enc":"8f65c9f75b4b774d36052dfac0bdd37a03f309b92c9a9ca47e903683be34d04d","shared_secret":"f228aa9be7ff1ebd78f52b8b00b7f15688935ce105e24df508ad27c68eea703a","key_schedule_context":"01e623aa22a604f74ba1383391cf0c046f3461b30b65733a0a9e9043172f9317da873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"f7878c2d949a446b44b95b2587dc3cc5155a83a837013582eeefea774b32f526","key":"743493cb30aac02389f8db1be74b6a2f2e09f7b6fe337095b207bb3b750b1ace","nonce":"3b83c923d13310f21c71baba","exporter_secret":"555a2c91cf21b146f7cdd2fce83dc165133b1896613c0e21d31583641b972967","encryptions":[{"aad":"436f756e742d30","ciphertext":"ad2a3e08e10413e7bdf9e89f2db169338fc68bcf8dc7bb073ca779024996de5922d338cf8407d34109cd2fdccf","nonce":"3b83c923d13310f21c71baba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"d7c94516707aef83e37dc5cbe3e9668260de5954899d54e8ecab3f1cfba8556557f1ff2238f817e0eb75d3cbb7","nonce":"3b83c923d13310f21c71babb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"371412a9a86704990e8d7170282134096fc623c74411d5ff95380692a74c438deb0e38f41bfba0562042e987a0","nonce":"3b83c923d13310f21c71bab8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"4e3486ffca6d42f064c885d169210f6fcce2b3d4981d185d4b1a5c1e82733c14f14fcb8b1f16dd1e7b707907ab","nonce":"3b83c923d13310f21c71bab9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"45f532caeed9f6c35a990812773cfd688f686288dfcb500ae04f8fac4d3704204bb051e704c422edcc3107737b","nonce":"3b83c923d13310f21c71babe","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"1c0aee5fa393a0c4e2dbd70f7ce475542c71fd402b6fb8431855ac8fbafc6801c777996f8243c53a7d96d131c8","nonce":"3b83c923d13310f21c71babf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"66cd0eeb97fc59c1863898f9b7f1f67c82c5aede5794c17937f5e0909641af770c4973aec2a21967c0f17a64ba","nonce":"3b83c923d13310f21c71babc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c96bb3363b31b582476239e1eb0792d2ac632ddaa7a1dc9ac7f9d588b62970016040a278e448256f5bbbf09ed7","nonce":"3b83c923d13310f21c71babd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"71b3055db5efe1165e685d25c4a749b6fdf8cb7a59f7e3e76cfbf63c109db9387fc751cc9c36cf886dd0f79411","nonce":"3b83c923d13310f21c71bab2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"14372e32a6dee0536a11b66343eb436c099d7adf658900fa624a45d6f1a8e84297c56ec6e05b2745605dfcd99e","nonce":"3b83c923d13310f21c71bab3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c52ecbb65af1c6764ce7d2fd1131d5f050ee2f943a4fe56e9c855b44385b00cf"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"42c5cf4f81152d05bacc9323e805eab8e429850dd029937c2c42f17ce7fea09b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"89d7f97327d51d61a4ac04b2507e51a977c8706bd932941f5acf1f542cfd034b"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"581e3a66a1ad5309c3295825bc03407c7d9e34673e61aed2c543b47764577783"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"599f10537288a9ec87d53c16aaa5881715061e6152a5b51b1e0433a396b38d10"}]},{"mode":2,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"c1a41b7efd403c8f04e2998c09ad725768ab626cba81880cc676bcdb5dbca74b","seedS":"6cc54ffec5f01c01c5b756c26498c910f2d024713baef267cf225dd2d3c5f409","seedE":"b8975c2b6df6a87ca61f910353f540c1b79aab73015d8f8cf59fd404c9c8a638","skRm":"c771870b6aa79a169d4bd426f34dac32174e78840973a8adbefe0108e3747cc9","skSm":"3735f9ba5702a15fa76c56f8c907b5611dbeafa6390dceccccc3c7f12a17460c","skEm":"ae178b9103efd5eb4f8bde61fb3cd83a52e0c1cce7a4fe859c949331f956d511","pkRm":"081bcda65a1808a9579f7e20ddaa3d03298d1eeba4befcd3d5975972167fbf57","pkSm":"37b491977d9bb9f271a3632064bed9f302d150357d0839ccdbadbcd6173a4419","pkEm":"9d49cfea83e2ccb0cfb7eabdbd1ef6c55fb8ffc739d03e180bf115791ff87c02","enc":"9d49cfea83e2ccb0cfb7eabdbd1ef6c55fb8ffc739d03e180bf115791ff87c02","shared_secret":"c019ff113e0f309e487dc5960adc4fcd6911350a9e85fc4383792122daa73837","key_schedule_context":"0252abd58a159195ab1612c2748d4ceeea5070496ba8c288bbe08601d1b2d14a4d873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"b1ceca5c1b3376f8b37f71344c6fe1521090c6ee010692f083e6a5e6e45b6863","key":"83599f5f934755e886914e61a29de1d52ff52ab9517bc5d1c7fb28263a6ceebf","nonce":"447624b35e2c38133a2defd9","exporter_secret":"9f900e30337b61db9d212648d70885f6e40bac84c279b51f9a6fc22da8978e3e","encryptions":[{"aad":"436f756e742d30","ciphertext":"0ba66fa26360c526051791e6f377e6e35d0d7254c9269eaf01ab5b272ff8da13ac7f4339cb325568134e3365f6","nonce":"447624b35e2c38133a2defd9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"689222e02e128c36de72cf5169779a2769ac3a6f39ace69607a44970f9afabc7b236b3c600900d9f7ce9da6e17","nonce":"447624b35e2c38133a2defd8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"75aae78f896b62c95b423c12a087152b0f3f45057c36925cc2ee6e3f9bda3eaf447628e90fd4ca77300b3c45ba","nonce":"447624b35e2c38133a2defdb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"cc3b4f802b2278b4a3107fbbbb7f9e78667fee91957004aa6143cbbc1cef354d311e95010c19152eba1a731f71","nonce":"447624b35e2c38133a2defda","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"7d6dd0646b7ea2ad191d4a6a069e464642ed0c53392a4612238e06700b4ab20e0a9c025fc5b25b1feaae541346","nonce":"447624b35e2c38133a2defdd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"1cf00297bcdb18f8f2295416afdf7cb589982cf50ce6277df8cb3dbd70c270d8b0805111e7f165bd3ea1c24316","nonce":"447624b35e2c38133a2defdc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cec9a809a4a06ba86c89930ed21a2db95fb8942f70fbf2619be69e0e02169ea18f8390b905bc86435987c424bb","nonce":"447624b35e2c38133a2defdf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5df50bbe002481f084c0194661e02f670e19898acdde8f78859db4915b951916ce7fc7b717472de39415e095ee","nonce":"447624b35e2c38133a2defde","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d2f8e9034f9f32cd85e0f69fc9cb4e93c55419bd9b1b7d748528e10d69e7a0654cf424bfcb7d8eef5deb1f3312","nonce":"447624b35e2c38133a2defd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"3c3661439f0a31e2319b56648f6d4c30efb5922fa222c6be7a389a4d6441a7fb0de07057b455734ba506c2c5a6","nonce":"447624b35e2c38133a2defd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bfbc0230819d3e6dba6ae32f39e0840b8ddb14b927800a021bc9376d62462c90"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"207607306e5d68cbd2f32d73f472a9b3cf36598dd316da93d463ea025270935f"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e498d7a98e6bc111ffb07ec8539d54e0b685061cace510fc5226c56ff1ca9134"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"24555bdc2881b2fa8814bca0803f49d768c7fc05f5f27c10cb8c2df2c4c4d584"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"23cee20b371e7b062ade45eea3e290749cc95e337d80b4d7ee36e4043724b35d"}]},{"mode":3,"kem_id":32,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"127a413bb98fa67dcfa9ae1391d9f2ceb637429ccf7634fbfaaa9b7c2d95394a","seedS":"26715ac5390fc7f72a55a95fc4ea7ea4def939213a1ee511c571edfdadab420e","seedE":"cc1cc98b3286bb960d74a304d96233b1f1d7b7298ebb6b79157c88b83dfbf4ef","skRm":"8368aa6054c102a4c4ca085ba83bd2a6ae241aa2a5f0247af76b0b7756042d46","skSm":"e2eafeb1389d6496565c01b6a4a5ff3f2d69475f8f43118f64768d7ccd0909d8","skEm":"c7a95b0534b3596cdb772bde4c80146bbe33c211d85d3f117b92f7f80796ce46","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"1dc131613febf7dc74dbd3326949bc73c5982335e52282b169807bdc62926148","pkSm":"70f2270817fd42b0ed69b0680fdb2912560f4f0440b9be05d93d7c431e7d8d7c","pkEm":"8b7d2426569473b14243aaffbe2ec64ab0bb58945144335f8fa58261355f3503","enc":"8b7d2426569473b14243aaffbe2ec64ab0bb58945144335f8fa58261355f3503","shared_secret":"0e4a803a76f093f4fb7a82e840cac442b06a0b30cabb20ba59b5982a773f78b3","key_schedule_context":"03e623aa22a604f74ba1383391cf0c046f3461b30b65733a0a9e9043172f9317da873ee9cafb5415c4177a8661bc0f493c76414cd81fe7d6e8b390a6e3e6c93abe","secret":"b7535e2df30b527576f29063894af1e3611957014aaaabe969fd31e47ad8984e","key":"d02364c8e94e08e015e6061ea31eda2c8c0fd5b4973d26dca610af14510b0821","nonce":"a3cd47557401fdf1a349b243","exporter_secret":"0b0f201f5c76048f2fd58d0817583e89807e9d899271bf862b795389be021885","encryptions":[{"aad":"436f756e742d30","ciphertext":"ec5d9354593006285b097295886b22854742ee7f44f0d1dd4235b99bbceec5a95c626fc9983ecb1b2be8f10f6c","nonce":"a3cd47557401fdf1a349b243","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"91b640c5045448c8c6c5657aceeda12c82eb2749611895eacc5bc7c4c8122588e37636823382c7ccb879784817","nonce":"a3cd47557401fdf1a349b242","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"037ed304c37b14836ff38a92fb7ab5a0d797db37f379ee84b6f533b703bf48985c6ae374202d715920325c7cc5","nonce":"a3cd47557401fdf1a349b241","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9d2c7f7e20007d014aa38308de433e60abb4cfd8dead753ba33c14a6c96c873e5e6ba56a219cd655bb017dbc5c","nonce":"a3cd47557401fdf1a349b240","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8d970fcc5794969c4a35353adf89d6ea7ab4c62d8546ef1d1d6369ae6bb4a1c1620329e66f93066c7e377ae4ea","nonce":"a3cd47557401fdf1a349b247","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d67832b32dfb350c6a5272af809ff548bd1998b87662144112b7891966f3476b0600dc774a4d8de682cf84dd66","nonce":"a3cd47557401fdf1a349b246","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b23098fa0591b56e6a885326d69081eac13723d0d58067b4a66f47bb161f6d18b5b5d708b45dae3ff8ad20ad65","nonce":"a3cd47557401fdf1a349b245","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"091e27dcfa24dc5b26d8a29e1c206a6969354545ba8f793ab8a4a689a3822483184bccf68126541b09c3d68fff","nonce":"a3cd47557401fdf1a349b244","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"f1b42d5b3a4a3e0808d694d101b8b1f8e543511ba4e303fc71d4cf1e5a932817dc26412cbcc6e30947003c6c92","nonce":"a3cd47557401fdf1a349b24b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"d48648b2c75eb86ffb00341417826ca6a9565a5bfd8578dc5e9d663507eed7ff4aca583607c22e8b57f14a0624","nonce":"a3cd47557401fdf1a349b24a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5e2de257432a21533c1d28cbbc3fa41b6bc7d649ec26ca4b132e7652eb2f7fb8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0f233d0ca18809f3c9be821053e24a4d345f5b5a930238341db6fee81aaf0cb4"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"af7de682aa69736a773b872dfa8bb8293943a60686b8a55685ec1c303ebe4bd3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ae8b3011f3959dac604fa7256e3e4b99d26f2617d04b160f18b6e0db4d3b2194"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9e866bddb361fb288d4c4f10d1086ad23c3f8e16694457e93cc7a70c103d4a25"}]},{"mode":3,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"9a063358dc95c04f2bdf2a9a2911145c0632f49012829d92b2b5d9f398a9cbe3","seedS":"bc7c6a9ce74ba9e7fff0644da70899148f4775eaa1857478f0275af76cabb764","seedE":"ca35fe19e214033e34465a3bb125dfea8b483e55fb8163774413d95a4d9b1f0e","skRm":"50553ecb05c3ad2feab069f7e767ce7fccf8f99b5f555499b0bec4c88b8541de","skSm":"910500b78fee3ab807b1e08f664d2822be453e7a795e1d613487cf15266ef933","skEm":"753d98048ba28e8bdd6a22c3530dcc208cecb7386aeebca9b49cab1b91f46b6e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"b8a27c312fd14d866ceed49df7d847879d609d3ba074534f657dae1fb2ef7d3d","pkSm":"1b38fe7dc7c255ba5caf7116eb9fcaf3d63d60a1667042b6e19e769596ee3754","pkEm":"a6125996b3bb128bfa05392ffb39afd1e5b0031625e26c8c484e4aea0721ec39","enc":"a6125996b3bb128bfa05392ffb39afd1e5b0031625e26c8c484e4aea0721ec39","shared_secret":"0c9ac657691ef63b088f9777e84a9a8ccda766f0c9834ad318c0e49cc34fa43f","key_schedule_context":"03f5f7e2ba59c3ff0cff51f71c4204fcfc76c95f778b37ccdc6a83b3df36c33e7b6da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"502a94d9ee9cf5367beb65a97e7bfeae19a7cfbff25c6a4d2a9d1ece4d744b41","key":"968ebe599b1443cbfbd1914daa5bf667a52cf7a3339ecb209e8684f1f9c97d86","nonce":"a0bcc93f25f5b9e707f453e3","exporter_secret":"12fa76c18f0c16769262574bc6d49e9b22cac1d963e3e6b91031f61ef4277350","encryptions":[{"aad":"436f756e742d30","ciphertext":"1b049559f757b7c16d77bec8a8cf9c1cecc6becaa08aa513c791822b829345cf4477936df226e34804acb93b33","nonce":"a0bcc93f25f5b9e707f453e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"21311cd102acdb30e18669620623c54dc66eb0c5cc7fad1ac1a327062d89fc1fb6cd1228f8de48418d089a709d","nonce":"a0bcc93f25f5b9e707f453e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3e84e9e5c3d004a6d8cea022c8ae5a10bac7d75829a189b137db55e6a5c11974792e8a6b92cc208d615f424d45","nonce":"a0bcc93f25f5b9e707f453e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"a377781085d6292c5a91fce21c269dd5eb220be5bf2035de16530a98cc0e96ceff4c79b7cb50ede50c2f70bb20","nonce":"a0bcc93f25f5b9e707f453e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"595f2004a961c4762e418d33821f5c73335a681e75512134c5a5e3912d24bd089b074e018f042e6164bc72c5f5","nonce":"a0bcc93f25f5b9e707f453e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"4099f8c58c8fabd9af32abd2b9abec08d62b2fd88332f28ed804c64a9aa19a6f87a0950b7e4c5611b18110dff2","nonce":"a0bcc93f25f5b9e707f453e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e140cb63407363267cc24b31404281fca03280e3649c2da0f7e1fd4c900777bc5546bea0a3b2f1cf0040b4f2b3","nonce":"a0bcc93f25f5b9e707f453e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d7c3341b0ec12be40a56c83817f4d1f513c99851b4b26db3a4b848c0f1bb073124d3c4ce0a50b75eeefacc3fe4","nonce":"a0bcc93f25f5b9e707f453e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d06d49a68ebf2e9081c526d64648cab19707935222dcfab9eec9cea9a02175debaa8d4a06ad92eb999b437edb7","nonce":"a0bcc93f25f5b9e707f453eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"462fb838e0be597ad4b4db41c01ec74f5b5a5e981a1ca071c1042d3bd871bc50cc0dc848377fcad65628acb6c1","nonce":"a0bcc93f25f5b9e707f453ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"6c1ec2b099cd01a2f9b4f27df92bf6366fb964f6187b95126c00c9756521bfc2"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"7ba60f793b074bf90f9c3a5d910ef5aff0b87b44973047e5e10d98624f0f1238"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"df036ec1ceafd079400aad707110f98b69e461151b55a6506a21eb12e1b8a2f0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"83657e205ebe05e085beb9d22441df8eb4b3dfac384f65be7165bc31ac670dd2"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"92cd0de496d63d465b9e2e544b3de7b62fae045d12a207d88ef61060053fa475"}]},{"mode":0,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"da0002ddf1803c7d54c1fb10fd68eb76afa2aa4577352b9ce26462cf63a97f6f","seedE":"8c5a8a722a10c144a7577a73bbbbddb0284ea3436f9901a12c54eafd6eb5cb81","skRm":"62139576dcbf9878ccd56262d1b28dbea897821c03370d81971513cc74aea3ff","skEm":"5006a9a0f0138b9b5d577ed4a67c4f795aee8fc146ac63d7a4167765be3ad7dc","pkRm":"1ae26f65041b36ad69eb392c198bfd33df1c6ff17a910cb3e49db7506b6a4e7f","pkEm":"716281787b035b2fee90455d951fa70b3db6cc92f13bedfd758c3487994b7020","enc":"716281787b035b2fee90455d951fa70b3db6cc92f13bedfd758c3487994b7020","shared_secret":"f995f043efe63c77ac333fbe6007240fd01006bac1b075d2807845afae89a19f","key_schedule_context":"00cbe688614d6e54c26594f3c118e6cb1a01f6c6572a9112dc2687bd3e8b1e6ba06da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"b061e1b7e604df2fe8a4d32e25d33aeb5a0849e7b15dd212231adbf656259f8b","key":"1d5e71e2885ddadbcc479798cc65ea74d308f2a9e99c0cc7fe480adce66b5722","nonce":"8354a7fcfef97d4bbef6d24e","exporter_secret":"3ef38fcad3a0bc7fca8ba8ccea4a556db32320bca35140cb9ee6ec6dd801b602","encryptions":[{"aad":"436f756e742d30","ciphertext":"fa4632a400962c98143e58450e75d879365359afca81a5f5b5997c6555647ec302045a80c57d3e2c2abe7e1ced","nonce":"8354a7fcfef97d4bbef6d24e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"8313fcbf760714f5a93b6864820e48dcec3ddd476ad4408ff1c1a1f7bfb8cb8699fada4a9e59bf8086eb1c0635","nonce":"8354a7fcfef97d4bbef6d24f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"020f2856d95b85e1def9549bf327c484d327616f1e213045f117be4c287571ab983958f74766cbc6f8197c8d8d","nonce":"8354a7fcfef97d4bbef6d24c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"14d88332e147f24efd749dc5b37de8d9367fea2dca34f8117bd8d2093e08489fae56595eed6503e2a5997f66a2","nonce":"8354a7fcfef97d4bbef6d24d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5e688918b05e96631628eef3e74781caf41c4f25ee1ef52ca1d746ca31561392c8833a7232036bf8e839a4c8e0","nonce":"8354a7fcfef97d4bbef6d24a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3ad1659d8d0060428598bd13b790b0893d81ad11155ed618de7ac950c65a2d4a883a78b954946d58b2395a53db","nonce":"8354a7fcfef97d4bbef6d24b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"08eb46778b70677b32ead9ebe04f31a6dcc06eb19d41a79d9efc5af6e94a54a97558ce7a783b4037112a870a93","nonce":"8354a7fcfef97d4bbef6d248","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"0e3b0d39dfb10f63905b30b12bcbc87735dfbac2e66c3724a6803da266ea58e464df3638cb7605f801e8d8f1f5","nonce":"8354a7fcfef97d4bbef6d249","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c3f4cdbba72516de891a4b1b6d6ae1cc071a9adb2a17383182c6c5e9d34e38217d59711700f3b3503233225b1d","nonce":"8354a7fcfef97d4bbef6d246","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"7dddf70f5cd25cb840b70fe4355b5c9c77aaaf12fe158114df2718dc2ce9e148eac89966b1b68660135c8eca4b","nonce":"8354a7fcfef97d4bbef6d247","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"22bbe971392c685b55e13544cdaf976f36b89dc1dbe1296c2884971a5aa9e331"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5c0fa72053a2622d8999b726446db9ef743e725e2cb040afac2d83eae0d41981"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"72b0f9999fd37ac2b948a07dadd01132587501a5a9460d596c1f7383299a2442"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"73d2308ed5bdd63aacd236effa0db2d3a30742b6293a924d95a372e76d90486b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d4f8878dbc471935e86cdee08746e53837bbb4b6013003bebb0bc1cc3e074085"}]},{"mode":1,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2dc8b23353f632c2797ba4644fafb7363d958c1fce79162a215863951bd9a06c","seedE":"31c63611a67f55281f76477958758873f7a65113f3e1666ba5fce96e96852684","skRm":"a6ab4e1bb782d580d837843089d65ebe271a0ee9b5a951777cecf1293c58c150","skEm":"4bfdb62b95ae2a1f29f20ea49e24aa2673e0d240c6e967f668f55ed5dee996dc","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"c49b46ed73ecb7d3a6a3e44f54b8f00f9ab872b57dd79ded66d7231a14c64144","pkEm":"f4639297e3305b03d34dd5d86522ddc6ba11a608a0003670a30734823cdd3763","enc":"f4639297e3305b03d34dd5d86522ddc6ba11a608a0003670a30734823cdd3763","shared_secret":"95978c18311fc9e360209dd2cd10b2fcacf019ed25f7703cb2b4e4538558c13f","key_schedule_context":"01f5f7e2ba59c3ff0cff51f71c4204fcfc76c95f778b37ccdc6a83b3df36c33e7b6da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"2c25a1d6e3b889cc8ea031a96aa3357f16973f83ab1d444114e7bb4f56e4a639","key":"396c06a52b39d0930594aa2c6944561cc1741f638557a12bef1c1cad349157c9","nonce":"baa4ecf96b5d6d536d0d7210","exporter_secret":"96c88d4b561a2fc98cbafc9cb7d98895c8962ba5d9693da550cf7ed115d9753f","encryptions":[{"aad":"436f756e742d30","ciphertext":"f97ca72675b8199e8ffec65b4c200d901110b177b246f241b6f9716fb60b35b32a6d452675534b591e8141468a","nonce":"baa4ecf96b5d6d536d0d7210","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"57796e2b9dd0ddf807f1a7cb5884dfc50e61468c4fd69fa03963731e51674ca88fee94eeac3290734e1627ded6","nonce":"baa4ecf96b5d6d536d0d7211","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b514150af1057151687d0036a9b4a3ad50fb186253f839d8433622baa85719ed5d2532017a0ce7b9ca0007f276","nonce":"baa4ecf96b5d6d536d0d7212","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"50a645f0f9bddac7b1029dba61921d2cdc10258e6d67e4918000eab0d617fb04a655caeeab308eb159585ae07a","nonce":"baa4ecf96b5d6d536d0d7213","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6232e4a184dbff7361f9e4d6bfaaf97631225ee317e63cb09e8f74fc93efeedb6385d4f4cb2e30ffb82aea0e1f","nonce":"baa4ecf96b5d6d536d0d7214","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ab801465f2080c1b9a06b582a919b51fc289e1b5b14bbad0b09cd92a82d27a1de1b934fd809cde8f19ef988373","nonce":"baa4ecf96b5d6d536d0d7215","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"83248649e62ac67c3b9d5525b886c04960b00b02df2d34c91284e8ed537feba132b03d12b868822af1e583118d","nonce":"baa4ecf96b5d6d536d0d7216","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5ad03248b8e5270a654b090df5eb8955120d5cdc00f5dfb004942125cec1fbcbaef7d9fdef284bddc134018b74","nonce":"baa4ecf96b5d6d536d0d7217","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"56333a4ee1e5512cf2ffa1fd135fa54ba666f4388cf654fda9d7696ccfca1c51facda5a9bf80c9ac789026955a","nonce":"baa4ecf96b5d6d536d0d7218","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"e352a356575dcee382c8d2489bc45dc3a757979638e952dbac969eb092e9c616d8654e9dec8d1c0777e39478c3","nonce":"baa4ecf96b5d6d536d0d7219","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"735400cd9b9193daffe840f412074728ade6b1978e9ae27957aacd588dbd7c9e"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"cf4e351e1943d171ff2d88726f18160086ecbec52a8151dba8cf5ba0737a6097"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"8e23b44d4f23dd906d1c100580a670d171132c9786212c4ca2876a1541a84fae"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"56252a940ece53d4013eb619b444ee1d019a08eec427ded2b6dbf24be624a4a0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"fc6cdca9ce8ab062401478ffd16ee1c07e2b15d7c781d4227f07c6043d937fad"}]},{"mode":2,"kem_id":32,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"71237558db2b55c1a09f6695187d2af6e7d1dd97256cbb927bfc8a794476d07f","seedS":"4255c61730d15a7ed2018a023ad45274c1ab38ce621d4b597636e08e97619ef1","seedE":"c9c2d6f5a6f88e4c2bf5600817aa140fcb46dc682942bfca357c30fe2db17d6b","skRm":"05f54678e1c66bccf4c485cd297d080b4bfaf7cb049f876d80d9102f8ad06fb6","skSm":"18bbae7f265b459930a1e2773c6e3d447ba1bbdc8a59d91bbae159e87f131e8b","skEm":"91f86be15caa8696aea8e14c27c05a5139a87d049a3cfb97606989c7cd996335","pkRm":"c7667fb6e14617b12aa7bbc25cb916b360b324b0e08d10570533d258b8a87962","pkSm":"2c8f2577674c52ed6c8e6d3485afb7746a1edd02985b85f139fa51c617ea0070","pkEm":"f82cc290dd57c0c63f041ad62605d1ae0c5436243e18758b2b63658904ee6a09","enc":"f82cc290dd57c0c63f041ad62605d1ae0c5436243e18758b2b63658904ee6a09","shared_secret":"92d03a5e87f58fda583129e62f1cb55769df02a2453863b0a09f55e4bd5ff7be","key_schedule_context":"02cbe688614d6e54c26594f3c118e6cb1a01f6c6572a9112dc2687bd3e8b1e6ba06da3f8f29fa93987a2c185c1c17e719f7ae8eb4d564b80119e012c9c959b0ca1","secret":"4760feb6cc5ac6891ef2114490723c6ca2ad3352b2c52a60b390616d731f7767","key":"7638c7ade5856344fbc3a92600fa278dfff1c22b5857fe2c391e5bd248ac32ac","nonce":"1d14b2320b54376e6c43e791","exporter_secret":"0ea20eb846e3c26f1ee8b2ecf55c9abdfecc910387945528c73a5ff91bc4ef38","encryptions":[{"aad":"436f756e742d30","ciphertext":"30b013196168dcaf7a07047eda596f8c4f425abe6cfa269a7602b2a2b0bea958e2ded3c68c8c9e341ca4bf2e31","nonce":"1d14b2320b54376e6c43e791","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a259ce67a35c44ff9616f83cceadb2f0f542b208e9410686ece7e3eb92f08ca2e3fc95ccde64e849c96367952a","nonce":"1d14b2320b54376e6c43e790","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"4691caf957cf159e39a3f66cee9cd76e06ae3e7f97c577898423babfdc9800669d69356531dab839e0a491d502","nonce":"1d14b2320b54376e6c43e793","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"11acad0d8b2d5f2e82bdb87201f5b09df5f71c4341eb33a8a0c6f253bd122945b5706d40a11614ee128cae6131","nonce":"1d14b2320b54376e6c43e792","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"471ccbb6a81a3bfcc4c11dbeed62e95a7279fdab214f3b0cf22e998a89a2fd054fdf6326ea6a340b20cfafae20","nonce":"1d14b2320b54376e6c43e795","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9a51e37bc5c41261c6fcb9f8036611faffc4e39a2190b3c313c2ef62d8904a14a6ad81cd56d56e1ab99d5b3889","nonce":"1d14b2320b54376e6c43e794","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"822661572ff4fb84619b4b12c38640fc1b1ebad69fb97dd425ce0efa4fe08aa9090bc2297aad658ede2cc20a96","nonce":"1d14b2320b54376e6c43e797","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5ca6f9ced86a2f0fda6e1c2f0ac2a9ec3c9ce66c467fdb306a94cba91d9bf50e435f75416633bad5c97bedc730","nonce":"1d14b2320b54376e6c43e796","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"1128b6ad625f2617d471f1608aa45b21122b43dd212223a62445e301e3c4ef4ca199bb7bfcb7b20d509a08b14e","nonce":"1d14b2320b54376e6c43e799","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"3658f02680a2beea1e1e3502f4714521cbbb4578a13812d3aea17147e79b4ae062bd1f8790bf4f20607cfd4dfc","nonce":"1d14b2320b54376e6c43e798","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"b8902ea677882e79e60f0e65253918c21b346a97fc2767ad3f47e51d387b6400"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"aa92552439bd2ad01821df3dc0d554ec2ddfaa744df9e338db8a523fb24b4170"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"64c8473dd1d246edf1cca89cf90c37c38aaf0a80745f2d085a143179f77e444b"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"bfa826352fddf2fa033349f0a9fdc679f4df87af7d94723657119531ff4e81e3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ec90bb6309c5d1a206f8ed9789f08abf76469c0507edbfaa4586d4aee0d68c1b"}]},{"mode":3,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5e9430f75100e243779110bcd9166d0581dfd2f99db6e0080457e147295bf34d","seedS":"5d1d360a576b3ed866b57bf67e7bcc2280b28c050abb1b4c000f851ed2a48547","seedE":"5915b3eb940bdab74b2fb99d50d1fe978ee9d52063a68595db47f4cfb08d310e","skRm":"f7f65fbb3dccb4296f8e184f08e8cab0cc713367d7fe482ab0bc82f70426fc9a","skSm":"37185c6564c333864a81671f36f49dde8e0ede8ab44c0f9ef2a18d378d3ef737","skEm":"589a5406ccac263fc8d7b442a71835e14e90eb4fdc9e43e92070fc6b7cdfe404","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"e05a289a384add8f188bbc2c875b7e361e0475d099eb6d27cc49e88664fadf6d","pkSm":"1f47c8be014cabf904cea3a57ffb41c5faf20ed7aad5b538979a61e7f4f56b09","pkEm":"cb6469d6708a6e4a0d4f36b875a90849e230689cdd17be2bc724b4d12bc9cb29","enc":"cb6469d6708a6e4a0d4f36b875a90849e230689cdd17be2bc724b4d12bc9cb29","shared_secret":"facb471314510a2aae54c0a110018c89ab2f80ccf1a8298f7cf0269e13db94d4","key_schedule_context":"03cc094b22955765a9aa3dc3ff58b26c8c84758bed960d693e13d606cca12454c2dcc3cbad2443923c74ac8b066de4f99a57ceceb24859069eb6c7d69ae315def8762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"9a2b49cda253a428a2e9c41f6143eaf748539bc10f2e2c959155f9062b3caef9eeff54811abee4c48c04cad4bbbf3cf87949add9901ef20a7941a0850f43ae2a","key":"7b24b1064c176c7a7b63cc2bf5488765","nonce":"c20982814d1fec4d10678e67","exporter_secret":"04337c3fa35c7e4ff83a14cd5e78741f6f31db85bd80529ceab30e5c850b955510d8feee8c255334547ac14fb16bc7fc2270f4fe99548e4ed7abebc5253acc33","encryptions":[{"aad":"436f756e742d30","ciphertext":"5417bcde0bcf1e2aa3b3d497fb05096a76925a678db4afbc34861a895bf25fe3731b09b9fbb57907784cad077c","nonce":"c20982814d1fec4d10678e67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c046ce0b0edd3c3868a740626f9263641046e0364cbe0448b8abd3e7f2cd744670d6fadf112b3fad35e29740c3","nonce":"c20982814d1fec4d10678e66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7235ba9a22292c6f49d982fcf97790d403b68746db53150a7b1dd25b5a7187ef4103763ff61d5faae82222cf1e","nonce":"c20982814d1fec4d10678e65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"06f54ba39744b06d3947a03333427f807578415d4a4bcaf8b011b691f758a145ed137b843d50e7ad4eae44bc0c","nonce":"c20982814d1fec4d10678e64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b7c642834a9d609fe87fc7443659ab5fbdc8a4be018ae6d4166001095c9cb362bd713448a3e8b625ddd545e650","nonce":"c20982814d1fec4d10678e63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"098e528b7b818ea150eeea942ad6457ecdad711ba6a8f8ef4a1685f77c0de09ceeee2cad0ae341fba8c4342890","nonce":"c20982814d1fec4d10678e62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"dd3df7c7678904c08faf2cc95996834dcebc8832c039325f94e915e34a6249e46714de28cc22ce9d9a7c7b83b5","nonce":"c20982814d1fec4d10678e61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"498724f30c4e624f9dae0883e5ce979839d3b1aa5094dccbbcdcef13d687747e79d1808462c619bf635e7c77fa","nonce":"c20982814d1fec4d10678e60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"20af71cd8eedd815958bc62cdfab2bb612dd9fb8fe32bda58dc357939b73108180d4140278fcbe6633617d5c19","nonce":"c20982814d1fec4d10678e6f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4e07810b686425fe70974a481317d09d89b1d49dd0e164a12c44c7f15d92445b3dd30eb3ea3c166ecc49345b38","nonce":"c20982814d1fec4d10678e6e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"14877f91ade5df257d363a72709b108a728c225a4a3efa9c29d961dc931f2a0e"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"447583e788e3e0d6336d2b373775023ab55a2bf448a6df7fd6da8276c24da466"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"5815b192c95cd1614f4b0de668c63a50b409ad73d95b6eec674484f7044e4f36"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e33e1e5c7556debeda5da3c8de0dc486b3d712a82e7f3c2161f1f01fc037332f"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f5f9e2657aab8c09a2f7566a51b199c84761ad683f80bb371a2e4553475bd1cb"}]},{"mode":0,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"a786126e19a5e0e3c4e54b7882fb80fcbf19941cd4183c67d467c91af0927239","seedE":"4bdf1773e0b1f9baf8ae5b49682f5b419ac2f2dc399e2f81381d869416e30246","skRm":"f1d9c20bd7a7b88aea23c2d6f457b9d14c83a02f4bd52ed34760e3a70b4d1f5e","skEm":"7854915a6fbec01530902324cee60646536d189633d980f04dc03711b49defb2","pkRm":"cdb3ddcca2377569ab2888bc2c529ea8c16e55bb68f6925888a9212aad89fc19","pkEm":"d1976db4826912a68d1e1d562ba37b2a04faef62e71193c142d78b874bb24f78","enc":"d1976db4826912a68d1e1d562ba37b2a04faef62e71193c142d78b874bb24f78","shared_secret":"0b41304c37562993d694c0f8ca11800c028f56a993d0812bca623fbbfac185df","key_schedule_context":"006203383e1ae65f6b455b5858e95955a07ebf7b673d1ef93ae2bd3bd4cfd952978a62a7d140c519e4a4d9167aed8819b2034c29fce41574f10a87e0dac20767a4762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"333b5f32babf57b5d712101d00b41d6b46b19ba5ea365be46c7edac2f27d68eceefededd7e1d1e2cbf59dbc95e7f6a4fa7f8fc2d56cad77daf293a8281f6197b","key":"db2ed7a433455b2e89c7c8cea7693cf1","nonce":"9ad24c7c53bfb35a41210b0e","exporter_secret":"1cb1229f21d3599f4b8317e1a419fa3360a6ea9923245e29e934c30502d3ace6bedb9ebfb99909d1f6afcda7039d0517d52e3c6dbb303673714c089179df710f","encryptions":[{"aad":"436f756e742d30","ciphertext":"fbba8d4f66c1a5cf77a89eaf5201a538a7e6fc8a37b6bd96a29fc3cc7a51496ec92f46e6392dcec9eba772109f","nonce":"9ad24c7c53bfb35a41210b0e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"05326c3d17447ac21d1f17e720c93c7a9fc3f57c1bb682cafbd026e27def58b950aeab78cc17a070e992552436","nonce":"9ad24c7c53bfb35a41210b0f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"55958c515d297358af6ea2c952ec05513499ef9923c282dafa8b235e7bad03c130cc838c765a9e604c7aaa1c9f","nonce":"9ad24c7c53bfb35a41210b0c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"60dbbaecf091daabb228b43111979f1212dfef251017606443671a160419655f170f8ee2f23ad1754a56de4107","nonce":"9ad24c7c53bfb35a41210b0d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d316d2a28311d228c341a36fdee46028bb44b0a474a1059113440e970a3064cf9a72a56b24577c0f84341a125d","nonce":"9ad24c7c53bfb35a41210b0a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"48dc6be6fd66205fba951df5aa2b33d8e25641075f3cb2f4d165b909be1318bbc5f3450549f2e746f078478f7c","nonce":"9ad24c7c53bfb35a41210b0b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ea1e4f1154364ef394d9493e2d5e9e33e98f7e64f2a51d0f394851d3329e7aecf7a8dc6c24ca1b12420dd210df","nonce":"9ad24c7c53bfb35a41210b08","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c0bd46a29e1ac5f34755f87928e4fc1b8d1894d0e731fac3c706a33a7f2a15fed65566c345f0bfcdb708adcb1f","nonce":"9ad24c7c53bfb35a41210b09","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8a24e35391caf3359190ad6b25a4536bdca240273e65ffba76c978d8f2047c7a291e4caf8aac2af4b04ef8365d","nonce":"9ad24c7c53bfb35a41210b06","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"5b9b653e1fc92401823f8f0914763056d012b0a9830809d1ad68363ddf278ad9bf58f9e727a2ee9e4524d2f28a","nonce":"9ad24c7c53bfb35a41210b07","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"760cec56bab6780fb7ee51563e7b9e6145d38ffda10faa1053f65b1f74fc2733"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"25e50184173be00e1e07a8e6a8bbda8bf628909f7088e01b9b1c720ece0526fd"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fa4207bb0bff9af2183978736f84a703d23568b82675a964681383c3f11047eb"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fdbebeb2901e996284387bf0a7d4d26ee8eca9f7f5858bf98015d7595813bad3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"1538807322f02dbded405d10de3aafc4f6d365d9aefbef081d114dcedbe1cae2"}]},{"mode":1,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"43ecb1a6e630e12cb24332e2a08951ff7d94937d46f591381cba6f7a463d200b","seedE":"0cf1f0a982cf339261868e6548345d5e610054d55daf35fd41a166ffef95b8ad","skRm":"ac1f54ecf81f53a71c5be7f734346fffe084ba6f5966d2b3173df819145bd722","skEm":"20c9020273ac6193f27fb69af406cdab8154090c28aa2c7b870b92513d8805f4","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"7e8561e6b753c6992df8d89cc1e447bebd4e21fcd4d1dc868f6b2ea663ce7e18","pkEm":"7c35810fdc4009af7cb98dca0838ad32495c71c3003be650ed1ea0f6cd1ecc3c","enc":"7c35810fdc4009af7cb98dca0838ad32495c71c3003be650ed1ea0f6cd1ecc3c","shared_secret":"29755d2e5faab6748d601ec4c68c752ab23f04d6438c21ab14acdfab860cd4cd","key_schedule_context":"01cc094b22955765a9aa3dc3ff58b26c8c84758bed960d693e13d606cca12454c2dcc3cbad2443923c74ac8b066de4f99a57ceceb24859069eb6c7d69ae315def8762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"c809f7b5f7421deb5812b39a787aed6b52591115c427d3d53b578f419d0dbc3ded44f89a822f1caf9c2438d020caf2e78858c1f1825ff929d96acfdf317d17c1","key":"b11d0f2382a047a9b0ffec876c42b57b","nonce":"3414ed70345e48e38abc1414","exporter_secret":"2985eb1aa88c3425898e1ebca382890438b961d0f79edb76ab6a41fbb0e9516c4f41dea0b592e32aa9fdd8aecd69a7751e028b0b043d0fb642411847b44d5a07","encryptions":[{"aad":"436f756e742d30","ciphertext":"13d119d97709546435a5fbc99a39d9ac3f2ef459c9841305582282c435aab714af1df2f52bd07f196bfe9294f5","nonce":"3414ed70345e48e38abc1414","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e8f9743ee3eeb41cebade4ba2f0d758b679c560a53a720aeb88017bbd778537b02b3eca27bca61fa13898847ec","nonce":"3414ed70345e48e38abc1415","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7f0218fe141ffccc6229d096516a27cce109e1300f59a3500288cc1bb57c765b91b4a240075493d94abb9e4cf9","nonce":"3414ed70345e48e38abc1416","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"b893adce352a2b1c780f67475062a9eb827ba2fb2e7ec4ae21e27d6663e1a988d81390b50d99b4de2b451afce1","nonce":"3414ed70345e48e38abc1417","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8e733ddc1dd2b80ad6decf1b0ce08a28e9f5e644a7439621cd028ac9599c7657dac34173f7d5489e34be099462","nonce":"3414ed70345e48e38abc1410","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"4551173fc2233def235d52c738dc5095bc7abb6e3c3c7f8e58ae983bf68cb5b6fdfdf334b9bef4e1c5b11c2884","nonce":"3414ed70345e48e38abc1411","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"3384441833b623b36930d89a3e795fcc31e703d460ec48dc43be345794a2d73af9f4283494f23b904ba609197d","nonce":"3414ed70345e48e38abc1412","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ad5a5977bd3486ec319850a52fb8e7cba74d0e2c2ee261ec9a6b2bfb579f7a55f8bac5ab774c2bc28d86623ff7","nonce":"3414ed70345e48e38abc1413","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8d4466e0d99086ee1c0171a111a2c1ea5736ba9324eb20aa0d071dcd8c4581ea1dda96e25dd3f341c84c9c3529","nonce":"3414ed70345e48e38abc141c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"adf8ca449b303657e9d81bf9566d7562d9b28d9c63758bfa93586f5ba69a2fe2dca1dafd022831de39b6453c28","nonce":"3414ed70345e48e38abc141d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"899f63d5646d1116e63029c0c03a3a8b63b815af58a0e197c440e8075daa220d"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a2da1ff2773723418e07c63d39455d70be0865d6d0fb29e355eda599a62441da"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"1c361d5b9b14c6f75660c8c960b908394c0281895fbba9288730822511a24171"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b5258b7e39ea3a68177b50a5a492b6cb8083707a1756e5a7d5d4370556c856de"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"81ddfe54c7894f987e2945333a5ec809068890587759b6407feb1d6f1ca26e6e"}]},{"mode":2,"kem_id":32,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"820bf46d4ab7bebf7a02c40192ccd12787e7f9ed3dc7b8ae82d1c91d5d15ddb9","seedS":"52ad475488a9dc5a8f9d135b64e1d254db3d29b77774834df12cdd0942a24ebb","seedE":"5b2125ff49e1a1c36f8759c6558ce9c12dfeb1b5e241341fd3fdbe7330522640","skRm":"cb83517c3c0cc1dbfa0498b8f279789e193b17401e884cf06173d656f98820aa","skSm":"ad94176aac3504ee1d0f30ae7f38c21d6f3e5227a19cf24d1ebf7d69dc17dc1c","skEm":"0374f17011a923033eae1847e561e82c259889d35168261eae560c3764ba7f3d","pkRm":"fec1d8bfa85daa89319ddd2d46684f42fce1c0a25c4bfa07b54eb4e3dbdeba03","pkSm":"80417415eb586d2bd47412519393c1165b073f57086ba95e72c177766854710e","pkEm":"1f17c1c0b29d9c312fe8f71c0e29f5441998fdbd0b029a1d52a751d8b01b6b58","enc":"1f17c1c0b29d9c312fe8f71c0e29f5441998fdbd0b029a1d52a751d8b01b6b58","shared_secret":"fc4fedbcd0985bc84eaee1aa6b174e6273ac9f16c6048fdfb02faa9560199a0b","key_schedule_context":"026203383e1ae65f6b455b5858e95955a07ebf7b673d1ef93ae2bd3bd4cfd952978a62a7d140c519e4a4d9167aed8819b2034c29fce41574f10a87e0dac20767a4762135448ab48be035e789e67e0affbee59d601f0251c30987f11cfc5ac445462e5ce28b7932d547576975e27519875cc5504c30c151aa97ee3dc1398788d52a","secret":"b182e6f939f95a4e97cd8a239da503e39e614c911a1142c6b79275085e22d80cc4c9113b3bf9379f8930805aaff187652b2cda69d98de2340ded32a90b244efe","key":"26321329cf054a5576d37b0a0c9fde45","nonce":"003ec10fde32244c5dce2b8d","exporter_secret":"9c5125374a4d074afa1fb2f8d875ebae2b2bb4436cee8dc57be6fe64c493492c46c6c04ca58c1b94f1126859c7459ac8fd08c8945219987fd02fa8fd14027bf6","encryptions":[{"aad":"436f756e742d30","ciphertext":"837827a4dc33b7a23ab23ddb5f0ed898c5f744609ec9bde56f6b07bf0373b6585c9b04df17203595a4a683bb47","nonce":"003ec10fde32244c5dce2b8d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"20a40e718f89db3fccbe3fef32b7ceee4419e1aa6be0844dd81914f44658d9b39efe412debaff411a186a45824","nonce":"003ec10fde32244c5dce2b8c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1bd2f1d9195420adfa58e7d06aa900354006388e51bf1d065e2f891cb7175b00a297d4eba78a584589916e806b","nonce":"003ec10fde32244c5dce2b8f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2e56cabafa81dcd7c5e58e2060c98fa8e3543e1c76065abd390a72c6d3a39745b49d23a3090e360783d3600e37","nonce":"003ec10fde32244c5dce2b8e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"fe3390926d7896140c946723f50dd12980dc5097990f67e050b5a99d10b6947449f6953871234db7a2afcafe23","nonce":"003ec10fde32244c5dce2b89","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f9d9374b9287be63f8daa4404bb150f162ccf97afd74c7016bf03085f9f4b9511cc2e1cc48618553474c7c7767","nonce":"003ec10fde32244c5dce2b88","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ff60b8b544531a5cdf5dbd0a79a76a50f3369f327b05d5c2145bf24567a475bcaf2e167495685c55454d56b98c","nonce":"003ec10fde32244c5dce2b8b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"8df1f8d039429ef3b6e1e27b9bd59d609c3d0e7515a88c3ca8446ef3350c2f32a8cb0e78ee0b42388ad957537f","nonce":"003ec10fde32244c5dce2b8a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"0a506355098c5f15c8f46212eb8b3df09525207b5d32e180848f9f77022bf7d58bbae86830fc45e658d6c6f527","nonce":"003ec10fde32244c5dce2b85","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a3f4cec2871eae9c16d3093442d065e3314fc78e603e7730cdcbff81e92b8dc0789a5a1290dc9cfc5c881ec894","nonce":"003ec10fde32244c5dce2b84","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"0ec37494f7b2544c1f448226710ee12be3b12c54cae4168e4617fed253b08095"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"77c29b8ed6700ca670a6db3af32bfe1a9c779c695b36e7359df169aefc68ec64"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a91be9089d657c587a7ad01cb7809760d8f8b7dc91d6d36e56f65ddffa6d62e6"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"a840afe2012451a8115f49894473d23124de4341fbd4212a6127fa1db05278db"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0af4ca04a20107f7398a6aa40e2674e3fce58618837b89914fa6e1b8980390b8"}]},{"mode":0,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"e783b7ad03555657c49ba93b11e2b5ea13fc69b9548b59fe2389f9d879531efa","seedE":"d1497d0f8d8ec8db2b4774e8367f54be80f4c0dc0e9beef474c35e8e3fe8d762","skRm":"6c84707a1b8a46e356795ce20e2f556da0f518eb29477ceb2b5dcfdd68989212","skEm":"64ed0bb5e6b71e91eaf9fbf5196f422f8430f0d79b91844b892b59c25086c628","pkRm":"bc66fc66209686476b3c9b2e7489a3bdb9835df1a888eb5022c417d0ca1fdf7f","pkEm":"ba09ff75d7e2a7a2fa9d698a0706a4e1bad0d5615c55c69628aa88b3fc270a6d","enc":"ba09ff75d7e2a7a2fa9d698a0706a4e1bad0d5615c55c69628aa88b3fc270a6d","shared_secret":"9defe9cf50fffc4242ba343f05d6a071fe3ace1c9d9093eb76265f51609f2151","key_schedule_context":"0073f945acda7f7a9a792b4a2ea025189ef12f6b88a87b421600137423872748fd73ecbafd48f4c15c1959360588c12918ef3b7804b01b088b9c7329c283be06d822b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"561142644e4ba9117267514b04f1ba228da1ee10b20b12cf8ab44fddef9431e1ad055103f2559f32fbe8a2cc61d570648e3c697b7a67c26ed20b5e1f010b224d","key":"886c8089975343cb4bd736c5f31ee45d3289133034723e9aaa0eea6d0054b775","nonce":"f70c49b42ede03de377b48e1","exporter_secret":"1b06858fe246cc0260d9fc0275c6b741946a87d3ffafdbe8d0ce6776fb0387bcf92fb07bb305df7a7ce872b6d6728f9eff6cafc9ae0a330887f17e098cb1cb8f","encryptions":[{"aad":"436f756e742d30","ciphertext":"65e2512b6bea0738746d1c9b5a3bc2149c5c7fd43ade420b4c55f884264a2c606dee89aeafa6a66e55213a0dec","nonce":"f70c49b42ede03de377b48e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"32fa3a5253b53a802a493f9a2c4857775b641a16989c643ce2b2f4c01e49e39b72e961c9a3ed4b648fcde75a11","nonce":"f70c49b42ede03de377b48e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0e537e6ccff81b53299c440e9045e1374944f9b60c175903037ad7d551e61ee9915b78035c297df7c6134c3ec6","nonce":"f70c49b42ede03de377b48e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"b8c65d5c4bd920821f82c2499da8286f74998bcd4ae102e66987bfc7580094612fa0c560ad37784bda9298fc1e","nonce":"f70c49b42ede03de377b48e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c8f1681adebac7f109b5cf5b0c7e85fbaa190d3d4a9d16ada8e08763feed8ef2fcb2bb85081c1f652fd45d2a29","nonce":"f70c49b42ede03de377b48e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"8240b9bce84dc4b202d61e1687b37d746e49b233820d3493ac2a5c97cb3a2f70839fb6f7c4b6eaa80e21e80d76","nonce":"f70c49b42ede03de377b48e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"42541a69b5953fd02ea5a2f5129447425572c99339a3228016f49153def718e1315292ce7d2c8b3a7f74567bdf","nonce":"f70c49b42ede03de377b48e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d2316427e8c48f92f70acc180818e642aba734dd481dd889d47a08fa9a9cb67aa39ed90faad8bda2151a745391","nonce":"f70c49b42ede03de377b48e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"dbdbb33329d44fb93c437343af27791b2817c1ec392f6771ea598e60e73d06b2714978034f2b5270e80f0945fb","nonce":"f70c49b42ede03de377b48e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"f8c7f2a437bbcc472cba3aa7928414e4b4cf9867e0b12be1b4de0f8a9177a19d4c2f4fcb7f1f27cad391d7f3a2","nonce":"f70c49b42ede03de377b48e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"87c135b0f1670f076865bd364a21612ef0afa0cb70daceea3ba9a01b0007a521"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"f25e4fd51a25cc972a405638273d2a7b7ee84807633121b2611da1bdf15a2f46"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"83e790e3c6dc91401e5fd3070f31b3a8886ad26d177b0dd2c4e38e1530154bbd"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3d4f5cb496ace65fdd21b82568ae0e528526df3f10760c55784a2c9a1f46bc37"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5c49cd3ebcb956aeb7e41c9a0f2d4b4c9501f66cc544d8d7fa62ce96d2938857"}]},{"mode":1,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0d03b1625cd52b651ce738cbb7053a39ccce696a2783a03e3e9db11cb0a68265","seedE":"10a5f0275769776ea7f121bb9fd7b12f062b8bc14bfaa502bfbcc937cbbd163f","skRm":"939a0b48510924ccf6449c0eaaa1069bb41ab9cf54d090e6c6eb9aaab6051d69","skEm":"d3668380f7053086047e1f8a66e0e32c45c1086002b6a67dc9a942058a655073","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4af18720a608d13ce17268aa1721876e96ec4173a40788ddfd60c886b4c08605","pkEm":"2ed53926385da5d41c76e75a636cd795fea5200d0e7ef6affd4b741a1196be37","enc":"2ed53926385da5d41c76e75a636cd795fea5200d0e7ef6affd4b741a1196be37","shared_secret":"24f1483ed8d4abe6c92a5c5e5e61e28e9314a71dacf646c6bbb9cff1bcaf0918","key_schedule_context":"01dd48bfdb63d00c44a4845d06c258b5c5b4ccdf948bc3d346a3dde3bcf3b46db6064faa4d81649134adeab3c4027df3962ff1c6fea27fc18fbc63e9d4bf262b3c22b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"b99a46823fbdd9b6c3da2adb68d2030cfbf85d3ab7453d91b485dc40799ac1e4eb17a06519f46597b87d211f70008ad9584e69a1e89704be0e20a4f2dcfbef17","key":"36cfcebe83218f402cd1ac2961c6e27d0201affee517fc13360d79bf4d82b3ad","nonce":"590c8c1ac13132d2068c994d","exporter_secret":"b43d818759306b815ceb2d8258414cceb0add065b455d0e95c5c40635d78e9e3ba5ef66f23c237a4f1ee08a709365291577e83d9f620f41a0e94754b6c61fadc","encryptions":[{"aad":"436f756e742d30","ciphertext":"b5039652103f36bdcf1380b947ed8b6dc3413b98cff2c6451aff5fabee7234ace274918eb665f6d08850a70093","nonce":"590c8c1ac13132d2068c994d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"f1a1beb03a0c2d3f756d992cba6712247e24561e8407aef299285cefc337beaf249b8b92325a6718feffb1cfad","nonce":"590c8c1ac13132d2068c994c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0f5f58f918a19f55efc146bf3ecd5c72bb0c00893c02ca56cf291904e1e1f8f6d0768f1cfed9d64d3f7f35d912","nonce":"590c8c1ac13132d2068c994f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"14177f71f6716d128baaff214e360bb9b8dc0ddb34ba7bcb8d0dcb01c548d42d3c43875ec8ff083acba591ca24","nonce":"590c8c1ac13132d2068c994e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"f8ee21f3af210dacb7aea148b444a98e643f161040db1350429c366a667bbc4b0cb6dbf047c2ba9f86a8ecf425","nonce":"590c8c1ac13132d2068c9949","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9f5ffc686ca660de6101a9dbf412c61de6fc574954f72f7d2c652c0ab61e8597170ec713b5314e41f0601fbf49","nonce":"590c8c1ac13132d2068c9948","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"3f415ff7bc48fbdb69babce3045049ae2bc2a6983ddaf08cc9b3368362f7918bb73a4872c37fed3e3d808a9c1e","nonce":"590c8c1ac13132d2068c994b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"bd2199064b596d3ef9a77fa8a5db93f1510bf996e320da92635e435c4b59120702c344825fc012393dcbddc05e","nonce":"590c8c1ac13132d2068c994a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"789faf060328cb1d359a7a30a3ce9d303612ef9c9da56c78fee82334953d425bb1613e757b2d7ab1aafd5be927","nonce":"590c8c1ac13132d2068c9945","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ac41c4a676448ef3f39a471f588d8576bb30817055ce8ac4404b61a4fdbb71adbababd15117cec7371aac83b0e","nonce":"590c8c1ac13132d2068c9944","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"e98921e4c437992d7ac035d74dfae232ef41227e2f27e4e4d801b4bd8934a5b6"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1269029586ff64d8bde114359411f61c22211e8725a2b86ea145b8b9151c3915"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b8f393d7cea5934e16f4de8ef9a8912104b741ecd464d4c84886f7eef28cc301"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"eb5c8739d172a30b48235316e13a12fa8abd05d72cc5c330fd3ab3de3371ddc4"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0b15c1a0dccac801a3078a8a01145c940ade7d9993111bf614ac69d073913a6f"}]},{"mode":2,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2a7b45d6305a056fcce0d67b79dafbb432d71393d9b88e922e653beaf8f3e946","seedS":"182775b06c6f01c1982b399bd82a091f13f78d38b5d77bd89d3137435012b7da","seedE":"017d68ccefbcab067d91e07bf5d1e350259a1f66d6ee2283cf0a1bd2a35a461d","skRm":"4d2b363c2a0687c9d47891ab5b6bec2099225a8925bceab2c3b5fc72ed309f5d","skSm":"0400f73d1caea31392020ecdcfeb20ac62ae6307f01483c31d27684e222cbe50","skEm":"e33e3e7527db822323f2c775b9870703fdb7bc5f656ca5bfe8b98b153816df3c","pkRm":"c257e08a244254f8f5ee3ceed0bb3c6910e46f148be79819c98b886311084042","pkSm":"48dc53e8fdb2e3906672aafef929187cad8f2a4c5da18c97a67f9fd9c7aa7b69","pkEm":"9956046c4dc3e938a4064b0f86ec3b8f326aed97c82e0f92a42328388f51727c","enc":"9956046c4dc3e938a4064b0f86ec3b8f326aed97c82e0f92a42328388f51727c","shared_secret":"a020bc7ea7c31373cd178e88d1576865d405c8f8bc7f7a242b02306af17affee","key_schedule_context":"0273f945acda7f7a9a792b4a2ea025189ef12f6b88a87b421600137423872748fd73ecbafd48f4c15c1959360588c12918ef3b7804b01b088b9c7329c283be06d822b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"e8bce0628aad315927acfe34c304c74ee9ae48b0c751b1e65036345b85ba4c7200fe241f373d4522d256709b88f806c54c30da02c65b9498e64a9f47d182d9db","key":"12962c25138767a8a57a0bdaa1a2e7bfdf381df782c4c8c38756f69ea706a914","nonce":"9b65f79afdd17fece149388d","exporter_secret":"077cc63b553e1537d689f589867076dd7d601889e5960e40ba7ea2751374a46b7fa01cf24a042340c8386160464921c136559c176f7853da6da4c9adf7d90afc","encryptions":[{"aad":"436f756e742d30","ciphertext":"69c49d792bd7a208614a02efbd94744aaefe027fb53020008d8de9ad7645f5e5b6c9b7afd168e897aa5deacb2d","nonce":"9b65f79afdd17fece149388d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"57959be8cd78ed36953237dae72071217b049b53f0f028b5f59afeb99b034b71d463d8cad18ffb6b94b9e2f8ba","nonce":"9b65f79afdd17fece149388c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"6ccf7df54580a9d4927ea991441b9f0d01bb799de66de783ab74fa156b538184f0ffb5969c678f1cf393cba716","nonce":"9b65f79afdd17fece149388f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2e8c246a49e206c32efe36f10b3cffb5b12e6f42d62607a874ffabe4cbd91d5a7a5c0fd535646a3085d200d935","nonce":"9b65f79afdd17fece149388e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8220b6d725cbc86c14fec128fb1a9b06ca183b0f8f5b65dd375bf56f30b705ac56b2203c6fea7d7e3a0323492e","nonce":"9b65f79afdd17fece1493889","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"35499f5d6769dee34e370fe5334668b8dfe0cba924b447643bfef607525cc8d55f1c2b1f80f93eb5fb5dd7f093","nonce":"9b65f79afdd17fece1493888","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b497af4782f9af1992f5b8e1720514aaa68339893e901fde50e173f6316aff5ce58185a4065603196aabfdde58","nonce":"9b65f79afdd17fece149388b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"180ab688b58578cbffa5db7c7288efbf193a5fcd65050a7bded835a52a9189cbad22a16f33c91a51c972db4eaf","nonce":"9b65f79afdd17fece149388a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"43f7c06777d41a76b00900c65502ef596a89f670852bfe555da1cf93f156a27f1a7b84721388968a5673aff2e2","nonce":"9b65f79afdd17fece1493885","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c697efac7a5c92c9aedcf7f8a951a2e82aab4dcb93c5eca879fc23ef11b9528b90307eaf5ccff6fd6dc98b0574","nonce":"9b65f79afdd17fece1493884","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"2676176972f00ac0dd9c8f81a64afa7f9677a19b978826c7778940c4570fe0fd"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b5b3c0422bdcb07c9da4e6a18f2d19deabd48a7ff662bdf6b636e1bab916fe28"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"27fc2f21aea82ebb1e237243524586cb6031aa1ab8d1f803f127f5ca92dff8a0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8c7896b50d4c015b37a7b843331d1c44410849e0cc49d99833d4f10113beead0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"4b29cd3e75e6bf4a1bed920791fad6bc5fad920bfe30f6154759f21cbffeeddc"}]},{"mode":3,"kem_id":32,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"8b024d42dd06e8d20eb7949813edbe7399dadfda6c081f97f0eb0e99cf290161","seedS":"4dc5131e785d369fec29b6b6612a1054c7536aff240bd2a99df2bda6bf75193a","seedE":"c03da7722e4622a50def5894f714e1cb9b7823704f0ef7f234713376c45b6131","skRm":"82b9abb9a4ea102ab1664768a98f3eed874eea4f764f64489690ee4ac6102bc9","skSm":"a91d0b1ace8465586869a38cd285f10c3a50e535e2ab675ef491a551e8490898","skEm":"472dc1deebdc2af356ffdea748eac44c4db8855cbef574301752b590484278b6","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4e5ec5dda6ae02ee6f908f80c7da5bc39c01edfe7152af0da8d175eafcc8ed60","pkSm":"8ed496ebac8da6abe752bb166b4c4388f8e1b15d06379e5d496ab5b14ce3b225","pkEm":"3d47d52b21a5c8878bfc123e62aa76ce5df05b1e0cd74762ae9ccd98414a7325","enc":"3d47d52b21a5c8878bfc123e62aa76ce5df05b1e0cd74762ae9ccd98414a7325","shared_secret":"588898e474468b1e63cb7943ec41835ad8cf89d529c9a914498472065f2ecd82","key_schedule_context":"03dd48bfdb63d00c44a4845d06c258b5c5b4ccdf948bc3d346a3dde3bcf3b46db6064faa4d81649134adeab3c4027df3962ff1c6fea27fc18fbc63e9d4bf262b3c22b8255fb5743844a872c00dab0350f4b3c350db3842f9b3f8951a62ee666551a290ffb1a799100f0b56291f800042cad3fd852fcb2a723ebe437daa77ed156b","secret":"9afad4013cfdf6f4454e7fee7d49f3e7b9b9ad1ba69cd610f9f88cf38e44a61c7482505efd0970c8e561a56bfa7cbf63f720b642991cd626d3c3fe91a9416b72","key":"347612500663d0be23c6cf1473be28df3169b2e83b8783971320bc5d117e399d","nonce":"fe9c8f48b28b6b6045fdfda6","exporter_secret":"88b41d7b53c11329730fe9e80ca27bd1ffafc59c79ff3d10a477cb2be3b5953a6176412f7f9099d50098169fd7ac9ba183a0d533d5857e2fd9c88d891b6ec42a","encryptions":[{"aad":"436f756e742d30","ciphertext":"c485075b232e7e872df61a07561d5931262e0fe00cea7393bb7a75280f703a1e02b8123a4faadb3fe919798ff3","nonce":"fe9c8f48b28b6b6045fdfda6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c4be24a9ecdbb9a5fa56b519c74f8b5572d367dd4015ab127073c0afadce2db2ea47f9150f52e39fdb2007a722","nonce":"fe9c8f48b28b6b6045fdfda7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"863005c2127cea10ae1c821d04f96cf1e723ab5b37c9f03631d9a45cb6afbe88849706d9b63a93fae1d45eee76","nonce":"fe9c8f48b28b6b6045fdfda4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1ede5bfc3ecaac5ce4e64166ec288dcf45172679f32f581d9fb6ecb312ae2598ff42d1e6f908196f621eaf02c7","nonce":"fe9c8f48b28b6b6045fdfda5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2dd3bfbaec2f89735b051eb9be71884daa531fb5ab7a130eabe54b73eba56f05c68f1d626ed529e8c8f07d5ceb","nonce":"fe9c8f48b28b6b6045fdfda2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"c7b9530761d08c3efc9a3948bca1f638cec20e03dfc0813eb09b9885f83481aee39294dfe5eb58cc8e4bee3f72","nonce":"fe9c8f48b28b6b6045fdfda3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"20422f75ab22af1e845643beb764c1d5e69d534cd933d284a31f893f7a08eb8f6eee96746290520596aeff5f0f","nonce":"fe9c8f48b28b6b6045fdfda0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7a9fc21915f99f90b16351f6ed394241421a3c439f1c66e41a21eea5709146a33c12b9ed58b34369dfcc5767ee","nonce":"fe9c8f48b28b6b6045fdfda1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ddd70f33980774ff79113fa443634bdcbb70751d10d14c884a8fc9dfed97db86eb4262dfef14097dfde261fda9","nonce":"fe9c8f48b28b6b6045fdfdae","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1700189f793f3db0ee7951a5320efee797b38c1d08efa4dcad35969f34156a5b29e219270c784abdbad825bd1c","nonce":"fe9c8f48b28b6b6045fdfdaf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5d741b5b622b3466e89505ceb55e17b66d49866de3e7417d5e6dab1b9c76fb59"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"238d2201bd7466e80d9b6cb2717ec54514c71561da26a87d27deba5779a8ca81"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"2ff78266464d700f81c3eb8be5bc70abfefddbd6d365f82358d2e4e9854dba54"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"71a3a5250fb38dd3a2c6d136740945336827eb0b1b2945025285da6817e04a40"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e2809534e90e79b5ca8874bd57ef01b2c27d13cc6572414015812174be909560"}]},{"mode":0,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"bd17a99be261cea263f97d5ed248596078f0f2c5b31f78745c595707592f238f","seedE":"c465e324a0355b2e4b3a5f2abdfaca60817f087bf7ed8205708b4f88a9e3355c","skRm":"80a54bfb48d9a6680a355127ad3e9ea3b8725b47f7f5f2022b79a43feb231f84","skEm":"06a1b9d7915cd1fe501de50d1d2ec1712662f4179b18a672f1622ae807ff2543","pkRm":"cbba177f103979838f8d46577662c399dabe9732cc79f9081e9d481dc533807c","pkEm":"7c1f8d203bcea456ea16ba3e72f1f1d8018cca78751c5b49742df6ae1462640d","enc":"7c1f8d203bcea456ea16ba3e72f1f1d8018cca78751c5b49742df6ae1462640d","shared_secret":"b8d4cde6e1d7fe1f25e09462eafa2dcaf252f4f7c5e0a1f1b0e5dfc3c96b50e0","key_schedule_context":"0087c58ee510f46e12e7e873ae6d81d7ebfdda8bbba76771357f98760168bdfd345464e9f7a12aebfacbc09b2acf5a3496e805c0642bd323b8547bae228b71ddc9314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"32a4bd541c869d8cc8b7cdd97e9c09931a76a495026bfc0fd344223e071b323245c60489e5452b08bae1b5dada06ff5e7d3e0e35d32aa5f992259caa8f38fe6c","key":"2053a36e42b28ffe2c12abbf8fead182647cfa0f975054efea3d3d5f16699d47","nonce":"d6af23bee6e537d5b2ebe361","exporter_secret":"65e9541a809e8d17bfe8ca3158111a6912e39b6965b118663cd542e5f2a84c226618196967da0209c3622785f9c22b645a984475d04e57b6ba03766abff2dab2","encryptions":[{"aad":"436f756e742d30","ciphertext":"9e59f241a345e708d96e786986c789b6da9a134cd4e38dde9a8acce177b97052ae6fcc3bf378e3535f9739c678","nonce":"d6af23bee6e537d5b2ebe361","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2f9b8e92eae0a795fcb9bf1c180e02625f15f76fa95894e5cd21f3b275f330eca957998f0385c30c34e99fb377","nonce":"d6af23bee6e537d5b2ebe360","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"791394c37b2c7910186f885ceb4badba54a3f44054a13475e31e343f476fc214dced7b7dcf349ca3fd2bc49729","nonce":"d6af23bee6e537d5b2ebe363","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"14ea622ea1fab744a5a5c3b875727151741854fb0d948d14d685a8df603cd090bb3264f9a474b6c19647771211","nonce":"d6af23bee6e537d5b2ebe362","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"59b3299e76fcb0c9ed1180c995f34b3a0161fcf9cb055b53e8d548f0bcc001dc79f30619c892e738aeef6c778d","nonce":"d6af23bee6e537d5b2ebe365","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"550f977d3f9ca10a1cc30a73b2e858cdf7a13798d85a1c4c904c908f4612acc6d2cbbaf073a127e41b9816dcc7","nonce":"d6af23bee6e537d5b2ebe364","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"7cb1d8890ad19aa43f84ad86e1d09cc2d14a102e838c19dd55977a1f3d07791ca5f7797671eb66db5099f53917","nonce":"d6af23bee6e537d5b2ebe367","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d5d9d138cd42161eab8800e71a2e06bb895c1ef7538bb0337b638438e51d824a5e8bd1515607c0b985058ec19b","nonce":"d6af23bee6e537d5b2ebe366","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5f1b9078dabaf0c16821256a0591f1287c42cc22d002d38fbaeb64d77a0943c2f092615185e716eb28681a3a0d","nonce":"d6af23bee6e537d5b2ebe369","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"575e3da798641f1e965d6e18384cac54d9190e5c663959de71b071b1e244763bafa959ed512a0e266c6b1afcc1","nonce":"d6af23bee6e537d5b2ebe368","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5f0a458aca1ea6118fa1d0883a99b5bb626aa71b55de2e73436f53e93b8073a7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"c5aff969431e6d731c9b26fb8e4377b4e859430345af77d4374dd71461e772da"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0c40105c9bc2e407d9d4a64dfb1392e46d393e78747701c5daaaa530878e001c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d440fbf13b9e3956c7d6772166e07305a8f5a396e2bd361b5b9fbae9b0b04909"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"1474f8e9dac70e76041b4bb365f1fc4e1e2509f43c188b5d15b8d89113c197f7"}]},{"mode":1,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"c30e9658c3d803a6422b892ce6df64978144cf7d6a992da307a326bde6694c34","seedE":"e1e85070d88e22ddb3e6058a803c5e18f3db025589d30610a196fd1a67e527f7","skRm":"c9221f98c17117ab4216e062481934ad21a12c8ba833a0611ca1910fac031563","skEm":"9e38eaa97787575e564949bd84845965e910ae90a17bf841f68a4c791385afd3","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4ca2dcf3f5fa2b8b782536f695b3279f03569857a88e90075d5e4a67e4c4a44d","pkEm":"886c15a9d1c3609a3f3f6be3b5d1b60817f6a557e2b7344456dbc8ae49f5e93c","enc":"886c15a9d1c3609a3f3f6be3b5d1b60817f6a557e2b7344456dbc8ae49f5e93c","shared_secret":"222e3ad153c4fbc5d5044711ad16e5929aab1f072cfce7ecfac23b31b90167b1","key_schedule_context":"0143c397935cce815be04393774bc6bb839a62e7ccfe08c622716b273836d78abbac643b1a9ed26e5dd5ca7c1474c98fbfc32c0cf2c784561ce67d4bbed5cd2c98314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"0ebc65a14a17dc5e3397c3207b4b6943174e36718e1a63bb7c391c989ceb5c781fbc24641c209bdef2550be5d6c26bd5c8cce772ad65947d62549695b194bece","key":"e9d8a65ebf6384c2e98619a700a3ed4c80b1f4a5d0fe36ac32d19afac15a749e","nonce":"b11eb847d5050f3299c83832","exporter_secret":"c949d252eddb9d52ca395e8f4f6cb1d10a00c36cae2477de74bf46285edfc3144176d3258234e26f3ee1a93fb389b9ccd7036be33ad32acf0259d327e73e18a0","encryptions":[{"aad":"436f756e742d30","ciphertext":"2f3eba789b7706b85fd2fcadf189f640a726160a7a0ef22b6483aaf69210c02d4c22113740235783dbd70ca1b7","nonce":"b11eb847d5050f3299c83832","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"ea76c297d6440fcc6e753980678adf65389171c591cd2ce0cc6de56c4560e6642ca5df5d910b3006b653372657","nonce":"b11eb847d5050f3299c83833","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7bed7b81628f1892518ced3b292cdf8e17dd0fa270600177a5c122204bfc381bc01f9bd5de77c4a568055ad19c","nonce":"b11eb847d5050f3299c83830","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"38ad518591bbb6bbbe114e08e76a90b0040ef5571dbeb9a4ca778b72eba6e729c75efaf476e1dc69d2a95ba304","nonce":"b11eb847d5050f3299c83831","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a38f5cf41d1ad3802ec4043067e4ff1aff3c557d1961cb76f6fbecea500f45ce780c27cc2894057093298d782e","nonce":"b11eb847d5050f3299c83836","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0844adf506c653ff4cb9eaa595b4a6382055d53bfe4490a323d3ed0369b33a206f6fbed3a2c2409a646edcce70","nonce":"b11eb847d5050f3299c83837","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"747700aa0de178a38e2ac8ee358e0d79d2b6026a8e86e215312d359933da08bcbb443e9e2280932e2e37ca0c7d","nonce":"b11eb847d5050f3299c83834","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"31b7a490d05bd9e31b6ddc82b2eef9d6500675273e5c215c2f3fd4a28f04b73c752a7b7f89c2220cc5d26d3ef4","nonce":"b11eb847d5050f3299c83835","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"b57d6cb945a21064c1dd0a293ae28d315e7160764e20d48f50ba9be6d3d530cd064a851f7f9fd16f61fd8afef0","nonce":"b11eb847d5050f3299c8383a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1bb75c2eb81165d8c95d893c9dc1425d2de1628696c488d6ff0213674a6bdba09a3ad6ef506ca339d64f02e46e","nonce":"b11eb847d5050f3299c8383b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bf8d87036ace4835ee917a504016601ce7b5add0b8d72aa64ea493ea241786f4"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"9583f302506aabded442f4a3c4cb976682fed99c4bcbdf5ad41c2f00d3fbc27a"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fa169c1e9ca8582381a72b5067da174995500198484520d60d22bf9bb4c34ead"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"56fbba55aef923240daf63ebd30508e891cdffbe0bfe03306727320d6dfa29e6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"eb30f91427038c6e3716310c0ffc431ca9ea2b10c2f264f7aee82f86f817b8e2"}]},{"mode":2,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"363f0085e3c914edd27a323f84789c2e206c6234811d7c7f5b5c12c0d3e67b59","seedS":"5ca8955411a106bb9ea8329bcf0b31a374bf9f01ebe394f53733c843f8917673","seedE":"764d97c13832b46cf04eb7ceb50c926c83ae5536f035f29901cefb97c21018c1","skRm":"d141e5a404d693aec79c189a41687f3a31c5ca98d22b0a0d816ef7f1841ffc95","skSm":"b6b32f5d1d926e84f0a7b0f681a3003cfc6a35ac9ce2756c723912850f9fd0c3","skEm":"e7909be5308616242af7b86d8c1de4821181c6daa8dafac2b15d3be550fa284d","pkRm":"b8856097782470ab2c82d747250fac3d8fad9c50f932c271ec8474171f842425","pkSm":"3f695084ae37582436720b354913adcf670a84a0fcf5402a3e04d0b6966ae90e","pkEm":"3be0463d6f9cdf743b0913115d8546788b23125b1108473e4cc064e9c0b7315a","enc":"3be0463d6f9cdf743b0913115d8546788b23125b1108473e4cc064e9c0b7315a","shared_secret":"ce822a6c6990bb223d231a465a816fb33df4308b9e510f2b015ee2dbbfe21c40","key_schedule_context":"0287c58ee510f46e12e7e873ae6d81d7ebfdda8bbba76771357f98760168bdfd345464e9f7a12aebfacbc09b2acf5a3496e805c0642bd323b8547bae228b71ddc9314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"b050a99f3ff262e6b2b0f44ae4f8aad77e4e7448b01bba7259b30aa5b98cafc5b7aa04fa5dbe1bfb60be9321d081f7a072e1f7c00277ff8468c1a9c34db6bc21","key":"cc3567050a01273280d84800736fe9b6d4dea9a3fdcf79bb304aee9d73b0f68e","nonce":"17d7c834b3345e54be529050","exporter_secret":"e11fa30ecc7d77f0afbcafa34c724ab1e1401d84fb973f21d75878f0e0af171a2ce1ebcc777c0173d57a9983c6da96e89509f25d4d953c1ae24d26140fc41029","encryptions":[{"aad":"436f756e742d30","ciphertext":"b3a1fac48dc6545072af738f976361d3cb95098bc670c0fbb3d0d99173b4682b2b40336b71420cd48c6bf7917a","nonce":"17d7c834b3345e54be529050","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"75e134e0ab362827c90b13e04fad8a02075aea3d965890fc3dd7be1dde8406f16c7b4a751c887e5bb48062b2cc","nonce":"17d7c834b3345e54be529051","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"fdd8479be3b40ecc28499796e89e6a744295709069c59fca2e6c32c92b4a954ae9e597cbd244c51827c8af852f","nonce":"17d7c834b3345e54be529052","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"bd3612cb0b5880344d6d0520e3ab0d840716d1c1935ddb49b8dcf560b27642b2768d9ec6dacabe71e0ab4b56c0","nonce":"17d7c834b3345e54be529053","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c5d4fd561b3ec01b2ed97e3677e5fd3b6a80378974245d0364ead9160ef8990d4df68141cc08c08875ac16cfa8","nonce":"17d7c834b3345e54be529054","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b0a6df60a2032daa7146f6bc44328f8e71401b790019d6859a00748ff9776f131e1cd653ed600ef8df6b4dda07","nonce":"17d7c834b3345e54be529055","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"edea5a2976a6919ca3f303fc32b6148daf57a5ebc1715cc7979975bf34dd189965fe07a23416a99f54877ff604","nonce":"17d7c834b3345e54be529056","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"1f349017fbfbf3f5e62b91a884177eec09102ea320783dd30d6c9b96a5c8ae296a3052a4f0e41e3fd8562edc04","nonce":"17d7c834b3345e54be529057","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a5f1ccfa3e64a7ea4bd6bf3955fc5fb8e6ce187474e90c762732b9440faf49fa40695c5545c9a6ef17b675ed54","nonce":"17d7c834b3345e54be529058","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4ece108c75a3ccdc2e430a969fd89a3e3339b7168560d8ccb932d373c63d0c55b37b139a67f2744f4d67342b86","nonce":"17d7c834b3345e54be529059","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"42181bb90eb2e1a419f10b0a63e752c5301a9c1bb2eddf85d153d10d40c1b8a7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1d3e745c429d3efb9fc7cd4ed1807551ecad38b99db0a08e683710745499e798"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b715a7cd3adac15a1f85a96201eeeecb78e057ff89e448fe527068f462c93846"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b1d367dde1dd771fac5433e8522cf6fbd290ff589b491430c24b89e2c75092f9"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"eeefc65db8df1b1bb3d4513a918b1485696f1e928a7155ac47138a4a333a893a"}]},{"mode":3,"kem_id":32,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"233a58d91e52244505bec4000ad9d835d05e88517776d28fb90c32efce830f7a","seedS":"ce18d4b2548facf57aaed72142db5eb562396c07e445d5c8bc9efcb5488efcc4","seedE":"22826ded7a08458cfbe1ec517cefd9ab8631344ec9364a86bf3635fcbf16b6d4","skRm":"7d6405d7177b2dac780da972e747e2f5e6bf8a0ecd8a39c135513ae4db24ea7d","skSm":"64cd714c1fdbcc80708e8a5d590311e5758353b2787102638623d68e0e636d14","skEm":"cf40b44720860cedcbed79de0fbcaedefa6706fbc9963748111482c78b1b0b66","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"08347bae5c99bb13fca893f6cbc70638dd7a2ff9058a9750ace959f125484926","pkSm":"44f97e6b0f9f3f7dc2c731f1a1f42d96c6e4a8a3ef2d730c041801c8780b1448","pkEm":"5d8fe3bd678deb9ba21b3ed36fca7cb51382504f33b1c60a0d71be0643843151","enc":"5d8fe3bd678deb9ba21b3ed36fca7cb51382504f33b1c60a0d71be0643843151","shared_secret":"b2d3fe7eb181503689a32e08240b492442a1d3340e9fa8820c8e9af056e34b7e","key_schedule_context":"0343c397935cce815be04393774bc6bb839a62e7ccfe08c622716b273836d78abbac643b1a9ed26e5dd5ca7c1474c98fbfc32c0cf2c784561ce67d4bbed5cd2c98314503cc3d6722f18adbe020a4f637c49464a70ef95aa699f2b9c279b02f101f48c3ecc1b64d47ef8aebfde7c6e208bb7a155a65e3c0781df6cf0c19479deb1e","secret":"f20f4f3ccab5c16814ad12a1ce0463e11075b2560ac25e7984a45c4f7784bf3192e7fdc423210ad3652957fcd1e5fe6c8a653605a4a2fb4eaa1de67b3e8e70a0","key":"1b15b275b603558db955eb490cd8717514e287647e07a28e82b7a20c5f2870c6","nonce":"d81f1a89588dc2c61da33085","exporter_secret":"126e127812f6e44fa04690dc8af2701ec8d348d647e7fedfc8d1fedb9b394e6efe0c4f3af883e625c744abc8929c165f17db60bb8558e7cb78f1c29c695dc942","encryptions":[{"aad":"436f756e742d30","ciphertext":"639f1871790993148f8c975000124fd323ed1353fa653875a5779adc7f3342a96ff835f70c41a6d9b36b29cb1a","nonce":"d81f1a89588dc2c61da33085","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2d47c64b2fdecd7a58f50729d9c1310bb322ac321d68dede9a84dfec8897f71b1122aecc830eb6a43805552aee","nonce":"d81f1a89588dc2c61da33084","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"d6cf3482557de23c52dc62a6f2e7425e6606484ffac099dfb47f9119d096ce6112b6de8981d7e884093ff3e80a","nonce":"d81f1a89588dc2c61da33087","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"295f254ccc64f04889a3b7c7102cd398bf3d2f7d364764aed1ddce25bb5f36e3217a5d50444696cfbb5e64b8cb","nonce":"d81f1a89588dc2c61da33086","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"cce3b64b62d742c9bc50c43111afe39472a4c4b030a4f66b5ac696d392c7816845e143ea7d076229c4b112ecb7","nonce":"d81f1a89588dc2c61da33081","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a0ad35f0f057038d628fa577b8b71d577eb747a510eff008c13c80f76c4f31e038b7303134d89fd3a336e15ccd","nonce":"d81f1a89588dc2c61da33080","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"a803a8e795ba403b00825f2614fd482ff4ff1e875c4a514fcd2c04aa981a19976595846b66fcc295400276de9b","nonce":"d81f1a89588dc2c61da33083","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"90ea0b5252d5c765ee0a1215c7478a548cbf86788a204bf0722c304f68f3a6688316e588a10675903a9f3f8253","nonce":"d81f1a89588dc2c61da33082","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"213bcde6d5c846e1781c50efc9ec5f4ca86cc3c1888da0db59bd1aa9c3b834741a2aaf85ad1af63e3dc596f8d4","nonce":"d81f1a89588dc2c61da3308d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a0f16420ca607806dc1d058805297911a6cc9b7a4ad0b26690bdfde986784bce41c5d24b09c72f3390605d2d3d","nonce":"d81f1a89588dc2c61da3308c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"955fa57827a8f9306db8617a7d3d436ed9a02668ceb7293fc69c01008858f4f7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3f5cdb9ad427a300e4083dc10e72ab1681b833865d6488748733a00a10361b19"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c307218e9d9ae3d6ecea9c7a1de30464d22e054e0302b47d461820c0ec94ca57"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"536c514d7bf8d9b38b8048468b2ccee56d12eaed756b4e6e6da91be09cbbbdf0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"76025659e4a7a00e6b7c3c85b92d722c6b034b90cdfb95b72e75eea80937ed90"}]},{"mode":3,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"11ea3791ccf3c31d8ca4a02f3b17ff10ce4e9ea58725ae8fb161e87df4ca32b537ec94862245ede88eab4a163130542b520a92785b9af864","seedS":"8eadb637621667d3e414c6205adb9e9a82222b2d05a3bdae240f3c3677cec67349ab424fb2b97c7da16d3f4d9ccd2fbff1f6bdf61b230088","seedE":"199880d66afbfc12f3e53c187e7823361aae6b0062e96d038b3e35ffb8557c6fa14a916dbc3764a5ff0ca74f1c866b16d437dae323693942","skRm":"35b8703880baa256b1514b1dbe9e35fa5736dea679d36fd30b2f648a60f659f3dea3d0442610fee0d7bfb471da12b39ac1193b8a40c8d9e8","skSm":"eea8dfc2fd049a16f72c925d79295706653e87c45a51709f95592ee38535bac92c78c3d2eba119e29a60aa8ab48c72c5b4e64fa6139781e9","skEm":"ceffb64f0cf79a10ed0efd136fd1907ddf04d190fe6bd545a576a9bbe156c61c1a62ccb42a1da214e81e7b4c6a4526d1a760af1470cac70e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"d547ae02df61beeec89acbebe8ddf18b3d0f5ea4bef46febbd6c1da54a6752730e108323f42680ef66de42567244bcc3b76ba4536380ea45","pkSm":"ba37766ccead9080896568e64f31b29d1a9537884c900c9ab9ea5e0717bd991821051884f35ab27fe07ccd764ca5906cb2c1e5db68515676","pkEm":"1a8221557a9f356c3b58666d694fe4c63222d273d727a62e7c96161ebc2c32fefd057ae9625b87ae894dadf733827897b1060cb6564ba7f9","enc":"1a8221557a9f356c3b58666d694fe4c63222d273d727a62e7c96161ebc2c32fefd057ae9625b87ae894dadf733827897b1060cb6564ba7f9","shared_secret":"68763a46f6566802d4e5211dfd0cda20574cdedf198789cfedbedd93673952e84b91240ca1df8af2e150d917a607b1272000b5b33f066267abb5fe2c87be84c2","key_schedule_context":"0378a529697c7004818b8af5a225548b44be8d0766690b5a2ca50a9cba77481c23ec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"a16f2cfcae1ee298ed69f285390ce99ac5db538d54e943975d5b9a39ab44e7f3","key":"87146c90840cc3e18b72613d2ebfe8ac","nonce":"310ce50aa641bbde455b8e76","exporter_secret":"252aa958259709dabcd9f165b987c7da356f6e006e77f23e9a7e11c1305b0d18","encryptions":[{"aad":"436f756e742d30","ciphertext":"3d275b7735f8cd485f543c291ea80701f3a3a88e9c89a63c69e512738ab3e5b507e8306f96efc9b7fb53cfc1ee","nonce":"310ce50aa641bbde455b8e76","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"be3ea270a97e5a5f0f80649a7a5e835b2c5fb505f13647e449bbd6b132837d11bfc3e0212038318c23a7b7ec95","nonce":"310ce50aa641bbde455b8e77","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"94151334b02244fe0fc86856339d40f43a7ea77f4a9ea3ff8e71df97c756f31dfd884d5ee90708ec8f906229a0","nonce":"310ce50aa641bbde455b8e74","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"05a3d260e4f835a1a34cea954843c2b0b7e72693d6e076a402bceefeeb696979ee961d461b9b5d913c6230a709","nonce":"310ce50aa641bbde455b8e75","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"4c66a3a3c8f4826b911290f703bb80ea619bccbda4fd23ef8393b4649d2a8a2f039bcb2e1c4b939d4b1931aff6","nonce":"310ce50aa641bbde455b8e72","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"50279c22488cab35baeea5d859dec0d86d39f426a545583077f9961faf0de7c6b60409e56088c43427a683ed2b","nonce":"310ce50aa641bbde455b8e73","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2840fa9d3435084701797c8c6bd8fb0543e1d0b9a242ab38b4283ebfc99bbe8861ec39f56ac9e1226871e732b6","nonce":"310ce50aa641bbde455b8e70","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"84a8db32e486663fa9cfdc55fc4e3f0825062c8b04c10ae5877ff1f97130586385d691775630beae3c0a65f4fb","nonce":"310ce50aa641bbde455b8e71","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"602a233ce5aae8face241c18279a1716abd97ea0ab59c4824fcd72b277459e0d0239b3ac7b54be2c6a0e8bbd49","nonce":"310ce50aa641bbde455b8e7e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0d6dabb93cea5f584c34aee6cb20a8b796004c23270f67db78493995b52dadf95e1074527a7c04a7f8a62fa1fb","nonce":"310ce50aa641bbde455b8e7f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"d1f616aea0d1836d387aa5bf4d062dae6fc9092eae034c6db70914b3f16acf03"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"148c2be20001da340a4b71840fff6bd5be36d8d54d250c176d4c3245a70ccfac"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"5762892367434465262351db6a342e95bc6d62821ac9a7ffd28b8359bb75adc1"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e56358ec3a531328a19a4976360c3b20a59de2a8ecae73dd63977d25abc82735"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ab40d827b55a42c28ce9308befeb526feb72ba73a6adfccdcb8798b5a1c239ff"}]},{"mode":0,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"edd38a46ec129da70b75ce398e57365d1ab3600cd8984da1d96df68d75b3c7cbd871a8ff0be7dbf0b3fa44f66689d63f237cfab36bc70070","seedE":"c7eeb0549f577095706400cef8bb0689580de6152b89bef46818769a18d4f5480cad49531d9329668b2f64161f62036a56e9db128f756fc5","skRm":"ee9d0a8f539ee58e5c813c4f4c4a36a89d70492a4e888b878522f902f86cfcd77eca4f21ad4c9728e1cef9697c94905a950ffc7757d3dbdc","skEm":"5eb24f3f4f474f4ac8f0027048b8ea230372c52d89e04f31d6cab3e1e5b46a22c61d6424b19408bf35f03888b734c8d3baa75342a1f9e14b","pkRm":"335cb28eb12a5677f3e3f4678df86d674141e258bf1709a2140a1873c6e8543b68c26f577a457bb26702cb47d79d07dd971de493f75d6965","pkEm":"4bb52b1773b7d3b6bcebf5b429e40e83b8b52b987829c24b417e5c6d5097ff6c55de1bb3501c1f50466b2ef17cc76b168066303506be93e4","enc":"4bb52b1773b7d3b6bcebf5b429e40e83b8b52b987829c24b417e5c6d5097ff6c55de1bb3501c1f50466b2ef17cc76b168066303506be93e4","shared_secret":"d2c00054bf68a3d564dac55dbab0a6f74c3061b8f9b8950b7d6bf80827e203b78dbf00951b577addddb0d3d78af29ae88f9c0cdaf9ba5523d1b0e2f3b59190df","key_schedule_context":"007637e763b51bb8f614a2ab36af7b189cbe66dacd3714f6721c6e066e7b3515acec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"ee471671bac354cb8c7ce0eb08985143ab37d69bd7d55a973e385fb07881c296","key":"8e400b071a712f8422ad65ceb76f9506","nonce":"27fea2c4dfea3f19f2dc6c37","exporter_secret":"56e731d650293604be9173e9d78a683b703859c2443480b5b2401f802886e079","encryptions":[{"aad":"436f756e742d30","ciphertext":"66eac177fa8f12d727205e67903b49155c1e3924cb83a23ec4dbd4df7896a7794931d4023dc02fb34d02cb1801","nonce":"27fea2c4dfea3f19f2dc6c37","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"ce3ee44de9951aa2bbc3c31ef4412d74f7e263e0f70dc9cf56f7f6bddaa30aa660bd79a17372e6d18009c303d0","nonce":"27fea2c4dfea3f19f2dc6c36","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ec6a5731db1cb2fea00cb7715545f9658ee95fdd122fe83dec34a34987dc34c44b28400e19d36152d0e67e08d5","nonce":"27fea2c4dfea3f19f2dc6c35","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"fbfc9583d7511e109bbe5b09b2e0bffca8a99b424cfb5b346654a485b6e372e617d781b3dc050c1b0b10ae8b3d","nonce":"27fea2c4dfea3f19f2dc6c34","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d8814497888486f325c45b734caf262abfa52dc6ce0f4af60ece22e7d5f767a459e6fbda7386ddb9f6aa2462dd","nonce":"27fea2c4dfea3f19f2dc6c33","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0f0bc72403d629e51e8e99d4f3ba83475f0218c9d1f26221aabac5883655f1477139baf808cdfaa52e06526b14","nonce":"27fea2c4dfea3f19f2dc6c32","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cd707965ecdb2f6e3f0bae668bd475642882f2b1232dad6ad6aefd9aaea21e0f01966f726c8c14eb75407c9d42","nonce":"27fea2c4dfea3f19f2dc6c31","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d5f85e23cf15fb39f4c12f666655e22bcb07644d190d5466c7704c34a31e6796a42190caceaf2f5bdc7c4e3020","nonce":"27fea2c4dfea3f19f2dc6c30","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6df05d157cae48d7e4e3ebc309d47e9c936452c6bbb558506dbfca4e1155af39001f04594e327e48b14cd00b61","nonce":"27fea2c4dfea3f19f2dc6c3f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c267b3ffb34a30789b1351bc9ae79d6bdba44c18dfa1e1edccf53882c78011270d44ad9d9c76ecf69a02470c96","nonce":"27fea2c4dfea3f19f2dc6c3e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9c160bdcfa734da33a9d11bfa1ff1556acaa3c59d12707b563909dadeb739657"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3f1cd49a2cb62a712b6631bf0871e4a9dd201ea60115751838616336c9acfbc3"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"bfb779e1f648f3c6c0a0bf913e70ace00ec17e93022b9f312e031989296ce63f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e1acf2868c209c568193e020afa9c4ed7525695cdf1daaf53d5c02b599e1005f"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d4ee15708e6e5770d522d626780c89e9964d8c2a2a9d76a2851e02dc50579e9b"}]},{"mode":1,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"187c91efdf36a6881e056705e2fda3bbff11309834c93be10ed9b9cadffe55e883fa2685e1b9d180308f49d2d273a24a651b9a07434c2d6c","seedE":"38c5b1535dc834d8c99bb90cfc62b8687af4de7105b1f41dd44a0a66d90545f4edd577ee6312d3af08c23cd040772aa2ced12b5df36002c9","skRm":"210cf894a93c2de421e3536a20d5fad929d41d496d0c9151633809e036b5d02a67898b85cda8a8370530fbfa983b6470352186277c48cddd","skEm":"c3724fa946940c0b8e486be840140c10c7da3a8aca782867ea301bce43e2e23ee9fe7c4b71f40feb3c9d27aabf8781787ded1cf01390efd8","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"4af54303289af16d303d8790054793f50b65a18d8d062da29c1cfae100afbd975e06573a35a9c1a2a5a152e84d13084c2c5836c12cc2ed6a","pkEm":"191b7f447d5043df3981b3a4b257864561723972aad8a89403be2ca6fbd7e9108f6d9a6eeba1ad3bc943df84be110fd1456ccedec3b665f9","enc":"191b7f447d5043df3981b3a4b257864561723972aad8a89403be2ca6fbd7e9108f6d9a6eeba1ad3bc943df84be110fd1456ccedec3b665f9","shared_secret":"0f609813e0f5c6b4b39df0dff711e9f897241f7a624952dda9205ba2dcdaa30018c259ed8e64369d24708ca8a220eb2ec7b453c3a0c8d899efaf69e58ca8c781","key_schedule_context":"0178a529697c7004818b8af5a225548b44be8d0766690b5a2ca50a9cba77481c23ec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"aa693e8819e909475870dd6aafacd3bb7620a1c59932317d746f3704ae02695a","key":"7c50dcabd485d519a88d94f02cfd0d86","nonce":"864426e0ef9dcc418e3ef9b8","exporter_secret":"5a9c352865fe7fe15a190a0ae3f35719c019585868fca86708878073e8326fc8","encryptions":[{"aad":"436f756e742d30","ciphertext":"63fa252f8bbd9f1dd1566d018de7b3718b822b2ddd90a451220f6f845620b0ba6b63a90c1c2f3c82ffa5853acc","nonce":"864426e0ef9dcc418e3ef9b8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e990656d4d876a3496a6a5514f9177a712bdd8a3aa12923a09ff4c228548c8a8b46bec3bcbb4e6571f3a8a7331","nonce":"864426e0ef9dcc418e3ef9b9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"2c6f35ee1c6ec4703ad29b9ee01bdf177fbcacd49cd5f04bc17b1b251397637021dd5a79c105ddd79d89d3e341","nonce":"864426e0ef9dcc418e3ef9ba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"030eb9875a0edee2b8447af20369ea721040a89559214a46002ab43a563c970bc73064fce73334fbc71cfd7636","nonce":"864426e0ef9dcc418e3ef9bb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d94b837b9860700a90fea288894c6a9a5511804e63c1bd4fe0cf5e20efaaa9129be4da204a8086184372a1aa03","nonce":"864426e0ef9dcc418e3ef9bc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"90420a577ee23b66cd374f936ea5fea85a647aa57c96b67322e36f2c4278e36f9c7e7621d4b56cddd87cff5e29","nonce":"864426e0ef9dcc418e3ef9bd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"32ff9b476a56d18b1ccd70caafdd06bfbab782a19a874d1d4ee2a016c4369ebdb485f80425406febc77bc70352","nonce":"864426e0ef9dcc418e3ef9be","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"8726a6384f5c10e897a68e9ebe69535a707e26628e1fa945f14b912c09912ebfd1faf60f4f0532c674fa499664","nonce":"864426e0ef9dcc418e3ef9bf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5bed8cabcfa513bed8f35b43f3ecac3f0e667b59c0284791b2078eb0a6b57ad612a950da0e3a5dbac4ad85c5e0","nonce":"864426e0ef9dcc418e3ef9b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ce504a031cdb8d0a7970b4d4cb2e9f314ddb5d93779a08b4f65b2108e90d2d2da5bf1f61fd42556b938bda09a2","nonce":"864426e0ef9dcc418e3ef9b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f8e2b59efab661703ac7f65335c4fe1a2d6844e0ee77a196ab9d57015cbd6202"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8395130e27a11d1b3ec80a72f8788c765c6a4968a786e1208e366caee58efb09"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"f97c3ce62fc4f68835a843e9ded3add36d58ecabf0923f544f98a41d2d851247"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e6a936202ec20beefc991f170c1a5389bfd93c0d8bfd8049356f0e2ccfad6498"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"017a0f3d6641c13257ecfafa3554029f8426254b5a29a4e37cbd6d86554fa8f9"}]},{"mode":2,"kem_id":33,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f8a2a7ecb21eb886b8ec56ab4aa02514ed1ded3c19abbc6d58bc8f7b596239aed469bc34cac73fc8bfe135a0508dc43c3747e7feb245caa6","seedS":"746b24de561783b87bba3616ea7c631675038cc0c5bc2ca8fc50cb793e580594bc7757b9f554a20be294df87778508d82955efc9a954551b","seedE":"dd35cfb173339595853ad88013c1a4fb8c55d985cd3d226ae1d3fac16ed19e8b73dfdf8c6f434e88daafa37373f22b13553beec50f34f81a","skRm":"4c14a13eacf01df0db63dc7822e3ea90eca77ae8851d54fd0f4f148787a5168893bc06aa8be1908cb9e5e545820f9bcb3c467d6b0e65defc","skSm":"243770a3f8ae7624ad981a24a8e047cb0a7c7eb014fba1657a86c92b6c9cb3b960e5cf329a97af728525d8e151cf3a89feafc7dab4a8048c","skEm":"b2a1c90ca079b0eeedbf84434defaa6d6a6e3810bff1e939497e2410fefeb7a5c5b046389652077e36dc006d8479d1f43c5e7c79d304df09","pkRm":"d6fb3e761720de6797f7838550775b814df440c76cdad8e1e3071ce92925a5d898f075161ccfb8495b0297471635fb1c8f77ffc59abd2dde","pkSm":"0f24fc27e5eddb3e68338bf7712d4d42788e5ef32ad1748fd684b084c8bf2af8e82ba23a6a189554e53bc9ac22835b1ae9d3ae49dad1a0eb","pkEm":"0de148c3ff3655e2444fd1d75eaa5902eacc445471184f83ec4da9db6cfca54071ae6d3c5d2efdc1152e80910cdf5f0fc265760857434490","enc":"0de148c3ff3655e2444fd1d75eaa5902eacc445471184f83ec4da9db6cfca54071ae6d3c5d2efdc1152e80910cdf5f0fc265760857434490","shared_secret":"476026ca9903b0a6f30ab99c390a6d89ce0e43c4acdb08461f409a2e8bf342eb5ba4500ed2281257b2fed23bb1bda9ec815cb31355a8f694edcd63acf159a982","key_schedule_context":"027637e763b51bb8f614a2ab36af7b189cbe66dacd3714f6721c6e066e7b3515acec45fc1e118e7e28e97cde7959a48beef4959c6176131f818392aaad29caf78e","secret":"40b76560320db8ad9a5fbf31f7b28c68dc7af634a9a58b2984b95433a6010d03","key":"e8faaa9faf6ddacdc5e8d82de34e62cd","nonce":"fa479777b460af5d94cab5d5","exporter_secret":"93e6ea450d4dad0ed95423cf9ce4ade6150a9aacc6b9f61f3a3ab1ecb7ced63b","encryptions":[{"aad":"436f756e742d30","ciphertext":"8c0d8a1d769c9d05c7ed6b82d3f9039b773bc6ad1f8bfda2d5f776a08c5f9f1282eebff0fa51affcc260bda776","nonce":"fa479777b460af5d94cab5d5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"b75214a4d494b9067afba98ec855d7f7231afc48d48eb8b4ecb0bfcd452e1eb8620df63b2b5e3087d3040ecf63","nonce":"fa479777b460af5d94cab5d4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b24f59a49800253dd6d4b96a366d29133feb4a711854957ac1dd089f77a94266274a1d1421b53dc677cd417aa0","nonce":"fa479777b460af5d94cab5d7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9ced9a7a63732cab78bf083f4bf2718164d42366502f15eb64104e39edbcf484f62a5e9f9704765f27cf04debe","nonce":"fa479777b460af5d94cab5d6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c773d78e116e80bc8d367b1eea69b0c25f80286cef049befc13a3fcecd3170049c6c1f2cfd1dea99c03b85887f","nonce":"fa479777b460af5d94cab5d1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b4c981b6f5a1534cbbda8106217a221cc9a155e6078f470fca174b19a464af8f4878f5a141802e984c69ac03e1","nonce":"fa479777b460af5d94cab5d0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"43004b3d9b642654da6782a080bac6f1678f6b0ab99428dcfbbccaef39b0bf178bdd8ea3b2114346ed93bb7b2b","nonce":"fa479777b460af5d94cab5d3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e8404d6aadeccc39026cb8e26facef1383664662d673d94057e719eaa7fd4b8c1bce863639c0f17aa40c1e6ecc","nonce":"fa479777b460af5d94cab5d2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a278bad4d99b5a9c3d84844af85af63df4ca96feb35f085e86c6d2a041ecea21f5301d6941024faf7e3b68ce1a","nonce":"fa479777b460af5d94cab5dd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"433fb80b33c14f6a62dcd85883150f5128add3549334be227c877bc58dedcd73aeb61e6abc4338393ef06de834","nonce":"fa479777b460af5d94cab5dc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"89b57b9f22443d8ba2893d594bcfc31612168c6aa338a610476d05bd3934f8e3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"32078dc3a22f99b3c84363aa958afd7531dc9b9dab59e148d9fb2a4f1cb7dcea"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0eabe263bc1614a06b28cf334ad5a39651e5b2aa89f9e537b9ded0b39b3166f8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"0deebcada7d72d4c211493d2f8a0522690ee6c526e098f8758c67b57b74208ec"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d12502f84e8ba530184fb14fa3aad4d4b85b5365bce22f9e9fc818d487654471"}]},{"mode":1,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"fde902f38e08bf251b43a479755f883f1110159c663b6a57e300a75ed5fdd65753501c76dc59f17900b75f90a7f05a4663a8a06abf0533d4","seedE":"d6758984451862254c489381c841bbf554485ff45ef4f69f21531139e2821493d297665bb99e7ff77c194528dd3520cafdbb0384410f1a75","skRm":"b1d73fc566eb793a3c249043b8773496970b2f43a96629f710960b1dc5226f4203248bf976a6c6416ad29b9f40eac39543add592f9e8935d","skEm":"99ae1146dc27216e42d1696507b3995b32aefcc46363981d3784707beecbaa4b97394e604c9aaaccce28a44fa4c76d8449cb161cf7a69ea5","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"8a27c8ba8b8e8189c7a6e0523d869e1cefc69f40487f7c8bd6189c00b5becb1013b40f1f5518aa1e4671651c8a136d3135832daba940b17b","pkEm":"ed8f82c7d6ec6df3cf21c9f7c594699fd3d8487b0ff52f9e37d539ea537e61833d65cc2c4444e20886b9c0dcfc3427d92ea65fa089d346f3","enc":"ed8f82c7d6ec6df3cf21c9f7c594699fd3d8487b0ff52f9e37d539ea537e61833d65cc2c4444e20886b9c0dcfc3427d92ea65fa089d346f3","shared_secret":"c2b6f12ece73c9a19ec00b90b80a2f119807652ae3253193ffa9eb070890956e07dfb173599a48d99a1a7256fc53f9814e47c18894fe89a90e7ec0ce84d5916f","key_schedule_context":"01de6d9192189182309c4c5b2ed1340a7d3b7a658019b10e2727f442357352d8387489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"c7e9e7604bc6e4ff55973c9e0d179f1dd340dc0e2dc408e0c8d1afff88899fd7","key":"eacad4765ba36fb528de011999d0e49bdd57bf10ea73277be79d6916a47a0d5e","nonce":"8e9644405d44e969cfdcfa69","exporter_secret":"408bcc314c04cd9451e88cf5037ec1a9adeaec119be300be4e478bafdd19728c","encryptions":[{"aad":"436f756e742d30","ciphertext":"70deba173d7e1d7ba408c51efdab89b4b7aba995a1bdeb7de4b0eb232354c2356e2390626f9a5b62a2a604dff7","nonce":"8e9644405d44e969cfdcfa69","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"55b1c0b0a78da95232962b1528e6da4ed43aa7a24c6050596baa17b6d6727b70df4722aad006ffa35044a3b88e","nonce":"8e9644405d44e969cfdcfa68","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"76fc4afb0847d364601ddd5ba555301d2ed12de29b66b1ad97ab4a67dc8fbab27000541688b1b0af296ccc3e76","nonce":"8e9644405d44e969cfdcfa6b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"da76d243451605f5d55f2160854e13aa468366ded40cf46f9b2160e974b5dd3e9e15292cc7afec92e56edfe7f9","nonce":"8e9644405d44e969cfdcfa6a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5a193f5b3dfda9abb2a92980ecf2cd6ca462e33ea5641d5bd02ff74b85cb68678734cdd8b435292dd30824861a","nonce":"8e9644405d44e969cfdcfa6d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"063e47c63415ac80f223391899e5270d409a630da7a0527f0bc818486087a2d219264a342a95c31823af278674","nonce":"8e9644405d44e969cfdcfa6c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"f16e5e478851c1387d30cdc77400647de8a29cd9d6106ccdf0f6050bafaadf6330aefdd763668cdce63a54c29c","nonce":"8e9644405d44e969cfdcfa6f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"885a5707d8866c4d3068b890c4de29f6953dfb90c848d37b2c63ae91f9522d0bb2898ce389a0ff5f69c6b0f4ed","nonce":"8e9644405d44e969cfdcfa6e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c0f9f75f9ded9ec70bd758df30d2e5ff145d413938838861148937c6c8ae5ab3a8537bb1455cf15aa3e7b71615","nonce":"8e9644405d44e969cfdcfa61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"cbeae9cbe74470c73f7166bfdad9d5e51319f4f30551ee7cd236e0a1e87039a768ec2f9873b1e49e5844e052a0","nonce":"8e9644405d44e969cfdcfa60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"0d5026d91397975544febab5d9f789be7a100653d73a4119685b3a726535bfe9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"94d3d9dc9bdc20bc79387a3aa9b0a049fa469d371e5fe942f9c9b8ae0db0a4ba"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"53df7ddb7a75f7f0a91ed27d25f74191685e59e673106b4e3f5deecd248c24aa"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3ee04fb7060b8d0072aecae63c5ba2e04a9536a70cc1602b4ae781ef13f2512c"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f4fee6ec4ca105b4eb33044ec7199c8ad6e2c3d519a864c91dd9f55ce085d3e5"}]},{"mode":2,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"85867fa68d095842dda73da0c0ba207065a6529b12859a6c2b3dd71feef88d323529248a355e2b035ed04c93b793524415ea376cae96d11c","seedS":"c6a514be4901d3202ad91e7be13471f5047419e2eee8fe359799811fda603fd3f60b4f8596c136e450814db99fdff4f1f656d5e4c942d988","seedE":"f8b8e6ed3aa3f6e01aa1e1b2e80fea41f5d4867c97973701c48dc88d0cfe1dc37338acef0d75201b3c38f96cabef6999e54b9424d6ea2735","skRm":"7d7a3179665b4411fede6a44e289870f6a60982bdab74cd3a79bc5b565bb38a6faf837a123040ff2645bb416dcc84ce024e29dee802040fc","skSm":"a244d996df474d480c5b36d6517299128945f6bdc8491c043230183b20f0fb739da4a9b42ba5f090882980dcf40aba52bd8e70a41f987850","skEm":"ab04eef8a43308ef161a5340020e54e0cc19d685ed49846f2a70e0209abd13693183af17d0aac1d8c5051aea1b2fe919863fbb55db6ee02e","pkRm":"bf074d0583d1aefeca2cb0810e978929438720cb704864f4f37ba99184edbc1f6c95c4ab5de9c13e180eab9ff33543ea1bdb7748760f57de","pkSm":"51918020f48e4b96994ecb7b097768e3d18929fc982ad4580723c3efac419b070e5117792db0286eb514a13b42b6eec13720bde540c01f8a","pkEm":"8f68860803ab12bda74358b3d6a6edc2eb959032cbb1b9ced78e663b0155ebadc6b038d87ce902b8cf94be47408dc63caefc06b68a78ab66","enc":"8f68860803ab12bda74358b3d6a6edc2eb959032cbb1b9ced78e663b0155ebadc6b038d87ce902b8cf94be47408dc63caefc06b68a78ab66","shared_secret":"660be9e07b7d0724ab30b1620a35492b52ebde7509abcaf6531a70007373c5c66590037b760b7ced97fc227d94f16363148b28c625b590a24637aadd12d2edc8","key_schedule_context":"025057c11b73576e77b95c5eeef1246d13b0ccf6f8b222a3d300a09bec8a7fc6a07489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"738ff205d95a1f2be091ed63649ee8446b44a53278618ce453434f972decf0c9","key":"8f3a7791ae3031e83c36c84b091f9583e59ab6b23c1370975d06222b10f01b9b","nonce":"46c3254c7ef0d118abe35284","exporter_secret":"bec7e30d04f9b97dafde477e754d3315c0cc58f6322b168830a7b553c99207d2","encryptions":[{"aad":"436f756e742d30","ciphertext":"3ec5e123988189f15b2ff1338e34efeee77dafc8873f490df8fed694b53fe98e1d3e5172865afe3177b18f507e","nonce":"46c3254c7ef0d118abe35284","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3ec36d955b6e7d345e7a662164dbbdcdda8e649918079d5b872b549cd7f4d43edde8ba682c273253236d374355","nonce":"46c3254c7ef0d118abe35285","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"195322be6cd116db2d34f6cb6f2be679a4cb5d78fbb9cfa0fd2410b1e038f7a671368bb600228463b0c2b78a9a","nonce":"46c3254c7ef0d118abe35286","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"83c3c837af0351d0e31ec7aa6c465b8db495b8c83f24da746199cd607f459ca2988bb71f4e3f74743bc3b6b3f9","nonce":"46c3254c7ef0d118abe35287","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"55953efb4d5e546b61c4b0fa8c105befdb67c3114ac085a4fb01e4d34d4679d286b5ea354d81877638bea210ed","nonce":"46c3254c7ef0d118abe35280","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"34636c8715d05b74e3da31bb0d6b7f6e6fc0ed7c4d3ba9e35b7280e75f81677b24162c60e07f30c8214baca818","nonce":"46c3254c7ef0d118abe35281","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"34c6a063493fb0ed7f45d3139b2a839d811b769994431ebf6e18da572bedddc9d2638e76325af7ba94515b956e","nonce":"46c3254c7ef0d118abe35282","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"32fb5ac9875e527e890a8d0706ad50feac3baecd4f812d29897231c022642b210ba019ee3edc55cb4baaa0c652","nonce":"46c3254c7ef0d118abe35283","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a65da4c7dac822712e33976878aa1084408f5979ddbb6fb8fcdf1944d6b2b5f02c250754c8711f67ca3b391570","nonce":"46c3254c7ef0d118abe3528c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0fdf4d91e3583dcee16e6333b8afdab5815c97464da5b6da6529c4174f06bf35458c22a0ea4acf996c1bd69726","nonce":"46c3254c7ef0d118abe3528d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"07b3774dc0e60dfd0b08c850dfd3849a2ea13dec1c4cdfc44fa622082f20b43a"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"702a581be0ab35e718d64a7723de5e797b4f1a64c99898077321f6c215a62887"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"66a7047d8a949af6e188972638aad81288188b202d726351d4d6eff58cf65de3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"be542f49bd3f85fb50106625aa1e8052149ec0f22ad8343b5e5e0c316a793649"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"37a2ab65647f022ed2313aac60c55f67579a29aa55beca39a3501e75239fa999"}]},{"mode":3,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"99199b17de274a7cace772f708c4cda6315aac5c255f4f3fb126b450f30c5c555d318ec8f87b516345618d815fb08d6ae06d1e2482f2386c","seedS":"f85efb5df259cda577cfd3fa0d5313746587c685374d78c268a8b1c2b28446d19541bfae05beb38efec66d11ab7c7fafa87cb4fc00a7dfb4","seedE":"7717c66909f31f8d82e345a4cbc456df66c5a1b3629f0fa66f7c1c45ab01b513820eeaed9ada7f281aa8368a1a23108406e76d708890f709","skRm":"4a4b3a58bb2de05ea148a40d190142d4dba31a2e2102e605b5d9318b860d7f9646479ab57e2d3c679d0e9bc23ea36fbe71f044b945b3b52e","skSm":"650be62a9774ef251a4a140bd1ac453368b0aa29481612841f6ab10222d2fb784c9738eab6722dcc10a88ad97395904ef7f14c5559699616","skEm":"f351a67d841df44dda36315913327190c2487d924697f317c9074d86ed32994f7f0f71f7b64ef24b8e8b3468c52ed90023ba07b592dab56b","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"47fde1e052cbde93064898e42b24007703991e93aec5493af1ce8a1df9b07fe5977ed9bfce68ede5186b923a12390cd1305f67de29e6de1d","pkSm":"7dcc702d3b465062ecad762149f515593cafb59ffbad9ab06bbd3cf58be235ab19ab6a4918f145ddf4c81fd3429271b4efed2629798f396f","pkEm":"0632d00791732fc626c857b30c0d3e3e1dd79e6bb46745d04d61e11ae982b03fd6e2e4aaf53740ffe72076a713633dcb07b344e487fe2603","enc":"0632d00791732fc626c857b30c0d3e3e1dd79e6bb46745d04d61e11ae982b03fd6e2e4aaf53740ffe72076a713633dcb07b344e487fe2603","shared_secret":"da6f64f2ddec81302a2ffc25c3e455dd38aa5bd95be1ba4e2f8bd6ab75ecec5d8ffcb27de67e1ada16182de3245e7e87ddf7a6279663a64e93de24f32d224516","key_schedule_context":"03de6d9192189182309c4c5b2ed1340a7d3b7a658019b10e2727f442357352d8387489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"da09e1bd2615121ce87523b9329ff51a53cff93aa2f37f6479694d880f1afcf7","key":"15459c6b6c00119b4526e08e3849fb4dbe1d71a7953440b924bff51726c5942e","nonce":"0cba9e7f9bda353097c19d29","exporter_secret":"d0d69fc66c28694d3ed781cae32ea92dfdc96ceb3eb72fa034fa266d2dae664b","encryptions":[{"aad":"436f756e742d30","ciphertext":"cbf82cebf59dc7e600b2714119a83c8abcfed40d1e60efe43543eb5993001b5f5cd9fac6a9e9410109b80b9518","nonce":"0cba9e7f9bda353097c19d29","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bec2a27b7a05a34493be2525c91eb002379be7339eb90f433ab5adab525276e65084055515dcac9857aeda0f12","nonce":"0cba9e7f9bda353097c19d28","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"4295efc71dc5292dcfdb74df8c1ebcc4bfc00106632655e240be8364995fbb4edbac81da8ba16485074086fb87","nonce":"0cba9e7f9bda353097c19d2b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d2e9d05cf330b13d8851c29dbde0171bb379c52c547df6a093bbeb623ed561c712848221cd2a9fbb106d349038","nonce":"0cba9e7f9bda353097c19d2a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"3dd2cf14d2dc26e2d6bae391fa8672b686d81ce38265e81029ef508d60d4d846b56e21faae35393ceb37381e98","nonce":"0cba9e7f9bda353097c19d2d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"09ce68ce9a78486c3e594697f55c2b877838dc0307c74b45baf506cac656db8f4e371d7fd6f480b2fddeb24e85","nonce":"0cba9e7f9bda353097c19d2c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1ee31c80355f902b1362d627484ae488e304804930411fd1b780beb57ab72e336cf4428f65e45c51ef075d5538","nonce":"0cba9e7f9bda353097c19d2f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"10f324755e7a932b90aed1a4fe17a6c97b7128c9d04cff484a7efb265c1c14196a86d02296a1daf98a4fdd036f","nonce":"0cba9e7f9bda353097c19d2e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"13a1c2e55a8151bf9113bbc64a584a1eb8bc2bf1f3e7d071247fbb999c6be1fd9c842452d8fe854411eecd5569","nonce":"0cba9e7f9bda353097c19d21","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"3df2f384f8f68c3b6adc64fdc8afc4c934b05e1363e0cd1ac63979ecd5b75e4cf8624f397f8e48058ad9c0aad0","nonce":"0cba9e7f9bda353097c19d20","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"88127b708662b1fa0dbafe14825c69874499fbbc0c3fb40f3d4d3ce0e236faa2"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1c21e9e09b3a12388c173f73ef2df922d4da0bcef7db508321997e4e20969991"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a85bc0c79f4052c77de9053b6a8918430c92c8a41ac6c8ed3f234d20c20539e0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e0f733a0573befb1049c0b8c3d64c82d32b1ab87bf977e958e4835b4b1c01b23"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c27f2744f7df8bd2d544663434513259570171ff1eb30410311dd5671568351c"}]},{"mode":0,"kem_id":33,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0b8c4c4ec52e8f0f632aad9d34e4778fb02a620b8853f3f46df02818e67bb09cb7b323e4b8ba860890fe286ea63f0bb9a47514e3bfd41f87","seedE":"8ab1885c7aa71077748a2729730bbf45eafa48e43496d640b8355ebcac0c16b72d27c0a3ac6a81e5c4ec7157452a067c91ee265177ea046c","skRm":"e41de2e424f44bdb6b766b67cf9e563d019d529c68d2b9bf049c203caeabfd21e46e07fa41b1f7905faef1648e4705f14810127230ec8b88","skEm":"9642d5e7f47a5cdb2bb9c341e94d97eaf87abbbf146728a6b19d987888c8d13123d2b0c18b503e294034de8083921f683505bbfac3191aeb","pkRm":"e04c798c2e677d4e0ba7a1884fcc6824b7e0b90bf75894b91470c37abd9d01890ff20515396bec2106d8a6cdd2a35a39a6c8cbbaba8c73ff","pkEm":"0be9fd12e57a5cd996c7aacfc0b4bd94e6d29c292fc6db89a24dbe935d3efa6848cc9bafad9297324a99f6cd6616d9c0c0c238af312a4f6b","enc":"0be9fd12e57a5cd996c7aacfc0b4bd94e6d29c292fc6db89a24dbe935d3efa6848cc9bafad9297324a99f6cd6616d9c0c0c238af312a4f6b","shared_secret":"58be019b0287449206574676eac0600dec6bf1e618c7e33043e253cf94e2c573b0b83032771deaff9e8f7ded3977ce9cc0a892cbe208c074bec26b3bd0c8f211","key_schedule_context":"005057c11b73576e77b95c5eeef1246d13b0ccf6f8b222a3d300a09bec8a7fc6a07489993fc53c01e467acb9e813e93cf59dbddb92fe273c67cca0582a2e482be4","secret":"fe9d68689d05bc6f8c837dd938fa3fb613d84796c08ab2e462c33daa8182ca9e","key":"3bf0a2c961a1f146a5147d35cd89a3db06b5b8c60e62df060188b5bf7abe750e","nonce":"6a7584fbf93c9e31d3f66a0c","exporter_secret":"d2f1ac2e5f0af6a940be18847e8b3b6a481c1d6f4787cfdcf2e0d059b17b4414","encryptions":[{"aad":"436f756e742d30","ciphertext":"0fe91e0dc5954f1a05df8e21fafd3e2749e0ac6b0cc733f125f60ccb1c3f29c445f5bcbb37790e261584c48ef9","nonce":"6a7584fbf93c9e31d3f66a0c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"45c1ddee15ad6b2048fb73d8c6deb429ab87c09cdefcbb1502a20a9ce666f5e2add0ab64bfa3d1e1213a3754b2","nonce":"6a7584fbf93c9e31d3f66a0d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"44aa8fdb5e1c3c6359e96ec9f6292d38764c3adc840bf96a839352482114594fb640e6c0706e1a8adfbeac8625","nonce":"6a7584fbf93c9e31d3f66a0e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"cf7fbfe58e047dead7d6d8de3a71d1d26be2e7d6ea5d606773351299d46f8768d49a1e2c5dbdd528d48c5307dc","nonce":"6a7584fbf93c9e31d3f66a0f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"94aeca06538057cb916c5ad5e27d69aedf2f27507d1d28fde011c2c394f3bb0875fb77d37217628425a13da7d0","nonce":"6a7584fbf93c9e31d3f66a08","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"aaee5d7066018b840d9cb780d699fe97b17df72feeb7026376698ebc0ec5b01f21f8307bcc3bfc8fcbea923fe5","nonce":"6a7584fbf93c9e31d3f66a09","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"06fd8e117183eb4e94e749ca61b26d72481a68186b8d78b840922b91f28fea47467b7f2ec4d0b0cbec6ba8672f","nonce":"6a7584fbf93c9e31d3f66a0a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"941820ee50b84f69ee6f39a2eda20acb3be5220eeba1bfc594acb4ee4944903e39572ebcd346c8d6d6f1526904","nonce":"6a7584fbf93c9e31d3f66a0b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c7fc6424744092d60a7316e999178d1eef3c25adda58049667873fa57a2fdc66179f06da98aa9cf694670ba7a6","nonce":"6a7584fbf93c9e31d3f66a04","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"efc54408a42c66a387c9ce55114f0af9d3b8b4de3ced6918d327088421d41748e0a43dde59f001c4cf2bd3a4ea","nonce":"6a7584fbf93c9e31d3f66a05","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"aab38c2b0e86a2f8151da17abc40eb20625a1f0c26b03009a6fd7d540370c6f4"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"98ad5e6ed780775fe9664b13a4071d29391c5284b6080be6030e58976e288138"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"570db86edba10ecc6ce2714bef20edcbdcc8e12b80d64593b1b2ad40c1b9449f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d20ccce491be64cb4e19b6edb3bfb7f47f181946fe50df348ba9b6e0feac722a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9ad8b770dd7b35e24f9729dbd857d204e1122df44600308cd8dd3d29967f2c7e"}]},{"mode":0,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"152eef656d9c65f0f8ea3ca383392de3223b38e233f89a8c6a34b65583159cd5bccdbeb22e770819baaf5358ea589904db6669710600c202","seedE":"6e8a3ca45d8a7e5e65e553c1d012ba92ec82c93b337800cbc2ab2d6a444d63722c163930fcd4e1830019e6fd58dee38f6523bc6e50e327b1","skRm":"5b25cae27597e1e508b48ff3604a2b4f995faa4473d05597a06733a9c58e48defda48e2e036fbbc2213c9dd369b9aed000d032afdf8d7134","skEm":"f15a64279359020b052f5f58f1a8a0682968c1fc33805bb30a484706aebd7c07376447293f43949c1a835459fdd834b9b97730e6aa0448cc","pkRm":"59fab7e185bb71f3c33c092a70a052151213b0052333c0cff61e8d6f67505216b994efc3b5621a72187b80b0ec0a8e0b03254061689d39ea","pkEm":"1322fef7cffce45496a8cd37deba37b171ceccf615033872491858da9333b6a5a23a9d7f11c50f8e5478ec2a60d43e85c0ea879522cb12e5","enc":"1322fef7cffce45496a8cd37deba37b171ceccf615033872491858da9333b6a5a23a9d7f11c50f8e5478ec2a60d43e85c0ea879522cb12e5","shared_secret":"345013e8a9d4ec33d0c78d3c0f632d1c28cac291806a33fd007e268d54d290cd3c6c4a9552f64fc53b20c54489bf64f2bffb5c3fdaa6d38bc77049d7f56122b4","key_schedule_context":"002b8f02bd1528e10a5db81bdfd552f8ade1fcbaee98c6171d8742d4b7eacc6e5dc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"631763a3bda5d9659cb80582a510cc700fc6778a87f53b0f0d44b915be216c60","key":"470eeb80c458ac986ed88b7bf3732d7d77e09402d766b58b5b58926a25a20902","nonce":"26012de04740ed1fdae0b335","exporter_secret":"7016fbd2c332b3adfe0c0189019724a3222994706ba85aecd87401fe156b54d2","encryptions":[{"aad":"436f756e742d30","ciphertext":"263642d6c87269e7b81b005131ca08aad7cfb9cf82a5dcafc7b5e64a79bb0becb8e6db4ebcc5ac8ede95002851","nonce":"26012de04740ed1fdae0b335","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"0e88e9c0ab64245ed4d5947851e9b1569c7b6060e056a4d08ffbfd78514390842f566daa71ab95268223b93a8f","nonce":"26012de04740ed1fdae0b334","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c59c5bf707b8e9b1265014bfaa869dfb9170cee4ad77234b018c585e19e261aea75ca7c471dc7b62c1a3486903","nonce":"26012de04740ed1fdae0b337","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"afc4626114ad4c7a85271245655a28d183c06cc9e4dd87a0f1e059b9958409e6f7ec73bf426f985d7c6ef9bb5d","nonce":"26012de04740ed1fdae0b336","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"0270b9cf34548e25a8645c3a1aaba18c585bd1d1b465a9908bdc14f0e5ff8ed5d8622cab2621460630de29912a","nonce":"26012de04740ed1fdae0b331","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a83d4b8954539fe3594854bc687d55f4810763a756149b8fe868f07f3725f7c31a604cd8b7fbd73d4256759f6b","nonce":"26012de04740ed1fdae0b330","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"f92b53f97af7d4d9ec315aa10ea16934930be4e0128d0f3cd51b7cd0dd0df19bed23768a50fb32f87fec627834","nonce":"26012de04740ed1fdae0b333","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d1435a299e04e4a00f2e878d4efc81917ee37868cfffe01a402211fe0e91a5f1aa678e9712d539f87c2ee42c9f","nonce":"26012de04740ed1fdae0b332","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d9e273b0bc3ecef3f278965d51a362dcec6aed400f029c70bc43eeb345e2f71a71bef3ceb8d7810a4bf3af7921","nonce":"26012de04740ed1fdae0b33d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"cf355db0753cf6c6b29a79cc8a88c14e0c332c934404362b878363557f05bab097e1506ce03fa496b31a6ad23f","nonce":"26012de04740ed1fdae0b33c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"b8479d310d5b93310447b6ccdd5f5f90f20d2a991ad91d459731e732df675565"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"ab03e32dff5709274ebfb2d8b030d3c9b2255b50875170ba8915ff7d0f1b80a2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0bee7658a03ca765b80c827b45d885f8cd3b7b80aedddca264fc604cfb8c44e4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e6f48db0e5287d8105b5d9f18e914e0c10f988abb26deade9eea4fbafd392437"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5c4a9f02dfffd39c3b6f69ac6156a7b25098f04d82ef99aa6ec62ec32f05a6cd"}]},{"mode":1,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3f31c1a6b129d952c00429c53313d8b05fb1d87ab7b1c223e02c7e502cbfea24cb772f2e09ebfbbf1eea53d183ed0957d71135f6abe613dd","seedE":"cbe7cb1abc04bde868eede5224b61761247a339ad66753865b44bf88db472d28d62ae9715147669486133688214e10974bbffb0fd3181140","skRm":"8ac84a55aad6804115ee853ec8a118379b9e6b25f38a466b7d20ee4623640213908c98da599b44d1f193bed52af5bf87fa34df5a4b7097aa","skEm":"b13ebcbfe9c89a3b55d5937c3c9c2a1c8731715cfd8173d692803b9bf1531e724da45600d8c5c7b8c6b052ebe6bb9a26c6ec6bef8a6d792e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"d4c749a7351bb41a8ceb3dfef5f5c795ef8c83361049d86c1c8fc839d6558fd1812c93f6327cae4c773ed151054e212d8ccc7c4cd4344c54","pkEm":"5b69ea3b9e318523ddbf3278eda6ebf86016ddd7629239cfdfa4402714b40554d97d778e9b58053d2b444939c323a85bbab467258d3af2b9","enc":"5b69ea3b9e318523ddbf3278eda6ebf86016ddd7629239cfdfa4402714b40554d97d778e9b58053d2b444939c323a85bbab467258d3af2b9","shared_secret":"861893f7cc4f900c25b8bb55d3b5f2acb604abee65895266661747aadc30faca5aacf415eca88dba80fca790889d281e1ce22d07b54f26a21c5da74d0ca0f626","key_schedule_context":"0160b33b678eb261e664f7ebeb4c9f0e2ade08c83dd68a7b83cf15b17d3191379fc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"b8d767f8febad22ca72180503ba0dd26d40d345072b1d1f3da08123911301f72","key":"5e96521ea27acec733b0f10c6355b4fd66f3c2dd3f810902ec0533c2acf2762e","nonce":"97099d0ff5ee002c4b136aac","exporter_secret":"f1d2f974cb54ab869901a0a01c158c4d063579fc7ea118c0852d8ffd17e97e4f","encryptions":[{"aad":"436f756e742d30","ciphertext":"3f0d91321c0eebce712d29d0d8f6ba07e0e582febc70b0ae07e031a659993ed2ed78e07c25961db4cfddee0eac","nonce":"97099d0ff5ee002c4b136aac","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3ed6b2ad5fd06d5f355aa697e5a74f40c09c84d0f630c6f61215eeb0c27beaeee983dfe2a6d61bc7aa4c8e728b","nonce":"97099d0ff5ee002c4b136aad","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f8118affd70ebd55a5a0ddb27ba923200ab0987bc16c653de3da5a59b38560c2b874ebac6bde5121da59253052","nonce":"97099d0ff5ee002c4b136aae","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"81838b8a5c389295ebdde07201a189cbaa77643633c080850ec1124209f927bd4c4b9a29448ba69df0cb05940f","nonce":"97099d0ff5ee002c4b136aaf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2015d7c06c792fd5bc9ec2fb9fc2a4a29efcba9a35123c38ab0f16475e0c23a50bd5b54660896e468cd46dc77f","nonce":"97099d0ff5ee002c4b136aa8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"fa0b0b8f74b605174ed007eb56d8bc36f5a6cd62bd3d4efe06dbdf6e58bfd9595cb61b9dcb5f16d5738c999f02","nonce":"97099d0ff5ee002c4b136aa9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"35285a47ab789afd3e2b370eb03eaaaca9f51b8f2e98d4e62959a76a9d8fdda192292c70b49b47b84e4cc9bed9","nonce":"97099d0ff5ee002c4b136aaa","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"39ff6d4702566d3e96c8f29d5b9063928c740de80c50ebf33a56a614ea5c0068ae71dc56200675cd25fd76559e","nonce":"97099d0ff5ee002c4b136aab","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"0f3d82a85023c63a9bc3a33c35d55b0f3089dfbd1e10875bcbeba66006646d1684aacbf4d15348c89830707292","nonce":"97099d0ff5ee002c4b136aa4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1cd3ea58da0622cfe3014e9ac84ed4659f408f137793bd8a9f128fdaf98a5bb50bf038e85e40f2b7600ef8a4af","nonce":"97099d0ff5ee002c4b136aa5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"556887468e18082fa78688d3f0485e26ef9bdaa983adc09aaffdc28693844d60"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"57c3719dc9196def5d2f7e159fdb107b9c724a178d724aa89f84aa453dc82795"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"02d7d395a9b890223fa29265fbeccfd2c9d4e1ce4f2d337e6b465aae10ad1ef0"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"cce4071e42b5c1c0befdc4139bffd91075fbb45273053bbe64eb7c06c1296f4a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"73bdb6adeffba85f45895e1c664fd30988f889f64d46ff980e4ba3160441e9bc"}]},{"mode":2,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"25287cfa577abaf5b9887033e1ce7625541104149bc6f860a4a21c014f9c0571549bd2ce3f790a85f9d59cf66777ce2f502d491a5cac3dea","seedS":"3e3e1edf4bf7b595cbbc7899b2b480e6f7b7b0584ec55e4ffad309d68f4fbe9f20c94179f9cf8b854701c2b2c7060d9a08089c3be546d333","seedE":"2ed5e9727dee68d17536d127b54c75fb5d35fae432b41b8ca0e47c679c2c9d68e168054d7536686469cd04fe6fa4c86356fb0bfe80af2f65","skRm":"4ee4da4638a72a53bf36d19085b438da5666f685fc771036b6d1e5d42ed5b929b6894cbdcd7c622bfa89e472d43fda0609962d896d859548","skSm":"701c906748ddd6fa71391f8e2af54f6cdc9012133accb2a57955c294454c01e62cd4fcadbb6250a046d4d8d956ed8fdbd8d076daaf9da872","skEm":"dac7e07aa9dab5731d47ca19a466bb02221dd94132d00f4c2323e62c5d67affd414079955cfa2b787d5bf10f781ae64e5e6937f04bae1760","pkRm":"264c22ac7762c8d31fe623ab796792f919f8873bb7bc2e9ae2b65fd277af42f300ae93b44aea1c9d0ba470f497c82fd8ef2c6dafdb785acf","pkSm":"c8eca8f703c77f9f1b0f035d7451a1d5ea30c396ebb32a761ec59e99f77077efa9b92d78150b78f9b580efc8f62a078f1c06ebca082d961a","pkEm":"02e3dfe93f39fbd0de9db6876a5939d147df2df81cce43dd8500bcff541a1e94c7db88d6e23b67c36f77e12fee7c06190ee6b45dc411eb5f","enc":"02e3dfe93f39fbd0de9db6876a5939d147df2df81cce43dd8500bcff541a1e94c7db88d6e23b67c36f77e12fee7c06190ee6b45dc411eb5f","shared_secret":"5c88ed198157e18205072fbda016c059dabf4720d883b8f54163183a065cbaedef1effb169ceb4fd5eaa3143ab1de35d5b7ce8d1a82d8e8e81b050df7d3417a0","key_schedule_context":"022b8f02bd1528e10a5db81bdfd552f8ade1fcbaee98c6171d8742d4b7eacc6e5dc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"b9f018fab9bb8863a1955aab88da7130ff343a43450212a8d0034d4ab92030b1","key":"5803804b27e31a4c226d8a519235fcfee864b0b227daaca9c53afdd88224c84e","nonce":"cd059158c6e638ade09bbc61","exporter_secret":"9769274d1ab2a934242bad5d21afe445edcaa4678790026c573a90580f8ae453","encryptions":[{"aad":"436f756e742d30","ciphertext":"f8ce7a7c2fe43f37bb5cc35e4db8fa232149b45f2d95ce3f88e79b54bfbfd5ce77f23ba7472d5ca8247b3d9332","nonce":"cd059158c6e638ade09bbc61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"17fdc08a7893af23c5a4ebf889bcc28e3d9b3085ee678ca9213ff3345e590276a9c4acad0b81e7e74180986d9e","nonce":"cd059158c6e638ade09bbc60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1a955bf88b30f183377d8494d1a676b1a27b0d2be68fdc781d4aebca24741f64e476ffd139f7cc6c334e22e2a3","nonce":"cd059158c6e638ade09bbc63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"5ebb4d7d7919f295df2e4fdddea703b2da7edaa7389dc6b4ba6bbed4bec60e22df43b104cca13f0f12f9406ae0","nonce":"cd059158c6e638ade09bbc62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b98f8bbb65eb82d4a9918f770648f4f40920f5676c534ff4ac6fb53a24d8800bc39600a3c82a7b311de31b9aa7","nonce":"cd059158c6e638ade09bbc65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"08e580f6033214f25bc032fdc14a3bb661557139f1ca976473bea371482705756d1d2659900789f6c27cbf9eda","nonce":"cd059158c6e638ade09bbc64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"923080e329bdc7ed64cf8ee4e5bb8c3af1a8002b2cf96b792214234351f2db13f2b4cd2d43a2e6dbd5f508ca0c","nonce":"cd059158c6e638ade09bbc67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"871455d005ecbd0e19a5a4214acc71308752bd3b6fb163462ffac3bde9125e1894b194f306b127c8d850e27ae9","nonce":"cd059158c6e638ade09bbc66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8fbc6f2e6dea47eaf5663611e87d4474381f07b638a3c12f6c6c71f3d57fc1398f59b780d59860fe728048045e","nonce":"cd059158c6e638ade09bbc69","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"67c8041dde518f2a13f13dc4a3b35ad351f3d46a55ee836e1f311bd9aa0bb1a459b87b90cbc98c06545109ffe3","nonce":"cd059158c6e638ade09bbc68","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8948052d92df634cf37ec6ae4fa29695bdc8a6c6d7713bc89008761f54b9e698"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"7a1347fbadbe6931da5b6b68c1d686fb4c802015ff0928c7dda275baac10284e"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"82eb6e06e729439445b9ef494c87fe6ecfb1e8eb3407ac5efa82b2625da1bfa6"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"f80f5f3ed1b4d1c3dcffd6392bed02c97299f18135ec136a0eec90cec6750c57"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"54b203a3d58378bcf839eb5b998d509b80cc53897d24163ddb721587465deae9"}]},{"mode":3,"kem_id":33,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b40b5ff469deed2ad6363d2554f1600ca4206bc6874381ab9fcca2153d2f6c6ca02339558ae32ccd1ff640030e321f63fe1056f7716122e2","seedS":"c10703a86b8e7274ec4ca8f5ee3a1696960ba9db764d517ebfa37567141d7af0fbeef6196fbfdcd76cec65d228f23d883dbc34f91eb01bd6","seedE":"71eac45a2e9971054caff3b70c0355ced179eeb0b041a63c48d8cdab38bd961ee9a0a46a2d190311b3c0ac645bf00f02d9a68defcc0a0d2e","skRm":"8c3a62dbb72bb89cd35a3bdc422bd27f49dc714d1435b6157f42174bd8d109c55d1885da65e6212cc766c70592cf8d9d1010e91d8f8256b3","skSm":"4e1d51ea700684c53beb805fe01b6bf8f0cb6256f04d9bbff39fb2b49b965aa7d1dca955846a68bd65c97be151895cf3255d85a4d6f4f94a","skEm":"3b77dcaea6bfc14cf89ec89a3370e9b36d0383f93644ad10d4c310e3a7d3818606f2cdea3495d64dede5d23e7fad0ae358f3c439a2b13b4b","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"a0bb840213bf5800d13016fe35700872d3b403bcac14192de7a3cb3b5055ba2c8926ec28a7f57a2cdb615e8657b2ca38edb78c7edb0588bf","pkSm":"87caeeac827587fb8b6edff096b8c7a94d32eca43367ef84f7ab4bac8b2af2eae7cd17cfa394b48be757affaf9fe50fc8f0d38ab9d55d7bb","pkEm":"4270618c60c2e9a48fbb2b6b81b0f7b3148383393e6f8facd5a4c67960c909fdcbb73150326afc0e0cedc3bc0377cdf1f4da489ddf367e54","enc":"4270618c60c2e9a48fbb2b6b81b0f7b3148383393e6f8facd5a4c67960c909fdcbb73150326afc0e0cedc3bc0377cdf1f4da489ddf367e54","shared_secret":"1e683726676fd1c6421e6f3cd46121d62000005b923756a95dda5f84cdaddaa3884d28dcf92042805338f68cf6c0b6369a7b91c44b78949374fbea44c0031828","key_schedule_context":"0360b33b678eb261e664f7ebeb4c9f0e2ade08c83dd68a7b83cf15b17d3191379fc0145fd4bbe76b938b1db8a0015dded39e0f54ec5bc80dca911db0c14bb1cba5","secret":"4c85e58fa17bef7d0646af59cf06614339e0538bc6be79bc980cb1a1205b7b25","key":"6c5b4bb172966c369798511372f6b3466fc0dd8770135c128aadc41c89df5492","nonce":"72216807db1ad3cb8bf336e2","exporter_secret":"f8ebf43478a0773cf7dad5e176fa2cdd6fcf75798a43f5ff90adbcf6066d2729","encryptions":[{"aad":"436f756e742d30","ciphertext":"4da7ec65d462ecfa94de2e20b8e86891d2852da25ea7031285e66e022230359d6a9fb3ae7b68626df9f271f544","nonce":"72216807db1ad3cb8bf336e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bd9d78d9e0b6f152cf4c10192b22deee3df3d452bc29a8277beea09d3f9397dd54c7597bc2536ff691a73f2866","nonce":"72216807db1ad3cb8bf336e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"92b71616c19dcba3daa30d3f96dc6406955da08309e2ab6d90b7baddd61d941cdf12803fc3333d1033eb9fc22e","nonce":"72216807db1ad3cb8bf336e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"94d0a5018d110d3c881c3130c752b9db725df51e1a8c163aaed7ea24a8777e9f885eaa7b3a5de1899870d70986","nonce":"72216807db1ad3cb8bf336e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"7c90aadeae406d1b0cc00ae9e28924c12a81af3354ed0f9e53bcad1f4a45634a5f84b5b2de53652df151290134","nonce":"72216807db1ad3cb8bf336e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"01d4431079858e7f56bce4de406d072d945fd3c38341064cabef84aa1b67a1fac1ba69354f39309f247704fcca","nonce":"72216807db1ad3cb8bf336e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1f59fffc76b067cd2716bcfa6a71d7382a953713ab1a0538fc9369ab772b5a6eb4d96cd8b161184ee170889940","nonce":"72216807db1ad3cb8bf336e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"079f62fe721ff48ef01d4491d3aff6837f23c63e0219238efa42d916a18f323a9d8c2c129ec68141a5e32bf601","nonce":"72216807db1ad3cb8bf336e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"23001a980c108791b7d153ff9f81594c5167124735c7feecda7da93cfc857a4e8bae9d9a6c1909afc4a32d489e","nonce":"72216807db1ad3cb8bf336ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ab310e1e2613af557ac63e2c752a0c4ac487a387decafb3199b140e9307054a74d5ca3d5a8be5341b26a926949","nonce":"72216807db1ad3cb8bf336eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"825d5f3f3000d98a056025dafc2ab80d905b0bc4d1e317704a13d3fe3f599199"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"73b63aad01e20c74173aec2bb530d39f22393524939fa1e3529f91a16c61be6b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"ef3b95c9778bc495a23de52dedc5f7a84b93e6e31e689392e01960b0b06b4783"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"a7757e51476a9e200d22bc4aff2eae57a0eb69160ad4db8806c6d440be6472fe"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"964ce7bca098643be539b9d555802f6dd1dc8030123dce4a979e6088eccbc874"}]},{"mode":2,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"27fcfcf1a55ed562445ef999353a1894eb7671af8ce6f03151fb5d5f93235f44da1c32781168a448499c8fd2b8a4828b0088e3d7ef9abec8","seedS":"22a6972235a42ad557944c5d36f4f38e3659794aa399a78c5beb5b037c5e2404d57e418f9080edefc4c525fe47c1c89d45ce072d515b45bd","seedE":"af66c36135c57286feba0ef23ccd4fbfc6f12922556150c109b362db1673af446b8923f3d2013511aac1e154d28360be1b2c5309c2d3ecdd","skRm":"61cf934d4a15734121195eb4bdb925e754920be595746cbad44b3cd020c90c37f01b5c982897cbbef07b1cd55194295ee4d9cd92878bcb2e","skSm":"0e00205f71f1f0c5818eae997188b41cfb7a6622fba5cc7577173ad5240df15f9a285650269b8e881ac4cc2b34abe72ed6b1fd266fbb7cc2","skEm":"41d7dab149bf26e26d93f867cbdac4b10c6203e4fb0e665e59bf54059bfb1082ec3809a78b3599537b0614a8a7df698771ab60f30ccc5812","pkRm":"25c4f6870d74f51dd7dcd0b1dab37edab70114c163840f729f04dfa6b1d2ca2624d68842c7d81c4250b32afc6cf85317a487fd63a8c5b81b","pkSm":"b16c9e5d76483478c8beca90fcbaf8b17a25d4ab32608d57ce1c1861e6bd92bb2d38450ac2b1d8cf34e1d9e85e9e39d2587beda8a309f3fb","pkEm":"82aa10cb64ff3be99241d81233445f530b5cd8f867cec70790de1363de94d33cd5261cad9d2ddf4d8718d0bd94f5a0cc0ff34320a6815c42","enc":"82aa10cb64ff3be99241d81233445f530b5cd8f867cec70790de1363de94d33cd5261cad9d2ddf4d8718d0bd94f5a0cc0ff34320a6815c42","shared_secret":"8ddafde754208d8430cbd9c1cedcfad641d7f173584f83ba4a366add2bb22ef0f10458fe9c6fac1ff9cacd6835cce38c2ee57d2875a2f0f0fa924d1741643822","key_schedule_context":"025d51d75e5b6f166cd8b3f200bb9646620b4b45c205483628fd330118ab8b530410a42988985d900acb2d52b068b37da9a4fc1c1bdb2952941a95db6be723e5c362adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"00d19b2f3025c9f8872edd49a054e6f6a5eed8d4124f30ffc07b4c75e6c7569d763e485cbed7787e4fcc87633caa8f73ecee4fd6244006e15260614f42f48c28","key":"f7b9fc5bd000071914939828181889a3","nonce":"816601c863fdfce9a4a3a15d","exporter_secret":"0c9e3f5f82b5669bd027dbeef29f0c1213a893c8e9f498e70d3caca6dda0a81df4530ef95ca3c99f949173f6ce02984c2a1e8e8760f8521001cdabc0387d4d19","encryptions":[{"aad":"436f756e742d30","ciphertext":"ad72bc52aa8073a1f90556bcce259b2d565be9a3c114df8c0c1e3eafd2f4228fa971b8ca43717a5fc5e5804c03","nonce":"816601c863fdfce9a4a3a15d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"f00127e0c443931958f701883007b6e1a50a6b10c1461990a36c62b7c1fad053bf7328504d0a22ff114a649493","nonce":"816601c863fdfce9a4a3a15c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c140c5d64f323a4e55dbdc9d4ace434e81010ea268bc66ef79d2f98a343e49dfeb47d8f4d03209c19bad9406a4","nonce":"816601c863fdfce9a4a3a15f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"71bfb9ad1af731b7192d75ba5acbd7c9404718511b5f3e4ad439fd709eb2802e38f1fc50757f28d65bbf7dc855","nonce":"816601c863fdfce9a4a3a15e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c9ec025105ade2d803c7b406e5e4d10ed00897253cc7f577389749d55012c334de0da94bb2517168e28a796d2f","nonce":"816601c863fdfce9a4a3a159","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"2d90c3472fe774f62dbbf8795b0df0a8069e2e60a7872b9c9ce3b750c5368da65532170911f1608bcbf4d45e23","nonce":"816601c863fdfce9a4a3a158","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"99ba751a7a4140ee3233b8a16a0f5066640b8399ea718cfb767f7ec86812c67f791ba8f9b4a6e3243b3c1979ad","nonce":"816601c863fdfce9a4a3a15b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f76142aad62ed75f3e4f70269688d7d6861f0b1b0afdabedfda6d32850314f7297ed47510912ceb8d2e1e49de5","nonce":"816601c863fdfce9a4a3a15a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"056de5d273f7e561e64d9b90bc33751cee6955ded05a3dd959f0aa52e7b18e72c0c6b055e769525025ce7da1cb","nonce":"816601c863fdfce9a4a3a155","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ccb02cf3c17a635a4d2770583073d745d8d6baa8187efe5c5767ac7db5fd6288051aa802110bc0d869294e2514","nonce":"816601c863fdfce9a4a3a154","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9d783a7adcee76f512f21ae44c63c735bdb230c653ae87c3a6cedbca5e29f080"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5d8e2f1845a7e4a99036b09e364243a99d02e86a98b62b932f19f1a979aa0bb0"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"87bbea40f8d47428218666f2db76ed4c7064c002b2f0da00193dcdc0104181b8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"4e5c4b7de90713fb3083f9628ade164312f54ecaa83a21ac8e25f7e6f9c50d09"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f7a1fdaa32a4974bafe0cf96c36bc73b210fe99f2719c595077ea0c0d1f0cd88"}]},{"mode":3,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"492a05907c9333451345b9e3e9e6e773c3abc580669d95cc420f4d0b41b96b7dcfa73218c35971095c5dff55e3c5c050a8befa23eae54c63","seedS":"de7e57886f023a5f139fecbee0028c575e69c381ed766e708554bd1caa3867fcf6c799d3daa575299352107822de4623e026a2050bd9b229","seedE":"0ab4328bdc77d0c7de08f752bf5e7b93aff5f5f01b151297b2f489721e0e9ff62cc0fbb2af32c1f94615751c0dcfa3c5d4feca8fbee5e5f4","skRm":"e8e9dc198f259e6c902eaac03efabeca7c3b1ec48aca1730f59c1ab79f1ded8edd530911fd5514b3bc68c049d6010b15bdc684f4ea9214a5","skSm":"d8b46cd2ea92de565e620093843b4da23f77b6989d99995caf0b1d8940af7c59a8ffc0670b3e48dfd45bdca0fc718485304b6237d1c53935","skEm":"3db80feb1d68cac9ec2b4d51aef14bbc60cb6ab35fb5098ef27f82bb77a4893636a0d835477ca9c1c50789f7711ce5860f7c4f9c0bc850ed","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"02e85703d4aa1bd51fe239c1d199e902ff0f2cef5a07a9457e352fdcaf2c8fa326d01950a3bfe465c3d5a96a735898d6a2223a1108399255","pkSm":"988dcd43a6a9e97bd642fcc604f9d7a13f1e579eced688b7cdc46b4dba3b436a097279c925cf48c0d5f3a360eebef655542576e661163a3e","pkEm":"49f736fa1851d53335a14666898adbfe37f69a9a82673271d5212c6d1186d4ea2d025936319223626a72169279456a847b2ca31ed7985ad4","enc":"49f736fa1851d53335a14666898adbfe37f69a9a82673271d5212c6d1186d4ea2d025936319223626a72169279456a847b2ca31ed7985ad4","shared_secret":"514222683da8588d53b89b526c1ed5b05bf35f8f8d073499b951c67fab37d2ffb93d2b3b0443fdc96c96b419f78d9254c02b899e16dcf7cf79e3e5e7f068d21e","key_schedule_context":"03cc21a52de94b0a329e224dd508f16ef2a0ea4d49a6dad47e45c9657e7309d5f5e8673b72bf8a440dc517e88f4bb22b990cb594b65cc33814be7ba4f6167492d262adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"484a8424d063dbf353979bab4bd642b5e4488b4aa2fc7482463ce32f75f1e7b827d3865850faa66572ce8fc43e75c806c5d491f8f5f785f1b438a551a6ecafac","key":"573a464751df979ff0075f357139672f","nonce":"89861896be87d3c09120026a","exporter_secret":"34a4e7b423f79694000c18d93780c4bd5060a3c2997fc27c71c4709ff9802269c58a8790cad5a5d140cb8ae4c6b10fecdea82fdae147811d4e9411a44b0b8423","encryptions":[{"aad":"436f756e742d30","ciphertext":"cd9e3aa1d093b4e0d21ebf098d8db95f32a414a870479b50d2c906a07ba1863182493a651cfa95eda655245d2c","nonce":"89861896be87d3c09120026a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"23cea2fec3adc34073546237cb16ba573de1600355f86f56a7a94365cec14716961e4e2e2085427db145bc5e17","nonce":"89861896be87d3c09120026b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"4ff3846cea6e14410f7497af988734f403c2abe3996df2b4360ec66051bc3ad4c9f198f7a0b145569f91f312ef","nonce":"89861896be87d3c091200268","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1fab75193fcf2bc77ed03bd0fa3a0ac8db9a54a12fd26c7d87e2cf218c505429d60efb6c9f5de4bf291c3639f5","nonce":"89861896be87d3c091200269","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6858b4624dc6f7cfebbbfdb91898a269a5a173cc2a849024ab9a81e598f28adc958b0867df6d54605b3cc29544","nonce":"89861896be87d3c09120026e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"50220690603568358a58ad6102b1a4f13b1b62ba53622b1293aef183d2ed6ded13a826216a28a4c21718decd81","nonce":"89861896be87d3c09120026f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0e22702fcea9c7fc450811be23f90e0f884bc49c60bc04eb3953ec8ac59ab80d777126581b48ce870a304e0344","nonce":"89861896be87d3c09120026c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5dea91cf3c6d5ba0e4ebd4c6ae5b89085fdb33c6fc30e1016f7adb00eab466996a21c294a194ea32e5c04b23d4","nonce":"89861896be87d3c09120026d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"1fbf1cffa7abacd1dbdb081ea942a5d47773910b8f30fac45638597ba72ebf9087099c95776fdea429ea9835c5","nonce":"89861896be87d3c091200262","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"12ae8e5e3a4b09fb78b22449fe457d186216456e2c32bf546bbdfd6dd82cfb1204207320542903b56510219ca0","nonce":"89861896be87d3c091200263","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"20796a9fb6d464a8ebfe5a64ef97c3e57935585fb8628095c5665af9a22246d0"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"10df6aed035d8adb65e65f8d534e853ade16d762b2ecf972cb70d6a5f550f83a"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"ffc793d331e22990ede4a0a024f4ef0132c6537328c5c376f8f77cd2bd9ac27f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"7ed3fa7a37c5466f72e6ede994d21c6316d8f5db977854b9d22efcd742895746"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"bf215205266401791f172c334694f007fac348585824dc6527d2c9aa3e8d3e89"}]},{"mode":0,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0f19220f2681231e23a309f507b041ec8540b3918e5dfad94fe9ed0109435e65973ad68a8ab8d58c6d42526999620c8d2aff76ffb376aa91","seedE":"6050076722962753ef9a009821c53276d2f4a18017b8bb92785e026d8168f37e9fe0b18942928fb7eb117a08469ce121490e0e6fc833388d","skRm":"3107a207cc726b228abd268d828aa306af1e92f009792df8107d98009ae6613aea3561ddbce8666ada8f74e278389202949df00540cb8fb1","skEm":"f3830255dd9798b8605691e0829bb4d81590cada8549e78f1a3324a88acd731733a1c5f242b3c7226533207c8fdea9e585d0d5640140452e","pkRm":"33f79f1e42558f1fd0864cbe376fb245bdca880fb3d97421855c4292b4bb745271e4cd3825bd050ce0797785f0f72cd40a479a5123ecc11c","pkEm":"98c2c211cde375f23bef4106b3ae9cd68d2c05041951c65160e7cad40ce653573620a4b555595f552ad28a9acf41863696bf8c690390d670","enc":"98c2c211cde375f23bef4106b3ae9cd68d2c05041951c65160e7cad40ce653573620a4b555595f552ad28a9acf41863696bf8c690390d670","shared_secret":"b041b9db313b0f6a884a0e8bcbc7122035f97c96c896f4030a4ed64bb78479ed6ff44074f311e78c548b65cf3c49402a14d5f5e5bc65bc962c6af82561d01ca3","key_schedule_context":"005d51d75e5b6f166cd8b3f200bb9646620b4b45c205483628fd330118ab8b530410a42988985d900acb2d52b068b37da9a4fc1c1bdb2952941a95db6be723e5c362adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"ac15e386cb4c1603f8baa59eeaac90d9a6478f47140c686d0e6b1d33b8adb8ce53552fb98827021fadc0c119a63c451cf1c159c0b094444a291f20c9a911d95f","key":"73742d76103f4c9cff35fca35e7b5add","nonce":"5d052acda60c2d966bb034a1","exporter_secret":"cba72cf36c19b940db9bd01454eae911afb566b5c474ff8b58450e0270bcad10f945feb420b527561fedf7f6de6ec99d8ba7aeeb068db011ac738c53f56f0f77","encryptions":[{"aad":"436f756e742d30","ciphertext":"cd601f53e81152295b84c531f919fc79096b8f5c62d15cec196e856078f70c24057db0007172a593d0b199b012","nonce":"5d052acda60c2d966bb034a1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"51aff83472028d64a11ab0339dd92e134b28d0e8d16e3c9771630e95b8acc55dc1fbbf4b9a6c4fb288d665207c","nonce":"5d052acda60c2d966bb034a0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"6c3e9651739351ccd6d1adacd2643c522d8d1157ad8b5b36069259f544572a120f4f3e912c7e88af540e9c3104","nonce":"5d052acda60c2d966bb034a3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"081174e7f23850c0973d0d9054b3c9a6fca9cabecb37c3b54950d187a2cbdf77b97dd786764edb648f74a26b20","nonce":"5d052acda60c2d966bb034a2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"15866799bdacd4184143e06c6d7a7991f4a45b7166371e6ae7d8ce447a1d937b2d11cc60e1b5efadeb03a0b317","nonce":"5d052acda60c2d966bb034a5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b9ef89bb296d82ef65f46ac3c3d0370309867e9bf6723d09da784fdf9120c24fd030d0bf0f6f32436fcb8fa29a","nonce":"5d052acda60c2d966bb034a4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9dc10c4ca633265356564144953ad81af098d11bf68ec9ca0918248e2708a2f609b6e79a4451a4d074d4188e9c","nonce":"5d052acda60c2d966bb034a7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e97a7258a5cc6f9f3d8edd226b9908a6c20e6542347e08c88bc7e098d57a6787b88831d52ac0da51932d3c2ad4","nonce":"5d052acda60c2d966bb034a6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6051d9ad419653b97c9d1d9c9bfc7c4e07a230605af5e9919888e3b62e314a6a262aebc42f55e594902594d952","nonce":"5d052acda60c2d966bb034a9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"bfc202ad0d94bb762326233443c491b19b67042abb1d2631b249e14953c5e4d780fd83cb9e0aaef8f73cb0aeb2","nonce":"5d052acda60c2d966bb034a8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"59ea4af8da44808957f8f87ddee9277bd336a9540e6640176f45ba4019c96ce5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5169ce1517ab3638ebf4e546c9f085f291ae1502e1df58915956b7bfcc896e53"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"ff223c7c1731f0ee8800f767f5ad827fe8fa6e70d196dfe034821982e9265073"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"19f7b26824686d8bebb1c58a671f4b6ceed9bcb8289b056547ca52689045b65f"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"653953c2761895008cc617c346ea40ada7c1d46bd58d00a4e768d0400998e9d6"}]},{"mode":1,"kem_id":33,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"4a8ca6773ce624674cf4712be6532be268c1aa9e5a0d1d7674351cb0031353968cbf00d2af942593d25c45aa07aa64ae0000000000000000","seedE":"1015a5c84bf856f48f91dff4e02b203a4945a36d983868f4c6aa873c77be282e3171b1c7b5524436907ab4271d856cb435415cd0725ddc75","skRm":"df6dc8364055e453dabb1a410ca8184df78a909be951613b1935f42b01e79ce5fb58b29dd307a2673b463e8e3c60380c33c3f657cf36a7d7","skEm":"0f2bba5c2c9af90403847a72b107c33a156214d1321ea23057bddb2e98cf117df878db8c475d08e286cf647121b746782c4b9f2e56ddfc18","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"eb2de413057cfa13d57cbba12f20b3261b7e12c564c1e116d570ee8f7476fa1f00b327ad3194e9f6c19532a188f77bffbe6528f596d7cb8f","pkEm":"32f0064fbf6bfbe5e7be112f3dc38e61c7e6193bda7e727b229b96e2cb5f76552c0545b1f689fbdbfb35d031ceb44178ebcd403c1f2ed20a","enc":"32f0064fbf6bfbe5e7be112f3dc38e61c7e6193bda7e727b229b96e2cb5f76552c0545b1f689fbdbfb35d031ceb44178ebcd403c1f2ed20a","shared_secret":"bb5a259338a230fdda5714a910b1081ca6d6bb883091e824c6d54100efafba4da41b8721f8e89cbbeb66b2fa6eab904f4459a1b2040314fa9846a7c98d8eacf9","key_schedule_context":"01cc21a52de94b0a329e224dd508f16ef2a0ea4d49a6dad47e45c9657e7309d5f5e8673b72bf8a440dc517e88f4bb22b990cb594b65cc33814be7ba4f6167492d262adcc0c79cd0b968b815a83011ebe5c6f02404c89dcb6dd6b980095a163c99f19eb76bdd4e21cee08a19a1c50b98380ce01640ee02953f6789aaaa0ad2c45af","secret":"fda0bddae602495d0ec51802f4aa6217c1fe9b8ebd7a1b32e59b3b35881781791132838c9fa2df6f1fe2526507a34fc2605b0154b9f6caad3d3bb3f5dc7a6bf7","key":"bf57cd65eb3cca8c974e880355d6b5ed","nonce":"0efc3be01b60e273719ff2b1","exporter_secret":"01636a5329db27f65be6fd0f59d97f847df3695f443d2cb8e38487ca2990b2353cde2cf29d871c510406130c8f3e2460482499c7361d5ef030cc8ab7e6631b3b","encryptions":[{"aad":"436f756e742d30","ciphertext":"855ee4684cb2b7dffccf3f739fe7497148a480aa28e8202dc12dedd0a4f7514a1541674a3416698a7000417c8f","nonce":"0efc3be01b60e273719ff2b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"941ad4b75b2abe687e7680bc595146d9f7bb8f72e465ce4a1dad2eb6236cf9ba3ed3f4fa4981f72235db459058","nonce":"0efc3be01b60e273719ff2b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3067a38a01188974b337b11c35908ddea240614d922e493f9a8b6690a36ceae4cbc6022575795ce5f6386da423","nonce":"0efc3be01b60e273719ff2b3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"62fa57456b95553a8902872930242368267df2325286b47f9f5046c6ca7068d421171a8446e13463f0f0a1ec9e","nonce":"0efc3be01b60e273719ff2b2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"de5a69c74c2a238addc0aa9c734c03d734ab89f8591262f5ca8134ca56966b44e4fec3d93661c7b2a0890acc0c","nonce":"0efc3be01b60e273719ff2b5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0abbeffd9af3ba18a3615cbf9ccc321cc39f0d11b5633bbce45f9ffc32df5c90b6f68fb5764e3bd032c08b867f","nonce":"0efc3be01b60e273719ff2b4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"22aafa65c0b72c55987c5b812dfab96e7cc8cf4fb2b9f39a97128e97325fe5f6fff0f64391f7afe99e6ee54f8c","nonce":"0efc3be01b60e273719ff2b7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"128f0715b460dd2787898d9b33bc232fbc30b3be16605b20d4d09743c54126accc1a174bf2f0023bed6685efbf","nonce":"0efc3be01b60e273719ff2b6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"4e488d6061b249462696d49f7826a5fec9cafc49513c64e475e7c9efb4db09a20957406459b3522a4dfddbffff","nonce":"0efc3be01b60e273719ff2b9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"77c49ec9f77241259d71fa267f7663ff17d0484f735ebfa80ef105f477a439a559e7e9ef32a92ec85acb0007d1","nonce":"0efc3be01b60e273719ff2b8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"b205534f9bd4059548486b148dfbe4257dadacec5cf2342e131140ad6286cb19"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"bd3b8c3e47a88b1feb0053e79bb4b52b47f43d012699b827e67b18f359c6ca78"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"707114c83b15324de470377831a43982209abfe093bbfc30fa86b39903e45145"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"f27707e284da281348b2b0cfb2fdc5b67655241d9742252bb3c27f604d2bd49a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"82abcd8bd86392fa791c39b75f9da1ff8aa91f2b8c1bc8bcfbb01db30c92c456"}]},{"mode":0,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"12684735fb94654b1a127bc48ab4eabdf12eeab245af66a9f5e3cb79f30ce17dc477ade44170ad0f80c7b02a01473cb0ec928594d55b0295","seedE":"468563e1ebe7d0b8aa04a3c863a842428607ef45dd7a2b95425ec918dcd5c1012c9614523317e4f311ff0963fba4dac4ecf353e38291934f","skRm":"f8089f023bf6b0202cfd015d1ddb699bb5da08391f2fc5f349c0a32751650b173650e948d46464a1fd2e7be3716a2d64b815a67a250a5b4f","skEm":"ea774d71891fec036f2190ba255ab20224b0a88f8c129a1bb7c1d5097aaa6d8044b1b6ad89bf988fc5b8e089ab0688c12a14297f5ca4f3c1","pkRm":"5f8c4c3f3c94a51d098968a1eb9ed8b54419dc5e8143e3cd49e6f2101fb71f48b563d312d4356366a9d5bb0e80555da3aa31fb30e5c503b9","pkEm":"f64be0dbe9f5bcc5a3e9bdc34eaf7873f4163f98db5d00ce913af789013e82242b22854f66854ffb625f2c8ed02ddd46a04c7d3b48613f93","enc":"f64be0dbe9f5bcc5a3e9bdc34eaf7873f4163f98db5d00ce913af789013e82242b22854f66854ffb625f2c8ed02ddd46a04c7d3b48613f93","shared_secret":"6273e5d79d9c2d8db9e5dea73878a19991e7dadfffc37e4197a2bb985e58c76527e70e143cfefd57711599da2108c438a13ccfbed45c7cfb3c6ee6286d1a9708","key_schedule_context":"00a4a6828e50394582b8d4f101de1c624fecf9153b9e803944a8c22d8bf985a46840a56d0a67554a9ab9b5979a752796ba11b915ca3af1e418798f7eaa752d03eb4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"9194dcb174a36a359eb17dde349a5e3e41a5595649decd9244e9b91064c8de29368636cddfedd51001e66c7ee7dc342f755757efca041e4336177b9b3b27c437","key":"c314fd0f6be845d33338d0c3df6a71a1163558082e44176ca0469a055cbfb15b","nonce":"e3c2ba06dec7c1f8a046c2c6","exporter_secret":"293c7402516c261de2a32d0d81facd1410a042999a9b3ef14134e130fffb59e6f539674fdde330d5f24e9c24d14fd5b8944040f04886c222e9e0f5c604f2a8a3","encryptions":[{"aad":"436f756e742d30","ciphertext":"e40cb667cd288fcd5aae7e691e35202d2f2d7a4e5a048c9e237cf1dbd5970893559e8e0fb08523f00d1720d908","nonce":"e3c2ba06dec7c1f8a046c2c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"30defbd6bc8ec2ab827a2e7d05148cf0a5941cbbe4a925b92323d7df0a811e37296c780107d5ab003ac36df5cb","nonce":"e3c2ba06dec7c1f8a046c2c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"d14121acabce4245081cc291e35d5f2fbd19736bbef7a4141434a3e18b0ff83b8968005571e0462a64045b22b3","nonce":"e3c2ba06dec7c1f8a046c2c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"79da6a00596d80153ebc1fac08a15a5874b361573ed0c2a281b72b5f93f41b31ddb5824e7efa9948b21a399d70","nonce":"e3c2ba06dec7c1f8a046c2c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1ecad5b3d780ef9f6be90de9cc8681b1a4ae24506e170f91d729cfa052776e2a2a82bb13873b45109e90226a2d","nonce":"e3c2ba06dec7c1f8a046c2c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ee4fffc5e0ca32f39e7202963e3a88e1db57f909bf95dffe2436304651cfb3eca51cc7ff99cbe47662a5b9ae65","nonce":"e3c2ba06dec7c1f8a046c2c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"54aaf7bf3dab9b4b328ad01b9aec483ce0c9337b1bd139c1e552ddbe470e12eb4514d7f087f16d0effd0cb30f1","nonce":"e3c2ba06dec7c1f8a046c2c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7cceb10b88655bf5b81d6d61e958a3c509df7ed80686e9ee33f83a13cc671d69ad443479881d0c6e88fefbc94e","nonce":"e3c2ba06dec7c1f8a046c2c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"85b828bf7c58840a8a09e4f955ff100b5da4e65b1dcdc0a42bc34e4bec0886675822242cd8aaa99a06024f6e61","nonce":"e3c2ba06dec7c1f8a046c2ce","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"52242e3cb91abe500ff7a4c67d1e01b3cb066bcf9d77304d68f9b29de8c0d11d842d48d07046ed67dbcc07fe14","nonce":"e3c2ba06dec7c1f8a046c2cf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"d08f6cf70fd5d380d21ca0f8ccfafbdf20a6b1a45e4f145673e2e50f16c53c7b"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"35a21a53733a0f7211d032cc9cf0763612898ef2acbc63694bfd5fe61e5e564b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"76317113f198add5398b74b5ceeb44ef955954d8d6021a6f61c1fba30bc49f70"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"110899af64167e3f643e0911884f1841e0c52d3607ce9248c6c161f85c6bcb7b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5477ab51f582b7fe4574a3eb0e84c7c5f18ccc083720ec2db4b434601fdda5bf"}]},{"mode":1,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"e6423d7eac45b0ff9d5b642fc6d375f2960615175b4003d5335a242220da8ac58c1aec1d7e035fbea45c4f4b62b75de829b933c3039c7f50","seedE":"5b68c114f92f0d348b460c51f09e9e3e2983ac98e9194e2c6f15e44a6499cbf6a7600a73207c2629e5c8c376ec24b20bf82b4ade27c8e7ff","skRm":"6a47dcea0154d00c0c7a98a97e2dc614443d9436ae30e2c040e40a33b4d0e32c9d3fcc5c0e9484f5601c2d40ef51764b0d833f1232f69e8d","skEm":"58e42a04bbc17488211a7a089e14e89902852854285aec11000ec7ad805914afd695ebd9f3c567fda44e708f5a8f03a97b0147866338411e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"c79d510841e470963352fe59e1130c59f9e6e3f2b8f65e3a82c1de892de33e61aa4d166086b8537f8daf742d562ca4d7423eef337310e0d4","pkEm":"9a35a39551c90549a40a3a652e642c62d51a96f65984cf7b036ceb791ac5c72076f4c997b7ff743a1b808cd55e02d5cafedd7a9328f8d740","enc":"9a35a39551c90549a40a3a652e642c62d51a96f65984cf7b036ceb791ac5c72076f4c997b7ff743a1b808cd55e02d5cafedd7a9328f8d740","shared_secret":"f879bf0832d7bc61a6d57c65b5684d2a754bc08852b48418e08fbcccd7b8d17028ee36fd8345b37c6fda187ed99fd9e1d10b627f7ac821d542170353ae139875","key_schedule_context":"01270eb32f1aa6bd1804e98fae038c96f1258a5efb64dd856e466a1b25bbc4f54c49e8fa12042bc8895415e773fb0f8e81714a217deaa194f326b96175fe8834ed4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"e14d1170aa4c1af756abe9504c4f121457eddcca0f1f79b0173a686f5a22c95b8da9001efd88b7abcbde5057cbcc79c277befc112bc8c25aa77ef82e8aa06035","key":"01835374fe4557e0ec736c9da908ea06fef00c47f091a6c633fff452b3c95962","nonce":"e602e0148b819201540968e8","exporter_secret":"d4b6822ed504736cac26bab8d01887ad4b59c19cecdd7bdf7c0812062d4fb9427e9685c15bf9ad4bc051b1f8dd93ded54b731750c5aacf27dc7473dc9d15f9a8","encryptions":[{"aad":"436f756e742d30","ciphertext":"dca3e94e1d99849d88898109fddba983103106760f3ca3636ec44bfd0d175bede4b746f300602bf62561e27097","nonce":"e602e0148b819201540968e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"798e33f6c48ac7736fe36fad6643d3356b6a4cb589de0e891ffe4461a32816ce6b2a68c4fa8a9c0c9655249d15","nonce":"e602e0148b819201540968e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0c81b5a98f18645954d8cc3f1faa898185c9b7a64f177273ee0b425433d368109b2dcfb1dac2640a40d2fa548b","nonce":"e602e0148b819201540968ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1186422dbe4feebe1d445cfc819dc0d5495e541b754de94d79ee67a0d8754f5947ef251f3e97a3dcd76d28fa15","nonce":"e602e0148b819201540968eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e4664d96e7cb00030751b0f81a86f2f718f0f6d344148c589cd817d629ebd98d2b03d0880b70a2f2ba8de2fa36","nonce":"e602e0148b819201540968ec","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"607009cd53eb8e9645f8561d83e37825ec20429c06774aa195442b61fba3dc5c6b8c196337f4678f138726a507","nonce":"e602e0148b819201540968ed","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"c1fe6a5a5baf20a0268feb0fae4b92386811527b1a1ed7f9e08e6abee27c4502ffdcd188cdd310aa7c5b14db35","nonce":"e602e0148b819201540968ee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"04601c093ee9ab4ab1e14bb053e13bd02eba7a47cfee60b8ea4de340dca576e642a6f8378e2cb812af4709cdc8","nonce":"e602e0148b819201540968ef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"0782ae574a218da34ef2f73b1f4c8b0016177fbd037428948b2a299f0b1f8e6170cae28992c9fb6a0ff9f8d8ea","nonce":"e602e0148b819201540968e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"6e0a4153994bf4ce2ffb2ded505983863177574c17c1f3c7753c17fdd37cc2fc5d2db35af0a741ec6537085db4","nonce":"e602e0148b819201540968e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"dd1a7a522c85da3784758f1fefed178f831e057d8c71586f227324718a72a2b7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"09d63098fefd60d4604ca7b12887154f3bc2d558c95067cdc324cd333f147632"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"29cc8fc16975032aa13449a4ac5fba39f3ec55c7fd1c9243e21896447671818a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fc50e4bfc4ad2d78082ff8f2e85fae782f990619076d1abbcfdf45c542c2a078"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"77e8d0dbc5cd8193a85b5efb9ff8c926addc0adf2e4f94032deeb0cc0132134c"}]},{"mode":2,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3d6e5522102615c277d119e8f277fcdbc9eda0c65927024607efc190b9d378408a456b65854717c86f0588407ecc5e1ce57db4dfa2480c79","seedS":"1c07a040301aabd3100ca6e094d14093c8d4bfd774d35aa201c84187418f64d4e48196bdcf8aca8f56f7cbbac75b3ccb5e6f53c230a70617","seedE":"ba747512572a5e1d5845b9342fc017663b0073d915bb2f4a3d532534229fcb8d61b79648f177456b2bb86483457b7a61c924cb5891f23bb7","skRm":"de386be1f5cbe675fe0aae18e640d49a6e33202c8ffcc3a04fcb221f9bb177c50c3fb4dbbe6555e6c472802b524bfc23e658089ec4e6e0e6","skSm":"8bf6c596f2eefd49c0cb357ab1d6665db85024a2ed150d8eba2bf3325c40bde35eb60cf70e417e74713c8f625cf1cf3910c837f39ee7996c","skEm":"52e4929709ab17982ab2a6a3e19ca2973c2f6c477e6361fa5aee85e8adf89bf4b7bad702566c4dfa9a988d3280a0d5469a8b6e5c475b13bb","pkRm":"5e719bd817d0e738b2b39b2e9a00cbb7b4e5b7befacfc286094d98a51944e9ff725006ec53fafbedf51a1158574912aff07a6c1013191ba6","pkSm":"db571cc1df7df6ef0534d6d607aabf32b3e68854aa6c6b246e7157b47719c314c0526d201aa9d6310f9519d0384e9fb6c46760100e5b2401","pkEm":"8817c337f6efd5aa756ea38f4b8c139812b0e719c6ac38157604fc04cb5d7552a57b760d1ff9760da6353cd4924c83306160fc39fca48ad5","enc":"8817c337f6efd5aa756ea38f4b8c139812b0e719c6ac38157604fc04cb5d7552a57b760d1ff9760da6353cd4924c83306160fc39fca48ad5","shared_secret":"121daf7d9e070adf4a5c5e64280585de0c6549f63e4a5f69fc8807e155ca8efa068b9d2e9a5eac517316487953a45077b6d5b74a223ca11f1730c73d2ee608c7","key_schedule_context":"02a4a6828e50394582b8d4f101de1c624fecf9153b9e803944a8c22d8bf985a46840a56d0a67554a9ab9b5979a752796ba11b915ca3af1e418798f7eaa752d03eb4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"78abdd3a983347d4e16f7f17ae2d1e003c5068d6dde35074f325f28fb59d40066222e56e01b78970bfdcbf40afe7e970551bb52e496b5126ab43e32467d77f2a","key":"b4935f834fcd9de1e5c6710aabbf51340666d3d6247245a01f18214f24c0faf5","nonce":"054faf900de9fab0ae1ed01d","exporter_secret":"a0c5c7f46788f14d2871c35b4df7aa06aeec855a4fc610c8b165dbd6eb070da21cd4202f6ff37996f14bf3212df9007ec8f1b11c0698d9efc2e2e40d811a7b6e","encryptions":[{"aad":"436f756e742d30","ciphertext":"a488bb71bc42e68bbb9030fc2719f4e7e3148d126e3bb8471125e6562e775db5ea8517167e4b22f5998ce13a3f","nonce":"054faf900de9fab0ae1ed01d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"fc861667fff4be393123eb8f69fca1fa7002b0dc69ead7a7ca364553febea34ae2382ae48541570de8b98d1b86","nonce":"054faf900de9fab0ae1ed01c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"34a91e7eb386aa9fdc4ba14e8db2345ae38d6a3dcf4a673242adcb244abe368e8a95639945b913835a0baa82b5","nonce":"054faf900de9fab0ae1ed01f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2a46ba4636614007a305049f34ddd53987ea15e3ed09258d0dbc63fba4a701d33b1488b7b96c581015a7de3e33","nonce":"054faf900de9fab0ae1ed01e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"7bb313f3995ba7dc3d7f70cbf351d67827b3f7fdeee745f79507c05364ad12e743f69d5c51a8cb8796d515f95b","nonce":"054faf900de9fab0ae1ed019","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"715064eef3e4629a8ed104b5521db7aa202d1b307f67bf825258d30a25e318ff5b0062a19da0182f662fda5c2e","nonce":"054faf900de9fab0ae1ed018","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b0719c97014b1a904762a5ffacf0683e4bbba0b974364c0e170849b4860ec2357a8b2fdc928fd6c86538cd6c4b","nonce":"054faf900de9fab0ae1ed01b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"b0a9926e6fbff811ee2bf10c35a8f18b94662f04db78b503ea2c9927c998cc697a9c90667032d177eaa117e05b","nonce":"054faf900de9fab0ae1ed01a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"b124d983b1aa4cac12c6274f3b064f4870e07d4093e32eb359d764cd7117fa8a831435ad424f23c4bf4f05ba9f","nonce":"054faf900de9fab0ae1ed015","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"381f9c08fbb3c9bacd73eb87da10b3661a796d32e1d4ea0bc864c8c55768e504a01e42f90367cc0b2c695bfed4","nonce":"054faf900de9fab0ae1ed014","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1c44aebcd90ad6e2d7a36b08799c9d17fde40f3bc66bd8fa82ed2fc2069ed194"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1089cf50f4536b1a9d1171c94708d27750c5a5200a760fefc9c38fe0945c04c3"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9c2ca49214fc81c108eba6fc10dff3e02c4be39198b8166b80aef4382ca2a92a"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"09bafdbb2b6cf1b939be3c0bef720fadaec2b32ca4b89eabf1fa50ae7f53f519"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d6f527d5bfe0c909cd1ad035f0d570d04681e509d4ee8c17f4e87fc5b4821bde"}]},{"mode":3,"kem_id":33,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"13521f68c6286bf84a882b8790b8e7ecd6fa0c743ff56e2e4ca3c8a9d3f41c921cf171073e03298aa29a5638658623564e783d639d332a92","seedS":"572aad7eb2ca9a1e1dcf6d84660882039087ffe89afd7db3504046b5ced7aedfcb6af7a6d3e6fe06147d75de82e518206745769436e1d31d","seedE":"12d0d37bb6c7a6edb44ca68fd62d9e44c00ab8c93c864fd7b2e8dac02a92f4ad17676d7ccd8ce42e1533916a63553b49d379c6b02d846578","skRm":"c10ba658ebf82cdc09c5f136cefe90f36eba7d96aa27f921f27dd36c1ed069263a70bb5e376702ba0842058842524267ced12a824fd3bbb1","skSm":"287d7fd3638cb7b0437e9981275d8fda6b51c2a46494997c44d466765e214c43d7eebe4c4c7bb318728ebacebd8afdc5c8d3147ab3389de7","skEm":"0954948e3ae5eaa8f18f888a4266b491c92db0ba4316e6d0c4436f6454440334402e45e1f8d61fef2292e18c49e80c88cf30316858b36cd9","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"35e190fb6f4cfcc75aa14fde61fa9b7896e83cc12efa86b90b8887f6138c72ee65a33b40918128324f103d5415980f440bba03f43c80431c","pkSm":"6d5903f60c73f0e840aa9c9e22bca71d179808297026e79057f15b297a7585cb395ab143a8942b69c2146c5c5c7c2963537cc82a604c1330","pkEm":"d8e656d733e728843310d95d4bff073d6ce4f15b208ecb21efaa8dc240a82043917ed010f1a8ed67d9c9d5fa66f08e0a80fd2b010b51d820","enc":"d8e656d733e728843310d95d4bff073d6ce4f15b208ecb21efaa8dc240a82043917ed010f1a8ed67d9c9d5fa66f08e0a80fd2b010b51d820","shared_secret":"728bbee83b6b180ce8d69a929060f725933d813fb2e6f132fe3f2215fbf522f72515f4a0226b91bcae7247070888368ec618a8d2674073c85744cd6ef5111dd0","key_schedule_context":"03270eb32f1aa6bd1804e98fae038c96f1258a5efb64dd856e466a1b25bbc4f54c49e8fa12042bc8895415e773fb0f8e81714a217deaa194f326b96175fe8834ed4b04213a6327751ae97ddc9638f81e97f5aff8055b24257c74a7f446115b2be1496a2850f949347aeeda33a7c46057fa7a4733274acec5d1d58936a13838b421","secret":"3a375117f246b53e052f84b35e843d32d415e5f8d3dbf3e5852ee75b323a33039ab7a983d8616cce9faa2496e557b2283f355533028f4d1d598d89299505fd97","key":"97e6608603090e1f010431046c5c590a5399c3bd94c5828c5685ff209b1b60d5","nonce":"564ae5511cee1c8bcce5d9f3","exporter_secret":"0d48d3bac9f44ee42652ed61c1529e2f74b2d020c9c5614df7d679a66c55115b34f9c2342ef7f6949b98650d05d2d4e0396242847f743dd856a1ab06ba772c83","encryptions":[{"aad":"436f756e742d30","ciphertext":"80f748d2853581eee2315e1eead8d58066a320508a793b280ded362320de3ce84d9e1b317a34a47dacfde861aa","nonce":"564ae5511cee1c8bcce5d9f3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2a07e06f7b0a3261e43bb0733519efc33fc933d83cd2d6b2734a5dbf87b940c6dd6c9bbbf1d28b67627f690ba3","nonce":"564ae5511cee1c8bcce5d9f2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"108fafb8fbc11257c2ab8edfae59a1f4ebaf9f5ac6e5abf62da3f595aee74cd3005f6885912aaf2f0938b4126b","nonce":"564ae5511cee1c8bcce5d9f1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"c8d08fda05476ff33db9877ff28d801543f27d4659112bbc18d3427faf5755415c686a9e58e9e9a97227b13f4e","nonce":"564ae5511cee1c8bcce5d9f0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"086fbcadc8c2976af4aa658049531700ea4db41ffeec2ce46ff6d7bebcf17c2d85f938ffb2130c1a0e5c1b0675","nonce":"564ae5511cee1c8bcce5d9f7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"30026c91c563736fee502d2af52721ca5e60deb4c7998ecb7b9e395e1b0da39bb43fa4c15b066c69bbd5b606f2","nonce":"564ae5511cee1c8bcce5d9f6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cecc563b2b4a759843a4a3dbf64e4b542ba42e69a1865af19aeb58c18854092149806ebc0d3060c89ff901e0e2","nonce":"564ae5511cee1c8bcce5d9f5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"3fc8f433f307c3a141387700a48d9c775d491797ef9ed875340fc2b4a07b9c3c7973c6ef3cdd3a06254a59878a","nonce":"564ae5511cee1c8bcce5d9f4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a26dcf88f35d3af1b87e4b136776e356ec1a760b78adb5d475c322e615247fe6e9c29f27bb4f0e35a7c58598ed","nonce":"564ae5511cee1c8bcce5d9fb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"f82f662c006635b2112b69207e940a97960231c0fbed3a63c7fabac8785940f215cf8e4239491be4b146e3bf0c","nonce":"564ae5511cee1c8bcce5d9fa","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"d1988a3f35413f8601aaa8d47a11d8212d9de4c5012686f6b9fe07babcd8b2c9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d6a3752296fc2780725258877b92830b9565662507429484bb6732bcfe51f527"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"5f61437060f9f4d682622b1cd29084982109f1a3fe01261c281b4f0950acfbf3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e2d855fd656828026e74cb858f29b07f8d4517a58a1e577a20cd8224080c6bfa"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5bc6449b879f245814cf4e986cd6ddc70000c088e22dfdff1190567456361bde"}]},{"mode":1,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"203771c4e993533769a70d4b7f96140b423511fed0b9271d8f5c383fe0599c6c336181e51013dc72c5f2b7f7cb1c08167ddce6d739bb0f13","seedE":"a5d567fed542bae28f570c11f3fb20136d01a9ee4342ae081333696802968d13d5d5b2aaddea3b9a94ce91db7e1e80cb339b66eb9f632c96","skRm":"6302eedad39332878954936954a0967a6c8bdd96d90f1500aa29412e931f25499c6296c57ee1170c1dca6a06c064f0ef1b1e6ad42048db42","skEm":"ded888ef2b32a9ecf5b45d9d930eda1329e2de4e030f8cccff65337633b7a35885c37a7800ba5612507c06dac99d4a6a6dc0c99f9a5a0920","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"f2ec6213a3afb83c484a9cac28f4672b8e4e3aec99cb6b6653440445d47fb69252a0d18cf2ec8227ab20e2f96dc204de9203a83686bde831","pkEm":"11eed6e0d37b76a827a8a97f5d6e41b4c8cb00afecb0fa642b3e1c18502077deb72791b2bcd987b5fe28d1f7d8cedd0b9501fe72b5fe530e","enc":"11eed6e0d37b76a827a8a97f5d6e41b4c8cb00afecb0fa642b3e1c18502077deb72791b2bcd987b5fe28d1f7d8cedd0b9501fe72b5fe530e","shared_secret":"c2c9dac7864047d1cc0a0e61291af549b087701d4d17151db00ae59bfcef09623ead8cf4ca8a134c40e0c026014b55b13fb530d68628b36f9312f0ea41ed6e10","key_schedule_context":"01a582fa2066caee8eeec8b15e18264048512c071dcc6713d863afe894092c6c8bad26e2f209333569be9ed3562f8ce234815ad8b5491a602fb85fe52189154952328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"3c3b9b38496a06a8a5cad5ac29a74fae92bc6615de246812813d1525ea6ddce082068044c3c92d77648cb0b2551629d46db74194555cde3ace75180831aa81bc","key":"ac794528ef3eb085de5461ae0a8026b4856c1d8ce5ba008810a80e8f66d2f4cb","nonce":"1ff7899f246f0f9af99e889e","exporter_secret":"b8015dc47656c4aef70c76abdf8b97970908fd7457293db4e74cd346b408b547863cdf9deedd41fea403bd8cec519ee6a81260c7a534c6a4a75307e06932dcf1","encryptions":[{"aad":"436f756e742d30","ciphertext":"cb511f9085f04c83d1e75887f2844afbdd5e3c5cf2acd41e42743d443d980000d492b876c75187b5dc54301707","nonce":"1ff7899f246f0f9af99e889e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e28b4b7dc96131bfc7d039d969808d6a3412ca55313808fd7c64321e3ca058b788be97f56583b53b9bc9b6f8bb","nonce":"1ff7899f246f0f9af99e889f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9e6f44703515e462464f8e4395a267431025c3e957a4a07850e1c0eddbe0fcb32c9e56d8ccf5ed25e4f69e7131","nonce":"1ff7899f246f0f9af99e889c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2753aa6dc408db0a3e8479be15fc8a6958d87486288a6196ec5e1f387e6fb26553c48e311591a11215204b66b6","nonce":"1ff7899f246f0f9af99e889d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"610b9d391c4d0b70ce62e19764915ed7ffcd6f268b39d2742ebe92fd72e5bc230306aba3b1f53331ac1e06a296","nonce":"1ff7899f246f0f9af99e889a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"97107b5188b8e5e442fbdcd2aeafef978908bd62df010fa856ea2e68e35db87927a4556f7e6438179d2f717f71","nonce":"1ff7899f246f0f9af99e889b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e9538213f043c636e2da48de7ae19ff0a43fc21dac392f0ebeb911c78a12d51e4b5aa0dbd6004179c5bb28d89d","nonce":"1ff7899f246f0f9af99e8898","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f32041f71470d1afca87718d0c80960a36675bcb9473946c940b24ee4ccf7f07b9595fee06724802bbbd6e39ba","nonce":"1ff7899f246f0f9af99e8899","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a66303b8c6b3352b0bea9c491deb8552e173e23799e01deba9269f35ab796781fb8f51e97dba9ee737f12f87ea","nonce":"1ff7899f246f0f9af99e8896","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2477477a7a0994623f69d3e4c4a859e8cbb30b9eee775097a270f8a2cdaa0c49761c770dd2f7f783db7fd4c756","nonce":"1ff7899f246f0f9af99e8897","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"46249b43354819e5cb1a115a1a9f9b1c9130d14ad3a628e2eac71a5e14f2f062"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0b2dda2ab0a7c37f725f1e6bc54c4a1d9c86e3b5f7a347b9748f17a43aeda76b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"30cdfd9b8495615090f2e8a40e330e38049698dd263efd6faa894d8ab1a306be"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"051fddfcca20bb7784400301ebdb0a299233000d3f9355f96251d844391fdb1d"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"dbeeb7e9a57691330008bbeb831a53a877f68825dd75288e18c618a9267d6089"}]},{"mode":2,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"107a25cf96d1648294ecaddc47b3d9a5877ec1ec9dafbb41ad8ba8644ccb7d777ca99262371d15fd7eaa9c345a1d91fb206dbd66df99ff7f","seedS":"99d1993004b16f164626b4c1f3f25383fd77c2a8304cc7eff86ea6af7885cf7bb49dca399890a87114a45e97620a1e946b4e7daec2743628","seedE":"b46feaf969180be4de42db779c3956ce5e8ac797cb5915ca3a07d7eec5ea45d62b4a38aa8659dda2d9f0eeb550368c8255d7c54bc187eaeb","skRm":"b200be2dd13e2084d53c0c3465f166a85d55b287fccc907229856b90df704232a420af978778f033c9501796e33e68311d9b24d4d042bbb5","skSm":"f82859859fa5d6fab67af06b9a6c24d9f8efd11b8364ceaaa9164038e0154c633813352276036db4f5bf222cb364f9a9c75ea1447ca04e15","skEm":"332491c052cba1a6ad7f54e8105ecdcd325d9f7bafeb380efe022321e7620078622e1caee2de1763d52d083b14cd5697326d87d3cb5c0741","pkRm":"13d56d8381bf424b361bec7f7f5b634cfd7aa79f5b6483bd89b7575e4e06679503e9e115ad3a7b9de365735023286433f6a6177079320266","pkSm":"9633ee1ffbb0104c746e3856f78d87c8a21c5b99c6fdb9137800a7bc4d5ff9916ee4b6bb9eeae59e78a3f88a33c2157869c77d40b4968915","pkEm":"21aa84c3126d4c27ce1a8465ad4b2535501ca44fd79cfe42d9a4673693fe9e5ae3a2d2d894a48fb944a042a2811daba49fd996ff50796cef","enc":"21aa84c3126d4c27ce1a8465ad4b2535501ca44fd79cfe42d9a4673693fe9e5ae3a2d2d894a48fb944a042a2811daba49fd996ff50796cef","shared_secret":"fdc7c9456ea7d9d6ba7021aebeb5fb1225e69779915e878b3079491274cead3a77e7649fa102a729b16f3aa23ababe9bd8ed07ec8752bc538d5fba69c2ff04ad","key_schedule_context":"02949d30f15a3c476eb5e6947de88e3cb3e8b5a45874d4abd686177b5afd9702da927cba7e52411e08576e4788f91c25697bbbc25c333eebb1511e6436d856cd8f328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"75f63552523fce4479f1dfecf63210b0b1bdc9f9bdabdcea576846130a86394402f87c0744a438149b1ec28a55a05538a2d34582342d1b28d7fa44074d2d3e10","key":"f90372666daa1121c012e830a66cf484e29d8dad58fd130d47e034821960a27f","nonce":"b79a0fd5c77efad080414303","exporter_secret":"60e5a5c31aa42ffd932eeece958296aa9ae144be70d64d1bfc90ead1014fcab4b3cc4b0765cc941ae70331657930581baee277233647c971699abaaa021470eb","encryptions":[{"aad":"436f756e742d30","ciphertext":"c01995470d656ad9a4b4a01ff698e8567c843672b5fa5e47629d47c284129947c0dd6b2090c41b492a40809194","nonce":"b79a0fd5c77efad080414303","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"60e070f64e66aa99b5f5f9dd78422ed9cef1366532097f20e364ba946e39110308986c36067effea399594758b","nonce":"b79a0fd5c77efad080414302","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b6fdfd206b442f117260e745482f35320512650ccc18a99f5132279900f03c88af9d1d70e54fd7a3d8b948f685","nonce":"b79a0fd5c77efad080414301","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"5fe3e78000c8e168163f1dee902e57c9aac7352137f2f2f9dc3c8ae394a1701df5148acf722d724176dd35607c","nonce":"b79a0fd5c77efad080414300","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"de0a82c62d31be9f068d50d45e30dd0fcef0129b9b25975ddc1b237ba7e9c491491c2e1c1ea95204313fd02a49","nonce":"b79a0fd5c77efad080414307","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"0a15d694b6c0044b97d9e388ef08438362a1db41d54f6b18b4068542e564718937769538c923e6f1260db692fc","nonce":"b79a0fd5c77efad080414306","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"6dc4924aa25126900f22924ab12f1ee0d70a02cc0af8dbe059223ebc23cddc5152073c5412fc4c0434de82aab9","nonce":"b79a0fd5c77efad080414305","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"fed47335231e6ec95660a6da9d613bba81635f88ea15179a6744519efadc55f81faed9e61280120c563b57235b","nonce":"b79a0fd5c77efad080414304","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"19e1b35e3ec9a91604a831e04c431aa37908de5510f061ffa1170addc47682dc28c9abab263ada85aa3fec64f6","nonce":"b79a0fd5c77efad08041430b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a168ad13e7dd3b6b298b01826d8049676f25fd2a4e8c74856d6494e122c5fb3aa62f7d98296df5b40b9fce8035","nonce":"b79a0fd5c77efad08041430a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"a3850a2dfe8335912be6f5a89591c68f8420211ec1d682a3e9173ad19984809d"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8dfe369c3da8b6ba2d1073a6bb7e55c7fb3478e6e653240ee39f4b3f388a065c"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"18a5ec9eb90a4d12ab25915b7ab624e492eb19d201062cd10bb5668bf03ca234"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"31f7f1e653a44beae7d14e37fe627d533808077c526eaee32ca3bdfd27007802"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"7b8e97b6cc8657fab07be70a2830ae2c28124a0b9c07c2a654cf0c021e40294e"}]},{"mode":3,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f9efc7a4b82b54a3ddf6ece1d4f185d957d01f7c630e5cfc9d71d7d5912dac50b72d61df40b1d087391c452f029ea54c6c71a04325667b65","seedS":"6751ce992f7dba1ad48eeadd81a4d93c4c860212ce363f36c304f463b04fc966a69983f4ff137ce461a34c3a9d867c2b88aafc7b7bcf89a4","seedE":"7d9687706099aeb9fdcb611f5bc6d8f5875697bb435cbf24d97a603c1b4219e6a95c9be2632f1f460c9a71339b69805210cabe4250a6dde0","skRm":"dc410d2556a7a6db1e2c150f66110b8be961ad2337beeb553d5ed22034495183b6266f2eb8b26a2b60f3c75105593bf6094e16e640a0ac1e","skSm":"555402ca385d27e88558f4ec2b2d8bc5ca5728ebe4c298da6462eebe6b5180dc785b47cd205fb45934ea245f66397874acf653deb36baa97","skEm":"7af0acea9cd8085959788be327845ef74accd96e11f663045428ff3deed9b752cfdfa68296f8d32dddfb0e2358899335f1880dd51e0221cb","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"e4921613240e46b5c43eb20e09ebf8f80ef675e592765ef59eb3be1919867bc6ff658cdfe1b6c05447d48d984046fd0047a493a291e21bc7","pkSm":"ee59a3e466d468757ec8841a12be67933afadb8162b647100ab88decb10fc3febb6a4b15f5135edb4d19c0724936a9151493aae2a348679e","pkEm":"2bd17a955e5df3b11ab4e64eef9d2372d22b0055149c9ddeaed39f2fd5f81a4dcaa048e1674722d7ac36752da16bc5d737db0a671016759b","enc":"2bd17a955e5df3b11ab4e64eef9d2372d22b0055149c9ddeaed39f2fd5f81a4dcaa048e1674722d7ac36752da16bc5d737db0a671016759b","shared_secret":"0c0349678cf035512d68a4a81e13fd4cdfcb2d2932028ddbb9f901a6c39d96e221b72738be51b0278f715c7b6b5d6e5934687e033b33f08ed970a9f76bc68f76","key_schedule_context":"03a582fa2066caee8eeec8b15e18264048512c071dcc6713d863afe894092c6c8bad26e2f209333569be9ed3562f8ce234815ad8b5491a602fb85fe52189154952328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"e79a48c324c48585df6204a95d0d78e552b0a67ee82983371e1b43352005f34d4b0af8911fd4c7d5942bd2edf074d145028c31e2458932311359a920590b165d","key":"e43856f2d944c2039598af74c576aa4984ec466fa943245ef1704e6b74a78286","nonce":"983bccea0ce43cda86db0c72","exporter_secret":"cf7c7aa54ca8ce02e9435467bb044c6c4122242c5244a4a962582f734b49c389af17b5a170ab5a2452fb5059210e3dcdc0564dc21c6b25441ce5e1d20df17009","encryptions":[{"aad":"436f756e742d30","ciphertext":"40bbb464b661a4cba57fef131af2098abb53411990af9d652e80bd3fe83df47b986fce6456548a4569ba971268","nonce":"983bccea0ce43cda86db0c72","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"252cf353fba0f373241d4311fdbe6f2937ec330fbd1f28bed63e08d2c22acdc459399491dd449e8518eb91ea90","nonce":"983bccea0ce43cda86db0c73","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"81b3ec62aaab4df7bb45f507c3bd74bc4b35d804329310c8935c1ea9bcfa7954da72acd58769892f581d4f089a","nonce":"983bccea0ce43cda86db0c70","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"147a3921b060c8e3a854b4a118463aafe35e093a331eb42609a15d94eaf30c836595efcfb8cb7d19f8fa2698a2","nonce":"983bccea0ce43cda86db0c71","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"d8e05d3d97cdf18214c4f28775d63e0d60d431ff53d172561ca5482648c92ef66bb2701ac973e86fd3aacea97e","nonce":"983bccea0ce43cda86db0c76","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"8edeed464c1af56e7b8f9921ffc1014945d5316e78d55d4159055daabe09a0ecd4265d700c76341814b180f99a","nonce":"983bccea0ce43cda86db0c77","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"394cecaf44ce2e2945458a9451252aac77d0261fc4b7d9c001001ea5edc1a2cdfa366603e2cf5215909537f327","nonce":"983bccea0ce43cda86db0c74","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ecd094958bb028e50807ac880e9a89aaad3ec6239826cfcb41116c3f7001f6ba0340c446d6057a71b92379f08f","nonce":"983bccea0ce43cda86db0c75","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"359eb4f1404078b80644c8f5902883780bc99efd47210603f080c059c185d385a680b6719e8692a163e4c6ad51","nonce":"983bccea0ce43cda86db0c7a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2a37371fba755453f4ab2bb34bc606ec53aeab3a2a48e0871f32a1c792c73b22c5ed203bfae73f22aad38d7086","nonce":"983bccea0ce43cda86db0c7b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"244d5a5a214d36595b3441761299b6bf69f7271402e57a5ff82ed517eecdd1e3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"1b9cfd9b17e946e834579084ef304fe6bb2a41007ca80d0788b9d19e755be326"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"53e0a335b6e3565b7a9d274982874bb00b4fd6697b419832e481d39f74ea253e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b717ff3452f194a17f8de5a14ec294070c7eb361accca60ae0a8a79771064dc1"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ef32585bad422663f1338a70cca5226362d1f814d7f99b6fb09b7082f1fc174c"}]},{"mode":0,"kem_id":33,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"e591b5c9c7f834294f02f4cb956db64b4bdf176ab2ac3de731f63e8a4bd7a5fc087841141925404aacc7fe26967c1382a43ac05779b75128","seedE":"80db21de690815eed8258d592e23f2b21d3efb9a79465c42ba7a29dc736c0f70b288f5629ca1d82222b3e686c12ac58e8db238b1462276f3","skRm":"66eebbbf3e982e501e612328be2ab056ea1b8c38a2270c9f93383e50606507593bb7e5d888ea0d748d502b77eed41c4349c200a96a6f428d","skEm":"6d6c372300b4eb582c9ff5366e722b2fdf680665446d4a6edea48438a13932a8224ce174746703d77a46802a837e42f1cb5e828dcc94c731","pkRm":"90a7773c8673273ef3e6581a337675aea8ec42600bf31f0b4b55e741df2b0e402a962283b0336744d96486e96a24992b4f4a4435a5222a9a","pkEm":"5e5d06141e78f7a94b6275dff0ecf6af15947cc4e99cbe408a9d20a712a939833acf526b30ee01cf9ec86fdf13791ddba7d7a70bdfe1ad05","enc":"5e5d06141e78f7a94b6275dff0ecf6af15947cc4e99cbe408a9d20a712a939833acf526b30ee01cf9ec86fdf13791ddba7d7a70bdfe1ad05","shared_secret":"43c250123c2dacc763874cf4030810517fd84009a8250301ade70fa30bdb81eb3f198f8f30d8868fc3e1326f34be4d9b5aa29aeb09bae4a0cbaf84889fa8bcc5","key_schedule_context":"00949d30f15a3c476eb5e6947de88e3cb3e8b5a45874d4abd686177b5afd9702da927cba7e52411e08576e4788f91c25697bbbc25c333eebb1511e6436d856cd8f328a725dd18e4ad29eae9417de74d3bfc492a53eacf6a587ea8959c3acf9c00167497cee7032b254ee92ec9bb58db92724f35310364ad193e684390be2bdc1b6","secret":"3956648a1aa6b44c7f559b6acd1a6aac48dd3272cb9d934d627539901b49807abd8211d490406d1f046987274bc239b72de06459301ae11f2cffedc7be326d36","key":"083d3fa7958a3d5ebc4f3cae94447060707f7b7a4da98a825a2e579d5ed93e8b","nonce":"12ce3d9d40c187b8377e0ddf","exporter_secret":"65a7401afb2876e12420969ca1bad97fce7e245723eadf3281b66450a05d2378076189e5660f6bb5631c439db805a9ccafd34edb0317d2fa902117e6b6ec1cbf","encryptions":[{"aad":"436f756e742d30","ciphertext":"6f01de655a40dee69a07370b51d0f1183b4603881f30388dc598364d0b860411146ba44b769487388ed1841a6d","nonce":"12ce3d9d40c187b8377e0ddf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"dffb2604362e07a5a22992483b68d94c879257f3a92e3158017264de2dab8b332270b1143f01f62a57adb0bcab","nonce":"12ce3d9d40c187b8377e0dde","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"489924221b016f04fb2c5c3fb356a1343011b901e0cf7bb9fd036251f3cf99b7f20926c00d74b6f882fe513698","nonce":"12ce3d9d40c187b8377e0ddd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"c3b3e6d57c9233769b2e58a952ac1b80449deeea83b84fbe2656882ca8e942d74342f6732a57f410ac846f129e","nonce":"12ce3d9d40c187b8377e0ddc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"0fe25dd70dc35f71e0e297843c5eae558e3b3d2db4ad335c58362381b0e3eae008c38c13502569dd8a06c30b3b","nonce":"12ce3d9d40c187b8377e0ddb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"5d78285b136cf2fb07d5dfd0233e8c7cbdbd251951d3f6b9e1bd575b30e3274ba5845ae17cdb060763d0ff790f","nonce":"12ce3d9d40c187b8377e0dda","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"20a9adf213dde86c2074783a95affc055971ae0ac87f61be5708f1eabf8e6f00762f2c19beb61f0944689d1a90","nonce":"12ce3d9d40c187b8377e0dd9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a5acbada7a5d5742c44962162d76d85e6b1534f478ebb0e125ce9302783ec3f5787993cc4ee844bea8b7743bc3","nonce":"12ce3d9d40c187b8377e0dd8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"9f92ff892bc47db0e3ccaa0eec402782fd7dad2b4cd050f90331dbadc102589d683e3f2eafe30eefc0549e0c06","nonce":"12ce3d9d40c187b8377e0dd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"19e688f8514230b582d2066026719221c60d5f0b88d7370b81d002b8ec7e98bdc17e8b00df50a2914a41c24ffd","nonce":"12ce3d9d40c187b8377e0dd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"62f8798bc12e1e26b665900a143346a7c2a2e06873917294d7e58330ab827aa8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8a217709de572f1ce94f03033dcd71100a2dca801f8595ba75ae05cbbdbb2f69"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"95146fca21cf8e83a25c7c4b937c3bcea09ef110b0cb36c4c01c3a54d59557cf"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ae30213755c43930e16d7fe7c4a36ea651106ce4c267411f36ed8c87f4033272"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"563c82e453d51898bc0495fc5aaa04926a5b518bfc5c1b5907ab8ebc92219d0e"}]},{"mode":0,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"67bc0b8ba01fd8a1526d13c803d4d9ffe1a9914ac27e7a6c925b1580893a8485","seedE":"616ed5a6277fd3324e0cc0f4349cd345b0adbb1ceb98de44c03aab083fbaa6e6","skRm":"3846bf6b40f92e3645c5a8c725ad44354c59187b59140c35497b339a10d0beba","skEm":"d37c52c07a637e858ceeb0fa8b972307e07b17218d99581cf46a88f9a3b2af73","pkRm":"04f79409119f58d542a8e4f8ad6fad6394f83c39d34496d990357e30dc0b38a8d8add95f8f4ca7feaa7c29520632845d36fdf94e73cb038a59be020f82b93fe141","pkEm":"048a0c9b27c844f5f1c6a1d9d570e34909c6359997b6acbd8132f1536d1f7685ff0d203f205dfe4a789e4af3f599172b613d060c80d0e1341f066a87c0f83d827c","enc":"048a0c9b27c844f5f1c6a1d9d570e34909c6359997b6acbd8132f1536d1f7685ff0d203f205dfe4a789e4af3f599172b613d060c80d0e1341f066a87c0f83d827c","shared_secret":"5f175bec391524f0153b05559212adbc2f5d6981b95a5d53fa7ed58fe5e156be","key_schedule_context":"00c14ae6a0da7c6764c62eba270ec0cc28b5b568b4849a9b59425c08860800fad8a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"f753e6728460efed42ca308bef93e8b6646cec0252a0154d8310984445bb0629","key":"d0696b5461fee5620d54f33b04a00f79","nonce":"99f33bd3ad9ad334b17de055","exporter_secret":"f79e9a0e83b5c678cc0c9240b68fc3a84096ce374f37673ad4ea345ef0a3510c","encryptions":[{"aad":"436f756e742d30","ciphertext":"0d77ad2340cc7af125fcd7f4ea63bca7e857d774d08365eff8c7f63091a5e5aebca4721c854579b11149649209","nonce":"99f33bd3ad9ad334b17de055","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"90260e86b560860d0bf7bd1273bf7b6f4bf43aa94d475c93015c5d5b536aae7631227968ab1aecc337cd080988","nonce":"99f33bd3ad9ad334b17de054","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"fba616306cbe53eb8faef059a8d39947102a037c2e5bfb6b770bf7241576b74e197ae6972c39177b8393e4bece","nonce":"99f33bd3ad9ad334b17de057","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2f4681e2af177e92b34f7e2160507a629119c6fb70c928f64a0e65e07aca151cc32dd3fdfa3f7932bc46626706","nonce":"99f33bd3ad9ad334b17de056","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"ca7c1e359bb916ec8aed3a10bd2a703d044af6a1a1b5a8f8bbba63141f35ca7c292516bda6c97c4bfe85333f6f","nonce":"99f33bd3ad9ad334b17de051","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7d878cfad5124f066fdc229349bf8ab1c82015a748a35e00fbec324602726871759838c64d132aee8e9e0a772a","nonce":"99f33bd3ad9ad334b17de050","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"b5d9fb5376c667950032051e67a5c981dac6a3fbf416fe28e98d87d075ab71151eca8a3ebde0d9532c82d6120f","nonce":"99f33bd3ad9ad334b17de053","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7bfedf8a3d0e909bb8b7d894d0b602f50900cc4ee7e10e94480201b0a41405f65bdbe549c76d82fbe36df309c4","nonce":"99f33bd3ad9ad334b17de052","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"dc922098754661b41651d1e254cec89890ac0e76867bf9be2702a2dd1bacfc393abb5706b8743362ce949e2a36","nonce":"99f33bd3ad9ad334b17de05d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c6613ca71e6951ccbd3a3c2d52b815c7d4c284fcbcad506b89d21a49d0f812079b515aefa52d48cd2d8164810b","nonce":"99f33bd3ad9ad334b17de05c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"23fe2c722df89643d0987e657da15f39c7548e273cd17b469721665b212c44ce"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"c29c28d8f6550d8f8ed4a36fe1e3ed98a1dd1f075d97b5ce0eed8298bea8c035"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a3d75d106a706e2c6f5515e0d423aa8f6596b903f3996ece7762f43e9bee28c7"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fd588757856a2fb1d63a80c5151d389c41254120a1cbd2397c9a31c1cac3249e"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d44987f0cc98d2366ebc0ae856e2abd15f7112fd6b40e6cc0d8f009fd0e5759f"}]},{"mode":1,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"236ddc165201cb79b2d8c7399c7f6e6e8cc4542b2fd1b75d107875db2b89cced","seedE":"8131f719cf2d1f5263da51e133876a99eaaf5d5fb118bda64ef12ca6fa40f987","skRm":"725658a8e129bddeb7b6769634fa7d64ead6277488cb57e88e68dd77f5cda19b","skEm":"e9338b646027098a903c0c5f66bd58fd895eca90e171e55766e31951cfe6cc39","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04c5a0bfad2ebb4c7a7d1ee2f56cb2503bcf73c17b7239bba0d23b6910292f162ea2466e2d0ec5ee4aa52d81f18870dd2723f288bd87bb98ad314b3b1a55e1a3de","pkEm":"04df79d22d7cba95ff448cf84ffa01cdd87a68c9ef70dd926fe164a76d2cd243036f3a34e9bac0725406fcb46d7c723248e42c3b329bed5bf8fcaa47d87d9d3e00","enc":"04df79d22d7cba95ff448cf84ffa01cdd87a68c9ef70dd926fe164a76d2cd243036f3a34e9bac0725406fcb46d7c723248e42c3b329bed5bf8fcaa47d87d9d3e00","shared_secret":"1f245a22765eaf94b3a76463b9a248941078d138c3216acfcbd1d25f8772afda","key_schedule_context":"018c27d3410cb79f908302ae06a67ad4c6f971cc37f64c23807cb4de4adeaa7d76a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"fc6a6aca6b179515d69086844efec0acda07bd55efd50873cb46fb811faea941","key":"89fb75a38ba6bab89b1a8b0fc7db366e","nonce":"00b1c2de64b6a56a51921d56","exporter_secret":"cbd0d3b0ce32cc4ad834a0e81cecd21ecba042a0f4f25ae839a1fe95e56b89ff","encryptions":[{"aad":"436f756e742d30","ciphertext":"75e82c5e991af745c380557b2f03f793dde5f4a78b3bf31429735aebbbd881580917e8a489fb0da3b081444319","nonce":"00b1c2de64b6a56a51921d56","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bc7e436c6435634a69147dc20e3abae51f2c02f96ec2b198138b5e10e28420cb45a7ee149b1d936154ca320e08","nonce":"00b1c2de64b6a56a51921d57","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"bd020f02b8eaae481e512bfe4969b2b285c636f756c72d70022f31af52bf00692c57264bb214a412ac8fb1b965","nonce":"00b1c2de64b6a56a51921d54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"a9f3741535b1f99ff328a857d2e0231ca11078afd787cf8d267fbcf224820a89f33a30b672bfbf7170bf958a21","nonce":"00b1c2de64b6a56a51921d55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b1ff4e7b8ec452aff36b06c5c1bcf7e4e1cdd3211f1516ce752366f1b81d5cc813e4d5e2142239afcbd1a75f4e","nonce":"00b1c2de64b6a56a51921d52","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"fe66cbc16ed4829324352f5183b6c456477f2ee6af0a31bf2def8bd9b0a2c242403e4bdd6144f965a1299fa6c4","nonce":"00b1c2de64b6a56a51921d53","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"97c1e8908fabaec4bc83efef957048c2baf70aee75f2d46386f446739c6b8dd5778e01dfda7f11ca58e660255b","nonce":"00b1c2de64b6a56a51921d50","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f134462139d6cd110a14bda61aa16eb359d2b585f2fb45abc9b23ec8871b6a1eb9acc44159cfb93cd7f40a05a2","nonce":"00b1c2de64b6a56a51921d51","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c989f5d31f2609fcb643c706113104c2f3b48f7ded406b42f02cf394cd9ea077a7e9ec7a158f25a3aabaf001ff","nonce":"00b1c2de64b6a56a51921d5e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"411f0e5327416e9f01916346a2c0a242e946dba349f05bd10baa5787675ffe6dccc5b05400bab94c9ea22c0973","nonce":"00b1c2de64b6a56a51921d5f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5442920c851a483c22402c95e872d21a6145286ecf8f1406711d691d15874a44"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"8ffe3f22d326b2164530a35ab50420dd36cab7d2941ffdb9819858257c18a9fc"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"26d98b7e5e4ee486411687551d6be41ea07316ee975e552726aa80c8bb23f734"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"31eb98cc4dd527c04c89784f17bc0d1e9c9717b25ea9a8559690a8faa8dd34b3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f4e7d010e2b9df1329ff819d24209c4c3d66b7c80f99aa61bf2a6ea08869717b"}]},{"mode":2,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"740a67dba29760f8d95e953a1ae75fda6d5eede2a41c15f4860b5557d4763fbf","seedS":"174deda86fb885b78e5ef8ad158be3c38349c5322120f03ee9ddb6336788d8ca","seedE":"f9b977313fa3cd4dd8637307fc93e48093ab6bcd45781ad9f7a79f5f0e379bb6","skRm":"c66e74f49ade18cd81aa612cf8e5363ebf0da7cfd06f07ec266f46c29e9919cc","skSm":"7e8de5af9ea0240a8638421db70967ea6a1d610d5dcb6faec575dab5d6079a8f","skEm":"d1e640b7630e0ba4423a4ea17fb1fc7976580e31048523c5dfdf7c78ed775aaa","pkRm":"043902c8e06ba874cb4eff0db4bed84ecfe3afb85e837308c4e87ba0f41bea35d56c17ea6a72ab671aa513ecae24df1d03bf976f670ad13e6bfbb3ade658d14dc4","pkSm":"04a5db098f6637ebc548feabdb9564d52e52db469590d6d55b6572474df0e8007471493bca84c4d152c2682166cc7e9825849a7e1a9f162aec8e6a773760682911","pkEm":"04686fc26c925890636fdaabae3434af53172035f7a191bc21fbc7ad9161ee1673c0e6b61d0c4b2db3140d622c46c8e42fd4e10fb48b4fd522ff59f795659a5b13","enc":"04686fc26c925890636fdaabae3434af53172035f7a191bc21fbc7ad9161ee1673c0e6b61d0c4b2db3140d622c46c8e42fd4e10fb48b4fd522ff59f795659a5b13","shared_secret":"8e1409be7adea332a36fbf29bf8668ae13d66cfecf5d02e8d2cb2c16950af36e","key_schedule_context":"02c14ae6a0da7c6764c62eba270ec0cc28b5b568b4849a9b59425c08860800fad8a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"35cafa2133584ef110a63010be05bcbc32fe5b5985f5b62ae94c07cd3a844ae1","key":"40eef365aa0dcee18cb7d16b0d24e35d","nonce":"a5f0d2f22f3e404976ca7b1b","exporter_secret":"162a8e2af6ba4e66e110b8dca44a076f49d4fba4614540341f4013159eab5e69","encryptions":[{"aad":"436f756e742d30","ciphertext":"1e9233f2b21834f72bc2b23173b107770d97092d1fc57960aaf0d011b1bb8f1767d6ff8cb3b5bdb857168260ee","nonce":"a5f0d2f22f3e404976ca7b1b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e870727eec0872dfc176e3d48e894a6fd23c560b2f7c097febd70cf819710e8a0c30adfe0a1d740b5e42d09325","nonce":"a5f0d2f22f3e404976ca7b1a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1b28bcf1c88146063ca68a999bee8b6d339bf9ec9ce1b22aad255abf96b7951f0d14db39d2a7042402d2ff3b41","nonce":"a5f0d2f22f3e404976ca7b19","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"df6d0b7d3e15eeda33e63942f9d5e60e64ceedcea2e19b0fe41c7a7df0c4c7a4ee4e83bb49462722fc0780aa23","nonce":"a5f0d2f22f3e404976ca7b18","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"10ec221a706669d206e4fdaffe72adadf4c98286728aa58b91ffea2035179ecf97677723a814464d6c0e3220f5","nonce":"a5f0d2f22f3e404976ca7b1f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"98f6093648abbedf6e20b09b67b7d85ccb3d5fc37a604ad55343576cbaa639d4dfb4819591749d0a727b5da868","nonce":"a5f0d2f22f3e404976ca7b1e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0201aba31cc93a603a390962519da378d3cc7db6bdaebd9e9690e0bdc26833d112099503f27b002f9adf377c9c","nonce":"a5f0d2f22f3e404976ca7b1d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"b4f9e059f243342d3de4aa73eeae2e191c55377f58bd6f2487d1ccfce5739ac084167dca2c4fbe4b04728e47ff","nonce":"a5f0d2f22f3e404976ca7b1c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"1482376408b564b4d856c52843b325da4f1d8a0a10e6f455be96c1c3a13401877ece5e387657d87ec135405bff","nonce":"a5f0d2f22f3e404976ca7b13","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9df3134f355f41dc559b2ba228fb721a249bb81311f67a0b74d6c22cf92cccd28633d756079c84bc9728b3ea44","nonce":"a5f0d2f22f3e404976ca7b12","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bef66b4290f5ffc092c61b8f92e7bf504329e5edf28b850d80e0b4f9385a077b"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"52480991a6dad93f4a82ad346de990cbc66e31e2e9e0963bed53027ce4c7a769"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"f12626be2223e055ce3c151faf68731e0dd895f34daf7cbc7e44cf87ba313f5f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ad2ff40ccb7744209ecc48b5e0bde903b79497a3bf0ee4f9ac92a525907f2e71"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"80ef89f0569f4bf789fbba227f8e631c23b6766ce6d5a3e2462570746b5cd0ee"}]},{"mode":3,"kem_id":16,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"85c7ca573ca20cffc0db7748f2b93a1faaa951aaedace61a6cc0b15755cf7cdb","seedS":"adfa10a0be028fec577fc0d8da73b3af3f6c8d96976ac3664b1a191c8ef0506c","seedE":"ac7928bd504449496e56517f59ad30ba62575c3c328864340247d73217823bb3","skRm":"bd739bdaba378bb0592f5ff599c14b656391c6d4f56a81017013fac0e12506fb","skSm":"d9d39ce984847da21bba54983f8ccc259e65904ffcbd9698230f8a7d446b1e3e","skEm":"c2b0fe035a29b73d57c462aa2ec77f80b997b85c062ac7311fe8f6c04229da5b","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04ebb2396e02ce2751b3cad1278f4c3b63e416dc8b38856907ae8192c59d0c12c95c599cecaf75995d14735bd070c9b5b2ba1bad45b4d63a6a275a84e925529dae","pkSm":"04751aa130b35d9b3b1d305d165f28ac9c749788a9acdab87568f30e386b59b2b4d617cca80c9f676dbde2809b428fbc58d862723950f8e2408f466b5b4c601254","pkEm":"0435ea0b3e1693ee6c10ab35b0d6a01d9c6879be1ca8676cc2fd16e94b622368b4125f4528deeb1d32dbb0a9b815341ee6dc723e00dfad789a46abc337c0cb2d74","enc":"0435ea0b3e1693ee6c10ab35b0d6a01d9c6879be1ca8676cc2fd16e94b622368b4125f4528deeb1d32dbb0a9b815341ee6dc723e00dfad789a46abc337c0cb2d74","shared_secret":"acabc837f0148300e7264c7bfc597ce119a5a77c51eb091fb943573cafa69ce2","key_schedule_context":"038c27d3410cb79f908302ae06a67ad4c6f971cc37f64c23807cb4de4adeaa7d76a633c96fae27707d2cfedac544e900a8b52a016cf86e4bf25a7d350fbe847f8d","secret":"dbbb9e2244449b76d56b48a7c8257f8b03e9a5948fc382528ad4f8464f3b8ee9","key":"51ad48b07edc1bc355bbd8ba1288f90d","nonce":"fa9f85cd9f4e97cc5655eeee","exporter_secret":"25fa7177ee5c4686f095fc5c51d2ce5c5871a6d1210c3e345fe4ba2fc8febbdf","encryptions":[{"aad":"436f756e742d30","ciphertext":"bab2fad2725ecde8486e17afb2ea44d908c023f80ee2592273e8ca7a25367c946d318f3bf241038f9ebd0267b3","nonce":"fa9f85cd9f4e97cc5655eeee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"63270c658fe7f960837760b763d487ba9b663643a3843399328aa90d06a19046e76b6e5a23460dec758b41a03c","nonce":"fa9f85cd9f4e97cc5655eeef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9ee05381c12b4ac0d6fdddfb0efaf7ebe126474af24785af7ead4730b3382155a7924996410f42905b05a7a3de","nonce":"fa9f85cd9f4e97cc5655eeec","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"02e38fd178ff2f481459e3a60b1386db354956583350acb3a2397375c480d95316d544ab903c0aa77493f8d710","nonce":"fa9f85cd9f4e97cc5655eeed","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"971ba4154f709dcd45fd46b3a7cf53cfaa34ffcf8758c7bc6beea9e91b5725cd611356da09dff633517c9284d2","nonce":"fa9f85cd9f4e97cc5655eeea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3e07e70884c881a61a71dc6534f10803976e135390e68f89e3c5bc9b62d1bad26316ab86f0eeba89e7886067bb","nonce":"fa9f85cd9f4e97cc5655eeeb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"82612e965f1b24d5b4ae7354e6e1be78994ff185f58e2027ee9595c931280809331d6e9ad09a2656f4d527d207","nonce":"fa9f85cd9f4e97cc5655eee8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"2172db33f3f7b1147be2948077b40872f2ec96f2fb720d0a7154e4f57fc4d85ff3d13f4475929431036b5e5931","nonce":"fa9f85cd9f4e97cc5655eee9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"4683a2c815d3c5ee7dfe92afa0a7262ff082805f38d695c04d4697ad250afdac79dbe358094441520f6f8a7b20","nonce":"fa9f85cd9f4e97cc5655eee6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c2992dfa7a64a715337b76d77ad991735657a958abf68a5c804729589820862e5601608c74081fbd286d868cb3","nonce":"fa9f85cd9f4e97cc5655eee7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8c0ff21900045dc8038b2f69bed5f85d9a9d7031623149e821b74efa9e164da5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"ce1ba1ce64cb38b8e67ef8835544069786582ddb831c460aa77cc7c9ebe3b8c1"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c8222f0acce675ba4e952f9e029c640d8b51dfae1b86348c7ac6c6d51709b0f8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"0634a1b9044df8e24c0c850a15f8d4c79800481612873d4a070d6886e8aae447"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"bf7a694636a4fe4f9b828ff82581fa0f69dc753daee777c0160e50d6c0b87e13"}]},{"mode":1,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"30144dce90e8da40cef827ef2f5be9d50c0758a092a9ebf9e5c95c255f2600ef","seedE":"082b20a74ce728004bf1f21037f02a53f49a1ef8e4bd4449d3cab2dd91365703","skRm":"4ca804179924ec5ce3e4839e194a98d424e55815bf178c9a2691a78775e30b2e","skEm":"cf79fee656566beaf32e1bb840202b8103b698a8f305bb59ea4f4ce020571e74","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04081c74b6d48bc97867816b5837f617ecab50bea0e15d37d95c143e228d81bb504c52e21596b5287a887f6b17b6e93f58ceb9d5a863ac726238f5db9d09261f74","pkEm":"0407ae51ebaecd25784773bf391996fa5bb38593c869918d0286bcfbcd067e8191c074311f438cad22a59c10bd648896b08f78e8ead4661f0d5c60f53545197e9d","enc":"0407ae51ebaecd25784773bf391996fa5bb38593c869918d0286bcfbcd067e8191c074311f438cad22a59c10bd648896b08f78e8ead4661f0d5c60f53545197e9d","shared_secret":"b4ae820185593e14a33a61ba879702eb8ff6906c5d3d307ccc3b535b53617afa","key_schedule_context":"01f433726a9b77cd11901b221010f824334953ba3ab86de05ff8f8ae23c35a6a58db5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"fd084a5369bd4d1974ff84f5739023b5a86a609106c36c19a16ed428d04bd9dc","key":"b870b956603b57888d9de6056c1e446c04d30cf24a02289c0b9c51b8ac8cbcb2","nonce":"499c4881497bfa644d8f023e","exporter_secret":"38f892be4c083cd8d677005c7da627de280064b938e61b33431aac49c62c66a0","encryptions":[{"aad":"436f756e742d30","ciphertext":"7e8c562381211392f26007ec7161ca7cf062e6fd1abea253e04f98a67ff09a82306b464769cd9e9715180619ad","nonce":"499c4881497bfa644d8f023e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"679fe5a4c5bd983361253da3b0b93056040fef90be39c9324426ba3ca1eb41fe7822b0fb324e3775d89abe4858","nonce":"499c4881497bfa644d8f023f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1bbca910e45c68abfda87b6447d5c21abdca9d290209be2d827bef0238a01dcd0ce400c31e30ed7c62f5e1b7e4","nonce":"499c4881497bfa644d8f023c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ec208bdc6606a462543045cd19763e678f8bb040d7905a552139f4d8dd99ba4c16bfa4c620846ae9a40d3193d1","nonce":"499c4881497bfa644d8f023d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"33ef12322d760d611538c45b33cbc9334685e7e27ca310e148975d7c29f4b8544aa6f734994c8634d42fc5b31c","nonce":"499c4881497bfa644d8f023a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3e887a4c6b71d4a540f975f5e05b3ae2c39aa7da55a8496e1d052509202db83b51277d78e1d31dc55aafa9bc0c","nonce":"499c4881497bfa644d8f023b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"f744dac9626c7d42a92e0f98c0472799dc7852b3fa230ae49a4cf119262699a9acdec511647319d48b26b0fb8a","nonce":"499c4881497bfa644d8f0238","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"6076f477c136f311a0504ffbd6644cd8e074363c4379bba4687dad04ee292d2e1549d0017e5c07bb0e2a1d79f9","nonce":"499c4881497bfa644d8f0239","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"19ee10fe30db22c18c092174fb45cb933ae5da2a7abe9824b63c6ebf49641ddd5ab7a2d886246e62a6ba98eab0","nonce":"499c4881497bfa644d8f0236","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4dd35263c4f03dea7f4a329fdfd567c48ac41c628d2140b3f4c58ee6450a82caf6fb5fc0ad6cfa1461e77712a8","nonce":"499c4881497bfa644d8f0237","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"3e7814f1992e9605e5d36ce870cc62552bedcbea99ea0792999f98ae345315cc"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"26280c704d05f0f2129025cd5c321647d255795130846b98285191f7cdb820a4"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e17451c393f84759bee24c1c2fd8fcc14b52bcb9c0fedf25a2d90a782931a0db"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"dd04432150426fc746a820d6ba230fc9bf6d0ea8dd270709a0063f0efe1d89ec"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"27a8caaedc09099b676894199f00f9789593a098de8625ddf3ca52c19d58a41c"}]},{"mode":2,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b258f3438d53965ca6509d83efb51644d61e966dec8faa14af7ce29ad82e82b9","seedS":"c35e474e1c473791dd85f2fda49ca3e3910fb9b09cf6bce5367bfeaca1dad2ff","seedE":"b93135d53fe4203397e25ea009667164eb3a0cc9482e9457b32da083f65ba10a","skRm":"ef9b18dd12df729e4a10434388ba9f40aa0d0c8ffdfc655af4a2090d4947c215","skSm":"fe4eaf760e1ee90b102011dda46b705bba1a10c75e9f6b0b1c93f07d721aa111","skEm":"e691594f3a9aa3f0b85e8dd336725375485780ca8eb1b991b94c885aa8953941","pkRm":"049bf3c8a0ba5ea99503c48ce1e029da503372385b106ed5105edd8b52fc04a02be2939b8f57c49fa41940fa09bda683ccddbbcac00e1fff77c7b93a75c9268d04","pkSm":"04dbf2887090e0477b444fed9c4fa580bc9bc4dfde5f6e286142049b7d10fe0dcb252f0cab73dc0b2287a6cfd3376a4d2214844d0ae78d39a72c0decf1df2a5828","pkEm":"04c6916f797d69eea4cf9da98adb1c6883f10c13f39b3cf2ab32bde11526642b42a54ba47a54987e242ffdc769fc3ec5dc457b99c3526aa58f54fdfe3ba700da64","enc":"04c6916f797d69eea4cf9da98adb1c6883f10c13f39b3cf2ab32bde11526642b42a54ba47a54987e242ffdc769fc3ec5dc457b99c3526aa58f54fdfe3ba700da64","shared_secret":"cc630ea984e4d32bf5a9c90e236375ce0753037136027601d343cb25186d891d","key_schedule_context":"025c92bcc6813ef740f5d927446355965dffa6d842897d6b73339075d9c87a658bdb5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"b710085fdd1a9a0dac16a159fee7cb4b105abeb9c0a3abb5af391ac19db2187a","key":"1544ec15a7adbb2d8bda205e4dc82127c6b63a037f1f117dee0c6862a7dd9e43","nonce":"ad3b03c3c6282908a04ac078","exporter_secret":"acdca5cd2ea7bdc6dadd095eb9d3d76f88c1b705061bf8e98d2b7d326fca135d","encryptions":[{"aad":"436f756e742d30","ciphertext":"a28d64117895ddfc39811e35930441c1113defba7a46561fe594e9c5bce02f365e5ae8432a3ffb3f2a1cb0895f","nonce":"ad3b03c3c6282908a04ac078","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"81d3036ce78d8e8f7b67b253ebace6889d031fe07c8529cf59b7784e450248a496ec5a301922f43481c35bc970","nonce":"ad3b03c3c6282908a04ac079","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"69ba30896cbfdc379ebd8dfffc0afe23168abac982db86d3e4592320dfd65b223dbe1c643919132d9bc8d162d3","nonce":"ad3b03c3c6282908a04ac07a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9b6b9e77cfa6af14da57a0ad719079545f7f668ade4026a678222f0c6c9f68748b01416a54dbecb57ce0bc35b9","nonce":"ad3b03c3c6282908a04ac07b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"2816f4209315267c00ff92203db037b4c6c65e846a3f92efc35868f7870d3cff2923b81d91d197e6a8763dcf20","nonce":"ad3b03c3c6282908a04ac07c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"5a52ff3624d1cd6d8430210ff936903ea2410a9e34fde986300acd6b19da5c8e25a1acc3302e1af96a5ffc0f76","nonce":"ad3b03c3c6282908a04ac07d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"4d5c7c811efef5e84e0355d9a2a6bba22357385fa101e2bf69de2851340104cb1695e929c17bdcf32cc4afdb4b","nonce":"ad3b03c3c6282908a04ac07e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"3fb284ba584a79791cff4cfb033cb8d0ef720bdfaab8b9c90d35be395b3f246c784654594fd97c941c7ed31f2a","nonce":"ad3b03c3c6282908a04ac07f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"46a5632d6112f15505a784d517f4c16e9cdaafe71a20990e3ce20f6ba21a5f2761bd36f585559e50a1be89988c","nonce":"ad3b03c3c6282908a04ac070","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ffa878cecbe6a73dbc4146b9be16e0b74b5d340e6595b01e866005f2ad751676b3b1114ae1b3870e4999649530","nonce":"ad3b03c3c6282908a04ac071","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"82d03497def1c27e00d729572b77e4ef0661793046faa684e427e9e0696e20b3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"897c4eb2e1a8184b1eb9c978f9cfc0386b64da6b1b9dd91b8448b94381ce7a40"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0b9cb2c464e002c17515b0789a15a4680645a858fbceb65f9da2c350e54530a4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"de04503063861ca3ca5a3be2df391597adf03d2d5f4ac0c6e5ee1fc85d698560"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e3ee024f24a11df38978a15c812045e18bb8a6bc33c2a13c95d0dc773e9de6a1"}]},{"mode":3,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f8246c84a85b100432cde4b70cd4702a9720614e25f7235904ee6271ffabe00a","seedS":"6ad2d20422ac9a6d784a1ba53dd3aa309df0b7abd04cdbe68e9192e356d76acc","seedE":"89d6bcfbb2dde2da7d92f40d9d00b09b87e954501f3509f63a748b2373e8f466","skRm":"60ac53d96153260971472d6c9201921bc7d0c60638145f89ada082bceda3a571","skSm":"40fc4c1c632bf63309468cbce611b89d8df18108578c8883567c9cde4dfd899f","skEm":"17cbb948d94daacebb962ee8f355d40364184817ec2412e45c6b1e96cf108149","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0453fd5d33333b21ec5f8910b3fc1c44f1c8657dba1575cd32514e4e0be7e7300d70e4747aea9c965923a20056099cb88717e54b5f3b3d6569a41285bba680a380","pkSm":"044a49c389ed1900a8f058e96cee0d61c0ddde13330a2fc08b4ed361588a8e5476236bb9803c6351312e6e59bed91ad90c6164ebc8f3eb021cd19cb20527043b61","pkEm":"04f81d2a10babc103aa42e54d85b8a2d08407357feae595720e3c7fd57dd49d0bb6df777cda8d5c933af84354b9b3a66ec2bf5fd816bb2a0e65e9284d8871dccd4","enc":"04f81d2a10babc103aa42e54d85b8a2d08407357feae595720e3c7fd57dd49d0bb6df777cda8d5c933af84354b9b3a66ec2bf5fd816bb2a0e65e9284d8871dccd4","shared_secret":"deb5ec014485412ac1e56f20a91ad59da16373ec5a1f6bc1c525b7f30589ea37","key_schedule_context":"03f433726a9b77cd11901b221010f824334953ba3ab86de05ff8f8ae23c35a6a58db5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"6b867503f042d7e1a7b7a05d79bdfbc1b57f6da46cf0b6b0cc49259ea155101b","key":"951dc95a0bf2a5ec16fdca1be8e4834ab6c8f788a10cc9eca2770038f15dd976","nonce":"6849a1f2710a8526142b3bd0","exporter_secret":"eda5ed2a8dac952792e0a558e58b1c0e584a6edb7aa2b80a461013da7a507e45","encryptions":[{"aad":"436f756e742d30","ciphertext":"44d2563a3d5348b85252463b5e9770da4869ace9333e889f9ac89cc564f8537a96cf3affeec44e0a8b32cf803d","nonce":"6849a1f2710a8526142b3bd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"33e4a19f81bd096ceea776dac727d35ca1fe73ad541cfb5db4751e7eef357b5328207ed7c9e7d69bc42bc44569","nonce":"6849a1f2710a8526142b3bd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7b15572b45cea0ae2e8fd10c0ae45d69bf8e1e31fceac38cea797c3d5678b8eb956bef1f1452c4727721ed56d2","nonce":"6849a1f2710a8526142b3bd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2732b89b46cb77e28c4911252a62b6662e976ea589cd26b84d4bbb6e35b06e7bbe27ebd20ce57fe7fe7e793ac7","nonce":"6849a1f2710a8526142b3bd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e24983665cc172d40cea72023951d59674e501664b5cc3794825741e0516665b4d59452cd148d41aad46cd8daf","nonce":"6849a1f2710a8526142b3bd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f298134f57ddd1fb06cbfc9a70f715cabf6ed878fd31d0d0438575b29f4fb945619d1b433e4dae5a32b5e2085c","nonce":"6849a1f2710a8526142b3bd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"45eea956eeafbfa21b2b1ba2db3678d15dc74d2c6181d503f67178ba225a88d1a3f5a46206b0189ae71c1d22c2","nonce":"6849a1f2710a8526142b3bd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ce5ff70bb7ee85dddb9baefea2f739138c5665e5d006b104208000f5c8e7b5b061557fbe05d28a4c0fab343cef","nonce":"6849a1f2710a8526142b3bd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e5794b9166097caf11ecc691665fb2bc5fcc41d3f5c236d214756ce4f17b4e05d81757b3fbab00179ed7a558e0","nonce":"6849a1f2710a8526142b3bd8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0406542e1a4b01d7127fd6a1c09d4010df82fa4b4d78a014f108b2f10a82db143d14aa21793019969b02f3847a","nonce":"6849a1f2710a8526142b3bd9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1a1c57bf8407b454bb0e471764713bba703202e629e4cfda27d897a29a376ef9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a4faac4d3b4113973382f5d729b1e8b58da202843ad33550e86573b8c7247729"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"334332880a7f48319790de3d66a2f3e92e094322302bdd26a6a354dd5b68a153"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b0e396a47aac53caa3e1b796698e6e0ee1413cb6416e6d13a4ece58992ae225e"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"fa37e66183010d74d537d08c64a533e22628918ef059c10bc1189d4e8f5c09c9"}]},{"mode":0,"kem_id":16,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"466840f087e9747a8441719f96888dfea093cbe3a4caa4e154891ff0e5a22caf","seedE":"3dddd441d33fb4de895d33c4bb200d650a36abde25cbac0ee53447b7caafeded","skRm":"ba2a98db7ccc7fc3894ca4812904eaae2dc8f6e7455915fdabab5facd90e521d","skEm":"df87d0e9f0409f749499c28bb9cfe9a175cd7de674086ba9cd261a696a12e1d4","pkRm":"04981708fd745a9abe489d8724dbff0ec49241e7aa2b4cb7d463cecb80fc0ee9b7c583bd3b09c6bc0ddd74022342b6df5a6eb3b73528786645925dcc97e728c303","pkEm":"04ce090d292a9adfca5d70c466a4388e9d57943142926455f95cc9b3220c54c6fb0092318c8155980ae94d2c407138410450e2d5a2171b75b0a04895cf8daec8a2","enc":"04ce090d292a9adfca5d70c466a4388e9d57943142926455f95cc9b3220c54c6fb0092318c8155980ae94d2c407138410450e2d5a2171b75b0a04895cf8daec8a2","shared_secret":"dc5f1f85559bdf4f2daceaffd3005baad2cb18a3a40af6d33ef232c157acbd84","key_schedule_context":"005c92bcc6813ef740f5d927446355965dffa6d842897d6b73339075d9c87a658bdb5dcea79c6245a722348982ea03da56990c996747fcf13675cc980bc9bcaf6e","secret":"a2c58978ff0f0ea2c0ceaf312ce27199b01059354d116f426a284a3fde0b539d","key":"22818854f97e1001706745d76e07a06a440b4ea63b11b3405d2ecead866a81a4","nonce":"696fa16d9ae48bfb6deddc27","exporter_secret":"4a397e78ba391f71919941fd477895fa0739954a2b2033a0d5edbe1b4edf6531","encryptions":[{"aad":"436f756e742d30","ciphertext":"cc93284dac4e65f07a30482f8a31ceb671d5d029c8a0e0260dd364e73dfef1aee4a94ce474f0db910cfff24f07","nonce":"696fa16d9ae48bfb6deddc27","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"7cdc5c24c46752beabbcc1cd3c8b373e21da8a709e18424e6a1e3b2c5d3d9246ef46456f0babc370871c683a9b","nonce":"696fa16d9ae48bfb6deddc26","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c1bd95c8df9901dbc6e3c128bd1534350db5e8e71bef7469102dc33be0aa7576873a0ad34e3b549752c461d2d0","nonce":"696fa16d9ae48bfb6deddc25","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"71142545349be81bba943f8175e1a043ef709f3974e3a27132efcea05f08c091e8dae89187fb5fb267342a0029","nonce":"696fa16d9ae48bfb6deddc24","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"fc640c906098fba7d72b84739665c1d3dc064cfc4d40738999e2f9d38924cd0b0b3272b4552e82e4e94c726714","nonce":"696fa16d9ae48bfb6deddc23","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b347d55ef585fd8bcbe0457de73b984400d10e2ea28f6ece07110cb8e4413cd7f1d8dbab35a02d722dc69ee6b1","nonce":"696fa16d9ae48bfb6deddc22","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"5efc4b3128b5c9bc92fd2269b1e03a4083eb76b7c946a6a68d8c3b6be166e7f4432f87d1efe266d681f43d874b","nonce":"696fa16d9ae48bfb6deddc21","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5bcea0a89384808f48212dc88112b8e7078b4a8b084e5f6a42294948424716bb2bb2aaee21f966b7e932a6bbe8","nonce":"696fa16d9ae48bfb6deddc20","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ecea2ea2a9bc10dae58455c9953b31e277da4775781dc33280c14877d3155092831bdfc442965647a6ba3047ba","nonce":"696fa16d9ae48bfb6deddc2f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"4aa3d15a2254d09f79b5050cb6ed6126b40e57adfda2810d4a1420b6916ea72ae21385524db49485ddbd8cec03","nonce":"696fa16d9ae48bfb6deddc2e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"15f4fc793eb5544d393c244f5b9e2b4b645458fe1f0da6b876242c00f12d7cf7"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0b8ade9a5a2966175f4214a5c9d1881140a28cdf97aa47c2356f5ca991d4b152"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"dccf03eedae715f34376c4e2a87c896a7252aade2fbd6fde65a2a7e44465cb49"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"063e87baf2a8604bae19d7cd9a9054f84f34dd95e7f4722d5b3759e8be05dd31"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c9fed34fcbe2325222f57d338acb58dcf4f8f7862778f3bedcb28f66f7379815"}]},{"mode":0,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"483bb0a0fe639035e3909be5c43af275da1cc8a0f355385fc4c7af211fbcad60","seedE":"fcdcc1cd73bf5cc87b991ca1f7b2f4f0ec2aac20e105efcb7111177a150af48c","skRm":"64257b7a86638b98c2d22dc4b730b3f344fa2dcc3573ce85d2bac959750b7709","skEm":"f779ab76bd6a8edaec8edf9c8382ea15f5f4ad6a9aabebc1450b6c1025dd1de3","pkRm":"048716e273cdf7146a7d68941f9d8b0115cf25ee484e37c0519a49c90e79149c60bf7dc40312a324c0710e6eea965f1267ea5c2dd0e6a487b50acdfd6f71cf0fce","pkEm":"042eba2b8c1fa16ee99ab9f4627aee2358f71d6240955e5747ab869b5531a43ddab8dec00e9fbdfb2f92073774a9981f72312ff6361b551bb254295fffea04de02","enc":"042eba2b8c1fa16ee99ab9f4627aee2358f71d6240955e5747ab869b5531a43ddab8dec00e9fbdfb2f92073774a9981f72312ff6361b551bb254295fffea04de02","shared_secret":"23df0808be6ebbef5822349e5dae008d2c1e9f4020367097bde447ed5fcf383e","key_schedule_context":"005193809f9701d761ad3e980ec406cc14ea789817d821d0cb139989260f37f4c6d3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"e0001a90ebb7efc5e85e1f72c90ea2e98b14c0431379789250bd2acda2a95208","key":"652abfcff470224fec73d73cef7c424401cb4d72d92ff5a8447a865c19830535","nonce":"07e632ae808cddf6acaeb15b","exporter_secret":"f3a31ef376affde7513fa5989ffadf6e32b8c7ee40a71d2c2f890dda77a5dadd","encryptions":[{"aad":"436f756e742d30","ciphertext":"edcfa837ec3e00787a52b462ac2a3a438a75e8df971fd21fa617998398c34ecfb69b4878faaa68c21edc39be2a","nonce":"07e632ae808cddf6acaeb15b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"02dfb0620b7d7835f66dd53b3444742649104532a808aab474b13c311b3d5dfb99e80f00988b9e70546c369021","nonce":"07e632ae808cddf6acaeb15a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f42d3def0a450bbf6d15a6950a64c198bd36760a9b53e775bc3e60f9ec38253597b725181e6d3b5feaa0ad80ef","nonce":"07e632ae808cddf6acaeb159","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d729d3b60bef054f235af71fa09bc2df2770c1889b431f69396f506b71775e8c5e29653e1b2b63b1e89e4e4fc9","nonce":"07e632ae808cddf6acaeb158","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"03769cf4d9e13994376ee35afd627b9f7d1f495ae2d1d3538c4c803e9c08aa13cf9ae7ec545c0f17b28d6b1cba","nonce":"07e632ae808cddf6acaeb15f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9df2d9690b5b6d616a4c5d2d2071a409a187ea9a76f11c9247b15c74e5c771a74db613ce35869d43e0f5db31ef","nonce":"07e632ae808cddf6acaeb15e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1458125842e0234f178663fee07446afc0336f52ff76b0e425309941c846fff62a9f065966316345df67cdacd9","nonce":"07e632ae808cddf6acaeb15d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"2d9933061cdd7df0abe4f195924e86a2307863a034deae74ad5ad86c991311f574b32f1f591d7d6ae25b7c75b3","nonce":"07e632ae808cddf6acaeb15c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"ac1bb432b048d0ee419c5c9498bb2ce912fda19d27ed0c70252808240746e78625c448038b8ac0963f57095425","nonce":"07e632ae808cddf6acaeb153","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1e36fe5f2221a82dca3421b6449f37ccfcc6652c887cd782b644f85e14d89606b7712820f92b4c4af333703204","nonce":"07e632ae808cddf6acaeb152","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"649768704ae994b8143f95e12bc79be662ca632d870b635cf0482ed7d29476b8"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"fc7efd160492ab40b1147296dbd3af5d433c798b52aef3973f0951c2df6d6cec"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"a3c5fe8a2d3a842c30d2ed9aad8c47cb1a465abb20b1a2a6f78baee5f4dd2ec4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"13f67e00dfc25cba38864d0637176283599cda360d4537c4d49c36d5d3db51fe"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"207a6aeb271d89ed554ee58ae74c1d08cfc758e02c1cd911ad7d5d351575a259"}]},{"mode":1,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"4ac36e24812130586b5326c046de98d3186124dedc8fa6afe6bb1181540bd0f7","seedE":"d5f77ccc5d8a284a97f6c9c72fa5cba1daff07cb177770796733129a39de0c14","skRm":"4ef2e67bfc1eb724a58ebea6d96aff6d5de11c7a18991f5771cb30069610a6fc","skEm":"d789d9d4a2a040b785b0a9feabb343425cc8e2d8f6417e42789ea6d18663951c","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0492e832e125ce8981fefdd9cd36d36d729472e634e7ba0a027909f9436b1f26593f02da0257acba3efded2f1073b1f4ccc4b57cc024e8d1fd6df6a122b850ecb2","pkEm":"04f6ddb4c4f41ec4c1577e34519fb3a5b8d659945d425b4b117e02636841c4287fa34bab4c35a5d41d788a8c321b8256cd71c93ff4a8799ed28301114196f9f6a6","enc":"04f6ddb4c4f41ec4c1577e34519fb3a5b8d659945d425b4b117e02636841c4287fa34bab4c35a5d41d788a8c321b8256cd71c93ff4a8799ed28301114196f9f6a6","shared_secret":"c6ab3fe04a92b975f5fd98a09db71063814b03ba86a69da3004e3a0dda8bbc40","key_schedule_context":"017d40471421306b100f7401fbf733fef208e1508bd2744517e95ef7471f21a1dad3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"6ab05d9bade32456ac456527e164651f1e7b90a22cec55cd32878dd4770271bc","key":"abc5af188ea872c94cafd11dbdb7836cc1930ca0271833ba2a36a04d54404912","nonce":"4724facf9d0af1c7a55a0560","exporter_secret":"38e87692f83d991b20e731e1a29fa86bb92630824de1df6aeaf04fd4d59778e9","encryptions":[{"aad":"436f756e742d30","ciphertext":"6972d38453567d2624db55ad748d42ff3177d1e941bbe57f68d03b53fb0f1d48b6fc2dfcb84d8ef39f3a8ad6c5","nonce":"4724facf9d0af1c7a55a0560","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"6ff2faf2ec58ddd27c3a97a25a1d1b3db45484f2bb1c84c751f58c03d660cee4b942a10bac339044bd65157c65","nonce":"4724facf9d0af1c7a55a0561","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"e2203b51c7d776ed347168dd7d93066184bb7e775277dea7f95bcc3e897cedd52fdcea492158116a8354387f85","nonce":"4724facf9d0af1c7a55a0562","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"458b0a4458330eb1fe600c62867fe26e8cdeb5b16f54b5b774b98ec7922d27ad76d6f823668d7a7b027e9c8682","nonce":"4724facf9d0af1c7a55a0563","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"c953c3657872749b048d8245ef98cf33a2f7e4c62f27d9b9e3496fdf50b951e63031092466f4bc67fb93bcee82","nonce":"4724facf9d0af1c7a55a0564","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"46d075d224610a1f9fd9ed18fb5fa898112e27f3f0cf97a8ffe94478904f21bb46e68270d8bd7741d256f12dba","nonce":"4724facf9d0af1c7a55a0565","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"19b51358618270c87ca9820e9df7be39b9f7b581e206f570c85e8011ae114278f869ffe70e69f8ab0aff13315c","nonce":"4724facf9d0af1c7a55a0566","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"376c925d9efb620cb2613647f52ad415831afb9a12ef4122213621e621009a3435df8a99fc184cb7a7d4107621","nonce":"4724facf9d0af1c7a55a0567","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"86848929cb7bf449943f29cfdc6b0d6e9f5c4ea4db69b1ff0f3a244d4bc4b85c5da02600d54d46f23628403944","nonce":"4724facf9d0af1c7a55a0568","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a138f4b4f7fdf18a61acee43458c575b293beca34ecca3d3ee07a229c5aa00f3e357e00db8b97f3e0950680fb1","nonce":"4724facf9d0af1c7a55a0569","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f0ead771d6b184134a6770ea37a1f54fa9298d55cb3a09904894039d7c43369c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"53227b56dcd547bc4a8dd6df4b3cb88919af2a6511135cbfe96f3aa1f86485cc"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e0e1a39d3f1927b03f7f4486dcd56edb73004490dcd996f3f6b1e69f62f558ef"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"356ca58ad6658834d97777d59ec0314557b316f5e3396065622bf268be17e207"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"faef5b99303d4689fc49da7a590339877e70262a64340f7c3cfd40f0d1a5e97d"}]},{"mode":2,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"df66678a95aaf77b4a3ec2635b23b181dd3d8a05c68022cb6d5d71b119c1535d","seedS":"01bbe1ed07b0688a97d888880ca203b9ac5ebf298f4a5a081e1fa46dbb6e183f","seedE":"336770111a4f3e97ddd1592a15e4734b910b9a5b566e846cd8f28c6199f8c5e7","skRm":"6d50088dd600327d6491736bb152d0e2a2ad70db0c26d5f8a5681e25405bd89d","skSm":"8f24aadec1e93eed8b5570844074591b6c1eb8f54eae8af7ab398a7e48d2fa29","skEm":"cdfd892a2bac5ee9e2422122323da13b17d7f0873386b5053de94d2636f3c53a","pkRm":"0494a8b15d3abddf20f57b09c784687ac1176dcc532cbed5d3704441026b00dc9f2436c77bd1a4a5a219bdf2aa324b4af59fbec5caa86db4e83cf7d5c724e0c0c3","pkSm":"047cdd53556de3eb39e267c546ed61864d2460a3225b224ce64860f695e44ba00ec5433cff0e535713d1f2ae1e138fa93463b22039ebac399e6fa99536688e536c","pkEm":"044b364b95db5fadf0617c48688eed541aab99ddf72a5357ae371c34df7803fcd0da422f17ce4c68d03fef7c6ab272041230a3901361445644c2a6c3d02e9532c5","enc":"044b364b95db5fadf0617c48688eed541aab99ddf72a5357ae371c34df7803fcd0da422f17ce4c68d03fef7c6ab272041230a3901361445644c2a6c3d02e9532c5","shared_secret":"f7b6fa8884784f6723692603cd958db6830cb0c87718f72cdff10758cb97a3ab","key_schedule_context":"025193809f9701d761ad3e980ec406cc14ea789817d821d0cb139989260f37f4c6d3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"53be166abcfea99cf7bbe7c20e3704bccee414244cebed9dd5a2bc9f3ffe1600","key":"807c3ed1b3fdfa8ffb052e01e2f60e75aa9f47ed8378c17ad737e58f32954888","nonce":"7c84b0a76e3bff59f55eeb66","exporter_secret":"ad0c4d9ecace4d473c702f15f83c14964abc8340d560fb103a8ed9e96d30477a","encryptions":[{"aad":"436f756e742d30","ciphertext":"b626e15a016a4d1141404694d4f42300324839c26442761558aff3f11bead5af3102ca3eaa3d9ebe7d61b5e9ad","nonce":"7c84b0a76e3bff59f55eeb66","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"9a71859d14fc01dd756e9c5ae3bd17f30276f60702913ed52d9bdd1f984dd3c1f8d8da0e3cf80d7948322e5272","nonce":"7c84b0a76e3bff59f55eeb67","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"56e9a11b272337128786b69cbf4969d92bfa91ff642c76815c3ed4169d8708d1736466d5ba124de3de05e274ed","nonce":"7c84b0a76e3bff59f55eeb64","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"bda8c5ea76c250209ed354711e2fa4c7a26d90845b9c2793931449d6c054a4a407a3782f2e8274294ada480ba9","nonce":"7c84b0a76e3bff59f55eeb65","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"47c2b0dd4cc2a0cdb9ece76eca03d71556f33554f52800adc208c1c954a50035d3a0c442ad07e5a4a0af2d3987","nonce":"7c84b0a76e3bff59f55eeb62","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d18c385a2354a5090e99472d499f67585e01542a69bbfd301034532b04171f0526fe7517dd8eabed8df627630e","nonce":"7c84b0a76e3bff59f55eeb63","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"130092f9c1902cdca003a08c28ce46a8507755cd578861f336613da3f165b78f945399a4e3b3b3f9ee1ce69f78","nonce":"7c84b0a76e3bff59f55eeb60","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"fd8e1c6369240ed7ecda11a0bc6dae9e7528c45823820bc3e44071730b63fad4f290c909aae25f25ecf55a85a1","nonce":"7c84b0a76e3bff59f55eeb61","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8dbc566792a20a312e1bfcddcbd6bf7017d3e839db346199effed067c5f4bf3f9b89373c2cc6dfdc2c50440bad","nonce":"7c84b0a76e3bff59f55eeb6e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"8057fcc15fed0a16568fb4a896a7c62acc440f0a2e7b1595a6b52e18c3b01cf8f7984caa96f91abd10b9fb29cc","nonce":"7c84b0a76e3bff59f55eeb6f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"bfe763893bbb429e86e2352ea9c53556c8b4d8b2dadb3fd900371679d293bed2"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a6e3e480c5a99278ec252f56f0efe91c5abf40b3c4fc8624d7ad4cdc239b1c33"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"4186f4de3878e8f46afc5df03b9b7c17036069934ad6c5c1527714176e1f9b05"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"bc0de36f7e92535570e1e21b33a7436c98f126f443a1db316036f2b3e3001eb7"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"934a3d9a609cfefce3b882263edf89b35ec4cacd1e0be0491fe73685a8cd6cae"}]},{"mode":3,"kem_id":16,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5f587a548f7cba21c98ac0dfdac619e962aba8526339c7ad98e804abd9fcbf19","seedS":"1093c27b5e2719ffade39714b76a8e994341b019de9522d89133b41a200f97da","seedE":"7454e819f88659590461a91dff451738df7789f5b4ced005211ed7b264be713f","skRm":"44d78e464befc5faa20e36e8a5f056bbb2970372f3617a6a28883f05891a5e73","skSm":"6e7a6242333ec01f7651bee7a6d51097208647ba3f31991079b318cca32463a3","skEm":"b0782e95b3b3d115a40a5382ea33a29cd91e51ed85db42fa61fdcc51f5125bfd","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04f464a6bf8ca0cb0679391714160c34a853cc8df2d89c119c18fa835600232c9c73041bd7d17129f7de2573a72385f8f507ba2971280f4f0615fdca8d5701c3cd","pkSm":"04a4f059459fff8a1cfbb58ba01c9763d41355c31bee2c822d3831cb0fec2cd06c970713ee5bfe9ab0f9c4ae70afa88a7bac78ac74dba6fbe12afae83e783fce5c","pkEm":"042b8f991a7f0e1a833f58ce65bf65c96780e9620ae3ab6e8df1645b54b70ed89adbc9c2db9f4b6a0c7c08a76523f24ccbd555da8cdd0403e5f1aaf3f68e0dc62d","enc":"042b8f991a7f0e1a833f58ce65bf65c96780e9620ae3ab6e8df1645b54b70ed89adbc9c2db9f4b6a0c7c08a76523f24ccbd555da8cdd0403e5f1aaf3f68e0dc62d","shared_secret":"ae88d508550ecc1804706bf7ef31c329cd2475f20b3ce3082207dc7c806121d5","key_schedule_context":"037d40471421306b100f7401fbf733fef208e1508bd2744517e95ef7471f21a1dad3da0100c16489caa7ad5adf41151b806e7a2a438b79586881afdfaf8bc6fedd","secret":"35a0d70ef7522b31c1d534e268a6d5139b0943b598e61c1c81f8d21633f459cf","key":"2fc299bf7d673aa547d3cb9972a7976bc262508c52a1a84c617e0f0b6bca3c39","nonce":"4af68b1b2cd29814fc8020d5","exporter_secret":"6370cd9058b498d3db6cce9beb618b094ff0981b846d5cf59676cd7e5e41dd3b","encryptions":[{"aad":"436f756e742d30","ciphertext":"694ad6fefd198fece3706b5fd6fb696ed03f399f3bdfabaec36b52fa63153db22a50978c6b0329a6c583a7380b","nonce":"4af68b1b2cd29814fc8020d5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"b0f4eeb0f9ef54c9f5dbc1b16dec408dc4160e255e768b00cc21aec6c5fb65b29835131275ce081ff80e9f05ff","nonce":"4af68b1b2cd29814fc8020d4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7d72a1eaeb27669fe6fa123a6c4bebecfe9fc035c8b0b2402ccab99dd92c4047c9953a537fb1e647b9e8d49e0f","nonce":"4af68b1b2cd29814fc8020d7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9fd647d26cf03952a2877b1d7507b6ae8fa61f3985dbd41491fdf306b560baf0652d391642f7487474cb5f153e","nonce":"4af68b1b2cd29814fc8020d6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b55b04cb0cfa1911bf1c4cef46fdafeb2352de13cdb25e254d4b611ae59cb2342208ccd645e4be0f6d02a34125","nonce":"4af68b1b2cd29814fc8020d1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a8fc30cdeb8ecfd7a8cffca1f7e4a59303cb7edd6721868e0ee83c689dde1b17531fe8f87ac50830c4bbf99def","nonce":"4af68b1b2cd29814fc8020d0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"6bdb1f7e55d39ee13694d3a9e06bb82e38e7b38db530e03c3507bb625fbbc743407a11261fcd87c1d0c23e8887","nonce":"4af68b1b2cd29814fc8020d3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e0aa389c3546b37244a0a13fb188aa55c1e84680a21f100edf0e33303804abeb10d5b1cc65f5c06c7bfb5d5a2a","nonce":"4af68b1b2cd29814fc8020d2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"78b7b2716fe7f0fa5351035cc2cc4e9be5ef99d9bd56d10aeef41cf08e60f3724efdf6287be81a8363d8df7e8b","nonce":"4af68b1b2cd29814fc8020dd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"7195492e8fe7517e7c1fbe257e1f32fd742852debcbd218c83cc097c36a9a21cc3dbd52f32ba06fe4ceb49d1b1","nonce":"4af68b1b2cd29814fc8020dc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1c822c8d8f6ea1bbead09f9ccc92df6ce2786b96772053afbf294241c16db4ce"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b9f17786f59ec280fbbde09f75be3089cd2909ef524a2601a0ce0d8de9eb0cd1"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b6190643fe019c146dbd5e40dc9b48ff5eb651c770518dc38e68f4e6e13ab4d3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"966bc89d4ea55312007cd418deeadc583e17b644e9d235f818b5b13ff0a17a23"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"dd38c21d8885b436df52160e9f0e666326c55fe9049abaed7d06ba2a2b7218a3"}]},{"mode":0,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3d4504f63bd3c1e292043c94dbc37b57085059df1e9f67518158deab2ebae28a","seedE":"c06b7c4fa7fcdf4c149d5616dd913a47c0d861e35f1c3b9bc8228a26aefd4f52","skRm":"3bb1f10127548c1ddcca9ecd25407dadf34b0ca63e8c8efde26bea162f3422d5","skEm":"6246a8df03d24ca9dbb6a32675010d9a472cc97e00ababe835bf3a03b89ae6e9","pkRm":"042460a1b576c061f89bdc25f6149dbb65dd48798407b5500de0cd23922a5fd5a1e55463096bc1a44b1cf761df11ac6acdf49f46fcb025fe2cea367292e762bfa9","pkEm":"04153e63654a815ebfc292776cafbd06fe1f9c5eabd997d146eb98bff3b8064f979217e4903e979a961e81b36aefaf9ff9312765a3754f0bc2fd406947bf5357f2","enc":"04153e63654a815ebfc292776cafbd06fe1f9c5eabd997d146eb98bff3b8064f979217e4903e979a961e81b36aefaf9ff9312765a3754f0bc2fd406947bf5357f2","shared_secret":"f81985f6fc778694728ba142df551a60a529fe0f86add8f402b4786abb91158e","key_schedule_context":"0059a145bcce1c1c862714bcd04c342351f917429e57578e3a2fa684c7ed0403ba264455f90835145bd18f39bfadab2d3808163e74fc91c733021e758f5b70c2668c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"56670b96b4a99297fb753156bec636c3f9019e2778520f9650d3dee2827bc35e2f9257437356e333d96c628a4b9c043b36a60db894a3831954a431889b2e0570","key":"0fd75b296c0fcc51ddf829c16b664ccc","nonce":"5b80ab1ace6b4e0add668804","exporter_secret":"1da2e149dd9972a5b45e6dfa8da7ec1d24f8401ef83f1d6244b76bb114f25f36b2963d48e39278f71678edefca22aa3cb7a9a16f243799db93fe95294d323a23","encryptions":[{"aad":"436f756e742d30","ciphertext":"d382add6f0915aec3411bcdb596a531cabb4ea8c09e5171d2b00ca285e6d782e2a5a828ab4c2059993c3e55d95","nonce":"5b80ab1ace6b4e0add668804","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2d05d58388725a0af35e3baa7d233d358055a856b69919bb3eec858373bca40dcdf1ce07c5a8584e203f1cbed5","nonce":"5b80ab1ace6b4e0add668805","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ed54296f6579e95cf33dc38c0e8a7158cd09f3041d0c03bb7dc1a1892a36441ba84a10cb470af4954d5d7a07c1","nonce":"5b80ab1ace6b4e0add668806","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"7e986cfdda7660ebd500f9b81caca638caaec9a32c8aa4765a0ef268f6a4c975c9991ca0a9cfd407cd583a4859","nonce":"5b80ab1ace6b4e0add668807","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"172bc3a81f1843724134e3a50da0099dda4f316a8900e55f164f7253a5df977f9bb05bf65464bcf06946ea5c30","nonce":"5b80ab1ace6b4e0add668800","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a1e235e1d6142e05135b1b6e4d66a556648719f8e2729b8b94eb4f0f16e593911b02dabad8ce9a139e37f76b47","nonce":"5b80ab1ace6b4e0add668801","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1233ac00bfb7dd8d78d427865b18658f27cab952f8d7cc82219053b663ad922be817cde39931d8941ad58e055a","nonce":"5b80ab1ace6b4e0add668802","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"074996f439738ecc4745ba16320095b70f32dc3d58302a811afe0a432e63d219085f7d05ab46da053f140ae4fb","nonce":"5b80ab1ace6b4e0add668803","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"973331248414a7a61c0d83041b1f2aaf13f5415891b7ea4baaf67d1fc6b4f432cdd3757295cf7794e61d6e8fce","nonce":"5b80ab1ace6b4e0add66880c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"44bfe1e3ebbf6b0b5a5cf8fc9f19d343defc943dfc6dbb03ab1c24e1a6a4c808abb00bbfa077f51de8c63ce8a9","nonce":"5b80ab1ace6b4e0add66880d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"a6915faa798ec8ba1af5f4f646380852f0087762fad105d22a48b0dc3276df32"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"4482bdb729df726c733680b12c3f3efedaf27e127050c68d9b319d67fcc26246"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"8c70c298303408fbac3245e766fd835e8b4f98158caa69d7e2aa8d9e840b4b44"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"50682fb87496383686668cd66ab7a85099c7eb0be05d51b36783f447352e4b2a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"098209fdb7f854cece7449870758b888a3ed2dd409619df514d0b0aa9b878b02"}]},{"mode":1,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"870a8cd14bdccd6dc2d538e4b57fa79d2ae19657fb92163b8c2f776da0d9c5e0","seedE":"8ae414fe57a79d6ee44c6ebf03223c0a23685a9ef131513c9501803155b84650","skRm":"723323b210fa5fb49fa686e20df412f68265cccd19af92bebcd737e403c358c5","skEm":"bc2e5291d700a743050d85ae1ef59494b539eb380d99bedb628dc8195f76f138","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04ac9e67c5e737d35bf3c4c756b8701810819d6debd3068c9a6b3472a307d26dcfe00faa1ffb706bbfd40cef488c6acd57283be40654876a4ae815b8501b7b0cb6","pkEm":"04fee5bf414527ffa5c439a5b1d2e10b8941f0e577a2f6e811755f9248c4ff04610a84653887f9674afeda68b879ea7a4de0e1a1f5a1d89d358499b2d4753311b7","enc":"04fee5bf414527ffa5c439a5b1d2e10b8941f0e577a2f6e811755f9248c4ff04610a84653887f9674afeda68b879ea7a4de0e1a1f5a1d89d358499b2d4753311b7","shared_secret":"35966cf7216392119e7b6a4ec3681de9cc69bbed75c09d66a2aeebe9e1d29e8d","key_schedule_context":"0139f6011ebbfa0b089f98c9db37956a61abf9fb58427f56ada80743584c1a6cdcfbd55ffd4399433c54b22f53e40738082c9489846c4c19c08fa771b0388da3eb8c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"d451d6013533360a86d0867a08363b3129ab1907eec7bafdc7f48f854463cdd23edd337f09bf1c62f2b4946a89cd66f5b0a67b82b5d0994f54f49dd84665d1b9","key":"1b70d145c0099c28510618465569948d","nonce":"74eb101dce2cbf07c8692aca","exporter_secret":"4676e4f4a13fba7cf74721c5aef58919003fdf0f61f07250b622a61f12ca10013c490daca9110593c1e731dba7a56e93919644000792f83441c9b4517f0e1dbe","encryptions":[{"aad":"436f756e742d30","ciphertext":"8ab8ca639da1b3355e1d3e642617745b557ccd6777d80b90c849e9a216141fa7168b2c52da7f9f8b30816d5aac","nonce":"74eb101dce2cbf07c8692aca","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"ff6472f39880630cea5115008f040e2999d6b2dfedbf3c34c49e7d2ed0abd83ec5375323494b210ad615107dbd","nonce":"74eb101dce2cbf07c8692acb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ff561682ac310c9fa8838db48ed9cf8c5b3be3830e0b7e00cdac82a2c7e50fc39989e21a20290c5af0be57ec37","nonce":"74eb101dce2cbf07c8692ac8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"4759159f97287d42489c75a2521db52087db1e46f273cc29e6ae3426f5f0dccf89b5fcbd4adb77d3271fa78355","nonce":"74eb101dce2cbf07c8692ac9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"61be985bdadb35e1d08903a46e40b0403de965ec4885517f80d0278a185f227031bed2812512c7fc40b1e42cbb","nonce":"74eb101dce2cbf07c8692ace","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"eda45b17d994523322944cc1bc1ba58ff898b7dbf410d90db06142502f693579a1165e94bd7b344eb372e582b0","nonce":"74eb101dce2cbf07c8692acf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"668a39fe2e0f29c0d224a49253a040d0da64f7f59e3f588d633dc0b5652535d2d1ca7acb09eecbe98491140c5b","nonce":"74eb101dce2cbf07c8692acc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"406ec4231d9c26da8f59a981d5fd402c6b36fe118b48d2d98b6144c46e910eddaf6ccf27f3d8e90553402f65f3","nonce":"74eb101dce2cbf07c8692acd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"9087513b903a1c75cafb8b36e3b34fc4746a582b3c3ee6691aed29bc3c38a5bfa91c9ad866bb3a67b24ff8ea54","nonce":"74eb101dce2cbf07c8692ac2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"6c6c30d924561afd3ec05fd3bcf724abb67b890c6593b7fa7a176a397dbc8b27da588e21db36496b7d2dc7c201","nonce":"74eb101dce2cbf07c8692ac3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f54a1a9b24d4fa4991c8468347a9b64cb8d8df08b2d4fa3688c7e907a7761ec9"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b0a6e92e2b26d5d4db97dbecb44e4f6779d7c1722e48b92ff93c6a1099766ff8"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"229459cfb47d4761e3146b55477693117e606d26c8cc83a7937765569d3ef732"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"fbd37a00a12a56df5f88b8e0d8c20ab491915a455a66759a655cddac9bfad7c3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ecdbb3933778c88fecba51f0d3f0abfccd6ed2292701938e2405646191f7adcd"}]},{"mode":2,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"96cb1d99dd2d353191e179fe806c5052b93eca6e1d08d7fb3ea20d420b4a921a","seedS":"baed6b6af0f1598fe1711376c0160200b84ced22ff9e898eab0353137f0cb540","seedE":"8248b1d3bfea9c55a1ead6c9f74f010c8322fc79c683eaf25d7a91dae7b17684","skRm":"9034b047ec840a44a75c2f83c9e6a86a5c585119d2e7f3f81f8a79bc38f9e36e","skSm":"f80c28087185d38fbac014f95c38abe3a96b810d7d07b758b9df7c11a9b3fda8","skEm":"07e7a0a40594be31b5807213f8fda3139fd7716ae780cfbe9563543b90e9de9f","pkRm":"04516de058a01c089b0a9bf62b7e3be6dbeeead63aac139c4565cf93aab1c7557846a159f04fb282fa425bfc68933371594c05bd588cd11270de0d550bfbf2b02c","pkSm":"04ae7983ba0cad779487d104642077ddfdfa5ebe4b508d8a7268c448cb30a0ffa97ca34806b36b0cf66c6bdd13cfc65beef97c3909d580423b085843d2d9e6fee0","pkEm":"04803cb253106c0d23f609fd613ad0be7b5354c368b9301c87e27c479a3b64230e463fdd8cb0b76d72d7eda9734b994aafc430254ffc83cdf09ee681417d3f09ff","enc":"04803cb253106c0d23f609fd613ad0be7b5354c368b9301c87e27c479a3b64230e463fdd8cb0b76d72d7eda9734b994aafc430254ffc83cdf09ee681417d3f09ff","shared_secret":"58bf8c9c94a2eae4d4e1bdb51898352b6d9d9b5c8aa83e83b2a5b0fa465c1fe4","key_schedule_context":"0259a145bcce1c1c862714bcd04c342351f917429e57578e3a2fa684c7ed0403ba264455f90835145bd18f39bfadab2d3808163e74fc91c733021e758f5b70c2668c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"ccaa506479e8eee3347d4e8fc866a86fddbc8e2cfef229f44ee264ec814b0ad874c5a0fbb19f842ffa1969dcebd804a064032427d5f17e0eafac3960e1811e95","key":"4595017dbf4412c6cdd873001bdc1a55","nonce":"e66f9266b90637a3099e52e6","exporter_secret":"1a5e3fa36b9d898b5efb33f9cc3a5756b1ff3d3593cbe538995c6d56541317662c0e05cfb01015434d885b061cd668b2faad5146aa2b37fa9f9da36585f1efd8","encryptions":[{"aad":"436f756e742d30","ciphertext":"fe47489d387fb3ca019da499b62c0f92dd4630c67df81f382277ddfdd4e2b4d42bb9915108ebf5755f337ef155","nonce":"e66f9266b90637a3099e52e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"6c57cb1ec364035e655ff9f19ff0684f2fb009ec2a953a259e8268b245a2a17b0e0e4ba2401b68d235f50c240e","nonce":"e66f9266b90637a3099e52e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9b9990d9231ede1502308c06427acf7e857ed9a5ecf8e538338412a897f95db793a2369cbc03dbbe174618a23f","nonce":"e66f9266b90637a3099e52e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"70cd6c2faf311338b8de25c5f46c455622fcb3c64ef887639dbdce4bbe071877098cf3ef07492df95c8f4fcf6f","nonce":"e66f9266b90637a3099e52e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"282eaa18a3de39abc6c9805ca8e6fe5e2ae85cde764b3287037e633886d1c9b114c6c8ceee3536bb61b286026d","nonce":"e66f9266b90637a3099e52e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"6ca49ce9ad850cb747b3e781caa27f7c6a9541547561a083b122af469031283430acd875017e495eaeaf58d7ae","nonce":"e66f9266b90637a3099e52e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e2f61a704ef6bd444b6fb4bd98e76dec8e159d7c08393ef0ab94847bd6535aa533e37b8bf59503e912caa31560","nonce":"e66f9266b90637a3099e52e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"99403389fe1e378228a349752be63a52e74a4480cca9bad3757f162d65ce758dd5901393b35c5bc56f81822120","nonce":"e66f9266b90637a3099e52e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6736f70cb1f28bfb08b303d93ca0e3b0d5580850cf54ae9325b114f99b87cd5d8f745641ea873f2b6420a0d640","nonce":"e66f9266b90637a3099e52ee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"085b08c0d24c0ad56a599881ce481f6788e45bd9c7b262782b4f97c36f7b65e29c328572f4220cd19b58130f73","nonce":"e66f9266b90637a3099e52ef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1073462594bd12498748b3fc94034b0a6b9fd0920827dcca2fb39b18ec50e9a5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e515c5ded61ef56cdc0343cb5e133d549af71b96b9b8a27234f7ddf728159dad"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"8e859df03e63ae48d0f832c1379ee3c363787bf3c8d15f8cce6d1db2806ea290"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"92cfa5521eb3fd6b9463da6e7e90eae0b4e1a42e6e9d0ed66c06d86917cac3f8"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"f559e3c540e8c24a9189c9ba7d03d34f1a71a588bebc7a5842065b03938f9d17"}]},{"mode":3,"kem_id":16,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"073bcc799a8bfb579a627d8f8b55e93721340f6cf5de0eb357da157374e14eeb","seedS":"17388d5f671b12ef6c67cbaa20c8608619ee6b28ff65daa83ba63212451fd89f","seedE":"3264f316c88af07f985280644d38099b0767a16f88ae82d1e6accb9da3c6bb55","skRm":"5d22f76cd9af7e6aef48218e94c59cdd099d656917d7d3725eced88438808594","skSm":"01a45893d642b80751d7a5f9b07a8225e54734336d015b3aafb6be2d8aa5155e","skEm":"5fa7728ed91abd4589e53c40c96b06e57a8c3e7bfc15d8109f8579cd36e0a78f","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"045fbf495f070a860fc1f5ca05dbc3296caa9b8af281163e766e801f920aaddd99b10505d6086bd7d12fd7c39ca14e3480bcf855fca8eec13941392a00e81f73fc","pkSm":"04fbd2e874739deba895b84c2960a9a9f2b78a38769efa81113a07094549d8c8903f661f6722d20c44ed0a271eaa35676734674c03ff3d49cd659ed4b99889625b","pkEm":"04fafac74b1183efd0274b2b1a0819a7298bbdf4f6b9ec8a1a118da73f1d076f0e3dee8decd09c2ebd63fdc7e41abb308c5f5770d743b1c7426e1412445c5e20e1","enc":"04fafac74b1183efd0274b2b1a0819a7298bbdf4f6b9ec8a1a118da73f1d076f0e3dee8decd09c2ebd63fdc7e41abb308c5f5770d743b1c7426e1412445c5e20e1","shared_secret":"f184ae42ee268c1b3fd6f25b3cfb612d1d288a4921416598146cbf35bbbf2712","key_schedule_context":"0339f6011ebbfa0b089f98c9db37956a61abf9fb58427f56ada80743584c1a6cdcfbd55ffd4399433c54b22f53e40738082c9489846c4c19c08fa771b0388da3eb8c9942e377e9f72fa4152c161bfba6c407fe5ee3d6517b56634fdf07ade5b4fcb1358e1f01175ac61ef5c191ba765599e625e92cd4623fea16bbe3a0ca2db1df","secret":"fe2d56adfa0505528204033a330498957e1f95bb38a3a035cca1d8763b0a2f97f56e26f5981002e55db28c4969ac8b25f7e207e0180f8efe63060eb1fa8de47f","key":"e39381714251f8c506bd9003337d3ef5","nonce":"d59bb13cf84f3d7ffc28f091","exporter_secret":"eab52a0c640878495981d6f9092536c9c0f95e6c456daf497670755b598798aeb17fcd057f632cd546a4ca3585c1e8297d5bf43b4e9f965a581cafd108304e3a","encryptions":[{"aad":"436f756e742d30","ciphertext":"1d1ee90fdfac8e8f3f466de3772b397ab2025bb73adcd97743e6391952a2829a8acb47e7e0541eabd612e6d640","nonce":"d59bb13cf84f3d7ffc28f091","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c7f0eefa13a77c03400ee3fe44a0df3bce4b4eecddd93b4641d55f9d0d6e1ead7b19ba99c63192af7ea5b4f290","nonce":"d59bb13cf84f3d7ffc28f090","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"1a9ceaa63324a430c1229a6228926e654f419b724a963bbd5ad29b9e00b7c4ccb96a957ca8f910c4e8c2481d9d","nonce":"d59bb13cf84f3d7ffc28f093","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ada59014cc67211d0a231f710ce1e5d22fe36b5cde2e1994306eada30925f76d6988ee9e2419f17a51edcbe07b","nonce":"d59bb13cf84f3d7ffc28f092","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"ffdcdcf7713b25e8efd42c2cffc2bc57956d55375042f5f637649b3ab2c2c55e00f51d13b98db6662bdf705a18","nonce":"d59bb13cf84f3d7ffc28f095","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b1e70f34192b4b21f0f9a44d4777e47e1320d1ad7d8a6c354c328f74f2e25065bfe42e46c91be5078602a65e84","nonce":"d59bb13cf84f3d7ffc28f094","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"82afa299d920cff2455853d8d77dbf171e6a27e9feba17dfc0b970099fc947279b29a9e5d5cc26dc82c3407757","nonce":"d59bb13cf84f3d7ffc28f097","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"179a48012e1ace22453a1ba4fa6799941561d2533a7f565138a6c06154b72560607cb3ed081ad62f3eea9b301b","nonce":"d59bb13cf84f3d7ffc28f096","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e09c95f999d1abd544a719858a48b7f173acb652f6baa3171fd9a1fb2dfe23a4405fc24798ae2c13223780d748","nonce":"d59bb13cf84f3d7ffc28f099","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"52f1851ccc3ceb55030e1743822232895e7a932353c08daf4cd1b387f1bbcc74cb8fcd4bffd517b1588f9da35d","nonce":"d59bb13cf84f3d7ffc28f098","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"4d75a3087f405aa27a807e013ea6d94b4a0187473c3238452a5e3d4da572d1f3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a9f5799567d926c978bb46020dcc89f30ae8a661babdcffc6ee5400410bf6d02"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e48871ffb1dbfb34f7752f5a26ef4aa4037464f43faa3efe35362a933d3d927e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"71848e967d641cfab77715c3a0f7b4c8f538e9b5fbbb115862b1fee3953b618c"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"784f5f3ed53b73257b0d7a16626d6647328c6b67234460a6da534e4cb14225ce"}]},{"mode":0,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"823b066d173e0168acb1b7aceb5b008f8c74bb65b18aa35742c3cd3ac70b5eba","seedE":"e16826415ba7c26b77b5090f52377d807bf55b6f500665d1f499daee41d52a07","skRm":"bd8186f046929cf3a8fcebf955c509cb9579dfcb46a6f27c2e3abc1f52baf161","skEm":"2201d77263825a8bd14b6622b4bd8d5e2b6f6a5278112a5f245e5555658e9e5b","pkRm":"041f88bf27edbf094ad864786ea888df8bf9e6856be90c38e902644d47a5fb520c1c146265694d621d0566617bce231cc4d2426cd7f227e126979fe0d567699075","pkEm":"04e4ec14c319364dabd7ccbd5226d757f54669ea7f2755f04a2cdc666167ac3029d44d2658f62df1d5bc4f0662e1e24fac052e34dd8008298a37033ada2f2a4d5a","enc":"04e4ec14c319364dabd7ccbd5226d757f54669ea7f2755f04a2cdc666167ac3029d44d2658f62df1d5bc4f0662e1e24fac052e34dd8008298a37033ada2f2a4d5a","shared_secret":"97f4834091cadf76c1dd234bff67271c77a65c833d934079bb649d040ba72c58","key_schedule_context":"00e8330716b34bfee8656f3e44bdca33abfb241ebd1f719547077656dafcdd8aa74f7156fc99d5cdb20c0284581128d5e18c0a1d9b1ddf53abc0f2c8160ee0ee11b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"4d906cda7d0b42832fa1cee0b1a6d887571abc52c76edb68054346c7e8d607bfe5afe75b6597a9e950ea6cd99162a2f2acc1404ec8e35587f43deeff8789041b","key":"74459357225bf4680f0dc49080cedaa481f23ebed1c83306761571115e752db9","nonce":"bb8c3ea549c3e929834ac2e1","exporter_secret":"07818080f9489e29bc678b288c2d0500bf5a7c20fb2f26af9ae479316c41afbd973102bcf9569a6251a5a999b543f6ae5e3ad23893a075b03bc4e47d37804b4b","encryptions":[{"aad":"436f756e742d30","ciphertext":"15e0b24708b59781ae373414f0237f86f925a8796ef6615697c846378df0e89c8de4c7b99e34c943a015876b4e","nonce":"bb8c3ea549c3e929834ac2e1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2a3993a1e21435ff9874ee0d1e7844bca7faa62252af50b835b5a81b4e1aacd664106d69b13de3bb8776a2a56e","nonce":"bb8c3ea549c3e929834ac2e0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"8fbbafd491d0291507460ee8809d70d8098cd21b8d9990d6522cebf78b1cc1455be6f1d704ad92a2a5c99016bb","nonce":"bb8c3ea549c3e929834ac2e3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"acab75e848f0b9083d376c4f52c4c321931b1128abf5e9170a9119b36224661bbf7f74215b76337ab7af5225a5","nonce":"bb8c3ea549c3e929834ac2e2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"db1d91250fb426d5cb058d57f24cd5959bc24a3d97d02d450a5bf7467d0da1eb08ca65fe61a93a3feaa163b33c","nonce":"bb8c3ea549c3e929834ac2e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"046f4d1a90cdbf90144601291227e80bb5f3223cc9ef153ba6bad652c6271d504b0744ded54f1f29423bb95408","nonce":"bb8c3ea549c3e929834ac2e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"99e919f27944a55e2258d41be15dfe6db081614154e80f42edf50327b8776b079464d94e918c8126fffbaa79fc","nonce":"bb8c3ea549c3e929834ac2e7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"9f8cb6f84fbab34fc7d3a2fbedc653be7ef8037b193d8e67c4ab7b898ee2904bf4d6435779b5100a8a8160f797","nonce":"bb8c3ea549c3e929834ac2e6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"2b376c1cca925dd09e3db76a30815e2101f0e0658c50cea4a33ea235d4457935f5450339392920eb59c544a70f","nonce":"bb8c3ea549c3e929834ac2e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"466eaee3885723790c5339b540b0e774ba2b804df0d7b59befef953f31e4af30867006f67f457c4a3d68e9e540","nonce":"bb8c3ea549c3e929834ac2e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8155ffb4381cbd725f37644e407bb80c346219d4ffeb5c8b840e52cfa3fda07f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"941d8a95a4caf16af00b14de59625ec7e5e134e9403e5ae5b3abb24a6209335d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fb2ca41dcda93b23cf0a64a0521bb716946a9417af64b25a49d5a03b8a3fddc3"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3e1598b904748454c741d4edf01e601dace2ce2b1e100afcc2c59269f8f680b9"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9697f97c5a38f4f817cc601d53cb4e152cd505962ef4de2d2680f034c9b662e2"}]},{"mode":1,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0d39d962eb25e8e407533a3f13d29002d57c22bf281c5d92cd49c761ab6316b4","seedE":"c736963dc1680fc7ad621ac9157fe96a91cfe56646faa3a55b73642dc32c2959","skRm":"c2493a2a40c1fa4bc1a215b4ffb3ec9302dbfb96a978873c82f297e8dc6a2fec","skEm":"2c8bc2e74d523d3c8e8287de6b3ae318d5288cd61c485d1d5c8e5f0df752f29f","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"043ba228d14d191ecc14e13699303d7e159df32c9cd2e1780fdf3890363e47c46119ce0e79ac9b00e6ec26f6f6f018ffa6891976bdf00594ae4bb07a59df765eca","pkEm":"040959e7db67c5186a55b37d33a687a69cd2c8d1f9c1067a225b94d71d2697551af10b9c7fc67371df549ada6e01e740486e5d8bd23b0ff5ec282f38c94935e7da","enc":"040959e7db67c5186a55b37d33a687a69cd2c8d1f9c1067a225b94d71d2697551af10b9c7fc67371df549ada6e01e740486e5d8bd23b0ff5ec282f38c94935e7da","shared_secret":"a84774515f7be05fee1405b85fc89788d0db3b823a3469f105be9b6ef84c37a1","key_schedule_context":"01e4a0ff05c4c44e507f4dcfa55d959d4aaf010c069a4e6bb356931f3b4e1558b707f80bbb91ce7f560aa3471f09ad08d1510fe711d60c9fef568b977d067b7f26b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"f4a7427fa0beabb240bd5eb011ab2881b4ae1f8b1b2a5f5bfbdffd41ea38d47f6271426be714cf98e30808e8ba11231e5a49f8cb22e31e5ad11d561a32bccdbc","key":"d64cc5cfed9924171b7528428190807231129c715b3bf48360fcc37f219038bf","nonce":"8026340c8e646b552390241f","exporter_secret":"a6f80bc3216d83ba16666263fd918fd311a94fb96db51d73b51854491d63b1acc67228b1fb9646b3f3360e6e4d70bccdd1a50b41c88fd87f22beb46367f03d14","encryptions":[{"aad":"436f756e742d30","ciphertext":"0907b2e45f9aa98ccb84020bd803be2bc80f7e6b638e9d660f42f43da600ce77ee0dff0bb79d93c191a37727fc","nonce":"8026340c8e646b552390241f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c5a2afa5aac499b87da61700f9315aa7969023478a8570977d9bc1a1fa5803f8b0e02afc05a61729ea6ff1472f","nonce":"8026340c8e646b552390241e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3adb63d286bfe9a403e1280d058f6e820e1629bd20c01cf7d2cdab0e4d866cdc013cfe457c98ee51731d9c1725","nonce":"8026340c8e646b552390241d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"49ea188a5043c256b2553cabf735da62d10faa27cb93a15b8f3e915ec4629b8ffbde4fba3f08781dd0d105035f","nonce":"8026340c8e646b552390241c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"3ff6732fec15b5aac4d07219674a5115e7e69b6e459653cd43c7277740e6e53be01ee0fd8d1b37f082517722e7","nonce":"8026340c8e646b552390241b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e18987a0243dcea73f2f9dccc5186643d82e81cf3aec2995a669b51028f7070041dad3eb8cd7251c723c72f551","nonce":"8026340c8e646b552390241a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0d4304922728a96e6556ae4ee45770649be76e40c68bbef5c7f0ae7265c3e123f92fc90510d307aa773849c6b9","nonce":"8026340c8e646b5523902419","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a04d7167c74962b8b487c960edc1a59648d7519a7d0ac174c8567aea43aec7a358f5dd3c550ea5980120e4b94e","nonce":"8026340c8e646b5523902418","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"58ab1c57c779102d08f195fafaf1955816bdf9043e6c84b494ef0faa1a5065d5d02e6046d4927b94dafefbb222","nonce":"8026340c8e646b5523902417","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"cd3dc890d8b92d7fcf0e6e8beb31833d47bcfa3b59f50bdf01a9802f7a47d79f74531f19be018d3a61abe46a49","nonce":"8026340c8e646b5523902416","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9965b97fadb989cee8b6f9f1bc2053a066abdf67f54a5917c74316b02e86d204"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"a40bc38276675776a5c711d51b8820be971566860e111a94449313632c86268d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0518b2cc37983aa48c082b41f86791763def1f11887692d650b8b15131f1fb43"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"208c73c2e0c70696299d5f2e542b2b10ae3cf039329285da49c97d88196b4122"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"c2cd22bd68f76ba7c5b0900f3493de44279cbb9087d849f359eeedec3416bc39"}]},{"mode":2,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"91c559c9f16214fa1f510968268e44a7ffd8900ef2228682234a30601a36fa78","seedS":"7e3d27ae13ac7b93874c249a441b2d400b9118b535288a3990e454179c8df73a","seedE":"8a2b215168adbb38412886f628522efe73a75b825e4cf4d0a4d6d8e75ea422ca","skRm":"91642f9cc9af5b4089183bcdcf844099905c7e9be2d74d73aed86f7f4714e0b5","skSm":"917df5e67eca044638b4ca5b136032f6bc4e0b4fed93b59a8b1c74e299eac71e","skEm":"22c0c29d845e608f62b3762e08fb042985856b52dbfbe9e5708befa346956896","pkRm":"04e2562b9192795edfe26bb0b520f9a9de6ac9138f6985f19098f078791efff5f470ab482311004b89f3cceedd6c0b117ec9b409b636f5cc289b2066270088aa92","pkSm":"049b9b34f68a06fb790685cfb3b5072e52bff8abd804644523047d060fb29c11db56e4d03d79a5475dfb6b561ecd929459644fddd69d8d1baca04a57d168ba861e","pkEm":"045a0470ac0d6a0043c004a8e7493c3a9c01ea8e71216313810f44e190f84931d63e0807683b8a72dae55b222fac17217495a75377dc3928ab2c5dacaae1085911","enc":"045a0470ac0d6a0043c004a8e7493c3a9c01ea8e71216313810f44e190f84931d63e0807683b8a72dae55b222fac17217495a75377dc3928ab2c5dacaae1085911","shared_secret":"5f312de5dc6fac555ab65f129f6238777cb3603f5fdd186c6745f9cb1aec6343","key_schedule_context":"02e8330716b34bfee8656f3e44bdca33abfb241ebd1f719547077656dafcdd8aa74f7156fc99d5cdb20c0284581128d5e18c0a1d9b1ddf53abc0f2c8160ee0ee11b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"77c2831192e3a97d3e51ade3ed6014b934ca1ed71a63e34e0f5460e16f7211bbdff99f47e47c8ed3732aaf3a6580b9f223d400d81c7e68f5d8be54527415c72e","key":"4925ec670ee559b8cf0fc2079764e0726032dd42f4f80668d50569f4d86203b1","nonce":"ef53cfa9953002266984ffbf","exporter_secret":"f6a54d28700c7ce83004fa3c6fdc6b8b5dd0a086eb8edd27307a3a1e87697b8a8fb4bc396f9c5714255657e119f7e7d8dd5bcdb8ddef2ae3fbb2b99dd0cce8b8","encryptions":[{"aad":"436f756e742d30","ciphertext":"38306c8b3e305c2f7532cf8d73e9e3eeb35b02ccee260ecb83cace47e3cfb19d5c1cb1cbe19878c824115ab738","nonce":"ef53cfa9953002266984ffbf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"d6c58d00ef640174967cb3b0b82b1e501159046d17efea5f0c70ca35c9f2d6252be6069733abe50d947d254c8c","nonce":"ef53cfa9953002266984ffbe","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7eeceec6fa3a3d85d9bc7200dc9e7a4b35c3508d0d58fd2f1c560caeb4ec6c71ad34647bb68bb637e35f4c82ca","nonce":"ef53cfa9953002266984ffbd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"2bd75a62994429aa7812b78a46e3460a39c6aaeda14b105805f5631f0e3eb26115e8c61ef00c46cd10620f0204","nonce":"ef53cfa9953002266984ffbc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b10df0748e7ea9bf126f4f949b29ec58dd18338f46d6e71bdf6716ebfd4b26dc158013a029bd4990a053b1e9a2","nonce":"ef53cfa9953002266984ffbb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"6bf6cd46ae7a8e044a07afa178d135132654a0303c6b69d995f02a4f58b520902cc80c92910ef72f4338999e42","nonce":"ef53cfa9953002266984ffba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"fd2bb67290111c4d327ce3fe4d911386d37e0cc0cda7fff6105aaa479db1ea0f8cd97758b763aa66672e0cac50","nonce":"ef53cfa9953002266984ffb9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"26a7d60f71a763963c3b23e536609d6d117cddefc96218c8dfdbde3b9aa4d5c4727953a086252252f5662c3ff8","nonce":"ef53cfa9953002266984ffb8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"6e98dc0cd3fe6955ea589432a219cab45a8e92208994b01b5183adfe5919dfd0aea75571ddbd7e0c879cb868c0","nonce":"ef53cfa9953002266984ffb7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9c69158b71c6bcafd03abb6c49d21b1987771f8b718d28aaf3753291945fcc706323e6fe217645bb46660c6ef1","nonce":"ef53cfa9953002266984ffb6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8c50d3135e9154a881ce13fd624ee6979d74ad2bee4099d1bfb81558f898317e"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3595536eeb1c8602b026ed7c0f15c0c4ed41d741413a6fdf01dd7f73539b0436"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"aad5db30e02e3fd6a428c9a2129da0664721e72683e0c0044893cd3b12a8d106"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"76c7bb6e31e4a0a6d3899f33ce95bf489e60e9b8b0155381c6f863df7b122ff5"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"07cfe70e6e8dcc27c96a1608060ac95514703f4e6f8382b380b74f10794a7878"}]},{"mode":3,"kem_id":16,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"0918c29592520a9e0f2235dff2e10485109df7364dccedeb3d30131bae0d6d10","seedS":"031b5b0f9493f5b26ce5587f9469861cc92ebe974b3e616647901ec9a71213e0","seedE":"bfb18594e78811253ad4afb6b9397df93d60c999cb578a978d6fc8286547efb7","skRm":"e3e50b41326db961884e59bd5247c139421f71ef41bf67b0671324c6a0a9d988","skSm":"d3d3ad61b5726824bb60b6cd14ac727bba8c8ef64b82e3ea85915785cff45e2b","skEm":"a01f97c8932f278fc87f3748ace5ef25b7058eb3598648afba9a47b558b0f37c","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0448c1c88f2e794ad1cc6e8dd7e03e04621b1e14c4bbf15674c2ba480afe8b643bb57b2d59d6c5a0c821b1dc488da1e09b7a620443b259f066a7b5436aa769587a","pkSm":"04ddc0be02367cd9fac492b54c70f8baaf129f118a11477a05d4d36ed5395b779e26ede12cecad3e5b760f80f501b5bc1e6eec5ae6d1e381b6ab233d39b01589c3","pkEm":"04549ec8b01dbea8f120a0ea1f0c7d3c30ae3a77ca894df5a44517ce06c86d68c0d3e0cb9fa51d334c110965cb731ece0442ac113a149aff8909c756a182449e88","enc":"04549ec8b01dbea8f120a0ea1f0c7d3c30ae3a77ca894df5a44517ce06c86d68c0d3e0cb9fa51d334c110965cb731ece0442ac113a149aff8909c756a182449e88","shared_secret":"2553d5ce79e9be7d4da87249a3cf0cd337123466842769aa7ea3ce722fa2f5e9","key_schedule_context":"03e4a0ff05c4c44e507f4dcfa55d959d4aaf010c069a4e6bb356931f3b4e1558b707f80bbb91ce7f560aa3471f09ad08d1510fe711d60c9fef568b977d067b7f26b7ecf6aeccbd7dfc9c4f8d6917caba5fd2376a4071a3ed8962f1442f25f34fc2addea034555e7302f685312d3149c4c044a5267eadc7df201c36caca1d871117","secret":"c05da60b4428de2a6723ca99450fa6ec73d6a7cd4902de4349960b0930d0e1b7994d58aad9acf3e360ed7774fc4438ab69eacec0b5c82c9c74b747d90d90d85c","key":"30c454a430be91820d1113b61a1ef329e11e33a3bec177a8d7e10f44b00c788f","nonce":"566575c59770a2b546bc87ae","exporter_secret":"6e66824813080c65b95dc0da510a806ade56e975a744f9a6b78061b13e5adeef167ad004430e1a8f9635b34fa1ddf348388c44d181a3f2a1841b7817c010f7cb","encryptions":[{"aad":"436f756e742d30","ciphertext":"1e0c65d8d42ab9af6a25ba62f269371f98d1f36878b09a9afd4f477ee7250902bddd4c16aeeaad06934ab8a0e6","nonce":"566575c59770a2b546bc87ae","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"b6624f14a6160306546181dddb832dfb3587726962e26819f854b2917faf9052b3dd641c21bb0d34ffe2e1aef4","nonce":"566575c59770a2b546bc87af","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"eead5db8438b50ba4eb3fb5c08fcefad66b3fbb07f2d84e751c6a9f49f754a860c77f8de71b32d53b3e794e84a","nonce":"566575c59770a2b546bc87ac","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"b3314287fd573edd49bc56ddb220e950421115fd5cba5c84dfbc26bd4b5fc80647450533fee66115a46b755422","nonce":"566575c59770a2b546bc87ad","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8485d31052e46f016b236320caa6b217361df308171620f33fa5708010f7e839e1526ab24a8384e728b94ce9f1","nonce":"566575c59770a2b546bc87aa","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ccd4bf2780428d6fcfb6a33ca1b99af4e4c4fcc5696f5361531d0281f26fbf37e884f081deaf84acdf4f832e47","nonce":"566575c59770a2b546bc87ab","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"fd8f0933ec05cbffc1d07cb2a87ce9709aa3b61b8a46c1fe159fe7d0e3894e3878c4b988529ba7a0d2503e0357","nonce":"566575c59770a2b546bc87a8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f16c39cd74597c3a6e761f7b4f2775241e5d780ddce0a24614d6c4f07b6d0b98f06d461f37ddacbedf06ec79e3","nonce":"566575c59770a2b546bc87a9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5baf72e19e0bca137649c039f6329170c08d67e514184e2b2e6fd41d8267d4b1cc520043b1afc1a9781e2e205a","nonce":"566575c59770a2b546bc87a6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2963b4bdd359eebf21ff47b934509351a3270f55f6d9ab640a0075f5c9f1e8878ce8f1029bdaa3f234f3bbf334","nonce":"566575c59770a2b546bc87a7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"33db496ee718d283ff4278a60a89b68f9d06eb11365aa969ac0f5160f964a68f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"9545bb91de18940528abeef20a65e0ff882590577017dfebbc9971eabf634046"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"67299a96335b0cb5981f1a415af645ee23bc27a6f06a98c0f50e8bdab49c69fd"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"ba1fd2546c1912ae9939d41ccea4850af0eebba94ee19ca2a8fd5642c45f6488"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0415931b9f7b16432416dec16f8861436eede89ef5a46fed7f14a2bb816df331"}]},{"mode":0,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b061f7e67feb0258e7245c8f8e473a18147a08060cb628a4a03f356ad2514f83","seedE":"864162263c95aede0f3fd2fac213e558810abb738291357eeafb332ce5291d26","skRm":"0440c3774a5b8e4ba71ce14baa3e1d12158b9360f962981554f28635a1fa5fa3","skEm":"5c554094a0b8a278a50f1e4f1aa9b6d024ea2b9b4d6468a3aa772e15c74e84ae","pkRm":"0475cc672d5db040b187506cbac6947bdddb60b0466739b117cf7b07bb679265337810e3fd359a409ccdec9b58682673ab7dfa969235ff0f89228f77cc16cd8811","pkEm":"04e93e5a08c8121bdb7a4c2966168a614fa58f8b7a11555ccc4bb3607087d674941882218d2c06166fe192fbf8cc756ce38875b81d05da6c7fc62e9fe5ac8c0c4b","enc":"04e93e5a08c8121bdb7a4c2966168a614fa58f8b7a11555ccc4bb3607087d674941882218d2c06166fe192fbf8cc756ce38875b81d05da6c7fc62e9fe5ac8c0c4b","shared_secret":"0ba5ff925f0c9aeca983d45b8ac812f721de185d1849c3cc567a9c3bfeb4739b","key_schedule_context":"00e622bbe03266624d8ea93c7d97d8be642f4955d8060d0ed7709255fba73356f48218480f1abfc9301b90f167be9779678624e6fb37cae923ff09a806e31e438ded71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"79b68d94a06a5234a2b2b75272d90c92aea77f23bdc11e59a8b1c23e6e8c4b566f32d2151be767882dd12653ee152e5650402de20d46939adb81d54eca6d8ac2","key":"5e1cb61e6c8b468f22c24831489bd8471f10c11a3dac649eb42d49485d7687d9","nonce":"d708e8765ec29e285e1ed350","exporter_secret":"98b16f709c8ee264e881c07282ad5f467087558eec6bcd45307bb6ad36f037b1b7b3b004ad3a034c664730c393d2ae8b0fead816e8785360d23d2cfef5401dcf","encryptions":[{"aad":"436f756e742d30","ciphertext":"47db3b0aa16fe85b3b127e6e860a648e26b2b12b20b3fc214226187cdb6b7729dba11fb1a8576e0fb6d2785eae","nonce":"d708e8765ec29e285e1ed350","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"93a5b2c72fcd34c700f9c7b5f989c2ae39a5d77f1b295ac447a5bad197b829dffbd55d4e5f141c9c61321401fe","nonce":"d708e8765ec29e285e1ed351","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"041f70672286d27c8ffa2778edac385b446768187e2da99d7fffa06567ec2641ad8d61d1584bb3f3906eb87b0b","nonce":"d708e8765ec29e285e1ed352","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"7e0b239664bc6f3f7486770285663b8d6c4f04838c22a885f6db7339ca6323e860f2db05c3eb2eb9fd6c710e55","nonce":"d708e8765ec29e285e1ed353","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b785b4427b1d16ef4e18d8a0e7c003c4111d9975327033f087b553be33387c46f2af976172fd7fe1027d527e08","nonce":"d708e8765ec29e285e1ed354","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"65ca50c2c9b11c1486333590db3af5f96f3e5298ce8cf783af01a668c85e38c7563965757b63c4fd7ad1eb707c","nonce":"d708e8765ec29e285e1ed355","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"cbc72079b4bfbebd3942fadff28bc28c6a3a01cef85588b09fbaddeaad7ad5b836c52fcebad22d89fc36b88744","nonce":"d708e8765ec29e285e1ed356","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"ce2a4a499a0fab8c93c289eb1494f95f6dd190c2ea133167bcb3ecc11f8e0a0d06951ce5c02dbf5d1dd3ceed2a","nonce":"d708e8765ec29e285e1ed357","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"390d4ed9960fb9cf60618b93e938150beb99744c9ca56b583986146811160999a7cde9e141facbd07ac30c9b8a","nonce":"d708e8765ec29e285e1ed358","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"bfa96928e2e8236e87d2945c9eedfd6c440356f03f615fbead2984500fd82909b493c354d5c96fa9413f4399ea","nonce":"d708e8765ec29e285e1ed359","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"28b8663af3815617d7277fe2fe970c90f38db4c3af17692679dcc4653cc8da4d"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3dce1ce3315cde15840a6a4b3b08b43dcab5791c8f842550e91405322b8ebee4"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"29f45577bc87105b6732263b3a8ce44eea68cbc4d1f82fccf1f27635e6223dc7"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"d8881a85d89809789e58b91f57f7a92ccc6b9bdfce7855cd431d3ea1dfd9f5f6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"73cef42867956f369ba10496d24c5ae2da9ea736f08a46579f08525015678c31"}]},{"mode":1,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"7829af997003dd82b9f58e2d284699307f24dfb631bc44355c0db6221cea8ace","seedE":"59d9c10fcf7a238b6d7f20851223502f837a0a677833f2b0938976e94d3c3482","skRm":"a81ea9d321bff794554cbb80cc6a640f120d05170c59b597473b761fec5f3b3b","skEm":"628fd86ee8203b5b091940e726868b4f1d065f9f4802f10bb23c19581af72a78","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0482838e233d0972b052a4a3bdb1fdb8e0f8d909211b8a4bac11f49898a5a60ea2873c7a9c5e292b13f57d7c540b6ab3234f5b62cc10ad192d2a974f077a4feaf1","pkEm":"040b569364ecf147dcfaab27c9f32b2d372a4982c687d176a9431a5a4a0d735689261f3f7df13af7ba0f488f33cd277067eab8a1efdffd1a652182601618bcf53c","enc":"040b569364ecf147dcfaab27c9f32b2d372a4982c687d176a9431a5a4a0d735689261f3f7df13af7ba0f488f33cd277067eab8a1efdffd1a652182601618bcf53c","shared_secret":"61bda676b0b45bf76d4490d7f32fc88b5e98a985834d01eca40c2425dcaa3863","key_schedule_context":"010542a7e0afdfd9ca23b9ac7c0331b7593a8505a183a605b94c4b91f9e3c55aaefaab5fa4bfc63e4f27f242c8ad3170fa0da038c1d60aca18b949cb6047c56bf1ed71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"acca99fa583f5cbbfe380c5b8b8e563ff5660babb79a657efb80c4b119cdcfcda8b8a899b6f38b257e09a892d045850e9be2f9b65a66212a65263707af987102","key":"6637f8affc276bdc902a0aafae3d89320582e01267dff1bab50cfdc86dee749f","nonce":"5e6008a2187680e40b02dcb5","exporter_secret":"98593091409ed29933c6d9f2d66f48c7cd079f32a6581ae8f825b7f24fdd95f1f5585a09c8f530872808b90b9f0f30bbe32d6eed5cbb9fa3a2bc7af316d90ed8","encryptions":[{"aad":"436f756e742d30","ciphertext":"0d02aa8cde4281cd95faf7b45ed59839f7b115d69a2f9b71f0fddf11370541f2eac9b6945e759da39cd1bc76c1","nonce":"5e6008a2187680e40b02dcb5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"9c93f3da62d7ad7ee2a5239e66261706b3845dafbbb31af9d4d81a99cbc784764556a197deaaff37007b454455","nonce":"5e6008a2187680e40b02dcb4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"19459000b301b00b8c203614ff9c285f33eaf26b67ec0c1a633ad948eee028189c4c6643fb579b95f132d4c9ac","nonce":"5e6008a2187680e40b02dcb7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"09dca54f0e438b51d791fb38536cb2af9d43140705718a4da8cdc98638313e690aa991e0c485cbf871bf7762b1","nonce":"5e6008a2187680e40b02dcb6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"17f8d4ff1c94551cf5ce77bd9536c6289144bc2cde44adf769b48b2d4b0fc86c19f1922301a1b918a0bd76abdb","nonce":"5e6008a2187680e40b02dcb1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d7c5eb6547c0437edfada6836a6b7c68de48989a90e05b84024f9cec4dfb44b6ae7f970bc3afaa772e358a4548","nonce":"5e6008a2187680e40b02dcb0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1408f897e06c317943156ff2a7d0f2483dc209ba1d0ab6a6bd7121058ac89b96e2f85f733d563f62cc4dac619c","nonce":"5e6008a2187680e40b02dcb3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"236f968351ef1c24be45688cae77b72f9e6b57ee7672d75fd98a4079a7db6b9291ada14688a3e47f00cedae5e5","nonce":"5e6008a2187680e40b02dcb2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"bc9e909cfea67b70030b39a7c56325dfebf00657b1356aec8213ca8621205fe779356c8fe58e88e175be012edc","nonce":"5e6008a2187680e40b02dcbd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"7817f9ffae65ac104f067cca0568a03218bcffaf18703b20f7973db38b82cc42ab66c549dc840c5e1e541339bc","nonce":"5e6008a2187680e40b02dcbc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"9ec938833be379f35306970221039fe820853e68abe551fab0e5c726cbb36120"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e578cd390df78aa20afb39f41a139a1c12af6c2bc1d588bae94be1ef80918378"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"85890887caf203e632929d29f01b70c5d2f358cbdcb585367f4a5ceaf08f9a97"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"4e2c6d13969c6bd3422e5737ff87f8ee0b3a46f0e92b395e16cbab28b7b282ca"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"0a377edeb68f9a223159e3646ab7a12b320e479d80adae9c09f5eb3f79736d1a"}]},{"mode":2,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3975483e6613099b12c9aa65a69dc088918305fce07e635986a5c47a70a77453","seedS":"0ce38851fe2134a68730f84063413ed0bcf1707dd296be62ad34c739ba31dfda","seedE":"e17192a4e1a863a7b4b9e985b59f9d86281fa578f68e8e5e7a0919febff51b32","skRm":"9b27a25c90b9b7b3d00ba9e310028ed7c40909853c3e432c1a9e81ef915e0a5b","skSm":"0d20b214444aa00095b7b982cfb34003ab941999a7d78abe4c3aed79114a75e7","skEm":"f69e98cecebf9a188f1a9fdff538c207c3f7bd4cf111b90cb5d1b5b0e5422d15","pkRm":"04fe1d93e77b4bc8cf3a61ab0329a3b3f8c78abdec0d5870a935e5f18905e3f86f4071515fe974e6157c96645d036766e32ed4d9483bc7077a15c98a4bfef91038","pkSm":"04b6d4ae3f5691816d76b8bd8900af2f8f111117febabb3aa4706ad0472147828223aef0fc9ac1bb6c1e4612301d907bc29e254294c9edd0619b8bbd1b9a93bde4","pkEm":"042c880802d69ff88b24f0b34dab3546b6505554c722cbe371d745169835df37757f9dcc44db2e4d03e08746da5cb0e9272e662589df2e1d1ce670173f3e0046be","enc":"042c880802d69ff88b24f0b34dab3546b6505554c722cbe371d745169835df37757f9dcc44db2e4d03e08746da5cb0e9272e662589df2e1d1ce670173f3e0046be","shared_secret":"92e2e215c1a83d54639c2a1cf809b78a6050765b9f84cf81881d799c6f8b5dc7","key_schedule_context":"02e622bbe03266624d8ea93c7d97d8be642f4955d8060d0ed7709255fba73356f48218480f1abfc9301b90f167be9779678624e6fb37cae923ff09a806e31e438ded71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"67791051cc284d16971022e4140dad5ebe435fc27067e882caea13272968a75ba054045db86e08066b6ea14f4982043efc560144bd12290751194dbbb85f4961","key":"8eecd47dfa050abca604ff8aeea71df7aa20f2a61ba650e93880160ce781860b","nonce":"dba0aad9cdfd91c3e2bdd9c7","exporter_secret":"9a2e52b3b2f54c0e8f8df55e805d503f09ccd8851f1fb860c0f48ef53169e3a0a6fda981e25a30242d2e4dcdb6cd1d50eda739ae3a9a754a019cc8d18ef02dab","encryptions":[{"aad":"436f756e742d30","ciphertext":"cd47d6b79271dd65a95e651f1594e02de22fa6c6ca59a1eb7335d2c3568f5a37d787e8da6bb16713b07e1920cc","nonce":"dba0aad9cdfd91c3e2bdd9c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"89d4fb73d7fe464ec758d4076ee0d3a2bb00d25b7ef903acb3871eba1ac1aab119695c53adba8b819176114b69","nonce":"dba0aad9cdfd91c3e2bdd9c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"692c684d791f6672b1a377f8f17499082a9bb35f7d98589951fdbe6b6dbc967ff6143b721abff9565133ba33ac","nonce":"dba0aad9cdfd91c3e2bdd9c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"a3d130c6b42477bf3891c4e33c1ade1587c7b33bd1cb2257a1e6abf24414837ee1cdf68beef7af89b274799a14","nonce":"dba0aad9cdfd91c3e2bdd9c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6011032c0492384cf8e0104269fd7e89083f4b6a779eee49d14d76a61679fe8aa3434ae9e0cd2e746bea94bc50","nonce":"dba0aad9cdfd91c3e2bdd9c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7c490437c971373c093f387b58bccb4e43b67f102dc768311f757a22e0812b38b9be64f4413b34cdff8a13f01f","nonce":"dba0aad9cdfd91c3e2bdd9c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2c0b07b9150c30d997715c1538923ca5c825c01ac34dc8ff1ee3747f8b29fedf298658661fba5e707945462434","nonce":"dba0aad9cdfd91c3e2bdd9c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"13e6520b3a152ffb90181bd806b6d6b15c470340512f017a45fbb2123d3c910a0db8aecc9b29163dd1ecaaebee","nonce":"dba0aad9cdfd91c3e2bdd9c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e656d5157f662d6958b2f5030084a4f0d77a64b811646a4938bbea17a8ee0b3422a1e186451ffa5d08610994b1","nonce":"dba0aad9cdfd91c3e2bdd9cf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"8b147757b8eddfc5689121627278b39ece9fcabd717df933b116a2ac408e1f11b61e1eef25485551a772583d08","nonce":"dba0aad9cdfd91c3e2bdd9ce","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"03cc00d46a614895cc3be43b10245e1b35dd17a5600c66bd2cf0ef37071040da"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"9ead40dd07b3c1b8617c853ac965f6aca452ede79808239600c04d75a30abdd6"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"fe2e2794ee74171b3d44c8d2a65f4f296c5e1d3da2c6bec9df6456c8d9bbf6b4"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3ad099547cd3209ee8b801299df44274252607496d6178f3a7eb32c0f4ed9773"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"2401d653c088ee5fda56b3caa833442ddecc00cebfbdefb3b95d624f1e6f3a29"}]},{"mode":3,"kem_id":16,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"c32e5a08622ec62f4688d78a8aa0d431088532688f5dc6953e99ffccf3ddf60e","seedS":"83f63934a46e13925f7581c9feb1e3940ab207827b34564ff08277412da1c532","seedE":"d74cf4f19cdf40008a438518fbfb82725809bbcd4d5ff2dd5dfd2529578a84a5","skRm":"3dcbbcc97592cb236ede3a957013415f47aed3cf83b7525ed9398ececc416899","skSm":"520f211a36ef47379ac0d9c4e91ff4aeb282220efb998c7f598190312953f230","skEm":"37f12b882a9c02a83b55d59fb3eb34b3f036ef5e5bf7b6f48baf44b40dedcbbd","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04f8407001cf5dd69d3a316dd921bd950449985510b51b81e714b33850472e3f414bef638b3fe1a60e79b0acd3f4397a4056fdf799db378a661cfdeac3b3d4d56b","pkSm":"040a6281a4bef779452081e500734262e21ecfe18cf5e968297fc98b21536a3bf518ef35f25c67a69077638644a69dec037fadfb940cf82a858f68433031f4b9bb","pkEm":"04dfed83c20373d55ec642d22562863f7220c61457d661bf8e8ca27d6566be3c2d69d94587c7f68784ce68e4d08b8b619495a37a6bcba2fbe156bb543e5f8d62a6","enc":"04dfed83c20373d55ec642d22562863f7220c61457d661bf8e8ca27d6566be3c2d69d94587c7f68784ce68e4d08b8b619495a37a6bcba2fbe156bb543e5f8d62a6","shared_secret":"a523e7db8f26e7003986ec8a633a6c7db0fbe7dc1e222c7cf6250079c9e990c1","key_schedule_context":"030542a7e0afdfd9ca23b9ac7c0331b7593a8505a183a605b94c4b91f9e3c55aaefaab5fa4bfc63e4f27f242c8ad3170fa0da038c1d60aca18b949cb6047c56bf1ed71e9dde5769168bde996f6ce2fecafea09eefe04952d6c75fa87906c921b2c490d7b953d7ebf66f1ff7b81e80f150131de0d1b207e4d9209f185ae4c886e4b","secret":"0acac8bfa5c87a9968f4240620463488d1db7ef4b74616041b34bf0a2c5d01c13e9efd2f51509b8c2612804a9a36d86ed422717e133be1424933d67bbfd8ae40","key":"2de8d0ed2bb0f4ac80df804c157f59a7b735dc80ac679c75208bd0fee66195d5","nonce":"61f2cfc2b6eaff09cf00e852","exporter_secret":"dbb308a5d160f26eed605379e96215a25a652c806e27719218ae42b22bdd13e32354245652ae99a7fbca926106b092a259fabb77c35d7f27c29063ba8eac5062","encryptions":[{"aad":"436f756e742d30","ciphertext":"d931e102f03a85139f19c687e1872bc2e7eb088e0e6f52623fbafe58931413a0ebf74a6dc7a0c867e44aacf14d","nonce":"61f2cfc2b6eaff09cf00e852","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3a9eb1457608e6db82d027e070975274a6c78d84b65454be23d443f5f123d6901bf2258053aae7a3fc639262be","nonce":"61f2cfc2b6eaff09cf00e853","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"ba91f6569a61474947c8195b6f82446e3ab27b34cc0105cbd27d83c3804c936ac9682520152e3fabb3a7d25de4","nonce":"61f2cfc2b6eaff09cf00e850","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"888be00d8fccd99c9a61711b4988f799456b174f4bf5ca01adedeca57cabb578debd6315fed7b7222c69ecb635","nonce":"61f2cfc2b6eaff09cf00e851","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"89bdcd086d3e6d40469301fa9f1501c6b8513ae3033446c6914b3d361484ab7df88b5fdfc42acd2a2bcc4b4ccc","nonce":"61f2cfc2b6eaff09cf00e856","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"8d015f1a65e56f4e6a40b79e11e4e872c950cd73e187f55bf3f2d528d956d36b182a7a039e788f5329a2d1b6e0","nonce":"61f2cfc2b6eaff09cf00e857","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"098cfbbb0c7da2229b38886118d480fbcd67e4e97c56206a99ce97e2f339d0a571e2ed420e0988aafa41f299e8","nonce":"61f2cfc2b6eaff09cf00e854","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"b4fde11cfbcabc4c2ac865f58bb954d066f22f08359df9047bfffe1c9b882844cb460540817aa9a588a1490e36","nonce":"61f2cfc2b6eaff09cf00e855","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e9de06ebbf1784c19051a4cd50f2a1608a85ae0285617c970d900eb545d9abde1e5bd01b982a2498bcf7ac25f0","nonce":"61f2cfc2b6eaff09cf00e85a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"82c82e24d9fd07af6b6fadd5a05f286785a363e726d2fd30d1298ec031c68fdbab1ba25c8d08ba57d03e518144","nonce":"61f2cfc2b6eaff09cf00e85b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c875e0e5210a7ee5283f9917d28cf7869b959d09eabe10a07b6be3e088bd8df0"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"aceca56efd2f67f774bf21abd3aa82fb6e0112ec42785abf3de27e15d234cb8d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9a4b7f4bcb09528dc5bbd1f80b30e64be514fdb2fb46204bf46b09bc229065db"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"0d7841b054ffb4681f847438c237694bd0a792d5381c1f93a8ad5c006b3b36f6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"ade658c23485d3d7858cdb7c45982d5c2761501acfc10dfc5cbef8a00f9f0cd4"}]},{"mode":0,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"883b63f591af5f3b1c4c7c288a5b3c7d40d3388fce16a1e62c43b8f8a85e9250091c7f1b6b46b1ab36134640d37e0636a344bc58026160edb0badd4ab5a58fc0c568","seedE":"924196136779a5fc979d90c68c8ea9e17cd0c39a8aa506cb494366f72c8032e8ad88530c81a278abefea49f0c6b0bbf778680e12b8f10a3d0d437f931d84cd3575f2","skRm":"001993eb42a296db6a3ec78f6ed4b5030c988de0616f798c81a21fbf573f5c71edfe9164aae52a3c9aeff6efcb2638e8e1ec4deac827a924a9a3f0da85abfb8daf8e","skEm":"01b00e7284c2c38cb7147c36b162373983754a1bae0287030201ad17c0ce5a011919ba38cdb29a6849af11a734783070cb0a5d4a071daea7727f0c74be2f21c3ad1c","pkRm":"0400377fc101f2314202bc00e3b6a145d22a8c5a519bd1bfc68f0718483480b14d1ea3e735fc1eef0487125e2b8b3d50fdc6e829b34d7d662757f54a5cee84051e64ef001eb378e3af7e9c001ae59f5bb9d2b21765f8a9c11933f89286c2593bc39972d92958dcbc9870dd1987d5229988c4634caa82a42795f434b8bcbfb88ad512020813","pkEm":"040032bba569e6b9f5249ec4aa95d2c724c15de4b78b96de19ee860252ce6c647834eeaa62068909c32738f32299cf94ff20acd22e00eedad7a67833739e88d94530b40199f1af2fe20440a7eed0cb38958322c128b3a26f4c6dfc20e8864bfd1e90c3ca63135edd65937fa876cc69a57bb4af6fd758e2131cf24afd3cab39c63c394dd0a4","enc":"040032bba569e6b9f5249ec4aa95d2c724c15de4b78b96de19ee860252ce6c647834eeaa62068909c32738f32299cf94ff20acd22e00eedad7a67833739e88d94530b40199f1af2fe20440a7eed0cb38958322c128b3a26f4c6dfc20e8864bfd1e90c3ca63135edd65937fa876cc69a57bb4af6fd758e2131cf24afd3cab39c63c394dd0a4","shared_secret":"ca3706b50c343d862f3db67d8beb68f5cd10fb7bf2f27558bad5078aa84cc2d58f3fd53691ce4b4f6d651ba6f222dd70470268dce1c8911fcbb807ae4e36542c","key_schedule_context":"00eb019bbafcd598e780a14b2fd24d49bd927c4f7b00c169f110ddd5edcab0266563c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"7e6170f050bb4f2d35c49f0deb1441770497e5e6e87942121882ee1f2bb7fe28","key":"efb5caf6834ea53ba29905ca76d72157","nonce":"71ba271e5c494a6acdcb7440","exporter_secret":"485b072652c31732e003ae54368ecb7b0a161acb16b7386c034ceed4d035137e","encryptions":[{"aad":"436f756e742d30","ciphertext":"7e76da9584726f765c58a551512f15bbf2dc31295cb73abc78a33bec3553f27296160da25a606f32c6bab0687f","nonce":"71ba271e5c494a6acdcb7440","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"beaf5b6a214e83c3ccba4a5c6e212817f312267af6986874489fa2ac491109a9e1973719ed8a115d5eaf1595aa","nonce":"71ba271e5c494a6acdcb7441","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c6568e2fbe48de1877e646a3d9bb14740200289e6b5b50b5134066dc5facd9528ba97ed4c4f380ff98641877a0","nonce":"71ba271e5c494a6acdcb7442","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"8b3b9c45e3a7d78ad36562e4e1b8202ff800dd8ced4d18a6abe207b2b6c4c28f44086d27548b061af426bb07c6","nonce":"71ba271e5c494a6acdcb7443","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a5ceda5bf6bcd8c61093a2f4badc6217c49691a5f6223a72f1aec148c448e9759b1c33de8ac492e2c51cb89e43","nonce":"71ba271e5c494a6acdcb7444","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"9484b665a34e65e0f194ab54ef4c49e1efb52bc9fe8bbaffb2723a9a72c6402c4123873aabb71c48b362ac5097","nonce":"71ba271e5c494a6acdcb7445","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"31987fa2009732f8ee05d374086bd3df97daedc67815c1888fbdfedc63e41ed0c685e703ce05f34428348c0fb6","nonce":"71ba271e5c494a6acdcb7446","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"5f5e483a7ec180a37ab75db5b04237014bf1354a882cf7205dd04c826a452a426faedbbf7c7fe2bc245565bf2e","nonce":"71ba271e5c494a6acdcb7447","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"f95e2ab99c90d816f37718753ed2c431f10eb8f30984463fe2c1593915973675af65bf17a764b0ff3f3e7932ed","nonce":"71ba271e5c494a6acdcb7448","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9912a6c284aa299a0167770928f780fd01bd16da13af9f55a24531f199c448cc72ca01b660b3c23be5c76e46df","nonce":"71ba271e5c494a6acdcb7449","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"8af42c0b20c405eb1b0d8b99c6d1658c1f470184d67876dcb3a6dcaf5ce650e4"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"94ed2280ae2b8024f4ccacb620acfe90c317f95be342917d48c68ac81bfa2b2b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"1bd714ae6b0f4f9f54c3ac147b70f7c24052633a04ba1f163cdd82d35843f52e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"822a81dfb867874c36111ecb4855db7f3931adf5299cf0ef21d17bb14fe39898"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"cd87435d18a71e8681545f8b831d4925bf46999867f96a75e7db68050027f17a"}]},{"mode":1,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"bcfffcb919c93a135aa9c240bdde09e89ffdb34be7262c63090b687ed1a6f3b67e62ed939e2d9e4e2117fc6b45e5ec71f62bfd5638b3c8cc2ea7917e512076b7a4fc","seedE":"eb205ef7c6f80dd291630b94e95a91499e73e9d15a14f4873588beae7bbe28e356341d6440b3d340673b866d91a3bbaad4d0eee675129e8928cca73d2663e5dce170","skRm":"006ba0fb298dc4698de10e275822720349fb3023602f5c497e0561caa3d903db86ab6899517d7f91cd83408fba363918f73a11bf4d5bd4c399202aa8d5847f784085","skEm":"0193872d5dd52e9c50035e68edd70230363684364efa20483723dd390eb06adea9e83c6c765af3aa5d5cb26b108d054defbaffd466cfbe4ae55f1c7524637dd1237f","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401052a180494fa898ca3f444d3c4c7d0202abf2613bd9cb6bab164fad706dc15bb5674e432abe7ca264adfdc139d6532f06e036d6dc055cb710e19dfdf120d32688001975d506e22708b80da3dbcf660b220223328e718e60740835e5faa7094882d735c63264aaead194045277766bb3fd5ca40c8e6c800b4e50c059fef7f99fb40fe5c","pkEm":"0401a20d7906148209dd5f31dd677377497392a49919643117bf01c24653c0b3188f4a003cf418918065a1a4c61e6a56c2a3dbac858fcef61d5f88376fc8b54c2218f900eaa12ea41da2b95caa85f9ae8eb315dc2f17658b98cc0d1c4d08cd83137a81588d6bf125db78c1223b7532dbb86e92786fa2080fcf9b772d849a9e1cfdaba5f667","enc":"0401a20d7906148209dd5f31dd677377497392a49919643117bf01c24653c0b3188f4a003cf418918065a1a4c61e6a56c2a3dbac858fcef61d5f88376fc8b54c2218f900eaa12ea41da2b95caa85f9ae8eb315dc2f17658b98cc0d1c4d08cd83137a81588d6bf125db78c1223b7532dbb86e92786fa2080fcf9b772d849a9e1cfdaba5f667","shared_secret":"5ff6ae5f1b9894abc636391de762794be83f9c20f6b7bb60980b09a00bd4a96b0f68a04d63e600ede81862b8fd51e165651e10941ddccc02c99c99e5a5209c8a","key_schedule_context":"015dd167df8d4130b09e24af66848741f066b89054d7926b8d4c82b2c68751bceb63c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"52cbbedbe85dc9cfd93dfb3e508adec934c7e99b2f7f8520f1a2925318b15590","key":"3238b1c5b5efa1413a8867909863da81","nonce":"132b96cc62303e3fbddc304c","exporter_secret":"37064f7c3d0ccefcd22a2bde6849471323f431cd3d88b081bae40103fc520e58","encryptions":[{"aad":"436f756e742d30","ciphertext":"6be53b0ddbf6e3d25074b1a8f11584ba75deff5a55b3eeb7b744139e37086bb74a07b810336057f78874267485","nonce":"132b96cc62303e3fbddc304c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e8021f6dab683ce41ae36e5de06faf441e9778a62c1c3b232fd9c81958e659a91de69e5cf05002879e15439882","nonce":"132b96cc62303e3fbddc304d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"33688f12641154a68644c8c70e9f57c9c60baa4ee71ca2b5cce385dba6b8595f1566eaa07a47d1b8018dbebcbd","nonce":"132b96cc62303e3fbddc304e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d10d08ab7c24763409afde1e976467746daca2e4b57010c9a60e3ad7e07f39c8e5f9ffc33a6ee38d3616f29d3e","nonce":"132b96cc62303e3fbddc304f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a6ca67384bb3888a12897b9c2872b5910103d4d28cba0103af6b57d46ac4c562fd33e81efcb3f7caecc30c81f3","nonce":"132b96cc62303e3fbddc3048","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"ecd075e87741e18cd60eb98a92af5ae621c2cff12406452999dcac084c8b07e80f6986c04743a7de2a13fba5bc","nonce":"132b96cc62303e3fbddc3049","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9f920a5c18dad698f590f7f7fdafc66e632bfab31ae0f3371619c5425cf7616712a0be6191a20f56a164d0eec7","nonce":"132b96cc62303e3fbddc304a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d920e8b018439f275ed4e7f1433c2e7fd272b3d60f609c8ec26321219d14e4dcfe0dd8063d6aaaa7c69bb27b98","nonce":"132b96cc62303e3fbddc304b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d4fe1a5daccb621a565bdc09797e9269f8e72d84c8706d547a13188c55ad8be743178015033a73caab8e4a3b4e","nonce":"132b96cc62303e3fbddc3044","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"5ee3c57f5e7afcd69d5d2bba4bfefb2fb317faa6764c8f45b0d4669b7947d49b21923a2023d944621ac1990689","nonce":"132b96cc62303e3fbddc3045","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"62cac863ac85dce6cab0f5025b28f00d892aefe886d929841c5db018b6cdc4cd"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"85985c0dedaa6874b648ffe2309bdfa363c25272dc19ee9521a1632c587f9bab"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"6e011df6c2c5da3ac11e5709ce9c19e3bffeb32f1a86f01c0a99315336b40b69"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"360de08e21d527bacdfeecaf2df5ed56bc04444ddbd74f2521af38abb6759fe6"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"835e5f5e54db12b144b3524cff06995825f944f2a8c67294940cd73626c9b49c"}]},{"mode":2,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"7a40fd2e51e538bbbad16e12f2af6ae5f7dd125c46141fbe172bbd4c8d8ff8c195855e7c7c3aaa05f72ff19a79a09f88ade9e21cd124a0cb7ec0e3b3398da0a885ce","seedS":"9915274f9c98b27d28e6b4caa0aae346292e4279aae1b031de9a57636bd6dca538957cd6241e58e98ab14fa00aab5126e26c65807045198020c4a036849b0bf0e81c","seedE":"7f85ef97913400d6e42bbbcc2f8d350b9cc2c871f0cf9a8e1addfcfd2fb4dd2a1272a3e73d920b62f1ef55eb8768d880c756287b0fbf9bf8f87e3086c8f1e60f2649","skRm":"01261eace5e2de2dc005c85c3d8528773c10657793856ed2330738810c0cc489bdda7785ef7f16e24dce6ed85df1840acd9532201b193caa01104a1875fd029ec556","skSm":"006c7164a9a6ae0ac71ac3ee6accc6d04627422abf2d217f9e0c62663de6b566d3c4215990c174eb79068c09aeabccfafd6bc9c61770e17178e647aefbe02ab2b17e","skEm":"0087d99d333cd16b102bac579d769f45779608961e26783dc1d1803109b7f1ee61202f4fdfca7f8e89186ff2f2b840b3a4fe98c7735007f2cc7032f233249b372457","pkRm":"0401597ec93b14ee576137dcc4295b4253b0de665a9a837f818e30d3de2a3a27da54beb9e2f9c89ec69aa508f4f1a91e9429182fc2c746fc9cfc839d87ec09f88d37910011d9b9b4f933cb7b3b891875bf0a7178db89c4fccbd7532cbc13c698537362602d38fe1b7745c015f1907140491bc71f2e2cc172a8dbb168bbe051bd4b74836bb8","pkSm":"0401bbf341d021e390bae735b94ac33cd911147f8699419cfbfae68d3df1417212dbec694bf69bccf9b52adbc9125e10cc5e15bda9ce3b9030e94a05a5620b0038d296008b35142c100020a00266cb10131a64666e59ea3bfecb6570c4e8036eb22cff730381cdc5b83cfb7c6f50f3038413b6ec9231d814c883e1ed3ddc808e0b11a99f38","pkEm":"0401e46b501645fd1f216d8c0f7db734ccd2ffe19c715f591ea8733ee0d2be59be2a2a6e16ba977f1765344720daf4cd8e9c04c08ea95910a933a238daf8179d6834de00dade88dc8bc03640be50ec0c3024300e2dc89b1348fb90f69770e53fe05c4adf864e5f9067fd4e0d62066b9d31e706d02c1bf297f4664f45a05df3c881639f9bf5","enc":"0401e46b501645fd1f216d8c0f7db734ccd2ffe19c715f591ea8733ee0d2be59be2a2a6e16ba977f1765344720daf4cd8e9c04c08ea95910a933a238daf8179d6834de00dade88dc8bc03640be50ec0c3024300e2dc89b1348fb90f69770e53fe05c4adf864e5f9067fd4e0d62066b9d31e706d02c1bf297f4664f45a05df3c881639f9bf5","shared_secret":"2699d5a9a67c8a789903a1c874f95eb3c5dc5f8a6af18d45d72abf4ec3108323378b82b622b9a1b79e45b0e22265b746167387245edccdaafb932a700b9756af","key_schedule_context":"02eb019bbafcd598e780a14b2fd24d49bd927c4f7b00c169f110ddd5edcab0266563c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"9ba8e80d2290b61d6d243627e30a68d3d9f0551419bdd6d1574ed6d0075ed44b","key":"f01a98f2c465fa7794a112a86ad3f96f","nonce":"4c1687c4f8caa631acfb159f","exporter_secret":"437931bc930991f1a86e9bb4af505b9f96146d56095c739ec4438716cd1dbb72","encryptions":[{"aad":"436f756e742d30","ciphertext":"667fe72156c28642e67807a90671f84bf65e83a18d04b46b522bbe3102e0cb39dcff4b0ea0cf529f4f88794a51","nonce":"4c1687c4f8caa631acfb159f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"e7d15754bfe78cd9c6006485761c329a50601cb6469fb07d0c1e882fcac4b8e71748ceb68196e1c6a238bb81b3","nonce":"4c1687c4f8caa631acfb159e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"0a3d684520e9765cb9e3917aaeb5fa32e69ffed0bdeb31b9efbc8ac12b7606091de95e216b689471cd3516babf","nonce":"4c1687c4f8caa631acfb159d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"3687c3be20891a0bca8254d49c15da646630dc3fb4badfc20b19ed5f2176a081f78c7bd17f243721508f23abba","nonce":"4c1687c4f8caa631acfb159c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5099ab66dff6582db90cde08bda5cf0d0aec950e7f21647d031240dce43a84f68a1560577d04b8a882c0cc964d","nonce":"4c1687c4f8caa631acfb159b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"6288fbebfd2d8c2919a687802c8969f13f9b2f3e6ee5dc7fd119699e4c8326234d67091de2c75448e5f25f391c","nonce":"4c1687c4f8caa631acfb159a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"ac53921b0eb8e855c06ed966ef55342000a403aeb003992e5a53d416ee87d88f765d327c3f7c38e285241380c1","nonce":"4c1687c4f8caa631acfb1599","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a1d21e2a1a80b144b8963f80a71f7103fa7437e1e714be98839a8f622a287ba2a6cdd5dba928cdcd06ea97c8de","nonce":"4c1687c4f8caa631acfb1598","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"cd84466b74b520bc87887fba5a4b593313e1135666635917094c0c76c94af774b8cbfc32c1ecfcb76ff6343dd1","nonce":"4c1687c4f8caa631acfb1597","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"393c3d1876a86998ef7d558845f03735aeb83c0c0fb8940138764cabd1a03861572835031516f6fa626317208e","nonce":"4c1687c4f8caa631acfb1596","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"102224cc9f9bfdc37c155061062da6b1a73a3701854a1411b071c10794f35c9a"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e70e15c34a084486b53487e83344c31911a4b2ec758b2ccb1815307015f4497d"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"3a89ffac5ee70c38fb6cf876b7afb32266b279f87399d062f18e4d62e5a8ca76"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e17d1ba6e8a6634ebe493843da89b31c949d0dd87ce97878128e2dc7866b2be3"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d78d8b73c548d06caea8ef22ef9df79895a611e4af323cc1ab5be635bcdb619a"}]},{"mode":3,"kem_id":18,"kdf_id":1,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5bec846892b6974d9e697096721ab56441b4aa13a3ab22e86af11cb65cb19cdd045f812facef3942b68c8ee808a596b2388afd7b8a0264e6ebd975bd127283e1812f","seedS":"9a9a583d77b0ec97d8c645df3bb19c69f9932c8a38d8e7983cc7e07880f9deb0723ee9eedfd793d0ac1d501114994ed91fc944b68893bf72a72f4f1c5b85876a3ceb","seedE":"861bd6aac8080815c8640e0fa5f756d41996c21495af4165bc72abbf22c6c86e13388b6f7b02e940351babc3230ed161f951afd2588aa3d55a6fce8892434e407da9","skRm":"0190d3282aeaa815e05497a2b5f532d2ae2975b81f3fdc4757cbe146402407e2eb060effd7b43bc906015db1c5ee56214846d9c95ce4b8670e08d104c88afd477c9f","skSm":"005c5ea616e78b4ad3985705424c5197f5dab1a21d00069b5497f1d95620d2ba9de87ec5ed2a6002a19b87b3d5a770932b24371d40f937eb5546511d8d59f34934f9","skEm":"01689b2050c8ad4c652ae4be0a923fe86508404c130f968a8ad3887cf807d0e2525718bc206ff1f04801c77cc3f08c0e971d566751d5d842fb6fa16fbea62a3224ca","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401ad37bb93d2ae6e0c5292d0a4a7cb771595e0d53e276cdbde8379f489bb844b4d1ce4765ee9b9af6d928bd206687b121ee9f813eb32430675058751d8981f98ab7c008eb3b2680f3330d241dba3cdaf8aa48c768c82848d19eca91d6847b25c6a6d83f8a5a6410b9a35763340fbb47bfd4d785f3d6f9424de6b145d21cf45d22238e61d","pkSm":"0401d1d0ffc26f09ba4d2f5c8d7457d55e2904d085365820290a4b70e96c7900ba7478a3db79067d52b4aba180efce4b64ef88c332caa03a8d852911b9162ed20e61db01d1c37ca3b5cdb9ca3653f1c0a9407aaf83b6b82ec4ecdacc73677d3d8e44ab75703e56443875d5fe28d4ebfad20725271e83779046fb108a28718cb71ddebcbc63","pkEm":"0400c2abb61b29e6379fb282572f55b5871bbdf708929126b842fa5b0d321941f8e1c7f0c3a3425108e30b5cdede9d13f25636b7de02dec7309e79e7d3f36b378814170035fbf0e10fee77ec0ada13f8349bfd84279cfacd74dcbc83a91f17439660dbd50330e82155af5094d02af3d27873cb956dc571f27a5fd67185f6fad4216a271f90","enc":"0400c2abb61b29e6379fb282572f55b5871bbdf708929126b842fa5b0d321941f8e1c7f0c3a3425108e30b5cdede9d13f25636b7de02dec7309e79e7d3f36b378814170035fbf0e10fee77ec0ada13f8349bfd84279cfacd74dcbc83a91f17439660dbd50330e82155af5094d02af3d27873cb956dc571f27a5fd67185f6fad4216a271f90","shared_secret":"29981f95190cef5117aa8bb6fdfb0266332a1ea4417eda0602f47fb1f6b61e5f05e86a5d08c9257d206ab090ce56400f164ea86dfc749c138186739fb858b2d6","key_schedule_context":"035dd167df8d4130b09e24af66848741f066b89054d7926b8d4c82b2c68751bceb63c3e22d2189ce73cf281fdd334f2165aef7f5ae7015ecc70e16decdc2544bdb","secret":"6911cf879f086e020949464238d53baf2d622a3664933610ef062926d7ad18e5","key":"efee78f7da9b2e4163f6234034edc8f4","nonce":"0ac2f422453abed28add917f","exporter_secret":"b39440418a94c29d21c2b08c45d16fc41ff0816b486d5424c38294034f2b8016","encryptions":[{"aad":"436f756e742d30","ciphertext":"a77366eedc024c8e6f13fd735ecefd95283af9ba68d5895d82415b3c9b3c2599cf45d07725dd221abbdadfe7b6","nonce":"0ac2f422453abed28add917f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"2a182c102dcba15a6df2982fa69fd342ea1b3736a33288b0a0343bec074b398b1ef77e7db124884ba1a778cf7d","nonce":"0ac2f422453abed28add917e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"bcf789ec1035c49fe0ec6b55983f0397f07df20364faac3df71a1e7a9ef3b8f8aab4d1cae407797c46d2e263ad","nonce":"0ac2f422453abed28add917d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1e8a4334bfa3d23271ff0d7d5ce99b8e2f2debbb6e48e44998b488facf169c28396bf1cde59eeee22b198621cd","nonce":"0ac2f422453abed28add917c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"6708c6b3977f4ba7204e2dc5210dd7d0b75a1b9a9b6a049917ddbbb739d78c991748ebed65244f9a5c5db58151","nonce":"0ac2f422453abed28add917b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"787b45d4dcade6d5e347c1a78176544f9ec8c620ec8c03bd9058cabc88062850cd1d61d7b578300e12f46bfb85","nonce":"0ac2f422453abed28add917a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"06056c6438a52d73712025ac32fc376818e9f67a8a3d61f0869c0b3fdbb312d459ecdb10aa843ab637703b00cd","nonce":"0ac2f422453abed28add9179","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"48801509ce1f93c006940e0c521958cbfd4948985de9b9dad0aca9b4cb303ee1b10987c86471791b973c4c8aec","nonce":"0ac2f422453abed28add9178","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"682641e8dd6a21f8c9be5c335655f85600191320faec87481744dee3d52da8dec5b854b9955ed6990bb36472cf","nonce":"0ac2f422453abed28add9177","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"f27e70d7b16bd3f9f4b4b5af18b75072059c9dd18a34f096a6dafb1acfdfa4934598843de58014080420909f3c","nonce":"0ac2f422453abed28add9176","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"7f8ea6e212b6e0f0733375c9e4e89060f090dd3ef47d7bb590789df7673d44f5"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"58055ba847127891e78d055217f54243540f2e599962e1a943a19541c90f8aa1"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"455c66b166c374dba86cb99ca2d60175cc558a92d2a1799a7ae2c8c1d73db3ab"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1096b657944a8af87745b1477f00f222032267c490a3dd8da02afd2072177df5"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"64e5a26520d3f60d40369069ec47ed11225e5977173315ff81d5f62de031bc0c"}]},{"mode":0,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"7d68e0016a8efafe04ea92a83c36ad7ebf20a4451ca20aa52bd9e8c324a4b7f3836bcc9d74a4bf17c6985d6bae94b7f4f775a751622d3a7dbe8a69e1d7a37e804473","seedE":"c2cf7ab17e805e2e36a2e2f31ca4c11ce2eac6ea63b7931a235d42947d904085942e610c056b5e00daf71f80c124bc3943ed4214776d211e1cc13412d742056da275","skRm":"01785bcf85db89f9488f04bcdd163873c4781f870b5f778c095987c28193a589baa36fe628a0285e4d50a353fdae7989fd3bdecfe6bbb16e2b554e0fa6cc2856c16d","skEm":"00e2b58a245c0945179103980aa9a2eabfc2dd5ab59dbceb64d3eb0b8cff35bf5cf34f721fbfe272da9473098ec4cde03d0b989f970b2601fbe1f3d8397d9bbcc94e","pkRm":"04001d53280f009b961237235784769368f60e935f98ac947818960278b8bed4505f82a9354702dc4f3597cf5e3e6fb9cfd09d881db0e61d44a19d05f9809d5caad24d006ecfc529c4b93e1a654bbe010aa22d8868f6aa3bef20d7c20e3b19bf56dd8146e78621e8a447baf6b2e2dc30e026e090b29eae8e16d431140254c41d781d664001","pkEm":"0400bcf477edb94738b8e49305209817600f0a44599c881d4eade411ec7bd7a74e1bbb2c656df87e7e388a47a43e163e8ae196f088534efadbc9ae9b6b9392fd7d2e9b01fa78fe186bcd11c291bfe0aee53f531621723220f44e2262ff69adb158eba0b1803d43941ea68a4beed7d180100f0b010a3ff22e4533c579f59f564e317bf1d82a","enc":"0400bcf477edb94738b8e49305209817600f0a44599c881d4eade411ec7bd7a74e1bbb2c656df87e7e388a47a43e163e8ae196f088534efadbc9ae9b6b9392fd7d2e9b01fa78fe186bcd11c291bfe0aee53f531621723220f44e2262ff69adb158eba0b1803d43941ea68a4beed7d180100f0b010a3ff22e4533c579f59f564e317bf1d82a","shared_secret":"b5f6df7b147d71f8185547af93ef7661fde31eb675a691a3fab7fe9ceeaae5a39b5932298e68f5fa76ec7ab1bd94c38901265bc5d4d0f68443060846ed1500df","key_schedule_context":"006cc4993ec21e5710cc3844a17243519591c5a338ffbfc8900990c50511368b680fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"a1e0833b0755cf9ab14c300d5b4513c766b56026910b55a712662dfdd262676d","key":"516c0e09afc2a19f4ebffc340ec4e73e70cbee52c721da45ce4ee7c307d9c3f7","nonce":"c29ffb393e6dbc435168e404","exporter_secret":"83bc79e96d53cead27ba1dfcddd4af1ed48aaaa97ce0c926134ee05cc2c8a10f","encryptions":[{"aad":"436f756e742d30","ciphertext":"d28ed7dc07de3e946c2a2e5657dd9c9f166e4fea4e5a69fb3d9e0ade3c6e142efb618f07893cef7a7e20ffccb0","nonce":"c29ffb393e6dbc435168e404","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"09454d37810276c59eb70ea459c464d9664006feb52656187eaf01c6f0af76138713d1d858e5da715ce8e333bc","nonce":"c29ffb393e6dbc435168e405","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"cb08154f73e5037eba1b07f73e78c491af1c511f7bd5510398fbab3b801917ea6f9357e7ecf6b5248935849a52","nonce":"c29ffb393e6dbc435168e406","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"5b9f30a66fd9ad15f93c79e608e6fae60582f487e6cd8251de6591ecb0479fde949420fdce260d13390b28fe65","nonce":"c29ffb393e6dbc435168e407","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a3e227daf4c6ab7b9f48e4dd42831713c93e3e2fa26292e34ba030d29f259526bfd91ed794d5a3a49015a7f688","nonce":"c29ffb393e6dbc435168e400","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"1b78fa88fb94b300620ec26feda239e9d8abf31d3083325ee44d69bd71523ee71fbe61c9c8440bfc27df253ab7","nonce":"c29ffb393e6dbc435168e401","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"adc69638a5fd29ced5c5c78f89d6a4fa243014802a8da1fc890510b0afdb46eb337e70ac18c40234a3429c143c","nonce":"c29ffb393e6dbc435168e402","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"48a85cf51f5fbed6f4ede827dee43078a42272dfeec1004cd27c582898752777b74ab5b15c5d137a6b7836367f","nonce":"c29ffb393e6dbc435168e403","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"82f43d555b54c9ffa396ad10c80879bf76b583417e510566b50229b3f9b6faa68e963801c7ad13e2127f25217d","nonce":"c29ffb393e6dbc435168e40c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"05a029e482d124abe71e02967ea24de67a1a7090b80b83d0dafe31a44742e9b7113bde2ead3d76e1024ad8d06f","nonce":"c29ffb393e6dbc435168e40d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"358b348bf5cda591d267ac6bfc3d5642b256b0a2f6fe6c0cda023528012bf3db"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0d792da028fbfe9377ae89a6148e1684560792252d9361eb6c0e7c240a05e116"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e6f9037b5235bdcc4252fce2a2206decff5e8be2d7556b771130a509d5ce5d25"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8df243ea332fa32ed78bb3d15a878797df97b0f15a60ad2d0789aae1b1cb4259"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"de5c0bc3cf954d209a19bd03d8b254eb2f1b753f212157baabd2f2b40409d0b2"}]},{"mode":1,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"4b4c6355d4d28a1d2bfb09d733a14ff6b7b3253ecc5448fa110c0dd904b3910772fd7aa1ccc3ac5ad89325e75cbaec7ec3c77c8af8b0276822f6bef19e63629b3e5b","seedE":"48f699a7605188793d51bb19a845ab0a73bb23212ede0ac1776cbb2d4ed901783c356e4555a2c4f86b0fb4356366cc99f5e74352c7529afebe5321258239451144c1","skRm":"016bccbfa4b6965b5a9c02da431d209826a8eba1686a50c792ef4104db279e4e17b8d1d6cce959febc831b83133912665d584adea2bb13f90ecb1d9a9854421cf528","skEm":"0117e51c5e7bcb1a23ee3baed6a4ed888e45fefb8cf981b319957708754db30022923e491e70e0a1f40e6d95d1273dbd8db0f57029db76afc38cc2bb4b734682b43e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401a28f6c1c4058380f26c3fbf903f8400725347f16ffbc04527de862aa2839b542b9dd9816f16ff350fc598454258919ec0e1ad636694b6c755c920b57af5b85cba500ad3d727f1b3bc1884724d7156d806f2f24a39438c0e843e2d39b652aacc3c69a7baf5fab83752312904a30294b94129182918ce07a26be8d4bf460b7feac0b0874","pkEm":"0401f4767f61f15354f720b9899341c00d69bbee17f0bb0d7403f9798a659db91354fa8a41576f852fb3f5570ab3833df46853c3c87b9a2358178c0f8df015b8a86b1f00afb7675829caf09496807ac63c45dd604e476d8ab805e52bf3eac6e52ceb9b3f43d14f28e57d22fd6997b0b066d9c4bd1370f634b30b9ca24f4b5516dda4629b62","enc":"0401f4767f61f15354f720b9899341c00d69bbee17f0bb0d7403f9798a659db91354fa8a41576f852fb3f5570ab3833df46853c3c87b9a2358178c0f8df015b8a86b1f00afb7675829caf09496807ac63c45dd604e476d8ab805e52bf3eac6e52ceb9b3f43d14f28e57d22fd6997b0b066d9c4bd1370f634b30b9ca24f4b5516dda4629b62","shared_secret":"842138d398ac66645bb54b815eb7775c10d0f77b98e6b5d8908a5a405490530e2d11e9977107851ef27566b06a50d2a564f001519cd7e6ed750093dc1771655a","key_schedule_context":"01b545cdff6122a6240f9a42d61d0a73efbd3f121e05e32083695897aded6f01040fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"9d0a1f1a8c64e2a76c8c0bec7d9c7406446c02ebdbdf97d2ae64a2a5f7763f90","key":"05d63a46dbc6192dfb736fb9138f77a26d13ae8b8a372543c4d1d21c79c38acf","nonce":"e723e97f9142e8d40ac52b50","exporter_secret":"ef85ed877d13de2eea31e37430d2fe0670342dc2548011f3e9bb59ad280db27e","encryptions":[{"aad":"436f756e742d30","ciphertext":"39d0f56dfefd4c518ff8ae12131225017d698fb5bbe5df351ba9a067a5483d1eed55271c91d7b0b5552a515f7c","nonce":"e723e97f9142e8d40ac52b50","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"815227c9b850510ab92b89d9c50e9db6edfb35500b1d7adbd6f0cd2f933552d26d68d086fb1fed7078dd33dd53","nonce":"e723e97f9142e8d40ac52b51","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"624e3e678457b363d5fbba813c542b0fb97bd3fc5b39723e4d3fddaaeb28218fcdc5ed8ac8b89e4c9661aa6f36","nonce":"e723e97f9142e8d40ac52b52","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"53bc62bf01d8b10999c30a72753ecbce7702507c9d1644b221487d98b7b11d8d9cdf51d5d67e03e5ae3ae5d34d","nonce":"e723e97f9142e8d40ac52b53","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"10d9c40f6ba311175b713c2f7daee0a9b8fe76b33f0e6183edc4cfb5213ae372708daee3b479fbdfdb638520fa","nonce":"e723e97f9142e8d40ac52b54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7bf6d397232d853b34345308c9e48ba376ffe6a4e9dd94c3b2a1bda8c5d66c4cffa8395f39ec9876642036fffb","nonce":"e723e97f9142e8d40ac52b55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"1d99155816d66f3663c3f854e76c4667bb59f5e4f7b148f8b6f99d540ef8753929daac8840aa999e0ca839d874","nonce":"e723e97f9142e8d40ac52b56","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"c679982ad874dd4a7f5bc9a4ffbd4777c568b718bfbe5431e338c13522605ef2c742ecd1f8cfda7f51f68b3118","nonce":"e723e97f9142e8d40ac52b57","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"d33cc821c984cdab0d5e0c332673aaa9461b9b0c7fc098abe5080a25cb14f0973c068001c31186fce0d45cb7a1","nonce":"e723e97f9142e8d40ac52b58","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1975bb3ac05e637a9b0db2a938b25adc90d17051b150611852a5e335308e0ee1b1dfa2c3a9f1ac3032ab7caa7f","nonce":"e723e97f9142e8d40ac52b59","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f424b53a5752023fa6a26c551c735258094898f11691afda491d87c294c83f8c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"4803c825ad2a8e9cf522c861624a0c00ec9d87627f595d6f20f3b00be8fdd9da"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"66c23a61056eb0a2b40a5bd6d87b2f40d44859eba77254558ca3412c1e605c05"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"58d7452175dcaa9f346796207a0fc66978ee1f253571834a31c6dfdbd4a4e61b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5a3707d16217d60ec195a638291f9210e442cd390e7502c7bd7204c1ed131e61"}]},{"mode":2,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"3a2ce236f1e6918064f97caa0ce8bb456cedc3dc85fa9baf6dd4719e8becf060c6d42802c2c67727446df38d306a565b1297c94eceb30ace6d23cf6604e563735870","seedS":"8f5c4cba3bbad90a4ca142eb0306b60d418520ab6a72a838582abd2990d91cc799c2d74608789a951ca84ce0fe3cdfeaa68b4456674aa05babfbe5d9d8f8f75dff7b","seedE":"e48a27b1b91841e39bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","skRm":"00d4978e806094631242fd2386823eb1a5a60946d68c60c6c6bda34c98395006c7c52e6e92587952db058099144b4b9d0152db5cfdd43a3d72db402422ad0669caf3","skSm":"007dbba771de9fef18bb82a9365e5d3bcd82072c6493af6c18d9bb9a8940981daf5e22950f5b251cd20dc18e7d70534420347dfc201c080a9634e9a75c75947d65fd","skEm":"01532076454f46b0945d13b186a91c554f68cd48514b467d4be16e74ac2656df11ec09f82260e4124cf20a49fe02aefb9584c4a7996fca7b9b22b147512fd67c81bb","pkRm":"04006273e3af746c915a10f19c5d558dadac8b216a4e25d8e032d0941c3b1b560ad8f7468e16e522252fbd6c9b6d7f2295f0a64c4ac6f9741c5666dad5a6cdf7d8a59500745918f823df189cf6db4a0eb234840065048158d164897787e8df3578de630e6e2c1c7512c20dc2c67c6bdd5f18ac62ec3ac0130957ebaa6663e51bcb45adcd3f","pkSm":"0401812adc0236448eca5b2724a867712336101191c33c2d20ed17d91f4519a0764ce8b4f0722aca939f34deff0357075ad21013b12394fda1b56384061ba1ee3c95de002a5bd92bcddf0976bb595e407639f5bad2e0315af2de1a01ca03fd4f8bf9eae00b80d82a6e1b2ed525fad06e6849acceda5bf89f69819ed33c4a792fcacd5581f5","pkEm":"040055f72d9bd95aadcf79c55b6bd345f3db1ee987815bc3ed0c4410610d7353a17d525e51688400360e15b21ac18262bac268fec3f51c1312247f8fba2be38d0596d60065cc1352a3319a9bca10da261e61325105a147a53947b75196d46d24638e9308bd1d31fcc887b73cdd5391baa3f2fc78869e07040abeb180829f06496c666ea7b4","enc":"040055f72d9bd95aadcf79c55b6bd345f3db1ee987815bc3ed0c4410610d7353a17d525e51688400360e15b21ac18262bac268fec3f51c1312247f8fba2be38d0596d60065cc1352a3319a9bca10da261e61325105a147a53947b75196d46d24638e9308bd1d31fcc887b73cdd5391baa3f2fc78869e07040abeb180829f06496c666ea7b4","shared_secret":"118b2bfe24dc4bde41f7e394a6f9774c1fa34a07b59689759851f0a7eca4f5131242ff4310f2c6a9bc3a47258708fa7049c5a4ebdbf1ee721225ff4c2f4bc250","key_schedule_context":"026cc4993ec21e5710cc3844a17243519591c5a338ffbfc8900990c50511368b680fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"3bfe1cf7e64253e9f3c8950f1feb9fb7c62438e7391ed8c0e146283e5811cba7","key":"b117226d059191979d2e82734032de69c99584a06a1c05ac840420aef52c0c5d","nonce":"1470999d8ff714f381403328","exporter_secret":"9d92613e437cb3c662a594498427a2342d41e75b5df24b68618640d2fac6753e","encryptions":[{"aad":"436f756e742d30","ciphertext":"c5c8df4fd07062f6f871bf052659bc6f8469c2317dac377fb94dea600d9a9bbb889046214b63928429ac938d54","nonce":"1470999d8ff714f381403328","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"125fff54dd164571d1a7753589cc9e7564e45fee42db682727606e90e5773d4bc1ff78de0fed3c0821fb99eed6","nonce":"1470999d8ff714f381403329","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"31b92f1bc0db97ae8396cda3d349a75422155a600ba0916572396c7c254ae0b804cb7d7edf9b10a3bc3c027136","nonce":"1470999d8ff714f38140332a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"d3ddb417ef5f0e4477d5b584e7dd632cc7c917983cbb6cb519650c1e91aeb84c908161d4f998658e334bbcca65","nonce":"1470999d8ff714f38140332b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"4a1d877ab1e09a7480b76ca43809fdff73cd2e788bf43346852f316cecf597b4b2cd4dbbfe7c2157bcdfde8ecb","nonce":"1470999d8ff714f38140332c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"12cb1adc01c450d73cbf5dab19663bc52a0f6f4b7ba9d27e9b8de81fd6f1abe79f9fd4077caf35f7297b23f09e","nonce":"1470999d8ff714f38140332d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"8de9070b0a2af26866bd07ac65515256f8e60e382f543791d61a31d9a969d4d13ec5261d5ad727cb7f3eb41fcb","nonce":"1470999d8ff714f38140332e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"df78c4956f2823cb22013f9060170cb1c2fff7de31fc28a4d209b73e3b8159f46d46dfd856616a28be8d57b3d9","nonce":"1470999d8ff714f38140332f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"36d6109756defb947e39a287b479d4db33224ba5ab6e05f8caed0d1f4e4ef40e2b88b5d4ec64681e98a1303241","nonce":"1470999d8ff714f381403320","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"d3b28ea2b8e98d38d11c000c5a6afbe04d11760b9d64cd48913e800c2219b7ebe8598b459924132e3a33c86e51","nonce":"1470999d8ff714f381403321","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"faeeb16f942fb3134ed3530238147ae3dbb556158cdd542ce470037937f8eed3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d3f224ad4882fecbd31b7d438484657a2cd9b79c7d87bf6175d6f7e77f686a29"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"290512b39203fc767834801cda116afab68c46c385754cec4af612509cb5cea2"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1aed63a9892bad585961337c57d6b058097bf20f66ae123d3b839424ab2b2e07"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"202fc287acb8b1106bb7883a15c3442efc1d1fc51282b1a0ced6171103ff81f1"}]},{"mode":3,"kem_id":18,"kdf_id":1,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"877efc3213de44d73a97301d3244be03a5cd6b59a65cf11e03122603b90fa2ce14f5cac3ad9cc1dd998ab8c86d762bbbb240e7ac6a94a68d7ef572fe55557df7b26d","seedS":"a30177f7923fa437c6801743dc8d9e6684ea117a2f5f23125614bc74813d9f6c5ca33917a8493aafa6e5d75ef6e5614670883095aec72f1c2abc00d496a72fece071","seedE":"1a3d8fb0a52f24f7fff8caa7e23244764d36e0a7fe69b10ac93298ef5c50934ddef929ece119d374855f028692bffc446187f8424b2707e224cc7f80d22e062d0fa4","skRm":"01ed5d101694552b8d8aa289b67d304927801a0e310adbca6120e269dfe53a242dfac71cc646d2fc4d046d3e49b96ac78d9ca401fa41d644862280c3587bd86c71f7","skSm":"00c10e5d5ccdc8731b5a3a0d0842efe8b276990f3a02e4921a7789150035940e71a60858412d9687a14046034fe17b1b69d03ae86beee015208925eb9067556cab7a","skEm":"0194b9ad589a66037e0fa1bb240d7d6f62fd8e8524b59cb55522516388cd58bb959a57836a1fd06995c08ac8c0130f8a6fe85a6aaddad70b45b37058887b9f05377e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04003d86d95af7fa167b33981df197a3546255d950e561698fe8b11cfa86ba776e561f0e038366d9e9cc9d0ce492a0efec82a0835723647b6d0b1bef930ee7befe184b015ef51ddcbf9ab79ac61691a5c99540af04bd27b4929b26eb1aff36b87e790f946076c998ab89fd894517329d8ad8ac07bd518cefebbe7860be52e96e9749440f0d","pkSm":"040195e007f17633ad09e96404bcbab2cf5fd4668182a3e194c84db4ba5b6a8c54d918c027a7a86e5d3a39e0a6e63cb7ecc18506b42382c7fe83a6685f8cc48333dd05019b04d637afccbb9720753b7c299a2785293948e8f018cc13c6d9b2b44fc68a05b5242a52cf1992ae4e0624d30e49f51a1983c857ad39e06054b986c84acc36e69b","pkEm":"0401836a33ac4246b5a417d2bd0ea3918b0fd6b082e6ae78495792c3202a955b398e2903f1d6b20c59c1e48aa55a68ecd1aab025f2662bbd747bdd449343063792b69901b7cb711b902582122318bbec190a409ef895d4c8c9f2c3cc9f4092f7f94f91b9a90f15bf8c45beda3ed22e0ff134a964e775fce16bb1b7ce27e74f92fefaf54d3c","enc":"0401836a33ac4246b5a417d2bd0ea3918b0fd6b082e6ae78495792c3202a955b398e2903f1d6b20c59c1e48aa55a68ecd1aab025f2662bbd747bdd449343063792b69901b7cb711b902582122318bbec190a409ef895d4c8c9f2c3cc9f4092f7f94f91b9a90f15bf8c45beda3ed22e0ff134a964e775fce16bb1b7ce27e74f92fefaf54d3c","shared_secret":"0fa02419627ee784931fef1cae2149cf04dacc6e249372614d9fa627f302dddd14332e585f33e7f5cefb4ca10821412119980756839e8e239a5da0ebc82269a6","key_schedule_context":"03b545cdff6122a6240f9a42d61d0a73efbd3f121e05e32083695897aded6f01040fee6343e42a34de218021722990f4771d707f8f92b430f6243c559b4dc31082","secret":"2042dbfdf986f1734fbd105ea630f1048d6c8a6f1dbf620172d8f6f48e7f181b","key":"352ec4e3e91f34bf54a9cf138e69c2a7dfaff4ca494ce3409b5fdfa8eb6246de","nonce":"903b6d72ef7ebdbae9d08815","exporter_secret":"45904977b6733fbc70381867593792ee30f61ea1d80f902cdb5057c499d6755d","encryptions":[{"aad":"436f756e742d30","ciphertext":"4f38370a1563da71b30a6557f722bdd6295d2f9ec580ab156c875625cebee6e3b24cb0b3e83504eb96f830ee76","nonce":"903b6d72ef7ebdbae9d08815","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"78a69157dcdb257794f6ee6334344c6af72c7622e5ace8863fa79b9dd5d362851d3621e3475884939d3e614fff","nonce":"903b6d72ef7ebdbae9d08814","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b2c43d76adca9e2458fd2fa5c254c090c9930c75fc487a3f10a21d0bf038ab5d9f7fefd74d78bd0d9a5dbf8729","nonce":"903b6d72ef7ebdbae9d08817","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"6042939742f122f0a620bac9878e2857175f9e4dd814cec1b0e3581ba98fece91b0083fd32c78e26e89b7c0fc6","nonce":"903b6d72ef7ebdbae9d08816","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"8c6e9363a07ee3e9a9aebf6c1f89d8ab694e8e40075a7cbec969319fb5ec07bd369639029bf36774efdea4b075","nonce":"903b6d72ef7ebdbae9d08811","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"cb42db09e0792a554eeb8398257be1393e82ec8aacee381f67b02d6fc3945b219c8ad35050e64373869fcda44c","nonce":"903b6d72ef7ebdbae9d08810","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"7e8413487fa78183c3ff3ce34f612ac95530be9f809f7ed80ddf777dba225b405ce75e3ac8abab4f71f72f3267","nonce":"903b6d72ef7ebdbae9d08813","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"e39cda495c0ffe71b27c99d256bfa75ac671083f047eac2e4a413b43ff52041b393773c0b92790d87ef4277c0d","nonce":"903b6d72ef7ebdbae9d08812","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a175e895e80302f6adfe8b0fe24f3bdf6034a1467ce4a417bef62952ec81a9ac8756faf7e2f3889d36e3a907ef","nonce":"903b6d72ef7ebdbae9d0881d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c4f2d481f6aef2c8dc4e2320e391600d44204a909acf66ebaaca697774986765bb2fae316198862f51390ebed3","nonce":"903b6d72ef7ebdbae9d0881c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c2e98ab5965e329a4c895318314dc055afb13ca8a223cdc655da2eec868d5760"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"e8a81d4618b54d82ef8fe3220390f22d9551f17ce32606a68e3778bd0df9912e"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"9e447698b3afe5ea1b9c41c2597ec639692812d4d332f446fd9798715265e296"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"480abec70a42a0e9a4fae7f78139965550da908a2ec4732c7fff38c97df7ff5a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"50821d14d8acd067aa0a03b42396245ea06e986437941d2b7e944e4239e5b00c"}]},{"mode":0,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"b2ca27ee1204df73ab1f2db875fb5a56b544abdaa73e1f0cf2fe24e66b7ed08ce30935e562b922d70742b68a3699b5f895dfb274a2abd014929d2ed0355bab9ed89d","seedE":"9e013e040e389b4bc84a7eca2d0137a217169f954234f13841678fa586ba996752a704ee3baadb694ca79f25fdabdbb7e6ca1e835341a91d76178575c44b20c0b741","skRm":"008a8c0ed7ae8cf7245308f71a08f7937fc2e06659353eefa8523eff209461667ddf05ee359ec5344de616d47e42971a30e180d398e4a262d003f7e5cc587d121577","skEm":"013dd547eca9fabafbb4bfe5ca61ed344320fee25be98731221b5d4dfaad6e024e50ae4a4fc4290ffbe46097de61a9c353328f1dfc6b4b52665a199c504be1d3746e","pkRm":"04015c9abe6613ede70f1c3c12d17a21e7413ac338ef4c091565da2686cf1bf033af67e6cfbf70711e4cc58906b1572ac7e3503715142eae74c64188b253158f508a42018cf9ed335eb73a48e66bcae01bc49c8d742a78fc5b69c3d804c0e3ecba4cf50b129a1f991a4da727d034aecb4e947828f20f2def4dbe1b7e13758fd5bd895c72e7","pkEm":"040069e0729701961658f143143074cbe8b6be603358e03bb78fed54cef3426c417ac7eb8841fbe220f2344ebe35dfd6c7e092f64030a3773cc313aac06bbf0d2059ca002e573f663768574472ab92e1f9e7cb3e031dc6d4cc3a515bd5fd40ae3a0eae11ed290482fc1d0a8b7e34d75e8a05a6e1543040738bddaeb4a6e12f9731cfd73ee8","enc":"040069e0729701961658f143143074cbe8b6be603358e03bb78fed54cef3426c417ac7eb8841fbe220f2344ebe35dfd6c7e092f64030a3773cc313aac06bbf0d2059ca002e573f663768574472ab92e1f9e7cb3e031dc6d4cc3a515bd5fd40ae3a0eae11ed290482fc1d0a8b7e34d75e8a05a6e1543040738bddaeb4a6e12f9731cfd73ee8","shared_secret":"7a55d62f663f46bf0f95908db7cdfeafb2ad3dac3a7a4f7392791371d5badc8ddb8423d444f6b42ba08e8d88e53f17a6e504fcd2d829021f38fe9b502397791a","key_schedule_context":"0068bce131ceb9d0bb238bbe64df9e33d725b06ea82e3053e0e77164f5594110bb696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"b3d25da458dc76198d562c5e22914f09551fc14e14c0e1461c5e5697383f10b5","key":"f91bd12000b579cfb283f74f58a66cd1593f8b9fb40260e680d6ee4f00e8d2fa","nonce":"136cf8abbd7b6e2a6e1fe1b5","exporter_secret":"393fd66d91ec8da2297df3a90cadce581f61f9675d06d3cf69a4d7ce22b1d3c4","encryptions":[{"aad":"436f756e742d30","ciphertext":"1d9648c780fc47295288b89af94f0241642cb5eb1c75b696736cef478dfaab5d0f56d2f5dd8df157174e6350fd","nonce":"136cf8abbd7b6e2a6e1fe1b5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"67a0098a8acef90403dadf0e5134e6273d8d5a5bbfa348dff03d5fb7f4bd8e16f6cff1d16caf1b083efb254a88","nonce":"136cf8abbd7b6e2a6e1fe1b4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"18f71b4281e38beec6c899699da61f5fc560a7d371e76e269af8bb45556f086b05b7a15bc27a9143ede6b6bc37","nonce":"136cf8abbd7b6e2a6e1fe1b7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"89efd53984aa1489c43a45a236bc3eb87e575ac647060c4af803d5b9e1e3ac1e3743046d6bfcdba9569e7112fb","nonce":"136cf8abbd7b6e2a6e1fe1b6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"dae93420ea8a6ac146ad22dd0d79f780ea07d117b94a934185f833e1ca5d74e81fa55c2cc6815889004360f910","nonce":"136cf8abbd7b6e2a6e1fe1b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"b68393c81311a6f58b71921dbdc298382dc7b42ff59176b26a5d6d91fd81a70c2965efdf63620a8f826814e3df","nonce":"136cf8abbd7b6e2a6e1fe1b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"8d4e2dd521fac31ad4c8a1916644401e47f24ae025bb7ad8dca1658bfecb3f7f9a0c44efa3c21a95e6d588c06c","nonce":"136cf8abbd7b6e2a6e1fe1b3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"4394473c860f17744ee4c13c7bf8d0962f2a3484ac5bc7fdbda1831a7d1024f21ad42bb833ede89d8aec69a4e5","nonce":"136cf8abbd7b6e2a6e1fe1b2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"80bb1f963b011d56e0a5b5d73c029cc131662f33492fcc4c77e7ef5b03f31db670d45950048ed9dac5710129f2","nonce":"136cf8abbd7b6e2a6e1fe1bd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"8d9ad0bbdb2b48bcdbfcb4bb0102fa3a72cb75cd28757c82dcbfc81ac2f3d337a71d2ad3604f353d006677405d","nonce":"136cf8abbd7b6e2a6e1fe1bc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"680b6c5f8a0f19ff462bdf8d5e1757be485b3e50df26b57345b722ac2f357095"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"37e1502f929dd95d359c81e264f85d3f689a52174f4ad1b6a11012cda5f14f82"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"efaa1e0ff2a5d610a36d1b247f3cba34e1746d35d6420be06d6e293bdeab077e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b17e421b27e83ad93e8668e9422f60503c46967cc7a0902b21d5be503458509a"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"78e4a91a93f80cd11e679bb434273d35a3733ea0ec50b809c19ca91050456d60"}]},{"mode":1,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2bf983a8659982907789ee1bfe89c1e644ee46b2569045deb8e86dbe1ea88d90edba6ddf7c399affe96b27b6f3c0c17e9c2a89a71c5eed80e94fb85b154eaa613d48","seedE":"aa548d8188df010735cca80564f6b1c37456814c512337f2298d3ca9e01e717c941cca9d9a461232edd894643af2eb70c905b0eff2f626441759ff7f03487a51521f","skRm":"00eedf8f1b62cd7de56631c6058cbbba07592fc86a89840c26131c67939ce64ffa551a64ad6ba58c3fccea6a3d8c8958ef52036ee3f207cc8af7d0c38a3e77a62d41","skEm":"00d6ad55a2f2eb34c14867ed82464b00cfbba94a26ed3fd86ab5a2733bcbc78f1ffb7b8b6de9b157a33cc8efff9cd755969165500eb474d32bef3ffc6c48eedf0afc","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0400584df74bec3fa7f0dce365c3923ca611feb6691622dbac5321a8a5fa174e9ed2e18c92f7691c6664c7d2a09891917ba3f28a1801c0c9b75414e94127a2765efaea01171750ebaa823dd3f63982a92ff3757fc640228c698fb07d28103582d7bc06d2306c674cc367510fd397bb7af8e975bacfffc49a8d0d3cf67881837f26540668e9","pkEm":"04009477b3dc3f30c402f73b3a9d63391e11cc0a914d5c0a7835e4413e57c0286e0640eaee3533e0e2a80ded9116aa52e9f2e6e5b5bc102b69cd45d85c2b47fb03af10004a2fce3d0a2cd1dd15c7bbe0e423e13ea884b73c1f5d4d3b55e0e9bd738bfbe1896b0b3bca5c4782dafdf6ec05312b5071dca41a973a22bef20612e561ed8e58d7","enc":"04009477b3dc3f30c402f73b3a9d63391e11cc0a914d5c0a7835e4413e57c0286e0640eaee3533e0e2a80ded9116aa52e9f2e6e5b5bc102b69cd45d85c2b47fb03af10004a2fce3d0a2cd1dd15c7bbe0e423e13ea884b73c1f5d4d3b55e0e9bd738bfbe1896b0b3bca5c4782dafdf6ec05312b5071dca41a973a22bef20612e561ed8e58d7","shared_secret":"7b04878d023438a83f6f74580c8b2711aca9a3dec210f7bb5c941b4f66cb84713b82218ff05724697eea9df7161bccacdfd3977a9c5b9670c55e969f830fe677","key_schedule_context":"0117e9751a1ce31a2cb6e3ae98596467c10eb692c73899ae0aba8b6e79fcf3081e696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"6b74b07e493c2f3fb36c593c9c8ca9eeaa7cae330e70d85a78394db540d3c695","key":"b2357f8f74a7d9243998d16ea7baa93457d4639159893f04ef60702d83187edf","nonce":"f6c0d7ce128ff29d905cb88e","exporter_secret":"f79b920e36fcf0f924efc589c9485d403af4d7ee4c6c55a80ecbac151d4dfcf7","encryptions":[{"aad":"436f756e742d30","ciphertext":"3a86b581f718dcf093110154e78529d597e50600e20848e8046943e0662b328ceae04bb0c3df0989a06cb32e53","nonce":"f6c0d7ce128ff29d905cb88e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"c0ac779111acf3ff541aac85950dc850f58464056d9282159f37b05654c9af9e9196373591e96270574ae4c228","nonce":"f6c0d7ce128ff29d905cb88f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"eda3ffe2c54eddf87acd0911caef69f248ed55339e6a0e7744eaddf08c4d6b0cd9eaa6012486acd8453848d78d","nonce":"f6c0d7ce128ff29d905cb88c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"ae80cbcbb6de996d724e27b941dc3a42e5512bece94864e725d1da7025086b08ceaa8e6771270fc21a7dbd5b9c","nonce":"f6c0d7ce128ff29d905cb88d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"54ce193b3d33116ca0ace9f7b6f3ed3d3fa4a8c87aa084ea19338912c2b18851ad18cd151b602661275480fd53","nonce":"f6c0d7ce128ff29d905cb88a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"f9f9d24851293447edb9a867c555e2f924740dbb0994b4c2ab74b16ebd11fc0adbd2151d07789e8c9fb28bc54c","nonce":"f6c0d7ce128ff29d905cb88b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"fac04cdbc9dbb92afdf30d16f8448c7b8bf341105486fbe2115cfdbecd0c1082ee9d4ae64377163bfdf273f8ff","nonce":"f6c0d7ce128ff29d905cb888","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f3f1f2c6b2c51289825357de9685ce02ad65e6b4b388e85905fc2ecc11caf3a50bbce58c073471728503f49444","nonce":"f6c0d7ce128ff29d905cb889","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"62a562e500138c6f4395c30ed9477ffc4d15e341d87d99e723523299520d7be6a25df9e4021aabc6b82a5da239","nonce":"f6c0d7ce128ff29d905cb886","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"17ebe1f1141182f8b9eeff2b584b84082e4fd71657bfaa14deb577277a64db18c6b872dd60b7990bb06f4af585","nonce":"f6c0d7ce128ff29d905cb887","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"df7783e259d6d656df5979b7a572b44e2644a2e15748db1afac0d4e29153ecda"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"90a95b2b2763b2ca2f8266941cbe333cf55e1a0a4d2de0cde905ee46fffc11ec"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"25e24a953c4f4b8b61bf5a87deb735b3049d5b5079b172972ca3017dab2ff3eb"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"3d2a15485dda8968208e12f2ccc5746f1cf7e4500f13f875db4a05d90732a88b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"4259420bba32bc7f1587e3cad4229cea12e1b9dc553276e67196f40bc6bb7149"}]},{"mode":2,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"99ea0426c199188f323cd5cd0e75c7fec15ee54a8f5a8b9eeb68093415131196814483850ee972b15143c1ffae2e261747e284486ff645859c3608ea43558b7d41ff","seedS":"907dff3ae86d5fe3513725bf64050a0912ecd0caa182f854a13ad96e7824ad62d10f4ed269e07c17bb0c8c469fd14c8861719966d5aa54f7115f03c3a5baf1841ba4","seedE":"aa056200e1fa696ffa9e5bc070d5e862b040c4cb3b2a1e5a70c2bddd7cf2c80cd1eecea84e8ced27a87c8b9e73cdcf79fe3e4f0f38df3b3260717992324533fe6ca5","skRm":"00d46e36db75090f033e0bf17aa7b482590f20137237165595be995ec28886f34cd253f1f25c7e36d9e0b95b23274da0e6c2e3ac652a4383425f348711ad9f2e3004","skSm":"00614b7f66ea06df1e9ab8f40006231246ffee2bae3d6e404a89eef247dfce113c305cc4a2572b9fc1fe76e57da77e8f2699b0c07549b7b63de61abcd59265123d7e","skEm":"01170d1b92c936ff3b37f8d048b965bc2d42d60a0c8de6cae49894f1b8270d06f68da0dc14a1c41ea666b06f58448f4f19eba5d24f1366e78de66a2a9f025588d6be","pkRm":"0401db105971d353476497caff1edf2eb6c48d61b7cee637306a8ba17da2b57e0261dddd97f892d97cc16b54d14f8425150f699bcff8d6f26a94dd8df38cbd2e8888c200e8a3779134dce660812dc46f320808d3ae4db8d13f5993fc420ea1080f1071a04580f21c0dd04f996ab60fb9bd69a8495bf8b60459abacf75db6c26807a3dbba0d","pkSm":"040013e860214f49dea0cf69bfe6c6e8dfd0438f8eb7ed88bfe91ea86441503f83d437ff4bf9c4149503378c437830be991ddb2f7aef3626922ac9d806f7b317c743cc004e29bf7dfc2dedd50c65e753276b7b0c6975c13f3990686816a46b5ea240164ee9470d70195abb5ae66722ce6f6f24ce2e0f63d69acee87c10d133f98afcc7a325","pkEm":"0400b79d8750d53cc6eb760e8a08e0f8a4db66cfc494ec955c61b4c189c75e9bc633cfa420b4ace20afbb231d1978edc76c6883ea42d84d4a9c24994b3f358f5869806015aa3a8ef9780af72b2fe214a202c1d3a19d5d9ab2815ec8fd914740e90eff86f8176df82220e014cb73c76c03bf284ec67c2688ba311718f3288d00f1b52d1e9e6","enc":"0400b79d8750d53cc6eb760e8a08e0f8a4db66cfc494ec955c61b4c189c75e9bc633cfa420b4ace20afbb231d1978edc76c6883ea42d84d4a9c24994b3f358f5869806015aa3a8ef9780af72b2fe214a202c1d3a19d5d9ab2815ec8fd914740e90eff86f8176df82220e014cb73c76c03bf284ec67c2688ba311718f3288d00f1b52d1e9e6","shared_secret":"62f613d299fa12d63ce034e8dd09518a54ec9e1b04b4d7a1a4f4c06c9885b3dfe0e89e5ba4da2287a9093c78fddf592004063dc2205b5912977a38f0ad4f78ec","key_schedule_context":"0268bce131ceb9d0bb238bbe64df9e33d725b06ea82e3053e0e77164f5594110bb696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"5bec06e998b0c14b8aecc290761e1c4de7a6e3ea935ad3873fe0be81a72205c1","key":"5678d456bdc0676b557872095f5c86668466395c886b67f9556916fb1166ee3c","nonce":"88a24e7615c0284c19194b5c","exporter_secret":"eea859e001d4b20cc1a1e20e767b28ab7481ca7fb23e611781652fe7c92a49e7","encryptions":[{"aad":"436f756e742d30","ciphertext":"13f16cb9295c6994c284d95a7d84d4891194bac9671e71871d39fed08cfeff1936027e3d7539ab0944283ad9fd","nonce":"88a24e7615c0284c19194b5c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"44e0fd32719d2e0f80221519113f52f0129386438b12b5891b6dba0e11aa093a6709a813dc0ecdb46e668429b8","nonce":"88a24e7615c0284c19194b5d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"2e53c758b752aa097b56b0e93e48beb61ed7ecda088879a467b655f212e63f5e422502d54459e754d0cc7f60e1","nonce":"88a24e7615c0284c19194b5e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9c248e3159da0d95ef568c8a2e2247c7d80b70033cedcf33def94d6a8df8a4e1869483c50cc5a1eb4362d677cb","nonce":"88a24e7615c0284c19194b5f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"4667d8745d42c30ceba31f48042719f438c4bb3104ced3b41fb026b60a4d078e7c7270aca99585d0a4faaf4b38","nonce":"88a24e7615c0284c19194b58","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"7efaa3aa5b0655d310b41a2e90e2fd3b4a495e6b8d66b8870f6799fa389126b05880269f8c82c86f21e19abbcb","nonce":"88a24e7615c0284c19194b59","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9af8f0f313739bc66d66a2eb38f3f9f4ba253758598cf347e782666f34be5fdfd9941e0476dd602f4e30cbdbcc","nonce":"88a24e7615c0284c19194b5a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"a2e0900d1aa7356e6957ddcc8b747506802b3e127ba8d38f8b2357a992417fc699e3f1277ddea3fb67aa807723","nonce":"88a24e7615c0284c19194b5b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"c3461462df718d4b53adb5625cf3914bb54155bc139b814a38855939617fdaf818fbfc3001f76603f30a961614","nonce":"88a24e7615c0284c19194b54","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"79fb220113a556e352138f99e8ec7a327b1ded4968dbb50b0577997bbc75d1c1ba8664a8a8f1b2b381ac9b9cfc","nonce":"88a24e7615c0284c19194b55","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"ff2755bebe2772bd4f99f1370e52e445b4c9f9df2e11c83dfb41e28a9c1f4aef"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"ea13e6d9376e3896c23503a72c03b88638e9b1604d89bb3aee15b6e00ad354d5"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"e2a1e9c00ab4c95f3c584596662cac2ddcfeaacde8917110963c3afa32d3dd2e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"1a56752e604e49f8bd70117914c2594b917719bc0d4b1a99bf82c9828f0ebc87"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"81abc1c7b8f2b8945bbf78d6228158bca8e71b365215f306ecc2e231cfd5fee7"}]},{"mode":3,"kem_id":18,"kdf_id":1,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"2eb5067f38647048206c2873c3473c6c4567644f9583a47e2e3bcf57f9b9b87d41897fdef33a4d8524318eae6a04190afa53ea649eba1a6161f98f6778660c94f929","seedS":"00af06131e06c7386da9bdb9ce3fb1cdc2d761532f66b352182deb2e4dfb867bf072351e3ca53d0a81d955ba236f280876e7d955bb3cdc78ac881771d588e6b04f02","seedE":"78158b03926181b0d71bcd0913ebf706984b2c7b54b19fec947d31b6d55323c7ef005f63c03b609e3d0ee7369587fb930fad83ae88b7aa97740caff8e4d53eeef551","skRm":"003680140d11ace9becb84d3fb282224c5ff3a6613231a4679efde55581ae37922a0060564c598f4af4c9f828c5bea6a438cc0bdb556d21baeb15e6a9c68eb679772","skSm":"017dd0f876db38ff984884cdfb006521b2a90d85105709e6bbce22dbb50a82cacb6d3471b1a87233668e2d45411b0ad12ea97f283c367ec55cbd1de7f16e3b13d054","skEm":"00d89259ccbc262b2e7538fe00c057f9582f3707ae94b2f3d4a4a99ffb16cc8f73363eb42dba8e68db6b35ac1986dc6a8caa52f9a70c18864caf45512959c6c3f89e","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"040040bd8beffb39fd024e1c4bd1530a469e8e74cb4385d03cd9abd2b5cbd1540e37f62d50a5e5e64079fdee4d6b578081282a646f4cc63f7f90c5a6538a8a5207eaeb00c320cdbff6e683ff6cb8d5bdf3d863fddcbace2f32af2c9b5c0d907a72e3b8261930faa0bc14abe265ef87716749c20b866cd7e633469a825078e08ee2b87123fb","pkSm":"0401ed7b91af53d2e36b07181dfa6c7164bfcebbf5613d01ab8d91e65d8d33b482df5c35bd63d8444b2e6c39eb1f4c3944d6484c73f5d74628bf10ab7ddf6adfeddcf6011b4f46fc28d7000fb05c5d0854f97925fbafd09b53394d91b41019ea5b392a6577dc8686a6808cd61cd5d624ca4c80587dfb86af0d280aea3578a07946107424c6","pkEm":"0400a017fa6c144e371c9060d578409a014a35edca2b70941181566d25fee1e25fd5136c0af063c80d5af87e2d15e0e112ca2f4068f6e3542d614d12f0b76d56ad392700fa196e52a2a4381b9a04ef82224675a4eea3a66ce687885a43a773df8278c8768a1b0b5d074a41aabbbf1a0b886d2aa13557f84eb674e1cfeff3d4428425b954cc","enc":"0400a017fa6c144e371c9060d578409a014a35edca2b70941181566d25fee1e25fd5136c0af063c80d5af87e2d15e0e112ca2f4068f6e3542d614d12f0b76d56ad392700fa196e52a2a4381b9a04ef82224675a4eea3a66ce687885a43a773df8278c8768a1b0b5d074a41aabbbf1a0b886d2aa13557f84eb674e1cfeff3d4428425b954cc","shared_secret":"519c14de5eaced325b04da30b8ad02b5601476e55b1a12ee6cd6e2fe754e10161272c2ab66bf897cdefc8e358f6d9653667e2b54287bec530c4d965e272d4014","key_schedule_context":"0317e9751a1ce31a2cb6e3ae98596467c10eb692c73899ae0aba8b6e79fcf3081e696b9a9694b8cd3b05f17760139ba6c64e0b211d6fb62af0374fcc112cdeab00","secret":"f3ad97a8b4474fc89b7b0f9d0787eabe60a43b6e9458de245c4c7617030e61e4","key":"3f974d2380c73a379dba57ee68ca42bc5944c34eeba2276d80a5351a5d4fd5ee","nonce":"ba6be781eb947514bb8273c4","exporter_secret":"6543095482cc642608ed1cd067343ab43e8413f404bd3d5c67fe3105908060e0","encryptions":[{"aad":"436f756e742d30","ciphertext":"d45c37a30c53ed028e54a629180fed544a513fd1bf4279a05a4c6179f3a1a970665b55ec9b3ce7232eb32b1135","nonce":"ba6be781eb947514bb8273c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a2be2c35e7cc67ecd61d00551b57db3ab1de3ad5128f184f69add3f47b07a4bc8d90338ec6ce047deddf8c1925","nonce":"ba6be781eb947514bb8273c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"c5187581417c77c780f8d4f1ff8d8d124faf5405e75afaf2a93c58265c6e9599a1e0bbdef828a42162dfbf9af4","nonce":"ba6be781eb947514bb8273c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"9db8696411a63b438eb269e95881f1eda2295616fee987154331b2e4ce95edac1cca8cff78880f776ed8e5762d","nonce":"ba6be781eb947514bb8273c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"036a67082ee66fb0bdd691fe729e2e88ed21b2b10b22d63b6237b832a97f0ec3b48249d3b24e7cf1af69333f27","nonce":"ba6be781eb947514bb8273c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"87f7e8376c9d95efffe3aaf0f5838644adc3e6a3418e54e833d1cb45df1970f6878b6626e352b8c0e3eb0435d0","nonce":"ba6be781eb947514bb8273c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"a5d9345f0b05c56689603583ba44847f0307790d37e6b48586e7c8a3a2625d0a186d610dd648780b5dbb4efb45","nonce":"ba6be781eb947514bb8273c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d5599f15721dc792d93aef27233d5d7ea81fd9c60735b70ee736972a0dcc2e93ef3fe76cc0d18f14594f60bd92","nonce":"ba6be781eb947514bb8273c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"53cbead6f822c6bfe26f3561df02fa5e9df2a0bc12d9c2f408203affc220c3e21322974a8651148e1bca744a07","nonce":"ba6be781eb947514bb8273cc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"682b1e6b4c42e5ac2aea205a2b074ad107a87b5cef1548e2015877fd39d7fb37d309494ea88a0d835dc7b2068a","nonce":"ba6be781eb947514bb8273cd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"f9cb8f3777322a8621d9f28688c395edc7276920b36caabd8c23d11ab1730f1c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"40c73f0999e453625f8395b98e8cb24509500d26ce4beac82f08bcbb6a3cd23b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"1090e07bbd53cfca52b25dad24aa016e1070d1ed64eccb1ea0c1cfd08aec4f3c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"cc91d600f570b77630acbe099ffac0edb2afe69475fe1720e081e7dad3e86252"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"d64af35167f1f2627511be1c4d0e107c1636e1cc83ae8698e56a8ae0a0f40253"}]},{"mode":0,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f43e12a39e3f340ee92a9490461f00c5f52674ace3d7fdee671913421a31ed0eb859a9df301d28939ac945cc73486849916d0059c44d1a7d6d3785789e7df46a37fd","seedE":"819f0e3920604f28b31edf711c96225cec8f9e4cab35f7fee0de321376787f8d3a7026975bd664e8b6991dad84c96c95e4800dffa1cc0b7ee3fa7b46d60eee9159f4","skRm":"01240198a6989112e1379120c01d0796fcc8f82d939706a7e8a8bd0bcc0f53fa7813c8e1015491abbce6278bb7fde75bbe8780d01f1297bb2c0e2dbe2a5166366f15","skEm":"002fb1cbff02dd8281012080200dabb5e8f8477cb9e5dd34608a275cc9e52755c80bae7f7bc3fbfdbe07c706f1d8d31f79ad903c01bdcc25509981d615c9b1b77927","pkRm":"0401f7cda9141e6735475c80055dea2f4b8145c8313c386ba8d438658832cffebab43b0fc24574eca9b5f638944ce44d875dd2d8be1aabbf6dd41431158feb026eb02701e9aee03b22afd1fbf39bed5c31ad1b9bcf135972d30eca361b3860a5af27bf6c7496c3047eaa59239ae18231b6d96cc0563de37677e83f82630bb6ce5c8ee7c586","pkEm":"04016b8d0d1d8580f9b0b2128fd11d60bcbde31ba3cbc5641c85218719e3013bbc889d7cdf58c5b65ca417f0fd4f9dfe91c937cc9b940af3db0ac3d703107ebb62419000385b8dfd047c63ba721b790abe69eef3996f6a2b0a6c856131ec10e1d0f3e6b2fa4af28f85f4578f53ec35f59a021a3224eb1e4804b7abf5055ec3ed15521b243e","enc":"04016b8d0d1d8580f9b0b2128fd11d60bcbde31ba3cbc5641c85218719e3013bbc889d7cdf58c5b65ca417f0fd4f9dfe91c937cc9b940af3db0ac3d703107ebb62419000385b8dfd047c63ba721b790abe69eef3996f6a2b0a6c856131ec10e1d0f3e6b2fa4af28f85f4578f53ec35f59a021a3224eb1e4804b7abf5055ec3ed15521b243e","shared_secret":"2a00469d9ee6734e256db9333fae08816b2981ecf842b07b9d369d001f4809b12bbb58a1840e621fb460bd833487ea098596db41092da01103c5ca91c0ad0d45","key_schedule_context":"00f561da04cd85ee1cc244a2dc01c448761ef6adc50c3278bd9685a8441a52e99ebf93bd8606a1106f8e6cc040b9d01d47da6ed1171e402d7ed278e376d5efe4eb1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"8fa2566064a1beb6c091e142922f473123ba22acbdb986b405f8cdb451a94235c2b9a1ca1e7d467e531662c995ed0f48c219806c44b688b70534e1d8bb8fc4a5","key":"6a395584e24745b9e5b71f72d044dabc","nonce":"e4ec677d9dc43d8531a040b7","exporter_secret":"2bde5abb5aecb032e2728c17f5d8c386a502e803b3b7d72dd0c98db76bf0e5caf43e89a0d358c27b420a4f4b5deef7d730d07cdd5b9951f5f658aaaf04f0cd35","encryptions":[{"aad":"436f756e742d30","ciphertext":"4ca874638b9a9633fd109f8957bb105ce37b3e9c812593fd5605ec859f3d408bbd716d0f1e4384d24acff0d007","nonce":"e4ec677d9dc43d8531a040b7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"983deab2502cbca2d8fdfcb751891c5669729098c6c3e9acb325c36679e662c9d3e863ecc7ceba2944c9bae78d","nonce":"e4ec677d9dc43d8531a040b6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"9427c36fca1bdf4be81a4fcc57d6275efde2037c6e47ebbccd68b4d842e529eb9e38eb2bbba409775e415abd89","nonce":"e4ec677d9dc43d8531a040b5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"95004dcf13f1d51258f6448d44831ce533c0593b6522b9678d0d4cc877cc4fd978ec25cba4e3b693a1ec5bb67a","nonce":"e4ec677d9dc43d8531a040b4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"5c270c324697db015edda9eb65483418a64a3a0e410deb60731b1cc7446c08c160b82a9dc060af7bb1ba9cc1aa","nonce":"e4ec677d9dc43d8531a040b3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"bf76b62994ad02a63530673b8eabf300ca84a3688618833d527a328a04445ede3f3cb417c155a59457df859d71","nonce":"e4ec677d9dc43d8531a040b2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"19deb3e1f21fbcabc302169c78ffa0f74bab75966390a231d837dc19ab166c6db43df9acf6bd263b4dd88a9ab4","nonce":"e4ec677d9dc43d8531a040b1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"9be5f540dae2490ce52c876e1cbb3b6d8c9c3a93e8a04cd27cefd113c05d2b00092db1ae3a893c6606d67e9def","nonce":"e4ec677d9dc43d8531a040b0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"474c08f3de07ca42616b9cfb49bb93118d52b3c91c9cd6714d6bec4bcc97bd22ab6ca9433f98a4ff286d543e67","nonce":"e4ec677d9dc43d8531a040bf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"2fdfbd498a87889d2257fe258c54ae0969f485a5b53e0b60dbd02b32fbe20c2fa142af227165d3d86ca979b722","nonce":"e4ec677d9dc43d8531a040be","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"e03b8253a1164c7757c6841f9c43748a903272dd80c4e3ff03c455aa7d39e26c"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"07e78f49a665a860d70b40febb8844c702860e911ea712be1fca2401016e00d2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"13e9db36781be22dccfead703178887a472d7076c08a1eb04ba880bf315b952d"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"f2e8cae5bfff1e797ceddf66229b585c6de3954e2736dfd9937657c6aafcd318"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"833528678794682e9eda37e75fc3b11d88aa9dd13d1b57894d486407c3b30749"}]},{"mode":1,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"f73216bc387e50725769cd4eb6616442040285ae70cdd6eaf3963d2f2dbc5d35ad8842a11974411029b5887032b027cf22878632785e8e0f7cd5f146bf9e069607cb","seedE":"6b017fc966a0fe4c5e11d163fb557d31169c06dded835b1b516165ba501e53595896f4a34186aa1405987dd9a8952e78b9df7c30107c95f36b1700ed1114b3896354","skRm":"0109b250864bcb64a2ef307b70bfe0c2c4fe0575f6309f08677ab464f24e24e7270537b58381e5553d4e2c9579b8c55d8ef214426b567e25c84e85df188a3b57370e","skEm":"00590c59e7ef2a14557b86d024ec83abae1dccc4586020793971ea1265d01fb7207d39b9e55935f283777cd83506587d4c44ce8b643fe0d06685ab370bd9e90b0c43","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"040159780fc638ba2e57eba4d4f645483adf276be35cd3ff5649577aec7eb2277d095913b3022ff6b4aa908d21108607dbeca564abfc31f95bd640c1962cb79c823f9801f1ba80d9f43ea1ebbe298b33180b230818bdfe9c19b2fec1ffe5d2eee68a8e8aa87a9b9275ccf7cca84aed572742628f0ce0f2990c25d1f3d7de106082cc1fafbf","pkEm":"040175970c9c06165963eba5d7b71abddae5d478cddc95f880e86b2664ac42e25edd142a21f9c148bcceaa14f8ea567ee36149d7a974e512f01f945cce263fb82af11800e23529e800f6f1ef0df605b836aa4227c1e9ef40de521098537afc9c6436d5da26f0e4c95a30a007ea34ad91fa04f99af45fbb70785318dec40e87e7fca0d0eed9","enc":"040175970c9c06165963eba5d7b71abddae5d478cddc95f880e86b2664ac42e25edd142a21f9c148bcceaa14f8ea567ee36149d7a974e512f01f945cce263fb82af11800e23529e800f6f1ef0df605b836aa4227c1e9ef40de521098537afc9c6436d5da26f0e4c95a30a007ea34ad91fa04f99af45fbb70785318dec40e87e7fca0d0eed9","shared_secret":"8aff1d8083b1e2fa35a12af0e735be16c9f6d689c1c26dff378966a45f4bd9cb488ae7f917edac20c01640e5499e84b1b0b6532973e40414f52cb89b44fe8bdb","key_schedule_context":"01b12ec5b1b0cb71c610512ec14f972d365f2160aafbf38da681bf7d9ce9befd8ccbc47c51d6f0ffb420ccd4dafa49d39b3feeb93fbfe58bb91585669799e10f0a1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"ebae2b820e744fe1bb615dcfc1c7f5ae3f98acd8bf9bb57b6fe15f367bda66eb8a267aacae8fedea710e2d434037a8b998f4612cc317ca8221c1d9d6ab42d3c6","key":"23ccdd9d6fc29aed824e04646d708131","nonce":"8ee9860c102e2b2524bae87b","exporter_secret":"412030bb4509b7e9486f1167bea076bd889d1af5eb212d1a0eafd0ac65ca87907276f030994995c43831b7222e60220a167450da26650c3582f602361ef239cd","encryptions":[{"aad":"436f756e742d30","ciphertext":"68d7931b7142f075b788eba9aed528ce6fe8a15c68512d65de13ee64dd7bec70d378e13d3592a741de813e926d","nonce":"8ee9860c102e2b2524bae87b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"5bcee8b0699facf9e8b68fd9a109466915dae70d609ad1d323a843168f0eb3dd476007fd5bcd4de4800c8b2693","nonce":"8ee9860c102e2b2524bae87a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"7aee4ad945a439a2e3e6feda56c69ad99aaff4ff2f1b3a9182d1b397c07981f46a2ff10cd05dd30605f7302281","nonce":"8ee9860c102e2b2524bae879","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"0611858c489caa8605244a7b8ec4f3192f932bd7be39527c32fae9fb926568399bd9cb94827e0a847e58bf70cc","nonce":"8ee9860c102e2b2524bae878","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1ef7694f39dd53bbbe863ddd4fc37c0e63cedaec94619af8c1ad6ef1a5421ae998881343cb12fcdde47b81336c","nonce":"8ee9860c102e2b2524bae87f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"a918e726c2712e448356bba54122178a32b301cbbf84604142dc04d2c43746cf09a8bc62facccd63e13daa288d","nonce":"8ee9860c102e2b2524bae87e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"a904cbac602cb148d817ce8ed4b838f1ed229ad3c27665c7526fe54456624576ae3c76959aa174f0715311c5ec","nonce":"8ee9860c102e2b2524bae87d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"7fdd5b05440847f9785fa817661fbb713ad3e8b1d62951053be8877400c0c47a22747c4cbb466eb0d4f383320a","nonce":"8ee9860c102e2b2524bae87c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"28775e857bd885ecb5f524f96221640fe36b46a4d5801828c3536933ff7f73cd624709a3af153b72917788dc1b","nonce":"8ee9860c102e2b2524bae873","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"5ab15738565a80bd41d3a01afd34bd44492a75b72e992bd1229b0d839b4853d5d165baf7dec3095cb7a36764df","nonce":"8ee9860c102e2b2524bae872","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"5290b3a27d734279bf172a6578ec0a130ca2a9c060da37988ca9c0b61a4db4a0"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"3ee60c21dde226df1f7e1e2d611f9fe9d73cf073abd96ff33540371e58c32533"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"722deaad2e30e65e2a99695ca3b6daeaca4025c076bfbaae2013303c188915be"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"98e6eaa5d9e276c0ae76363023040a628e81397ff0519bbde337a82d8ea95727"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"a4204e8e7a4258c4f230db1998986912274b3f2a7901ecd46b41b218a7c2dbde"}]},{"mode":2,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"a6b06b3f40ad9be9c5d4e78b6b9b978236409f59af6ff572af67f9de518a8de7029095c18416fd497911721631e9e036dc47141b3748ddd6a0e446062d416e0eaa69","seedS":"2a7cc27ddc9e94ac5e0c45bf39253bb334df63c6cf4bdbd746f1b055653bcf83919d8a1884ee34909263850b9e975d195d825be63379088c15945bcb4793dd15e817","seedE":"e924e36b2a5fbf1ac843a09c58f0b0dde183245a4d459935be153da95b6e70ab37601478a77d42200393e2b0dd5cdfdba5ebb767ca6393e90a1d990e18a0ebe2e043","skRm":"014eac6c36f931d8740bb7bb64160553ae59fa30937e5b1f01a12bbe8e63eed385c9562e0e54a298952d54e58468306d3d4dd231a193d0e59ff6fb04a9d56597c46d","skSm":"0111fd3bc3a7bfedda3cb83fddf38faed459e53b832ea97c5cc80e00003833cb6316e7fc2bdda1f10249d46600f2f11439fe8e8a057c90d21e5f0ee1b6d4fc9e424c","skEm":"0107ff446305050bbedf39d4e2d2a6a9bbc08ce76214f1ef02c9277948fc03568edf3f215221bf63c14f71222d6df5391232e1089ad702df4c1f57b848fba3c25768","pkRm":"0400949942cd6239410338f0728c610ac2bd8e330a453295e785a4b661ea4b1529e4ff90c2c7bdd084cbd9c196539277772b572e808c8d640294de56a37bd2102037b7006f6533b6267370511ec437ec68b2ea8b682ef4ebe60c19b2d67e42ba20b6fd1e2c8d5bb6b9486c129d8513cd649765783b40309286551188486b89de1779b406a1","pkSm":"0401cf1d39eaeb57bc10827606bd1202a12ec8dc7a3320dac7eb91756b9dd6097491379d4b5f8c6bc24121aad57277fa51f50ae89f22d9dc9d223af88eba0414e6665d00274b9bad8516e98981f3943cf9f0d5ccd0cb9df2c1bbb01af7f312d39b6a2b77ad3fdfe5b75e2db5139f541b6ef6177bdc029b9b94d8148051116cdf15b15e4cb7","pkEm":"0401f2f000a0f0c8f55165ab573f9a106624fc88d382d6494ed83c3528d54e6b196cec236f50dc3bf5494f9608c6b32c779c93ea09b8a8e98ced30c049a0d456110f0a01bfeeb699e936744895981e14e53b93525366342072c6fbd6be589fb487d2adedd5f02beda4f907b0c81508568db3a072125a984e2445a47bb7f95af42c6919bd63","enc":"0401f2f000a0f0c8f55165ab573f9a106624fc88d382d6494ed83c3528d54e6b196cec236f50dc3bf5494f9608c6b32c779c93ea09b8a8e98ced30c049a0d456110f0a01bfeeb699e936744895981e14e53b93525366342072c6fbd6be589fb487d2adedd5f02beda4f907b0c81508568db3a072125a984e2445a47bb7f95af42c6919bd63","shared_secret":"7eebcf4193afaa25997bf5cb158e618945a6f2fb808c916e74dde681e7b309798186c05c4da217e8605172b85136e466157ef1abde77b9c4a327f8eb20871a13","key_schedule_context":"02f561da04cd85ee1cc244a2dc01c448761ef6adc50c3278bd9685a8441a52e99ebf93bd8606a1106f8e6cc040b9d01d47da6ed1171e402d7ed278e376d5efe4eb1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"556450381e562042cf3c3aa5c798c14f237a4c7b6eefdf5052616d551147254994ca8a0dbed6cd1026bd81f51b541a57f6dcbc9970eac3737a5521ae916105cd","key":"33b930a97ed702582652678cea425f01","nonce":"facfc3de1d3d16654a3646c6","exporter_secret":"0d137a52999ac3666f1260c7520c55b63ee269938176f5f1cf9cd7c8ac63ccc150302650cbcfbdfa28376f32d2a368c2a86b52cf5306e2c7c0193d9412dd2ed4","encryptions":[{"aad":"436f756e742d30","ciphertext":"b0e7997abd962aa9bf94b591977fac084fc773faf6706e55de1d783df2bdc94ed9c5bccbb32c5b8bda4a30271f","nonce":"facfc3de1d3d16654a3646c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"d60872b9ca21813c413bfe4c5a0f6b1237ec032e095b48ae4c53ff7ef822a0c339f2207548fc7874b6e038bc22","nonce":"facfc3de1d3d16654a3646c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"3aa0b0bc285783a79ac039f7f21dd40e078e71a5dc65616833d47c67025aac87030ab57d6d198103c9767a5e63","nonce":"facfc3de1d3d16654a3646c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"1bfb77fcd19be061e7802f4db64b23229df599fa6a515b7bb07a444e821c75b3e142f6cf2bb3da3f66a908e70f","nonce":"facfc3de1d3d16654a3646c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"1d7f887bd329bb672cba847a04b45d9dfedefbd5555e1c116343b2e0afc7f495412c798b16912c9e58bbfefdd7","nonce":"facfc3de1d3d16654a3646c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"41442da017b36a9c27f3f06fedcb3d09014cc9d411dca7c7d95d38406057676d7ae198e422b1ab7bbe2786126c","nonce":"facfc3de1d3d16654a3646c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"0614ec3de689aaefca79907eaacc7aa72b602ca54b8c266457f81d33f4e34011fdb6885c6d5a9f9e8cbc83ca4b","nonce":"facfc3de1d3d16654a3646c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"4881ac5eebbc3c3629c6490daeb84b9f491fa1e7cbc47655fdc77449ab58af5bb26d7fab74aa5f8358d1b06adc","nonce":"facfc3de1d3d16654a3646c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"cd9e88cc5d93e37ee8fe1569f9a7d576be109004b72b8568fe71bfb213ec8ec9d1c1069ae5ed64c23e35077aea","nonce":"facfc3de1d3d16654a3646ce","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"ebaec62cd84c54ce100614621c44d3dd6c468e0bea80d162ae1153f0b59e18f193b09351e02c0f0d1d160cfad7","nonce":"facfc3de1d3d16654a3646cf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"917098cb566a31bf5d25f2e6269eb678ca48be094bc8cbd92e18550297e60770"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"b059929a24d13f83539cd5af3a533ece04c23bc3339903d82a20532ce7c52fc2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"73e244eedc6a760ac563d8391ebdea1e6cc20bc5d952507a6400033e466c6e2f"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"52c8a927b91539056071eeeed79b5dbf79c2d15a9da094783ab0d396747f3ee8"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"7af7616f6537a45510b6aadb25ddbedb93d4b50a2481b2234d6d99af5bb8ef53"}]},{"mode":3,"kem_id":18,"kdf_id":3,"aead_id":1,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"5f06de72f05e73706e8a0c98f85fc6eff3f2e7ef9498ce1eaa6d3f936acfe82c5fc290cbcc414e014b4be2a4ee14d9967478598a1f64e712f4e68d67aaf41fd3aa51","seedS":"e9e6cc24a272adf73292ff3deb5afd8f0576bd0e54293dd34c73654afc74ba8ffa938e79258f97149301c8ddd7509faece4c13a9e89e78080dca3ac7b1dcc8ff5e93","seedE":"3143ae589ae5aeba6d954c33f01508bf410e8d500dc725a1ae36f0ccb2dee83dbaac4bfb1d0b3ba9af13bc3efe2c1ae1a005baf6cab683a19dbb9e33f2d802d04b5b","skRm":"00a3cbfe527a1e2fac8868d81ef28da38bc6022f9b93b9051161a78843f7422640ac23517f9551a096ea34314f25d07d80a984fd406d67aca47af9a7233cc5c6fa23","skSm":"019fe5b5e3a47133f61a5cb9ee15af83729fa7acb14b4983a4ce679e3710c2686047faed72952b16ada67cb1526a9df8d7807873f35e1277e61f6d5b42dc70d28b41","skEm":"00a6c4acc257c589de087e2430f41abf81285a61e2193f32b2acb7d1a225ddb56436ad5808dee4f233b564a1a8bacc2d4468ebe4f969dea5604dec1acd294e95d84a","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04002bfbf7302ff541cd8b01e27038fbe6f35f74bcba2944b68bf53cfa2ae74e0d365e175dd7b8818f057e9b4e9f1b387e708e7f8e7c0d89b95b6fe192e6d293a98dad0158317ad685e12a1ad93a7bd16997ec7c1632f2ceb56418fd942dc28d0ddf5ff77cf6b24f8c831e2048091389906034e53433fb4a50c01f3efb24da8c73e3fbd737","pkSm":"0401ccf22f46a74a949572e124e87c59a519cce79d40ecafa70684931164ffed6f7651bd08c3a6ff4a933665675a65fb4c212c6e24d3d7b6ac4e4c75377755f54b2b1100a2ead01cfc0d0ca9a1d9e563ceb44aaacfb2d3e8d7ec39831bd947631795bcce06e6e89dd0d81e69c967921685fb342e84e9caf09bdefb39189d2b5537f67e0b84","pkEm":"040057beff01b9625020fc4faa6a54260b73bc4b39636f3e79b2b20cbe094de634831fa88897dfca7456ab05106f72a011efe5a2d72de2ff713924419de7398475130000a589e352cf39ccc5208172c0c720a3c93d71078d5f643b5e2a5d92de1c2c512083204e1826f46bb1aac4f03854f35f45740c240d20120a53898b330fe967721a17","enc":"040057beff01b9625020fc4faa6a54260b73bc4b39636f3e79b2b20cbe094de634831fa88897dfca7456ab05106f72a011efe5a2d72de2ff713924419de7398475130000a589e352cf39ccc5208172c0c720a3c93d71078d5f643b5e2a5d92de1c2c512083204e1826f46bb1aac4f03854f35f45740c240d20120a53898b330fe967721a17","shared_secret":"b77f09c6b711384291a1a4822d9fd5864a08c968902ffe63835878b35335075c257a4863a6a8d6ad6067adfb545050837fb8a19d03ad691cb0cfd7f76d03500c","key_schedule_context":"03b12ec5b1b0cb71c610512ec14f972d365f2160aafbf38da681bf7d9ce9befd8ccbc47c51d6f0ffb420ccd4dafa49d39b3feeb93fbfe58bb91585669799e10f0a1589804341ddc17e93c29ce4a87139233f08c3224ae89b29e6989ec29c21ba8abc3cbf74cd2fe282dfaa23b36f5d563cb69b09074729c5f23d751098c2807767","secret":"6cd564b9a65e237c91771af7a9da548440d0bc9f22f36f72d40a7f9433753548bfbc2e2da1179ac84af405f13b55a68bf2d720b5076de09d38846f1b42640ffc","key":"18f593f0aff921f7f58f50474601eb10","nonce":"b8113a6f9ee5cf29ba88dfd5","exporter_secret":"d15f9c13268af889d0694705c3f98dbd541ce2c33735555a7abd5547251c11c19a44e5ad0e382b704e45f8e58584a8511f6a1df44d2861b3550cf43b7e2d838f","encryptions":[{"aad":"436f756e742d30","ciphertext":"dbabe86a5bdca936147e45a05d744207bf45f1ef4aabab4ff9b6c72fd41190649ec1ebda705b0cd012a0ba28ee","nonce":"b8113a6f9ee5cf29ba88dfd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"bee4c779624a07eef5ae46e427a39c89f249c2564be98ce87c99c25be66729f939cb3c6bf17587a15d381d7f1f","nonce":"b8113a6f9ee5cf29ba88dfd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"63124a0efcdecc80a4e202d1865b2b88e67e86a14e875117a40821a02203aa32593bc7ff792aca4ec3b31977cd","nonce":"b8113a6f9ee5cf29ba88dfd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"4609212683526d757aeee1bb91eaeb147457dc83ec4d49304a2128a57694f589a9219bfa95c4395a3f282f3983","nonce":"b8113a6f9ee5cf29ba88dfd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"521e5eaef4eb073913249a3cc330631c0e05e56e190e3e837f5415a91c6571e7b96e86ca0a7d414296a393801f","nonce":"b8113a6f9ee5cf29ba88dfd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"68b48f40a6425413b71fdddb8a9411d65a579f40d1025e594aba227056f2c2f2765736952e8f570ba90ca17420","nonce":"b8113a6f9ee5cf29ba88dfd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"24202e80f83b5ceaa09e7006a4517d6d31e58a190f6e7495c1ba9b1a3af5c93e67524aa778a88405af41eb04e9","nonce":"b8113a6f9ee5cf29ba88dfd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"bfa1b2d7332caa15cdbadc9703cd198f48e9d8cbca96a3e9124f024246ce2de93fb1f4ccc0542beea62f68ffa7","nonce":"b8113a6f9ee5cf29ba88dfd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"e963bb2fbb4bbfde98c59d6544d04f38e8fb33a871325761ec31a6863b84f499c41566cf5fe54725e690c90508","nonce":"b8113a6f9ee5cf29ba88dfdd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"a7b89f43a4bac6ec41c1abd9126455e9472ad34bc98692a2dafc4616891be6ea89cc60959e9a505fa17ceabd44","nonce":"b8113a6f9ee5cf29ba88dfdc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"163809810a5d97564de6f9e58e59804053a5f6001e6b318cca4f9f0b895d1619"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"df744c018202efe80a2a97a4a4a58e95ef3d80cda9cf3f9cee61b0612100010e"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"bf52deb8e2c0958063e38589edd21ce547a71299662ebb96aeab7beb85e291e6"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"8429381f0b65b4f13481516c4d1387e2e23927a95cd2a16a58b0dfdd1a3c2fc8"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"a47e3e0cc975fda3d6b3bc65a9cf5baf7291125f3b26f5d288fdb78f24fbfb91"}]},{"mode":0,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"62641514bccd2858f3d6513305288d6ca0e443f00a86eb33ccd519d1803aebc5d07bbad0e1013ce61d9c9d713b3c90c8e79a1af01d6c69750f67cbbd1d9d4afeedfa","seedE":"1ed3768f499b5b3c2beda3166528b649d4b117a0bd450f0e9e19815c2597d1777ac67ea367415fb28c8819c94b383a0a8a15c9f03b4835330e3e6c8bc8319202e473","skRm":"009f662259723e2774e0ef4ef1fc57dffcf7f96fee05ee32b8534983f25daab861fce9ac5dc0cccd3d346a58963e57653048f933f9c884c74f776bcd57e6669c9a86","skEm":"00c028f97f53e7609c4f9478841b29c0d009abea13d12f4d558f57b78fa6193faafdf15ce03572ea2330510020e9bdd2d94c1d461d1af9e8f2b2f1e7c6dbeddec850","pkRm":"0400dc5973e5ab5a417e82c8115abdf28a78ea32a397cf067b9e783ebff9182d1e3bcb32aeb9ce74ababd634678a6fe716ff15f6135e8ee7b43f46364198ac03c4504301056de893c64abc7314b877dc699db98be5cbf07b12e0c141578e0aeba9911045f193511f074b4f6036dcd5826515dd4aaab522c4a7f44bced319e9583bc118d14c","pkEm":"04000fe222a93e988f2b890bf98345fdd3c08724631091dfbd8c3572a91e2fc8bd878f1537852bffdaaf55e168cfa4511445c390a705bf322ded61f4bf7e5a9f69248101acb73eb821bf6c757ab35286af062fa59f614e319c7eb62a1423c84c86eba1ae8d65280fd69916ff758825e2944c2df3242b3f6b110da559bf20919431cab76cfa","enc":"04000fe222a93e988f2b890bf98345fdd3c08724631091dfbd8c3572a91e2fc8bd878f1537852bffdaaf55e168cfa4511445c390a705bf322ded61f4bf7e5a9f69248101acb73eb821bf6c757ab35286af062fa59f614e319c7eb62a1423c84c86eba1ae8d65280fd69916ff758825e2944c2df3242b3f6b110da559bf20919431cab76cfa","shared_secret":"836dec8ee53432fe6135a364858d61a256848874d645c286d454411eefde448bc7654cf506bf1e4ab3dd43f5d9baeb05b24e2ee6b3591b5136432ff747c71722","key_schedule_context":"005c0b2bdbbffbea1af82c95fa5560defe4ba0a05fd3c301cdfab3bbc2fba9783d13d14ecba2cdc7a7c1f544087eb5b3a22ca199e34879b2bbeab3d644cb2a005dd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"71529ceee3d8881f66363e99cd1bade88b2ea7b8c19363fc0e093bb92b961c31d61e9147aeed52bc81be1e4f5ce18bb758a97dc54030e63ce37d3a92860328d6","key":"80358d48c8324176a44632f90c826a6bbfe7b2126f9ee47eca65f58faee8946f","nonce":"7502fc65d8e5db6fd14285c5","exporter_secret":"d876060f03e1ba934c3e3c93416e91888b0a02614f8c5a27d24f3112754c4d654bbc04fd54c1aa052c5dd81358362ecea1c15e20c9cebaa5393e52da73d4f611","encryptions":[{"aad":"436f756e742d30","ciphertext":"ba38cbcd619868b4e993b7757cf8449aeab47d07741a62ec8b3fa72c136b7e5f6c11ee2faceea367f4126181ca","nonce":"7502fc65d8e5db6fd14285c5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a97932db8c889e85e844b1b8fc75fb3a21e25569bcfacc74ce47287eb35b59372f0e6c1762446674aec9469774","nonce":"7502fc65d8e5db6fd14285c4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"dffe364d097f06751044647b5b992a834414c0d629b25f9db8e0bde6687e26f73cd7f77078bd9d677a4e3555ed","nonce":"7502fc65d8e5db6fd14285c7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"820b741ad9f16c1e434fffb94ff55b6ec7f4063367e4c449bccc1529f758f67f6432a9e935e42196f810116f4c","nonce":"7502fc65d8e5db6fd14285c6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e48c2e05ec38338e78a2ed2473a6052006f474957d9ff98ff26c07d51418bda9bebb572b6a46bdb8367a65595c","nonce":"7502fc65d8e5db6fd14285c1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e06d29c5648f88176dde24501610a8f51438d6af6d3e4c84d73906987aa918d8a2b69876c748eab826e603f1b6","nonce":"7502fc65d8e5db6fd14285c0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"9a7ade7c34c2c2c48dfa117a6618e76eabb8fbfe0bfd5fc91dd7c1fa849a3ee95e37026de1cb8120db1a8fdb6f","nonce":"7502fc65d8e5db6fd14285c3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f7c76b6fd22f90d58f43c67da7a9d8ab7ccf53e7f9d586308d5c64cdc268358df5e1a6a44c8a7c611018b9ca7a","nonce":"7502fc65d8e5db6fd14285c2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"8d4fca01e27ed84720bfa1ef4cd2ae8df59e0fc41593d68de060ea1e765edd03667ccab3f3ca3a05339196a21c","nonce":"7502fc65d8e5db6fd14285cd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"1abf19cdb9f0cfb71e23569c2a36f283a542a228ac95893e7ee5782cde5c82beb8102ed924f6d0667bcef7d678","nonce":"7502fc65d8e5db6fd14285cc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"25165e98cacc80b167e37a1051b2f3e2c22140959dfe2a9493625e83c9be9f15"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"f9b5c7fece670b2d8f0bc6337ead2815e00ef98108ceaf47a42d81f5b180c1d2"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"2c2716e716318f538e2fe72a5578051588efb8948d12082e9611477b511afdb5"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"09ed503d557c02ffc00ba7a86a57506fb967622c17fc6a5b9109135fd6ccbbb0"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"62daccd56fa57ed1dd1998088eef0f20a7272d422a664f31c3b9ee3a7f1ec185"}]},{"mode":1,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"41b782c18c14986c9d7a636152f13677aeddf479c1c7791ea46e0ebbe35ca9dd524c23d730eef443741d7d965415833d6c549c8c1b31ad05f2b9a88f916b2930528e","seedE":"64463def238f309f1e9d1f28c15dc126cffa4ded911a4c527eeb71ba593847fb405756239d2c694ce4effa3996cafb5cc0b3736dd988deb7289210ec92bf6b339302","skRm":"0002be614bf40b361548a5a881d5fdb4b5b1bff90bbc5cffb0eeccbf9163076881edc46eb7944623d900868e532b9b1d5eddb47cabf4579a11793193eeecaa5a788d","skEm":"00a173fbc49ecb270b4fa1ab823cc457f1e1e0dbeadf9b481b824099300fe6c11e0329dd0b82894881a9c57209ad5a47d37172283e8af39c6d41de867a7e16c87bbd","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0401dde7fc00593a91eaee630e84d8cc9cc07c5392f779d28c82784b5cfc38fe916f28351dc8857404fcd81a5c317eb82e18ff3ef0fbe87f49db936f6a6c0870c4943401f31ed2fe9192f09f8806441675180b8cd8ab335dfe855acfabbd86e60fa5a08e4e4faab1271e4530ba61dfece5332f55fd14efa2172b8cc4670415a37fd9587dee","pkEm":"040041d3923b7218cf378f7336712e2ab1d254a2e7b0e67b85ccd149f68115e9d1ed4492f5542923586feecf2e5500be432e181e73bbcf87947914ba760ab1216e62f80067e0e0899fbc87ffcf0b2e7556f4bac9395aa3e284f73323c87ab3e5bb8409e2b85ed657170aacad0d83cd8ea71dee1b480634f818383d75899c877d3fa263fe49","enc":"040041d3923b7218cf378f7336712e2ab1d254a2e7b0e67b85ccd149f68115e9d1ed4492f5542923586feecf2e5500be432e181e73bbcf87947914ba760ab1216e62f80067e0e0899fbc87ffcf0b2e7556f4bac9395aa3e284f73323c87ab3e5bb8409e2b85ed657170aacad0d83cd8ea71dee1b480634f818383d75899c877d3fa263fe49","shared_secret":"8fb618ff94fca65c1bb2183b5683bbefd0aefe66d1610e0d1623c8b3d00c2fb5feba21b1050d7752ad1f0b52250624881902f3d5156b4b3c454aaee2b2b20a89","key_schedule_context":"017344e204124da2a856fc5693999bbfd1242c27f4b2f16fdc92751d458fbb606adde7aecc32db4dd5b0fdbea7655c7c0e8363da1a34370ba59bfdb42108a4bebbd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"edfc1907ed7d5006b7e821f9802b49192ebd40dad26bb9ebc20192bfc4e6319f22dd9950d51fe7c07c48739ff424509b056acf2a2acb655b59999626b91741b8","key":"6fb2ffb368d1d76a743b9e51d8293d0960810936399fb51dcffe83ddf14c6271","nonce":"ba6d3b6c7435583230a60d86","exporter_secret":"1926473db83cdccbfc308c0a286b0e248c2d2cda275c6c511f50d64768d483229f24f770271cdb01096bdcb15c8269ef5e80e592998fb43c93ea3b8c0e1e46d2","encryptions":[{"aad":"436f756e742d30","ciphertext":"264cd2ede05a9ab1527a01508fd537afe67b6c6f89d5a09e9e28bb3e0a52c61a174f9ae71681f548ec44b38ccd","nonce":"ba6d3b6c7435583230a60d86","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"4b439bc9afa3ce832cbda50c31b549fcab63a7ffd040907e1fdc5200e01d5d0ba4b4349eda9c135d4b1a39da7d","nonce":"ba6d3b6c7435583230a60d87","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"b8bf1321fa9d670cd0fea9c59ca8a88583f793a27633a8ab5b026e3309b7861d98c1546ee4205621da2d5899c0","nonce":"ba6d3b6c7435583230a60d84","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"3816786f0f619b1ba80c0046a155638b616fe90d2c33fd4229299a0b01d7b632d9ae77da1bae05d6c0b8fc1342","nonce":"ba6d3b6c7435583230a60d85","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"84a1574168983ccb5b52a5e0b522f04cf5283bd6e818e0f4c3b165e179ad899e34f8675aea5b905605f10cfb15","nonce":"ba6d3b6c7435583230a60d82","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"cf2f3b487370c15dea92ced3d5a5829fea7c539eb4583dbd61b090b2e0b55efe9a93b1e14aacbd3a278d39d272","nonce":"ba6d3b6c7435583230a60d83","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"e26984b3cb713bc5061ec0bf7c9b9ce27e95a1f7c19d027179744aae3788c65d6695ce92148e055369c6094d1d","nonce":"ba6d3b6c7435583230a60d80","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"d51df949ac4584f4428fbf5b391b5e910336401264d7be5366da4818b17e781a960d67f537218969947fe6aee8","nonce":"ba6d3b6c7435583230a60d81","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"7a75a9427db2b5692723ac6e7230ab12f4f477ede1322f28ccc58a6e0cbcd8b6583785b5b20b1211f718882a14","nonce":"ba6d3b6c7435583230a60d8e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"c7c2153eebbb2fbdc0f22fff28a5981e548f2007e8dea3e65eb4b0f5f91b7da603b872d17ef2d14f3229576c50","nonce":"ba6d3b6c7435583230a60d8f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1e22305088a733da436e9f34981bf02bc5387c585709050f1d793f92b21dface"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"2c885f289aeef95d8305a401869704320046283bd42c9c827a53c777e97cf9ea"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"c725f067eee0973e37641b9eb160a48ec0b38206b392ddad62366b6c778e6543"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"34e07d6e42b66f2e8151ea3b18ec883116ad69caba9befd7eb15af3595820896"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"363a041e5cd48d14546e9cf1cdc0e07ae84cf4ce92c343a7cfbf2900ba6817e0"}]},{"mode":2,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"54af23ea93c8fc34deb6a7cd70e657ea8990fc4e9a18656d5764b62f7a33a9e0212adeae1585ad2ef28688c1b558866c1975973c4dff08955c1f9fd7939b10b5fbfc","seedS":"b65599d814192278ab826ef197a61b77db50f40495f77502dfaa03acd1f3565a3cefebd59de2328ece0638c90d8a89f9ca58f2850e39e9a4c9c339290d66da12fdf0","seedE":"81dc51e31ef8e9b33fefcdf00bd3b0ff585b941fe76cf39a86c269e2f53be7edb3db0be1a58b6cb8d8e6020fe8a2018c59d47cacb35b2b8c61bd4155438b5eda5c0d","skRm":"018c4d39ce0fe30e708136c80fb507b12db90d248da5c823afcf27ecd9b103d965181d870c873c1c221f7e69409b65591acc8ed470576ad76daccdc24cb80ef77ef9","skSm":"00fdac1340626d9d6510afb50ebb7ce865bcce98d33325f30f3cd354e5950f2a905ead357966a2ac549f4756f07fff3c6ed70d5dda8ffd325f0bd5a3582910aef18d","skEm":"01f1407a3723aa7c17931bf192ff7956c82d80f54db79d4576f82b69249df8009f699718e82c77b961cc9d040ff1d9272ff97d2ba2a6c92876950e897e3b5f0f2c05","pkRm":"0401205c8f7f686f4c76e9c4c4915fb8bdfac4003cd9ccb92b885f3b8fbd9f846e47c32c6beedab8fc0643f8fb6345b3d9f75e651c0c9477970dfc688f6c869629650400868296e95f404533db84ad8f2e282218c9588c25e94d5b818dc54f1a5659c36b3c60c95405af87d6b2684bd02ec6462c7802a52524d8886c9e1c7ffa8de9d75680","pkSm":"0401686163e4e2bdbb7d476a3668343270457beaea97a008d943eaa767bf4898ab97c01c16f9312efd77572ee9e958bacd6dbca1c8ed8de22c165a084ad7ea0360fa3b004d33b20332bd85bc9c2b772ed56b40ebe5ce72a01b6a481f591097cd13e6ecfac471586bdd49805ac94ba351d5c5bee6ec66d4b599d1d123ee7b3463c5901b3434","pkEm":"0400c708757d53d8a1ac555426d660014fefab2676fcebf62d7589339f24a0f632e51da9e1b13631f461a48753b756c3322032cc27b32cea63cfefadba56952d7ae35c0166b63cc1e329938a33728a2ef6fce3372589da2b9bcc80ae007dee3e084b1656349f15145905689ef920807ff239f94891b22057385c7b97ea517b1ab21bf5fec8","enc":"0400c708757d53d8a1ac555426d660014fefab2676fcebf62d7589339f24a0f632e51da9e1b13631f461a48753b756c3322032cc27b32cea63cfefadba56952d7ae35c0166b63cc1e329938a33728a2ef6fce3372589da2b9bcc80ae007dee3e084b1656349f15145905689ef920807ff239f94891b22057385c7b97ea517b1ab21bf5fec8","shared_secret":"7258e75f7c2a8ded295523a7b99c1045925dca1628a91bdca9a2e1bdcc187eee3b627f2ab6a73853c8dcb13a95d0980585c21c25cf92b7c9d945430dfc47e690","key_schedule_context":"025c0b2bdbbffbea1af82c95fa5560defe4ba0a05fd3c301cdfab3bbc2fba9783d13d14ecba2cdc7a7c1f544087eb5b3a22ca199e34879b2bbeab3d644cb2a005dd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"dc6a1631b3fbc9d6b6b856d60738cefe1743cfc14d1ae0627b38386b9abc9b2f86dde080bb6b9d7c3eb579d6bf599765cb4a5e27cd134703acc06142901164c9","key":"eedfdbacc250f004a9a4027184a95388f9ebf86ce9593c81921da9eef5d9f6e9","nonce":"8c1fb99aa9cca28b2a1ac3ec","exporter_secret":"1f64d525bc6f36488c46c0650b6f0c10a887e0e300737a2c167e4ffd1b4d91193750fcf26173f0c8924f6a86b01fac3f6753d4e9f91abd92b042ae3218d7f45e","encryptions":[{"aad":"436f756e742d30","ciphertext":"1f4da6829a7336ec414ffeebec31807dd1acb2ec248b165b5d29732dd0057fa76be483b9af01437b32ebe6c061","nonce":"8c1fb99aa9cca28b2a1ac3ec","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"168714b29e7f1c3a91dffdb6cc576b7be34ef929b7ccd598435c4ef1af52c5d7ddbe43f51ac50b27bbf9ce0e73","nonce":"8c1fb99aa9cca28b2a1ac3ed","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"639d9f6c9ca75d91fff8d4a9b0608d10db800fe6a1ed208a09fb907f70a327c61414a20e4910a54f12f2ada7a6","nonce":"8c1fb99aa9cca28b2a1ac3ee","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"8f90fa8fcb29c639026f1f56a6ac3926a0a00f683ae8ef41d96dcb1227b67a3e95293864d68e3db50cd027d3d5","nonce":"8c1fb99aa9cca28b2a1ac3ef","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"e325abd75e86991abc1ba269fef64c5ccb3a5c1636f4c8e026205ad45470cae1771d9a5c87a3a21af1d6b89cc0","nonce":"8c1fb99aa9cca28b2a1ac3e8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"e1a27236cb42c406eba76558911566feb7599ed953f9a90949a26a2f58eb1b3c3271fa839c30fb94e25a50b98c","nonce":"8c1fb99aa9cca28b2a1ac3e9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2c4b97f2267c0cdae0dca989a4e2dc273742938c0a512839e4ead5c27c6c37941f181b6ab9492abedaf1139f73","nonce":"8c1fb99aa9cca28b2a1ac3ea","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"f47cb2016143f9c989a456f608c79fb482eb2100c7df02961f51db7a52095560e12fb2014838a44ae3bb714ebd","nonce":"8c1fb99aa9cca28b2a1ac3eb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5a0ecf0fba2d379a909080d947a2396541c7cbe17b129197a00d3bf8ada54e042de1b9ea7fac92ad212ea44507","nonce":"8c1fb99aa9cca28b2a1ac3e4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"923b8cd6aaa17919dc2a7781aed4683be667d0e1d3813e87ec1cdf1e3831ff4048200f86feaac65c905fadd5f8","nonce":"8c1fb99aa9cca28b2a1ac3e5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"7a96638a8687bc888f4b0d085684dc250e8e6f8781d3f9529863cddda962f26f"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"647aafb6c2ef4fed30aca20558f1c3d20adb5b113ddfdd9ddc382226ddad88d6"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0c1623f289d451b5c9409ff9c249ebf93b6f60f7b26220d8f440d34b3d953b77"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"dad5bda5c3f44c7bc916083e5cabf83d236ebfc11969bd12f9749f6343cf37a7"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"5aa4b65d67adeb2bd6c61d69dd1d9f034a5081c6775ef18ce0e55f5047690937"}]},{"mode":3,"kem_id":18,"kdf_id":3,"aead_id":2,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"46592c2b171b8cdcce89601fab103f63ed43badadcf9df62a928ae3b7fa91f269eff3485f6401c374e19a8bb988005626b9c26d39795282b1095bcc4f62a67255e15","seedS":"d02446c344c10cd162486caa69aa1156ac3066e0fd668fa7faaf13bdbc944edbc0cd68ee36e4c30ecc36c2c5ab0978473eb1b5dcfff27985c9328877e85fd48b657d","seedE":"dc1fda9b21a1af6925ecf9ad79d2422f698b4168587c7908b36f5f58352181b9506554d8d8c9427e0dd2cfda25f0eabf58e9f5597e1b76ac12c799fe96e3cc03dc59","skRm":"0060669f64320d18ab930d3d8445d08c60cc160c7f6fec3cf00c0d4fd2683c78a4fd379e764717e8c15d5ec65cf35c333113c8441249d17f61d476b55cea893b54ac","skSm":"01e1aac5ee87bf982e74faf7a452e9336084472898bfb9a5e38b3e6bea42e5cf8b8dae5a81e0de94d01a27f3f519d7bf5fa2fb6210cc704090062c230eff8ab45395","skEm":"01cd84ef7d3c0d780d48e74460dfdd6c8af9e7658c5fed7a9e5b24c77cfba485ae985ea0f12bdf7d71a30842a56f0eeab035c6154d0676ef83d7ff189aba3581c8ea","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"0400a45f815c40cb61ab387708fb38cb3283dde4750bec539d124ce268ea991554fca7ace0d096ca2607c4f9d53e19a45b25415f4eef39ed601a43ca15b2de81b91d1e00f2a93bbc4c2ece7841e67916d23f5582bc0930bb8a22c8401b7402511b93a28887ecd81ca17ae2a3cc11e9e9663ee1385e8f245d4a1720bcd8334faee88ddb849a","pkSm":"0400a7b0299c29e52f560b84c357c5b3b379a3f32b1f5f2c48c89fe88c655f28e980dc6deab743cca6a12eaaa1df826f25d17c5eb8fcda8d6ca207153a24108f59c675013edf7d12d93f82de1e1a47d1fb27d082f3dc1ca605792b11171c8e0815f8c9f575e7fc0bbcf6108a0326fa5fdf713282ba60196d6524ead737d512e3b1c0e94c69","pkEm":"04007abb917b25112c8bf9a75233c90e0f55a4b6cd4f52a9f8a8856e85f82bbd84ac0d1941f01aab2c7846e6b562c0f5168727f4443acb84249f357d591f7bef8651d2019e0f9ef53c20a74f6cc9e6080e792877201ec7d4fb5fa22e184d1d848314811a3d110112172bc802805ef7405dc0fac4f5f401865f0410c05d172524a71039963e","enc":"04007abb917b25112c8bf9a75233c90e0f55a4b6cd4f52a9f8a8856e85f82bbd84ac0d1941f01aab2c7846e6b562c0f5168727f4443acb84249f357d591f7bef8651d2019e0f9ef53c20a74f6cc9e6080e792877201ec7d4fb5fa22e184d1d848314811a3d110112172bc802805ef7405dc0fac4f5f401865f0410c05d172524a71039963e","shared_secret":"82913b51b3809a9177ab90ca628e661126d8b64ca95739f6172b93ff511ccc0b7b6255dd9bc17d692b598acd10c1a3b86fb242554824f06df693f75c5d2935d6","key_schedule_context":"037344e204124da2a856fc5693999bbfd1242c27f4b2f16fdc92751d458fbb606adde7aecc32db4dd5b0fdbea7655c7c0e8363da1a34370ba59bfdb42108a4bebbd8854451600d718851b126f132b5ea0cf6942b64e7e586a7f8877bbcc281c8f6c005e9d1c201fa65882d2162ed577741da4aed5c33fa050d83feb94a4e88638c","secret":"fd3c39728bad99fcb7c2430841690994f624a2bcfaba38affe3596b651bae01ccd0b7b1c9fbf10de0fddb9ec06bfc9dfcd0c1fcdb2cbfee6e27e4a653bc24344","key":"7262c38cfa0c8f468160fb1530579d53c433559a58bc1acf1facf5231bdbc7cf","nonce":"65560e6c300fd5a0a7dba420","exporter_secret":"58a7173f251e03619d615542539e40c9bf480f96efd02621621106296dbff95aff003971cafb9265d92ba3d7fbf67283c40364f7def04cd4d6429c015172e76e","encryptions":[{"aad":"436f756e742d30","ciphertext":"e0d4d9b38eb8b8dc1f2c986005a83b7df5bde76d48c95dd59bd60456639a82feb3ea3205b6fce5e672fad9c73d","nonce":"65560e6c300fd5a0a7dba420","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"a905aa5e9c23600c8bdd8c45b2bdd3352727175c565d4d60b7e4d7083b10fe26afde4ccdab36726e6e0c26d78f","nonce":"65560e6c300fd5a0a7dba421","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f8d5733f3b2e850176ae68f998268125662161b4edf86752a80b70ec03762dcbb8508c495852fc313cbca8e065","nonce":"65560e6c300fd5a0a7dba422","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"800f11fa1dc970978fab07a6a4fbd9101239fbbc931167373fd2ee5129cff5e1db3ae36d9596ce9476ec2a925a","nonce":"65560e6c300fd5a0a7dba423","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"644ce2fe731274c00b455a25e7a733032dd2916d25a4a39d28a89f3f5282b12b20afde48860ea31f187c4c4ecd","nonce":"65560e6c300fd5a0a7dba424","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"3ef4ede51efec97da0af338e7f2c8a30885ee77c0a23cb33aaf9509118c97aa247bd40c0b0488ffdfc9411a77e","nonce":"65560e6c300fd5a0a7dba425","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"2214739cc80e0455e890177151f3395f79a2d19c121065e4e8f67ebcbb0c10d530e931327b1ca9fe506406d629","nonce":"65560e6c300fd5a0a7dba426","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"25d21a04b992960fcfc181ccc73d2106951c7ee6a6edbe8aa9de7d9f6104a16823e843fb30f02772689a01b3cc","nonce":"65560e6c300fd5a0a7dba427","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"a1e2f5eb982c4be137fd6deff6ca1f20241d79b1428cfe29502df25ba47d62e332ba396cf9dffe00ba694ef866","nonce":"65560e6c300fd5a0a7dba428","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"9be2404dce63045a15f601705f7d6caaac998e78462485474965b6c2c56eca046fe15b69b2e93288cbaced2bf5","nonce":"65560e6c300fd5a0a7dba429","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"1f80dacf98a15b2eff384c6aac4fd98dfe425968fa7d8ec76d2361da973acffa"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0eede8db2d45fbd3a3a4ad5ad47ffa593e57a9c6b165dfe1a4b3a179f6583276"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"0e32f7da3eaa86937d5c6564d1b478b498091b8d783f331b7574762c77f11081"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e658a561a3ddecdb7adc3357c553e55c3eef3ff9c8698979c59029d4c16dbbfc"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"3f2c9c7eae96e43cefbdfb5df2607a442a3dedb0bfa6c9a3b15bf7475dddcc6c"}]},{"mode":3,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"afe4407749e1accb6df86bda61cd7d61a0e295efcc9ddffab0ef8324fcf281d15ed770776017518bf16740c0ba6523eced924c525a676ef0dcafe60d38042fff7788","seedS":"03e44c22c38d193cda5d66a314d9f36605f3c3b155acde8fe56ed2261879ffd85bf395053af9f51d54f4684ec92d7208a95692ba920c9e96f8fc131dfff8a1dac71d","seedE":"f9991b4bc4ec5ef506e36eab43ef7422b068c5e66e2ce15c0d7bfe44ceff2a3807a87638d1a3797e8f774cdf681248589cc6894d1a64da8027666328a1c32165963a","skRm":"001b6f9d8b218e96132f6f51cbbebafca37d0cbb6ef517034ce41534c90ed4687c84beebc59e8065b30937970050053a3896a6367d65f444484133e7d86597ad48cb","skSm":"0069d82b87057772df7f75dc74e78896b3450f6b694022e670f7b813bb95f9b17c8ea57d07ee79f49510d5d479fabcee75c459ed730d50ea9e055b1fe2647026aa17","skEm":"01ba14a645f950d05dea697069be887b3bd90649c7f2877ef501f83ef231e6839e07428c1731200b44082a6f184ddb26fce2641d855bf66564470752033179570bff","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"040154dd6d80dcaf2bcfba96edb7e52550e41fe5d768729b5559dd77334d3ecde2b88c237f250e08184098445c3fc3596c47cdea9a2e0435f9ce472f199e5eeba3b7d100b5f6a6a55ca05a36dc544ed5cbc2b556f5e7149d11a8e7b6c5e85003118d2af94bbdd82050ece599ff29b4435da6acfb7ec3f364b8a95c577cc70a6a9a42d17c6e","pkSm":"0401367b19816b3d3a8c71cc53d2037793260a90e979ae9b4d3910e52b3cdda705dc29c4d63dfcfa0adeb2ce2827ffb52e6f0ba7d0c4aedabc68e6dd372368b8a88784014916cf8e23c8d529739d074dbe7045c81881f09dd163bbd7e9db6bcb82a45e0ef044ca181d709b7c325900e52984b82d4120d9886be387623bb9b82a4ba3537f0b","pkEm":"040011ba58eaa601f71289bcc8fa90bc70d35bcaf0d2f0afa02a3d0f4820cf70906fcf1274f2a1163081a85e81794e9fc285a57572d433189e8662fcf74f352e6c3df7010eb5612096b921e03eeb4b6bcf2a5abbc0d6dbf060d97f87628f19d97ec60a7524c28fdc0d0dbfc1765909bced9a10371abe96b47c55454ea9659bb139df6907b5","enc":"040011ba58eaa601f71289bcc8fa90bc70d35bcaf0d2f0afa02a3d0f4820cf70906fcf1274f2a1163081a85e81794e9fc285a57572d433189e8662fcf74f352e6c3df7010eb5612096b921e03eeb4b6bcf2a5abbc0d6dbf060d97f87628f19d97ec60a7524c28fdc0d0dbfc1765909bced9a10371abe96b47c55454ea9659bb139df6907b5","shared_secret":"5313dfd8b46f5749afe2457b166fe3da5ab5fd49b04fe5a13c3a23c9493320c3a32565d8fb4f8e31b0b9fb5ec81317238380a0d333afa4f243b43fe4d26626b7","key_schedule_context":"03ba90b638d5ae2c6488edc28f7abc5188a60b96c6e96367794c34759163a5ebee443d2f641d7a0594ce08b4f3653353ee089cc3091c939e8b6fe3eb4ff3748cb285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"3edfd3e7d221adb57d9f0c2c8005ea31e712b0d2fe21655555f9f22ba95e879669f3b634c76c21a9be38ac1965dece161a4d8cd3c63357b4f3b25e249eb5d453","key":"852e9e96c1324407fec8bfab71bcdd586984471dde8b1aa9695adb9e82b177cb","nonce":"b23012a7ee4c4dc0efa5615b","exporter_secret":"030d34aeff16f253db254d669d9a94917e098e1deb058e0c1e357868a015a76b249e8f5b339bfa9cf9cfc6844af2baffccffeeee9e64f3f912e7d738bc4c53b6","encryptions":[{"aad":"436f756e742d30","ciphertext":"c3987a07a677eaae164acf205dd188a613e6aad523b82c7d9f223fbf002ee21487a890d1df5c87f964320f6b4b","nonce":"b23012a7ee4c4dc0efa5615b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"91d2a397e07129db85c99852fa4341585ddf921d211a8f8d70b6352405210dbeb362b2dfb4d56e2c62ed5a82b3","nonce":"b23012a7ee4c4dc0efa5615a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"bc130311bc5d2987c83517797265572b43137ac317d826e59e5331a63bcea7db6081b7061ceaa8276baec39aff","nonce":"b23012a7ee4c4dc0efa56159","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"55bd00ea2b8183677a1d2dc4dbca2ab4ec2c4b39aa561113e87bccac91eba37d268c1f61b5fb2c711ea40ccd30","nonce":"b23012a7ee4c4dc0efa56158","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"a6cc3d0f30af2a46f60fff15b7cd5f256c31741085d4784a9da338f19696868495ab767f697969c476b835fff7","nonce":"b23012a7ee4c4dc0efa5615f","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"082507620a7c623154bb00c92ddf9a391e4d6c3684dfaf3f55a8c4286abc781f90f24409438f510f7d16dc5a28","nonce":"b23012a7ee4c4dc0efa5615e","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"62ac7e5c1a4a5ae2b17a8834b03c0ba2d6a8ef1fa3f83e8d11dc3cb489739ab793e69f0f8995b9ba74616f0328","nonce":"b23012a7ee4c4dc0efa5615d","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"0c99ad2a03da9cba99c0eb5f9a70d04d028c9467379a42751af7fb38d1aea8407e2db454abb0a3dc2f547ba0a3","nonce":"b23012a7ee4c4dc0efa5615c","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"647762eb26e1e1efd20eb602fd9566a0ae7a3bccbe21251cbcb8bf330b5fe10b5fa26ec765c6cda817a9b7f084","nonce":"b23012a7ee4c4dc0efa56153","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"49f0b0e212db9d73109d28b2be96309d7280d59f2e780014feea75ac0a64c4df83b00a592338ac0668e8d4c34e","nonce":"b23012a7ee4c4dc0efa56152","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"ac45b252413470b0d0187a96a64f3efd83fb804f27f3073d6175c34449c51380"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"57fd376cae557718624dc9ad46d56423e79c6d48566a0e7cd018323213a91b96"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"6f654552eb5ef7820273290de89195efd8e3a5ceb9f1a581fe7c0187015f12e8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"e30fc773747808c8be4968e9461e90467cc5d2026fb99851a64657128cca0e80"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"e00988474bc3c508f397e55d160eff3d3f01793c6b66e09ad0405500f8894d91"}]},{"mode":0,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"34f96d72455fff5cf5cbf7dc32ad32473cc48f407d156f17e946fa9f8ec8c244daeb885dc5f0307d1fbec88c964dadf4aa6e0acb7df5e371bbbdcd0f6703ab1e9df2","seedE":"23df8975e1b2996c05bd32bf4cbefafec98a1f9880cf877f05af5a077d976f2bce0af7eadb24359767878cbd60f0df4d40708e900cfa08f4855b67634f842f784656","skRm":"00e11b5ce02614d436787a07b371af522c16864645091df9d1c3c4bb50870dae5d3229dd0f3f3955bab7933454c6f9b958a1979da757c21e705bf56920842aeb4dc5","skEm":"00a135a1d72cc0d10d654641f9f8c6d0d666419f8eb97a6d288dc8b091f8d8c77de3dcd0ab4b340efd7f1bdf9f511f00b33b35d00c9d8d87c00192ea8ed4f137cdfa","pkRm":"04000f20a75c2c4797a2cffd54020cdbe8e8ffa975e3222323bf160e667db88b1deded22d9b8ef5e4401c86b5f293d353d6d28da03c06ed36e5c4759eccaa61b06b760010418a7e5ac5ebc270613fbc39dace37fd082c58680c7861be126627e45d99dea4311dd4075f0288eeebe090216d367c661478fb73f87b1bc7f34ad819e968fca67","pkEm":"0401e061860220dfd47ed6b2911ab27870e3d798fcf7c06328e446648c781f60d7c71389dbd1bdb41ce2bba456191c326e3c44bafcabd13b85bdb5b98438abadeca55b00fbe389412fe3d8770b72e6b096e5d1777de3b75cfbb8d920d9c2730a05f71490e295f8304177d37b9c021bcf9ab79b301f59c30f46efb50cb20f13a9090f7ec19a","enc":"0401e061860220dfd47ed6b2911ab27870e3d798fcf7c06328e446648c781f60d7c71389dbd1bdb41ce2bba456191c326e3c44bafcabd13b85bdb5b98438abadeca55b00fbe389412fe3d8770b72e6b096e5d1777de3b75cfbb8d920d9c2730a05f71490e295f8304177d37b9c021bcf9ab79b301f59c30f46efb50cb20f13a9090f7ec19a","shared_secret":"032c6f5a957f0f62c33d26c0204f79a0e68211f46c8b9e199383d19c91a33621032e423d9a0cc73688ea51eb63902e0f6f94738f2ed59fc5636863cafdf203fb","key_schedule_context":"000c4b4692570e10a3ccd0199ca48594d44ab05fdec28bbee21b8a7c0ba7c15b68cb32a4df5f9f6e4584454e9bc484777e35170a86e8efb50ff97fc9c192657bd285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"ab42a848d9780ae1931fb23bb04ffe56c48baa7c434bfac848c6e82086731d079a11bba87bff947a3045c9a695435c7e1b3e61c3dcf9ca52f9a64ec304771b83","key":"e35998471d57288d507acca857d1a54aac979b33a09970792d701750c5ce80e8","nonce":"b05eaaa142a6c099b1ca6bd5","exporter_secret":"087ab9bb45fc44ef31ad7613d1e6e23bff633cc62419b2a9a2fb85d758498c09339d6825f6050c022a8dadbcc6cbce8af6c3dcac5c0922643add9be37d650879","encryptions":[{"aad":"436f756e742d30","ciphertext":"f8e000cb5bf86633c9b5843fca18a9b76d8403b6e5b34b9d32e17b54bc8b3fd8e1a3e6d46bb77e183923f898eb","nonce":"b05eaaa142a6c099b1ca6bd5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"55277cc7058163d4a452475b799860918baf2d1abd39dc1cddafa7644a7f7f4531040573c4b28d51a843fb93c5","nonce":"b05eaaa142a6c099b1ca6bd4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"f0e236a160eb3099a54bd9442a00cceed874c3f8e978b4c8eb8d5d9422ea277f53d4c32e256c0319fe8ef811be","nonce":"b05eaaa142a6c099b1ca6bd7","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"36c6f570dc06af1942c2215c938e0492a3ca55454e178695b68988a6d0f048eb27243481c380e2b087f7b98746","nonce":"b05eaaa142a6c099b1ca6bd6","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"47937d634c694c2bc5dc129f63575bc8ffd124c74bcda217611ace1e85d0f2068502a07f8bf9e1b11b866902ee","nonce":"b05eaaa142a6c099b1ca6bd1","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"d255bbb6093c09dae581acecc9ad346ae6dd36434ab901049bac2c025f596001598db8916c4e18693947883f90","nonce":"b05eaaa142a6c099b1ca6bd0","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"eed848c4d26eeb0ff0d9efd83e58141ccbbad6aff02c0bf860cb1c72336ef675e0ab8344783da73c88d4800f20","nonce":"b05eaaa142a6c099b1ca6bd3","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"cb5c20d1933a689471c4b41dc0536f55c632ed5b813ed858698f48212182b46194a65fa3e45f0dc2c85e709f70","nonce":"b05eaaa142a6c099b1ca6bd2","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"b17bb76868696bea4d2f53b0093f3417ad7abb420b9b70136f0e410412760485daac2d6b8079048956c27339cf","nonce":"b05eaaa142a6c099b1ca6bdd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"0e018ba4f0e68609e0c25d1cbb60b76d3e82307a4082c2f84644ba057d4e30ffad17dd88ea84e6991e1bdbae56","nonce":"b05eaaa142a6c099b1ca6bdc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"08304ed9b5662626f17776984b6e436064cccd7e127d310500a7a5a1148bda62"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"d9284031c5313ba52af01c94610522c461b197ba5e41bdfd40715d3160b9ab6b"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"b237a77ff26dac6bc943e8c1591450ef14746d3e5c0cfdd992c83511639b639c"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"c65e387998306596a46ba5eec6de3656981a9109c04a61189872e7d024d19061"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"44b1e6f27a6c8a64eab67f38e9e05b3d9faea16b8ad15754017be8379f31c7df"}]},{"mode":1,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"06ce5eac5f1a343457310f980a85c98a025f7d347a4989f20b37d4490be06973e0e7387b354741bb8c68b0430b92d6c40d261a5133a9c4089b1ac330a0942b8f1d6d","seedE":"215ad8753c7ec0943db82736f0f27dec22ef24e0eb907404fb54529a80bb295bf190e351c071152e45a40d8b334e26d129017759f89c05eb9e4d8fe5b4c101332e6e","skRm":"003f9b68b4b9bb36a971332ffd3c261ef9ec5f3a1b35709587d52451250aeccb00ebd45498fc49ed2f68e953cfef143a94042069dee78453a4ecd92723a0378d1d30","skEm":"0078a53316b3eae95a32615fb823ab2c4f9d1a6a399781c91b47f6346aac8c7048d0ee49d13eef1caf06d8a5db7676650fa502a93a7f25cda37274c4f0aa831608e8","psk":"5db3b80a81cb63ca59470c83414ef70a","psk_id":"456e6e796e20447572696e206172616e204d6f726961","pkRm":"04014c8135371e0adcf36f3d89a4517e432f52685901e9007029826482cf88f2c32d127275665a1b7e899cc0669644a8568268c30e4138c2077fbbf86473a74b9d03dc000865206ab6144f0822b71ab108ddad34de1798baa0fb0b3027ab79f6309767a0fa6d897d41be6d39130396f8a8e294d63dce5a561b34a21021d3241fec084feacf","pkEm":"0401e84ce1918ec8493e0f1677eb82df1d572d66edf701868d1069fc9fcd2e375b8d87db4c3ace7377b40075344f0998381e6153128a25b3fdae0dee905be99beaac42013c034473a22ed6b47d61a1b73974c7b126d26237f6025384467f0c5fcff0b00fa5b5f3ebe307d1d62022e63b023ffbba6fc699bbfd194b10436d36520b65bed0ba","enc":"0401e84ce1918ec8493e0f1677eb82df1d572d66edf701868d1069fc9fcd2e375b8d87db4c3ace7377b40075344f0998381e6153128a25b3fdae0dee905be99beaac42013c034473a22ed6b47d61a1b73974c7b126d26237f6025384467f0c5fcff0b00fa5b5f3ebe307d1d62022e63b023ffbba6fc699bbfd194b10436d36520b65bed0ba","shared_secret":"2ad342c278b53163e11fb875f0faaf20e9d94064f3f59f0666f3d0c65bd32ccfb81014d230beaaf020bfe2f299207ed083e22ea2fb969075bac0ff0123f125b8","key_schedule_context":"01ba90b638d5ae2c6488edc28f7abc5188a60b96c6e96367794c34759163a5ebee443d2f641d7a0594ce08b4f3653353ee089cc3091c939e8b6fe3eb4ff3748cb285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"ba24c236cb1fa88b056dc0c4785fb9f84e21be13457dfe8e1de33880774a7623f6433991c3c2454c8730b29b253d059db2ce45d2b64b5a03e38655842d0abee4","key":"e0f3753dc876574371aa8e394a7bb57d7111a9ac89e831d01fab3e696192c4f6","nonce":"1c89b4c0bfcc29ef25a86332","exporter_secret":"6fdc99f9f22334e67a7c001edfa51022937bd55b39b55e6338241e9c483c50ca80e2f6d55ded200eabd6b5906f2436fa7add2a19522bf1c5e7ae3a6d265aab60","encryptions":[{"aad":"436f756e742d30","ciphertext":"9ebc5df2bf8909d59be29c6c21ad762d155d0da35d56c307ce5d07725a27fd4b05dd81594b11859e69c0314ad0","nonce":"1c89b4c0bfcc29ef25a86332","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"3a386a718d4f1b1236b53b80930cc6446eaecec3344ea5faf9dea7baca6cd9b72a9c380aa228129db8e2b264f0","nonce":"1c89b4c0bfcc29ef25a86333","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"6fa2d6e7499ae9e07e6e74cdfd6ad0268019ad1148eb66b8f838a60f511310983f9ac8e3066a24da9022bbea10","nonce":"1c89b4c0bfcc29ef25a86330","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"185f703fd97382de28c5112a16644e0f2fc93d298fdf8866c264861b753d1b650e43ba2a11c4ec5ead75edf472","nonce":"1c89b4c0bfcc29ef25a86331","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"b977ef5a55a218276270b82b9e8cb90834ad084d79c98510f48b6bb67f8b3c5d543c027d5a5e8684fc5334cee6","nonce":"1c89b4c0bfcc29ef25a86336","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"174c17d85c76cba81350d6e3defe1508d1cb3dff7c29248861fac50b41cff84aa005d465003570129bbfc81d43","nonce":"1c89b4c0bfcc29ef25a86337","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"993cef0582117fad1c9c96912ddad7181c4f58b83e7a04e6ab675013a400e7c7fadefdd9a6e9067db2560834ef","nonce":"1c89b4c0bfcc29ef25a86334","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"0529400ccf6ec71e4ae67825a0382600fccf79bead2a7213eb6d5656ac106fb2ca8bae529c8074f51f9627e80c","nonce":"1c89b4c0bfcc29ef25a86335","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"447615a7d3ace31a21318a17c12e0bd8591f84c97af7c8e0743d80bfc528a57b7cbe1997dff9569020205a756a","nonce":"1c89b4c0bfcc29ef25a8633a","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"539df2098a05ecca7292f3365710b5069edd4cb08807aeffde0998d02e26262daca7f30bc70803e16625f7fe70","nonce":"1c89b4c0bfcc29ef25a8633b","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c667337f991a30700c05e844f2583684879d751a47233ddb648a26b11d6dadf3"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"5f1d637ce893b6d7623363ab5a5e96da30dc38722066ab47083926024d9d10f0"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"678ab9525540685f6392caf8e993a55c75e1a1d1d3f86a5e9e518cbb07f526d8"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"776549da419022b315f56c0bf22e6e52a022d19e1e309068fccac969c7aa20c5"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"9c76568baea3c1a56ecde1563957f06eea16450965e99a4d834c2fe99846fa72"}]},{"mode":2,"kem_id":18,"kdf_id":3,"aead_id":3,"info":"4f6465206f6e2061204772656369616e2055726e","seedR":"bdc75e222461b29945232c18e575c43dfbc87248babfa4946ba5cf81bca05738f37c98a353ea5f4a040f3e4033af0f23a23ea247c6b46d51efbeb62c7b023ea3b148","seedS":"14a6b525f3a31214e0622df5914b1e2c88f085ec4c365eace3776f53b96f25dacd53655ded74fa0404e2b6fad7bbea49d00510f6cc1586db408e099196af3712e31b","seedE":"663368cede158c61cb598d3e941018c92c57dda845769ad43edebc5421faeda7c8f3b7b151991847a24af7dcaf68d49b53746d57fc56c6273a5a8210842144b9ff5f","skRm":"00fd468b7f46869792a31fddaf39a2952db8fb25f0f70c2dc1c4dd755c579837e7bb4107b15c516392a5fd60603e1d4eb96588d9f81d4add76a86ac3cbcf17517b03","skSm":"01b84829e2c24fa23e679061d049d2e0ec92bbad36f45466dd05b62f63308a3443bff73b7d4e602e3288418b6300bd679f0b733f46e820ec30ce52984ba447a8f15b","skEm":"0003d8bbac36045c78cdcab360682542310c5c7381ef1f7a7155008aa76209a4b04ea8cd1ae25af3666f49643f2f79bc2b242acb3cbbcf4c4a6acce668bac8da9e4a","pkRm":"040180404868dcb3e9c55a9dd5d667bdc1f7745ad4911ae21cff8a84d54ff2767ae2f52b2dbd56a7359afc5d63c9b26c6704597d37c0d10b2a063bdc2bcef872ba266901405f3b12625fb57739bab027da62622732fd098bb10b3c9be7d9263ab58ab40da8ee9544716de4ade3dbce40d0b3d9dbdbc2935955d5ead812bfd43ae8f3e3dd87","pkSm":"0401780a6096a2b3737a94d2fdc7cbe17ea25bece2ede690ec5b8318feb09710c9dc6985d1d55e71d82899b46b8f81dcf0a5e9a728b0b7c1896b6ec2cabf314b017a3100fed5e4a2a147da5f747819b894f4768e8d15ec6b44b983dba8c927d5988d8b48c49cad592197f257c0a490204d2a4cd780f9ab0ec47e466bdafac2cecfcecfb0bb","pkEm":"04017136a689703e87f63e9a72f63e8eceaf0ee7430212f5a95b0a8de447276fb8b4ea1f95e429776a2dfe0e687327072bba3e422d2454f74da6a838caa20c0e420dd700de3828b02ad43ce01ebd3e1524e83c2ab4f1c8989c252856bad2c3d646137c627f64a682dde2af46fa3fe1461243992c45039d7365bb5d19e8df355dbf57f426b1","enc":"04017136a689703e87f63e9a72f63e8eceaf0ee7430212f5a95b0a8de447276fb8b4ea1f95e429776a2dfe0e687327072bba3e422d2454f74da6a838caa20c0e420dd700de3828b02ad43ce01ebd3e1524e83c2ab4f1c8989c252856bad2c3d646137c627f64a682dde2af46fa3fe1461243992c45039d7365bb5d19e8df355dbf57f426b1","shared_secret":"0b92b8a7ab50f9c1d6412174d8b6cce17e7eb1ef0b455ee9bd01688fae37b1a07f4b69fcbd15c45aed54d9b05f32c1c1e79e9da25ecb290b3255b94059667ec8","key_schedule_context":"020c4b4692570e10a3ccd0199ca48594d44ab05fdec28bbee21b8a7c0ba7c15b68cb32a4df5f9f6e4584454e9bc484777e35170a86e8efb50ff97fc9c192657bd285b4705ede051b724ef3f87671693f5557e24db97b1d0f9157193ccb5e5493f80502223f08b249a52c75d3f0c7d70e95b529f34e03240a6755ddc65ee7b72241","secret":"1ae455b1ff4262402d51ef444b365e3fc4a7db7fbbe803ba99dd0c95666c13c79e4a076361a51fa2dbecef1203cc5e8b41a4e0f0a557357aa0bcf153f557a89c","key":"74d2dd38d29d85a7fea3477ac829f87761c895dae1eadbf08bb3fb54cb1a3002","nonce":"26491428068e251cd5ad4abc","exporter_secret":"199eb590ec1b3efba9862f2aad38cbaffa7707f6efe322f51b739dce559d2790f849f42df2b3970e0b11c3ac167a8b7beef3a767fc010d63d8842b2945858e32","encryptions":[{"aad":"436f756e742d30","ciphertext":"4c91d2555698f13bcd72b9a7182ceff63b8b87923878a8c7cf123544021d507793e2240002e0cf9eb6194a4abc","nonce":"26491428068e251cd5ad4abc","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d31","ciphertext":"695b3cd21bbb0d761f687b491a26f7a37b6882077cd009088b163252952be614c8298130fa162f172c79ae9b08","nonce":"26491428068e251cd5ad4abd","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d32","ciphertext":"297f2f4016e8f8548237f71260a61d97988aa735e51416c5d50f9526963d952358879acdf0d42ae62ff752e398","nonce":"26491428068e251cd5ad4abe","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d33","ciphertext":"77f36aa92abfca832eff9eebab38aae243fca2f5e92104e121073354c5e91d0bae83bbb0ebc22c2f714ece511a","nonce":"26491428068e251cd5ad4abf","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d34","ciphertext":"cac020669fc237f86d87ff01da53700e30926ababaa969e9cedff09927fea51ba085968e5c771df21d221c4586","nonce":"26491428068e251cd5ad4ab8","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d35","ciphertext":"c5ba87783306fef4dc9194303842157f15297db455e03a0ab3d9fcb1668aefbd04fd67061094430e36d80c0277","nonce":"26491428068e251cd5ad4ab9","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d36","ciphertext":"5e8843a20d892552805509ce1fd56145d7daecfeb9ee68f0219acd24a30450c98afa0c71c081473126e0183619","nonce":"26491428068e251cd5ad4aba","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d37","ciphertext":"41794416c888b614a61e1ed77e4a0e67be499f5149776df19fb21f20b513931c9eaf176f05d04a774dd575da76","nonce":"26491428068e251cd5ad4abb","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d38","ciphertext":"5bd00423e8ead9723974afbc69dcefe1c927e5a1d2468bec18ae974716bfd4c0f611ecdd733597012e07e48f23","nonce":"26491428068e251cd5ad4ab4","plaintext":"4265617574792069732074727574682c20747275746820626561757479"},{"aad":"436f756e742d39","ciphertext":"beeb349c2d3e9d9854e10360c693276fc37b68bb525f1d5ca7e52693cf56fe5f3d40590cb4881557aa281fc0a8","nonce":"26491428068e251cd5ad4ab5","plaintext":"4265617574792069732074727574682c20747275746820626561757479"}],"exports":[{"exportContext":"436f6e746578742d30","exportLength":32,"exportValue":"c2f634df11bdf5c8fb625574b5dca7454ebd831c429a4ba93bce77f7da313eed"},{"exportContext":"436f6e746578742d31","exportLength":32,"exportValue":"0194148e428330492491c5a2edc42ced978e95a8aef4f7dc232203dd0b458516"},{"exportContext":"436f6e746578742d32","exportLength":32,"exportValue":"bf81fe58fcc3ee0fc74498e411f00c29121027c435ef10e74a2c665dd905a34e"},{"exportContext":"436f6e746578742d33","exportLength":32,"exportValue":"b8e3f171a971de018ef915256f2c0df13f98f4658b2633ae4bba37ba5dfe999b"},{"exportContext":"436f6e746578742d34","exportLength":32,"exportValue":"fa48a2235fecceb879de1ef4f1871a74304b96d49c68c52c101836a88b35687b"}]}]
\ No newline at end of file
diff --git a/src/ssl/test/runner/runner.go b/src/ssl/test/runner/runner.go
index aac4567..4baf901 100644
--- a/src/ssl/test/runner/runner.go
+++ b/src/ssl/test/runner/runner.go
@@ -491,6 +491,50 @@
npn = 2
)
+// connectionExpectations contains connection-level test expectations to check
+// on the runner side.
+type connectionExpectations struct {
+ // version, if non-zero, specifies the TLS version that must be negotiated.
+ version uint16
+ // cipher, if non-zero, specifies the TLS cipher suite that should be
+ // negotiated.
+ cipher uint16
+ // channelID controls whether the connection should have negotiated a
+ // Channel ID with channelIDKey.
+ channelID bool
+ // tokenBinding controls whether the connection should have negotiated Token
+ // Binding.
+ tokenBinding bool
+ // tokenBindingParam is the Token Binding parameter that should have been
+ // negotiated (if tokenBinding is true).
+ tokenBindingParam uint8
+ // nextProto controls whether the connection should negotiate a next
+ // protocol via NPN or ALPN.
+ nextProto string
+ // noNextProto, if true, means that no next protocol should be negotiated.
+ noNextProto bool
+ // nextProtoType, if non-zero, is the next protocol negotiation mechanism.
+ nextProtoType int
+ // srtpProtectionProfile is the DTLS-SRTP profile that should be negotiated.
+ // If zero, none should be negotiated.
+ srtpProtectionProfile uint16
+ // ocspResponse, if not nil, is the OCSP response to be received.
+ ocspResponse []uint8
+ // sctList, if not nil, is the SCT list to be received.
+ sctList []uint8
+ // peerSignatureAlgorithm, if not zero, is the signature algorithm that the
+ // peer should have used in the handshake.
+ peerSignatureAlgorithm signatureAlgorithm
+ // curveID, if not zero, is the curve that the handshake should have used.
+ curveID CurveID
+ // peerCertificate, if not nil, is the certificate chain the peer is
+ // expected to send.
+ peerCertificate *Certificate
+ // quicTransportParams contains the QUIC transport parameters that are to be
+ // sent by the peer.
+ quicTransportParams []byte
+}
+
type testCase struct {
testType testType
protocol protocol
@@ -501,46 +545,12 @@
// expectedLocalError, if not empty, contains a substring that must be
// found in the local error.
expectedLocalError string
- // expectedVersion, if non-zero, specifies the TLS version that must be
- // negotiated.
- expectedVersion uint16
- // expectedResumeVersion, if non-zero, specifies the TLS version that
- // must be negotiated on resumption. If zero, expectedVersion is used.
- expectedResumeVersion uint16
- // expectedCipher, if non-zero, specifies the TLS cipher suite that
- // should be negotiated.
- expectedCipher uint16
- // expectChannelID controls whether the connection should have
- // negotiated a Channel ID with channelIDKey.
- expectChannelID bool
- // expectTokenBinding controls whether the connection should have
- // negotiated Token Binding.
- expectTokenBinding bool
- // expectedTokenBindingParam is the Token Binding parameter that should
- // have been negotiated (if expectTokenBinding is true).
- expectedTokenBindingParam uint8
- // expectedNextProto controls whether the connection should
- // negotiate a next protocol via NPN or ALPN.
- expectedNextProto string
- // expectNoNextProto, if true, means that no next protocol should be
- // negotiated.
- expectNoNextProto bool
- // expectedNextProtoType, if non-zero, is the expected next
- // protocol negotiation mechanism.
- expectedNextProtoType int
- // expectedSRTPProtectionProfile is the DTLS-SRTP profile that
- // should be negotiated. If zero, none should be negotiated.
- expectedSRTPProtectionProfile uint16
- // expectedOCSPResponse, if not nil, is the expected OCSP response to be received.
- expectedOCSPResponse []uint8
- // expectedSCTList, if not nil, is the expected SCT list to be received.
- expectedSCTList []uint8
- // expectedPeerSignatureAlgorithm, if not zero, is the signature
- // algorithm that the peer should have used in the handshake.
- expectedPeerSignatureAlgorithm signatureAlgorithm
- // expectedCurveID, if not zero, is the curve that the handshake should
- // have used.
- expectedCurveID CurveID
+ // expectations contains test expectations for the initial
+ // connection.
+ expectations connectionExpectations
+ // resumeExpectations, if non-nil, contains test expectations for the
+ // resumption connection. If nil, |expectations| is used.
+ resumeExpectations *connectionExpectations
// messageLen is the length, in bytes, of the test message that will be
// sent.
messageLen int
@@ -639,17 +649,11 @@
// expectMessageDropped, if true, means the test message is expected to
// be dropped by the client rather than echoed back.
expectMessageDropped bool
- // expectPeerCertificate, if not nil, is the certificate chain the peer
- // is expected to send.
- expectPeerCertificate *Certificate
// shimPrefix is the prefix that the shim will send to the server.
shimPrefix string
// resumeShimPrefix is the prefix that the shim will send to the server on a
// resumption.
resumeShimPrefix string
- // expectedQUICTransportParams contains the QUIC transport
- // parameters that are expected to be sent by the peer.
- expectedQUICTransportParams []byte
// exportTrafficSecrets, if true, configures the test to export the TLS 1.3
// traffic secrets and confirms that they match.
exportTrafficSecrets bool
@@ -819,26 +823,23 @@
return err
}
- // TODO(davidben): move all per-connection expectations into a dedicated
- // expectations struct that can be specified separately for the two
- // legs.
- expectedVersion := test.expectedVersion
- if isResume && test.expectedResumeVersion != 0 {
- expectedVersion = test.expectedResumeVersion
+ expectations := &test.expectations
+ if isResume && test.resumeExpectations != nil {
+ expectations = test.resumeExpectations
}
connState := tlsConn.ConnectionState()
- if vers := connState.Version; expectedVersion != 0 && vers != expectedVersion {
- return fmt.Errorf("got version %x, expected %x", vers, expectedVersion)
+ if vers := connState.Version; expectations.version != 0 && vers != expectations.version {
+ return fmt.Errorf("got version %x, expected %x", vers, expectations.version)
}
- if cipher := connState.CipherSuite; test.expectedCipher != 0 && cipher != test.expectedCipher {
- return fmt.Errorf("got cipher %x, expected %x", cipher, test.expectedCipher)
+ if cipher := connState.CipherSuite; expectations.cipher != 0 && cipher != expectations.cipher {
+ return fmt.Errorf("got cipher %x, expected %x", cipher, expectations.cipher)
}
if didResume := connState.DidResume; isResume && didResume == test.expectResumeRejected {
return fmt.Errorf("didResume is %t, but we expected the opposite", didResume)
}
- if test.expectChannelID {
+ if expectations.channelID {
channelID := connState.ChannelID
if channelID == nil {
return fmt.Errorf("no channel ID negotiated")
@@ -852,68 +853,68 @@
return fmt.Errorf("channel ID unexpectedly negotiated")
}
- if test.expectTokenBinding {
+ if expectations.tokenBinding {
if !connState.TokenBindingNegotiated {
return errors.New("no Token Binding negotiated")
}
- if connState.TokenBindingParam != test.expectedTokenBindingParam {
- return fmt.Errorf("expected param %02x, but got %02x", test.expectedTokenBindingParam, connState.TokenBindingParam)
+ if connState.TokenBindingParam != expectations.tokenBindingParam {
+ return fmt.Errorf("expected param %02x, but got %02x", expectations.tokenBindingParam, connState.TokenBindingParam)
}
} else if connState.TokenBindingNegotiated {
return errors.New("Token Binding unexpectedly negotiated")
}
- if expected := test.expectedNextProto; expected != "" {
+ if expected := expectations.nextProto; expected != "" {
if actual := connState.NegotiatedProtocol; actual != expected {
return fmt.Errorf("next proto mismatch: got %s, wanted %s", actual, expected)
}
}
- if test.expectNoNextProto {
+ if expectations.noNextProto {
if actual := connState.NegotiatedProtocol; actual != "" {
return fmt.Errorf("got unexpected next proto %s", actual)
}
}
- if test.expectedNextProtoType != 0 {
- if (test.expectedNextProtoType == alpn) != connState.NegotiatedProtocolFromALPN {
+ if expectations.nextProtoType != 0 {
+ if (expectations.nextProtoType == alpn) != connState.NegotiatedProtocolFromALPN {
return fmt.Errorf("next proto type mismatch")
}
}
- if p := connState.SRTPProtectionProfile; p != test.expectedSRTPProtectionProfile {
- return fmt.Errorf("SRTP profile mismatch: got %d, wanted %d", p, test.expectedSRTPProtectionProfile)
+ if p := connState.SRTPProtectionProfile; p != expectations.srtpProtectionProfile {
+ return fmt.Errorf("SRTP profile mismatch: got %d, wanted %d", p, expectations.srtpProtectionProfile)
}
- if test.expectedOCSPResponse != nil && !bytes.Equal(test.expectedOCSPResponse, tlsConn.OCSPResponse()) {
- return fmt.Errorf("OCSP Response mismatch: got %x, wanted %x", tlsConn.OCSPResponse(), test.expectedOCSPResponse)
+ if expectations.ocspResponse != nil && !bytes.Equal(expectations.ocspResponse, connState.OCSPResponse) {
+ return fmt.Errorf("OCSP Response mismatch: got %x, wanted %x", connState.OCSPResponse, expectations.ocspResponse)
}
- if test.expectedSCTList != nil && !bytes.Equal(test.expectedSCTList, connState.SCTList) {
+ if expectations.sctList != nil && !bytes.Equal(expectations.sctList, connState.SCTList) {
return fmt.Errorf("SCT list mismatch")
}
- if expected := test.expectedPeerSignatureAlgorithm; expected != 0 && expected != connState.PeerSignatureAlgorithm {
+ if expected := expectations.peerSignatureAlgorithm; expected != 0 && expected != connState.PeerSignatureAlgorithm {
return fmt.Errorf("expected peer to use signature algorithm %04x, but got %04x", expected, connState.PeerSignatureAlgorithm)
}
- if expected := test.expectedCurveID; expected != 0 && expected != connState.CurveID {
+ if expected := expectations.curveID; expected != 0 && expected != connState.CurveID {
return fmt.Errorf("expected peer to use curve %04x, but got %04x", expected, connState.CurveID)
}
- if test.expectPeerCertificate != nil {
- if len(connState.PeerCertificates) != len(test.expectPeerCertificate.Certificate) {
- return fmt.Errorf("expected peer to send %d certificates, but got %d", len(connState.PeerCertificates), len(test.expectPeerCertificate.Certificate))
+ if expectations.peerCertificate != nil {
+ if len(connState.PeerCertificates) != len(expectations.peerCertificate.Certificate) {
+ return fmt.Errorf("expected peer to send %d certificates, but got %d", len(connState.PeerCertificates), len(expectations.peerCertificate.Certificate))
}
for i, cert := range connState.PeerCertificates {
- if !bytes.Equal(cert.Raw, test.expectPeerCertificate.Certificate[i]) {
+ if !bytes.Equal(cert.Raw, expectations.peerCertificate.Certificate[i]) {
return fmt.Errorf("peer certificate %d did not match", i+1)
}
}
}
- if len(test.expectedQUICTransportParams) > 0 {
- if !bytes.Equal(test.expectedQUICTransportParams, connState.QUICTransportParams) {
+ if len(expectations.quicTransportParams) > 0 {
+ if !bytes.Equal(expectations.quicTransportParams, connState.QUICTransportParams) {
return errors.New("Peer did not send expected QUIC transport params")
}
}
@@ -1228,7 +1229,7 @@
continue
}
- if test.config.MaxVersion == 0 && test.config.MinVersion == 0 && test.expectedVersion == 0 {
+ if test.config.MaxVersion == 0 && test.config.MinVersion == 0 && test.expectations.version == 0 {
panic(fmt.Sprintf("The name of test %q suggests that it's version specific, but min/max version in the Config is %x/%x. One of them should probably be %x", test.name, test.config.MinVersion, test.config.MaxVersion, ver.version))
}
}
@@ -1274,7 +1275,10 @@
if test.resumeConfig != nil {
test.resumeConfig.QUICTransportParams = []byte{1, 2}
}
- test.expectedQUICTransportParams = []byte{3, 4}
+ test.expectations.quicTransportParams = []byte{3, 4}
+ if test.resumeExpectations != nil {
+ test.resumeExpectations.quicTransportParams = []byte{3, 4}
+ }
flags = append(flags,
[]string{
"-quic-transport-params",
@@ -1294,8 +1298,12 @@
if test.resumeConfig != nil {
test.resumeConfig.NextProtos = []string{"foo"}
}
- test.expectedNextProto = "foo"
- test.expectedNextProtoType = alpn
+ test.expectations.nextProto = "foo"
+ test.expectations.nextProtoType = alpn
+ if test.resumeExpectations != nil {
+ test.resumeExpectations.nextProto = "foo"
+ test.resumeExpectations.nextProtoType = alpn
+ }
}
}
@@ -1882,7 +1890,9 @@
SkipCertificateVerify: true,
},
},
- expectPeerCertificate: &rsaChainCertificate,
+ expectations: connectionExpectations{
+ peerCertificate: &rsaChainCertificate,
+ },
flags: []string{
"-require-any-client-certificate",
},
@@ -2017,7 +2027,9 @@
FragmentClientVersion: true,
},
},
- expectedVersion: VersionTLS13,
+ expectations: connectionExpectations{
+ version: VersionTLS13,
+ },
},
{
testType: serverTest,
@@ -3396,7 +3408,7 @@
// Servers should reject QUIC client hellos that have a legacy
// session ID.
testCases = append(testCases, testCase{
- name: "QUICCompatibilityMode",
+ name: "QUICCompatibilityMode",
testType: serverTest,
protocol: quic,
config: Config{
@@ -3405,7 +3417,7 @@
CompatModeWithQUIC: true,
},
},
- shouldFail: true,
+ shouldFail: true,
expectedError: ":UNEXPECTED_COMPATIBILITY_MODE:",
})
}
@@ -3880,8 +3892,10 @@
MaxVersion: VersionTLS12,
CipherSuites: t.ciphers,
},
- flags: []string{"-cipher", negotiationTestCiphers},
- expectedCipher: t.expected,
+ flags: []string{"-cipher", negotiationTestCiphers},
+ expectations: connectionExpectations{
+ cipher: t.expected,
+ },
})
}
}
@@ -4174,7 +4188,9 @@
MaxVersion: ver.version,
ChannelID: channelIDKey,
},
- expectChannelID: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ },
flags: []string{
"-enable-channel-id",
"-verify-peer-if-no-obc",
@@ -5044,7 +5060,9 @@
config: Config{
MaxVersion: vers.version,
},
- expectedOCSPResponse: testOCSPResponse,
+ expectations: connectionExpectations{
+ ocspResponse: testOCSPResponse,
+ },
flags: []string{
"-ocsp-response",
base64.StdEncoding.EncodeToString(testOCSPResponse),
@@ -5117,7 +5135,9 @@
config: Config{
MaxVersion: vers.version,
},
- expectedOCSPResponse: testOCSPResponse,
+ expectations: connectionExpectations{
+ ocspResponse: testOCSPResponse,
+ },
flags: []string{
"-use-ocsp-callback",
"-set-ocsp-in-callback",
@@ -5136,7 +5156,9 @@
config: Config{
MaxVersion: vers.version,
},
- expectedOCSPResponse: []byte{},
+ expectations: connectionExpectations{
+ ocspResponse: []byte{},
+ },
flags: []string{
"-use-ocsp-callback",
"-decline-ocsp-callback",
@@ -5497,10 +5519,12 @@
MaxVersion: VersionTLS12,
NextProtos: []string{"foo"},
},
- flags: []string{"-select-next-proto", "foo"},
- resumeSession: true,
- expectedNextProto: "foo",
- expectedNextProtoType: npn,
+ flags: []string{"-select-next-proto", "foo"},
+ resumeSession: true,
+ expectations: connectionExpectations{
+ nextProto: "foo",
+ nextProtoType: npn,
+ },
})
tests = append(tests, testCase{
testType: serverTest,
@@ -5513,9 +5537,11 @@
"-advertise-npn", "\x03foo\x03bar\x03baz",
"-expect-next-proto", "bar",
},
- resumeSession: true,
- expectedNextProto: "bar",
- expectedNextProtoType: npn,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ nextProto: "bar",
+ nextProtoType: npn,
+ },
})
// Client does False Start and negotiates NPN.
@@ -5619,10 +5645,12 @@
"-send-channel-id", path.Join(*resourceDir, channelIDKeyFile),
"-select-next-proto", "foo",
},
- resumeSession: true,
- expectChannelID: true,
- expectedNextProto: "foo",
- expectedNextProtoType: npn,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ nextProto: "foo",
+ nextProtoType: npn,
+ },
})
tests = append(tests, testCase{
testType: serverTest,
@@ -5638,10 +5666,12 @@
"-advertise-npn", "\x03foo\x03bar\x03baz",
"-expect-next-proto", "bar",
},
- resumeSession: true,
- expectChannelID: true,
- expectedNextProto: "bar",
- expectedNextProtoType: npn,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ nextProto: "bar",
+ nextProtoType: npn,
+ },
})
// Bidirectional shutdown with the runner initiating.
@@ -5668,9 +5698,11 @@
MaxVersion: ver.version,
RequestChannelID: true,
},
- flags: []string{"-send-channel-id", path.Join(*resourceDir, channelIDKeyFile)},
- resumeSession: true,
- expectChannelID: true,
+ flags: []string{"-send-channel-id", path.Join(*resourceDir, channelIDKeyFile)},
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ },
})
// Server accepts a Channel ID.
@@ -5685,8 +5717,10 @@
"-expect-channel-id",
base64.StdEncoding.EncodeToString(channelIDBytes),
},
- resumeSession: true,
- expectChannelID: true,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ },
})
tests = append(tests, testCase{
@@ -5714,11 +5748,13 @@
CipherSuites: []uint16{TLS_RSA_WITH_AES_128_CBC_SHA},
ChannelID: channelIDKey,
},
- expectChannelID: false,
- flags: []string{"-enable-channel-id"},
+ expectations: connectionExpectations{
+ channelID: false,
+ },
+ flags: []string{"-enable-channel-id"},
})
- // Sanity-check setting expectChannelID false works.
+ // Sanity-check setting expectations.channelID false works.
tests = append(tests, testCase{
testType: serverTest,
name: "ChannelID-ECDHE-" + ver.name,
@@ -5727,7 +5763,9 @@
CipherSuites: []uint16{TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},
ChannelID: channelIDKey,
},
- expectChannelID: false,
+ expectations: connectionExpectations{
+ channelID: false,
+ },
flags: []string{"-enable-channel-id"},
shouldFail: true,
expectedLocalError: "channel ID unexpectedly negotiated",
@@ -6018,8 +6056,10 @@
ExpectInitialRecordVersion: clientVers,
},
},
- flags: flags,
- expectedVersion: expectedVersion,
+ flags: flags,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
})
testCases = append(testCases, testCase{
protocol: protocol,
@@ -6031,8 +6071,10 @@
ExpectInitialRecordVersion: clientVers,
},
},
- flags: flags2,
- expectedVersion: expectedVersion,
+ flags: flags2,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
})
testCases = append(testCases, testCase{
@@ -6045,8 +6087,10 @@
ExpectInitialRecordVersion: serverVers,
},
},
- flags: flags,
- expectedVersion: expectedVersion,
+ flags: flags,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
})
testCases = append(testCases, testCase{
protocol: protocol,
@@ -6058,8 +6102,10 @@
ExpectInitialRecordVersion: serverVers,
},
},
- flags: flags2,
- expectedVersion: expectedVersion,
+ flags: flags2,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
})
}
}
@@ -6080,7 +6126,9 @@
IgnoreTLS13DowngradeRandom: true,
},
},
- expectedVersion: vers.version,
+ expectations: connectionExpectations{
+ version: vers.version,
+ },
})
}
}
@@ -6121,7 +6169,9 @@
IgnoreTLS13DowngradeRandom: true,
},
},
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
})
testCases = append(testCases, testCase{
@@ -6135,7 +6185,9 @@
},
},
// The extension takes precedence over the ClientHello version.
- expectedVersion: VersionTLS11,
+ expectations: connectionExpectations{
+ version: VersionTLS11,
+ },
})
testCases = append(testCases, testCase{
@@ -6149,7 +6201,9 @@
},
},
// The extension takes precedence over the ClientHello version.
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
})
// Test that TLS 1.2 isn't negotiated by the supported_versions extension in
@@ -6177,7 +6231,9 @@
SendSupportedVersions: []uint16{VersionTLS12, VersionTLS13},
},
},
- expectedVersion: VersionTLS13,
+ expectations: connectionExpectations{
+ version: VersionTLS13,
+ },
})
// Test for version tolerance.
@@ -6191,7 +6247,9 @@
IgnoreTLS13DowngradeRandom: true,
},
},
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
})
testCases = append(testCases, testCase{
testType: serverTest,
@@ -6205,7 +6263,9 @@
},
// TLS 1.3 must be negotiated with the supported_versions
// extension, not ClientHello.version.
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
})
testCases = append(testCases, testCase{
testType: serverTest,
@@ -6218,7 +6278,9 @@
SendClientVersion: 0x0400,
},
},
- expectedVersion: VersionTLS13,
+ expectations: connectionExpectations{
+ version: VersionTLS13,
+ },
})
testCases = append(testCases, testCase{
@@ -6231,7 +6293,9 @@
OmitSupportedVersions: true,
},
},
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
})
testCases = append(testCases, testCase{
protocol: dtls,
@@ -6243,7 +6307,9 @@
OmitSupportedVersions: true,
},
},
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
})
// Test that versions below 3.0 are rejected.
@@ -6304,7 +6370,9 @@
NegotiateVersion: test.version,
},
},
- expectedVersion: test.version,
+ expectations: connectionExpectations{
+ version: test.version,
+ },
shouldFail: true,
expectedError: ":TLS13_DOWNGRADE:",
expectedLocalError: "remote error: illegal parameter",
@@ -6319,7 +6387,9 @@
NegotiateVersion: test.version,
},
},
- expectedVersion: test.version,
+ expectations: connectionExpectations{
+ version: test.version,
+ },
flags: []string{
"-ignore-tls13-downgrade",
"-expect-tls13-downgrade",
@@ -6335,7 +6405,9 @@
SendSupportedVersions: []uint16{test.version},
},
},
- expectedVersion: test.version,
+ expectations: connectionExpectations{
+ version: test.version,
+ },
shouldFail: true,
expectedLocalError: test.clientShimError,
})
@@ -6352,7 +6424,9 @@
AlertBeforeFalseStartTest: alertAccessDenied,
},
},
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
flags: []string{
"-false-start",
"-advertise-alpn", "\x03foo",
@@ -6447,8 +6521,10 @@
IgnorePeerCipherPreferences: shouldFail,
},
},
- flags: flags,
- expectedVersion: expectedVersion,
+ flags: flags,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
shouldFail: shouldFail,
expectedError: expectedError,
expectedLocalError: expectedLocalError,
@@ -6467,8 +6543,10 @@
IgnorePeerCipherPreferences: shouldFail,
},
},
- flags: flags2,
- expectedVersion: expectedVersion,
+ flags: flags2,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
shouldFail: shouldFail,
expectedError: expectedError,
expectedLocalError: expectedLocalError,
@@ -6481,8 +6559,10 @@
config: Config{
MaxVersion: runnerVers.version,
},
- flags: flags,
- expectedVersion: expectedVersion,
+ flags: flags,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
shouldFail: shouldFail,
expectedError: expectedError,
expectedLocalError: expectedLocalError,
@@ -6494,8 +6574,10 @@
config: Config{
MaxVersion: runnerVers.version,
},
- flags: flags2,
- expectedVersion: expectedVersion,
+ flags: flags2,
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
shouldFail: shouldFail,
expectedError: expectedError,
expectedLocalError: expectedLocalError,
@@ -6623,9 +6705,11 @@
"-advertise-alpn", "\x03foo\x03bar\x03baz",
"-expect-alpn", "foo",
},
- expectedNextProto: "foo",
- expectedNextProtoType: alpn,
- resumeSession: true,
+ expectations: connectionExpectations{
+ nextProto: "foo",
+ nextProtoType: alpn,
+ },
+ resumeSession: true,
})
testCases = append(testCases, testCase{
testType: clientTest,
@@ -6669,9 +6753,11 @@
"-expect-advertised-alpn", "\x03foo\x03bar\x03baz",
"-select-alpn", "foo",
},
- expectedNextProto: "foo",
- expectedNextProtoType: alpn,
- resumeSession: true,
+ expectations: connectionExpectations{
+ nextProto: "foo",
+ nextProtoType: alpn,
+ },
+ resumeSession: true,
})
testCases = append(testCases, testCase{
testType: serverTest,
@@ -6680,9 +6766,11 @@
MaxVersion: ver.version,
NextProtos: []string{"foo", "bar", "baz"},
},
- flags: []string{"-decline-alpn"},
- expectNoNextProto: true,
- resumeSession: true,
+ flags: []string{"-decline-alpn"},
+ expectations: connectionExpectations{
+ noNextProto: true,
+ },
+ resumeSession: true,
})
// Test that the server implementation catches itself if the
// callback tries to return an invalid empty ALPN protocol.
@@ -6718,9 +6806,11 @@
"-select-alpn", "foo",
"-async",
},
- expectedNextProto: "foo",
- expectedNextProtoType: alpn,
- resumeSession: true,
+ expectations: connectionExpectations{
+ nextProto: "foo",
+ nextProtoType: alpn,
+ },
+ resumeSession: true,
})
var emptyString string
@@ -6773,9 +6863,11 @@
"-select-alpn", "foo",
"-advertise-npn", "\x03foo\x03bar\x03baz",
},
- expectedNextProto: "foo",
- expectedNextProtoType: alpn,
- resumeSession: true,
+ expectations: connectionExpectations{
+ nextProto: "foo",
+ nextProtoType: alpn,
+ },
+ resumeSession: true,
})
testCases = append(testCases, testCase{
testType: serverTest,
@@ -6792,9 +6884,11 @@
"-select-alpn", "foo",
"-advertise-npn", "\x03foo\x03bar\x03baz",
},
- expectedNextProto: "foo",
- expectedNextProtoType: alpn,
- resumeSession: true,
+ expectations: connectionExpectations{
+ nextProto: "foo",
+ nextProtoType: alpn,
+ },
+ resumeSession: true,
})
// Test that negotiating both NPN and ALPN is forbidden.
@@ -6909,8 +7003,10 @@
TokenBindingParams: []byte{0, 1, 2},
TokenBindingVersion: maxTokenBindingVersion,
},
- expectTokenBinding: true,
- expectedTokenBindingParam: 2,
+ expectations: connectionExpectations{
+ tokenBinding: true,
+ tokenBindingParam: 2,
+ },
flags: []string{
"-token-binding-params",
base64.StdEncoding.EncodeToString([]byte{2, 1, 0}),
@@ -6958,8 +7054,10 @@
TokenBindingParams: []byte{0, 1, 2},
TokenBindingVersion: maxTokenBindingVersion + 1,
},
- expectTokenBinding: true,
- expectedTokenBindingParam: 2,
+ expectations: connectionExpectations{
+ tokenBinding: true,
+ tokenBindingParam: 2,
+ },
flags: []string{
"-token-binding-params",
base64.StdEncoding.EncodeToString([]byte{2, 1, 0}),
@@ -6994,8 +7092,10 @@
TokenBindingParams: []byte{0, 1, 2, 2},
TokenBindingVersion: maxTokenBindingVersion,
},
- expectTokenBinding: true,
- expectedTokenBindingParam: 2,
+ expectations: connectionExpectations{
+ tokenBinding: true,
+ tokenBindingParam: 2,
+ },
flags: []string{
"-token-binding-params",
base64.StdEncoding.EncodeToString([]byte{2, 1, 0}),
@@ -7261,9 +7361,11 @@
TokenBindingVersion: maxTokenBindingVersion,
MaxEarlyDataSize: 16384,
},
- resumeSession: true,
- expectTokenBinding: true,
- expectedTokenBindingParam: 2,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ tokenBinding: true,
+ tokenBindingParam: 2,
+ },
flags: []string{
"-enable-early-data",
"-expect-ticket-supports-early-data",
@@ -7293,8 +7395,10 @@
"-expect-quic-transport-params",
base64.StdEncoding.EncodeToString([]byte{1, 2}),
},
- expectedQUICTransportParams: []byte{3, 4},
- skipTransportParamsConfig: true,
+ expectations: connectionExpectations{
+ quicTransportParams: []byte{3, 4},
+ },
+ skipTransportParamsConfig: true,
})
testCases = append(testCases, testCase{
testType: clientTest,
@@ -7328,8 +7432,10 @@
"-expect-quic-transport-params",
base64.StdEncoding.EncodeToString([]byte{1, 2}),
},
- expectedQUICTransportParams: []byte{3, 4},
- skipTransportParamsConfig: true,
+ expectations: connectionExpectations{
+ quicTransportParams: []byte{3, 4},
+ },
+ skipTransportParamsConfig: true,
})
testCases = append(testCases, testCase{
testType: serverTest,
@@ -7343,10 +7449,12 @@
"-quic-transport-params",
base64.StdEncoding.EncodeToString([]byte{3, 4}),
},
- expectedQUICTransportParams: []byte{3, 4},
- shouldFail: true,
- expectedError: ":MISSING_EXTENSION:",
- skipTransportParamsConfig: true,
+ expectations: connectionExpectations{
+ quicTransportParams: []byte{3, 4},
+ },
+ shouldFail: true,
+ expectedError: ":MISSING_EXTENSION:",
+ skipTransportParamsConfig: true,
})
}
testCases = append(testCases, testCase{
@@ -7512,7 +7620,9 @@
"-srtp-profiles",
"SRTP_AES128_CM_SHA1_80:SRTP_AES128_CM_SHA1_32",
},
- expectedSRTPProtectionProfile: SRTP_AES128_CM_HMAC_SHA1_80,
+ expectations: connectionExpectations{
+ srtpProtectionProfile: SRTP_AES128_CM_HMAC_SHA1_80,
+ },
})
testCases = append(testCases, testCase{
protocol: dtls,
@@ -7526,7 +7636,9 @@
"-srtp-profiles",
"SRTP_AES128_CM_SHA1_80:SRTP_AES128_CM_SHA1_32",
},
- expectedSRTPProtectionProfile: SRTP_AES128_CM_HMAC_SHA1_80,
+ expectations: connectionExpectations{
+ srtpProtectionProfile: SRTP_AES128_CM_HMAC_SHA1_80,
+ },
})
// Test that the MKI is ignored.
testCases = append(testCases, testCase{
@@ -7544,7 +7656,9 @@
"-srtp-profiles",
"SRTP_AES128_CM_SHA1_80:SRTP_AES128_CM_SHA1_32",
},
- expectedSRTPProtectionProfile: SRTP_AES128_CM_HMAC_SHA1_80,
+ expectations: connectionExpectations{
+ srtpProtectionProfile: SRTP_AES128_CM_HMAC_SHA1_80,
+ },
})
// Test that SRTP isn't negotiated on the server if there were
// no matching profiles.
@@ -7560,7 +7674,9 @@
"-srtp-profiles",
"SRTP_AES128_CM_SHA1_80:SRTP_AES128_CM_SHA1_32",
},
- expectedSRTPProtectionProfile: 0,
+ expectations: connectionExpectations{
+ srtpProtectionProfile: 0,
+ },
})
// Test that the server returning an invalid SRTP profile is
// flagged as an error by the client.
@@ -7629,8 +7745,10 @@
"-signed-cert-timestamps",
base64.StdEncoding.EncodeToString(testSCTList),
},
- expectedSCTList: testSCTList,
- resumeSession: true,
+ expectations: connectionExpectations{
+ sctList: testSCTList,
+ },
+ resumeSession: true,
})
emptySCTListCert := *testCerts[0].cert
@@ -7960,8 +8078,12 @@
ExpectNoTLS13PSK: sessionVers.version < VersionTLS13,
},
},
- expectedVersion: sessionVers.version,
- expectedResumeVersion: resumeVers.version,
+ expectations: connectionExpectations{
+ version: sessionVers.version,
+ },
+ resumeExpectations: &connectionExpectations{
+ version: resumeVers.version,
+ },
})
} else {
testCases = append(testCases, testCase{
@@ -7971,16 +8093,20 @@
config: Config{
MaxVersion: sessionVers.version,
},
- expectedVersion: sessionVers.version,
+ expectations: connectionExpectations{
+ version: sessionVers.version,
+ },
resumeConfig: &Config{
MaxVersion: resumeVers.version,
Bugs: ProtocolBugs{
AcceptAnySession: true,
},
},
- expectedResumeVersion: resumeVers.version,
- shouldFail: true,
- expectedError: ":OLD_SESSION_VERSION_NOT_RETURNED:",
+ resumeExpectations: &connectionExpectations{
+ version: resumeVers.version,
+ },
+ shouldFail: true,
+ expectedError: ":OLD_SESSION_VERSION_NOT_RETURNED:",
})
}
@@ -7991,13 +8117,17 @@
config: Config{
MaxVersion: sessionVers.version,
},
- expectedVersion: sessionVers.version,
+ expectations: connectionExpectations{
+ version: sessionVers.version,
+ },
resumeConfig: &Config{
MaxVersion: resumeVers.version,
},
- newSessionsOnResume: true,
- expectResumeRejected: true,
- expectedResumeVersion: resumeVers.version,
+ newSessionsOnResume: true,
+ expectResumeRejected: true,
+ resumeExpectations: &connectionExpectations{
+ version: resumeVers.version,
+ },
})
testCases = append(testCases, testCase{
@@ -8008,7 +8138,9 @@
config: Config{
MaxVersion: sessionVers.version,
},
- expectedVersion: sessionVers.version,
+ expectations: connectionExpectations{
+ version: sessionVers.version,
+ },
expectResumeRejected: sessionVers != resumeVers,
resumeConfig: &Config{
MaxVersion: resumeVers.version,
@@ -8016,7 +8148,9 @@
SendBothTickets: true,
},
},
- expectedResumeVersion: resumeVers.version,
+ resumeExpectations: &connectionExpectations{
+ version: resumeVers.version,
+ },
})
// Repeat the test using session IDs, rather than tickets.
@@ -8030,13 +8164,17 @@
MaxVersion: sessionVers.version,
SessionTicketsDisabled: true,
},
- expectedVersion: sessionVers.version,
+ expectations: connectionExpectations{
+ version: sessionVers.version,
+ },
expectResumeRejected: sessionVers != resumeVers,
resumeConfig: &Config{
MaxVersion: resumeVers.version,
SessionTicketsDisabled: true,
},
- expectedResumeVersion: resumeVers.version,
+ resumeExpectations: &connectionExpectations{
+ version: resumeVers.version,
+ },
})
}
}
@@ -9125,10 +9263,12 @@
"-key-file", path.Join(*resourceDir, getShimKey(alg.cert)),
"-enable-all-curves",
},
- shouldFail: shouldFail,
- expectedError: signError,
- expectedLocalError: signLocalError,
- expectedPeerSignatureAlgorithm: alg.id,
+ shouldFail: shouldFail,
+ expectedError: signError,
+ expectedLocalError: signLocalError,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: alg.id,
+ },
}
// Test that the shim will select the algorithm when configured to only
@@ -9146,7 +9286,9 @@
"-enable-all-curves",
"-signing-prefs", strconv.Itoa(int(alg.id)),
},
- expectedPeerSignatureAlgorithm: alg.id,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: alg.id,
+ },
}
if testType == serverTest {
@@ -9328,7 +9470,9 @@
"-cert-file", path.Join(*resourceDir, rsaCertificateFile),
"-key-file", path.Join(*resourceDir, rsaKeyFile),
},
- expectedPeerSignatureAlgorithm: signatureRSAPKCS1WithSHA384,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPKCS1WithSHA384,
+ },
})
testCases = append(testCases, testCase{
@@ -9347,7 +9491,9 @@
"-cert-file", path.Join(*resourceDir, rsaCertificateFile),
"-key-file", path.Join(*resourceDir, rsaKeyFile),
},
- expectedPeerSignatureAlgorithm: signatureRSAPSSWithSHA384,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPSSWithSHA384,
+ },
})
testCases = append(testCases, testCase{
@@ -9362,7 +9508,9 @@
signatureECDSAWithSHA1,
},
},
- expectedPeerSignatureAlgorithm: signatureRSAPKCS1WithSHA384,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPKCS1WithSHA384,
+ },
})
testCases = append(testCases, testCase{
@@ -9377,7 +9525,9 @@
signatureECDSAWithSHA1,
},
},
- expectedPeerSignatureAlgorithm: signatureRSAPSSWithSHA384,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPSSWithSHA384,
+ },
})
// Test that signature verification takes the key type into account.
@@ -9696,7 +9846,9 @@
"-signing-prefs", strconv.Itoa(int(signatureRSAPKCS1WithSHA256)),
"-signing-prefs", strconv.Itoa(int(signatureRSAPKCS1WithSHA1)),
},
- expectedPeerSignatureAlgorithm: signatureRSAPKCS1WithSHA256,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPKCS1WithSHA256,
+ },
})
testCases = append(testCases, testCase{
name: "Agree-Digest-SHA1",
@@ -9714,7 +9866,9 @@
"-signing-prefs", strconv.Itoa(int(signatureRSAPKCS1WithSHA256)),
"-signing-prefs", strconv.Itoa(int(signatureRSAPKCS1WithSHA1)),
},
- expectedPeerSignatureAlgorithm: signatureRSAPKCS1WithSHA1,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPKCS1WithSHA1,
+ },
})
testCases = append(testCases, testCase{
name: "Agree-Digest-Default",
@@ -9732,7 +9886,9 @@
"-cert-file", path.Join(*resourceDir, rsaCertificateFile),
"-key-file", path.Join(*resourceDir, rsaKeyFile),
},
- expectedPeerSignatureAlgorithm: signatureRSAPKCS1WithSHA256,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPKCS1WithSHA256,
+ },
})
// Test that the signing preference list may include extra algorithms
@@ -9754,7 +9910,9 @@
"-signing-prefs", strconv.Itoa(int(signatureRSAPKCS1WithSHA256)),
"-signing-prefs", strconv.Itoa(int(fakeSigAlg2)),
},
- expectedPeerSignatureAlgorithm: signatureRSAPKCS1WithSHA256,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureRSAPKCS1WithSHA256,
+ },
})
// In TLS 1.2 and below, ECDSA uses the curve list rather than the
@@ -9827,7 +9985,9 @@
"-cert-file", path.Join(*resourceDir, ecdsaP256CertificateFile),
"-key-file", path.Join(*resourceDir, ecdsaP256KeyFile),
},
- expectedPeerSignatureAlgorithm: signatureECDSAWithP256AndSHA256,
+ expectations: connectionExpectations{
+ peerSignatureAlgorithm: signatureECDSAWithP256AndSHA256,
+ },
})
// RSASSA-PSS with SHA-512 is too large for 1024-bit RSA. Test that the
@@ -10611,7 +10771,9 @@
"-enable-all-curves",
"-expect-curve-id", strconv.Itoa(int(curve.id)),
},
- expectedCurveID: curve.id,
+ expectations: connectionExpectations{
+ curveID: curve.id,
+ },
})
testCases = append(testCases, testCase{
testType: serverTest,
@@ -10629,7 +10791,9 @@
"-enable-all-curves",
"-expect-curve-id", strconv.Itoa(int(curve.id)),
},
- expectedCurveID: curve.id,
+ expectations: connectionExpectations{
+ curveID: curve.id,
+ },
})
if curve.id != CurveX25519 && !isPqGroup(curve.id) {
@@ -10736,7 +10900,9 @@
},
CurvePreferences: []CurveID{CurveP224},
},
- expectedCipher: TLS_RSA_WITH_AES_128_GCM_SHA256,
+ expectations: connectionExpectations{
+ cipher: TLS_RSA_WITH_AES_128_GCM_SHA256,
+ },
})
// The client must reject bogus curves and disabled curves.
@@ -11226,8 +11392,10 @@
SendPSKKeyExchangeModes: []byte{0x1a, pskDHEKEMode, 0x2a},
},
},
- resumeSession: true,
- expectedResumeVersion: VersionTLS13,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ version: VersionTLS13,
+ },
})
// Test that the server does not send session tickets with no matching key exchange mode.
@@ -12864,8 +13032,10 @@
DefaultCurves: []CurveID{},
CurvePreferences: []CurveID{CurveX25519},
},
- expectedCurveID: CurveX25519,
- flags: []string{"-expect-hrr"},
+ expectations: connectionExpectations{
+ curveID: CurveX25519,
+ },
+ flags: []string{"-expect-hrr"},
})
testCases = append(testCases, testCase{
@@ -12878,8 +13048,10 @@
},
// Although the ClientHello did not predict our preferred curve,
// we always select it whether it is predicted or not.
- expectedCurveID: CurveX25519,
- flags: []string{"-expect-hrr"},
+ expectations: connectionExpectations{
+ curveID: CurveX25519,
+ },
+ flags: []string{"-expect-hrr"},
})
testCases = append(testCases, testCase{
@@ -13883,8 +14055,10 @@
MaxEarlyDataSize: 16384,
RequestChannelID: true,
},
- resumeSession: true,
- expectChannelID: true,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ },
shouldFail: true,
expectedError: ":UNEXPECTED_EXTENSION_ON_EARLY_DATA:",
expectedLocalError: "remote error: illegal parameter",
@@ -13908,8 +14082,10 @@
AlwaysRejectEarlyData: true,
},
},
- resumeSession: true,
- expectChannelID: true,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ },
flags: []string{
"-enable-early-data",
"-expect-ticket-supports-early-data",
@@ -13952,8 +14128,10 @@
ExpectEarlyDataAccepted: false,
},
},
- resumeSession: true,
- expectChannelID: true,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: true,
+ },
flags: []string{
"-enable-early-data",
"-expect-reject-early-data",
@@ -13976,8 +14154,10 @@
ExpectHalfRTTData: [][]byte{{254, 253, 252, 251}},
},
},
- resumeSession: true,
- expectChannelID: false,
+ resumeSession: true,
+ expectations: connectionExpectations{
+ channelID: false,
+ },
flags: []string{
"-enable-early-data",
"-on-resume-expect-accept-early-data",
@@ -14133,7 +14313,9 @@
SkipCertificateVerify: true,
},
},
- expectPeerCertificate: &rsaChainCertificate,
+ expectations: connectionExpectations{
+ peerCertificate: &rsaChainCertificate,
+ },
flags: []string{
"-cert-file", path.Join(*resourceDir, rsaChainCertificateFile),
"-key-file", path.Join(*resourceDir, rsaChainKeyFile),
@@ -14154,7 +14336,9 @@
SkipCertificateVerify: true,
},
},
- expectPeerCertificate: &rsaChainCertificate,
+ expectations: connectionExpectations{
+ peerCertificate: &rsaChainCertificate,
+ },
flags: []string{
"-cert-file", path.Join(*resourceDir, rsaChainCertificateFile),
"-key-file", path.Join(*resourceDir, rsaChainKeyFile),
@@ -14167,9 +14351,11 @@
// If the client or server has 0-RTT enabled but disabled TLS 1.3, it should
// report a reason of protocol_version.
testCases = append(testCases, testCase{
- testType: clientTest,
- name: "EarlyDataEnabled-Client-MaxTLS12",
- expectedVersion: VersionTLS12,
+ testType: clientTest,
+ name: "EarlyDataEnabled-Client-MaxTLS12",
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
flags: []string{
"-enable-early-data",
"-max-version", strconv.Itoa(VersionTLS12),
@@ -14177,9 +14363,11 @@
},
})
testCases = append(testCases, testCase{
- testType: serverTest,
- name: "EarlyDataEnabled-Server-MaxTLS12",
- expectedVersion: VersionTLS12,
+ testType: serverTest,
+ name: "EarlyDataEnabled-Server-MaxTLS12",
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
flags: []string{
"-enable-early-data",
"-max-version", strconv.Itoa(VersionTLS12),
@@ -14197,7 +14385,9 @@
config: Config{
MaxVersion: VersionTLS12,
},
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
flags: []string{
"-enable-early-data",
"-expect-early-data-reason", "protocol_version",
@@ -14368,7 +14558,9 @@
flags: []string{
"-curves", strconv.Itoa(int(CurveCECPQ2)),
},
- expectedCipher: TLS_AES_256_GCM_SHA384,
+ expectations: connectionExpectations{
+ cipher: TLS_AES_256_GCM_SHA384,
+ },
})
// ... but when CECPQ2 isn't being used, the client's preference controls.
testCases = append(testCases, testCase{
@@ -14384,7 +14576,9 @@
flags: []string{
"-curves", strconv.Itoa(int(CurveX25519)),
},
- expectedCipher: TLS_AES_128_GCM_SHA256,
+ expectations: connectionExpectations{
+ cipher: TLS_AES_128_GCM_SHA256,
+ },
})
// Test that CECPQ2 continues to honor AES vs ChaCha20 logic.
@@ -14554,7 +14748,9 @@
Certificates: []Certificate{rsaChainCertificate},
ClientAuth: RequireAnyClientCert,
},
- expectPeerCertificate: &rsaChainCertificate,
+ expectations: connectionExpectations{
+ peerCertificate: &rsaChainCertificate,
+ },
flags: []string{
"-cert-file", path.Join(*resourceDir, rsaChainCertificateFile),
"-key-file", path.Join(*resourceDir, rsaChainKeyFile),
@@ -14570,7 +14766,9 @@
MaxVersion: ver.version,
Certificates: []Certificate{rsaChainCertificate},
},
- expectPeerCertificate: &rsaChainCertificate,
+ expectations: connectionExpectations{
+ peerCertificate: &rsaChainCertificate,
+ },
flags: []string{
"-cert-file", path.Join(*resourceDir, rsaChainCertificateFile),
"-key-file", path.Join(*resourceDir, rsaChainKeyFile),
@@ -15502,8 +15700,10 @@
ExpectJDK11DowngradeRandom: t.isJDK11,
},
},
- expectedVersion: expectedVersion,
- flags: []string{"-jdk11-workaround"},
+ expectations: connectionExpectations{
+ version: expectedVersion,
+ },
+ flags: []string{"-jdk11-workaround"},
})
// With the workaround disabled, we always negotiate TLS 1.3.
@@ -15518,7 +15718,9 @@
ExpectJDK11DowngradeRandom: false,
},
},
- expectedVersion: VersionTLS13,
+ expectations: connectionExpectations{
+ version: VersionTLS13,
+ },
})
// If the server does not support TLS 1.3, the workaround should
@@ -15535,7 +15737,9 @@
ExpectJDK11DowngradeRandom: false,
},
},
- expectedVersion: VersionTLS12,
+ expectations: connectionExpectations{
+ version: VersionTLS12,
+ },
flags: []string{
"-jdk11-workaround",
"-max-version", strconv.Itoa(VersionTLS12),
diff --git a/src/ssl/test/runner/ticket.go b/src/ssl/test/runner/ticket.go
index 10ac54f..af87547 100644
--- a/src/ssl/test/runner/ticket.go
+++ b/src/ssl/test/runner/ticket.go
@@ -10,7 +10,6 @@
"crypto/hmac"
"crypto/sha256"
"crypto/subtle"
- "encoding/binary"
"errors"
"io"
"time"
@@ -66,91 +65,49 @@
}
func (s *sessionState) unmarshal(data []byte) bool {
- if len(data) < 8 {
+ reader := byteReader(data)
+ var numCerts uint16
+ if !reader.readU16(&s.vers) ||
+ !reader.readU16(&s.cipherSuite) ||
+ !reader.readU16LengthPrefixedBytes(&s.masterSecret) ||
+ !reader.readU16LengthPrefixedBytes(&s.handshakeHash) ||
+ !reader.readU16(&numCerts) {
return false
}
- s.vers = uint16(data[0])<<8 | uint16(data[1])
- s.cipherSuite = uint16(data[2])<<8 | uint16(data[3])
- masterSecretLen := int(data[4])<<8 | int(data[5])
- data = data[6:]
- if len(data) < masterSecretLen {
- return false
- }
-
- s.masterSecret = data[:masterSecretLen]
- data = data[masterSecretLen:]
-
- if len(data) < 2 {
- return false
- }
-
- handshakeHashLen := int(data[0])<<8 | int(data[1])
- data = data[2:]
- if len(data) < handshakeHashLen {
- return false
- }
-
- s.handshakeHash = data[:handshakeHashLen]
- data = data[handshakeHashLen:]
-
- if len(data) < 2 {
- return false
- }
-
- numCerts := int(data[0])<<8 | int(data[1])
- data = data[2:]
-
- s.certificates = make([][]byte, numCerts)
+ s.certificates = make([][]byte, int(numCerts))
for i := range s.certificates {
- if len(data) < 4 {
+ if !reader.readU32LengthPrefixedBytes(&s.certificates[i]) {
return false
}
- certLen := int(data[0])<<24 | int(data[1])<<16 | int(data[2])<<8 | int(data[3])
- data = data[4:]
- if certLen < 0 {
- return false
- }
- if len(data) < certLen {
- return false
- }
- s.certificates[i] = data[:certLen]
- data = data[certLen:]
}
- if len(data) < 1 {
+ var extendedMasterSecret uint8
+ if !reader.readU8(&extendedMasterSecret) {
return false
}
-
- s.extendedMasterSecret = false
- if data[0] == 1 {
+ if extendedMasterSecret == 0 {
+ s.extendedMasterSecret = false
+ } else if extendedMasterSecret == 1 {
s.extendedMasterSecret = true
+ } else {
+ return false
}
- data = data[1:]
if s.vers >= VersionTLS13 {
- if len(data) < 24 {
+ var ticketCreationTime, ticketExpiration uint64
+ if !reader.readU64(&ticketCreationTime) ||
+ !reader.readU64(&ticketExpiration) ||
+ !reader.readU32(&s.ticketFlags) ||
+ !reader.readU32(&s.ticketAgeAdd) {
return false
}
- s.ticketCreationTime = time.Unix(0, int64(binary.BigEndian.Uint64(data)))
- data = data[8:]
- s.ticketExpiration = time.Unix(0, int64(binary.BigEndian.Uint64(data)))
- data = data[8:]
- s.ticketFlags = binary.BigEndian.Uint32(data)
- data = data[4:]
- s.ticketAgeAdd = binary.BigEndian.Uint32(data)
- data = data[4:]
+ s.ticketCreationTime = time.Unix(0, int64(ticketCreationTime))
+ s.ticketExpiration = time.Unix(0, int64(ticketExpiration))
}
- earlyALPNLen := int(data[0])<<8 | int(data[1])
- data = data[2:]
- if len(data) < earlyALPNLen {
- return false
- }
- s.earlyALPN = data[:earlyALPNLen]
- data = data[earlyALPNLen:]
-
- if len(data) > 0 {
+ if !reader.readU16LengthPrefixedBytes(&s.earlyALPN) ||
+ len(reader) > 0 {
return false
}
diff --git a/src/ssl/tls13_both.cc b/src/ssl/tls13_both.cc
index 93e2f6a..c6bc2b1 100644
--- a/src/ssl/tls13_both.cc
+++ b/src/ssl/tls13_both.cc
@@ -244,8 +244,7 @@
uint8_t alert = SSL_AD_DECODE_ERROR;
if (!ssl_parse_extensions(&extensions, &alert, ext_types,
- OPENSSL_ARRAY_SIZE(ext_types),
- 0 /* reject unknown */)) {
+ /*ignore_unknown=*/false)) {
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
return false;
}
diff --git a/src/ssl/tls13_client.cc b/src/ssl/tls13_client.cc
index cb379b0..8cadd73 100644
--- a/src/ssl/tls13_client.cc
+++ b/src/ssl/tls13_client.cc
@@ -172,8 +172,7 @@
uint8_t alert = SSL_AD_DECODE_ERROR;
if (!ssl_parse_extensions(&extensions, &alert, ext_types,
- OPENSSL_ARRAY_SIZE(ext_types),
- 0 /* reject unknown */)) {
+ /*ignore_unknown=*/false)) {
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
return ssl_hs_error;
}
@@ -338,8 +337,7 @@
uint8_t alert = SSL_AD_DECODE_ERROR;
if (!ssl_parse_extensions(&extensions, &alert, ext_types,
- OPENSSL_ARRAY_SIZE(ext_types),
- 0 /* reject unknown */)) {
+ /*ignore_unknown=*/false)) {
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
return ssl_hs_error;
}
@@ -568,8 +566,7 @@
!CBS_get_u16_length_prefixed(&body, &extensions) ||
CBS_len(&body) != 0 ||
!ssl_parse_extensions(&extensions, &alert, ext_types,
- OPENSSL_ARRAY_SIZE(ext_types),
- 1 /* accept unknown */) ||
+ /*ignore_unknown=*/true) ||
(have_ca && CBS_len(&ca) == 0) ||
!have_sigalgs ||
!CBS_get_u16_length_prefixed(&sigalgs,
@@ -989,8 +986,7 @@
uint8_t alert = SSL_AD_DECODE_ERROR;
if (!ssl_parse_extensions(&extensions, &alert, ext_types,
- OPENSSL_ARRAY_SIZE(ext_types),
- 1 /* ignore unknown */)) {
+ /*ignore_unknown=*/true)) {
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
return nullptr;
}
diff --git a/src/ssl/tls13_server.cc b/src/ssl/tls13_server.cc
index 0105f1c..716b7dc 100644
--- a/src/ssl/tls13_server.cc
+++ b/src/ssl/tls13_server.cc
@@ -431,6 +431,15 @@
return ssl_hs_error;
}
+ // Copy the QUIC early data context to the session.
+ if (ssl->enable_early_data && ssl->quic_method) {
+ if (!hs->new_session->quic_early_data_context.CopyFrom(
+ hs->config->quic_early_data_context)) {
+ ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+ return ssl_hs_error;
+ }
+ }
+
if (ssl->ctx->dos_protection_cb != NULL &&
ssl->ctx->dos_protection_cb(&client_hello) == 0) {
// Connection rejected for DOS reasons.
diff --git a/src/tool/speed.cc b/src/tool/speed.cc
index af81a60..5d724e7 100644
--- a/src/tool/speed.cc
+++ b/src/tool/speed.cc
@@ -984,11 +984,12 @@
return true;
}
-static PMBTOKEN_PRETOKEN *pmbtoken_pretoken_dup(PMBTOKEN_PRETOKEN *in) {
- PMBTOKEN_PRETOKEN *out =
- (PMBTOKEN_PRETOKEN *)OPENSSL_malloc(sizeof(PMBTOKEN_PRETOKEN));
+static TRUST_TOKEN_PRETOKEN *trust_token_pretoken_dup(
+ TRUST_TOKEN_PRETOKEN *in) {
+ TRUST_TOKEN_PRETOKEN *out =
+ (TRUST_TOKEN_PRETOKEN *)OPENSSL_malloc(sizeof(TRUST_TOKEN_PRETOKEN));
if (out) {
- OPENSSL_memcpy(out, in, sizeof(PMBTOKEN_PRETOKEN));
+ OPENSSL_memcpy(out, in, sizeof(TRUST_TOKEN_PRETOKEN));
}
return out;
}
@@ -1059,9 +1060,9 @@
&msg_len, batchsize);
OPENSSL_free(issue_msg);
// Clear pretokens.
- sk_PMBTOKEN_PRETOKEN_pop_free(client->pretokens,
- PMBTOKEN_PRETOKEN_free);
- client->pretokens = sk_PMBTOKEN_PRETOKEN_new_null();
+ sk_TRUST_TOKEN_PRETOKEN_pop_free(client->pretokens,
+ TRUST_TOKEN_PRETOKEN_free);
+ client->pretokens = sk_TRUST_TOKEN_PRETOKEN_new_null();
return ok;
})) {
fprintf(stderr, "TRUST_TOKEN_CLIENT_begin_issuance failed.\n");
@@ -1078,9 +1079,10 @@
}
bssl::UniquePtr<uint8_t> free_issue_msg(issue_msg);
- bssl::UniquePtr<STACK_OF(PMBTOKEN_PRETOKEN)> pretokens(
- sk_PMBTOKEN_PRETOKEN_deep_copy(client->pretokens, pmbtoken_pretoken_dup,
- PMBTOKEN_PRETOKEN_free));
+ bssl::UniquePtr<STACK_OF(TRUST_TOKEN_PRETOKEN)> pretokens(
+ sk_TRUST_TOKEN_PRETOKEN_deep_copy(client->pretokens,
+ trust_token_pretoken_dup,
+ TRUST_TOKEN_PRETOKEN_free));
if (!TimeFunction(&results, [&]() -> bool {
uint8_t *issue_resp = NULL;
@@ -1116,8 +1118,9 @@
issue_resp, resp_len));
// Reset pretokens.
- client->pretokens = sk_PMBTOKEN_PRETOKEN_deep_copy(
- pretokens.get(), pmbtoken_pretoken_dup, PMBTOKEN_PRETOKEN_free);
+ client->pretokens = sk_TRUST_TOKEN_PRETOKEN_deep_copy(
+ pretokens.get(), trust_token_pretoken_dup,
+ TRUST_TOKEN_PRETOKEN_free);
return !!tokens;
})) {
fprintf(stderr, "TRUST_TOKEN_CLIENT_finish_issuance failed.\n");
@@ -1203,9 +1206,9 @@
if (!TimeFunction(&results, [&]() -> bool {
uint8_t *srr = NULL, *sig = NULL;
size_t srr_len, sig_len;
- int ok = TRUST_TOKEN_CLIENT_finish_redemption(client.get(), &srr,
- &srr_len, &sig, &sig_len,
- redeem_resp, resp_len);
+ int ok = TRUST_TOKEN_CLIENT_finish_redemption(
+ client.get(), &srr, &srr_len, &sig, &sig_len, redeem_resp,
+ redeem_resp_len);
OPENSSL_free(srr);
OPENSSL_free(sig);
return ok;
@@ -1352,7 +1355,15 @@
!SpeedTrustToken("TrustToken-Exp1-Batch1", TRUST_TOKEN_experiment_v1(), 1,
selected) ||
!SpeedTrustToken("TrustToken-Exp1-Batch10", TRUST_TOKEN_experiment_v1(),
- 10, selected)) {
+ 10, selected) ||
+ !SpeedTrustToken("TrustToken-Exp2VOPRF-Batch1",
+ TRUST_TOKEN_experiment_v2_voprf(), 1, selected) ||
+ !SpeedTrustToken("TrustToken-Exp2VOPRF-Batch10",
+ TRUST_TOKEN_experiment_v2_voprf(), 10, selected) ||
+ !SpeedTrustToken("TrustToken-Exp2PMB-Batch1",
+ TRUST_TOKEN_experiment_v2_pmb(), 1, selected) ||
+ !SpeedTrustToken("TrustToken-Exp2PMB-Batch10",
+ TRUST_TOKEN_experiment_v2_pmb(), 10, selected)) {
return false;
}
if (g_print_json) {
diff --git a/src/util/fipstools/acvp/ACVP.md b/src/util/fipstools/acvp/ACVP.md
index ddae4ed..71501de 100644
--- a/src/util/fipstools/acvp/ACVP.md
+++ b/src/util/fipstools/acvp/ACVP.md
@@ -13,14 +13,14 @@
{
"ACVPServer": "https://demo.acvts.nist.gov/",
"CertPEMFile": "certificate_from_nist.pem",
- "PrivateKeyDERFile": "your_private_key.key",
+ "PrivateKeyFile": "your_private_key.key",
"TOTPSecret": "<base64 from NIST goes here>",
"SessionTokensCache": "~/.cache/acvp-session-tokens",
"LogFile": "log"
}
```
-NIST's ACVP servers use both TLS client certificates and TOTP for authentication. When registering with NIST, they'll sign a CSR and return a certificate in PEM format, which is pointed to be `CertPEMFile`. The corresponding PKCS#1, DER-encoded private key is expected in `PrivateKeyDERFile`. Lastly, NIST will provide a file that contains the base64-encoded TOTP seed, which must be pasted in as the value of `TOTPSecret`.
+NIST's ACVP servers use both TLS client certificates and TOTP for authentication. When registering with NIST, they'll sign a CSR and return a certificate in PEM format, which is pointed to be `CertPEMFile`. The corresponding private key is expected in `PrivateKeyFile`. Lastly, NIST will provide a file that contains the base64-encoded TOTP seed, which must be pasted in as the value of `TOTPSecret`.
NIST's ACVP server provides special access tokens for each test session and test sessions can _only_ be accessed via those tokens. The reasoning behind this is unclear but this client can, optionally, keep records of these access tokens in the directory named by `SessionTokensCache`. If that directory name begins with `~/` then that prefix will be replaced with the value of `$HOME`.
diff --git a/src/util/fipstools/acvp/acvptool/acvp.go b/src/util/fipstools/acvp/acvptool/acvp.go
index 4dec04f..3522473 100644
--- a/src/util/fipstools/acvp/acvptool/acvp.go
+++ b/src/util/fipstools/acvp/acvptool/acvp.go
@@ -17,6 +17,7 @@
import (
"bufio"
"bytes"
+ "crypto"
"crypto/hmac"
"crypto/sha256"
"crypto/x509"
@@ -45,11 +46,13 @@
configFilename = flag.String("config", "config.json", "Location of the configuration JSON file")
jsonInputFile = flag.String("json", "", "Location of a vector-set input file")
runFlag = flag.String("run", "", "Name of primitive to run tests for")
+ fetchFlag = flag.String("fetch", "", "Name of primitive to fetch vectors for")
wrapperPath = flag.String("wrapper", "../../../../build/util/fipstools/acvp/modulewrapper/modulewrapper", "Path to the wrapper binary")
)
type Config struct {
CertPEMFile string
+ PrivateKeyFile string
PrivateKeyDERFile string
TOTPSecret string
ACVPServer string
@@ -267,7 +270,7 @@
}
totpSecret, err := base64.StdEncoding.DecodeString(config.TOTPSecret)
if err != nil {
- log.Fatalf("Failed to decode TOTP secret from config file: %s", err)
+ log.Fatalf("Failed to base64-decode TOTP secret from config file: %s. (Note that the secret _itself_ should be in the config, not the name of a file that contains it.)", err)
}
if len(config.CertPEMFile) == 0 {
@@ -280,17 +283,35 @@
block, _ := pem.Decode(certPEM)
certDER := block.Bytes
- if len(config.PrivateKeyDERFile) == 0 {
- log.Fatal("Config file missing PrivateKeyDERFile")
+ if len(config.PrivateKeyDERFile) == 0 && len(config.PrivateKeyFile) == 0 {
+ log.Fatal("Config file missing PrivateKeyDERFile and PrivateKeyFile")
}
- keyDER, err := ioutil.ReadFile(config.PrivateKeyDERFile)
- if err != nil {
- log.Fatalf("failed to read private key from %q: %s", config.PrivateKeyDERFile, err)
+ if len(config.PrivateKeyDERFile) != 0 && len(config.PrivateKeyFile) != 0 {
+ log.Fatal("Config file has both PrivateKeyDERFile and PrivateKeyFile. Can only have one.")
+ }
+ privateKeyFile := config.PrivateKeyDERFile
+ if len(config.PrivateKeyFile) > 0 {
+ privateKeyFile = config.PrivateKeyFile
}
- certKey, err := x509.ParsePKCS1PrivateKey(keyDER)
+ keyBytes, err := ioutil.ReadFile(privateKeyFile)
if err != nil {
- log.Fatalf("failed to parse private key from %q: %s", config.PrivateKeyDERFile, err)
+ log.Fatalf("failed to read private key from %q: %s", privateKeyFile, err)
+ }
+
+ var keyDER []byte
+ pemBlock, _ := pem.Decode(keyBytes)
+ if pemBlock != nil {
+ keyDER = pemBlock.Bytes
+ } else {
+ keyDER = keyBytes
+ }
+
+ var certKey crypto.PrivateKey
+ if certKey, err = x509.ParsePKCS1PrivateKey(keyDER); err != nil {
+ if certKey, err = x509.ParsePKCS8PrivateKey(keyDER); err != nil {
+ log.Fatalf("failed to parse private key from %q: %s", privateKeyFile, err)
+ }
}
var middle Middle
@@ -331,9 +352,19 @@
os.Exit(0)
}
- runAlgos := make(map[string]bool)
+ var requestedAlgosFlag string
+ if len(*runFlag) > 0 && len(*fetchFlag) > 0 {
+ log.Fatalf("cannot specify both -run and -fetch")
+ }
if len(*runFlag) > 0 {
- for _, substr := range strings.Split(*runFlag, ",") {
+ requestedAlgosFlag = *runFlag
+ } else {
+ requestedAlgosFlag = *fetchFlag
+ }
+
+ runAlgos := make(map[string]bool)
+ if len(requestedAlgosFlag) > 0 {
+ for _, substr := range strings.Split(requestedAlgosFlag, ",") {
runAlgos[substr] = false
}
}
@@ -389,7 +420,7 @@
log.Fatalf("failed to login: %s", err)
}
- if len(*runFlag) == 0 {
+ if len(requestedAlgosFlag) == 0 {
if interactiveModeSupported {
runInteractive(server, config)
} else {
@@ -423,6 +454,15 @@
log.Printf("Have vector sets %v", result.VectorSetURLs)
+ if len(*fetchFlag) > 0 {
+ os.Stdout.WriteString("[\n")
+ json.NewEncoder(os.Stdout).Encode(map[string]interface{}{
+ "url": url,
+ "vectorSetUrls": result.VectorSetURLs,
+ "time": time.Now().Format(time.RFC3339),
+ })
+ }
+
for _, setURL := range result.VectorSetURLs {
firstTime := true
for {
@@ -450,6 +490,12 @@
continue
}
+ if len(*fetchFlag) > 0 {
+ os.Stdout.WriteString(",\n")
+ os.Stdout.Write(vectorsBytes)
+ break
+ }
+
replyGroups, err := middle.Process(vectors.Algo, vectorsBytes)
if err != nil {
log.Printf("Failed: %s", err)
@@ -535,6 +581,11 @@
}
}
+ if len(*fetchFlag) > 0 {
+ os.Stdout.WriteString("]\n")
+ os.Exit(0)
+ }
+
FetchResults:
for {
var results acvp.SessionResults
diff --git a/src/util/fipstools/acvp/acvptool/acvp/acvp.go b/src/util/fipstools/acvp/acvptool/acvp/acvp.go
index 52d7488..55d2f0b 100644
--- a/src/util/fipstools/acvp/acvptool/acvp/acvp.go
+++ b/src/util/fipstools/acvp/acvptool/acvp/acvp.go
@@ -89,7 +89,7 @@
return conn, err
},
},
- Timeout: 10 * time.Second,
+ Timeout: 30 * time.Second,
}
return &Server{client: client, prefix: prefix, totpFunc: totp, PrefixTokens: make(map[string]string)}
diff --git a/src/util/fipstools/acvp/acvptool/subprocess/aead.go b/src/util/fipstools/acvp/acvptool/subprocess/aead.go
new file mode 100644
index 0000000..e6585d1
--- /dev/null
+++ b/src/util/fipstools/acvp/acvptool/subprocess/aead.go
@@ -0,0 +1,207 @@
+// Copyright (c) 2020, Google Inc.
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+package subprocess
+
+import (
+ "encoding/hex"
+ "encoding/json"
+ "fmt"
+)
+
+// aead implements an ACVP algorithm by making requests to the subprocess
+// to encrypt and decrypt with an AEAD.
+type aead struct {
+ algo string
+ tagMergedWithCiphertext bool
+}
+
+type aeadVectorSet struct {
+ Groups []aeadTestGroup `json:"testGroups"`
+}
+
+type aeadTestGroup struct {
+ ID uint64 `json:"tgId"`
+ Type string `json:"testType"`
+ Direction string `json:"direction"`
+ KeyBits int `json:"keyLen"`
+ TagBits int `json:"tagLen"`
+ Tests []struct {
+ ID uint64 `json:"tcId"`
+ PlaintextHex string `json:"pt"`
+ CiphertextHex string `json:"ct"`
+ IVHex string `json:"iv"`
+ KeyHex string `json:"key"`
+ AADHex string `json:"aad"`
+ TagHex string `json:"tag"`
+ } `json:"tests"`
+}
+
+type aeadTestGroupResponse struct {
+ ID uint64 `json:"tgId"`
+ Tests []aeadTestResponse `json:"tests"`
+}
+
+type aeadTestResponse struct {
+ ID uint64 `json:"tcId"`
+ CiphertextHex *string `json:"ct,omitempty"`
+ TagHex string `json:"tag,omitempty"`
+ PlaintextHex *string `json:"pt,omitempty"`
+ Passed *bool `json:"testPassed,omitempty"`
+}
+
+func (a *aead) Process(vectorSet []byte, m Transactable) (interface{}, error) {
+ var parsed aeadVectorSet
+ if err := json.Unmarshal(vectorSet, &parsed); err != nil {
+ return nil, err
+ }
+
+ var ret []aeadTestGroupResponse
+ // See draft-celi-acvp-symmetric.html#table-6. (NIST no longer publish HTML
+ // versions of the ACVP documents. You can find fragments in
+ // https://github.com/usnistgov/ACVP.)
+ for _, group := range parsed.Groups {
+ response := aeadTestGroupResponse{
+ ID: group.ID,
+ }
+
+ var encrypt bool
+ switch group.Direction {
+ case "encrypt":
+ encrypt = true
+ case "decrypt":
+ encrypt = false
+ default:
+ return nil, fmt.Errorf("test group %d has unknown direction %q", group.ID, group.Direction)
+ }
+
+ op := a.algo + "/seal"
+ if !encrypt {
+ op = a.algo + "/open"
+ }
+
+ if group.KeyBits%8 != 0 || group.KeyBits < 0 {
+ return nil, fmt.Errorf("test group %d contains non-byte-multiple key length %d", group.ID, group.KeyBits)
+ }
+ keyBytes := group.KeyBits / 8
+
+ if group.TagBits%8 != 0 || group.TagBits < 0 {
+ return nil, fmt.Errorf("test group %d contains non-byte-multiple tag length %d", group.ID, group.TagBits)
+ }
+ tagBytes := group.TagBits / 8
+
+ for _, test := range group.Tests {
+ if len(test.KeyHex) != keyBytes*2 {
+ return nil, fmt.Errorf("test case %d/%d contains key %q of length %d, but expected %d-bit key", group.ID, test.ID, test.KeyHex, len(test.KeyHex), group.KeyBits)
+ }
+
+ key, err := hex.DecodeString(test.KeyHex)
+ if err != nil {
+ return nil, fmt.Errorf("failed to decode key in test case %d/%d: %s", group.ID, test.ID, err)
+ }
+
+ nonce, err := hex.DecodeString(test.IVHex)
+ if err != nil {
+ return nil, fmt.Errorf("failed to decode nonce in test case %d/%d: %s", group.ID, test.ID, err)
+ }
+
+ aad, err := hex.DecodeString(test.AADHex)
+ if err != nil {
+ return nil, fmt.Errorf("failed to decode aad in test case %d/%d: %s", group.ID, test.ID, err)
+ }
+
+ var inputHex, otherHex string
+ if encrypt {
+ inputHex, otherHex = test.PlaintextHex, test.CiphertextHex
+ } else {
+ inputHex, otherHex = test.CiphertextHex, test.PlaintextHex
+ }
+
+ if len(otherHex) != 0 {
+ return nil, fmt.Errorf("test case %d/%d has unexpected plain/ciphertext input", group.ID, test.ID)
+ }
+
+ input, err := hex.DecodeString(inputHex)
+ if err != nil {
+ return nil, fmt.Errorf("failed to decode hex in test case %d/%d: %s", group.ID, test.ID, err)
+ }
+
+ var tag []byte
+ if a.tagMergedWithCiphertext {
+ if len(test.TagHex) != 0 {
+ return nil, fmt.Errorf("test case %d/%d has unexpected tag input (should be merged into ciphertext)", group.ID, test.ID)
+ }
+ if !encrypt && len(input) < tagBytes {
+ return nil, fmt.Errorf("test case %d/%d has ciphertext shorter than the tag, but the tag should be included in it", group.ID, test.ID)
+ }
+ } else {
+ if !encrypt {
+ if tag, err = hex.DecodeString(test.TagHex); err != nil {
+ return nil, fmt.Errorf("failed to decode tag in test case %d/%d: %s", group.ID, test.ID, err)
+ }
+ if len(tag) != tagBytes {
+ return nil, fmt.Errorf("tag in test case %d/%d is %d bytes long, but should be %d", group.ID, test.ID, len(tag), tagBytes)
+ }
+ } else if len(test.TagHex) != 0 {
+ return nil, fmt.Errorf("test case %d/%d has unexpected tag input", group.ID, test.ID)
+ }
+ }
+
+ testResp := aeadTestResponse{ID: test.ID}
+
+ if encrypt {
+ result, err := m.Transact(op, 1, uint32le(uint32(tagBytes)), key, input, nonce, aad)
+ if err != nil {
+ return nil, err
+ }
+
+ if len(result[0]) < tagBytes {
+ return nil, fmt.Errorf("ciphertext from subprocess for test case %d/%d is shorter than the tag (%d vs %d)", group.ID, test.ID, len(result[0]), tagBytes)
+ }
+
+ if a.tagMergedWithCiphertext {
+ ciphertextHex := hex.EncodeToString(result[0])
+ testResp.CiphertextHex = &ciphertextHex
+ } else {
+ ciphertext := result[0][:len(result[0])-tagBytes]
+ ciphertextHex := hex.EncodeToString(ciphertext)
+ testResp.CiphertextHex = &ciphertextHex
+ tag := result[0][len(result[0])-tagBytes:]
+ testResp.TagHex = hex.EncodeToString(tag)
+ }
+ } else {
+ result, err := m.Transact(op, 2, uint32le(uint32(tagBytes)), key, append(input, tag...), nonce, aad)
+ if err != nil {
+ return nil, err
+ }
+
+ if len(result[0]) != 1 || (result[0][0]&0xfe) != 0 {
+ return nil, fmt.Errorf("invalid AEAD status result from subprocess")
+ }
+ passed := result[0][0] == 1
+ testResp.Passed = &passed
+ if passed {
+ plaintextHex := hex.EncodeToString(result[1])
+ testResp.PlaintextHex = &plaintextHex
+ }
+ }
+
+ response.Tests = append(response.Tests, testResp)
+ }
+
+ ret = append(ret, response)
+ }
+
+ return ret, nil
+}
diff --git a/src/util/fipstools/acvp/acvptool/subprocess/block.go b/src/util/fipstools/acvp/acvptool/subprocess/block.go
index 69a6517..fa933c6 100644
--- a/src/util/fipstools/acvp/acvptool/subprocess/block.go
+++ b/src/util/fipstools/acvp/acvptool/subprocess/block.go
@@ -20,12 +20,134 @@
"fmt"
)
+// aesKeyShuffle is the "AES Monte Carlo Key Shuffle" from the ACVP
+// specification.
+func aesKeyShuffle(key, result, prevResult []byte) {
+ switch len(key) {
+ case 16:
+ for i := range key {
+ key[i] ^= result[i]
+ }
+ case 24:
+ for i := 0; i < 8; i++ {
+ key[i] ^= prevResult[i+8]
+ }
+ for i := range result {
+ key[i+8] ^= result[i]
+ }
+ case 32:
+ for i, b := range prevResult {
+ key[i] ^= b
+ }
+ for i, b := range result {
+ key[i+16] ^= b
+ }
+ default:
+ panic("unhandled key length")
+ }
+}
+
+// IterateAES implements the "AES Monte Carlo Test - ECB mode" from the ACVP
+// specification.
+func IterateAES(transact func(n int, args ...[]byte) ([][]byte, error), encrypt bool, key, input, iv []byte) (mctResults []blockCipherMCTResult) {
+ for i := 0; i < 100; i++ {
+ var iteration blockCipherMCTResult
+ iteration.KeyHex = hex.EncodeToString(key)
+ if encrypt {
+ iteration.PlaintextHex = hex.EncodeToString(input)
+ } else {
+ iteration.CiphertextHex = hex.EncodeToString(input)
+ }
+
+ var result, prevResult []byte
+ for j := 0; j < 1000; j++ {
+ prevResult = input
+ result, err := transact(1, key, input)
+ if err != nil {
+ panic("block operation failed")
+ }
+ input = result[0]
+ }
+ result = input
+
+ if encrypt {
+ iteration.CiphertextHex = hex.EncodeToString(result)
+ } else {
+ iteration.PlaintextHex = hex.EncodeToString(result)
+ }
+
+ aesKeyShuffle(key, result, prevResult)
+ mctResults = append(mctResults, iteration)
+ }
+
+ return mctResults
+}
+
+// IterateAESCBC implements the "AES Monte Carlo Test - CBC mode" from the ACVP
+// specification.
+func IterateAESCBC(transact func(n int, args ...[]byte) ([][]byte, error), encrypt bool, key, input, iv []byte) (mctResults []blockCipherMCTResult) {
+ for i := 0; i < 100; i++ {
+ var iteration blockCipherMCTResult
+ iteration.KeyHex = hex.EncodeToString(key)
+ if encrypt {
+ iteration.PlaintextHex = hex.EncodeToString(input)
+ } else {
+ iteration.CiphertextHex = hex.EncodeToString(input)
+ }
+
+ var result, prevResult []byte
+ iteration.IVHex = hex.EncodeToString(iv)
+
+ var prevInput []byte
+ for j := 0; j < 1000; j++ {
+ prevResult = result
+ if j > 0 {
+ if encrypt {
+ iv = result
+ } else {
+ iv = prevInput
+ }
+ }
+
+ results, err := transact(1, key, input, iv)
+ if err != nil {
+ panic("block operation failed")
+ }
+ result = results[0]
+
+ prevInput = input
+ if j == 0 {
+ input = iv
+ } else {
+ input = prevResult
+ }
+ }
+
+ if encrypt {
+ iteration.CiphertextHex = hex.EncodeToString(result)
+ } else {
+ iteration.PlaintextHex = hex.EncodeToString(result)
+ }
+
+ aesKeyShuffle(key, result, prevResult)
+
+ iv = result
+ input = prevResult
+
+ mctResults = append(mctResults, iteration)
+ }
+
+ return mctResults
+}
+
// blockCipher implements an ACVP algorithm by making requests to the subprocess
// to encrypt and decrypt with a block cipher.
type blockCipher struct {
- algo string
- blockSize int
- hasIV bool
+ algo string
+ blockSize int
+ inputsAreBlockMultiples bool
+ hasIV bool
+ mctFunc func(transact func(n int, args ...[]byte) ([][]byte, error), encrypt bool, key, input, iv []byte) (result []blockCipherMCTResult)
}
type blockCipherVectorSet struct {
@@ -97,9 +219,12 @@
var mct bool
switch group.Type {
- case "AFT":
+ case "AFT", "CTR":
mct = false
case "MCT":
+ if b.mctFunc == nil {
+ return nil, fmt.Errorf("test group %d has type MCT which is unsupported for %q", group.ID, op)
+ }
mct = true
default:
return nil, fmt.Errorf("test group %d has unknown type %q", group.ID, group.Type)
@@ -110,6 +235,10 @@
}
keyBytes := group.KeyBits / 8
+ transact := func(n int, args ...[]byte) ([][]byte, error) {
+ return m.Transact(op, n, args...)
+ }
+
for _, test := range group.Tests {
if len(test.KeyHex) != keyBytes*2 {
return nil, fmt.Errorf("test case %d/%d contains key %q of length %d, but expected %d-bit key", group.ID, test.ID, test.KeyHex, len(test.KeyHex), group.KeyBits)
@@ -132,7 +261,7 @@
return nil, fmt.Errorf("failed to decode hex in test case %d/%d: %s", group.ID, test.ID, err)
}
- if len(input)%b.blockSize != 0 {
+ if b.inputsAreBlockMultiples && len(input)%b.blockSize != 0 {
return nil, fmt.Errorf("test case %d/%d has input of length %d, but expected multiple of %d", group.ID, test.ID, len(input), b.blockSize)
}
@@ -166,93 +295,7 @@
testResp.PlaintextHex = hex.EncodeToString(result[0])
}
} else {
- for i := 0; i < 100; i++ {
- var iteration blockCipherMCTResult
- iteration.KeyHex = hex.EncodeToString(key)
- if encrypt {
- iteration.PlaintextHex = hex.EncodeToString(input)
- } else {
- iteration.CiphertextHex = hex.EncodeToString(input)
- }
-
- var result, prevResult []byte
- if !b.hasIV {
- for j := 0; j < 1000; j++ {
- prevResult = input
- result, err := m.Transact(op, 1, key, input)
- if err != nil {
- panic("block operation failed")
- }
- input = result[0]
- }
- result = input
- } else {
- iteration.IVHex = hex.EncodeToString(iv)
-
- var prevInput []byte
- for j := 0; j < 1000; j++ {
- prevResult = result
- if j > 0 {
- if encrypt {
- iv = result
- } else {
- iv = prevInput
- }
- }
-
- results, err := m.Transact(op, 1, key, input, iv)
- if err != nil {
- panic("block operation failed")
- }
- result = results[0]
-
- prevInput = input
- if j == 0 {
- input = iv
- } else {
- input = prevResult
- }
- }
- }
-
- if encrypt {
- iteration.CiphertextHex = hex.EncodeToString(result)
- } else {
- iteration.PlaintextHex = hex.EncodeToString(result)
- }
-
- switch keyBytes {
- case 16:
- for i := range key {
- key[i] ^= result[i]
- }
- case 24:
- for i := 0; i < 8; i++ {
- key[i] ^= prevResult[i+8]
- }
- for i := range result {
- key[i+8] ^= result[i]
- }
- case 32:
- for i, b := range prevResult {
- key[i] ^= b
- }
- for i, b := range result {
- key[i+16] ^= b
- }
- default:
- panic("unhandled key length")
- }
-
- if !b.hasIV {
- input = result
- } else {
- iv = result
- input = prevResult
- }
-
- testResp.MCTResults = append(testResp.MCTResults, iteration)
- }
+ testResp.MCTResults = b.mctFunc(transact, encrypt, key, input, iv)
}
response.Tests = append(response.Tests, testResp)
diff --git a/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go b/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go
index 431c315..cfa300f 100644
--- a/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go
+++ b/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go
@@ -76,8 +76,13 @@
"SHA2-256": &hashPrimitive{"SHA2-256", 32},
"SHA2-384": &hashPrimitive{"SHA2-384", 48},
"SHA2-512": &hashPrimitive{"SHA2-512", 64},
- "ACVP-AES-ECB": &blockCipher{"AES", 16, false},
- "ACVP-AES-CBC": &blockCipher{"AES-CBC", 16, true},
+ "ACVP-AES-ECB": &blockCipher{"AES", 16, true, false, IterateAES},
+ "ACVP-AES-CBC": &blockCipher{"AES-CBC", 16, true, true, IterateAESCBC},
+ "ACVP-AES-CTR": &blockCipher{"AES-CTR", 16, false, true, nil},
+ "ACVP-AES-GCM": &aead{"AES-GCM", false},
+ "ACVP-AES-CCM": &aead{"AES-CCM", true},
+ "ACVP-AES-KW": &aead{"AES-KW", false},
+ "ACVP-AES-KWP": &aead{"AES-KWP", false},
"HMAC-SHA-1": &hmacPrimitive{"HMAC-SHA-1", 20},
"HMAC-SHA2-224": &hmacPrimitive{"HMAC-SHA2-224", 28},
"HMAC-SHA2-256": &hmacPrimitive{"HMAC-SHA2-256", 32},
diff --git a/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc b/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc
index 5de8b5d..ff5ef6c 100644
--- a/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc
+++ b/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc
@@ -17,11 +17,13 @@
#include <assert.h>
#include <errno.h>
+#include <limits.h>
#include <string.h>
#include <sys/uio.h>
#include <unistd.h>
#include <cstdarg>
+#include <openssl/aead.h>
#include <openssl/aes.h>
#include <openssl/bn.h>
#include <openssl/cmac.h>
@@ -78,14 +80,19 @@
iovs[0].iov_base = nums;
iovs[0].iov_len = sizeof(uint32_t) * (1 + spans.size());
+ size_t num_iov = 1;
for (size_t i = 0; i < spans.size(); i++) {
const auto &span = spans[i];
nums[i + 1] = span.size();
- iovs[i + 1].iov_base = const_cast<uint8_t *>(span.data());
- iovs[i + 1].iov_len = span.size();
+ if (span.size() == 0) {
+ continue;
+ }
+
+ iovs[num_iov].iov_base = const_cast<uint8_t *>(span.data());
+ iovs[num_iov].iov_len = span.size();
+ num_iov++;
}
- const size_t num_iov = spans.size() + 1;
size_t iov_done = 0;
while (iov_done < num_iov) {
ssize_t r;
@@ -98,7 +105,7 @@
}
size_t written = r;
- for (size_t i = iov_done; written > 0 && i < num_iov; i++) {
+ for (size_t i = iov_done; i < num_iov && written > 0; i++) {
iovec &iov = iovs[i];
size_t done = written;
@@ -166,12 +173,84 @@
"keyLen": [128, 192, 256]
},
{
+ "algorithm": "ACVP-AES-CTR",
+ "revision": "1.0",
+ "direction": ["encrypt", "decrypt"],
+ "keyLen": [128, 192, 256],
+ "payloadLen": [{
+ "min": 8, "max": 128, "increment": 8
+ }],
+ "incrementalCounter": true,
+ "overflowCounter": true,
+ "performCounterTests": true
+ },
+ {
"algorithm": "ACVP-AES-CBC",
"revision": "1.0",
"direction": ["encrypt", "decrypt"],
"keyLen": [128, 192, 256]
},
{
+ "algorithm": "ACVP-AES-GCM",
+ "revision": "1.0",
+ "direction": ["encrypt", "decrypt"],
+ "keyLen": [128, 192, 256],
+ "payloadLen": [{
+ "min": 0, "max": 256, "increment": 8
+ }],
+ "aadLen": [{
+ "min": 0, "max": 256, "increment": 8
+ }],
+ "tagLen": [128],
+ "ivLen": [96],
+ "ivGen": "external"
+ },
+ {
+ "algorithm": "ACVP-AES-KW",
+ "revision": "1.0",
+ "direction": [
+ "encrypt",
+ "decrypt"
+ ],
+ "kwCipher": [
+ "cipher"
+ ],
+ "keyLen": [
+ 128, 192, 256
+ ],
+ "payloadLen": [{"min": 128, "max": 1024, "increment": 64}]
+ },
+ {
+ "algorithm": "ACVP-AES-KWP",
+ "revision": "1.0",
+ "direction": [
+ "encrypt",
+ "decrypt"
+ ],
+ "kwCipher": [
+ "cipher"
+ ],
+ "keyLen": [
+ 128, 192, 256
+ ],
+ "payloadLen": [{"min": 8, "max": 1024, "increment": 8}]
+ },
+ {
+ "algorithm": "ACVP-AES-CCM",
+ "revision": "1.0",
+ "direction": [
+ "encrypt",
+ "decrypt"
+ ],
+ "keyLen": [
+ 128
+ ],
+ "payloadLen": [{"min": 0, "max": 256, "increment": 8}],
+ "ivLen": [104],
+ "tagLen": [32],
+ "aadLen": [{"min": 0, "max": 1024, "increment": 8}]
+ },
+ {
"algorithm": "HMAC-SHA-1",
"revision": "1.0",
"keyLen": [{
@@ -374,6 +453,273 @@
return WriteReply(STDOUT_FILENO, Span<const uint8_t>(out));
}
+static bool AES_CTR(const Span<const uint8_t> args[]) {
+ AES_KEY key;
+ if (AES_set_encrypt_key(args[0].data(), args[0].size() * 8, &key) != 0) {
+ return false;
+ }
+ if (args[2].size() != AES_BLOCK_SIZE) {
+ return false;
+ }
+ uint8_t iv[AES_BLOCK_SIZE];
+ memcpy(iv, args[2].data(), AES_BLOCK_SIZE);
+
+ std::vector<uint8_t> out;
+ out.resize(args[1].size());
+ unsigned num = 0;
+ uint8_t ecount_buf[AES_BLOCK_SIZE];
+ AES_ctr128_encrypt(args[1].data(), out.data(), args[1].size(), &key, iv,
+ ecount_buf, &num);
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(out));
+}
+
+static bool AESGCMSetup(EVP_AEAD_CTX *ctx, Span<const uint8_t> tag_len_span,
+ Span<const uint8_t> key) {
+ uint32_t tag_len_32;
+ if (tag_len_span.size() != sizeof(tag_len_32)) {
+ fprintf(stderr, "Tag size value is %u bytes, not an uint32_t\n",
+ static_cast<unsigned>(tag_len_span.size()));
+ return false;
+ }
+ memcpy(&tag_len_32, tag_len_span.data(), sizeof(tag_len_32));
+
+ const EVP_AEAD *aead;
+ switch (key.size()) {
+ case 16:
+ aead = EVP_aead_aes_128_gcm();
+ break;
+ case 24:
+ aead = EVP_aead_aes_192_gcm();
+ break;
+ case 32:
+ aead = EVP_aead_aes_256_gcm();
+ break;
+ default:
+ fprintf(stderr, "Bad AES-GCM key length %u\n",
+ static_cast<unsigned>(key.size()));
+ return false;
+ }
+
+ if (!EVP_AEAD_CTX_init(ctx, aead, key.data(), key.size(), tag_len_32,
+ nullptr)) {
+ fprintf(stderr, "Failed to setup AES-GCM with tag length %u\n",
+ static_cast<unsigned>(tag_len_32));
+ return false;
+ }
+
+ return true;
+}
+
+static bool AESCCMSetup(EVP_AEAD_CTX *ctx, Span<const uint8_t> tag_len_span,
+ Span<const uint8_t> key) {
+ uint32_t tag_len_32;
+ if (tag_len_span.size() != sizeof(tag_len_32)) {
+ fprintf(stderr, "Tag size value is %u bytes, not an uint32_t\n",
+ static_cast<unsigned>(tag_len_span.size()));
+ return false;
+ }
+ memcpy(&tag_len_32, tag_len_span.data(), sizeof(tag_len_32));
+ if (tag_len_32 != 4) {
+ fprintf(stderr, "AES-CCM only supports 4-byte tags, but %u was requested\n",
+ static_cast<unsigned>(tag_len_32));
+ return false;
+ }
+
+ if (key.size() != 16) {
+ fprintf(stderr,
+ "AES-CCM only supports 128-bit keys, but %u bits were given\n",
+ static_cast<unsigned>(key.size() * 8));
+ return false;
+ }
+
+ if (!EVP_AEAD_CTX_init(ctx, EVP_aead_aes_128_ccm_bluetooth(), key.data(),
+ key.size(), tag_len_32, nullptr)) {
+ fprintf(stderr, "Failed to setup AES-CCM with tag length %u\n",
+ static_cast<unsigned>(tag_len_32));
+ return false;
+ }
+
+ return true;
+}
+
+template <bool (*SetupFunc)(EVP_AEAD_CTX *ctx, Span<const uint8_t> tag_len_span,
+ Span<const uint8_t> key)>
+static bool AEADSeal(const Span<const uint8_t> args[]) {
+ Span<const uint8_t> tag_len_span = args[0];
+ Span<const uint8_t> key = args[1];
+ Span<const uint8_t> plaintext = args[2];
+ Span<const uint8_t> nonce = args[3];
+ Span<const uint8_t> ad = args[4];
+
+ bssl::ScopedEVP_AEAD_CTX ctx;
+ if (!SetupFunc(ctx.get(), tag_len_span, key)) {
+ return false;
+ }
+
+ if (EVP_AEAD_MAX_OVERHEAD + plaintext.size() < EVP_AEAD_MAX_OVERHEAD) {
+ return false;
+ }
+ std::vector<uint8_t> out(EVP_AEAD_MAX_OVERHEAD + plaintext.size());
+
+ size_t out_len;
+ if (!EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(),
+ nonce.data(), nonce.size(), plaintext.data(),
+ plaintext.size(), ad.data(), ad.size())) {
+ return false;
+ }
+
+ out.resize(out_len);
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(out));
+}
+
+template <bool (*SetupFunc)(EVP_AEAD_CTX *ctx, Span<const uint8_t> tag_len_span,
+ Span<const uint8_t> key)>
+static bool AEADOpen(const Span<const uint8_t> args[]) {
+ Span<const uint8_t> tag_len_span = args[0];
+ Span<const uint8_t> key = args[1];
+ Span<const uint8_t> ciphertext = args[2];
+ Span<const uint8_t> nonce = args[3];
+ Span<const uint8_t> ad = args[4];
+
+ bssl::ScopedEVP_AEAD_CTX ctx;
+ if (!SetupFunc(ctx.get(), tag_len_span, key)) {
+ return false;
+ }
+
+ std::vector<uint8_t> out(ciphertext.size());
+ size_t out_len;
+ uint8_t success_flag[1] = {0};
+
+ if (!EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
+ nonce.data(), nonce.size(), ciphertext.data(),
+ ciphertext.size(), ad.data(), ad.size())) {
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(success_flag),
+ Span<const uint8_t>());
+ }
+
+ out.resize(out_len);
+ success_flag[0] = 1;
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(success_flag),
+ Span<const uint8_t>(out));
+}
+
+static bool AESPaddedKeyWrapSetup(AES_KEY *out, bool decrypt,
+ Span<const uint8_t> key) {
+ if ((decrypt ? AES_set_decrypt_key : AES_set_encrypt_key)(
+ key.data(), key.size() * 8, out) != 0) {
+ fprintf(stderr, "Invalid AES key length for AES-KW(P): %u\n",
+ static_cast<unsigned>(key.size()));
+ return false;
+ }
+ return true;
+}
+
+static bool AESKeyWrapSetup(AES_KEY *out, bool decrypt, Span<const uint8_t> key,
+ Span<const uint8_t> input) {
+ if (!AESPaddedKeyWrapSetup(out, decrypt, key)) {
+ return false;
+ }
+
+ if (input.size() % 8) {
+ fprintf(stderr, "Invalid AES-KW input length: %u\n",
+ static_cast<unsigned>(input.size()));
+ return false;
+ }
+
+ return true;
+}
+
+static bool AESKeyWrapSeal(const Span<const uint8_t> args[]) {
+ Span<const uint8_t> key = args[1];
+ Span<const uint8_t> plaintext = args[2];
+
+ AES_KEY aes;
+ if (!AESKeyWrapSetup(&aes, /*decrypt=*/false, key, plaintext) ||
+ plaintext.size() > INT_MAX - 8) {
+ return false;
+ }
+
+ std::vector<uint8_t> out(plaintext.size() + 8);
+ if (AES_wrap_key(&aes, /*iv=*/nullptr, out.data(), plaintext.data(),
+ plaintext.size()) != static_cast<int>(out.size())) {
+ fprintf(stderr, "AES-KW failed\n");
+ return false;
+ }
+
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(out));
+}
+
+static bool AESKeyWrapOpen(const Span<const uint8_t> args[]) {
+ Span<const uint8_t> key = args[1];
+ Span<const uint8_t> ciphertext = args[2];
+
+ AES_KEY aes;
+ if (!AESKeyWrapSetup(&aes, /*decrypt=*/true, key, ciphertext) ||
+ ciphertext.size() < 8 ||
+ ciphertext.size() > INT_MAX) {
+ return false;
+ }
+
+ std::vector<uint8_t> out(ciphertext.size() - 8);
+ uint8_t success_flag[1] = {0};
+ if (AES_unwrap_key(&aes, /*iv=*/nullptr, out.data(), ciphertext.data(),
+ ciphertext.size()) != static_cast<int>(out.size())) {
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(success_flag),
+ Span<const uint8_t>());
+ }
+
+ success_flag[0] = 1;
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(success_flag),
+ Span<const uint8_t>(out));
+}
+
+static bool AESPaddedKeyWrapSeal(const Span<const uint8_t> args[]) {
+ Span<const uint8_t> key = args[1];
+ Span<const uint8_t> plaintext = args[2];
+
+ AES_KEY aes;
+ if (!AESPaddedKeyWrapSetup(&aes, /*decrypt=*/false, key) ||
+ plaintext.size() + 15 < 15) {
+ return false;
+ }
+
+ std::vector<uint8_t> out(plaintext.size() + 15);
+ size_t out_len;
+ if (!AES_wrap_key_padded(&aes, out.data(), &out_len, out.size(),
+ plaintext.data(), plaintext.size())) {
+ fprintf(stderr, "AES-KWP failed\n");
+ return false;
+ }
+
+ out.resize(out_len);
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(out));
+}
+
+static bool AESPaddedKeyWrapOpen(const Span<const uint8_t> args[]) {
+ Span<const uint8_t> key = args[1];
+ Span<const uint8_t> ciphertext = args[2];
+
+ AES_KEY aes;
+ if (!AESPaddedKeyWrapSetup(&aes, /*decrypt=*/true, key) ||
+ ciphertext.size() % 8) {
+ return false;
+ }
+
+ std::vector<uint8_t> out(ciphertext.size());
+ size_t out_len;
+ uint8_t success_flag[1] = {0};
+ if (!AES_unwrap_key_padded(&aes, out.data(), &out_len, out.size(),
+ ciphertext.data(), ciphertext.size())) {
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(success_flag),
+ Span<const uint8_t>());
+ }
+
+ success_flag[0] = 1;
+ out.resize(out_len);
+ return WriteReply(STDOUT_FILENO, Span<const uint8_t>(success_flag),
+ Span<const uint8_t>(out));
+}
+
template <const EVP_MD *HashFunc()>
static bool HMAC(const Span<const uint8_t> args[]) {
const EVP_MD *const md = HashFunc();
@@ -619,6 +965,16 @@
{"AES/decrypt", 2, AES<AES_set_decrypt_key, AES_decrypt>},
{"AES-CBC/encrypt", 3, AES_CBC<AES_set_encrypt_key, AES_ENCRYPT>},
{"AES-CBC/decrypt", 3, AES_CBC<AES_set_decrypt_key, AES_DECRYPT>},
+ {"AES-CTR/encrypt", 3, AES_CTR},
+ {"AES-CTR/decrypt", 3, AES_CTR},
+ {"AES-GCM/seal", 5, AEADSeal<AESGCMSetup>},
+ {"AES-GCM/open", 5, AEADOpen<AESGCMSetup>},
+ {"AES-KW/seal", 5, AESKeyWrapSeal},
+ {"AES-KW/open", 5, AESKeyWrapOpen},
+ {"AES-KWP/seal", 5, AESPaddedKeyWrapSeal},
+ {"AES-KWP/open", 5, AESPaddedKeyWrapOpen},
+ {"AES-CCM/seal", 5, AEADSeal<AESCCMSetup>},
+ {"AES-CCM/open", 5, AEADOpen<AESCCMSetup>},
{"HMAC-SHA-1", 2, HMAC<EVP_sha1>},
{"HMAC-SHA2-224", 2, HMAC<EVP_sha224>},
{"HMAC-SHA2-256", 2, HMAC<EVP_sha256>},
@@ -698,7 +1054,7 @@
offset += nums[i + 1];
}
- bool found = true;
+ bool found = false;
for (const auto &func : kFunctions) {
if (args[0].size() == strlen(func.name) &&
memcmp(args[0].data(), func.name, args[0].size()) == 0) {
@@ -710,6 +1066,7 @@
}
if (!func.handler(&args[1])) {
+ fprintf(stderr, "\'%s\' operation failed.\n", func.name);
return 4;
}