]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
key-exchange: Joint ke_test_vector format for DH and KEM
authorAndreas Steffen <andreas.steffen@strongswan.org>
Mon, 4 Nov 2019 21:22:47 +0000 (22:22 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Mon, 28 Aug 2023 17:36:23 +0000 (19:36 +0200)
Both Diffie-Hellman (DH) and Key Encapsulation Mechanism (KEM) based
key exchange methods use a common ke_test_vector format. The
set_seed() function is used to provide deterministic private key
material for the crypto tests.

21 files changed:
src/libstrongswan/crypto/crypto_tester.c
src/libstrongswan/crypto/crypto_tester.h
src/libstrongswan/crypto/key_exchange.h
src/libstrongswan/plugins/botan/botan_diffie_hellman.c
src/libstrongswan/plugins/botan/botan_ec_diffie_hellman.c
src/libstrongswan/plugins/botan/botan_x25519.c
src/libstrongswan/plugins/curve25519/curve25519_dh.c
src/libstrongswan/plugins/gcrypt/gcrypt_dh.c
src/libstrongswan/plugins/gmp/gmp_diffie_hellman.c
src/libstrongswan/plugins/openssl/openssl_diffie_hellman.c
src/libstrongswan/plugins/openssl/openssl_ec_diffie_hellman.c
src/libstrongswan/plugins/openssl/openssl_x_diffie_hellman.c
src/libstrongswan/plugins/test_vectors/test_vectors/curve25519.c
src/libstrongswan/plugins/test_vectors/test_vectors/curve448.c
src/libstrongswan/plugins/test_vectors/test_vectors/ecp.c
src/libstrongswan/plugins/test_vectors/test_vectors/ecpbp.c
src/libstrongswan/plugins/test_vectors/test_vectors/modp.c
src/libstrongswan/plugins/test_vectors/test_vectors/modpsub.c
src/libstrongswan/plugins/wolfssl/wolfssl_diffie_hellman.c
src/libstrongswan/plugins/wolfssl/wolfssl_ec_diffie_hellman.c
src/libstrongswan/plugins/wolfssl/wolfssl_x_diffie_hellman.c

index 5cd6ef4d09ee335f74075e94b1670f406f84901f..1ce2522b3099fafb5484293fe8956027bbff8ec1 100644 (file)
@@ -1656,8 +1656,8 @@ failure:
 static u_int bench_ke(private_crypto_tester_t *this,
                                          key_exchange_method_t method, ke_constructor_t create)
 {
-       chunk_t pub = chunk_empty, shared = chunk_empty;
-       key_exchange_t *ke;
+       chunk_t a_pub = chunk_empty, b_pub = chunk_empty, shared = chunk_empty;
+       key_exchange_t *a, *b;
        struct timespec start;
        u_int runs;
 
@@ -1665,108 +1665,134 @@ static u_int bench_ke(private_crypto_tester_t *this,
        start_timing(&start);
        while (end_timing(&start) < this->bench_time)
        {
-               ke = create(method);
-               if (!ke)
+               a = create(method);
+               b = create(method);
+               if (!a || !b)
                {
+                       DESTROY_IF(a);
+                       DESTROY_IF(b);
                        return 0;
                }
-               if (ke->get_public_key(ke, &pub) &&
-                       ke->set_public_key(ke, pub) &&
-                       ke->get_shared_secret(ke, &shared))
+               if (a->get_public_key(a, &a_pub) &&
+                       b->set_public_key(b,  a_pub) &&
+                       b->get_public_key(b, &b_pub) &&
+                       a->set_public_key(a,  b_pub) &&
+                       a->get_shared_secret(a, &shared))
                {
                        runs++;
                }
-               chunk_free(&pub);
+               chunk_free(&a_pub);
+               chunk_free(&b_pub);
                chunk_free(&shared);
-               ke->destroy(ke);
+               a->destroy(a);
+               b->destroy(b);
        }
        return runs;
 }
 
+static bool test_single_ke(key_exchange_method_t method, ke_test_vector_t *v,
+                                                  ke_constructor_t create)
+{
+       rng_t *entropy = NULL;
+       drbg_t *drbg = NULL;
+       key_exchange_t *a = NULL, *b = NULL;
+       chunk_t a_priv, b_priv, a_pub, b_pub, a_sec, b_sec;
+       bool success = FALSE;
+
+       a_pub = b_pub = a_sec = b_sec = chunk_empty;
+       a = create(method);
+       b = create(method);
+       if (!a || !b)
+       {
+               goto failure;
+       }
+
+       if (key_exchange_is_kem(method))
+       {
+               /* entropy instance will be owned by drbg */
+               entropy = rng_tester_create(v->seed);
+               drbg = lib->crypto->create_drbg(lib->crypto, DRBG_CTR_AES256, 256,
+                                                                               entropy, chunk_empty);
+               if (!drbg)
+               {
+                       entropy->destroy(entropy);
+                       goto failure;
+               }
+               if (!a->set_seed(a, chunk_empty, drbg) ||
+                       !b->set_seed(b, chunk_empty, drbg))
+               {
+                       goto failure;
+               }
+       }
+       else
+       {
+               /* the seed is the concatenation of both DH private keys */
+               a_priv = chunk_create(v->seed.ptr, v->seed.len/2);
+               b_priv = chunk_create(v->seed.ptr + v->seed.len/2, v->seed.len/2);
+
+               if (!a->set_seed(a, a_priv, NULL) || !b->set_seed(b, b_priv, NULL))
+               {
+                       goto failure;
+               }
+       }
+       if (!a->get_public_key(a, &a_pub) || !chunk_equals(a_pub, v->pub_i))
+       {
+               goto failure;
+       }
+       if (!b->set_public_key(b, a_pub))
+       {
+               goto failure;
+       }
+       if (!b->get_shared_secret(b, &b_sec) || !chunk_equals(b_sec, v->shared))
+       {
+               goto failure;
+       }
+       if (!b->get_public_key(b, &b_pub) || !chunk_equals(b_pub, v->pub_r))
+       {
+               goto failure;
+       }
+       if (!a->set_public_key(a, b_pub))
+       {
+               goto failure;
+       }
+       if (!a->get_shared_secret(a, &a_sec) || !chunk_equals(a_sec, v->shared))
+       {
+               goto failure;
+       }
+       success = TRUE;
+
+failure:
+       DESTROY_IF(a);
+       DESTROY_IF(b);
+       chunk_free(&a_pub);
+       chunk_free(&b_pub);
+       chunk_free(&a_sec);
+       chunk_free(&b_sec);
+       DESTROY_IF(drbg);
+
+       return success;
+}
+
 METHOD(crypto_tester_t, test_ke, bool,
        private_crypto_tester_t *this, key_exchange_method_t method,
        ke_constructor_t create, u_int *speed, const char *plugin_name)
 {
        enumerator_t *enumerator;
        ke_test_vector_t *v;
-       bool failed = FALSE;
+       bool success = TRUE;
        u_int tested = 0;
 
        enumerator = this->ke->create_enumerator(this->ke);
        while (enumerator->enumerate(enumerator, &v))
        {
-               key_exchange_t *a, *b;
-               chunk_t apub, bpub, asec, bsec;
-
                if (v->method != method)
                {
                        continue;
                }
-
-               a = create(method);
-               b = create(method);
-               if (!a || !b)
-               {
-                       DESTROY_IF(a);
-                       DESTROY_IF(b);
-                       failed = TRUE;
-                       tested++;
-                       DBG1(DBG_LIB, "disabled %N[%s]: creating instance failed",
-                                key_exchange_method_names, method, plugin_name);
-                       break;
-               }
-
-               if (!a->set_private_key || !b->set_private_key)
-               {       /* does not support testing */
-                       a->destroy(a);
-                       b->destroy(b);
-                       continue;
-               }
-               failed = TRUE;
+               success = test_single_ke(method, v, create);
                tested++;
 
-               apub = bpub = asec = bsec = chunk_empty;
-
-               if (!a->set_private_key(a, chunk_create(v->priv_a, v->priv_len)) ||
-                       !b->set_private_key(b, chunk_create(v->priv_b, v->priv_len)))
-               {
-                       goto failure;
-               }
-               if (!a->get_public_key(a, &apub) ||
-                       !chunk_equals(apub, chunk_create(v->pub_a, v->pub_len)))
-               {
-                       goto failure;
-               }
-               if (!b->get_public_key(b, &bpub) ||
-                       !chunk_equals(bpub, chunk_create(v->pub_b, v->pub_len)))
-               {
-                       goto failure;
-               }
-               if (!a->set_public_key(a, bpub) ||
-                       !b->set_public_key(b, apub))
-               {
-                       goto failure;
-               }
-               if (!a->get_shared_secret(a, &asec) ||
-                       !chunk_equals(asec, chunk_create(v->shared, v->shared_len)))
-               {
-                       goto failure;
-               }
-               if (!b->get_shared_secret(b, &bsec) ||
-                       !chunk_equals(bsec, chunk_create(v->shared, v->shared_len)))
-               {
-                       goto failure;
-               }
-
-               failed = FALSE;
-failure:
-               a->destroy(a);
-               b->destroy(b);
-               chunk_free(&apub);
-               chunk_free(&bpub);
-               chunk_free(&asec);
-               chunk_free(&bsec);
-               if (failed)
+               if (!success)
                {
                        DBG1(DBG_LIB, "disabled %N[%s]: %s test vector failed",
                                 key_exchange_method_names, method, plugin_name, get_name(v));
@@ -1774,6 +1800,7 @@ failure:
                }
        }
        enumerator->destroy(enumerator);
+
        if (!tested)
        {
                DBG1(DBG_LIB, "%s %N[%s]: no test vectors found / untestable",
@@ -1781,7 +1808,7 @@ failure:
                         key_exchange_method_names, method, plugin_name);
                return !this->required;
        }
-       if (!failed)
+       if (success)
        {
                if (speed)
                {
@@ -1795,7 +1822,7 @@ failure:
                                 key_exchange_method_names, method, plugin_name, tested);
                }
        }
-       return !failed;
+       return success;
 }
 
 METHOD(crypto_tester_t, add_crypter_vector, void,
index 95a9342f062ff264c16ba8eee0bbf03cfcb6ed4a..60f87990be5e937c1057620b72c8c47ae7cdb9e8 100644 (file)
@@ -185,22 +185,14 @@ struct rng_test_vector_t {
 struct ke_test_vector_t {
        /** key exchange method to test */
        key_exchange_method_t method;
-       /** private key of alice */
-       u_char *priv_a;
-       /** private key of bob */
-       u_char *priv_b;
-       /** length of private keys */
-       size_t priv_len;
-       /** expected public key of alice */
-       u_char *pub_a;
-       /** expected public key of bob */
-       u_char *pub_b;
-       /** size of public keys */
-       size_t pub_len;
+       /** seed from which private key material is derived */
+       chunk_t seed;
+       /** expected public factor of initiator */
+       chunk_t pub_i;
+       /** expected public factor of responder */
+       chunk_t pub_r;
        /** expected shared secret */
-       u_char *shared;
-       /** size of shared secret */
-       size_t shared_len;
+       chunk_t shared;
 };
 
 /**
index d9d3cc9f9ec50a9b369cc8e03d2e13e105f61757..c132255ede5364c8d64bebe82099d5b0f698c764 100644 (file)
@@ -154,13 +154,14 @@ struct key_exchange_t {
         * Set a seed used for the derivation of private key material.
         *
         * Calling this method is usually not required, as the key exchange objects
-        * generate the private key material themselves. This is optional to implement, and
-        * used mostly for testing purposes.  The private key may be the actual key
-        * or a seed for a DRBG.
+        * generate the private key material themselves. This is optional to
+        * implement, and used mostly for testing purposes.  The private key may be
+        * the actual key or a DRBG instance.
         *
-        * @param value         private key value to set
+        * @param value         optional seed value to set (can be chunk_empty)
+        * @param drbg          optional DRBG (can be NULL)
         */
-       bool (*set_private_key)(key_exchange_t *this, chunk_t value)
+       bool (*set_seed)(key_exchange_t *this, chunk_t value, drbg_t *drbg)
                __attribute__((warn_unused_result));
 
        /**
index a3f599679863c075f48e0bff1df86072c72f1a18..150c426cd01aa6977666ec95ea5e85186b6e1afb 100644 (file)
@@ -134,8 +134,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_botan_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_botan_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        chunk_clear(&this->shared_secret);
        return load_private_key(this, value);
@@ -186,7 +186,7 @@ static botan_diffie_hellman_t *create_generic(key_exchange_method_t group,
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 5ebaca4c44580241dbe87038fc31afe7e5223c60..7ec92ac43294935e909d01b75b8bf98138bd34cf 100644 (file)
@@ -107,8 +107,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_botan_ec_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_botan_ec_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        botan_mp_t scalar;
 
@@ -177,7 +177,7 @@ botan_ec_diffie_hellman_t *botan_ec_diffie_hellman_create(
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 8323e555dc51c4cbda097981e5990c1aaea59cc7..888e6d716a85490f6a8ff4b9738de4152bbc0e2d 100644 (file)
@@ -93,8 +93,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        if (value.len != 32)
        {
@@ -155,7 +155,7 @@ key_exchange_t *botan_x25519_create(key_exchange_method_t ke)
                        .get_shared_secret = _get_shared_secret,
                        .set_public_key = _set_public_key,
                        .get_public_key = _get_public_key,
-                       .set_private_key = _set_private_key,
+                       .set_seed = _set_seed,
                        .get_method = _get_method,
                        .destroy = _destroy,
                },
index 5d489d413cc82d2ffe463e2de477efa33f7dc4f0..3ccb9f2163c831e559806ab226165ee069a6a1f2 100644 (file)
@@ -103,8 +103,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return FALSE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_curve25519_dh_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_curve25519_dh_t *this, chunk_t value, drbg_t *drbg)
 {
        if (value.len != CURVE25519_KEY_SIZE)
        {
@@ -157,7 +157,7 @@ curve25519_dh_t *curve25519_dh_create(key_exchange_method_t group)
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 7da1df31334b6de80890f5394d3ee07a5d416dea..f4cb0463db590f0fab7efc52c708569013befa46 100644 (file)
@@ -143,8 +143,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_gcrypt_dh_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_gcrypt_dh_t *this, chunk_t value, drbg_t *drbg)
 {
        gcry_error_t err;
        gcry_mpi_t xa;
@@ -208,7 +208,7 @@ static gcrypt_dh_t *create_generic(key_exchange_method_t group, size_t exp_len,
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 6528495a5e0fd701bc271a890915394c462b4d8d..8ce44f5ac0c50c5007e70600cac7f2318e6a483d 100644 (file)
@@ -135,8 +135,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_gmp_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_gmp_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        mpz_import(this->xa, value.len, 1, 1, 1, 0, value.ptr);
        mpz_powm(this->ya, this->g, this->xa, this->p);
@@ -228,7 +228,7 @@ static gmp_diffie_hellman_t *create_generic(key_exchange_method_t group,
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 5f9d019968c24ebe9f00bfd95ef226ac0729502d..ee1d03529a15af2b113772542e1887e3d554b79b 100644 (file)
@@ -204,8 +204,8 @@ static BIGNUM *calculate_public_key(BIGNUM *priv, const BIGNUM *g,
        return pub;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_openssl_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_openssl_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        BIGNUM *priv, *g = NULL, *p = NULL, *pub = NULL;
        OSSL_PARAM_BLD *bld = NULL;
@@ -254,8 +254,8 @@ error:
 
 #else /* OPENSSL_VERSION_NUMBER */
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_openssl_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_openssl_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        BIGNUM *privkey;
 
@@ -304,7 +304,7 @@ openssl_diffie_hellman_t *openssl_diffie_hellman_create(
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 34f681d6552efe56a7880fe63c515d03939650a5..77933f4f599bcfccdc1dd0b270031791faeabe64 100644 (file)
@@ -337,8 +337,8 @@ static bool ecp2chunk(EC_GROUP *group, EC_POINT *point, chunk_t *chunk)
        return chunk->len;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_openssl_ec_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_openssl_ec_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        BIGNUM *priv = NULL;
        EC_POINT *pub = NULL;
@@ -390,8 +390,8 @@ METHOD(key_exchange_t, set_private_key, bool,
 
 #else /* OPENSSL_VERSION_NUMBER */
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_openssl_ec_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_openssl_ec_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        EC_KEY *key = NULL;
        EC_POINT *pub = NULL;
@@ -460,7 +460,7 @@ openssl_ec_diffie_hellman_t *openssl_ec_diffie_hellman_create(key_exchange_metho
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 16b5740a223e4db0a79b5b0adce415bd10d93ee7..16c3edf5a625b86125b5ab1bff7f8c3d6bc24470 100644 (file)
@@ -114,8 +114,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_key_exchange_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_key_exchange_t *this, chunk_t value, drbg_t *drbg)
 {
        EVP_PKEY_free(this->key);
        this->key = EVP_PKEY_new_raw_private_key(map_key_type(this->ke), NULL,
@@ -193,7 +193,7 @@ key_exchange_t *openssl_x_diffie_hellman_create(key_exchange_method_t ke)
                        .get_shared_secret = _get_shared_secret,
                        .set_public_key = _set_public_key,
                        .get_public_key = _get_public_key,
-                       .set_private_key = _set_private_key,
+                       .set_seed = _set_seed,
                        .get_method = _get_method,
                        .destroy = _destroy,
                },
index 8ce1d8ae1bea377ad24f909d6c05d1dff78d372b..353461a0ec7ee59df725a5d5d59b5a1768f91d9d 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2019 Andreas Steffen
  * Copyright (C) 2015 Martin Willi
  *
  * Copyright (C) secunet Security Networks AG
  * From RFC 7748
  */
 ke_test_vector_t curve25519_1 = {
-       .method = CURVE_25519, .priv_len = 32, .pub_len = 32, .shared_len = 32,
-       .priv_a = "\x77\x07\x6d\x0a\x73\x18\xa5\x7d\x3c\x16\xc1\x72\x51\xb2\x66\x45"
-                         "\xdf\x4c\x2f\x87\xeb\xc0\x99\x2a\xb1\x77\xfb\xa5\x1d\xb9\x2c\x2a",
-       .priv_b = "\x5d\xab\x08\x7e\x62\x4a\x8a\x4b\x79\xe1\x7f\x8b\x83\x80\x0e\xe6"
-                         "\x6f\x3b\xb1\x29\x26\x18\xb6\xfd\x1c\x2f\x8b\x27\xff\x88\xe0\xeb",
-       .pub_a  = "\x85\x20\xf0\x09\x89\x30\xa7\x54\x74\x8b\x7d\xdc\xb4\x3e\xf7\x5a"
-                         "\x0d\xbf\x3a\x0d\x26\x38\x1a\xf4\xeb\xa4\xa9\x8e\xaa\x9b\x4e\x6a",
-       .pub_b  = "\xde\x9e\xdb\x7d\x7b\x7d\xc1\xb4\xd3\x5b\x61\xc2\xec\xe4\x35\x37"
-                         "\x3f\x83\x43\xc8\x5b\x78\x67\x4d\xad\xfc\x7e\x14\x6f\x88\x2b\x4f",
-       .shared = "\x4a\x5d\x9d\x5b\xa4\xce\x2d\xe1\x72\x8e\x3b\xf4\x80\x35\x0f\x25"
-                         "\xe0\x7e\x21\xc9\x47\xd1\x9e\x33\x76\xf0\x9b\x3c\x1e\x16\x17\x42",
+       .method = CURVE_25519,
+       .seed = chunk_from_chars(
+               0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, 0x3c, 0x16,
+               0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45, 0xdf, 0x4c, 0x2f, 0x87,
+               0xeb, 0xc0, 0x99, 0x2a, 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9,
+               0x2c, 0x2a, /* - */
+               0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b, 0x79, 0xe1,
+               0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6, 0x6f, 0x3b, 0xb1, 0x29,
+               0x26, 0x18, 0xb6, 0xfd, 0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88,
+               0xe0, 0xeb),
+       .pub_i = chunk_from_chars(
+               0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, 0x74, 0x8b,
+               0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, 0x0d, 0xbf, 0x3a, 0x0d,
+               0x26, 0x38, 0x1a, 0xf4, 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b,
+               0x4e, 0x6a),
+       .pub_r = chunk_from_chars(
+               0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, 0xd3, 0x5b,
+               0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37, 0x3f, 0x83, 0x43, 0xc8,
+               0x5b, 0x78, 0x67, 0x4d, 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88,
+               0x2b, 0x4f),
+       .shared = chunk_from_chars(
+               0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1, 0x72, 0x8e,
+               0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25, 0xe0, 0x7e, 0x21, 0xc9,
+               0x47, 0xd1, 0x9e, 0x33, 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16,
+               0x17, 0x42)
 };
 
 /**
  * From RFC 8031
  */
 ke_test_vector_t curve25519_2 = {
-       .method = CURVE_25519, .priv_len = 32, .pub_len = 32, .shared_len = 32,
-       .priv_a = "\x75\x1f\xb4\x30\x86\x55\xb4\x76\xb6\x78\x9b\x73\x25\xf9\xea\x8c"
-                         "\xdd\xd1\x6a\x58\x53\x3f\xf6\xd9\xe6\x00\x09\x46\x4a\x5f\x9d\x94",
-       .priv_b = "\x0a\x54\x64\x52\x53\x29\x0d\x60\xdd\xad\xd0\xe0\x30\xba\xcd\x9e"
-                         "\x55\x01\xef\xdc\x22\x07\x55\xa1\xe9\x78\xf1\xb8\x39\xa0\x56\x88",
-       .pub_a  = "\x48\xd5\xdd\xd4\x06\x12\x57\xba\x16\x6f\xa3\xf9\xbb\xdb\x74\xf1"
-                         "\xa4\xe8\x1c\x08\x93\x84\xfa\x77\xf7\x90\x70\x9f\x0d\xfb\xc7\x66",
-       .pub_b  = "\x0b\xe7\xc1\xf5\xaa\xd8\x7d\x7e\x44\x86\x62\x67\x32\x98\xa4\x43"
-                         "\x47\x8b\x85\x97\x45\x17\x9e\xaf\x56\x4c\x79\xc0\xef\x6e\xee\x25",
-       .shared = "\xc7\x49\x50\x60\x7a\x12\x32\x7f\x32\x04\xd9\x4b\x68\x25\xbf\xb0"
-                         "\x68\xb7\xf8\x31\x9a\x9e\x37\x08\xed\x3d\x43\xce\x81\x30\xc9\x50",
+       .method = CURVE_25519,
+       .seed = chunk_from_chars(
+               0x75, 0x1f, 0xb4, 0x30, 0x86, 0x55, 0xb4, 0x76, 0xb6, 0x78,
+               0x9b, 0x73, 0x25, 0xf9, 0xea, 0x8c, 0xdd, 0xd1, 0x6a, 0x58,
+               0x53, 0x3f, 0xf6, 0xd9, 0xe6, 0x00, 0x09, 0x46, 0x4a, 0x5f,
+               0x9d, 0x94, /* - */
+               0x0a, 0x54, 0x64, 0x52, 0x53, 0x29, 0x0d, 0x60, 0xdd, 0xad,
+               0xd0, 0xe0, 0x30, 0xba, 0xcd, 0x9e, 0x55, 0x01, 0xef, 0xdc,
+               0x22, 0x07, 0x55, 0xa1, 0xe9, 0x78, 0xf1, 0xb8, 0x39, 0xa0,
+               0x56, 0x88),
+       .pub_i = chunk_from_chars(
+               0x48, 0xd5, 0xdd, 0xd4, 0x06, 0x12, 0x57, 0xba, 0x16, 0x6f,
+               0xa3, 0xf9, 0xbb, 0xdb, 0x74, 0xf1, 0xa4, 0xe8, 0x1c, 0x08,
+               0x93, 0x84, 0xfa, 0x77, 0xf7, 0x90, 0x70, 0x9f, 0x0d, 0xfb,
+               0xc7, 0x66),
+       .pub_r = chunk_from_chars(
+               0x0b, 0xe7, 0xc1, 0xf5, 0xaa, 0xd8, 0x7d, 0x7e, 0x44, 0x86,
+               0x62, 0x67, 0x32, 0x98, 0xa4, 0x43, 0x47, 0x8b, 0x85, 0x97,
+               0x45, 0x17, 0x9e, 0xaf, 0x56, 0x4c, 0x79, 0xc0, 0xef, 0x6e,
+               0xee, 0x25),
+       .shared = chunk_from_chars(
+               0xc7, 0x49, 0x50, 0x60, 0x7a, 0x12, 0x32, 0x7f, 0x32, 0x04,
+               0xd9, 0x4b, 0x68, 0x25, 0xbf, 0xb0, 0x68, 0xb7, 0xf8, 0x31,
+               0x9a, 0x9e, 0x37, 0x08, 0xed, 0x3d, 0x43, 0xce, 0x81, 0x30,
+               0xc9, 0x50)
 };
index b8ee7647fb20e606b227d057b893226e322b2ae0..1cc633b178f15a2959ac4fedc7004537a444943a 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2019 Andreas Steffen
  * Copyright (C) 2018 Tobias Brunner
  *
  * Copyright (C) secunet Security Networks AG
  * From RFC 7748
  */
 ke_test_vector_t curve448_1 = {
-       .method = CURVE_448, .priv_len = 56, .pub_len = 56, .shared_len = 56,
-       .priv_a = "\x9a\x8f\x49\x25\xd1\x51\x9f\x57\x75\xcf\x46\xb0\x4b\x58\x00\xd4"
-                         "\xee\x9e\xe8\xba\xe8\xbc\x55\x65\xd4\x98\xc2\x8d\xd9\xc9\xba\xf5"
-                         "\x74\xa9\x41\x97\x44\x89\x73\x91\x00\x63\x82\xa6\xf1\x27\xab\x1d"
-                         "\x9a\xc2\xd8\xc0\xa5\x98\x72\x6b",
-       .priv_b = "\x1c\x30\x6a\x7a\xc2\xa0\xe2\xe0\x99\x0b\x29\x44\x70\xcb\xa3\x39"
-                         "\xe6\x45\x37\x72\xb0\x75\x81\x1d\x8f\xad\x0d\x1d\x69\x27\xc1\x20"
-                         "\xbb\x5e\xe8\x97\x2b\x0d\x3e\x21\x37\x4c\x9c\x92\x1b\x09\xd1\xb0"
-                         "\x36\x6f\x10\xb6\x51\x73\x99\x2d",
-       .pub_a  = "\x9b\x08\xf7\xcc\x31\xb7\xe3\xe6\x7d\x22\xd5\xae\xa1\x21\x07\x4a"
-                         "\x27\x3b\xd2\xb8\x3d\xe0\x9c\x63\xfa\xa7\x3d\x2c\x22\xc5\xd9\xbb"
-                         "\xc8\x36\x64\x72\x41\xd9\x53\xd4\x0c\x5b\x12\xda\x88\x12\x0d\x53"
-                         "\x17\x7f\x80\xe5\x32\xc4\x1f\xa0",
-       .pub_b  = "\x3e\xb7\xa8\x29\xb0\xcd\x20\xf5\xbc\xfc\x0b\x59\x9b\x6f\xec\xcf"
-                         "\x6d\xa4\x62\x71\x07\xbd\xb0\xd4\xf3\x45\xb4\x30\x27\xd8\xb9\x72"
-                         "\xfc\x3e\x34\xfb\x42\x32\xa1\x3c\xa7\x06\xdc\xb5\x7a\xec\x3d\xae"
-                         "\x07\xbd\xc1\xc6\x7b\xf3\x36\x09",
-       .shared = "\x07\xff\xf4\x18\x1a\xc6\xcc\x95\xec\x1c\x16\xa9\x4a\x0f\x74\xd1"
-                         "\x2d\xa2\x32\xce\x40\xa7\x75\x52\x28\x1d\x28\x2b\xb6\x0c\x0b\x56"
-                         "\xfd\x24\x64\xc3\x35\x54\x39\x36\x52\x1c\x24\x40\x30\x85\xd5\x9a"
-                         "\x44\x9a\x50\x37\x51\x4a\x87\x9d",
+       .method = CURVE_448,
+       .seed = chunk_from_chars(
+               0x9a, 0x8f, 0x49, 0x25, 0xd1, 0x51, 0x9f, 0x57, 0x75, 0xcf,
+               0x46, 0xb0, 0x4b, 0x58, 0x00, 0xd4, 0xee, 0x9e, 0xe8, 0xba,
+               0xe8, 0xbc, 0x55, 0x65, 0xd4, 0x98, 0xc2, 0x8d, 0xd9, 0xc9,
+               0xba, 0xf5, 0x74, 0xa9, 0x41, 0x97, 0x44, 0x89, 0x73, 0x91,
+               0x00, 0x63, 0x82, 0xa6, 0xf1, 0x27, 0xab, 0x1d, 0x9a, 0xc2,
+               0xd8, 0xc0, 0xa5, 0x98, 0x72, 0x6b, /* - */
+               0x1c, 0x30, 0x6a, 0x7a, 0xc2, 0xa0, 0xe2, 0xe0, 0x99, 0x0b,
+               0x29, 0x44, 0x70, 0xcb, 0xa3, 0x39, 0xe6, 0x45, 0x37, 0x72,
+               0xb0, 0x75, 0x81, 0x1d, 0x8f, 0xad, 0x0d, 0x1d, 0x69, 0x27,
+               0xc1, 0x20, 0xbb, 0x5e, 0xe8, 0x97, 0x2b, 0x0d, 0x3e, 0x21,
+               0x37, 0x4c, 0x9c, 0x92, 0x1b, 0x09, 0xd1, 0xb0, 0x36, 0x6f,
+               0x10, 0xb6, 0x51, 0x73, 0x99, 0x2d),
+       .pub_i = chunk_from_chars(
+               0x9b, 0x08, 0xf7, 0xcc, 0x31, 0xb7, 0xe3, 0xe6, 0x7d, 0x22,
+               0xd5, 0xae, 0xa1, 0x21, 0x07, 0x4a, 0x27, 0x3b, 0xd2, 0xb8,
+               0x3d, 0xe0, 0x9c, 0x63, 0xfa, 0xa7, 0x3d, 0x2c, 0x22, 0xc5,
+               0xd9, 0xbb, 0xc8, 0x36, 0x64, 0x72, 0x41, 0xd9, 0x53, 0xd4,
+               0x0c, 0x5b, 0x12, 0xda, 0x88, 0x12, 0x0d, 0x53, 0x17, 0x7f,
+               0x80, 0xe5, 0x32, 0xc4, 0x1f, 0xa0),
+       .pub_r = chunk_from_chars(
+               0x3e, 0xb7, 0xa8, 0x29, 0xb0, 0xcd, 0x20, 0xf5, 0xbc, 0xfc,
+               0x0b, 0x59, 0x9b, 0x6f, 0xec, 0xcf, 0x6d, 0xa4, 0x62, 0x71,
+               0x07, 0xbd, 0xb0, 0xd4, 0xf3, 0x45, 0xb4, 0x30, 0x27, 0xd8,
+               0xb9, 0x72, 0xfc, 0x3e, 0x34, 0xfb, 0x42, 0x32, 0xa1, 0x3c,
+               0xa7, 0x06, 0xdc, 0xb5, 0x7a, 0xec, 0x3d, 0xae, 0x07, 0xbd,
+               0xc1, 0xc6, 0x7b, 0xf3, 0x36, 0x09),
+       .shared = chunk_from_chars(
+               0x07, 0xff, 0xf4, 0x18, 0x1a, 0xc6, 0xcc, 0x95, 0xec, 0x1c,
+               0x16, 0xa9, 0x4a, 0x0f, 0x74, 0xd1, 0x2d, 0xa2, 0x32, 0xce,
+               0x40, 0xa7, 0x75, 0x52, 0x28, 0x1d, 0x28, 0x2b, 0xb6, 0x0c,
+               0x0b, 0x56, 0xfd, 0x24, 0x64, 0xc3, 0x35, 0x54, 0x39, 0x36,
+               0x52, 0x1c, 0x24, 0x40, 0x30, 0x85, 0xd5, 0x9a, 0x44, 0x9a,
+               0x50, 0x37, 0x51, 0x4a, 0x87, 0x9d)
 };
index ccf572d1e200dc248898ab9ec3c13597ba030fc5..1fc6e025ca9e9a99733cacf7049a09ba2eda298e 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2019 Andreas Steffen
  * Copyright (C) 2015 Martin Willi
  *
  * Copyright (C) secunet Security Networks AG
  */
 
 ke_test_vector_t ecp192 = {
-       .method = ECP_192_BIT, .priv_len = 24, .pub_len = 48, .shared_len = 24,
-       .priv_a = "\x32\x3f\xa3\x16\x9d\x8e\x9c\x65\x93\xf5\x94\x76\xbc\x14\x20\x00"
-                         "\xab\x5b\xe0\xe2\x49\xc4\x34\x26",
-       .priv_b = "\x63\x1f\x95\xbb\x4a\x67\x63\x2c\x9c\x47\x6e\xee\x9a\xb6\x95\xab"
-                         "\x24\x0a\x04\x99\x30\x7f\xcf\x62",
-       .pub_a  = "\xcd\x46\x48\x9e\xcf\xd6\xc1\x05\xe7\xb3\xd3\x25\x66\xe2\xb1\x22"
-                         "\xe2\x49\xab\xaa\xdd\x87\x06\x12\x68\x88\x7b\x48\x77\xdf\x51\xdd"
-                         "\x4d\xc3\xd6\xfd\x11\xf0\xa2\x6f\x8f\xd3\x84\x43\x17\x91\x6e\x9a",
-       .pub_b  = "\x51\x9a\x12\x16\x80\xe0\x04\x54\x66\xba\x21\xdf\x2e\xee\x47\xf5"
-                         "\x97\x3b\x50\x05\x77\xef\x13\xd5\xff\x61\x3a\xb4\xd6\x4c\xee\x3a"
-                         "\x20\x87\x5b\xdb\x10\xf9\x53\xf6\xb3\x0c\xa0\x72\xc6\x0a\xa5\x7f",
-       .shared = "\xad\x42\x01\x82\x63\x3f\x85\x26\xbf\xe9\x54\xac\xda\x37\x6f\x05"
-                         "\xe5\xff\x4f\x83\x7f\x54\xfe\xbe",
+       .method = ECP_192_BIT,
+       .seed = chunk_from_chars(
+               0x32, 0x3f, 0xa3, 0x16, 0x9d, 0x8e, 0x9c, 0x65, 0x93, 0xf5,
+               0x94, 0x76, 0xbc, 0x14, 0x20, 0x00, 0xab, 0x5b, 0xe0, 0xe2,
+               0x49, 0xc4, 0x34, 0x26, /* - */
+               0x63, 0x1f, 0x95, 0xbb, 0x4a, 0x67, 0x63, 0x2c, 0x9c, 0x47,
+               0x6e, 0xee, 0x9a, 0xb6, 0x95, 0xab, 0x24, 0x0a, 0x04, 0x99,
+               0x30, 0x7f, 0xcf, 0x62),
+       .pub_i = chunk_from_chars(
+               0xcd, 0x46, 0x48, 0x9e, 0xcf, 0xd6, 0xc1, 0x05, 0xe7, 0xb3,
+               0xd3, 0x25, 0x66, 0xe2, 0xb1, 0x22, 0xe2, 0x49, 0xab, 0xaa,
+               0xdd, 0x87, 0x06, 0x12, 0x68, 0x88, 0x7b, 0x48, 0x77, 0xdf,
+               0x51, 0xdd, 0x4d, 0xc3, 0xd6, 0xfd, 0x11, 0xf0, 0xa2, 0x6f,
+               0x8f, 0xd3, 0x84, 0x43, 0x17, 0x91, 0x6e, 0x9a),
+       .pub_r = chunk_from_chars(
+               0x51, 0x9a, 0x12, 0x16, 0x80, 0xe0, 0x04, 0x54, 0x66, 0xba,
+               0x21, 0xdf, 0x2e, 0xee, 0x47, 0xf5, 0x97, 0x3b, 0x50, 0x05,
+               0x77, 0xef, 0x13, 0xd5, 0xff, 0x61, 0x3a, 0xb4, 0xd6, 0x4c,
+               0xee, 0x3a, 0x20, 0x87, 0x5b, 0xdb, 0x10, 0xf9, 0x53, 0xf6,
+               0xb3, 0x0c, 0xa0, 0x72, 0xc6, 0x0a, 0xa5, 0x7f),
+       .shared = chunk_from_chars(
+               0xad, 0x42, 0x01, 0x82, 0x63, 0x3f, 0x85, 0x26, 0xbf, 0xe9,
+               0x54, 0xac, 0xda, 0x37, 0x6f, 0x05, 0xe5, 0xff, 0x4f, 0x83,
+               0x7f, 0x54, 0xfe, 0xbe)
 };
 
 ke_test_vector_t ecp224 = {
-       .method = ECP_224_BIT, .priv_len = 28, .pub_len = 56, .shared_len = 28,
-       .priv_a = "\xb5\x58\xeb\x6c\x28\x8d\xa7\x07\xbb\xb4\xf8\xfb\xae\x2a\xb9\xe9"
-                         "\xcb\x62\xe3\xbc\x5c\x75\x73\xe2\x2e\x26\xd3\x7f",
-       .priv_b = "\xac\x3b\x1a\xdd\x3d\x97\x70\xe6\xf6\xa7\x08\xee\x9f\x3b\x8e\x0a"
-                         "\xb3\xb4\x80\xe9\xf2\x7f\x85\xc8\x8b\x5e\x6d\x18",
-       .pub_a  = "\x49\xdf\xef\x30\x9f\x81\x48\x8c\x30\x4c\xff\x5a\xb3\xee\x5a\x21"
-                         "\x54\x36\x7d\xc7\x83\x31\x50\xe0\xa5\x1f\x3e\xeb\x4f\x2b\x5e\xe4"
-                         "\x57\x62\xc4\xf6\x54\xc1\xa0\xc6\x7f\x54\xcf\x88\xb0\x16\xb5\x1b"
-                         "\xce\x3d\x7c\x22\x8d\x57\xad\xb4",
-       .pub_b  = "\x6b\x3a\xc9\x6a\x8d\x0c\xde\x6a\x55\x99\xbe\x80\x32\xed\xf1\x0c"
-                         "\x16\x2d\x0a\x8a\xd2\x19\x50\x6d\xcd\x42\xa2\x07\xd4\x91\xbe\x99"
-                         "\xc2\x13\xa7\xd1\xca\x37\x06\xde\xbf\xe3\x05\xf3\x61\xaf\xcb\xb3"
-                         "\x3e\x26\x09\xc8\xb1\x61\x8a\xd5",
-       .shared = "\x52\x27\x2f\x50\xf4\x6f\x4e\xdc\x91\x51\x56\x90\x92\xf4\x6d\xf2"
-                         "\xd9\x6e\xcc\x3b\x6d\xc1\x71\x4a\x4e\xa9\x49\xfa",
+       .method = ECP_224_BIT,
+       .seed = chunk_from_chars(
+               0xb5, 0x58, 0xeb, 0x6c, 0x28, 0x8d, 0xa7, 0x07, 0xbb, 0xb4,
+               0xf8, 0xfb, 0xae, 0x2a, 0xb9, 0xe9, 0xcb, 0x62, 0xe3, 0xbc,
+               0x5c, 0x75, 0x73, 0xe2, 0x2e, 0x26, 0xd3, 0x7f, /* - */
+               0xac, 0x3b, 0x1a, 0xdd, 0x3d, 0x97, 0x70, 0xe6, 0xf6, 0xa7,
+               0x08, 0xee, 0x9f, 0x3b, 0x8e, 0x0a, 0xb3, 0xb4, 0x80, 0xe9,
+               0xf2, 0x7f, 0x85, 0xc8, 0x8b, 0x5e, 0x6d, 0x18),
+       .pub_i = chunk_from_chars(
+               0x49, 0xdf, 0xef, 0x30, 0x9f, 0x81, 0x48, 0x8c, 0x30, 0x4c,
+               0xff, 0x5a, 0xb3, 0xee, 0x5a, 0x21, 0x54, 0x36, 0x7d, 0xc7,
+               0x83, 0x31, 0x50, 0xe0, 0xa5, 0x1f, 0x3e, 0xeb, 0x4f, 0x2b,
+               0x5e, 0xe4, 0x57, 0x62, 0xc4, 0xf6, 0x54, 0xc1, 0xa0, 0xc6,
+               0x7f, 0x54, 0xcf, 0x88, 0xb0, 0x16, 0xb5, 0x1b, 0xce, 0x3d,
+               0x7c, 0x22, 0x8d, 0x57, 0xad, 0xb4),
+       .pub_r = chunk_from_chars(
+               0x6b, 0x3a, 0xc9, 0x6a, 0x8d, 0x0c, 0xde, 0x6a, 0x55, 0x99,
+               0xbe, 0x80, 0x32, 0xed, 0xf1, 0x0c, 0x16, 0x2d, 0x0a, 0x8a,
+               0xd2, 0x19, 0x50, 0x6d, 0xcd, 0x42, 0xa2, 0x07, 0xd4, 0x91,
+               0xbe, 0x99, 0xc2, 0x13, 0xa7, 0xd1, 0xca, 0x37, 0x06, 0xde,
+               0xbf, 0xe3, 0x05, 0xf3, 0x61, 0xaf, 0xcb, 0xb3, 0x3e, 0x26,
+               0x09, 0xc8, 0xb1, 0x61, 0x8a, 0xd5),
+       .shared = chunk_from_chars(
+               0x52, 0x27, 0x2f, 0x50, 0xf4, 0x6f, 0x4e, 0xdc, 0x91, 0x51,
+               0x56, 0x90, 0x92, 0xf4, 0x6d, 0xf2, 0xd9, 0x6e, 0xcc, 0x3b,
+               0x6d, 0xc1, 0x71, 0x4a, 0x4e, 0xa9, 0x49, 0xfa)
 };
 
 ke_test_vector_t ecp256 = {
-       .method = ECP_256_BIT, .priv_len = 32, .pub_len = 64, .shared_len = 32,
-       .priv_a = "\x81\x42\x64\x14\x5f\x2f\x56\xf2\xe9\x6a\x8e\x33\x7a\x12\x84\x99"
-                         "\x3f\xaf\x43\x2a\x5a\xbc\xe5\x9e\x86\x7b\x72\x91\xd5\x07\xa3\xaf",
-       .priv_b = "\x2c\xe1\x78\x8e\xc1\x97\xe0\x96\xdb\x95\xa2\x00\xcc\x0a\xb2\x6a"
-                         "\x19\xce\x6b\xcc\xad\x56\x2b\x8e\xee\x1b\x59\x37\x61\xcf\x7f\x41",
-       .pub_a  = "\x2a\xf5\x02\xf3\xbe\x89\x52\xf2\xc9\xb5\xa8\xd4\x16\x0d\x09\xe9"
-                         "\x71\x65\xbe\x50\xbc\x42\xae\x4a\x5e\x8d\x3b\x4b\xa8\x3a\xeb\x15"
-                         "\xeb\x0f\xaf\x4c\xa9\x86\xc4\xd3\x86\x81\xa0\xf9\x87\x2d\x79\xd5"
-                         "\x67\x95\xbd\x4b\xff\x6e\x6d\xe3\xc0\xf5\x01\x5e\xce\x5e\xfd\x85",
-       .pub_b  = "\xb1\x20\xde\x4a\xa3\x64\x92\x79\x53\x46\xe8\xde\x6c\x2c\x86\x46"
-                         "\xae\x06\xaa\xea\x27\x9f\xa7\x75\xb3\xab\x07\x15\xf6\xce\x51\xb0"
-                         "\x9f\x1b\x7e\xec\xe2\x0d\x7b\x5e\xd8\xec\x68\x5f\xa3\xf0\x71\xd8"
-                         "\x37\x27\x02\x70\x92\xa8\x41\x13\x85\xc3\x4d\xde\x57\x08\xb2\xb6",
-       .shared = "\xdd\x0f\x53\x96\x21\x9d\x1e\xa3\x93\x31\x04\x12\xd1\x9a\x08\xf1"
-                         "\xf5\x81\x1e\x9d\xc8\xec\x8e\xea\x7f\x80\xd2\x1c\x82\x0c\x27\x88",
+       .method = ECP_256_BIT,
+       .seed = chunk_from_chars(
+               0x81, 0x42, 0x64, 0x14, 0x5f, 0x2f, 0x56, 0xf2, 0xe9, 0x6a,
+               0x8e, 0x33, 0x7a, 0x12, 0x84, 0x99, 0x3f, 0xaf, 0x43, 0x2a,
+               0x5a, 0xbc, 0xe5, 0x9e, 0x86, 0x7b, 0x72, 0x91, 0xd5, 0x07,
+               0xa3, 0xaf, /* - */
+               0x2c, 0xe1, 0x78, 0x8e, 0xc1, 0x97, 0xe0, 0x96, 0xdb, 0x95,
+               0xa2, 0x00, 0xcc, 0x0a, 0xb2, 0x6a, 0x19, 0xce, 0x6b, 0xcc,
+               0xad, 0x56, 0x2b, 0x8e, 0xee, 0x1b, 0x59, 0x37, 0x61, 0xcf,
+               0x7f, 0x41),
+       .pub_i = chunk_from_chars(
+               0x2a, 0xf5, 0x02, 0xf3, 0xbe, 0x89, 0x52, 0xf2, 0xc9, 0xb5,
+               0xa8, 0xd4, 0x16, 0x0d, 0x09, 0xe9, 0x71, 0x65, 0xbe, 0x50,
+               0xbc, 0x42, 0xae, 0x4a, 0x5e, 0x8d, 0x3b, 0x4b, 0xa8, 0x3a,
+               0xeb, 0x15, 0xeb, 0x0f, 0xaf, 0x4c, 0xa9, 0x86, 0xc4, 0xd3,
+               0x86, 0x81, 0xa0, 0xf9, 0x87, 0x2d, 0x79, 0xd5, 0x67, 0x95,
+               0xbd, 0x4b, 0xff, 0x6e, 0x6d, 0xe3, 0xc0, 0xf5, 0x01, 0x5e,
+               0xce, 0x5e, 0xfd, 0x85),
+       .pub_r = chunk_from_chars(
+               0xb1, 0x20, 0xde, 0x4a, 0xa3, 0x64, 0x92, 0x79, 0x53, 0x46,
+               0xe8, 0xde, 0x6c, 0x2c, 0x86, 0x46, 0xae, 0x06, 0xaa, 0xea,
+               0x27, 0x9f, 0xa7, 0x75, 0xb3, 0xab, 0x07, 0x15, 0xf6, 0xce,
+               0x51, 0xb0, 0x9f, 0x1b, 0x7e, 0xec, 0xe2, 0x0d, 0x7b, 0x5e,
+               0xd8, 0xec, 0x68, 0x5f, 0xa3, 0xf0, 0x71, 0xd8, 0x37, 0x27,
+               0x02, 0x70, 0x92, 0xa8, 0x41, 0x13, 0x85, 0xc3, 0x4d, 0xde,
+               0x57, 0x08, 0xb2, 0xb6),
+       .shared = chunk_from_chars(
+               0xdd, 0x0f, 0x53, 0x96, 0x21, 0x9d, 0x1e, 0xa3, 0x93, 0x31,
+               0x04, 0x12, 0xd1, 0x9a, 0x08, 0xf1, 0xf5, 0x81, 0x1e, 0x9d,
+               0xc8, 0xec, 0x8e, 0xea, 0x7f, 0x80, 0xd2, 0x1c, 0x82, 0x0c,
+               0x27, 0x88)
 };
 
 ke_test_vector_t ecp384 = {
-       .method = ECP_384_BIT, .priv_len = 48, .pub_len = 96, .shared_len = 48,
-       .priv_a = "\xd2\x73\x35\xea\x71\x66\x4a\xf2\x44\xdd\x14\xe9\xfd\x12\x60\x71"
-                         "\x5d\xfd\x8a\x79\x65\x57\x1c\x48\xd7\x09\xee\x7a\x79\x62\xa1\x56"
-                         "\xd7\x06\xa9\x0c\xbc\xb5\xdf\x29\x86\xf0\x5f\xea\xdb\x93\x76\xf1",
-       .priv_b = "\x52\xd1\x79\x1f\xdb\x4b\x70\xf8\x9c\x0f\x00\xd4\x56\xc2\xf7\x02"
-                         "\x3b\x61\x25\x26\x2c\x36\xa7\xdf\x1f\x80\x23\x11\x21\xcc\xe3\xd3"
-                         "\x9b\xe5\x2e\x00\xc1\x94\xa4\x13\x2c\x4a\x6c\x76\x8b\xcd\x94\xd2",
-       .pub_a  = "\x79\x31\x48\xf1\x78\x76\x34\xd5\xda\x4c\x6d\x90\x74\x41\x7d\x05"
-                         "\xe0\x57\xab\x62\xf8\x20\x54\xd1\x0e\xe6\xb0\x40\x3d\x62\x79\x54"
-                         "\x7e\x6a\x8e\xa9\xd1\xfd\x77\x42\x7d\x01\x6f\xe2\x7a\x8b\x8c\x66"
-                         "\xc6\xc4\x12\x94\x33\x1d\x23\xe6\xf4\x80\xf4\xfb\x4c\xd4\x05\x04"
-                         "\xc9\x47\x39\x2e\x94\xf4\xc3\xf0\x6b\x8f\x39\x8b\xb2\x9e\x42\x36"
-                         "\x8f\x7a\x68\x59\x23\xde\x3b\x67\xba\xce\xd2\x14\xa1\xa1\xd1\x28",
-       .pub_b  = "\x5c\xd4\x2a\xb9\xc4\x1b\x53\x47\xf7\x4b\x8d\x4e\xfb\x70\x8b\x3d"
-                         "\x5b\x36\xdb\x65\x91\x53\x59\xb4\x4a\xbc\x17\x64\x7b\x6b\x99\x99"
-                         "\x78\x9d\x72\xa8\x48\x65\xae\x2f\x22\x3f\x12\xb5\xa1\xab\xc1\x20"
-                         "\xe1\x71\x45\x8f\xea\xa9\x39\xaa\xa3\xa8\xbf\xac\x46\xb4\x04\xbd"
-                         "\x8f\x6d\x5b\x34\x8c\x0f\xa4\xd8\x0c\xec\xa1\x63\x56\xca\x93\x32"
-                         "\x40\xbd\xe8\x72\x34\x15\xa8\xec\xe0\x35\xb0\xed\xf3\x67\x55\xde",
-       .shared = "\x5e\xa1\xfc\x4a\xf7\x25\x6d\x20\x55\x98\x1b\x11\x05\x75\xe0\xa8"
-                         "\xca\xe5\x31\x60\x13\x7d\x90\x4c\x59\xd9\x26\xeb\x1b\x84\x56\xe4"
-                         "\x27\xaa\x8a\x45\x40\x88\x4c\x37\xde\x15\x9a\x58\x02\x8a\xbc\x0e",
+       .method = ECP_384_BIT,
+       .seed = chunk_from_chars(
+               0xd2, 0x73, 0x35, 0xea, 0x71, 0x66, 0x4a, 0xf2, 0x44, 0xdd,
+               0x14, 0xe9, 0xfd, 0x12, 0x60, 0x71, 0x5d, 0xfd, 0x8a, 0x79,
+               0x65, 0x57, 0x1c, 0x48, 0xd7, 0x09, 0xee, 0x7a, 0x79, 0x62,
+               0xa1, 0x56, 0xd7, 0x06, 0xa9, 0x0c, 0xbc, 0xb5, 0xdf, 0x29,
+               0x86, 0xf0, 0x5f, 0xea, 0xdb, 0x93, 0x76, 0xf1, /* - */
+               0x52, 0xd1, 0x79, 0x1f, 0xdb, 0x4b, 0x70, 0xf8, 0x9c, 0x0f,
+               0x00, 0xd4, 0x56, 0xc2, 0xf7, 0x02, 0x3b, 0x61, 0x25, 0x26,
+               0x2c, 0x36, 0xa7, 0xdf, 0x1f, 0x80, 0x23, 0x11, 0x21, 0xcc,
+               0xe3, 0xd3, 0x9b, 0xe5, 0x2e, 0x00, 0xc1, 0x94, 0xa4, 0x13,
+               0x2c, 0x4a, 0x6c, 0x76, 0x8b, 0xcd, 0x94, 0xd2),
+       .pub_i = chunk_from_chars(
+               0x79, 0x31, 0x48, 0xf1, 0x78, 0x76, 0x34, 0xd5, 0xda, 0x4c,
+               0x6d, 0x90, 0x74, 0x41, 0x7d, 0x05, 0xe0, 0x57, 0xab, 0x62,
+               0xf8, 0x20, 0x54, 0xd1, 0x0e, 0xe6, 0xb0, 0x40, 0x3d, 0x62,
+               0x79, 0x54, 0x7e, 0x6a, 0x8e, 0xa9, 0xd1, 0xfd, 0x77, 0x42,
+               0x7d, 0x01, 0x6f, 0xe2, 0x7a, 0x8b, 0x8c, 0x66, 0xc6, 0xc4,
+               0x12, 0x94, 0x33, 0x1d, 0x23, 0xe6, 0xf4, 0x80, 0xf4, 0xfb,
+               0x4c, 0xd4, 0x05, 0x04, 0xc9, 0x47, 0x39, 0x2e, 0x94, 0xf4,
+               0xc3, 0xf0, 0x6b, 0x8f, 0x39, 0x8b, 0xb2, 0x9e, 0x42, 0x36,
+               0x8f, 0x7a, 0x68, 0x59, 0x23, 0xde, 0x3b, 0x67, 0xba, 0xce,
+               0xd2, 0x14, 0xa1, 0xa1, 0xd1, 0x28),
+       .pub_r = chunk_from_chars(
+               0x5c, 0xd4, 0x2a, 0xb9, 0xc4, 0x1b, 0x53, 0x47, 0xf7, 0x4b,
+               0x8d, 0x4e, 0xfb, 0x70, 0x8b, 0x3d, 0x5b, 0x36, 0xdb, 0x65,
+               0x91, 0x53, 0x59, 0xb4, 0x4a, 0xbc, 0x17, 0x64, 0x7b, 0x6b,
+               0x99, 0x99, 0x78, 0x9d, 0x72, 0xa8, 0x48, 0x65, 0xae, 0x2f,
+               0x22, 0x3f, 0x12, 0xb5, 0xa1, 0xab, 0xc1, 0x20, 0xe1, 0x71,
+               0x45, 0x8f, 0xea, 0xa9, 0x39, 0xaa, 0xa3, 0xa8, 0xbf, 0xac,
+               0x46, 0xb4, 0x04, 0xbd, 0x8f, 0x6d, 0x5b, 0x34, 0x8c, 0x0f,
+               0xa4, 0xd8, 0x0c, 0xec, 0xa1, 0x63, 0x56, 0xca, 0x93, 0x32,
+               0x40, 0xbd, 0xe8, 0x72, 0x34, 0x15, 0xa8, 0xec, 0xe0, 0x35,
+               0xb0, 0xed, 0xf3, 0x67, 0x55, 0xde),
+       .shared = chunk_from_chars(
+               0x5e, 0xa1, 0xfc, 0x4a, 0xf7, 0x25, 0x6d, 0x20, 0x55, 0x98,
+               0x1b, 0x11, 0x05, 0x75, 0xe0, 0xa8, 0xca, 0xe5, 0x31, 0x60,
+               0x13, 0x7d, 0x90, 0x4c, 0x59, 0xd9, 0x26, 0xeb, 0x1b, 0x84,
+               0x56, 0xe4, 0x27, 0xaa, 0x8a, 0x45, 0x40, 0x88, 0x4c, 0x37,
+               0xde, 0x15, 0x9a, 0x58, 0x02, 0x8a, 0xbc, 0x0e)
 };
 
 ke_test_vector_t ecp521 = {
-       .method = ECP_521_BIT, .priv_len = 66, .pub_len = 132, .shared_len = 66,
-       .priv_a = "\x01\x13\xf8\x2d\xa8\x25\x73\x5e\x3d\x97\x27\x66\x83\xb2\xb7\x42"
-                         "\x77\xba\xd2\x73\x35\xea\x71\x66\x4a\xf2\x43\x0c\xc4\xf3\x34\x59"
-                         "\xb9\x66\x9e\xe7\x8b\x3f\xfb\x9b\x86\x83\x01\x5d\x34\x4d\xcb\xfe"
-                         "\xf6\xfb\x9a\xf4\xc6\xc4\x70\xbe\x25\x45\x16\xcd\x3c\x1a\x1f\xb4"
-                         "\x73\x62",
-       .priv_b = "\x00\xce\xe3\x48\x0d\x86\x45\xa1\x7d\x24\x9f\x27\x76\xd2\x8b\xae"
-                         "\x61\x69\x52\xd1\x79\x1f\xdb\x4b\x70\xf7\xc3\x37\x87\x32\xaa\x1b"
-                         "\x22\x92\x84\x48\xbc\xd1\xdc\x24\x96\xd4\x35\xb0\x10\x48\x06\x6e"
-                         "\xbe\x4f\x72\x90\x3c\x36\x1b\x1a\x9d\xc1\x19\x3d\xc2\xc9\xd0\x89"
-                         "\x1b\x96",
-       .pub_a  = "\x01\xeb\xb3\x4d\xd7\x57\x21\xab\xf8\xad\xc9\xdb\xed\x17\x88\x9c"
-                         "\xbb\x97\x65\xd9\x0a\x7c\x60\xf2\xce\xf0\x07\xbb\x0f\x2b\x26\xe1"
-                         "\x48\x81\xfd\x44\x42\xe6\x89\xd6\x1c\xb2\xdd\x04\x6e\xe3\x0e\x3f"
-                         "\xfd\x20\xf9\xa4\x5b\xbd\xf6\x41\x3d\x58\x3a\x2d\xbf\x59\x92\x4f"
-                         "\xd3\x5c\x00\xf6\xb6\x32\xd1\x94\xc0\x38\x8e\x22\xd8\x43\x7e\x55"
-                         "\x8c\x55\x2a\xe1\x95\xad\xfd\x15\x3f\x92\xd7\x49\x08\x35\x1b\x2f"
-                         "\x8c\x4e\xda\x94\xed\xb0\x91\x6d\x1b\x53\xc0\x20\xb5\xee\xca\xed"
-                         "\x1a\x5f\xc3\x8a\x23\x3e\x48\x30\x58\x7b\xb2\xee\x34\x89\xb3\xb4"
-                         "\x2a\x5a\x86\xa4",
-       .pub_b  = "\x01\x0e\xbf\xaf\xc6\xe8\x5e\x08\xd2\x4b\xff\xfc\xc1\xa4\x51\x1d"
-                         "\xb0\xe6\x34\xbe\xeb\x1b\x6d\xec\x8c\x59\x39\xae\x44\x76\x62\x01"
-                         "\xaf\x62\x00\x43\x0b\xa9\x7c\x8a\xc6\xa0\xe9\xf0\x8b\x33\xce\x7e"
-                         "\x9f\xee\xb5\xba\x4e\xe5\xe0\xd8\x15\x10\xc2\x42\x95\xb8\xa0\x8d"
-                         "\x02\x35\x00\xa4\xa6\xec\x30\x0d\xf9\xe2\x57\xb0\x37\x2b\x5e\x7a"
-                         "\xbf\xef\x09\x34\x36\x71\x9a\x77\x88\x7e\xbb\x0b\x18\xcf\x80\x99"
-                         "\xb9\xf4\x21\x2b\x6e\x30\xa1\x41\x9c\x18\xe0\x29\xd3\x68\x63\xcc"
-                         "\x9d\x44\x8f\x4d\xba\x4d\x2a\x0e\x60\x71\x1b\xe5\x72\x91\x5f\xbd"
-                         "\x4f\xef\x26\x95",
-       .shared = "\x00\xcd\xea\x89\x62\x1c\xfa\x46\xb1\x32\xf9\xe4\xcf\xe2\x26\x1c"
-                         "\xde\x2d\x43\x68\xeb\x56\x56\x63\x4c\x7c\xc9\x8c\x7a\x00\xcd\xe5"
-                         "\x4e\xd1\x86\x6a\x0d\xd3\xe6\x12\x6c\x9d\x2f\x84\x5d\xaf\xf8\x2c"
-                         "\xeb\x1d\xa0\x8f\x5d\x87\x52\x1b\xb0\xeb\xec\xa7\x79\x11\x16\x9c"
-                         "\x20\xcc",
+       .method = ECP_521_BIT,
+       .seed = chunk_from_chars(
+               0x01, 0x13, 0xf8, 0x2d, 0xa8, 0x25, 0x73, 0x5e, 0x3d, 0x97,
+               0x27, 0x66, 0x83, 0xb2, 0xb7, 0x42, 0x77, 0xba, 0xd2, 0x73,
+               0x35, 0xea, 0x71, 0x66, 0x4a, 0xf2, 0x43, 0x0c, 0xc4, 0xf3,
+               0x34, 0x59, 0xb9, 0x66, 0x9e, 0xe7, 0x8b, 0x3f, 0xfb, 0x9b,
+               0x86, 0x83, 0x01, 0x5d, 0x34, 0x4d, 0xcb, 0xfe, 0xf6, 0xfb,
+               0x9a, 0xf4, 0xc6, 0xc4, 0x70, 0xbe, 0x25, 0x45, 0x16, 0xcd,
+               0x3c, 0x1a, 0x1f, 0xb4, 0x73, 0x62, /* - */
+               0x00, 0xce, 0xe3, 0x48, 0x0d, 0x86, 0x45, 0xa1, 0x7d, 0x24,
+               0x9f, 0x27, 0x76, 0xd2, 0x8b, 0xae, 0x61, 0x69, 0x52, 0xd1,
+               0x79, 0x1f, 0xdb, 0x4b, 0x70, 0xf7, 0xc3, 0x37, 0x87, 0x32,
+               0xaa, 0x1b, 0x22, 0x92, 0x84, 0x48, 0xbc, 0xd1, 0xdc, 0x24,
+               0x96, 0xd4, 0x35, 0xb0, 0x10, 0x48, 0x06, 0x6e, 0xbe, 0x4f,
+               0x72, 0x90, 0x3c, 0x36, 0x1b, 0x1a, 0x9d, 0xc1, 0x19, 0x3d,
+               0xc2, 0xc9, 0xd0, 0x89, 0x1b, 0x96),
+       .pub_i = chunk_from_chars(
+               0x01, 0xeb, 0xb3, 0x4d, 0xd7, 0x57, 0x21, 0xab, 0xf8, 0xad,
+               0xc9, 0xdb, 0xed, 0x17, 0x88, 0x9c, 0xbb, 0x97, 0x65, 0xd9,
+               0x0a, 0x7c, 0x60, 0xf2, 0xce, 0xf0, 0x07, 0xbb, 0x0f, 0x2b,
+               0x26, 0xe1, 0x48, 0x81, 0xfd, 0x44, 0x42, 0xe6, 0x89, 0xd6,
+               0x1c, 0xb2, 0xdd, 0x04, 0x6e, 0xe3, 0x0e, 0x3f, 0xfd, 0x20,
+               0xf9, 0xa4, 0x5b, 0xbd, 0xf6, 0x41, 0x3d, 0x58, 0x3a, 0x2d,
+               0xbf, 0x59, 0x92, 0x4f, 0xd3, 0x5c, 0x00, 0xf6, 0xb6, 0x32,
+               0xd1, 0x94, 0xc0, 0x38, 0x8e, 0x22, 0xd8, 0x43, 0x7e, 0x55,
+               0x8c, 0x55, 0x2a, 0xe1, 0x95, 0xad, 0xfd, 0x15, 0x3f, 0x92,
+               0xd7, 0x49, 0x08, 0x35, 0x1b, 0x2f, 0x8c, 0x4e, 0xda, 0x94, /* 100 */
+               0xed, 0xb0, 0x91, 0x6d, 0x1b, 0x53, 0xc0, 0x20, 0xb5, 0xee,
+               0xca, 0xed, 0x1a, 0x5f, 0xc3, 0x8a, 0x23, 0x3e, 0x48, 0x30,
+               0x58, 0x7b, 0xb2, 0xee, 0x34, 0x89, 0xb3, 0xb4, 0x2a, 0x5a,
+               0x86, 0xa4),
+       .pub_r = chunk_from_chars(
+               0x01, 0x0e, 0xbf, 0xaf, 0xc6, 0xe8, 0x5e, 0x08, 0xd2, 0x4b,
+               0xff, 0xfc, 0xc1, 0xa4, 0x51, 0x1d, 0xb0, 0xe6, 0x34, 0xbe,
+               0xeb, 0x1b, 0x6d, 0xec, 0x8c, 0x59, 0x39, 0xae, 0x44, 0x76,
+               0x62, 0x01, 0xaf, 0x62, 0x00, 0x43, 0x0b, 0xa9, 0x7c, 0x8a,
+               0xc6, 0xa0, 0xe9, 0xf0, 0x8b, 0x33, 0xce, 0x7e, 0x9f, 0xee,
+               0xb5, 0xba, 0x4e, 0xe5, 0xe0, 0xd8, 0x15, 0x10, 0xc2, 0x42,
+               0x95, 0xb8, 0xa0, 0x8d, 0x02, 0x35, 0x00, 0xa4, 0xa6, 0xec,
+               0x30, 0x0d, 0xf9, 0xe2, 0x57, 0xb0, 0x37, 0x2b, 0x5e, 0x7a,
+               0xbf, 0xef, 0x09, 0x34, 0x36, 0x71, 0x9a, 0x77, 0x88, 0x7e,
+               0xbb, 0x0b, 0x18, 0xcf, 0x80, 0x99, 0xb9, 0xf4, 0x21, 0x2b, /* 100 */
+               0x6e, 0x30, 0xa1, 0x41, 0x9c, 0x18, 0xe0, 0x29, 0xd3, 0x68,
+               0x63, 0xcc, 0x9d, 0x44, 0x8f, 0x4d, 0xba, 0x4d, 0x2a, 0x0e,
+               0x60, 0x71, 0x1b, 0xe5, 0x72, 0x91, 0x5f, 0xbd, 0x4f, 0xef,
+               0x26, 0x95),
+       .shared = chunk_from_chars(
+               0x00, 0xcd, 0xea, 0x89, 0x62, 0x1c, 0xfa, 0x46, 0xb1, 0x32,
+               0xf9, 0xe4, 0xcf, 0xe2, 0x26, 0x1c, 0xde, 0x2d, 0x43, 0x68,
+               0xeb, 0x56, 0x56, 0x63, 0x4c, 0x7c, 0xc9, 0x8c, 0x7a, 0x00,
+               0xcd, 0xe5, 0x4e, 0xd1, 0x86, 0x6a, 0x0d, 0xd3, 0xe6, 0x12,
+               0x6c, 0x9d, 0x2f, 0x84, 0x5d, 0xaf, 0xf8, 0x2c, 0xeb, 0x1d,
+               0xa0, 0x8f, 0x5d, 0x87, 0x52, 0x1b, 0xb0, 0xeb, 0xec, 0xa7,
+               0x79, 0x11, 0x16, 0x9c, 0x20, 0xcc)
 };
index b50e3f2886a83e5e3e99ef71bbf637d8409866e7..e33b7c2b190982ee82a55b69d01eec52ac2ed52d 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2019 Andreas Steffen
  * Copyright (C) 2015 Martin Willi
  *
  * Copyright (C) secunet Security Networks AG
  */
 
 ke_test_vector_t ecp224bp = {
-       .method = ECP_224_BP, .priv_len = 28, .pub_len = 56, .shared_len = 28,
-       .priv_a = "\x7c\x4b\x7a\x2c\x8a\x4b\xad\x1f\xbb\x7d\x79\xcc\x09\x55\xdb\x7c"
-                         "\x6a\x46\x60\xca\x64\xcc\x47\x78\x15\x9b\x49\x5e",
-       .priv_b = "\x63\x97\x6d\x4a\xae\x6c\xd0\xf6\xdd\x18\xde\xfe\xf5\x5d\x96\x56"
-                         "\x9d\x05\x07\xc0\x3e\x74\xd6\x48\x6f\xfa\x28\xfb",
-       .pub_a  = "\xb1\x04\xa6\x7a\x6f\x6e\x85\xe1\x4e\xc1\x82\x5e\x15\x39\xe8\xec"
-                         "\xdb\xbf\x58\x49\x22\x36\x7d\xd8\x8c\x6b\xdc\xf2\x46\xd7\x82\xe7"
-                         "\xfd\xb5\xf6\x0c\xd8\x40\x43\x01\xac\x59\x49\xc5\x8e\xdb\x26\xbc"
-                         "\x68\xba\x07\x69\x5b\x75\x0a\x94",
-       .pub_b  = "\x2a\x97\x08\x9a\x92\x96\x14\x7b\x71\xb2\x1a\x4b\x57\x4e\x12\x78"
-                         "\x24\x5b\x53\x6f\x14\xd8\xc2\xb9\xd0\x7a\x87\x4e\x9b\x90\x0d\x7c"
-                         "\x77\xa7\x09\xa7\x97\x27\x6b\x8c\xa1\xba\x61\xbb\x95\xb5\x46\xfc"
-                         "\x29\xf8\x62\xe4\x4d\x59\xd2\x5b",
-       .shared = "\x31\x2d\xfd\x98\x78\x3f\x9f\xb7\x7b\x97\x04\x94\x5a\x73\xbe\xb6"
-                         "\xdc\xcb\xe3\xb6\x5d\x0f\x96\x7d\xca\xb5\x74\xeb",
+       .method = ECP_224_BP,
+       .seed = chunk_from_chars(
+               0x7c, 0x4b, 0x7a, 0x2c, 0x8a, 0x4b, 0xad, 0x1f, 0xbb, 0x7d,
+               0x79, 0xcc, 0x09, 0x55, 0xdb, 0x7c, 0x6a, 0x46, 0x60, 0xca,
+               0x64, 0xcc, 0x47, 0x78, 0x15, 0x9b, 0x49, 0x5e, /* - */
+               0x63, 0x97, 0x6d, 0x4a, 0xae, 0x6c, 0xd0, 0xf6, 0xdd, 0x18,
+               0xde, 0xfe, 0xf5, 0x5d, 0x96, 0x56, 0x9d, 0x05, 0x07, 0xc0,
+               0x3e, 0x74, 0xd6, 0x48, 0x6f, 0xfa, 0x28, 0xfb),
+       .pub_i = chunk_from_chars(
+               0xb1, 0x04, 0xa6, 0x7a, 0x6f, 0x6e, 0x85, 0xe1, 0x4e, 0xc1,
+               0x82, 0x5e, 0x15, 0x39, 0xe8, 0xec, 0xdb, 0xbf, 0x58, 0x49,
+               0x22, 0x36, 0x7d, 0xd8, 0x8c, 0x6b, 0xdc, 0xf2, 0x46, 0xd7,
+               0x82, 0xe7, 0xfd, 0xb5, 0xf6, 0x0c, 0xd8, 0x40, 0x43, 0x01,
+               0xac, 0x59, 0x49, 0xc5, 0x8e, 0xdb, 0x26, 0xbc, 0x68, 0xba,
+               0x07, 0x69, 0x5b, 0x75, 0x0a, 0x94),
+       .pub_r = chunk_from_chars(
+               0x2a, 0x97, 0x08, 0x9a, 0x92, 0x96, 0x14, 0x7b, 0x71, 0xb2,
+               0x1a, 0x4b, 0x57, 0x4e, 0x12, 0x78, 0x24, 0x5b, 0x53, 0x6f,
+               0x14, 0xd8, 0xc2, 0xb9, 0xd0, 0x7a, 0x87, 0x4e, 0x9b, 0x90,
+               0x0d, 0x7c, 0x77, 0xa7, 0x09, 0xa7, 0x97, 0x27, 0x6b, 0x8c,
+               0xa1, 0xba, 0x61, 0xbb, 0x95, 0xb5, 0x46, 0xfc, 0x29, 0xf8,
+               0x62, 0xe4, 0x4d, 0x59, 0xd2, 0x5b),
+       .shared = chunk_from_chars(
+               0x31, 0x2d, 0xfd, 0x98, 0x78, 0x3f, 0x9f, 0xb7, 0x7b, 0x97,
+               0x04, 0x94, 0x5a, 0x73, 0xbe, 0xb6, 0xdc, 0xcb, 0xe3, 0xb6,
+               0x5d, 0x0f, 0x96, 0x7d, 0xca, 0xb5, 0x74, 0xeb)
 };
 
 ke_test_vector_t ecp256bp = {
-       .method = ECP_256_BP, .priv_len = 32, .pub_len = 64, .shared_len = 32,
-       .priv_a = "\x81\xdb\x1e\xe1\x00\x15\x0f\xf2\xea\x33\x8d\x70\x82\x71\xbe\x38"
-                         "\x30\x0c\xb5\x42\x41\xd7\x99\x50\xf7\x7b\x06\x30\x39\x80\x4f\x1d",
-       .priv_b = "\x55\xe4\x0b\xc4\x1e\x37\xe3\xe2\xad\x25\xc3\xc6\x65\x45\x11\xff"
-                         "\xa8\x47\x4a\x91\xa0\x03\x20\x87\x59\x38\x52\xd3\xe7\xd7\x6b\xd3",
-       .pub_a  = "\x44\x10\x6e\x91\x3f\x92\xbc\x02\xa1\x70\x5d\x99\x53\xa8\x41\x4d"
-                         "\xb9\x5e\x1a\xaa\x49\xe8\x1d\x9e\x85\xf9\x29\xa8\xe3\x10\x0b\xe5"
-                         "\x8a\xb4\x84\x6f\x11\xca\xcc\xb7\x3c\xe4\x9c\xbd\xd1\x20\xf5\xa9"
-                         "\x00\xa6\x9f\xd3\x2c\x27\x22\x23\xf7\x89\xef\x10\xeb\x08\x9b\xdc",
-       .pub_b  = "\x8d\x2d\x68\x8c\x6c\xf9\x3e\x11\x60\xad\x04\xcc\x44\x29\x11\x7d"
-                         "\xc2\xc4\x18\x25\xe1\xe9\xfc\xa0\xad\xdd\x34\xe6\xf1\xb3\x9f\x7b"
-                         "\x99\x0c\x57\x52\x08\x12\xbe\x51\x26\x41\xe4\x70\x34\x83\x21\x06"
-                         "\xbc\x7d\x3e\x8d\xd0\xe4\xc7\xf1\x13\x6d\x70\x06\x54\x7c\xec\x6a",
-       .shared = "\x89\xaf\xc3\x9d\x41\xd3\xb3\x27\x81\x4b\x80\x94\x0b\x04\x25\x90"
-                         "\xf9\x65\x56\xec\x91\xe6\xae\x79\x39\xbc\xe3\x1f\x3a\x18\xbf\x2b",
+       .method = ECP_256_BP,
+       .seed = chunk_from_chars(
+               0x81, 0xdb, 0x1e, 0xe1, 0x00, 0x15, 0x0f, 0xf2, 0xea, 0x33,
+               0x8d, 0x70, 0x82, 0x71, 0xbe, 0x38, 0x30, 0x0c, 0xb5, 0x42,
+               0x41, 0xd7, 0x99, 0x50, 0xf7, 0x7b, 0x06, 0x30, 0x39, 0x80,
+               0x4f, 0x1d, /* - */
+               0x55, 0xe4, 0x0b, 0xc4, 0x1e, 0x37, 0xe3, 0xe2, 0xad, 0x25,
+               0xc3, 0xc6, 0x65, 0x45, 0x11, 0xff, 0xa8, 0x47, 0x4a, 0x91,
+               0xa0, 0x03, 0x20, 0x87, 0x59, 0x38, 0x52, 0xd3, 0xe7, 0xd7,
+               0x6b, 0xd3),
+       .pub_i = chunk_from_chars(
+               0x44, 0x10, 0x6e, 0x91, 0x3f, 0x92, 0xbc, 0x02, 0xa1, 0x70,
+               0x5d, 0x99, 0x53, 0xa8, 0x41, 0x4d, 0xb9, 0x5e, 0x1a, 0xaa,
+               0x49, 0xe8, 0x1d, 0x9e, 0x85, 0xf9, 0x29, 0xa8, 0xe3, 0x10,
+               0x0b, 0xe5, 0x8a, 0xb4, 0x84, 0x6f, 0x11, 0xca, 0xcc, 0xb7,
+               0x3c, 0xe4, 0x9c, 0xbd, 0xd1, 0x20, 0xf5, 0xa9, 0x00, 0xa6,
+               0x9f, 0xd3, 0x2c, 0x27, 0x22, 0x23, 0xf7, 0x89, 0xef, 0x10,
+               0xeb, 0x08, 0x9b, 0xdc),
+       .pub_r = chunk_from_chars(
+               0x8d, 0x2d, 0x68, 0x8c, 0x6c, 0xf9, 0x3e, 0x11, 0x60, 0xad,
+               0x04, 0xcc, 0x44, 0x29, 0x11, 0x7d, 0xc2, 0xc4, 0x18, 0x25,
+               0xe1, 0xe9, 0xfc, 0xa0, 0xad, 0xdd, 0x34, 0xe6, 0xf1, 0xb3,
+               0x9f, 0x7b, 0x99, 0x0c, 0x57, 0x52, 0x08, 0x12, 0xbe, 0x51,
+               0x26, 0x41, 0xe4, 0x70, 0x34, 0x83, 0x21, 0x06, 0xbc, 0x7d,
+               0x3e, 0x8d, 0xd0, 0xe4, 0xc7, 0xf1, 0x13, 0x6d, 0x70, 0x06,
+               0x54, 0x7c, 0xec, 0x6a),
+       .shared = chunk_from_chars(
+               0x89, 0xaf, 0xc3, 0x9d, 0x41, 0xd3, 0xb3, 0x27, 0x81, 0x4b,
+               0x80, 0x94, 0x0b, 0x04, 0x25, 0x90, 0xf9, 0x65, 0x56, 0xec,
+               0x91, 0xe6, 0xae, 0x79, 0x39, 0xbc, 0xe3, 0x1f, 0x3a, 0x18,
+               0xbf, 0x2b)
 };
 
 ke_test_vector_t ecp384bp = {
-       .method = ECP_384_BP, .priv_len = 48, .pub_len = 96, .shared_len = 48,
-       .priv_a = "\x1e\x20\xf5\xe0\x48\xa5\x88\x6f\x1f\x15\x7c\x74\xe9\x1b\xde\x2b"
-                         "\x98\xc8\xb5\x2d\x58\xe5\x00\x3d\x57\x05\x3f\xc4\xb0\xbd\x65\xd6"
-                         "\xf1\x5e\xb5\xd1\xee\x16\x10\xdf\x87\x07\x95\x14\x36\x27\xd0\x42",
-       .priv_b = "\x03\x26\x40\xbc\x60\x03\xc5\x92\x60\xf7\x25\x0c\x3d\xb5\x8c\xe6"
-                         "\x47\xf9\x8e\x12\x60\xac\xce\x4a\xcd\xa3\xdd\x86\x9f\x74\xe0\x1f"
-                         "\x8b\xa5\xe0\x32\x43\x09\xdb\x6a\x98\x31\x49\x7a\xba\xc9\x66\x70",
-       .pub_a  = "\x68\xb6\x65\xdd\x91\xc1\x95\x80\x06\x50\xcd\xd3\x63\xc6\x25\xf4"
-                         "\xe7\x42\xe8\x13\x46\x67\xb7\x67\xb1\xb4\x76\x79\x35\x88\xf8\x85"
-                         "\xab\x69\x8c\x85\x2d\x4a\x6e\x77\xa2\x52\xd6\x38\x0f\xca\xf0\x68"
-                         "\x55\xbc\x91\xa3\x9c\x9e\xc0\x1d\xee\x36\x01\x7b\x7d\x67\x3a\x93"
-                         "\x12\x36\xd2\xf1\xf5\xc8\x39\x42\xd0\x49\xe3\xfa\x20\x60\x74\x93"
-                         "\xe0\xd0\x38\xff\x2f\xd3\x0c\x2a\xb6\x7d\x15\xc8\x5f\x7f\xaa\x59",
-       .pub_b  = "\x4d\x44\x32\x6f\x26\x9a\x59\x7a\x5b\x58\xbb\xa5\x65\xda\x55\x56"
-                         "\xed\x7f\xd9\xa8\xa9\xeb\x76\xc2\x5f\x46\xdb\x69\xd1\x9d\xc8\xce"
-                         "\x6a\xd1\x8e\x40\x4b\x15\x73\x8b\x20\x86\xdf\x37\xe7\x1d\x1e\xb4"
-                         "\x62\xd6\x92\x13\x6d\xe5\x6c\xbe\x93\xbf\x5f\xa3\x18\x8e\xf5\x8b"
-                         "\xc8\xa3\xa0\xec\x6c\x1e\x15\x1a\x21\x03\x8a\x42\xe9\x18\x53\x29"
-                         "\xb5\xb2\x75\x90\x3d\x19\x2f\x8d\x4e\x1f\x32\xfe\x9c\xc7\x8c\x48",
-       .shared = "\x0b\xd9\xd3\xa7\xea\x0b\x3d\x51\x9d\x09\xd8\xe4\x8d\x07\x85\xfb"
-                         "\x74\x4a\x6b\x35\x5e\x63\x04\xbc\x51\xc2\x29\xfb\xbc\xe2\x39\xbb"
-                         "\xad\xf6\x40\x37\x15\xc3\x5d\x4f\xb2\xa5\x44\x4f\x57\x5d\x4f\x42",
+       .method = ECP_384_BP,
+       .seed = chunk_from_chars(
+               0x1e, 0x20, 0xf5, 0xe0, 0x48, 0xa5, 0x88, 0x6f, 0x1f, 0x15,
+               0x7c, 0x74, 0xe9, 0x1b, 0xde, 0x2b, 0x98, 0xc8, 0xb5, 0x2d,
+               0x58, 0xe5, 0x00, 0x3d, 0x57, 0x05, 0x3f, 0xc4, 0xb0, 0xbd,
+               0x65, 0xd6, 0xf1, 0x5e, 0xb5, 0xd1, 0xee, 0x16, 0x10, 0xdf,
+               0x87, 0x07, 0x95, 0x14, 0x36, 0x27, 0xd0, 0x42, /* - */
+               0x03, 0x26, 0x40, 0xbc, 0x60, 0x03, 0xc5, 0x92, 0x60, 0xf7,
+               0x25, 0x0c, 0x3d, 0xb5, 0x8c, 0xe6, 0x47, 0xf9, 0x8e, 0x12,
+               0x60, 0xac, 0xce, 0x4a, 0xcd, 0xa3, 0xdd, 0x86, 0x9f, 0x74,
+               0xe0, 0x1f, 0x8b, 0xa5, 0xe0, 0x32, 0x43, 0x09, 0xdb, 0x6a,
+               0x98, 0x31, 0x49, 0x7a, 0xba, 0xc9, 0x66, 0x70),
+       .pub_i = chunk_from_chars(
+               0x68, 0xb6, 0x65, 0xdd, 0x91, 0xc1, 0x95, 0x80, 0x06, 0x50,
+               0xcd, 0xd3, 0x63, 0xc6, 0x25, 0xf4, 0xe7, 0x42, 0xe8, 0x13,
+               0x46, 0x67, 0xb7, 0x67, 0xb1, 0xb4, 0x76, 0x79, 0x35, 0x88,
+               0xf8, 0x85, 0xab, 0x69, 0x8c, 0x85, 0x2d, 0x4a, 0x6e, 0x77,
+               0xa2, 0x52, 0xd6, 0x38, 0x0f, 0xca, 0xf0, 0x68, 0x55, 0xbc,
+               0x91, 0xa3, 0x9c, 0x9e, 0xc0, 0x1d, 0xee, 0x36, 0x01, 0x7b,
+               0x7d, 0x67, 0x3a, 0x93, 0x12, 0x36, 0xd2, 0xf1, 0xf5, 0xc8,
+               0x39, 0x42, 0xd0, 0x49, 0xe3, 0xfa, 0x20, 0x60, 0x74, 0x93,
+               0xe0, 0xd0, 0x38, 0xff, 0x2f, 0xd3, 0x0c, 0x2a, 0xb6, 0x7d,
+               0x15, 0xc8, 0x5f, 0x7f, 0xaa, 0x59),
+       .pub_r = chunk_from_chars(
+               0x4d, 0x44, 0x32, 0x6f, 0x26, 0x9a, 0x59, 0x7a, 0x5b, 0x58,
+               0xbb, 0xa5, 0x65, 0xda, 0x55, 0x56, 0xed, 0x7f, 0xd9, 0xa8,
+               0xa9, 0xeb, 0x76, 0xc2, 0x5f, 0x46, 0xdb, 0x69, 0xd1, 0x9d,
+               0xc8, 0xce, 0x6a, 0xd1, 0x8e, 0x40, 0x4b, 0x15, 0x73, 0x8b,
+               0x20, 0x86, 0xdf, 0x37, 0xe7, 0x1d, 0x1e, 0xb4, 0x62, 0xd6,
+               0x92, 0x13, 0x6d, 0xe5, 0x6c, 0xbe, 0x93, 0xbf, 0x5f, 0xa3,
+               0x18, 0x8e, 0xf5, 0x8b, 0xc8, 0xa3, 0xa0, 0xec, 0x6c, 0x1e,
+               0x15, 0x1a, 0x21, 0x03, 0x8a, 0x42, 0xe9, 0x18, 0x53, 0x29,
+               0xb5, 0xb2, 0x75, 0x90, 0x3d, 0x19, 0x2f, 0x8d, 0x4e, 0x1f,
+               0x32, 0xfe, 0x9c, 0xc7, 0x8c, 0x48),
+       .shared = chunk_from_chars(
+               0x0b, 0xd9, 0xd3, 0xa7, 0xea, 0x0b, 0x3d, 0x51, 0x9d, 0x09,
+               0xd8, 0xe4, 0x8d, 0x07, 0x85, 0xfb, 0x74, 0x4a, 0x6b, 0x35,
+               0x5e, 0x63, 0x04, 0xbc, 0x51, 0xc2, 0x29, 0xfb, 0xbc, 0xe2,
+               0x39, 0xbb, 0xad, 0xf6, 0x40, 0x37, 0x15, 0xc3, 0x5d, 0x4f,
+               0xb2, 0xa5, 0x44, 0x4f, 0x57, 0x5d, 0x4f, 0x42)
 };
 
 ke_test_vector_t ecp512bp = {
-       .method = ECP_512_BP, .priv_len = 64, .pub_len = 128, .shared_len = 64,
-       .priv_a = "\x16\x30\x2f\xf0\xdb\xbb\x5a\x8d\x73\x3d\xab\x71\x41\xc1\xb4\x5a"
-                         "\xcb\xc8\x71\x59\x39\x67\x7f\x6a\x56\x85\x0a\x38\xbd\x87\xbd\x59"
-                         "\xb0\x9e\x80\x27\x96\x09\xff\x33\x3e\xb9\xd4\xc0\x61\x23\x1f\xb2"
-                         "\x6f\x92\xee\xb0\x49\x82\xa5\xf1\xd1\x76\x4c\xad\x57\x66\x54\x22",
-       .priv_b = "\x23\x0e\x18\xe1\xbc\xc8\x8a\x36\x2f\xa5\x4e\x4e\xa3\x90\x20\x09"
-                         "\x29\x2f\x7f\x80\x33\x62\x4f\xd4\x71\xb5\xd8\xac\xe4\x9d\x12\xcf"
-                         "\xab\xbc\x19\x96\x3d\xab\x8e\x2f\x1e\xba\x00\xbf\xfb\x29\xe4\xd7"
-                         "\x2d\x13\xf2\x22\x45\x62\xf4\x05\xcb\x80\x50\x36\x66\xb2\x54\x29",
-       .pub_a  = "\x0a\x42\x05\x17\xe4\x06\xaa\xc0\xac\xdc\xe9\x0f\xcd\x71\x48\x77"
-                         "\x18\xd3\xb9\x53\xef\xd7\xfb\xec\x5f\x7f\x27\xe2\x8c\x61\x49\x99"
-                         "\x93\x97\xe9\x1e\x02\x9e\x06\x45\x7d\xb2\xd3\xe6\x40\x66\x8b\x39"
-                         "\x2c\x2a\x7e\x73\x7a\x7f\x0b\xf0\x44\x36\xd1\x16\x40\xfd\x09\xfd"
-                         "\x72\xe6\x88\x2e\x8d\xb2\x8a\xad\x36\x23\x7c\xd2\x5d\x58\x0d\xb2"
-                         "\x37\x83\x96\x1c\x8d\xc5\x2d\xfa\x2e\xc1\x38\xad\x47\x2a\x0f\xce"
-                         "\xf3\x88\x7c\xf6\x2b\x62\x3b\x2a\x87\xde\x5c\x58\x83\x01\xea\x3e"
-                         "\x5f\xc2\x69\xb3\x73\xb6\x07\x24\xf5\xe8\x2a\x6a\xd1\x47\xfd\xe7",
-       .pub_b  = "\x9d\x45\xf6\x6d\xe5\xd6\x7e\x2e\x6d\xb6\xe9\x3a\x59\xce\x0b\xb4"
-                         "\x81\x06\x09\x7f\xf7\x8a\x08\x1d\xe7\x81\xcd\xb3\x1f\xce\x8c\xcb"
-                         "\xaa\xea\x8d\xd4\x32\x0c\x41\x19\xf1\xe9\xcd\x43\x7a\x2e\xab\x37"
-                         "\x31\xfa\x96\x68\xab\x26\x8d\x87\x1d\xed\xa5\x5a\x54\x73\x19\x9f"
-                         "\x2f\xdc\x31\x30\x95\xbc\xdd\x5f\xb3\xa9\x16\x36\xf0\x7a\x95\x9c"
-                         "\x8e\x86\xb5\x63\x6a\x1e\x93\x0e\x83\x96\x04\x9c\xb4\x81\x96\x1d"
-                         "\x36\x5c\xc1\x14\x53\xa0\x6c\x71\x98\x35\x47\x5b\x12\xcb\x52\xfc"
-                         "\x3c\x38\x3b\xce\x35\xe2\x7e\xf1\x94\x51\x2b\x71\x87\x62\x85\xfa",
-       .shared = "\xa7\x92\x70\x98\x65\x5f\x1f\x99\x76\xfa\x50\xa9\xd5\x66\x86\x5d"
-                         "\xc5\x30\x33\x18\x46\x38\x1c\x87\x25\x6b\xaf\x32\x26\x24\x4b\x76"
-                         "\xd3\x64\x03\xc0\x24\xd7\xbb\xf0\xaa\x08\x03\xea\xff\x40\x5d\x3d"
-                         "\x24\xf1\x1a\x9b\x5c\x0b\xef\x67\x9f\xe1\x45\x4b\x21\xc4\xcd\x1f",
+       .method = ECP_512_BP,
+       .seed = chunk_from_chars(
+               0x16, 0x30, 0x2f, 0xf0, 0xdb, 0xbb, 0x5a, 0x8d, 0x73, 0x3d,
+               0xab, 0x71, 0x41, 0xc1, 0xb4, 0x5a, 0xcb, 0xc8, 0x71, 0x59,
+               0x39, 0x67, 0x7f, 0x6a, 0x56, 0x85, 0x0a, 0x38, 0xbd, 0x87,
+               0xbd, 0x59, 0xb0, 0x9e, 0x80, 0x27, 0x96, 0x09, 0xff, 0x33,
+               0x3e, 0xb9, 0xd4, 0xc0, 0x61, 0x23, 0x1f, 0xb2, 0x6f, 0x92,
+               0xee, 0xb0, 0x49, 0x82, 0xa5, 0xf1, 0xd1, 0x76, 0x4c, 0xad,
+               0x57, 0x66, 0x54, 0x22, /* - */
+               0x23, 0x0e, 0x18, 0xe1, 0xbc, 0xc8, 0x8a, 0x36, 0x2f, 0xa5,
+               0x4e, 0x4e, 0xa3, 0x90, 0x20, 0x09, 0x29, 0x2f, 0x7f, 0x80,
+               0x33, 0x62, 0x4f, 0xd4, 0x71, 0xb5, 0xd8, 0xac, 0xe4, 0x9d,
+               0x12, 0xcf, 0xab, 0xbc, 0x19, 0x96, 0x3d, 0xab, 0x8e, 0x2f,
+               0x1e, 0xba, 0x00, 0xbf, 0xfb, 0x29, 0xe4, 0xd7, 0x2d, 0x13,
+               0xf2, 0x22, 0x45, 0x62, 0xf4, 0x05, 0xcb, 0x80, 0x50, 0x36,
+               0x66, 0xb2, 0x54, 0x29),
+       .pub_i = chunk_from_chars(
+               0x0a, 0x42, 0x05, 0x17, 0xe4, 0x06, 0xaa, 0xc0, 0xac, 0xdc,
+               0xe9, 0x0f, 0xcd, 0x71, 0x48, 0x77, 0x18, 0xd3, 0xb9, 0x53,
+               0xef, 0xd7, 0xfb, 0xec, 0x5f, 0x7f, 0x27, 0xe2, 0x8c, 0x61,
+               0x49, 0x99, 0x93, 0x97, 0xe9, 0x1e, 0x02, 0x9e, 0x06, 0x45,
+               0x7d, 0xb2, 0xd3, 0xe6, 0x40, 0x66, 0x8b, 0x39, 0x2c, 0x2a,
+               0x7e, 0x73, 0x7a, 0x7f, 0x0b, 0xf0, 0x44, 0x36, 0xd1, 0x16,
+               0x40, 0xfd, 0x09, 0xfd, 0x72, 0xe6, 0x88, 0x2e, 0x8d, 0xb2,
+               0x8a, 0xad, 0x36, 0x23, 0x7c, 0xd2, 0x5d, 0x58, 0x0d, 0xb2,
+               0x37, 0x83, 0x96, 0x1c, 0x8d, 0xc5, 0x2d, 0xfa, 0x2e, 0xc1,
+               0x38, 0xad, 0x47, 0x2a, 0x0f, 0xce, 0xf3, 0x88, 0x7c, 0xf6, /* 100 */
+               0x2b, 0x62, 0x3b, 0x2a, 0x87, 0xde, 0x5c, 0x58, 0x83, 0x01,
+               0xea, 0x3e, 0x5f, 0xc2, 0x69, 0xb3, 0x73, 0xb6, 0x07, 0x24,
+               0xf5, 0xe8, 0x2a, 0x6a, 0xd1, 0x47, 0xfd, 0xe7),
+       .pub_r = chunk_from_chars(
+               0x9d, 0x45, 0xf6, 0x6d, 0xe5, 0xd6, 0x7e, 0x2e, 0x6d, 0xb6,
+               0xe9, 0x3a, 0x59, 0xce, 0x0b, 0xb4, 0x81, 0x06, 0x09, 0x7f,
+               0xf7, 0x8a, 0x08, 0x1d, 0xe7, 0x81, 0xcd, 0xb3, 0x1f, 0xce,
+               0x8c, 0xcb, 0xaa, 0xea, 0x8d, 0xd4, 0x32, 0x0c, 0x41, 0x19,
+               0xf1, 0xe9, 0xcd, 0x43, 0x7a, 0x2e, 0xab, 0x37, 0x31, 0xfa,
+               0x96, 0x68, 0xab, 0x26, 0x8d, 0x87, 0x1d, 0xed, 0xa5, 0x5a,
+               0x54, 0x73, 0x19, 0x9f, 0x2f, 0xdc, 0x31, 0x30, 0x95, 0xbc,
+               0xdd, 0x5f, 0xb3, 0xa9, 0x16, 0x36, 0xf0, 0x7a, 0x95, 0x9c,
+               0x8e, 0x86, 0xb5, 0x63, 0x6a, 0x1e, 0x93, 0x0e, 0x83, 0x96,
+               0x04, 0x9c, 0xb4, 0x81, 0x96, 0x1d, 0x36, 0x5c, 0xc1, 0x14, /* 100 */
+               0x53, 0xa0, 0x6c, 0x71, 0x98, 0x35, 0x47, 0x5b, 0x12, 0xcb,
+               0x52, 0xfc, 0x3c, 0x38, 0x3b, 0xce, 0x35, 0xe2, 0x7e, 0xf1,
+               0x94, 0x51, 0x2b, 0x71, 0x87, 0x62, 0x85, 0xfa),
+       .shared = chunk_from_chars(
+               0xa7, 0x92, 0x70, 0x98, 0x65, 0x5f, 0x1f, 0x99, 0x76, 0xfa,
+               0x50, 0xa9, 0xd5, 0x66, 0x86, 0x5d, 0xc5, 0x30, 0x33, 0x18,
+               0x46, 0x38, 0x1c, 0x87, 0x25, 0x6b, 0xaf, 0x32, 0x26, 0x24,
+               0x4b, 0x76, 0xd3, 0x64, 0x03, 0xc0, 0x24, 0xd7, 0xbb, 0xf0,
+               0xaa, 0x08, 0x03, 0xea, 0xff, 0x40, 0x5d, 0x3d, 0x24, 0xf1,
+               0x1a, 0x9b, 0x5c, 0x0b, 0xef, 0x67, 0x9f, 0xe1, 0x45, 0x4b,
+               0x21, 0xc4, 0xcd, 0x1f)
 };
index 897f537b7bbd7fef8d8cce9c0efe4c764b12024f..444bc0bfa24d57c351051922f1c3733efc2f8e2a 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2019 Andreas Steffen
  * Copyright (C) 2015 Martin Willi
  *
  * Copyright (C) secunet Security Networks AG
  */
 
 ke_test_vector_t modp768 = {
-       .method = MODP_768_BIT, .priv_len = 32, .pub_len = 96, .shared_len = 96,
-       .priv_a = "\x60\x91\xff\xc6\xde\x28\xc1\xcc\xc7\xc6\x5d\xa6\x11\xab\xfa\xe8"
-                         "\x6a\x10\x74\xb2\x22\x43\xe3\x70\x6c\xb6\xde\x2f\xe2\x9d\x11\x42",
-       .priv_b = "\x76\xe0\x2f\xc3\xea\xbe\x6a\x0f\xce\xd6\xc3\x1e\x59\x45\xd1\x67"
-                         "\xfa\xd0\x02\x00\xb4\xaf\x12\xcd\x6f\xc6\xd7\xe3\x81\x48\x62\x78",
-       .pub_a  = "\xd7\xa2\x54\x62\x99\x01\xc8\x89\x53\x2c\x3e\x44\xda\x3d\x0b\x7e"
-                         "\x92\x27\x37\x70\xc6\x26\xc3\x91\x90\x52\x2d\xab\x67\x07\xca\xff"
-                         "\x36\x59\x10\x9f\x2f\x43\x24\xa4\x17\xeb\x7d\xc4\x56\x3a\x09\xba"
-                         "\x04\xcd\x3c\x9b\x27\xd3\xc1\x22\x7e\xb1\x9d\xcb\x69\xfe\xf3\xb6"
-                         "\xe2\xaa\x13\x81\x23\x24\x06\x64\x2d\xd1\x50\x78\x57\x07\xf4\x7c"
-                         "\x3d\x74\x8a\x3d\x6b\x96\xd0\x00\xc5\x2c\x99\xd1\x0b\x65\xf2\xd1",
-       .pub_b  = "\xf0\xe9\xdc\x78\x10\x4c\x97\x99\xb6\x70\x74\xb0\x7d\x8f\x09\x7a"
-                         "\xa8\x82\xbd\xe4\x64\xc8\xeb\x9a\x0a\xcd\xef\x13\x86\x19\x4f\x49"
-                         "\xc0\x63\xc6\x7d\x68\xf1\x4c\x5e\x3b\x04\x19\x57\x67\x8e\xa7\xcb"
-                         "\x39\x7d\x87\x07\x20\x81\x9e\xa1\x08\x5a\x28\xd8\x13\xe3\x73\x9a"
-                         "\x64\x00\x6f\x24\x66\xe8\x6c\x09\xe0\xc6\x9c\x2c\xa4\xf1\x0a\x04"
-                         "\xc4\x9b\xb3\x01\x86\xbd\xfa\xb5\x4d\xf4\x20\x83\x14\xd9\x3c\x52",
-       .shared = "\x29\xcb\x14\x7d\x2a\x2b\x0d\x02\x59\x4d\xb0\x7b\xf0\x44\x70\x5c"
-                         "\xb1\x44\x89\xd0\xf0\xa9\x32\xcc\x87\xf6\x04\x05\x1d\x1c\xb6\xe2"
-                         "\xbe\x90\x39\x16\xe2\x5c\x65\x39\x93\xc8\x05\x5e\xd4\x37\x6c\xa4"
-                         "\xdb\xa8\x40\x12\x39\x1a\x92\xa3\xf3\x42\x64\xaf\x64\x1f\xd8\x18"
-                         "\xe1\xba\x4e\x99\x34\x30\x09\x97\xd7\x32\xd7\x0d\x0d\x73\x73\xcd"
-                         "\x3d\xaa\xad\x22\xe8\x68\xb7\xe2\x50\x02\x9d\x30\x7e\xe5\x41\x48",
+       .method = MODP_768_BIT,
+       .seed = chunk_from_chars(
+               0x60, 0x91, 0xff, 0xc6, 0xde, 0x28, 0xc1, 0xcc, 0xc7, 0xc6,
+               0x5d, 0xa6, 0x11, 0xab, 0xfa, 0xe8, 0x6a, 0x10, 0x74, 0xb2,
+               0x22, 0x43, 0xe3, 0x70, 0x6c, 0xb6, 0xde, 0x2f, 0xe2, 0x9d,
+               0x11, 0x42, /* - */
+               0x76, 0xe0, 0x2f, 0xc3, 0xea, 0xbe, 0x6a, 0x0f, 0xce, 0xd6,
+               0xc3, 0x1e, 0x59, 0x45, 0xd1, 0x67, 0xfa, 0xd0, 0x02, 0x00,
+               0xb4, 0xaf, 0x12, 0xcd, 0x6f, 0xc6, 0xd7, 0xe3, 0x81, 0x48,
+               0x62, 0x78),
+       .pub_i = chunk_from_chars(
+               0xd7, 0xa2, 0x54, 0x62, 0x99, 0x01, 0xc8, 0x89, 0x53, 0x2c,
+               0x3e, 0x44, 0xda, 0x3d, 0x0b, 0x7e, 0x92, 0x27, 0x37, 0x70,
+               0xc6, 0x26, 0xc3, 0x91, 0x90, 0x52, 0x2d, 0xab, 0x67, 0x07,
+               0xca, 0xff, 0x36, 0x59, 0x10, 0x9f, 0x2f, 0x43, 0x24, 0xa4,
+               0x17, 0xeb, 0x7d, 0xc4, 0x56, 0x3a, 0x09, 0xba, 0x04, 0xcd,
+               0x3c, 0x9b, 0x27, 0xd3, 0xc1, 0x22, 0x7e, 0xb1, 0x9d, 0xcb,
+               0x69, 0xfe, 0xf3, 0xb6, 0xe2, 0xaa, 0x13, 0x81, 0x23, 0x24,
+               0x06, 0x64, 0x2d, 0xd1, 0x50, 0x78, 0x57, 0x07, 0xf4, 0x7c,
+               0x3d, 0x74, 0x8a, 0x3d, 0x6b, 0x96, 0xd0, 0x00, 0xc5, 0x2c,
+               0x99, 0xd1, 0x0b, 0x65, 0xf2, 0xd1),
+       .pub_r = chunk_from_chars(
+               0xf0, 0xe9, 0xdc, 0x78, 0x10, 0x4c, 0x97, 0x99, 0xb6, 0x70,
+               0x74, 0xb0, 0x7d, 0x8f, 0x09, 0x7a, 0xa8, 0x82, 0xbd, 0xe4,
+               0x64, 0xc8, 0xeb, 0x9a, 0x0a, 0xcd, 0xef, 0x13, 0x86, 0x19,
+               0x4f, 0x49, 0xc0, 0x63, 0xc6, 0x7d, 0x68, 0xf1, 0x4c, 0x5e,
+               0x3b, 0x04, 0x19, 0x57, 0x67, 0x8e, 0xa7, 0xcb, 0x39, 0x7d,
+               0x87, 0x07, 0x20, 0x81, 0x9e, 0xa1, 0x08, 0x5a, 0x28, 0xd8,
+               0x13, 0xe3, 0x73, 0x9a, 0x64, 0x00, 0x6f, 0x24, 0x66, 0xe8,
+               0x6c, 0x09, 0xe0, 0xc6, 0x9c, 0x2c, 0xa4, 0xf1, 0x0a, 0x04,
+               0xc4, 0x9b, 0xb3, 0x01, 0x86, 0xbd, 0xfa, 0xb5, 0x4d, 0xf4,
+               0x20, 0x83, 0x14, 0xd9, 0x3c, 0x52),
+       .shared = chunk_from_chars(
+               0x29, 0xcb, 0x14, 0x7d, 0x2a, 0x2b, 0x0d, 0x02, 0x59, 0x4d,
+               0xb0, 0x7b, 0xf0, 0x44, 0x70, 0x5c, 0xb1, 0x44, 0x89, 0xd0,
+               0xf0, 0xa9, 0x32, 0xcc, 0x87, 0xf6, 0x04, 0x05, 0x1d, 0x1c,
+               0xb6, 0xe2, 0xbe, 0x90, 0x39, 0x16, 0xe2, 0x5c, 0x65, 0x39,
+               0x93, 0xc8, 0x05, 0x5e, 0xd4, 0x37, 0x6c, 0xa4, 0xdb, 0xa8,
+               0x40, 0x12, 0x39, 0x1a, 0x92, 0xa3, 0xf3, 0x42, 0x64, 0xaf,
+               0x64, 0x1f, 0xd8, 0x18, 0xe1, 0xba, 0x4e, 0x99, 0x34, 0x30,
+               0x09, 0x97, 0xd7, 0x32, 0xd7, 0x0d, 0x0d, 0x73, 0x73, 0xcd,
+               0x3d, 0xaa, 0xad, 0x22, 0xe8, 0x68, 0xb7, 0xe2, 0x50, 0x02,
+               0x9d, 0x30, 0x7e, 0xe5, 0x41, 0x48)
 };
 
 ke_test_vector_t modp1024 = {
-       .method = MODP_1024_BIT, .priv_len = 32, .pub_len = 128, .shared_len = 128,
-       .priv_a = "\xe5\x3c\x20\x5d\xa0\xd8\xe4\xbf\xb4\x17\x49\x44\x32\x0f\xc6\xe4"
-                         "\xea\x66\xfe\x44\xe3\xc9\x31\xac\x5d\xa1\x45\x0a\xea\x47\xeb\xcf",
-       .priv_b = "\x7f\x9a\xf7\x21\xeb\x7c\xd2\xa9\x00\xa3\x6e\x39\x9e\xbc\x5c\x65"
-                         "\xee\xcc\xe6\x62\x9c\x8e\x1c\x5a\x7f\xf3\x32\x93\x64\x5f\xd3\xe3",
-       .pub_a  = "\x66\x61\x7c\x9b\xbe\x91\xee\x99\x00\xd8\x06\x41\x5b\x73\x84\xec"
-                         "\xb0\xb6\xb8\x0a\x39\xbd\x5b\x07\x03\x96\xee\x32\x37\x5a\x8f\x68"
-                         "\x37\x6b\x35\x2b\x97\xba\xf3\x2f\x95\xc4\xd1\x8c\x06\xab\x96\xbf"
-                         "\xe3\xf3\x75\x2d\xf1\xe3\xc5\x57\x41\xb6\xf4\x24\x41\x17\xee\xbd"
-                         "\xa1\x01\x59\x83\xc6\xba\x00\x8f\xe8\x9f\xe5\x1c\xf4\xc9\x69\x25"
-                         "\x92\xeb\xf7\x42\x43\x6c\x39\x3d\xf6\x1a\x60\xcc\xc6\x4f\xd7\x90"
-                         "\x7a\x6d\x26\x26\x7c\x0f\x15\x56\x23\x0c\x3e\x33\x2b\x2e\x11\xd1"
-                         "\x18\xa6\x98\x25\x89\x79\x3a\x2f\x6d\x66\xb8\x66\x76\xba\xe4\x7a",
-       .pub_b  = "\x7b\x90\x10\x60\x9e\xbf\x2c\x49\x70\x17\x45\x8a\xfa\xab\x42\x02"
-                         "\x88\x5d\x25\xde\x7b\x5e\x5c\xe9\xb0\x5b\xd4\x42\xa3\xe9\x7b\x52"
-                         "\xce\xa7\x60\xd7\xdb\xcb\x21\xdd\x71\xd8\x0c\xd4\x34\x7c\xaa\x9e"
-                         "\xdf\xbc\x2d\xf4\xc1\xcd\xc1\x66\x9b\x8a\xd2\x44\xeb\x34\x5b\x33"
-                         "\x1d\x87\x54\x92\x88\x3d\xf0\x4a\x3d\x0b\x1a\x8b\x89\x27\xd5\x09"
-                         "\x91\xfe\x03\xe7\x35\x7e\xb6\xbd\xfc\xe3\xd8\xc6\x84\xc9\x86\x1b"
-                         "\xc5\xce\x03\x96\x2f\xfb\x87\xbf\x05\xda\xbd\x5a\x37\x27\x99\x4d"
-                         "\xde\xe5\xd3\xc6\xec\xc5\x89\x85\x99\x91\xb9\x32\x55\x76\x1f\xd5",
-       .shared = "\x95\x79\x0f\x5c\x46\xae\x7c\xa1\xa4\x71\xdd\x78\x6a\xa8\xe4\x44"
-                         "\x07\x3e\xce\xc9\x69\x5d\x00\x46\x20\xcd\x7c\x9d\x36\x09\xa6\x97"
-                         "\x3c\x89\xa2\x30\x75\x09\x35\x63\x8b\x86\xd1\xe6\x5b\x27\xb7\x84"
-                         "\x88\x81\xf9\x01\x3a\xbd\x03\x62\x80\xd1\x86\x2b\xb0\x3c\xa6\x0b"
-                         "\xa9\x0b\x70\xf9\xae\x7e\xdf\x71\xff\x80\xf5\xa7\xee\xfb\xe2\x67"
-                         "\x29\xb5\xbb\xb1\xbb\x1f\xeb\x0d\x24\x0e\x53\xc9\xd7\x4b\x4f\xe9"
-                         "\xd2\x62\xb5\x3b\xd5\xd8\xa7\x38\x3f\x90\xf0\x1e\x35\x96\x47\xd0"
-                         "\x48\x02\xd7\x4a\x4f\x75\x3b\x29\x4a\x96\x50\x3f\x26\x05\xd3\xf1",
+       .method = MODP_1024_BIT,
+       .seed = chunk_from_chars(
+               0xe5, 0x3c, 0x20, 0x5d, 0xa0, 0xd8, 0xe4, 0xbf, 0xb4, 0x17,
+               0x49, 0x44, 0x32, 0x0f, 0xc6, 0xe4, 0xea, 0x66, 0xfe, 0x44,
+               0xe3, 0xc9, 0x31, 0xac, 0x5d, 0xa1, 0x45, 0x0a, 0xea, 0x47,
+               0xeb, 0xcf, /* - */
+               0x7f, 0x9a, 0xf7, 0x21, 0xeb, 0x7c, 0xd2, 0xa9, 0x00, 0xa3,
+               0x6e, 0x39, 0x9e, 0xbc, 0x5c, 0x65, 0xee, 0xcc, 0xe6, 0x62,
+               0x9c, 0x8e, 0x1c, 0x5a, 0x7f, 0xf3, 0x32, 0x93, 0x64, 0x5f,
+               0xd3, 0xe3),
+       .pub_i = chunk_from_chars(
+               0x66, 0x61, 0x7c, 0x9b, 0xbe, 0x91, 0xee, 0x99, 0x00, 0xd8,
+               0x06, 0x41, 0x5b, 0x73, 0x84, 0xec, 0xb0, 0xb6, 0xb8, 0x0a,
+               0x39, 0xbd, 0x5b, 0x07, 0x03, 0x96, 0xee, 0x32, 0x37, 0x5a,
+               0x8f, 0x68, 0x37, 0x6b, 0x35, 0x2b, 0x97, 0xba, 0xf3, 0x2f,
+               0x95, 0xc4, 0xd1, 0x8c, 0x06, 0xab, 0x96, 0xbf, 0xe3, 0xf3,
+               0x75, 0x2d, 0xf1, 0xe3, 0xc5, 0x57, 0x41, 0xb6, 0xf4, 0x24,
+               0x41, 0x17, 0xee, 0xbd, 0xa1, 0x01, 0x59, 0x83, 0xc6, 0xba,
+               0x00, 0x8f, 0xe8, 0x9f, 0xe5, 0x1c, 0xf4, 0xc9, 0x69, 0x25,
+               0x92, 0xeb, 0xf7, 0x42, 0x43, 0x6c, 0x39, 0x3d, 0xf6, 0x1a,
+               0x60, 0xcc, 0xc6, 0x4f, 0xd7, 0x90, 0x7a, 0x6d, 0x26, 0x26, /* 100 */
+               0x7c, 0x0f, 0x15, 0x56, 0x23, 0x0c, 0x3e, 0x33, 0x2b, 0x2e,
+               0x11, 0xd1, 0x18, 0xa6, 0x98, 0x25, 0x89, 0x79, 0x3a, 0x2f,
+               0x6d, 0x66, 0xb8, 0x66, 0x76, 0xba, 0xe4, 0x7a),
+       .pub_r = chunk_from_chars(
+               0x7b, 0x90, 0x10, 0x60, 0x9e, 0xbf, 0x2c, 0x49, 0x70, 0x17,
+               0x45, 0x8a, 0xfa, 0xab, 0x42, 0x02, 0x88, 0x5d, 0x25, 0xde,
+               0x7b, 0x5e, 0x5c, 0xe9, 0xb0, 0x5b, 0xd4, 0x42, 0xa3, 0xe9,
+               0x7b, 0x52, 0xce, 0xa7, 0x60, 0xd7, 0xdb, 0xcb, 0x21, 0xdd,
+               0x71, 0xd8, 0x0c, 0xd4, 0x34, 0x7c, 0xaa, 0x9e, 0xdf, 0xbc,
+               0x2d, 0xf4, 0xc1, 0xcd, 0xc1, 0x66, 0x9b, 0x8a, 0xd2, 0x44,
+               0xeb, 0x34, 0x5b, 0x33, 0x1d, 0x87, 0x54, 0x92, 0x88, 0x3d,
+               0xf0, 0x4a, 0x3d, 0x0b, 0x1a, 0x8b, 0x89, 0x27, 0xd5, 0x09,
+               0x91, 0xfe, 0x03, 0xe7, 0x35, 0x7e, 0xb6, 0xbd, 0xfc, 0xe3,
+               0xd8, 0xc6, 0x84, 0xc9, 0x86, 0x1b, 0xc5, 0xce, 0x03, 0x96, /* 100 */
+               0x2f, 0xfb, 0x87, 0xbf, 0x05, 0xda, 0xbd, 0x5a, 0x37, 0x27,
+               0x99, 0x4d, 0xde, 0xe5, 0xd3, 0xc6, 0xec, 0xc5, 0x89, 0x85,
+               0x99, 0x91, 0xb9, 0x32, 0x55, 0x76, 0x1f, 0xd5),
+       .shared = chunk_from_chars(
+               0x95, 0x79, 0x0f, 0x5c, 0x46, 0xae, 0x7c, 0xa1, 0xa4, 0x71,
+               0xdd, 0x78, 0x6a, 0xa8, 0xe4, 0x44, 0x07, 0x3e, 0xce, 0xc9,
+               0x69, 0x5d, 0x00, 0x46, 0x20, 0xcd, 0x7c, 0x9d, 0x36, 0x09,
+               0xa6, 0x97, 0x3c, 0x89, 0xa2, 0x30, 0x75, 0x09, 0x35, 0x63,
+               0x8b, 0x86, 0xd1, 0xe6, 0x5b, 0x27, 0xb7, 0x84, 0x88, 0x81,
+               0xf9, 0x01, 0x3a, 0xbd, 0x03, 0x62, 0x80, 0xd1, 0x86, 0x2b,
+               0xb0, 0x3c, 0xa6, 0x0b, 0xa9, 0x0b, 0x70, 0xf9, 0xae, 0x7e,
+               0xdf, 0x71, 0xff, 0x80, 0xf5, 0xa7, 0xee, 0xfb, 0xe2, 0x67,
+               0x29, 0xb5, 0xbb, 0xb1, 0xbb, 0x1f, 0xeb, 0x0d, 0x24, 0x0e,
+               0x53, 0xc9, 0xd7, 0x4b, 0x4f, 0xe9, 0xd2, 0x62, 0xb5, 0x3b, /* 100 */
+               0xd5, 0xd8, 0xa7, 0x38, 0x3f, 0x90, 0xf0, 0x1e, 0x35, 0x96,
+               0x47, 0xd0, 0x48, 0x02, 0xd7, 0x4a, 0x4f, 0x75, 0x3b, 0x29,
+               0x4a, 0x96, 0x50, 0x3f, 0x26, 0x05, 0xd3, 0xf1)
 };
 
 ke_test_vector_t modp1536 = {
-       .method = MODP_1536_BIT, .priv_len = 32, .pub_len = 192, .shared_len = 192,
-       .priv_a = "\x22\xd9\xdc\xc7\x30\x79\x93\x6a\x85\x8c\x07\xaa\x85\xed\x07\xb3"
-                         "\xd1\xe8\xb6\x70\xe7\xca\xaf\xa1\x92\x83\x76\x96\x07\x0f\xef\x29",
-       .priv_b = "\x32\x34\x74\xde\x77\x88\xe0\x03\x6b\x30\x95\x49\x56\x0b\x00\x0d"
-                         "\x81\xf8\x2f\xdb\x69\x78\xf3\xc0\x3b\x70\x16\x80\xde\x6e\x28\x10",
-       .pub_a  = "\x3d\x7d\x1d\xd1\xbc\xa7\x13\x7a\x64\x23\x73\xd5\xd9\xb8\x6e\xf9"
-                         "\x95\x84\x9e\xa5\x1c\xb6\xcd\x51\xa6\xb9\x3e\x83\xb3\x4f\x96\x7d"
-                         "\xbf\x7d\x66\xbc\x7c\xe5\xd9\x58\xbf\x01\x90\x2b\x60\xf1\xc3\x07"
-                         "\x6c\xfe\x14\x7b\xeb\x45\xf0\x83\x97\xcf\xf4\xc3\xa8\x02\x7c\xaa"
-                         "\xe1\x84\x78\x8e\xf3\xeb\x0d\xd5\x6e\x14\xc6\xdd\x2c\xe9\x54\xe3"
-                         "\xd5\xcc\x80\xdb\x84\xde\xb5\x34\xce\x38\x24\x45\xe7\xa4\x41\xdb"
-                         "\x97\x12\x30\x02\x0a\x1a\x45\xca\x00\x70\xd6\x94\xf0\x93\xc7\x16"
-                         "\xd8\x07\x68\x33\x6e\x61\xb5\x6f\xf7\x8b\x35\x09\x39\xfe\x4e\x9e"
-                         "\x03\x2c\x85\xbb\x58\x81\xc4\xc8\xd7\xdb\xd5\x30\xa6\xfc\x50\x13"
-                         "\x00\xf7\xe9\xe6\x5b\xff\xb9\x83\x34\x8a\xd0\x5c\xc5\x6e\x2c\x19"
-                         "\xf5\x97\xa9\x9f\xb9\x68\x91\x4b\xe9\xb5\x7a\xcf\x91\x11\xe7\x5b"
-                         "\x57\x6a\x61\x37\x67\x15\x76\x57\x90\x0d\xcf\x22\xf4\x20\x0c\x3d",
-       .pub_b  = "\xd6\x32\x58\xd5\x54\x35\x3d\x6b\x2b\xcc\x0b\x53\x53\xfa\x80\x00"
-                         "\xb3\xa3\x54\xa2\x41\x1d\x7f\x17\xab\xca\x69\x1d\xe8\x22\x7c\xd7"
-                         "\xd4\x3e\x7f\xef\x8b\x3e\xe7\xa0\xa9\x1a\x66\x3d\x30\xc5\x4f\x3c"
-                         "\x5f\x4b\x95\xc9\xfe\x38\xc6\xcf\x19\x39\xb4\x80\x2b\xb6\xf0\xa9"
-                         "\x51\x12\x8f\xdc\x39\x1d\x90\xfa\x8b\x40\x48\x4f\x45\xb6\xda\x02"
-                         "\xc7\x6c\xf9\x1b\x43\x31\xc4\xcf\x78\x51\xe5\x50\xa2\xd1\xc0\x25"
-                         "\x53\x14\x03\xe0\x40\x3a\xf4\x72\xb3\x83\x41\xdc\x56\x2b\xe9\x8d"
-                         "\x1a\xa2\x80\x49\x4d\x62\x64\x31\x6a\x6f\x77\x4c\xe0\xee\xd4\x01"
-                         "\x57\xb6\x37\xc5\x4e\x69\x50\x3b\xec\xb8\xf0\xd7\x57\xb2\x86\xe4"
-                         "\xd8\x43\xc2\x24\x21\x9a\x92\x3f\x73\xab\x57\x83\x15\xaf\x44\x5a"
-                         "\xfa\xd9\x56\x9d\xf2\x5a\xcf\xca\x3a\x9f\x7c\x93\xd3\x03\xf4\xef"
-                         "\x24\x32\xbf\x62\xce\x52\x5c\x8a\x56\xba\xbd\x2f\xfb\x54\x38\x32",
-       .shared = "\x6e\x3d\xf6\xe2\x52\xba\x11\x53\xca\x45\xe9\xa8\xbb\xe5\x48\x33"
-                         "\x7b\x69\x57\x2a\xff\x4e\x61\xb4\x6e\xc9\x86\xb8\x70\xa8\x63\xd3"
-                         "\x85\x3a\xb9\xa5\x4d\x9c\x63\x2a\x09\x48\xce\x8c\x65\xf1\xa2\x9b"
-                         "\x06\x7a\x14\x51\x19\x8d\xab\x9f\x24\x77\x6e\x86\x42\x5a\x06\xbd"
-                         "\xaa\x9f\x26\xdc\xe9\xe8\x9e\x36\x8d\x0e\x16\x70\x27\x74\x01\x5a"
-                         "\x14\x30\xaa\xa1\xe8\x33\x22\x7f\x9d\xea\x7a\x58\x18\xce\x47\x43"
-                         "\x20\xb3\x9c\xe8\x67\xca\x79\xa4\x9b\x31\xe6\xab\xce\xa6\xc8\xda"
-                         "\xff\x00\xb8\x06\x4e\x2a\x75\x73\x72\xd4\x0d\x58\xa5\x92\xe7\xa2"
-                         "\xde\xb1\xf9\xa0\xd9\xab\xab\x1f\xc0\x81\x2e\xe1\xff\xa6\x2a\x20"
-                         "\xff\x68\xce\x4d\x02\xac\xb8\x4a\x1a\x03\x3d\x03\xe4\xf0\x5e\x97"
-                         "\xa4\xfa\xd8\x9e\xc2\x3a\xee\x34\x9e\x26\x4e\xfa\x61\xae\x59\xe9"
-                         "\x38\x1b\x1e\x5b\x7a\xa5\xd0\x9a\xb6\x6b\x74\x99\x7c\xba\xed\x20",
+       .method = MODP_1536_BIT,
+       .seed = chunk_from_chars(
+               0x22, 0xd9, 0xdc, 0xc7, 0x30, 0x79, 0x93, 0x6a, 0x85, 0x8c,
+               0x07, 0xaa, 0x85, 0xed, 0x07, 0xb3, 0xd1, 0xe8, 0xb6, 0x70,
+               0xe7, 0xca, 0xaf, 0xa1, 0x92, 0x83, 0x76, 0x96, 0x07, 0x0f,
+               0xef, 0x29, /* - */
+               0x32, 0x34, 0x74, 0xde, 0x77, 0x88, 0xe0, 0x03, 0x6b, 0x30,
+               0x95, 0x49, 0x56, 0x0b, 0x00, 0x0d, 0x81, 0xf8, 0x2f, 0xdb,
+               0x69, 0x78, 0xf3, 0xc0, 0x3b, 0x70, 0x16, 0x80, 0xde, 0x6e,
+               0x28, 0x10),
+       .pub_i = chunk_from_chars(
+               0x3d, 0x7d, 0x1d, 0xd1, 0xbc, 0xa7, 0x13, 0x7a, 0x64, 0x23,
+               0x73, 0xd5, 0xd9, 0xb8, 0x6e, 0xf9, 0x95, 0x84, 0x9e, 0xa5,
+               0x1c, 0xb6, 0xcd, 0x51, 0xa6, 0xb9, 0x3e, 0x83, 0xb3, 0x4f,
+               0x96, 0x7d, 0xbf, 0x7d, 0x66, 0xbc, 0x7c, 0xe5, 0xd9, 0x58,
+               0xbf, 0x01, 0x90, 0x2b, 0x60, 0xf1, 0xc3, 0x07, 0x6c, 0xfe,
+               0x14, 0x7b, 0xeb, 0x45, 0xf0, 0x83, 0x97, 0xcf, 0xf4, 0xc3,
+               0xa8, 0x02, 0x7c, 0xaa, 0xe1, 0x84, 0x78, 0x8e, 0xf3, 0xeb,
+               0x0d, 0xd5, 0x6e, 0x14, 0xc6, 0xdd, 0x2c, 0xe9, 0x54, 0xe3,
+               0xd5, 0xcc, 0x80, 0xdb, 0x84, 0xde, 0xb5, 0x34, 0xce, 0x38,
+               0x24, 0x45, 0xe7, 0xa4, 0x41, 0xdb, 0x97, 0x12, 0x30, 0x02, /* 100 */
+               0x0a, 0x1a, 0x45, 0xca, 0x00, 0x70, 0xd6, 0x94, 0xf0, 0x93,
+               0xc7, 0x16, 0xd8, 0x07, 0x68, 0x33, 0x6e, 0x61, 0xb5, 0x6f,
+               0xf7, 0x8b, 0x35, 0x09, 0x39, 0xfe, 0x4e, 0x9e, 0x03, 0x2c,
+               0x85, 0xbb, 0x58, 0x81, 0xc4, 0xc8, 0xd7, 0xdb, 0xd5, 0x30,
+               0xa6, 0xfc, 0x50, 0x13, 0x00, 0xf7, 0xe9, 0xe6, 0x5b, 0xff,
+               0xb9, 0x83, 0x34, 0x8a, 0xd0, 0x5c, 0xc5, 0x6e, 0x2c, 0x19,
+               0xf5, 0x97, 0xa9, 0x9f, 0xb9, 0x68, 0x91, 0x4b, 0xe9, 0xb5,
+               0x7a, 0xcf, 0x91, 0x11, 0xe7, 0x5b, 0x57, 0x6a, 0x61, 0x37,
+               0x67, 0x15, 0x76, 0x57, 0x90, 0x0d, 0xcf, 0x22, 0xf4, 0x20,
+               0x0c, 0x3d),
+       .pub_r = chunk_from_chars(
+               0xd6, 0x32, 0x58, 0xd5, 0x54, 0x35, 0x3d, 0x6b, 0x2b, 0xcc,
+               0x0b, 0x53, 0x53, 0xfa, 0x80, 0x00, 0xb3, 0xa3, 0x54, 0xa2,
+               0x41, 0x1d, 0x7f, 0x17, 0xab, 0xca, 0x69, 0x1d, 0xe8, 0x22,
+               0x7c, 0xd7, 0xd4, 0x3e, 0x7f, 0xef, 0x8b, 0x3e, 0xe7, 0xa0,
+               0xa9, 0x1a, 0x66, 0x3d, 0x30, 0xc5, 0x4f, 0x3c, 0x5f, 0x4b,
+               0x95, 0xc9, 0xfe, 0x38, 0xc6, 0xcf, 0x19, 0x39, 0xb4, 0x80,
+               0x2b, 0xb6, 0xf0, 0xa9, 0x51, 0x12, 0x8f, 0xdc, 0x39, 0x1d,
+               0x90, 0xfa, 0x8b, 0x40, 0x48, 0x4f, 0x45, 0xb6, 0xda, 0x02,
+               0xc7, 0x6c, 0xf9, 0x1b, 0x43, 0x31, 0xc4, 0xcf, 0x78, 0x51,
+               0xe5, 0x50, 0xa2, 0xd1, 0xc0, 0x25, 0x53, 0x14, 0x03, 0xe0, /* 100 */
+               0x40, 0x3a, 0xf4, 0x72, 0xb3, 0x83, 0x41, 0xdc, 0x56, 0x2b,
+               0xe9, 0x8d, 0x1a, 0xa2, 0x80, 0x49, 0x4d, 0x62, 0x64, 0x31,
+               0x6a, 0x6f, 0x77, 0x4c, 0xe0, 0xee, 0xd4, 0x01, 0x57, 0xb6,
+               0x37, 0xc5, 0x4e, 0x69, 0x50, 0x3b, 0xec, 0xb8, 0xf0, 0xd7,
+               0x57, 0xb2, 0x86, 0xe4, 0xd8, 0x43, 0xc2, 0x24, 0x21, 0x9a,
+               0x92, 0x3f, 0x73, 0xab, 0x57, 0x83, 0x15, 0xaf, 0x44, 0x5a,
+               0xfa, 0xd9, 0x56, 0x9d, 0xf2, 0x5a, 0xcf, 0xca, 0x3a, 0x9f,
+               0x7c, 0x93, 0xd3, 0x03, 0xf4, 0xef, 0x24, 0x32, 0xbf, 0x62,
+               0xce, 0x52, 0x5c, 0x8a, 0x56, 0xba, 0xbd, 0x2f, 0xfb, 0x54,
+               0x38, 0x32),
+       .shared = chunk_from_chars(
+               0x6e, 0x3d, 0xf6, 0xe2, 0x52, 0xba, 0x11, 0x53, 0xca, 0x45,
+               0xe9, 0xa8, 0xbb, 0xe5, 0x48, 0x33, 0x7b, 0x69, 0x57, 0x2a,
+               0xff, 0x4e, 0x61, 0xb4, 0x6e, 0xc9, 0x86, 0xb8, 0x70, 0xa8,
+               0x63, 0xd3, 0x85, 0x3a, 0xb9, 0xa5, 0x4d, 0x9c, 0x63, 0x2a,
+               0x09, 0x48, 0xce, 0x8c, 0x65, 0xf1, 0xa2, 0x9b, 0x06, 0x7a,
+               0x14, 0x51, 0x19, 0x8d, 0xab, 0x9f, 0x24, 0x77, 0x6e, 0x86,
+               0x42, 0x5a, 0x06, 0xbd, 0xaa, 0x9f, 0x26, 0xdc, 0xe9, 0xe8,
+               0x9e, 0x36, 0x8d, 0x0e, 0x16, 0x70, 0x27, 0x74, 0x01, 0x5a,
+               0x14, 0x30, 0xaa, 0xa1, 0xe8, 0x33, 0x22, 0x7f, 0x9d, 0xea,
+               0x7a, 0x58, 0x18, 0xce, 0x47, 0x43, 0x20, 0xb3, 0x9c, 0xe8, /* 100 */
+               0x67, 0xca, 0x79, 0xa4, 0x9b, 0x31, 0xe6, 0xab, 0xce, 0xa6,
+               0xc8, 0xda, 0xff, 0x00, 0xb8, 0x06, 0x4e, 0x2a, 0x75, 0x73,
+               0x72, 0xd4, 0x0d, 0x58, 0xa5, 0x92, 0xe7, 0xa2, 0xde, 0xb1,
+               0xf9, 0xa0, 0xd9, 0xab, 0xab, 0x1f, 0xc0, 0x81, 0x2e, 0xe1,
+               0xff, 0xa6, 0x2a, 0x20, 0xff, 0x68, 0xce, 0x4d, 0x02, 0xac,
+               0xb8, 0x4a, 0x1a, 0x03, 0x3d, 0x03, 0xe4, 0xf0, 0x5e, 0x97,
+               0xa4, 0xfa, 0xd8, 0x9e, 0xc2, 0x3a, 0xee, 0x34, 0x9e, 0x26,
+               0x4e, 0xfa, 0x61, 0xae, 0x59, 0xe9, 0x38, 0x1b, 0x1e, 0x5b,
+               0x7a, 0xa5, 0xd0, 0x9a, 0xb6, 0x6b, 0x74, 0x99, 0x7c, 0xba,
+               0xed, 0x20)
 };
 
 ke_test_vector_t modp2048 = {
-       .method = MODP_2048_BIT, .priv_len = 48, .pub_len = 256, .shared_len = 256,
-       .priv_a = "\xaf\x3b\xfd\x38\x62\xca\xa1\x17\x74\xce\x2b\x74\x84\x08\x07\xc1"
-                         "\xde\x5c\xd6\xa7\x61\x9b\xb3\xa0\xc7\xaf\x39\xee\xda\xa6\xeb\x89"
-                         "\xe2\xe9\xc1\x44\xb3\x62\x5b\x27\x31\x87\x9c\xb5\x8f\xa3\x76\x6d",
-       .priv_b = "\x77\xa4\x8e\x47\x72\xe2\x3e\x28\x4c\xe4\xaf\x81\x39\x9d\xcd\x58"
-                         "\x9b\xeb\x7c\xef\xbc\xc9\xd1\x96\xf0\x6d\xcf\xdf\xc3\xa8\x8e\x3b"
-                         "\x4c\x1c\x82\xbe\xfe\xc0\xe6\x4b\xa4\x95\xcc\xde\x32\x99\x36\xce",
-       .pub_a  = "\x1a\x27\xc5\xa7\x23\x7a\xe8\xfe\x0a\x71\xc0\xaf\x64\x94\xfa\xec"
-                         "\xcd\xd4\xa5\x03\x1d\x47\xa1\xa6\xb7\x16\x2d\xfc\xdf\x03\xbb\x17"
-                         "\xb7\xbb\x08\x9b\xd6\x52\xa5\xf3\x1b\x36\x61\xbb\x11\x4d\x7c\x48"
-                         "\xd8\x3d\x24\x4f\x46\xdb\x64\x87\x0c\x9c\x83\x27\xf1\xa8\x30\xab"
-                         "\xf5\x31\xe5\x18\xdd\x52\x1a\x2e\x94\xe7\x06\x1e\x94\x42\x09\xba"
-                         "\x53\x31\x01\x2b\x3d\xff\x00\x84\x9e\xaa\xb5\x8c\x7c\x7a\xf1\x52"
-                         "\x65\x21\x0f\xbc\xf0\xf8\x7b\x9d\xd9\x32\xf8\xba\x4e\x9a\x9f\x91"
-                         "\xb6\x32\x94\x53\x0a\x12\x00\xb8\x8b\x3a\x03\xe1\xa0\xc7\xfd\x34"
-                         "\xde\xec\x6f\xad\x50\x1e\xde\x06\xce\x7e\xc9\xe2\x91\xd4\x7b\x69"
-                         "\xb3\xa4\xb6\x1b\xb0\x87\x63\xb6\xd4\x6b\xfb\xda\xb9\x7b\xde\xce"
-                         "\xa0\xff\x09\xa8\x72\x22\x1f\xb4\xb6\xcc\xca\x6b\x5c\x6f\xaa\xd8"
-                         "\xeb\x87\x3b\x9a\x2f\x39\xb6\x3e\x62\xcf\xad\xd4\x76\x07\xe6\x8e"
-                         "\x2c\x29\x05\x83\xf7\x26\x8f\xb4\x3f\xc0\x0a\x7d\xc8\x81\x0e\xcd"
-                         "\xac\x1a\x59\xbd\x1b\x47\x7a\xaf\x41\xcb\x4b\x24\xad\xa3\xe5\xf7"
-                         "\xb8\xcb\x98\x6f\x1a\xe4\x76\xaf\xc7\x67\x7a\xa6\x25\x70\xa1\xb1"
-                         "\x83\x8d\xda\x26\xbe\x78\x63\xee\x2f\x40\xb5\xe5\x38\xa4\xe1\x81",
-       .pub_b  = "\x66\x72\x82\x31\x8d\x65\xcb\x05\xcd\x32\x3c\x25\x09\x1e\x66\x4c"
-                         "\xc7\x5a\x3a\x20\xc0\x14\xb2\xf6\x38\x9d\x3b\x27\xf5\xc1\xe9\x08"
-                         "\xe0\xd4\x0f\xf8\x55\x2b\xd5\x87\x75\x25\x50\x30\x22\x85\xb4\x9f"
-                         "\x75\xf8\xff\xae\xc9\x37\xfb\x2e\x69\xc8\x15\x0f\x88\xd6\x50\x8b"
-                         "\xf0\xfb\x1f\x16\xe9\x67\x6f\x5e\xcf\x71\x8f\x87\x4f\x3d\x8d\xe3"
-                         "\xc8\x68\x87\x49\xdb\xcf\x1a\xff\xd4\xd6\x2f\xf9\xea\x5d\x9e\x30"
-                         "\x35\xb2\xce\x4a\x6e\xae\x28\x1c\x40\x8f\xc8\x08\x4a\xe2\x35\xd9"
-                         "\x98\xa0\x37\x61\x0a\x8c\xb4\x8c\x87\x8c\xd0\x63\x5f\xa1\x36\x9f"
-                         "\xc9\x0b\x86\x4c\x53\x23\x67\x38\x45\x97\xfd\xee\xfd\xb6\x74\x2b"
-                         "\x00\x6a\xde\xda\xe2\x01\x5b\xc4\xce\x2f\x9c\x54\x51\xc9\x63\x6a"
-                         "\x16\xed\x7d\x10\xb4\xe4\x0d\x82\x5b\x50\xaa\x76\x33\xa0\xe8\xfb"
-                         "\x81\x3b\xeb\xc0\x49\xf7\xff\x6a\x71\xec\xfb\x14\xe8\x80\xf5\x09"
-                         "\xd3\x8b\x57\x1a\x80\x98\x08\xa4\x96\xb4\x51\xb5\xb5\x56\x7a\x36"
-                         "\x08\xb0\x1a\x22\xe4\x99\x83\x55\xf1\x81\xb8\x79\xde\x26\x23\x04"
-                         "\xf2\x9d\xe1\x42\xff\x5e\x52\xcc\x56\x4f\x3a\x2d\x1e\x84\xa0\xc3"
-                         "\x3d\x8f\x3d\xa7\xbf\x64\x12\xb3\xf0\x18\xe0\x0d\x90\xfa\x5b\x94",
-       .shared = "\x26\xf9\xe8\x45\x7c\xf2\xd7\xd5\x6d\xd8\x19\xc2\xa8\x67\xd7\xc3"
-                         "\xa9\x0a\xa2\xb9\x44\xe2\x0b\x8b\xde\xd3\xa5\xbf\x91\xaa\x1f\xf8"
-                         "\x1a\x7e\xa8\x9d\x52\x4c\x36\x5f\x38\x23\x51\x08\x35\xcd\x86\x44"
-                         "\xc4\xd5\xda\xcf\x89\x3e\x61\x0d\x2c\x1a\x14\x06\x16\xd1\xc8\xc1"
-                         "\xd3\x5f\x46\xde\x2c\x5f\xaa\xd9\xae\xce\xc6\xb6\x77\xac\xd9\x84"
-                         "\x09\x81\x42\xa8\xaa\x0c\x85\x42\xe9\xac\x98\xb3\xbc\x7b\x57\x7c"
-                         "\x59\xb8\xec\x53\x34\x6e\x15\x67\xa9\x00\x39\xac\x92\xb2\x24\x63"
-                         "\x5a\xb2\x16\x73\x1b\x06\x35\x39\x25\x64\x2c\x33\x0a\x20\x1b\xa4"
-                         "\xb3\x12\x84\xa9\x51\x58\x60\xf3\x5e\x93\x08\xf5\x51\x5a\x77\x99"
-                         "\x84\xfb\xd9\xf5\xce\x41\x77\xdb\x78\xd1\xcb\x03\x84\xb6\x3c\x73"
-                         "\x9c\x6d\x74\x4a\xd7\xa7\x00\xb9\x5a\x53\x1b\x29\xf3\xb7\x44\xed"
-                         "\x38\xe6\x9a\xee\x67\x07\x2c\x45\xa9\x1c\xee\x6b\x14\x21\x5e\x04"
-                         "\xf2\x7c\x31\x35\x8c\x86\xdc\xe4\x48\xd6\x0a\x22\x3b\xdc\x55\x4e"
-                         "\xda\xa3\xe4\x07\x2e\xf6\x03\xa0\xf4\x61\x9f\x8d\xb3\x9c\xec\x29"
-                         "\x1c\x86\x01\x74\x15\x5d\x8a\xbf\x9e\x10\x82\x93\x1d\xf5\x8e\xd9"
-                         "\xee\x9c\x12\x15\xdd\x23\x93\xde\x02\xf5\xc1\x76\x7f\x07\x0e\x28",
+       .method = MODP_2048_BIT,
+       .seed = chunk_from_chars(
+               0xaf, 0x3b, 0xfd, 0x38, 0x62, 0xca, 0xa1, 0x17, 0x74, 0xce,
+               0x2b, 0x74, 0x84, 0x08, 0x07, 0xc1, 0xde, 0x5c, 0xd6, 0xa7,
+               0x61, 0x9b, 0xb3, 0xa0, 0xc7, 0xaf, 0x39, 0xee, 0xda, 0xa6,
+               0xeb, 0x89, 0xe2, 0xe9, 0xc1, 0x44, 0xb3, 0x62, 0x5b, 0x27,
+               0x31, 0x87, 0x9c, 0xb5, 0x8f, 0xa3, 0x76, 0x6d, /* - */
+               0x77, 0xa4, 0x8e, 0x47, 0x72, 0xe2, 0x3e, 0x28, 0x4c, 0xe4,
+               0xaf, 0x81, 0x39, 0x9d, 0xcd, 0x58, 0x9b, 0xeb, 0x7c, 0xef,
+               0xbc, 0xc9, 0xd1, 0x96, 0xf0, 0x6d, 0xcf, 0xdf, 0xc3, 0xa8,
+               0x8e, 0x3b, 0x4c, 0x1c, 0x82, 0xbe, 0xfe, 0xc0, 0xe6, 0x4b,
+               0xa4, 0x95, 0xcc, 0xde, 0x32, 0x99, 0x36, 0xce),
+       .pub_i = chunk_from_chars(
+               0x1a, 0x27, 0xc5, 0xa7, 0x23, 0x7a, 0xe8, 0xfe, 0x0a, 0x71,
+               0xc0, 0xaf, 0x64, 0x94, 0xfa, 0xec, 0xcd, 0xd4, 0xa5, 0x03,
+               0x1d, 0x47, 0xa1, 0xa6, 0xb7, 0x16, 0x2d, 0xfc, 0xdf, 0x03,
+               0xbb, 0x17, 0xb7, 0xbb, 0x08, 0x9b, 0xd6, 0x52, 0xa5, 0xf3,
+               0x1b, 0x36, 0x61, 0xbb, 0x11, 0x4d, 0x7c, 0x48, 0xd8, 0x3d,
+               0x24, 0x4f, 0x46, 0xdb, 0x64, 0x87, 0x0c, 0x9c, 0x83, 0x27,
+               0xf1, 0xa8, 0x30, 0xab, 0xf5, 0x31, 0xe5, 0x18, 0xdd, 0x52,
+               0x1a, 0x2e, 0x94, 0xe7, 0x06, 0x1e, 0x94, 0x42, 0x09, 0xba,
+               0x53, 0x31, 0x01, 0x2b, 0x3d, 0xff, 0x00, 0x84, 0x9e, 0xaa,
+               0xb5, 0x8c, 0x7c, 0x7a, 0xf1, 0x52, 0x65, 0x21, 0x0f, 0xbc, /* 100 */
+               0xf0, 0xf8, 0x7b, 0x9d, 0xd9, 0x32, 0xf8, 0xba, 0x4e, 0x9a,
+               0x9f, 0x91, 0xb6, 0x32, 0x94, 0x53, 0x0a, 0x12, 0x00, 0xb8,
+               0x8b, 0x3a, 0x03, 0xe1, 0xa0, 0xc7, 0xfd, 0x34, 0xde, 0xec,
+               0x6f, 0xad, 0x50, 0x1e, 0xde, 0x06, 0xce, 0x7e, 0xc9, 0xe2,
+               0x91, 0xd4, 0x7b, 0x69, 0xb3, 0xa4, 0xb6, 0x1b, 0xb0, 0x87,
+               0x63, 0xb6, 0xd4, 0x6b, 0xfb, 0xda, 0xb9, 0x7b, 0xde, 0xce,
+               0xa0, 0xff, 0x09, 0xa8, 0x72, 0x22, 0x1f, 0xb4, 0xb6, 0xcc,
+               0xca, 0x6b, 0x5c, 0x6f, 0xaa, 0xd8, 0xeb, 0x87, 0x3b, 0x9a,
+               0x2f, 0x39, 0xb6, 0x3e, 0x62, 0xcf, 0xad, 0xd4, 0x76, 0x07,
+               0xe6, 0x8e, 0x2c, 0x29, 0x05, 0x83, 0xf7, 0x26, 0x8f, 0xb4, /* 200 */
+               0x3f, 0xc0, 0x0a, 0x7d, 0xc8, 0x81, 0x0e, 0xcd, 0xac, 0x1a,
+               0x59, 0xbd, 0x1b, 0x47, 0x7a, 0xaf, 0x41, 0xcb, 0x4b, 0x24,
+               0xad, 0xa3, 0xe5, 0xf7, 0xb8, 0xcb, 0x98, 0x6f, 0x1a, 0xe4,
+               0x76, 0xaf, 0xc7, 0x67, 0x7a, 0xa6, 0x25, 0x70, 0xa1, 0xb1,
+               0x83, 0x8d, 0xda, 0x26, 0xbe, 0x78, 0x63, 0xee, 0x2f, 0x40,
+               0xb5, 0xe5, 0x38, 0xa4, 0xe1, 0x81),
+       .pub_r = chunk_from_chars(
+               0x66, 0x72, 0x82, 0x31, 0x8d, 0x65, 0xcb, 0x05, 0xcd, 0x32,
+               0x3c, 0x25, 0x09, 0x1e, 0x66, 0x4c, 0xc7, 0x5a, 0x3a, 0x20,
+               0xc0, 0x14, 0xb2, 0xf6, 0x38, 0x9d, 0x3b, 0x27, 0xf5, 0xc1,
+               0xe9, 0x08, 0xe0, 0xd4, 0x0f, 0xf8, 0x55, 0x2b, 0xd5, 0x87,
+               0x75, 0x25, 0x50, 0x30, 0x22, 0x85, 0xb4, 0x9f, 0x75, 0xf8,
+               0xff, 0xae, 0xc9, 0x37, 0xfb, 0x2e, 0x69, 0xc8, 0x15, 0x0f,
+               0x88, 0xd6, 0x50, 0x8b, 0xf0, 0xfb, 0x1f, 0x16, 0xe9, 0x67,
+               0x6f, 0x5e, 0xcf, 0x71, 0x8f, 0x87, 0x4f, 0x3d, 0x8d, 0xe3,
+               0xc8, 0x68, 0x87, 0x49, 0xdb, 0xcf, 0x1a, 0xff, 0xd4, 0xd6,
+               0x2f, 0xf9, 0xea, 0x5d, 0x9e, 0x30, 0x35, 0xb2, 0xce, 0x4a, /* 100 */
+               0x6e, 0xae, 0x28, 0x1c, 0x40, 0x8f, 0xc8, 0x08, 0x4a, 0xe2,
+               0x35, 0xd9, 0x98, 0xa0, 0x37, 0x61, 0x0a, 0x8c, 0xb4, 0x8c,
+               0x87, 0x8c, 0xd0, 0x63, 0x5f, 0xa1, 0x36, 0x9f, 0xc9, 0x0b,
+               0x86, 0x4c, 0x53, 0x23, 0x67, 0x38, 0x45, 0x97, 0xfd, 0xee,
+               0xfd, 0xb6, 0x74, 0x2b, 0x00, 0x6a, 0xde, 0xda, 0xe2, 0x01,
+               0x5b, 0xc4, 0xce, 0x2f, 0x9c, 0x54, 0x51, 0xc9, 0x63, 0x6a,
+               0x16, 0xed, 0x7d, 0x10, 0xb4, 0xe4, 0x0d, 0x82, 0x5b, 0x50,
+               0xaa, 0x76, 0x33, 0xa0, 0xe8, 0xfb, 0x81, 0x3b, 0xeb, 0xc0,
+               0x49, 0xf7, 0xff, 0x6a, 0x71, 0xec, 0xfb, 0x14, 0xe8, 0x80,
+               0xf5, 0x09, 0xd3, 0x8b, 0x57, 0x1a, 0x80, 0x98, 0x08, 0xa4, /* 200 */
+               0x96, 0xb4, 0x51, 0xb5, 0xb5, 0x56, 0x7a, 0x36, 0x08, 0xb0,
+               0x1a, 0x22, 0xe4, 0x99, 0x83, 0x55, 0xf1, 0x81, 0xb8, 0x79,
+               0xde, 0x26, 0x23, 0x04, 0xf2, 0x9d, 0xe1, 0x42, 0xff, 0x5e,
+               0x52, 0xcc, 0x56, 0x4f, 0x3a, 0x2d, 0x1e, 0x84, 0xa0, 0xc3,
+               0x3d, 0x8f, 0x3d, 0xa7, 0xbf, 0x64, 0x12, 0xb3, 0xf0, 0x18,
+               0xe0, 0x0d, 0x90, 0xfa, 0x5b, 0x94),
+       .shared = chunk_from_chars(
+               0x26, 0xf9, 0xe8, 0x45, 0x7c, 0xf2, 0xd7, 0xd5, 0x6d, 0xd8,
+               0x19, 0xc2, 0xa8, 0x67, 0xd7, 0xc3, 0xa9, 0x0a, 0xa2, 0xb9,
+               0x44, 0xe2, 0x0b, 0x8b, 0xde, 0xd3, 0xa5, 0xbf, 0x91, 0xaa,
+               0x1f, 0xf8, 0x1a, 0x7e, 0xa8, 0x9d, 0x52, 0x4c, 0x36, 0x5f,
+               0x38, 0x23, 0x51, 0x08, 0x35, 0xcd, 0x86, 0x44, 0xc4, 0xd5,
+               0xda, 0xcf, 0x89, 0x3e, 0x61, 0x0d, 0x2c, 0x1a, 0x14, 0x06,
+               0x16, 0xd1, 0xc8, 0xc1, 0xd3, 0x5f, 0x46, 0xde, 0x2c, 0x5f,
+               0xaa, 0xd9, 0xae, 0xce, 0xc6, 0xb6, 0x77, 0xac, 0xd9, 0x84,
+               0x09, 0x81, 0x42, 0xa8, 0xaa, 0x0c, 0x85, 0x42, 0xe9, 0xac,
+               0x98, 0xb3, 0xbc, 0x7b, 0x57, 0x7c, 0x59, 0xb8, 0xec, 0x53, /* 100 */
+               0x34, 0x6e, 0x15, 0x67, 0xa9, 0x00, 0x39, 0xac, 0x92, 0xb2,
+               0x24, 0x63, 0x5a, 0xb2, 0x16, 0x73, 0x1b, 0x06, 0x35, 0x39,
+               0x25, 0x64, 0x2c, 0x33, 0x0a, 0x20, 0x1b, 0xa4, 0xb3, 0x12,
+               0x84, 0xa9, 0x51, 0x58, 0x60, 0xf3, 0x5e, 0x93, 0x08, 0xf5,
+               0x51, 0x5a, 0x77, 0x99, 0x84, 0xfb, 0xd9, 0xf5, 0xce, 0x41,
+               0x77, 0xdb, 0x78, 0xd1, 0xcb, 0x03, 0x84, 0xb6, 0x3c, 0x73,
+               0x9c, 0x6d, 0x74, 0x4a, 0xd7, 0xa7, 0x00, 0xb9, 0x5a, 0x53,
+               0x1b, 0x29, 0xf3, 0xb7, 0x44, 0xed, 0x38, 0xe6, 0x9a, 0xee,
+               0x67, 0x07, 0x2c, 0x45, 0xa9, 0x1c, 0xee, 0x6b, 0x14, 0x21,
+               0x5e, 0x04, 0xf2, 0x7c, 0x31, 0x35, 0x8c, 0x86, 0xdc, 0xe4, /* 200 */
+               0x48, 0xd6, 0x0a, 0x22, 0x3b, 0xdc, 0x55, 0x4e, 0xda, 0xa3,
+               0xe4, 0x07, 0x2e, 0xf6, 0x03, 0xa0, 0xf4, 0x61, 0x9f, 0x8d,
+               0xb3, 0x9c, 0xec, 0x29, 0x1c, 0x86, 0x01, 0x74, 0x15, 0x5d,
+               0x8a, 0xbf, 0x9e, 0x10, 0x82, 0x93, 0x1d, 0xf5, 0x8e, 0xd9,
+               0xee, 0x9c, 0x12, 0x15, 0xdd, 0x23, 0x93, 0xde, 0x02, 0xf5,
+               0xc1, 0x76, 0x7f, 0x07, 0x0e, 0x28)
 };
 
 ke_test_vector_t modp3072 = {
-       .method = MODP_3072_BIT, .priv_len = 48, .pub_len = 384, .shared_len = 384,
-       .priv_a = "\x51\xf8\xaa\xb6\x63\x20\x1e\xb2\x86\xba\xd2\x99\x32\xb2\xe5\x8a"
-                         "\x92\x96\xbf\x2a\xa7\x78\x79\xcc\x8c\x64\x29\xd5\xa6\x68\xad\xf7"
-                         "\x60\x57\xad\xc3\x77\xcc\x75\xfd\x86\x47\x96\xb8\xfa\x7b\x42\x8c",
-       .priv_b = "\xaf\x7f\x44\x29\x0b\xaa\xc8\x81\x5e\x70\x75\x9b\x6b\x27\x42\x27"
-                         "\x12\x22\x50\xea\x8d\x5a\x12\xef\x4b\x0a\x82\xcf\xe9\x1d\x52\x98"
-                         "\x9d\x96\xc1\xa8\x40\x89\x2a\x9f\xfa\x9f\x3a\x65\xc7\x7c\x8c\xd9",
-       .pub_a  = "\xae\x98\x27\xa0\x7a\x37\x2e\x16\x01\x67\x20\x63\x72\xc5\x5b\x61"
-                         "\x5c\xd4\x9e\x8c\x43\xf7\x1a\x6e\x6b\x22\x83\x8c\x0f\x9b\x9d\x90"
-                         "\x3a\xe5\x97\x97\xf3\x95\xc9\xca\x7c\x78\x0f\xa8\x8d\x79\x27\xa3"
-                         "\xac\x48\xf1\xb5\x05\xe6\x7a\x0d\xb1\xeb\xad\x57\x8e\xb1\x57\x2b"
-                         "\x86\x52\x5e\x84\x0c\x4c\xe2\x43\x5e\xd4\xcd\xe1\x75\x68\xa2\xcb"
-                         "\x27\x08\x85\xc9\xd3\xa7\x24\xf8\x73\x46\xe5\x19\xa9\x47\x84\xee"
-                         "\x88\xaf\xec\x27\x86\x68\x9f\x0b\xc1\x23\xe0\xe4\x65\x79\x57\xb4"
-                         "\xf7\x5f\x24\xb5\x2d\xd4\x80\x39\x09\x3a\xe8\xeb\x5d\xa4\x0d\x1e"
-                         "\x31\xfc\x53\xfd\x98\xa0\x58\xb0\x38\x9b\xd5\xc7\xaf\x5b\x0d\xf4"
-                         "\x49\xd6\x13\x90\x1c\xa2\x71\xb5\x8e\x47\x0f\x88\xd3\x45\x93\x1f"
-                         "\x3f\x64\xe8\x1f\x03\x1d\xe9\x5a\xda\xef\x78\xf6\x0e\x64\x5e\xca"
-                         "\x7d\xd5\x61\x8a\xa6\xed\xd3\x9f\xa8\x91\x22\x46\x39\xa9\xae\x42"
-                         "\xa8\xa9\x37\x4d\x68\x3f\xd3\xf4\x82\x6b\x97\x4c\x8d\x00\x39\x2f"
-                         "\x31\x12\x45\xa7\x1c\x86\xdb\x4e\xb5\xef\xc4\x78\x34\xce\x6b\xaf"
-                         "\xb2\x08\xaa\xba\xc6\x8c\x35\xe3\x4f\x79\x15\x78\x40\x1c\x7b\x75"
-                         "\x01\x15\xb1\x6e\x5c\x3a\xc3\x62\x42\xf4\xa9\x0a\x99\x73\x4c\x08"
-                         "\x36\x8d\x48\xab\x5d\x50\xec\x92\xf3\xf1\x26\x7e\x54\xb9\x33\x34"
-                         "\xa5\x0b\x00\xd7\x57\x1d\x1c\xeb\x1e\x66\x21\x58\xd5\x66\x36\x20"
-                         "\xd1\xf0\x22\x8a\x64\xf4\x92\xea\x8e\x1f\xe1\x81\x7e\x35\x83\x57"
-                         "\x7f\x1e\x48\xa5\x84\x91\xc1\x0d\x98\xff\xa0\xea\xa8\x64\x05\xd0"
-                         "\x2c\x94\xb4\x9f\x99\xfd\xdc\x6a\x3b\x7b\xd6\xe3\xbc\xe2\x26\x1e"
-                         "\xa3\xcb\xbd\x82\x1f\x49\x5a\x2a\xa7\x1a\xe9\x09\xb3\xcd\x0d\x2c"
-                         "\x9b\xec\x0b\x06\x8b\xa7\x26\x20\xff\x06\x32\x4c\xdb\x80\x0b\xf8"
-                         "\x56\x5e\x4b\x78\x21\x84\x61\x0e\xf0\x77\xbc\x4e\x8f\xc5\x17\xf7",
-       .pub_b  = "\x2b\x27\x0c\x8e\x66\x74\x09\x31\x45\xef\x84\xab\x0c\x34\x56\x0f"
-                         "\x5c\x4f\x94\x82\xa5\x0f\x2f\x44\x72\xfd\xe9\x87\xb4\x6e\xb8\x40"
-                         "\x34\x02\x03\xd6\x31\x10\x2f\x2c\x7f\x9e\xb4\x8d\x20\x74\x44\xfb"
-                         "\x21\x71\x7d\xaf\x76\xf6\x60\x04\xa7\x9e\xa8\xee\xe7\x7c\xc9\x80"
-                         "\x19\xba\x12\x34\xf1\x6f\xbf\xf7\xdd\xa9\x45\xa4\x46\x81\x1d\x28"
-                         "\x5d\x31\xaf\xd3\x31\xdf\xa8\x0c\x87\x0e\xfb\x19\x96\x68\xbb\x38"
-                         "\x76\x18\xe1\x16\x21\xf5\x32\x92\x90\x8f\xd3\x29\xaa\xdb\x91\x63"
-                         "\x5e\x47\x5f\x33\x00\x4d\x9e\xff\xca\x65\xe7\x3f\xdf\xe5\x58\xf3"
-                         "\x4b\xa9\xee\xf3\xcf\x96\x1d\xab\x56\x5c\x5a\x72\x2a\xfb\x22\x8c"
-                         "\x26\xbf\x38\xd3\x9c\x84\xf7\xca\x70\xf8\x51\xbf\x21\x8a\x7e\x2c"
-                         "\x2d\xb5\xd3\x56\x93\x7a\x01\x5a\x65\x50\x31\x13\xf6\xc0\xd5\x2d"
-                         "\x3b\x2a\x21\x21\xa0\xca\x42\xc6\xcc\xde\xbb\x0b\x2c\xfc\x68\xaa"
-                         "\x66\x2f\x3e\x08\xdd\x69\x82\x42\x7a\x0a\x11\xb2\xe1\x44\xe0\xf1"
-                         "\xa3\x47\xd1\xd2\x7f\xf8\x96\xee\x56\xf5\xd9\xfb\x25\xf7\x40\xb5"
-                         "\xc7\x09\x88\xfc\xdc\x91\x12\xdf\xce\xa2\xde\x11\x7c\x12\x87\xd3"
-                         "\x2d\xa8\x42\x70\x49\xce\xef\x09\x7b\xf4\x57\x81\x84\x6a\x02\x1d"
-                         "\x38\x3e\x73\x1a\xa6\xe5\xc3\xdc\x0a\x46\x22\x6e\x54\xc5\xa6\x36"
-                         "\x7a\xd8\x90\x0b\x8e\xad\xba\x54\x09\x3e\xc6\xf7\x1c\x29\x74\x4a"
-                         "\xdc\x73\x02\xe8\x11\x85\xed\x80\xdb\x14\xb3\xe4\x3f\x29\x36\x1a"
-                         "\xf4\xe6\x1c\x33\x1e\x5d\x77\x4d\x76\x17\xbf\x31\x55\x71\x3b\x0d"
-                         "\x4f\x90\x38\x97\x6f\x2f\xf8\x51\x99\xc1\xd7\x0d\xcb\x3e\xfa\x2b"
-                         "\x63\xe0\xc7\x7c\xee\x78\x9f\xa0\x05\x8f\xdf\x52\x67\xc6\xb1\xbd"
-                         "\xed\xc1\xd1\xef\x47\xca\x08\x22\x2a\x9a\x27\xe6\x5f\x89\x2e\xef"
-                         "\xde\x06\x12\xf4\x6b\x51\xbe\x1a\x14\x77\x4d\x45\x14\xd7\xe7\xca",
-       .shared = "\x45\x3c\xaf\x89\xd6\xbf\xf3\x9b\xda\xe1\x85\x46\x17\x61\xd6\xde"
-                         "\xf5\x89\xa5\x82\x66\x9c\x1a\xc8\x6b\x0b\x7e\xe4\x69\x56\xc9\xf9"
-                         "\x4d\x74\x77\xdd\xd8\x1c\xde\x12\x75\x76\xda\xeb\xd3\x52\x95\x15"
-                         "\xf0\x6a\xa7\xdf\x5e\xb1\x31\x27\x67\x5c\xe1\xb4\xdc\xa2\xac\xb6"
-                         "\x47\xe3\x55\x76\xb9\x40\x50\xbc\xc3\x85\xb3\xb4\x89\x44\xdd\x1e"
-                         "\xca\xbe\x6c\x76\x70\x45\xcd\xcd\xdd\x3a\x1d\x65\x83\x8c\xcc\xb0"
-                         "\x82\xf5\x44\xf0\xfd\x9b\xe6\xc3\xd4\xff\xe7\x55\xe4\xd5\x6d\xfb"
-                         "\xb4\x20\x93\x52\x3f\x45\xd2\x41\x5e\xad\xf3\x6a\x18\x5c\x87\xa6"
-                         "\xe0\x14\x27\xbb\xcc\x98\x95\x68\xa2\x93\x66\xb1\xc6\x91\x72\x4d"
-                         "\x81\x0e\x99\xfb\x05\x83\x00\x26\x72\xa5\x3e\x49\x9f\xf2\x30\x4a"
-                         "\x4b\xcc\x10\xa3\xb8\x0b\xf4\x8a\x9e\x31\x5b\xe9\x98\xbf\x17\x0c"
-                         "\xe9\x0e\xc4\xeb\x87\x05\x57\x0e\x5e\xc4\x80\xc2\x1c\x4d\xd0\xa5"
-                         "\x3a\x1c\xb2\x06\xa3\x42\x45\x2e\xa8\xa6\x84\xd5\x69\xd8\x10\xf8"
-                         "\xe9\x8f\xea\xd7\x03\x9c\x64\xef\xef\x59\x35\x24\xf5\x07\x5c\xb8"
-                         "\x7e\x75\x63\xa4\x2a\xd1\xb5\x78\x19\xc7\xb0\x19\x96\x3d\x07\x0b"
-                         "\x4c\xef\xe2\x2c\x59\x6b\x3a\x96\xa8\xba\x41\xbd\xab\xe0\x54\xa9"
-                         "\xa9\xb4\xd1\xc4\x27\x8a\x83\x64\xea\xd9\x96\xa0\x39\xe8\xbd\xdc"
-                         "\x00\x60\x1e\xcf\x10\x2d\x20\xd6\xab\xce\xd2\xff\x19\x29\x49\xf5"
-                         "\xf8\x1c\x36\xfb\x47\x96\x44\x39\xcd\x44\x03\x6a\x23\xac\x30\x86"
-                         "\x8c\xa5\x23\x25\x84\x7b\x31\x00\xd3\xd4\x28\x16\x76\xbf\x94\x84"
-                         "\xa0\x05\x66\xf1\x3b\x6a\xe8\x9c\x57\xb7\x73\x2f\x8e\x60\x43\x4e"
-                         "\x8e\x48\x85\xcb\x1b\xf9\x47\xce\xd1\x4d\x31\x53\xe1\xb6\xc8\x1b"
-                         "\x33\x12\x0f\xfb\xd8\x45\x94\x91\xd2\xc5\x78\xaa\xb0\xa9\x7e\x83"
-                         "\xdc\x87\x87\x5b\xe5\x88\xc0\xcd\xee\xee\xfd\x19\xcc\x4f\x1d\x40",
+       .method = MODP_3072_BIT,
+       .seed = chunk_from_chars(
+               0x51, 0xf8, 0xaa, 0xb6, 0x63, 0x20, 0x1e, 0xb2, 0x86, 0xba,
+               0xd2, 0x99, 0x32, 0xb2, 0xe5, 0x8a, 0x92, 0x96, 0xbf, 0x2a,
+               0xa7, 0x78, 0x79, 0xcc, 0x8c, 0x64, 0x29, 0xd5, 0xa6, 0x68,
+               0xad, 0xf7, 0x60, 0x57, 0xad, 0xc3, 0x77, 0xcc, 0x75, 0xfd,
+               0x86, 0x47, 0x96, 0xb8, 0xfa, 0x7b, 0x42, 0x8c, /* - */
+               0xaf, 0x7f, 0x44, 0x29, 0x0b, 0xaa, 0xc8, 0x81, 0x5e, 0x70,
+               0x75, 0x9b, 0x6b, 0x27, 0x42, 0x27, 0x12, 0x22, 0x50, 0xea,
+               0x8d, 0x5a, 0x12, 0xef, 0x4b, 0x0a, 0x82, 0xcf, 0xe9, 0x1d,
+               0x52, 0x98, 0x9d, 0x96, 0xc1, 0xa8, 0x40, 0x89, 0x2a, 0x9f,
+               0xfa, 0x9f, 0x3a, 0x65, 0xc7, 0x7c, 0x8c, 0xd9),
+       .pub_i = chunk_from_chars(
+               0xae, 0x98, 0x27, 0xa0, 0x7a, 0x37, 0x2e, 0x16, 0x01, 0x67,
+               0x20, 0x63, 0x72, 0xc5, 0x5b, 0x61, 0x5c, 0xd4, 0x9e, 0x8c,
+               0x43, 0xf7, 0x1a, 0x6e, 0x6b, 0x22, 0x83, 0x8c, 0x0f, 0x9b,
+               0x9d, 0x90, 0x3a, 0xe5, 0x97, 0x97, 0xf3, 0x95, 0xc9, 0xca,
+               0x7c, 0x78, 0x0f, 0xa8, 0x8d, 0x79, 0x27, 0xa3, 0xac, 0x48,
+               0xf1, 0xb5, 0x05, 0xe6, 0x7a, 0x0d, 0xb1, 0xeb, 0xad, 0x57,
+               0x8e, 0xb1, 0x57, 0x2b, 0x86, 0x52, 0x5e, 0x84, 0x0c, 0x4c,
+               0xe2, 0x43, 0x5e, 0xd4, 0xcd, 0xe1, 0x75, 0x68, 0xa2, 0xcb,
+               0x27, 0x08, 0x85, 0xc9, 0xd3, 0xa7, 0x24, 0xf8, 0x73, 0x46,
+               0xe5, 0x19, 0xa9, 0x47, 0x84, 0xee, 0x88, 0xaf, 0xec, 0x27, /* 100 */
+               0x86, 0x68, 0x9f, 0x0b, 0xc1, 0x23, 0xe0, 0xe4, 0x65, 0x79,
+               0x57, 0xb4, 0xf7, 0x5f, 0x24, 0xb5, 0x2d, 0xd4, 0x80, 0x39,
+               0x09, 0x3a, 0xe8, 0xeb, 0x5d, 0xa4, 0x0d, 0x1e, 0x31, 0xfc,
+               0x53, 0xfd, 0x98, 0xa0, 0x58, 0xb0, 0x38, 0x9b, 0xd5, 0xc7,
+               0xaf, 0x5b, 0x0d, 0xf4, 0x49, 0xd6, 0x13, 0x90, 0x1c, 0xa2,
+               0x71, 0xb5, 0x8e, 0x47, 0x0f, 0x88, 0xd3, 0x45, 0x93, 0x1f,
+               0x3f, 0x64, 0xe8, 0x1f, 0x03, 0x1d, 0xe9, 0x5a, 0xda, 0xef,
+               0x78, 0xf6, 0x0e, 0x64, 0x5e, 0xca, 0x7d, 0xd5, 0x61, 0x8a,
+               0xa6, 0xed, 0xd3, 0x9f, 0xa8, 0x91, 0x22, 0x46, 0x39, 0xa9,
+               0xae, 0x42, 0xa8, 0xa9, 0x37, 0x4d, 0x68, 0x3f, 0xd3, 0xf4, /* 200 */
+               0x82, 0x6b, 0x97, 0x4c, 0x8d, 0x00, 0x39, 0x2f, 0x31, 0x12,
+               0x45, 0xa7, 0x1c, 0x86, 0xdb, 0x4e, 0xb5, 0xef, 0xc4, 0x78,
+               0x34, 0xce, 0x6b, 0xaf, 0xb2, 0x08, 0xaa, 0xba, 0xc6, 0x8c,
+               0x35, 0xe3, 0x4f, 0x79, 0x15, 0x78, 0x40, 0x1c, 0x7b, 0x75,
+               0x01, 0x15, 0xb1, 0x6e, 0x5c, 0x3a, 0xc3, 0x62, 0x42, 0xf4,
+               0xa9, 0x0a, 0x99, 0x73, 0x4c, 0x08, 0x36, 0x8d, 0x48, 0xab,
+               0x5d, 0x50, 0xec, 0x92, 0xf3, 0xf1, 0x26, 0x7e, 0x54, 0xb9,
+               0x33, 0x34, 0xa5, 0x0b, 0x00, 0xd7, 0x57, 0x1d, 0x1c, 0xeb,
+               0x1e, 0x66, 0x21, 0x58, 0xd5, 0x66, 0x36, 0x20, 0xd1, 0xf0,
+               0x22, 0x8a, 0x64, 0xf4, 0x92, 0xea, 0x8e, 0x1f, 0xe1, 0x81, /* 300 */
+               0x7e, 0x35, 0x83, 0x57, 0x7f, 0x1e, 0x48, 0xa5, 0x84, 0x91,
+               0xc1, 0x0d, 0x98, 0xff, 0xa0, 0xea, 0xa8, 0x64, 0x05, 0xd0,
+               0x2c, 0x94, 0xb4, 0x9f, 0x99, 0xfd, 0xdc, 0x6a, 0x3b, 0x7b,
+               0xd6, 0xe3, 0xbc, 0xe2, 0x26, 0x1e, 0xa3, 0xcb, 0xbd, 0x82,
+               0x1f, 0x49, 0x5a, 0x2a, 0xa7, 0x1a, 0xe9, 0x09, 0xb3, 0xcd,
+               0x0d, 0x2c, 0x9b, 0xec, 0x0b, 0x06, 0x8b, 0xa7, 0x26, 0x20,
+               0xff, 0x06, 0x32, 0x4c, 0xdb, 0x80, 0x0b, 0xf8, 0x56, 0x5e,
+               0x4b, 0x78, 0x21, 0x84, 0x61, 0x0e, 0xf0, 0x77, 0xbc, 0x4e,
+               0x8f, 0xc5, 0x17, 0xf7),
+       .pub_r = chunk_from_chars(
+               0x2b, 0x27, 0x0c, 0x8e, 0x66, 0x74, 0x09, 0x31, 0x45, 0xef,
+               0x84, 0xab, 0x0c, 0x34, 0x56, 0x0f, 0x5c, 0x4f, 0x94, 0x82,
+               0xa5, 0x0f, 0x2f, 0x44, 0x72, 0xfd, 0xe9, 0x87, 0xb4, 0x6e,
+               0xb8, 0x40, 0x34, 0x02, 0x03, 0xd6, 0x31, 0x10, 0x2f, 0x2c,
+               0x7f, 0x9e, 0xb4, 0x8d, 0x20, 0x74, 0x44, 0xfb, 0x21, 0x71,
+               0x7d, 0xaf, 0x76, 0xf6, 0x60, 0x04, 0xa7, 0x9e, 0xa8, 0xee,
+               0xe7, 0x7c, 0xc9, 0x80, 0x19, 0xba, 0x12, 0x34, 0xf1, 0x6f,
+               0xbf, 0xf7, 0xdd, 0xa9, 0x45, 0xa4, 0x46, 0x81, 0x1d, 0x28,
+               0x5d, 0x31, 0xaf, 0xd3, 0x31, 0xdf, 0xa8, 0x0c, 0x87, 0x0e,
+               0xfb, 0x19, 0x96, 0x68, 0xbb, 0x38, 0x76, 0x18, 0xe1, 0x16, /* 100 */
+               0x21, 0xf5, 0x32, 0x92, 0x90, 0x8f, 0xd3, 0x29, 0xaa, 0xdb,
+               0x91, 0x63, 0x5e, 0x47, 0x5f, 0x33, 0x00, 0x4d, 0x9e, 0xff,
+               0xca, 0x65, 0xe7, 0x3f, 0xdf, 0xe5, 0x58, 0xf3, 0x4b, 0xa9,
+               0xee, 0xf3, 0xcf, 0x96, 0x1d, 0xab, 0x56, 0x5c, 0x5a, 0x72,
+               0x2a, 0xfb, 0x22, 0x8c, 0x26, 0xbf, 0x38, 0xd3, 0x9c, 0x84,
+               0xf7, 0xca, 0x70, 0xf8, 0x51, 0xbf, 0x21, 0x8a, 0x7e, 0x2c,
+               0x2d, 0xb5, 0xd3, 0x56, 0x93, 0x7a, 0x01, 0x5a, 0x65, 0x50,
+               0x31, 0x13, 0xf6, 0xc0, 0xd5, 0x2d, 0x3b, 0x2a, 0x21, 0x21,
+               0xa0, 0xca, 0x42, 0xc6, 0xcc, 0xde, 0xbb, 0x0b, 0x2c, 0xfc,
+               0x68, 0xaa, 0x66, 0x2f, 0x3e, 0x08, 0xdd, 0x69, 0x82, 0x42, /* 200 */
+               0x7a, 0x0a, 0x11, 0xb2, 0xe1, 0x44, 0xe0, 0xf1, 0xa3, 0x47,
+               0xd1, 0xd2, 0x7f, 0xf8, 0x96, 0xee, 0x56, 0xf5, 0xd9, 0xfb,
+               0x25, 0xf7, 0x40, 0xb5, 0xc7, 0x09, 0x88, 0xfc, 0xdc, 0x91,
+               0x12, 0xdf, 0xce, 0xa2, 0xde, 0x11, 0x7c, 0x12, 0x87, 0xd3,
+               0x2d, 0xa8, 0x42, 0x70, 0x49, 0xce, 0xef, 0x09, 0x7b, 0xf4,
+               0x57, 0x81, 0x84, 0x6a, 0x02, 0x1d, 0x38, 0x3e, 0x73, 0x1a,
+               0xa6, 0xe5, 0xc3, 0xdc, 0x0a, 0x46, 0x22, 0x6e, 0x54, 0xc5,
+               0xa6, 0x36, 0x7a, 0xd8, 0x90, 0x0b, 0x8e, 0xad, 0xba, 0x54,
+               0x09, 0x3e, 0xc6, 0xf7, 0x1c, 0x29, 0x74, 0x4a, 0xdc, 0x73,
+               0x02, 0xe8, 0x11, 0x85, 0xed, 0x80, 0xdb, 0x14, 0xb3, 0xe4, /* 300 */
+               0x3f, 0x29, 0x36, 0x1a, 0xf4, 0xe6, 0x1c, 0x33, 0x1e, 0x5d,
+               0x77, 0x4d, 0x76, 0x17, 0xbf, 0x31, 0x55, 0x71, 0x3b, 0x0d,
+               0x4f, 0x90, 0x38, 0x97, 0x6f, 0x2f, 0xf8, 0x51, 0x99, 0xc1,
+               0xd7, 0x0d, 0xcb, 0x3e, 0xfa, 0x2b, 0x63, 0xe0, 0xc7, 0x7c,
+               0xee, 0x78, 0x9f, 0xa0, 0x05, 0x8f, 0xdf, 0x52, 0x67, 0xc6,
+               0xb1, 0xbd, 0xed, 0xc1, 0xd1, 0xef, 0x47, 0xca, 0x08, 0x22,
+               0x2a, 0x9a, 0x27, 0xe6, 0x5f, 0x89, 0x2e, 0xef, 0xde, 0x06,
+               0x12, 0xf4, 0x6b, 0x51, 0xbe, 0x1a, 0x14, 0x77, 0x4d, 0x45,
+               0x14, 0xd7, 0xe7, 0xca),
+       .shared = chunk_from_chars(
+               0x45, 0x3c, 0xaf, 0x89, 0xd6, 0xbf, 0xf3, 0x9b, 0xda, 0xe1,
+               0x85, 0x46, 0x17, 0x61, 0xd6, 0xde, 0xf5, 0x89, 0xa5, 0x82,
+               0x66, 0x9c, 0x1a, 0xc8, 0x6b, 0x0b, 0x7e, 0xe4, 0x69, 0x56,
+               0xc9, 0xf9, 0x4d, 0x74, 0x77, 0xdd, 0xd8, 0x1c, 0xde, 0x12,
+               0x75, 0x76, 0xda, 0xeb, 0xd3, 0x52, 0x95, 0x15, 0xf0, 0x6a,
+               0xa7, 0xdf, 0x5e, 0xb1, 0x31, 0x27, 0x67, 0x5c, 0xe1, 0xb4,
+               0xdc, 0xa2, 0xac, 0xb6, 0x47, 0xe3, 0x55, 0x76, 0xb9, 0x40,
+               0x50, 0xbc, 0xc3, 0x85, 0xb3, 0xb4, 0x89, 0x44, 0xdd, 0x1e,
+               0xca, 0xbe, 0x6c, 0x76, 0x70, 0x45, 0xcd, 0xcd, 0xdd, 0x3a,
+               0x1d, 0x65, 0x83, 0x8c, 0xcc, 0xb0, 0x82, 0xf5, 0x44, 0xf0, /* 100 */
+               0xfd, 0x9b, 0xe6, 0xc3, 0xd4, 0xff, 0xe7, 0x55, 0xe4, 0xd5,
+               0x6d, 0xfb, 0xb4, 0x20, 0x93, 0x52, 0x3f, 0x45, 0xd2, 0x41,
+               0x5e, 0xad, 0xf3, 0x6a, 0x18, 0x5c, 0x87, 0xa6, 0xe0, 0x14,
+               0x27, 0xbb, 0xcc, 0x98, 0x95, 0x68, 0xa2, 0x93, 0x66, 0xb1,
+               0xc6, 0x91, 0x72, 0x4d, 0x81, 0x0e, 0x99, 0xfb, 0x05, 0x83,
+               0x00, 0x26, 0x72, 0xa5, 0x3e, 0x49, 0x9f, 0xf2, 0x30, 0x4a,
+               0x4b, 0xcc, 0x10, 0xa3, 0xb8, 0x0b, 0xf4, 0x8a, 0x9e, 0x31,
+               0x5b, 0xe9, 0x98, 0xbf, 0x17, 0x0c, 0xe9, 0x0e, 0xc4, 0xeb,
+               0x87, 0x05, 0x57, 0x0e, 0x5e, 0xc4, 0x80, 0xc2, 0x1c, 0x4d,
+               0xd0, 0xa5, 0x3a, 0x1c, 0xb2, 0x06, 0xa3, 0x42, 0x45, 0x2e, /* 200 */
+               0xa8, 0xa6, 0x84, 0xd5, 0x69, 0xd8, 0x10, 0xf8, 0xe9, 0x8f,
+               0xea, 0xd7, 0x03, 0x9c, 0x64, 0xef, 0xef, 0x59, 0x35, 0x24,
+               0xf5, 0x07, 0x5c, 0xb8, 0x7e, 0x75, 0x63, 0xa4, 0x2a, 0xd1,
+               0xb5, 0x78, 0x19, 0xc7, 0xb0, 0x19, 0x96, 0x3d, 0x07, 0x0b,
+               0x4c, 0xef, 0xe2, 0x2c, 0x59, 0x6b, 0x3a, 0x96, 0xa8, 0xba,
+               0x41, 0xbd, 0xab, 0xe0, 0x54, 0xa9, 0xa9, 0xb4, 0xd1, 0xc4,
+               0x27, 0x8a, 0x83, 0x64, 0xea, 0xd9, 0x96, 0xa0, 0x39, 0xe8,
+               0xbd, 0xdc, 0x00, 0x60, 0x1e, 0xcf, 0x10, 0x2d, 0x20, 0xd6,
+               0xab, 0xce, 0xd2, 0xff, 0x19, 0x29, 0x49, 0xf5, 0xf8, 0x1c,
+               0x36, 0xfb, 0x47, 0x96, 0x44, 0x39, 0xcd, 0x44, 0x03, 0x6a, /* 300 */
+               0x23, 0xac, 0x30, 0x86, 0x8c, 0xa5, 0x23, 0x25, 0x84, 0x7b,
+               0x31, 0x00, 0xd3, 0xd4, 0x28, 0x16, 0x76, 0xbf, 0x94, 0x84,
+               0xa0, 0x05, 0x66, 0xf1, 0x3b, 0x6a, 0xe8, 0x9c, 0x57, 0xb7,
+               0x73, 0x2f, 0x8e, 0x60, 0x43, 0x4e, 0x8e, 0x48, 0x85, 0xcb,
+               0x1b, 0xf9, 0x47, 0xce, 0xd1, 0x4d, 0x31, 0x53, 0xe1, 0xb6,
+               0xc8, 0x1b, 0x33, 0x12, 0x0f, 0xfb, 0xd8, 0x45, 0x94, 0x91,
+               0xd2, 0xc5, 0x78, 0xaa, 0xb0, 0xa9, 0x7e, 0x83, 0xdc, 0x87,
+               0x87, 0x5b, 0xe5, 0x88, 0xc0, 0xcd, 0xee, 0xee, 0xfd, 0x19,
+               0xcc, 0x4f, 0x1d, 0x40)
 };
 
 ke_test_vector_t modp4096 = {
-       .method = MODP_4096_BIT, .priv_len = 64, .pub_len = 512, .shared_len = 512,
-       .priv_a = "\xab\x69\xbc\xe9\x61\xf9\x8a\xa9\xd5\x91\xe3\xfd\x9a\xbc\x46\xc8"
-                         "\x0d\xde\x39\x02\x84\xf1\x91\x42\xe8\x81\x5a\xb0\x80\x54\x72\x2b"
-                         "\xbd\x2e\x14\x1e\x27\x9e\xc7\xfd\x30\xaa\xfa\xca\x66\x40\x93\x73"
-                         "\x1e\xcc\x75\xa2\xbd\x07\xe4\xa5\x88\x3f\x56\x08\x93\xc8\x33\x50",
-       .priv_b = "\xef\x3e\xcb\x88\xf4\xf9\x88\xf7\x2a\xcd\x5a\xa2\x2e\xbe\xbf\x19"
-                         "\x0f\xde\x7e\x8e\x4d\x0d\x50\xcc\xde\x80\xf9\x41\xb3\xbb\xd6\xa2"
-                         "\xf9\xa1\x2a\xee\x9b\xb3\xe5\xc5\x80\x3f\x67\xaf\xfe\x27\xc8\x0d"
-                         "\x05\x46\x9b\x52\x54\xeb\x1f\x32\x6c\x18\x73\x1f\xd3\x4a\xc2\xcd",
-       .pub_a  = "\x3e\xc6\x3c\x0c\x68\x32\x05\xc3\x9d\x4b\x97\x72\x39\xfe\x7f\x96"
-                         "\x17\x56\x0b\x1a\x56\xc4\x7f\xd9\x07\x02\x6a\xd8\x09\x0a\xa4\x4b"
-                         "\xcc\x29\xd3\xc2\xb3\x8d\x34\xe1\x5c\x9e\x14\xc8\x05\x81\xa5\xc4"
-                         "\x83\x2f\x5c\xd8\x8e\x43\x73\xbf\x59\x0e\xad\x63\x6f\x68\xc8\x99"
-                         "\x59\xdf\xeb\xc4\x33\x03\x48\x97\x4e\xc4\x80\x7c\xa4\x4f\xb7\xd4"
-                         "\x4f\x02\xb7\x97\x70\x9e\x16\x0e\x3c\x0e\xc4\x06\x1f\x75\x9a\xec"
-                         "\x63\xd9\x96\xd2\x37\x7a\x18\xdc\xc5\x94\xc2\x08\xfa\x83\x7a\xeb"
-                         "\xc1\x68\x9d\x5c\x0a\xb4\x30\x5c\x1b\xbe\x86\xb1\xd4\xa1\x6f\x4c"
-                         "\xb5\x25\xfc\xcc\xf1\x00\x6e\x21\x23\xc7\x76\xb1\xff\xd1\xfe\xa2"
-                         "\x97\x7b\x1e\xac\x82\xd1\xee\xec\x4c\x46\x73\xa5\x17\xdb\xc4\x2e"
-                         "\x0f\x89\x30\xdb\x28\xd8\xc8\xe8\xb4\x0f\x8a\x49\x8d\xa5\x83\x05"
-                         "\x5c\x9c\x12\x35\x34\xcc\x2c\x53\x34\xd0\xbe\xbe\xa3\x76\x26\x78"
-                         "\xd1\xf5\x34\xba\x64\x6f\x75\x22\xf2\x68\x57\xa0\xff\x28\x8f\x7e"
-                         "\xfc\x38\xc1\xdf\xa0\xa6\x4c\x3e\xb5\x31\x64\xc1\x8f\x6c\x2a\x4e"
-                         "\x51\x5c\x13\xc1\xb7\x39\x35\xd9\xbd\xb4\x58\x27\x33\x55\x34\x29"
-                         "\x67\xa8\x54\xc7\x8b\x16\x8b\x58\x90\xf7\xfe\x08\xd0\x8c\x2e\x4a"
-                         "\x6f\x16\x63\x32\x2e\x7b\x52\xef\x02\x17\xc8\x15\x13\x72\x2f\x34"
-                         "\xc0\x95\x48\x02\xe4\x2c\xfb\x6c\x9e\xe9\xd2\xc3\x98\x68\x71\x1f"
-                         "\x1a\xfc\x4e\x47\x78\x52\x2d\x9c\x45\x09\x0b\x26\x23\xf4\xaf\xa3"
-                         "\x88\x42\x6b\x89\x75\x64\x05\x93\xbe\x79\x2b\xb8\xa7\x15\xbe\xf2"
-                         "\xc4\x6c\x2c\x50\xa6\x8a\xa6\x30\x13\x8a\xb2\x6d\xf9\xda\xe2\xb0"
-                         "\xe2\xc4\xeb\xc1\x0a\x86\x36\xda\xd9\xbe\x2f\xfb\x79\x19\xcd\x52"
-                         "\x78\x85\x84\x3c\xb7\x6c\x71\xf2\x8e\x71\xf6\xf8\x23\xd9\x9c\x2f"
-                         "\xe3\x1a\xd7\xfb\xcc\x9a\xbb\x24\xef\x26\x66\xa1\x21\xcc\xf2\x1f"
-                         "\x88\x1f\xa6\x6a\xb7\x18\xba\xf9\x2b\xef\x5c\xec\xaa\xcf\x4c\x92"
-                         "\x9c\x9c\xb5\x44\x24\xd1\x7a\xb7\x73\x8c\xa6\x80\x7b\x4e\xfa\x49"
-                         "\x36\x0a\x3d\xb6\x52\x7c\x72\x4c\x45\x31\x62\x9e\x9d\xb1\x84\x5c"
-                         "\x6a\x1e\xb4\x63\x2e\x0c\x07\xab\x6c\x31\x37\x7c\x80\x83\x70\x49"
-                         "\x46\x44\xa3\x5b\xd4\x78\x5f\x49\x5f\x60\x63\x8b\x98\x81\x71\xde"
-                         "\xce\x5d\x5c\x44\x90\x35\x7d\x02\x89\xb3\x94\x4b\xc9\xf7\x85\x4d"
-                         "\xb8\x06\x97\xd5\xf6\x3b\xf3\xe3\x1d\xb4\x4e\xfb\x9a\x43\xe1\xdc"
-                         "\x9d\x17\xee\x47\x01\x2d\xfb\xac\xfd\xaf\x4d\xeb\xfe\xf0\x8b\x5c",
-       .pub_b  = "\x20\xb7\xb4\x5f\x69\xe2\xc3\x0b\xcc\xf8\x41\xca\xe8\x04\x2c\x36"
-                         "\x35\x37\x25\x42\x05\x99\x33\x5f\xa2\xe8\x7b\xbe\x59\xce\xbb\xc7"
-                         "\xa7\xd3\xf6\x1e\xb6\x69\x82\x50\x3a\x75\x76\xc3\x47\x63\xdf\xef"
-                         "\x6a\x6b\x18\x0a\x93\xaf\x66\xe4\xf7\x2f\x12\xd5\x8c\x93\x84\x6d"
-                         "\x16\x05\x58\xb0\xd3\x16\x03\x9f\x6b\xa9\x9e\xa6\x4f\x00\x5b\xa1"
-                         "\x1e\x59\xf3\xa9\xcb\x99\x3d\x28\x27\x1a\x4f\xb8\x30\xc3\xf6\xc4"
-                         "\xce\xb9\xb0\x16\x2c\xcc\xa1\x97\xff\x65\x15\x78\x9d\x43\x6c\x94"
-                         "\x7e\xb5\xd8\x01\x09\x74\xeb\xcd\x36\x6b\xc4\x76\x83\x41\x09\x0a"
-                         "\x6f\xb5\x5c\xa8\x4e\x31\xd2\x48\x9e\x35\x27\xa2\x60\x77\x6f\x9b"
-                         "\x8a\x58\x57\x7b\xdc\xd6\x89\xd8\xe4\xb7\x25\x14\xcf\x15\xee\xa5"
-                         "\xa4\x96\x29\xa2\xf2\xc4\x86\xc5\x1b\x5d\x14\xd4\x9b\x11\x93\x09"
-                         "\xbf\xe9\xc9\x32\xb6\x04\xc6\xf1\xc0\xe9\x2c\x44\x8d\xc1\x9f\x54"
-                         "\xf4\x21\x11\x2f\x28\x87\x23\x8c\x91\x37\xc5\x59\xb6\x9a\x93\xac"
-                         "\xf3\x6c\xc1\xf0\xbd\xfe\x4c\xca\x0b\x60\x47\x71\xee\x2a\xf1\x7c"
-                         "\x34\x04\x5d\x42\x29\xb2\xb8\x0a\xcd\xfb\x7f\x56\xe4\xea\xee\x81"
-                         "\xed\x6c\x88\x5a\x2e\x45\xaf\xc9\x8d\xe1\x21\x2e\x5f\x71\x4f\x5f"
-                         "\x00\x88\x12\xd7\x17\x06\x89\x6d\x2d\x5e\xd8\x59\x0c\xee\x66\x41"
-                         "\x08\x79\xdc\x31\x95\xa9\x21\xef\xe0\x85\xdb\x41\xd6\x87\xec\x2d"
-                         "\xe9\x06\xa8\x10\x33\x6f\xa7\x57\x0d\x43\x11\x2d\xec\xf9\xff\xa4"
-                         "\xae\x50\xf5\x4f\xad\x3e\xec\x2b\xb3\xed\x86\xdd\xa3\x66\x2b\xc0"
-                         "\xfc\x1c\x28\x94\xd4\xde\x7d\xa9\x26\x0f\x74\x73\xbe\x67\x6d\xbf"
-                         "\x60\x90\x33\x32\x0d\xba\xa4\x91\x72\x0c\xe2\xd3\x5d\x07\x8d\xbd"
-                         "\xde\x84\x5b\x4a\x49\x5a\xd2\xec\xc2\xe6\xda\x5f\x1c\x0c\x89\x20"
-                         "\xe4\xea\x0e\xcc\xa0\xe0\x77\xda\xc5\x9b\x97\xf0\xe9\x4b\x6c\xca"
-                         "\xd3\xf4\x2a\x34\xb6\x63\x4e\xde\x83\xb2\x9d\x9c\x76\x15\xf7\x41"
-                         "\x90\xdf\x33\xb2\x0e\x7d\x69\x08\xd6\x63\x69\x8a\xdb\x8a\x2d\xac"
-                         "\xd9\x79\xf1\xca\x13\xf2\xcc\x84\x02\xf8\xf6\xcb\xf9\x11\x92\xf1"
-                         "\x11\xdd\xf5\xad\x29\x39\x05\x95\x54\xac\x47\xb4\x78\x74\x7b\x78"
-                         "\xa2\x71\x92\x97\xae\xda\x20\xe3\xd8\x53\x38\x26\x9b\x30\x80\xfc"
-                         "\x3f\xd7\x8d\xe4\xac\xf3\x4e\x09\x47\x7a\x61\xca\xc7\xc1\xb7\xdc"
-                         "\x76\x94\xed\x14\x1a\x51\x48\x0e\x6b\x2b\x43\xc0\x25\x56\xe8\xa8"
-                         "\x49\x7c\x4f\xca\x56\xf7\xfd\x56\xc8\xeb\x36\xa1\xf8\xc3\xd1\x24",
-       .shared = "\x23\xb0\x6f\x49\x39\x60\x9b\x0f\x67\x08\x85\x2d\x4f\x87\xb3\x56"
-                         "\x98\x8f\xb4\x5b\x1e\x4c\x95\x1b\x0b\x1d\x59\xbb\xa8\xca\x8b\x60"
-                         "\xc2\x55\xa1\x8f\x37\x55\xa6\xdb\x05\xe4\x28\x5f\xe8\xf1\xf9\xd2"
-                         "\x6a\xdd\x24\x14\x19\xf0\xfc\xa9\x82\x37\xfd\x7a\x5e\x52\x6d\x57"
-                         "\xab\x5a\xd0\x69\xc3\xf1\x89\xf3\xc2\x91\x50\x11\x44\xa6\x55\x14"
-                         "\xa5\x66\xb7\x4d\x0d\xc6\x41\x9c\x13\x06\xcf\xbf\xf3\x5d\xbe\xb4"
-                         "\x3a\xbd\x5e\xd3\x9c\xe1\x37\x53\xb2\x8a\xe5\xe1\x05\xf7\x19\x1b"
-                         "\xc6\xd7\x0a\xc3\x55\x2c\x82\x37\x3c\x6b\xd9\xdb\x8e\xd5\xee\x15"
-                         "\x46\xfd\xb5\x49\x9a\xe7\x0a\x6b\xcb\xd1\x85\x9a\x31\xec\x43\xdc"
-                         "\xcf\x05\x52\x5e\xe4\x0c\x94\x98\x87\xdd\x81\x68\xae\x29\xcc\x53"
-                         "\x7a\x6f\x57\xa5\x26\xf4\x25\xdd\x07\x5f\x39\xd6\xee\x71\xcb\x49"
-                         "\x7a\x57\x1f\xe5\x79\x58\xc7\xde\x32\x1d\x64\xf4\xe4\x89\x22\x43"
-                         "\xe7\x8f\xef\x47\xb3\x31\xa6\x76\x84\x49\x89\x19\x1f\x97\xad\xf7"
-                         "\x91\x32\x60\x7a\x14\x8f\x19\x3c\x7d\xd5\xe6\xd5\x99\x25\x7e\x1b"
-                         "\xf1\x21\x93\x24\x68\xdb\xbe\x21\x60\xc9\x7a\xf0\x3f\x9d\x1b\x19"
-                         "\xb1\x6b\x4f\x8f\xec\x5d\xcb\xc7\x98\x34\x4a\x87\xdb\xd4\x02\xa6"
-                         "\x26\x6e\x10\xc0\xe8\xa7\x22\xfe\x9f\x67\xe8\x63\x6c\xb0\xa7\x3e"
-                         "\x22\x4d\x53\x23\xde\x9b\x7f\xa7\xc6\x6c\x62\xa1\xf4\x00\x42\x04"
-                         "\x1c\xba\xde\xf2\x4b\x4f\xaa\xfd\xa9\x14\x79\xec\x91\x97\x64\xb0"
-                         "\xf4\x8b\x95\x9e\x67\x99\xf0\x94\x96\x6d\x24\x61\x27\xc0\x0e\x9c"
-                         "\xc7\xd8\xf5\xa8\x43\xd1\xa4\xd6\x1c\x5c\x0a\x64\xb6\xb1\x6c\xa7"
-                         "\x32\x44\x93\x75\xd9\xcf\x5d\x32\xd3\x99\xf6\x56\xfd\x51\x4f\xbf"
-                         "\xe6\x6e\xea\x82\xe4\x79\xfc\x73\x18\x0b\x72\x1d\xd4\xc5\xbb\x20"
-                         "\xd4\x50\xc5\xa1\x95\x9e\x1f\x8f\xed\x9d\xd2\x8c\x97\x05\x12\x72"
-                         "\xf6\x64\x00\xcd\xd4\x13\x45\x7d\xdd\xe6\x9a\xc7\x43\x5e\xe4\xa4"
-                         "\xf7\x2a\x37\x02\x49\x82\xb4\xa7\xf6\xf5\x5e\x03\x07\x03\x82\xb8"
-                         "\x3b\x2c\xed\xb7\x75\x25\x17\xf0\x48\xb7\xc6\x91\xd1\xf1\xd7\xb8"
-                         "\x52\xa5\xb7\xcd\x3b\x2b\xde\x97\x62\x0e\x9b\x2c\xd9\xc7\x7f\xd8"
-                         "\xcc\xb6\x92\x5a\xde\xf7\x06\xa6\x77\x0a\x2e\xfb\x62\x1c\x93\xf1"
-                         "\xca\x24\xf0\x9a\x68\x6e\x8b\x86\x05\x81\x49\x47\x39\x92\x15\x33"
-                         "\x9a\x1f\x29\xfb\x57\xac\xf9\xce\x9e\xba\x2c\xbd\x49\x69\xc8\x9e"
-                         "\x4f\xb9\x39\x02\x12\xb9\xb2\xa3\x5d\x4a\xfa\x17\xb3\xee\xc0\x8a",
+       .method = MODP_4096_BIT,
+       .seed = chunk_from_chars(
+               0xab, 0x69, 0xbc, 0xe9, 0x61, 0xf9, 0x8a, 0xa9, 0xd5, 0x91,
+               0xe3, 0xfd, 0x9a, 0xbc, 0x46, 0xc8, 0x0d, 0xde, 0x39, 0x02,
+               0x84, 0xf1, 0x91, 0x42, 0xe8, 0x81, 0x5a, 0xb0, 0x80, 0x54,
+               0x72, 0x2b, 0xbd, 0x2e, 0x14, 0x1e, 0x27, 0x9e, 0xc7, 0xfd,
+               0x30, 0xaa, 0xfa, 0xca, 0x66, 0x40, 0x93, 0x73, 0x1e, 0xcc,
+               0x75, 0xa2, 0xbd, 0x07, 0xe4, 0xa5, 0x88, 0x3f, 0x56, 0x08,
+               0x93, 0xc8, 0x33, 0x50, /* - */
+               0xef, 0x3e, 0xcb, 0x88, 0xf4, 0xf9, 0x88, 0xf7, 0x2a, 0xcd,
+               0x5a, 0xa2, 0x2e, 0xbe, 0xbf, 0x19, 0x0f, 0xde, 0x7e, 0x8e,
+               0x4d, 0x0d, 0x50, 0xcc, 0xde, 0x80, 0xf9, 0x41, 0xb3, 0xbb,
+               0xd6, 0xa2, 0xf9, 0xa1, 0x2a, 0xee, 0x9b, 0xb3, 0xe5, 0xc5,
+               0x80, 0x3f, 0x67, 0xaf, 0xfe, 0x27, 0xc8, 0x0d, 0x05, 0x46,
+               0x9b, 0x52, 0x54, 0xeb, 0x1f, 0x32, 0x6c, 0x18, 0x73, 0x1f,
+               0xd3, 0x4a, 0xc2, 0xcd),
+       .pub_i = chunk_from_chars(
+               0x3e, 0xc6, 0x3c, 0x0c, 0x68, 0x32, 0x05, 0xc3, 0x9d, 0x4b,
+               0x97, 0x72, 0x39, 0xfe, 0x7f, 0x96, 0x17, 0x56, 0x0b, 0x1a,
+               0x56, 0xc4, 0x7f, 0xd9, 0x07, 0x02, 0x6a, 0xd8, 0x09, 0x0a,
+               0xa4, 0x4b, 0xcc, 0x29, 0xd3, 0xc2, 0xb3, 0x8d, 0x34, 0xe1,
+               0x5c, 0x9e, 0x14, 0xc8, 0x05, 0x81, 0xa5, 0xc4, 0x83, 0x2f,
+               0x5c, 0xd8, 0x8e, 0x43, 0x73, 0xbf, 0x59, 0x0e, 0xad, 0x63,
+               0x6f, 0x68, 0xc8, 0x99, 0x59, 0xdf, 0xeb, 0xc4, 0x33, 0x03,
+               0x48, 0x97, 0x4e, 0xc4, 0x80, 0x7c, 0xa4, 0x4f, 0xb7, 0xd4,
+               0x4f, 0x02, 0xb7, 0x97, 0x70, 0x9e, 0x16, 0x0e, 0x3c, 0x0e,
+               0xc4, 0x06, 0x1f, 0x75, 0x9a, 0xec, 0x63, 0xd9, 0x96, 0xd2, /* 100 */
+               0x37, 0x7a, 0x18, 0xdc, 0xc5, 0x94, 0xc2, 0x08, 0xfa, 0x83,
+               0x7a, 0xeb, 0xc1, 0x68, 0x9d, 0x5c, 0x0a, 0xb4, 0x30, 0x5c,
+               0x1b, 0xbe, 0x86, 0xb1, 0xd4, 0xa1, 0x6f, 0x4c, 0xb5, 0x25,
+               0xfc, 0xcc, 0xf1, 0x00, 0x6e, 0x21, 0x23, 0xc7, 0x76, 0xb1,
+               0xff, 0xd1, 0xfe, 0xa2, 0x97, 0x7b, 0x1e, 0xac, 0x82, 0xd1,
+               0xee, 0xec, 0x4c, 0x46, 0x73, 0xa5, 0x17, 0xdb, 0xc4, 0x2e,
+               0x0f, 0x89, 0x30, 0xdb, 0x28, 0xd8, 0xc8, 0xe8, 0xb4, 0x0f,
+               0x8a, 0x49, 0x8d, 0xa5, 0x83, 0x05, 0x5c, 0x9c, 0x12, 0x35,
+               0x34, 0xcc, 0x2c, 0x53, 0x34, 0xd0, 0xbe, 0xbe, 0xa3, 0x76,
+               0x26, 0x78, 0xd1, 0xf5, 0x34, 0xba, 0x64, 0x6f, 0x75, 0x22, /* 200 */
+               0xf2, 0x68, 0x57, 0xa0, 0xff, 0x28, 0x8f, 0x7e, 0xfc, 0x38,
+               0xc1, 0xdf, 0xa0, 0xa6, 0x4c, 0x3e, 0xb5, 0x31, 0x64, 0xc1,
+               0x8f, 0x6c, 0x2a, 0x4e, 0x51, 0x5c, 0x13, 0xc1, 0xb7, 0x39,
+               0x35, 0xd9, 0xbd, 0xb4, 0x58, 0x27, 0x33, 0x55, 0x34, 0x29,
+               0x67, 0xa8, 0x54, 0xc7, 0x8b, 0x16, 0x8b, 0x58, 0x90, 0xf7,
+               0xfe, 0x08, 0xd0, 0x8c, 0x2e, 0x4a, 0x6f, 0x16, 0x63, 0x32,
+               0x2e, 0x7b, 0x52, 0xef, 0x02, 0x17, 0xc8, 0x15, 0x13, 0x72,
+               0x2f, 0x34, 0xc0, 0x95, 0x48, 0x02, 0xe4, 0x2c, 0xfb, 0x6c,
+               0x9e, 0xe9, 0xd2, 0xc3, 0x98, 0x68, 0x71, 0x1f, 0x1a, 0xfc,
+               0x4e, 0x47, 0x78, 0x52, 0x2d, 0x9c, 0x45, 0x09, 0x0b, 0x26, /* 300 */
+               0x23, 0xf4, 0xaf, 0xa3, 0x88, 0x42, 0x6b, 0x89, 0x75, 0x64,
+               0x05, 0x93, 0xbe, 0x79, 0x2b, 0xb8, 0xa7, 0x15, 0xbe, 0xf2,
+               0xc4, 0x6c, 0x2c, 0x50, 0xa6, 0x8a, 0xa6, 0x30, 0x13, 0x8a,
+               0xb2, 0x6d, 0xf9, 0xda, 0xe2, 0xb0, 0xe2, 0xc4, 0xeb, 0xc1,
+               0x0a, 0x86, 0x36, 0xda, 0xd9, 0xbe, 0x2f, 0xfb, 0x79, 0x19,
+               0xcd, 0x52, 0x78, 0x85, 0x84, 0x3c, 0xb7, 0x6c, 0x71, 0xf2,
+               0x8e, 0x71, 0xf6, 0xf8, 0x23, 0xd9, 0x9c, 0x2f, 0xe3, 0x1a,
+               0xd7, 0xfb, 0xcc, 0x9a, 0xbb, 0x24, 0xef, 0x26, 0x66, 0xa1,
+               0x21, 0xcc, 0xf2, 0x1f, 0x88, 0x1f, 0xa6, 0x6a, 0xb7, 0x18,
+               0xba, 0xf9, 0x2b, 0xef, 0x5c, 0xec, 0xaa, 0xcf, 0x4c, 0x92, /* 400 */
+               0x9c, 0x9c, 0xb5, 0x44, 0x24, 0xd1, 0x7a, 0xb7, 0x73, 0x8c,
+               0xa6, 0x80, 0x7b, 0x4e, 0xfa, 0x49, 0x36, 0x0a, 0x3d, 0xb6,
+               0x52, 0x7c, 0x72, 0x4c, 0x45, 0x31, 0x62, 0x9e, 0x9d, 0xb1,
+               0x84, 0x5c, 0x6a, 0x1e, 0xb4, 0x63, 0x2e, 0x0c, 0x07, 0xab,
+               0x6c, 0x31, 0x37, 0x7c, 0x80, 0x83, 0x70, 0x49, 0x46, 0x44,
+               0xa3, 0x5b, 0xd4, 0x78, 0x5f, 0x49, 0x5f, 0x60, 0x63, 0x8b,
+               0x98, 0x81, 0x71, 0xde, 0xce, 0x5d, 0x5c, 0x44, 0x90, 0x35,
+               0x7d, 0x02, 0x89, 0xb3, 0x94, 0x4b, 0xc9, 0xf7, 0x85, 0x4d,
+               0xb8, 0x06, 0x97, 0xd5, 0xf6, 0x3b, 0xf3, 0xe3, 0x1d, 0xb4,
+               0x4e, 0xfb, 0x9a, 0x43, 0xe1, 0xdc, 0x9d, 0x17, 0xee, 0x47, /* 500 */
+               0x01, 0x2d, 0xfb, 0xac, 0xfd, 0xaf, 0x4d, 0xeb, 0xfe, 0xf0,
+               0x8b, 0x5c),
+       .pub_r = chunk_from_chars(
+               0x20, 0xb7, 0xb4, 0x5f, 0x69, 0xe2, 0xc3, 0x0b, 0xcc, 0xf8,
+               0x41, 0xca, 0xe8, 0x04, 0x2c, 0x36, 0x35, 0x37, 0x25, 0x42,
+               0x05, 0x99, 0x33, 0x5f, 0xa2, 0xe8, 0x7b, 0xbe, 0x59, 0xce,
+               0xbb, 0xc7, 0xa7, 0xd3, 0xf6, 0x1e, 0xb6, 0x69, 0x82, 0x50,
+               0x3a, 0x75, 0x76, 0xc3, 0x47, 0x63, 0xdf, 0xef, 0x6a, 0x6b,
+               0x18, 0x0a, 0x93, 0xaf, 0x66, 0xe4, 0xf7, 0x2f, 0x12, 0xd5,
+               0x8c, 0x93, 0x84, 0x6d, 0x16, 0x05, 0x58, 0xb0, 0xd3, 0x16,
+               0x03, 0x9f, 0x6b, 0xa9, 0x9e, 0xa6, 0x4f, 0x00, 0x5b, 0xa1,
+               0x1e, 0x59, 0xf3, 0xa9, 0xcb, 0x99, 0x3d, 0x28, 0x27, 0x1a,
+               0x4f, 0xb8, 0x30, 0xc3, 0xf6, 0xc4, 0xce, 0xb9, 0xb0, 0x16, /* 100 */
+               0x2c, 0xcc, 0xa1, 0x97, 0xff, 0x65, 0x15, 0x78, 0x9d, 0x43,
+               0x6c, 0x94, 0x7e, 0xb5, 0xd8, 0x01, 0x09, 0x74, 0xeb, 0xcd,
+               0x36, 0x6b, 0xc4, 0x76, 0x83, 0x41, 0x09, 0x0a, 0x6f, 0xb5,
+               0x5c, 0xa8, 0x4e, 0x31, 0xd2, 0x48, 0x9e, 0x35, 0x27, 0xa2,
+               0x60, 0x77, 0x6f, 0x9b, 0x8a, 0x58, 0x57, 0x7b, 0xdc, 0xd6,
+               0x89, 0xd8, 0xe4, 0xb7, 0x25, 0x14, 0xcf, 0x15, 0xee, 0xa5,
+               0xa4, 0x96, 0x29, 0xa2, 0xf2, 0xc4, 0x86, 0xc5, 0x1b, 0x5d,
+               0x14, 0xd4, 0x9b, 0x11, 0x93, 0x09, 0xbf, 0xe9, 0xc9, 0x32,
+               0xb6, 0x04, 0xc6, 0xf1, 0xc0, 0xe9, 0x2c, 0x44, 0x8d, 0xc1,
+               0x9f, 0x54, 0xf4, 0x21, 0x11, 0x2f, 0x28, 0x87, 0x23, 0x8c, /* 200 */
+               0x91, 0x37, 0xc5, 0x59, 0xb6, 0x9a, 0x93, 0xac, 0xf3, 0x6c,
+               0xc1, 0xf0, 0xbd, 0xfe, 0x4c, 0xca, 0x0b, 0x60, 0x47, 0x71,
+               0xee, 0x2a, 0xf1, 0x7c, 0x34, 0x04, 0x5d, 0x42, 0x29, 0xb2,
+               0xb8, 0x0a, 0xcd, 0xfb, 0x7f, 0x56, 0xe4, 0xea, 0xee, 0x81,
+               0xed, 0x6c, 0x88, 0x5a, 0x2e, 0x45, 0xaf, 0xc9, 0x8d, 0xe1,
+               0x21, 0x2e, 0x5f, 0x71, 0x4f, 0x5f, 0x00, 0x88, 0x12, 0xd7,
+               0x17, 0x06, 0x89, 0x6d, 0x2d, 0x5e, 0xd8, 0x59, 0x0c, 0xee,
+               0x66, 0x41, 0x08, 0x79, 0xdc, 0x31, 0x95, 0xa9, 0x21, 0xef,
+               0xe0, 0x85, 0xdb, 0x41, 0xd6, 0x87, 0xec, 0x2d, 0xe9, 0x06,
+               0xa8, 0x10, 0x33, 0x6f, 0xa7, 0x57, 0x0d, 0x43, 0x11, 0x2d, /* 300 */
+               0xec, 0xf9, 0xff, 0xa4, 0xae, 0x50, 0xf5, 0x4f, 0xad, 0x3e,
+               0xec, 0x2b, 0xb3, 0xed, 0x86, 0xdd, 0xa3, 0x66, 0x2b, 0xc0,
+               0xfc, 0x1c, 0x28, 0x94, 0xd4, 0xde, 0x7d, 0xa9, 0x26, 0x0f,
+               0x74, 0x73, 0xbe, 0x67, 0x6d, 0xbf, 0x60, 0x90, 0x33, 0x32,
+               0x0d, 0xba, 0xa4, 0x91, 0x72, 0x0c, 0xe2, 0xd3, 0x5d, 0x07,
+               0x8d, 0xbd, 0xde, 0x84, 0x5b, 0x4a, 0x49, 0x5a, 0xd2, 0xec,
+               0xc2, 0xe6, 0xda, 0x5f, 0x1c, 0x0c, 0x89, 0x20, 0xe4, 0xea,
+               0x0e, 0xcc, 0xa0, 0xe0, 0x77, 0xda, 0xc5, 0x9b, 0x97, 0xf0,
+               0xe9, 0x4b, 0x6c, 0xca, 0xd3, 0xf4, 0x2a, 0x34, 0xb6, 0x63,
+               0x4e, 0xde, 0x83, 0xb2, 0x9d, 0x9c, 0x76, 0x15, 0xf7, 0x41, /* 400 */
+               0x90, 0xdf, 0x33, 0xb2, 0x0e, 0x7d, 0x69, 0x08, 0xd6, 0x63,
+               0x69, 0x8a, 0xdb, 0x8a, 0x2d, 0xac, 0xd9, 0x79, 0xf1, 0xca,
+               0x13, 0xf2, 0xcc, 0x84, 0x02, 0xf8, 0xf6, 0xcb, 0xf9, 0x11,
+               0x92, 0xf1, 0x11, 0xdd, 0xf5, 0xad, 0x29, 0x39, 0x05, 0x95,
+               0x54, 0xac, 0x47, 0xb4, 0x78, 0x74, 0x7b, 0x78, 0xa2, 0x71,
+               0x92, 0x97, 0xae, 0xda, 0x20, 0xe3, 0xd8, 0x53, 0x38, 0x26,
+               0x9b, 0x30, 0x80, 0xfc, 0x3f, 0xd7, 0x8d, 0xe4, 0xac, 0xf3,
+               0x4e, 0x09, 0x47, 0x7a, 0x61, 0xca, 0xc7, 0xc1, 0xb7, 0xdc,
+               0x76, 0x94, 0xed, 0x14, 0x1a, 0x51, 0x48, 0x0e, 0x6b, 0x2b,
+               0x43, 0xc0, 0x25, 0x56, 0xe8, 0xa8, 0x49, 0x7c, 0x4f, 0xca, /* 500 */
+               0x56, 0xf7, 0xfd, 0x56, 0xc8, 0xeb, 0x36, 0xa1, 0xf8, 0xc3,
+               0xd1, 0x24),
+       .shared = chunk_from_chars(
+               0x23, 0xb0, 0x6f, 0x49, 0x39, 0x60, 0x9b, 0x0f, 0x67, 0x08,
+               0x85, 0x2d, 0x4f, 0x87, 0xb3, 0x56, 0x98, 0x8f, 0xb4, 0x5b,
+               0x1e, 0x4c, 0x95, 0x1b, 0x0b, 0x1d, 0x59, 0xbb, 0xa8, 0xca,
+               0x8b, 0x60, 0xc2, 0x55, 0xa1, 0x8f, 0x37, 0x55, 0xa6, 0xdb,
+               0x05, 0xe4, 0x28, 0x5f, 0xe8, 0xf1, 0xf9, 0xd2, 0x6a, 0xdd,
+               0x24, 0x14, 0x19, 0xf0, 0xfc, 0xa9, 0x82, 0x37, 0xfd, 0x7a,
+               0x5e, 0x52, 0x6d, 0x57, 0xab, 0x5a, 0xd0, 0x69, 0xc3, 0xf1,
+               0x89, 0xf3, 0xc2, 0x91, 0x50, 0x11, 0x44, 0xa6, 0x55, 0x14,
+               0xa5, 0x66, 0xb7, 0x4d, 0x0d, 0xc6, 0x41, 0x9c, 0x13, 0x06,
+               0xcf, 0xbf, 0xf3, 0x5d, 0xbe, 0xb4, 0x3a, 0xbd, 0x5e, 0xd3, /* 100 */
+               0x9c, 0xe1, 0x37, 0x53, 0xb2, 0x8a, 0xe5, 0xe1, 0x05, 0xf7,
+               0x19, 0x1b, 0xc6, 0xd7, 0x0a, 0xc3, 0x55, 0x2c, 0x82, 0x37,
+               0x3c, 0x6b, 0xd9, 0xdb, 0x8e, 0xd5, 0xee, 0x15, 0x46, 0xfd,
+               0xb5, 0x49, 0x9a, 0xe7, 0x0a, 0x6b, 0xcb, 0xd1, 0x85, 0x9a,
+               0x31, 0xec, 0x43, 0xdc, 0xcf, 0x05, 0x52, 0x5e, 0xe4, 0x0c,
+               0x94, 0x98, 0x87, 0xdd, 0x81, 0x68, 0xae, 0x29, 0xcc, 0x53,
+               0x7a, 0x6f, 0x57, 0xa5, 0x26, 0xf4, 0x25, 0xdd, 0x07, 0x5f,
+               0x39, 0xd6, 0xee, 0x71, 0xcb, 0x49, 0x7a, 0x57, 0x1f, 0xe5,
+               0x79, 0x58, 0xc7, 0xde, 0x32, 0x1d, 0x64, 0xf4, 0xe4, 0x89,
+               0x22, 0x43, 0xe7, 0x8f, 0xef, 0x47, 0xb3, 0x31, 0xa6, 0x76, /* 200 */
+               0x84, 0x49, 0x89, 0x19, 0x1f, 0x97, 0xad, 0xf7, 0x91, 0x32,
+               0x60, 0x7a, 0x14, 0x8f, 0x19, 0x3c, 0x7d, 0xd5, 0xe6, 0xd5,
+               0x99, 0x25, 0x7e, 0x1b, 0xf1, 0x21, 0x93, 0x24, 0x68, 0xdb,
+               0xbe, 0x21, 0x60, 0xc9, 0x7a, 0xf0, 0x3f, 0x9d, 0x1b, 0x19,
+               0xb1, 0x6b, 0x4f, 0x8f, 0xec, 0x5d, 0xcb, 0xc7, 0x98, 0x34,
+               0x4a, 0x87, 0xdb, 0xd4, 0x02, 0xa6, 0x26, 0x6e, 0x10, 0xc0,
+               0xe8, 0xa7, 0x22, 0xfe, 0x9f, 0x67, 0xe8, 0x63, 0x6c, 0xb0,
+               0xa7, 0x3e, 0x22, 0x4d, 0x53, 0x23, 0xde, 0x9b, 0x7f, 0xa7,
+               0xc6, 0x6c, 0x62, 0xa1, 0xf4, 0x00, 0x42, 0x04, 0x1c, 0xba,
+               0xde, 0xf2, 0x4b, 0x4f, 0xaa, 0xfd, 0xa9, 0x14, 0x79, 0xec, /* 300 */
+               0x91, 0x97, 0x64, 0xb0, 0xf4, 0x8b, 0x95, 0x9e, 0x67, 0x99,
+               0xf0, 0x94, 0x96, 0x6d, 0x24, 0x61, 0x27, 0xc0, 0x0e, 0x9c,
+               0xc7, 0xd8, 0xf5, 0xa8, 0x43, 0xd1, 0xa4, 0xd6, 0x1c, 0x5c,
+               0x0a, 0x64, 0xb6, 0xb1, 0x6c, 0xa7, 0x32, 0x44, 0x93, 0x75,
+               0xd9, 0xcf, 0x5d, 0x32, 0xd3, 0x99, 0xf6, 0x56, 0xfd, 0x51,
+               0x4f, 0xbf, 0xe6, 0x6e, 0xea, 0x82, 0xe4, 0x79, 0xfc, 0x73,
+               0x18, 0x0b, 0x72, 0x1d, 0xd4, 0xc5, 0xbb, 0x20, 0xd4, 0x50,
+               0xc5, 0xa1, 0x95, 0x9e, 0x1f, 0x8f, 0xed, 0x9d, 0xd2, 0x8c,
+               0x97, 0x05, 0x12, 0x72, 0xf6, 0x64, 0x00, 0xcd, 0xd4, 0x13,
+               0x45, 0x7d, 0xdd, 0xe6, 0x9a, 0xc7, 0x43, 0x5e, 0xe4, 0xa4, /* 400 */
+               0xf7, 0x2a, 0x37, 0x02, 0x49, 0x82, 0xb4, 0xa7, 0xf6, 0xf5,
+               0x5e, 0x03, 0x07, 0x03, 0x82, 0xb8, 0x3b, 0x2c, 0xed, 0xb7,
+               0x75, 0x25, 0x17, 0xf0, 0x48, 0xb7, 0xc6, 0x91, 0xd1, 0xf1,
+               0xd7, 0xb8, 0x52, 0xa5, 0xb7, 0xcd, 0x3b, 0x2b, 0xde, 0x97,
+               0x62, 0x0e, 0x9b, 0x2c, 0xd9, 0xc7, 0x7f, 0xd8, 0xcc, 0xb6,
+               0x92, 0x5a, 0xde, 0xf7, 0x06, 0xa6, 0x77, 0x0a, 0x2e, 0xfb,
+               0x62, 0x1c, 0x93, 0xf1, 0xca, 0x24, 0xf0, 0x9a, 0x68, 0x6e,
+               0x8b, 0x86, 0x05, 0x81, 0x49, 0x47, 0x39, 0x92, 0x15, 0x33,
+               0x9a, 0x1f, 0x29, 0xfb, 0x57, 0xac, 0xf9, 0xce, 0x9e, 0xba,
+               0x2c, 0xbd, 0x49, 0x69, 0xc8, 0x9e, 0x4f, 0xb9, 0x39, 0x02, /* 500 */
+               0x12, 0xb9, 0xb2, 0xa3, 0x5d, 0x4a, 0xfa, 0x17, 0xb3, 0xee,
+               0xc0, 0x8a)
 };
 
 ke_test_vector_t modp6144 = {
-       .method = MODP_6144_BIT, .priv_len = 64, .pub_len = 768, .shared_len = 768,
-       .priv_a = "\xab\x36\xf0\x65\x7c\x4f\xba\xdc\x2a\x3b\x07\xed\xd1\xc8\xaf\xcb"
-                         "\x42\xaf\xcd\x7f\xf9\x1c\x57\x01\x37\x25\x50\x0d\x89\x42\x9f\x34"
-                         "\x79\x8f\x99\xf5\xde\x53\xd1\x08\x8f\xd9\xf6\x60\xa1\xa5\x2b\xe4"
-                         "\x54\xf9\x63\x4d\x15\xbb\x4e\x4c\xe0\x9e\x5a\x69\xe0\xf9\x9d\x59",
-       .priv_b = "\x59\xa5\x52\xa4\x0d\x17\x80\xaf\x64\x33\xbc\x9e\x8a\x9b\x6d\x48"
-                         "\x30\xdd\xd3\x57\x53\x07\x40\x9a\x90\xc9\x2b\xda\x40\x4b\xb7\x99"
-                         "\xf0\x09\x3e\xfe\x21\xbe\xad\x85\xf1\x6a\x23\x7b\x05\x90\xc3\x35"
-                         "\x6d\x96\x8c\xc0\x9d\xcd\x5b\x2d\x96\x86\x07\xd6\xd1\xbf\x70\xc2",
-       .pub_a  = "\x0a\x78\x01\x5c\x3e\x0d\x36\x2a\xff\xe5\xd9\x3a\x9c\x2d\xf2\xdf"
-                         "\x5b\xb9\x6b\x7f\xf2\xfc\xc2\xdd\x96\x6c\x53\x9d\x1d\x4c\xdb\xac"
-                         "\xec\xe2\x6d\x16\xab\x6d\x3d\xe8\x24\xe0\x75\x87\x29\x12\xeb\xa0"
-                         "\x44\x33\x66\x11\x0e\x0d\x7e\x17\x27\x4b\x95\x78\xaf\x12\x46\x63"
-                         "\xe6\x55\x17\x0b\xf7\xb7\xb2\xbd\xb4\xbf\xe4\x7a\x88\x97\x68\x95"
-                         "\x6a\x98\xf1\xce\x1a\xc8\xc6\xc7\xc4\x8e\x13\xa3\x6c\x16\x1c\x82"
-                         "\x00\x7c\x98\x35\xb2\x2e\x7b\x47\x99\x38\x92\xa1\x71\x2b\x27\x5d"
-                         "\xdc\x84\x54\xf4\x33\x0b\xd1\xfc\x08\xab\xfc\x48\x8e\x71\x8b\x43"
-                         "\xa6\x21\x3a\x09\xc5\x68\x74\xce\xef\xb3\xa9\xfa\xe7\xe1\x11\xc0"
-                         "\x0a\x10\x43\x3f\x4b\x23\x75\xef\xab\x04\x2b\xd5\xc1\xc2\x9a\xaf"
-                         "\x97\x0c\xeb\xae\xb5\x7f\x10\xf0\x10\x6e\xa6\x3d\x25\x72\x59\x93"
-                         "\x0a\xf5\xb3\x3b\xc2\x64\x27\xe6\xef\x47\x32\xde\x43\xdc\xea\x0a"
-                         "\x88\x72\x9b\x93\x7e\x6a\x9a\xfc\xf2\x92\xa2\x9f\x8b\xe9\x9b\x71"
-                         "\x88\xd8\x2d\xfc\x13\x7e\x69\x19\x9a\x53\x5d\x92\xdc\x61\x37\x60"
-                         "\x03\x38\x67\x1e\x6d\x46\x76\x31\xff\xc2\xbd\x69\x59\x42\xcd\x7e"
-                         "\xbb\x40\x2c\x54\xea\x39\x1b\x9a\x02\xde\x1f\x28\x99\xfe\xd5\xbd"
-                         "\xb7\x1f\x27\xab\x71\x0b\xba\xaa\x32\xb2\xc2\xe0\xec\x8d\x4b\xd4"
-                         "\xca\x6c\xc5\x07\xd9\x72\x0b\x20\xaf\x9c\xce\xcd\x7f\x4e\x88\xed"
-                         "\x55\x0a\xea\xbc\x43\xdd\x0b\x3d\xc0\x20\xdb\x3e\x14\x89\x76\xc7"
-                         "\x61\xf5\x44\x21\x8a\x79\xb7\x3b\x37\x77\x24\x99\xf3\x61\xba\x0b"
-                         "\x1d\x3c\xf2\x10\x23\x75\x36\xfb\x89\xd8\x57\x86\x51\xed\x67\x51"
-                         "\xd1\xe8\x10\x95\x61\x2b\x0f\xcf\x65\x36\xbc\xb0\xff\x17\x2c\x3d"
-                         "\x54\xdc\x07\x13\x19\x99\xd4\x11\x98\xf9\x7e\xa8\x32\x9a\xbb\x04"
-                         "\xc3\x75\x3f\x83\xe1\xfd\x3b\x92\x78\x72\x3c\x98\x67\xf4\xc1\xff"
-                         "\x19\xe1\xd2\xad\x7d\x34\x65\xf0\xb8\xc2\xdd\x9d\x4c\xcd\x36\x1a"
-                         "\xbd\xf8\x56\x66\xd6\xfe\x04\x2c\x98\x04\x2b\xec\xa9\x4b\x66\x4b"
-                         "\x71\xcf\x78\x07\x56\xe5\xba\x9c\x8a\x72\xb8\xc9\xe4\x82\xd6\x59"
-                         "\x22\x59\x39\x75\xd6\xdd\x00\xf3\x16\xc7\xb2\x0c\x81\xeb\x67\x4f"
-                         "\x0b\xbe\xa8\x1e\xed\xe6\x7b\xbf\xf1\x17\x38\x3f\xf4\x86\x0b\x97"
-                         "\x75\xa7\x81\x86\x14\xb8\x6d\x48\x5e\x88\x98\xa9\x2f\x54\xfd\x7f"
-                         "\x05\x45\xb4\x32\xcd\x5f\xab\xec\x2e\xa8\x42\xd8\x3b\x51\xc2\x18"
-                         "\x91\x7a\xb6\x10\x5e\x26\x8b\xc8\x50\x08\x2c\x79\xa1\xd0\x74\x12"
-                         "\xce\xc4\xd2\x3c\xb0\x04\x54\xa8\x87\x2b\x9f\xb3\x05\x4a\x89\x64"
-                         "\xb5\xaf\x7f\x64\x4b\x45\xcd\xd7\xf2\xb8\xa8\x8c\xd8\x7c\x6e\xe6"
-                         "\x19\xd9\xaf\x59\xb5\x2b\x07\x37\x1b\x8f\xb0\x57\xe7\x05\x9f\x21"
-                         "\x52\x6d\xc4\x89\x4a\xff\xce\xda\xc8\x5b\x73\xf3\xd4\x07\xc7\x29"
-                         "\x02\x7e\xa6\x79\x82\xd3\x01\xba\x93\x0e\x37\x17\x3d\xfc\x38\xd3"
-                         "\x25\x7e\x52\xd2\x53\xba\x20\xe8\xe9\xef\xa2\x96\x38\x49\x14\xd2"
-                         "\x83\x8b\x2c\x62\xb0\x27\xc6\x5d\x36\x34\xd4\x58\x14\x25\x6e\xc1"
-                         "\xcf\xd0\x2d\x21\xa3\xc0\x9c\x9b\x14\x20\x83\xec\x1a\xeb\x14\x2a"
-                         "\xd3\x97\x40\xad\xd0\xeb\x51\x8f\xa2\x10\x62\xb4\x50\x94\xff\x35"
-                         "\x43\xc2\x29\x88\x0e\xf6\xb9\x4c\x85\x80\x13\xed\x2f\x56\x15\xdc"
-                         "\x0f\x09\xd2\xe5\x40\x11\x70\x34\x76\x2c\xed\xb1\xac\xe5\x82\x77"
-                         "\x45\x42\x3e\x8e\x8d\x08\x6e\x5b\xbe\x34\xf9\x93\x0f\x8a\x43\xec"
-                         "\xa6\x9f\x7c\x56\xe6\x95\x31\x85\x9d\xb1\x97\xaf\x2d\xac\x76\x81"
-                         "\x1f\xfb\x4d\x53\xfe\x04\xe2\x48\xbe\xac\x50\xe2\xb3\x74\x77\x5f"
-                         "\x48\xec\x26\xd0\x9b\xb9\xa3\x28\x23\xa9\x2c\xc2\x0a\xb7\xd3\x80"
-                         "\x87\x03\xa2\x3b\x74\x07\xaf\xa5\x5f\x2b\x9b\x90\xa2\xf8\x89\x3c",
-       .pub_b  = "\x75\x3a\x06\x23\x48\x41\x6e\x90\x3b\x5b\x3b\x25\x89\x38\xf1\xa4"
-                         "\x3f\xe0\x96\x2a\xcb\x3c\xd2\x7a\x71\xb3\xed\x8a\xd4\xa5\x62\x77"
-                         "\x4b\x6f\xf4\xf2\x29\x31\x2a\xfc\xb4\x7b\x34\xfe\x9c\xb0\x83\x62"
-                         "\xe7\x45\xc9\x93\x19\x89\xdb\x90\x99\xc5\x77\x85\x06\x97\xa6\x2f"
-                         "\xde\x6d\x98\x01\xbc\x4f\x51\x92\x94\x6f\x10\x3a\x7a\x56\x14\x48"
-                         "\xad\x7d\x1d\x15\x0c\x8c\xda\xc9\x01\xf1\x3b\xfd\x27\x09\x2e\xf7"
-                         "\xec\x0f\x82\x1e\x0e\xa6\xb9\x1b\x63\x90\xc3\x3e\x7e\xf1\xad\x5c"
-                         "\xaf\x6f\x6d\x9d\x3f\x25\x4f\xe9\x53\xaf\x03\x6e\xdc\x24\xf3\x2c"
-                         "\x65\x67\xc7\x08\x61\x80\x18\x7c\x19\x97\x44\x56\x5e\xf0\xa2\x94"
-                         "\x7c\x59\x01\x94\x5b\x46\xa8\x0b\x28\x6c\xa0\xfc\xa0\xad\xe4\x4a"
-                         "\x2c\x87\x77\x7b\x44\x28\x25\xd4\xa2\x24\x70\x69\x9a\x83\xf7\x65"
-                         "\xde\xe3\xeb\x03\x14\x00\x4c\xba\x87\x87\xf2\x47\x4c\x3e\x44\x67"
-                         "\x66\x85\x48\xb4\x12\xa6\x15\x22\x0d\x39\x02\x07\x66\x59\x07\x3a"
-                         "\x64\x9e\xba\x6e\xc4\xdc\x29\x07\x5b\x67\xff\x42\xca\xe0\x1d\xcd"
-                         "\x39\x08\xff\x63\x03\xb1\x76\xc4\xa3\xdc\x81\x33\xfb\x4c\x28\xa1"
-                         "\xe4\x7e\xbe\x5f\x73\x24\x92\x7a\x40\x8d\x75\xc5\x94\x13\x26\x91"
-                         "\xef\x9a\xee\x45\xaa\xff\xfc\xae\x61\x34\xdb\x20\x96\x99\xe9\x18"
-                         "\x30\x95\x37\x23\xaf\x3d\x2f\x3b\x03\x69\x4b\xfa\x92\x92\x57\x8e"
-                         "\x66\xe2\x89\xf0\x62\xe5\x2b\x2c\x23\xca\xcd\x8d\xdd\x88\x92\xb4"
-                         "\xc9\x8e\x9d\x57\x62\x69\x3e\xd1\xd7\xc8\x7e\x99\xac\x4e\x7c\x65"
-                         "\xaf\xea\x99\xfa\x69\xd8\x46\xb2\xc7\x1f\x76\xf1\x3e\x99\xb7\x23"
-                         "\x2c\x7c\x80\x8b\x3a\x5e\x86\x2c\x50\x5a\x36\x48\x0a\x23\x23\xdf"
-                         "\x69\x95\xa0\x1b\xfd\x1f\x4e\x06\xc5\x0b\x17\x3c\x62\xce\x5a\x63"
-                         "\x82\xcd\x14\x64\xb8\x60\x36\xb9\x74\x9c\xa4\xe1\xa5\x0c\xc0\x77"
-                         "\x05\x41\x46\xac\x16\xdb\xb5\x16\x71\x71\x6e\x62\x93\x17\xd6\xdc"
-                         "\xbb\xbd\xb3\x01\x5f\x08\xa9\x71\x91\x97\x92\xb1\x1d\xa8\x0a\xf9"
-                         "\xc3\xaa\x4c\xc2\x63\x48\xd1\xae\x21\xbb\xf3\xb7\xda\x04\x5e\x6e"
-                         "\x82\x89\x5d\xdc\xfb\xae\x76\xaf\x50\x42\x71\x06\x8b\x0c\xfd\xb9"
-                         "\x0f\x00\x24\x97\xe0\x0c\x9f\xf2\x95\x11\x63\x6f\xcf\x59\xfb\xd2"
-                         "\xcc\x10\xec\xaa\xef\x89\xff\x1b\x48\xc9\xce\x78\x22\x50\xf6\x31"
-                         "\x47\x78\x38\x3b\xae\x32\xed\xf6\xaa\xa9\x7a\x53\x71\xc6\xbd\x10"
-                         "\xcf\x17\xf4\x1b\x1e\xb0\x90\x4d\xd1\xd2\xa2\x9b\x5c\x37\xd3\x9c"
-                         "\x31\xb2\xb8\x5b\x8c\xa2\xde\x11\xf7\x97\x03\xea\x45\x38\xc5\x5c"
-                         "\x22\x8e\x3d\x60\x4a\xc7\x32\xaa\xee\x7a\x67\x9a\xa5\x85\x1f\x64"
-                         "\xb1\x45\xe7\xe1\x69\x68\x5c\x65\x1e\x0a\xf3\xf3\x11\x26\x98\x7b"
-                         "\xf8\x27\x23\xad\xf4\x25\x6f\xab\x83\x48\xc4\x5e\xba\xea\x73\x6a"
-                         "\x2b\x82\x66\x02\xf5\x21\x5a\xbc\xf5\xbf\xf1\xa4\x72\x1c\xd9\x9d"
-                         "\xb6\x46\xe9\xb5\x61\xbe\xe5\x59\x8a\xf9\x8e\xfa\x79\x2e\xa6\x02"
-                         "\xad\x22\xea\x06\x2c\x42\x66\xb9\x0c\x6d\x4b\x2b\x8b\xd9\xa3\x8b"
-                         "\x60\xe2\x63\xe0\x44\x54\x02\x2f\x75\xb7\x41\x81\x9c\xe7\xce\xc4"
-                         "\x3e\x82\x05\x5e\x0e\x4c\x16\x0a\x59\xfa\xb1\x13\x02\x87\xb8\xd8"
-                         "\xa7\xbc\x15\xb2\x5a\xb5\xea\x50\x76\x76\x73\xa1\xf4\xc2\x71\x88"
-                         "\x5d\x0c\x8c\xbe\x32\x3d\x60\x15\xdb\xad\xde\x37\xf8\x8e\xb8\xd2"
-                         "\x24\xc3\x3c\x97\xe7\x9c\xc6\xdc\xcd\xcd\x43\x93\x06\xd8\x64\x9f"
-                         "\xca\x07\x15\x47\xca\x13\x39\x8d\xd6\x75\xe0\x61\x7f\x7f\x15\x28"
-                         "\x8f\xe8\x4d\x19\xb6\x41\x20\x93\x17\x03\xaf\x1b\x16\x13\x07\xc7"
-                         "\x50\xfe\xeb\x97\x7c\xe3\x72\x32\x9b\x87\xab\xab\x2d\x47\xa0\x93"
-                         "\xc3\xc9\x17\x58\xc6\x2c\x8a\xa8\x78\x6e\x6c\x30\x6c\xbf\x3f\x66",
-       .shared = "\xfc\xe8\xe5\xeb\xf2\xb0\x07\xfc\x46\x60\x17\xa8\xed\xf0\xf1\xa6"
-                         "\x9f\x5a\xf2\xea\x49\x2a\x09\xd8\x08\xd2\x84\xc2\x2d\x9b\x3d\x07"
-                         "\x2b\x9f\x89\x1b\x0c\x0f\x09\xe4\x67\xd1\x6e\x33\x8d\x2e\x6d\xd1"
-                         "\xf5\x1b\xdb\xc4\xe8\x64\x61\xf5\x49\x47\xd0\x07\x0f\xbe\xc1\xfc"
-                         "\xe3\xe4\xf3\xd8\xa6\xeb\x73\x8c\xb1\xd5\xcf\xc6\x54\x6d\xe2\x07"
-                         "\xba\x55\x17\xe8\x2b\x39\xc2\xab\x30\x8d\x2d\x48\xe1\xe7\x3f\x7f"
-                         "\x5c\xf8\x4a\xfa\x7b\x71\xb3\xf2\x4c\x52\x45\x5d\xfd\xa0\x94\x98"
-                         "\xe9\xde\x3f\x14\x52\x7f\xa5\xd6\xf7\xa4\x67\x27\x4d\x84\x4e\xaf"
-                         "\x7f\x20\xef\xc6\xaf\x5d\xac\xaf\xd7\xe1\x52\x02\x6f\xd4\x84\x73"
-                         "\x15\x7b\x74\x89\x65\xcd\xa7\xb8\xd5\x8d\x54\x94\x44\x88\xf6\xd2"
-                         "\xa9\x7f\xa9\x12\xd1\x19\xa7\x75\x2f\xcf\x3c\xb9\xc2\xc7\x66\x18"
-                         "\x91\x83\xd9\xa1\x69\xe2\x09\xc0\x38\x7f\x7b\xff\x5e\x44\x9d\x34"
-                         "\x3c\xef\xb3\xbc\x86\x57\xaa\x28\x22\x09\x7a\xa1\x64\xad\xf0\x16"
-                         "\xcb\x15\x8f\xaf\x9e\xb8\x0f\x9f\x53\x1c\x8a\xf9\xf3\x2d\xee\xf7"
-                         "\x31\xa8\xcd\x44\x6a\x5f\xea\x66\x95\x81\x96\x49\x83\xd7\x1d\x54"
-                         "\xaf\x34\x81\x5d\x3c\x4e\x4e\xc5\xe6\x5c\x04\x4d\x7a\x5c\x4b\x7b"
-                         "\x54\x14\xa1\x19\x31\xe3\xda\x28\x4f\x8a\x3a\x99\x12\x3c\x22\xb5"
-                         "\xce\xe7\x8b\x1c\xf0\x3a\xdf\x88\x5b\xe5\xdb\x0a\x88\xcd\x84\x9d"
-                         "\x41\xdd\xf1\x63\x00\xf3\x6c\x23\xa4\x4b\x81\x04\x74\xd1\x35\x8f"
-                         "\xef\x99\x9d\xf9\x46\x7f\x96\x98\x15\xbc\xa6\x25\x39\x6e\x32\xd1"
-                         "\x7f\xa0\xcc\xe9\x60\x41\xc7\xcf\x0d\xd3\x16\x99\xee\xb7\x63\xbb"
-                         "\xb2\x4c\x93\x7f\x50\xd0\xfe\x90\x39\x33\x87\xc6\x17\x97\x44\x83"
-                         "\xad\x3c\x20\x2f\xd5\xc0\x30\xf4\xfa\xde\xdf\x42\x43\x16\x46\x6a"
-                         "\x6b\x36\x59\xcd\xf1\x8c\x39\x82\xba\x54\xf6\x34\x3f\x6b\xf2\xf2"
-                         "\x1f\x58\x58\xea\xdb\x8f\x80\xa2\x4d\x01\xe8\x2d\x70\x0c\x58\xf9"
-                         "\x56\x4f\x6e\xea\xe2\x98\x0c\xc7\x01\x74\x40\x25\x24\xcc\x87\x16"
-                         "\x98\x67\x5a\x7e\x95\x87\xa1\x41\x0e\xa6\x22\x89\x13\x26\x0f\x6f"
-                         "\x81\xdc\xd5\x3d\x75\xe0\xd6\x71\xe7\xde\x0a\x6c\x62\x3b\x64\xab"
-                         "\x2f\x67\xa0\xad\xdc\x32\x70\x1c\xa1\xfa\xe9\x08\xed\x5d\x90\x09"
-                         "\xad\x42\x74\x5d\xcd\x12\x24\xfb\x14\xe8\xb9\x89\xa4\x4f\x0b\x07"
-                         "\xa9\x4a\x7a\x27\xce\x19\x8d\x32\x6f\x74\x9a\xc5\x10\x91\xf1\xfc"
-                         "\x03\xfa\x1c\x87\xe8\x70\x5c\x36\xa8\xef\x2c\xc7\xb6\xe4\x47\xac"
-                         "\xb7\x3d\x0e\x44\x12\xbd\xa2\xf9\xdb\x49\x5f\xc5\xe6\xdf\x7a\x37"
-                         "\x87\x32\x73\xb3\x6d\x08\xac\xef\xb8\xa3\x0a\x14\xb6\xd7\x7f\x76"
-                         "\x0f\x02\x9b\x93\x45\x7b\xee\xd4\x92\x53\x40\x6c\x9e\xe1\x52\xe4"
-                         "\x22\x31\xcf\xcb\xc5\x30\x11\xe0\xb6\xe4\x17\xad\x03\xe9\x8d\xaf"
-                         "\x2e\xc8\x5a\x2c\x89\x49\x9d\xde\x67\xc4\x03\x1d\x91\x8f\x30\x7d"
-                         "\x11\xd1\x93\x8c\x7b\xb9\x17\x71\x7c\x3b\x14\x34\x03\xba\x76\x8a"
-                         "\x4b\xe0\xd0\x93\xc9\x25\x59\xce\x3f\xcc\x5d\x38\xfe\x18\xfa\xbb"
-                         "\x0d\xde\xe0\xd4\x17\x3e\x18\x27\x58\x73\x86\x89\x71\xa0\x7f\xcd"
-                         "\xd4\x8e\x54\xcc\x3f\x63\x1e\x44\x3d\xb9\x39\x77\x4c\xb8\xaa\x57"
-                         "\x5f\x7b\xd2\xa9\x86\x9c\x15\xbe\xa7\xf1\xea\xa9\xdf\x95\x32\x2c"
-                         "\xbf\x93\xb0\x31\xaf\x6e\x74\xe0\x37\x7c\x94\xf0\x4f\x6c\x44\x3c"
-                         "\xd9\x1c\x3b\x48\x24\x8b\x28\x2f\x65\x54\xce\x69\xf4\x5b\xb6\x11"
-                         "\xef\xab\xec\x45\x4d\x10\x58\xa7\xf2\xa7\xc7\x1a\x9f\xfa\xdc\xcd"
-                         "\x54\xfa\x0d\xe8\x96\xbc\x0d\x55\x0a\x49\xf1\x2a\x31\x28\x15\x26"
-                         "\x56\xf2\xa0\x6c\x84\x51\xbd\x6b\xee\x20\xc5\xd6\x4b\x36\x5f\x7b"
-                         "\xb8\xd0\xeb\x41\xb6\x7c\xfb\x9d\x9d\xfd\x62\x0e\xb7\x99\xca\x17",
+       .method = MODP_6144_BIT,
+       .seed = chunk_from_chars(
+               0xab, 0x36, 0xf0, 0x65, 0x7c, 0x4f, 0xba, 0xdc, 0x2a, 0x3b,
+               0x07, 0xed, 0xd1, 0xc8, 0xaf, 0xcb, 0x42, 0xaf, 0xcd, 0x7f,
+               0xf9, 0x1c, 0x57, 0x01, 0x37, 0x25, 0x50, 0x0d, 0x89, 0x42,
+               0x9f, 0x34, 0x79, 0x8f, 0x99, 0xf5, 0xde, 0x53, 0xd1, 0x08,
+               0x8f, 0xd9, 0xf6, 0x60, 0xa1, 0xa5, 0x2b, 0xe4, 0x54, 0xf9,
+               0x63, 0x4d, 0x15, 0xbb, 0x4e, 0x4c, 0xe0, 0x9e, 0x5a, 0x69,
+               0xe0, 0xf9, 0x9d, 0x59, /* - */
+               0x59, 0xa5, 0x52, 0xa4, 0x0d, 0x17, 0x80, 0xaf, 0x64, 0x33,
+               0xbc, 0x9e, 0x8a, 0x9b, 0x6d, 0x48, 0x30, 0xdd, 0xd3, 0x57,
+               0x53, 0x07, 0x40, 0x9a, 0x90, 0xc9, 0x2b, 0xda, 0x40, 0x4b,
+               0xb7, 0x99, 0xf0, 0x09, 0x3e, 0xfe, 0x21, 0xbe, 0xad, 0x85,
+               0xf1, 0x6a, 0x23, 0x7b, 0x05, 0x90, 0xc3, 0x35, 0x6d, 0x96,
+               0x8c, 0xc0, 0x9d, 0xcd, 0x5b, 0x2d, 0x96, 0x86, 0x07, 0xd6,
+               0xd1, 0xbf, 0x70, 0xc2),
+       .pub_i = chunk_from_chars(
+               0x0a, 0x78, 0x01, 0x5c, 0x3e, 0x0d, 0x36, 0x2a, 0xff, 0xe5,
+               0xd9, 0x3a, 0x9c, 0x2d, 0xf2, 0xdf, 0x5b, 0xb9, 0x6b, 0x7f,
+               0xf2, 0xfc, 0xc2, 0xdd, 0x96, 0x6c, 0x53, 0x9d, 0x1d, 0x4c,
+               0xdb, 0xac, 0xec, 0xe2, 0x6d, 0x16, 0xab, 0x6d, 0x3d, 0xe8,
+               0x24, 0xe0, 0x75, 0x87, 0x29, 0x12, 0xeb, 0xa0, 0x44, 0x33,
+               0x66, 0x11, 0x0e, 0x0d, 0x7e, 0x17, 0x27, 0x4b, 0x95, 0x78,
+               0xaf, 0x12, 0x46, 0x63, 0xe6, 0x55, 0x17, 0x0b, 0xf7, 0xb7,
+               0xb2, 0xbd, 0xb4, 0xbf, 0xe4, 0x7a, 0x88, 0x97, 0x68, 0x95,
+               0x6a, 0x98, 0xf1, 0xce, 0x1a, 0xc8, 0xc6, 0xc7, 0xc4, 0x8e,
+               0x13, 0xa3, 0x6c, 0x16, 0x1c, 0x82, 0x00, 0x7c, 0x98, 0x35, /* 100 */
+               0xb2, 0x2e, 0x7b, 0x47, 0x99, 0x38, 0x92, 0xa1, 0x71, 0x2b,
+               0x27, 0x5d, 0xdc, 0x84, 0x54, 0xf4, 0x33, 0x0b, 0xd1, 0xfc,
+               0x08, 0xab, 0xfc, 0x48, 0x8e, 0x71, 0x8b, 0x43, 0xa6, 0x21,
+               0x3a, 0x09, 0xc5, 0x68, 0x74, 0xce, 0xef, 0xb3, 0xa9, 0xfa,
+               0xe7, 0xe1, 0x11, 0xc0, 0x0a, 0x10, 0x43, 0x3f, 0x4b, 0x23,
+               0x75, 0xef, 0xab, 0x04, 0x2b, 0xd5, 0xc1, 0xc2, 0x9a, 0xaf,
+               0x97, 0x0c, 0xeb, 0xae, 0xb5, 0x7f, 0x10, 0xf0, 0x10, 0x6e,
+               0xa6, 0x3d, 0x25, 0x72, 0x59, 0x93, 0x0a, 0xf5, 0xb3, 0x3b,
+               0xc2, 0x64, 0x27, 0xe6, 0xef, 0x47, 0x32, 0xde, 0x43, 0xdc,
+               0xea, 0x0a, 0x88, 0x72, 0x9b, 0x93, 0x7e, 0x6a, 0x9a, 0xfc, /* 200 */
+               0xf2, 0x92, 0xa2, 0x9f, 0x8b, 0xe9, 0x9b, 0x71, 0x88, 0xd8,
+               0x2d, 0xfc, 0x13, 0x7e, 0x69, 0x19, 0x9a, 0x53, 0x5d, 0x92,
+               0xdc, 0x61, 0x37, 0x60, 0x03, 0x38, 0x67, 0x1e, 0x6d, 0x46,
+               0x76, 0x31, 0xff, 0xc2, 0xbd, 0x69, 0x59, 0x42, 0xcd, 0x7e,
+               0xbb, 0x40, 0x2c, 0x54, 0xea, 0x39, 0x1b, 0x9a, 0x02, 0xde,
+               0x1f, 0x28, 0x99, 0xfe, 0xd5, 0xbd, 0xb7, 0x1f, 0x27, 0xab,
+               0x71, 0x0b, 0xba, 0xaa, 0x32, 0xb2, 0xc2, 0xe0, 0xec, 0x8d,
+               0x4b, 0xd4, 0xca, 0x6c, 0xc5, 0x07, 0xd9, 0x72, 0x0b, 0x20,
+               0xaf, 0x9c, 0xce, 0xcd, 0x7f, 0x4e, 0x88, 0xed, 0x55, 0x0a,
+               0xea, 0xbc, 0x43, 0xdd, 0x0b, 0x3d, 0xc0, 0x20, 0xdb, 0x3e, /* 300 */
+               0x14, 0x89, 0x76, 0xc7, 0x61, 0xf5, 0x44, 0x21, 0x8a, 0x79,
+               0xb7, 0x3b, 0x37, 0x77, 0x24, 0x99, 0xf3, 0x61, 0xba, 0x0b,
+               0x1d, 0x3c, 0xf2, 0x10, 0x23, 0x75, 0x36, 0xfb, 0x89, 0xd8,
+               0x57, 0x86, 0x51, 0xed, 0x67, 0x51, 0xd1, 0xe8, 0x10, 0x95,
+               0x61, 0x2b, 0x0f, 0xcf, 0x65, 0x36, 0xbc, 0xb0, 0xff, 0x17,
+               0x2c, 0x3d, 0x54, 0xdc, 0x07, 0x13, 0x19, 0x99, 0xd4, 0x11,
+               0x98, 0xf9, 0x7e, 0xa8, 0x32, 0x9a, 0xbb, 0x04, 0xc3, 0x75,
+               0x3f, 0x83, 0xe1, 0xfd, 0x3b, 0x92, 0x78, 0x72, 0x3c, 0x98,
+               0x67, 0xf4, 0xc1, 0xff, 0x19, 0xe1, 0xd2, 0xad, 0x7d, 0x34,
+               0x65, 0xf0, 0xb8, 0xc2, 0xdd, 0x9d, 0x4c, 0xcd, 0x36, 0x1a, /* 400 */
+               0xbd, 0xf8, 0x56, 0x66, 0xd6, 0xfe, 0x04, 0x2c, 0x98, 0x04,
+               0x2b, 0xec, 0xa9, 0x4b, 0x66, 0x4b, 0x71, 0xcf, 0x78, 0x07,
+               0x56, 0xe5, 0xba, 0x9c, 0x8a, 0x72, 0xb8, 0xc9, 0xe4, 0x82,
+               0xd6, 0x59, 0x22, 0x59, 0x39, 0x75, 0xd6, 0xdd, 0x00, 0xf3,
+               0x16, 0xc7, 0xb2, 0x0c, 0x81, 0xeb, 0x67, 0x4f, 0x0b, 0xbe,
+               0xa8, 0x1e, 0xed, 0xe6, 0x7b, 0xbf, 0xf1, 0x17, 0x38, 0x3f,
+               0xf4, 0x86, 0x0b, 0x97, 0x75, 0xa7, 0x81, 0x86, 0x14, 0xb8,
+               0x6d, 0x48, 0x5e, 0x88, 0x98, 0xa9, 0x2f, 0x54, 0xfd, 0x7f,
+               0x05, 0x45, 0xb4, 0x32, 0xcd, 0x5f, 0xab, 0xec, 0x2e, 0xa8,
+               0x42, 0xd8, 0x3b, 0x51, 0xc2, 0x18, 0x91, 0x7a, 0xb6, 0x10, /* 500 */
+               0x5e, 0x26, 0x8b, 0xc8, 0x50, 0x08, 0x2c, 0x79, 0xa1, 0xd0,
+               0x74, 0x12, 0xce, 0xc4, 0xd2, 0x3c, 0xb0, 0x04, 0x54, 0xa8,
+               0x87, 0x2b, 0x9f, 0xb3, 0x05, 0x4a, 0x89, 0x64, 0xb5, 0xaf,
+               0x7f, 0x64, 0x4b, 0x45, 0xcd, 0xd7, 0xf2, 0xb8, 0xa8, 0x8c,
+               0xd8, 0x7c, 0x6e, 0xe6, 0x19, 0xd9, 0xaf, 0x59, 0xb5, 0x2b,
+               0x07, 0x37, 0x1b, 0x8f, 0xb0, 0x57, 0xe7, 0x05, 0x9f, 0x21,
+               0x52, 0x6d, 0xc4, 0x89, 0x4a, 0xff, 0xce, 0xda, 0xc8, 0x5b,
+               0x73, 0xf3, 0xd4, 0x07, 0xc7, 0x29, 0x02, 0x7e, 0xa6, 0x79,
+               0x82, 0xd3, 0x01, 0xba, 0x93, 0x0e, 0x37, 0x17, 0x3d, 0xfc,
+               0x38, 0xd3, 0x25, 0x7e, 0x52, 0xd2, 0x53, 0xba, 0x20, 0xe8, /* 600 */
+               0xe9, 0xef, 0xa2, 0x96, 0x38, 0x49, 0x14, 0xd2, 0x83, 0x8b,
+               0x2c, 0x62, 0xb0, 0x27, 0xc6, 0x5d, 0x36, 0x34, 0xd4, 0x58,
+               0x14, 0x25, 0x6e, 0xc1, 0xcf, 0xd0, 0x2d, 0x21, 0xa3, 0xc0,
+               0x9c, 0x9b, 0x14, 0x20, 0x83, 0xec, 0x1a, 0xeb, 0x14, 0x2a,
+               0xd3, 0x97, 0x40, 0xad, 0xd0, 0xeb, 0x51, 0x8f, 0xa2, 0x10,
+               0x62, 0xb4, 0x50, 0x94, 0xff, 0x35, 0x43, 0xc2, 0x29, 0x88,
+               0x0e, 0xf6, 0xb9, 0x4c, 0x85, 0x80, 0x13, 0xed, 0x2f, 0x56,
+               0x15, 0xdc, 0x0f, 0x09, 0xd2, 0xe5, 0x40, 0x11, 0x70, 0x34,
+               0x76, 0x2c, 0xed, 0xb1, 0xac, 0xe5, 0x82, 0x77, 0x45, 0x42,
+               0x3e, 0x8e, 0x8d, 0x08, 0x6e, 0x5b, 0xbe, 0x34, 0xf9, 0x93, /* 700 */
+               0x0f, 0x8a, 0x43, 0xec, 0xa6, 0x9f, 0x7c, 0x56, 0xe6, 0x95,
+               0x31, 0x85, 0x9d, 0xb1, 0x97, 0xaf, 0x2d, 0xac, 0x76, 0x81,
+               0x1f, 0xfb, 0x4d, 0x53, 0xfe, 0x04, 0xe2, 0x48, 0xbe, 0xac,
+               0x50, 0xe2, 0xb3, 0x74, 0x77, 0x5f, 0x48, 0xec, 0x26, 0xd0,
+               0x9b, 0xb9, 0xa3, 0x28, 0x23, 0xa9, 0x2c, 0xc2, 0x0a, 0xb7,
+               0xd3, 0x80, 0x87, 0x03, 0xa2, 0x3b, 0x74, 0x07, 0xaf, 0xa5,
+               0x5f, 0x2b, 0x9b, 0x90, 0xa2, 0xf8, 0x89, 0x3c),
+       .pub_r = chunk_from_chars(
+               0x75, 0x3a, 0x06, 0x23, 0x48, 0x41, 0x6e, 0x90, 0x3b, 0x5b,
+               0x3b, 0x25, 0x89, 0x38, 0xf1, 0xa4, 0x3f, 0xe0, 0x96, 0x2a,
+               0xcb, 0x3c, 0xd2, 0x7a, 0x71, 0xb3, 0xed, 0x8a, 0xd4, 0xa5,
+               0x62, 0x77, 0x4b, 0x6f, 0xf4, 0xf2, 0x29, 0x31, 0x2a, 0xfc,
+               0xb4, 0x7b, 0x34, 0xfe, 0x9c, 0xb0, 0x83, 0x62, 0xe7, 0x45,
+               0xc9, 0x93, 0x19, 0x89, 0xdb, 0x90, 0x99, 0xc5, 0x77, 0x85,
+               0x06, 0x97, 0xa6, 0x2f, 0xde, 0x6d, 0x98, 0x01, 0xbc, 0x4f,
+               0x51, 0x92, 0x94, 0x6f, 0x10, 0x3a, 0x7a, 0x56, 0x14, 0x48,
+               0xad, 0x7d, 0x1d, 0x15, 0x0c, 0x8c, 0xda, 0xc9, 0x01, 0xf1,
+               0x3b, 0xfd, 0x27, 0x09, 0x2e, 0xf7, 0xec, 0x0f, 0x82, 0x1e, /* 100 */
+               0x0e, 0xa6, 0xb9, 0x1b, 0x63, 0x90, 0xc3, 0x3e, 0x7e, 0xf1,
+               0xad, 0x5c, 0xaf, 0x6f, 0x6d, 0x9d, 0x3f, 0x25, 0x4f, 0xe9,
+               0x53, 0xaf, 0x03, 0x6e, 0xdc, 0x24, 0xf3, 0x2c, 0x65, 0x67,
+               0xc7, 0x08, 0x61, 0x80, 0x18, 0x7c, 0x19, 0x97, 0x44, 0x56,
+               0x5e, 0xf0, 0xa2, 0x94, 0x7c, 0x59, 0x01, 0x94, 0x5b, 0x46,
+               0xa8, 0x0b, 0x28, 0x6c, 0xa0, 0xfc, 0xa0, 0xad, 0xe4, 0x4a,
+               0x2c, 0x87, 0x77, 0x7b, 0x44, 0x28, 0x25, 0xd4, 0xa2, 0x24,
+               0x70, 0x69, 0x9a, 0x83, 0xf7, 0x65, 0xde, 0xe3, 0xeb, 0x03,
+               0x14, 0x00, 0x4c, 0xba, 0x87, 0x87, 0xf2, 0x47, 0x4c, 0x3e,
+               0x44, 0x67, 0x66, 0x85, 0x48, 0xb4, 0x12, 0xa6, 0x15, 0x22, /* 200 */
+               0x0d, 0x39, 0x02, 0x07, 0x66, 0x59, 0x07, 0x3a, 0x64, 0x9e,
+               0xba, 0x6e, 0xc4, 0xdc, 0x29, 0x07, 0x5b, 0x67, 0xff, 0x42,
+               0xca, 0xe0, 0x1d, 0xcd, 0x39, 0x08, 0xff, 0x63, 0x03, 0xb1,
+               0x76, 0xc4, 0xa3, 0xdc, 0x81, 0x33, 0xfb, 0x4c, 0x28, 0xa1,
+               0xe4, 0x7e, 0xbe, 0x5f, 0x73, 0x24, 0x92, 0x7a, 0x40, 0x8d,
+               0x75, 0xc5, 0x94, 0x13, 0x26, 0x91, 0xef, 0x9a, 0xee, 0x45,
+               0xaa, 0xff, 0xfc, 0xae, 0x61, 0x34, 0xdb, 0x20, 0x96, 0x99,
+               0xe9, 0x18, 0x30, 0x95, 0x37, 0x23, 0xaf, 0x3d, 0x2f, 0x3b,
+               0x03, 0x69, 0x4b, 0xfa, 0x92, 0x92, 0x57, 0x8e, 0x66, 0xe2,
+               0x89, 0xf0, 0x62, 0xe5, 0x2b, 0x2c, 0x23, 0xca, 0xcd, 0x8d, /* 300 */
+               0xdd, 0x88, 0x92, 0xb4, 0xc9, 0x8e, 0x9d, 0x57, 0x62, 0x69,
+               0x3e, 0xd1, 0xd7, 0xc8, 0x7e, 0x99, 0xac, 0x4e, 0x7c, 0x65,
+               0xaf, 0xea, 0x99, 0xfa, 0x69, 0xd8, 0x46, 0xb2, 0xc7, 0x1f,
+               0x76, 0xf1, 0x3e, 0x99, 0xb7, 0x23, 0x2c, 0x7c, 0x80, 0x8b,
+               0x3a, 0x5e, 0x86, 0x2c, 0x50, 0x5a, 0x36, 0x48, 0x0a, 0x23,
+               0x23, 0xdf, 0x69, 0x95, 0xa0, 0x1b, 0xfd, 0x1f, 0x4e, 0x06,
+               0xc5, 0x0b, 0x17, 0x3c, 0x62, 0xce, 0x5a, 0x63, 0x82, 0xcd,
+               0x14, 0x64, 0xb8, 0x60, 0x36, 0xb9, 0x74, 0x9c, 0xa4, 0xe1,
+               0xa5, 0x0c, 0xc0, 0x77, 0x05, 0x41, 0x46, 0xac, 0x16, 0xdb,
+               0xb5, 0x16, 0x71, 0x71, 0x6e, 0x62, 0x93, 0x17, 0xd6, 0xdc, /* 400 */
+               0xbb, 0xbd, 0xb3, 0x01, 0x5f, 0x08, 0xa9, 0x71, 0x91, 0x97,
+               0x92, 0xb1, 0x1d, 0xa8, 0x0a, 0xf9, 0xc3, 0xaa, 0x4c, 0xc2,
+               0x63, 0x48, 0xd1, 0xae, 0x21, 0xbb, 0xf3, 0xb7, 0xda, 0x04,
+               0x5e, 0x6e, 0x82, 0x89, 0x5d, 0xdc, 0xfb, 0xae, 0x76, 0xaf,
+               0x50, 0x42, 0x71, 0x06, 0x8b, 0x0c, 0xfd, 0xb9, 0x0f, 0x00,
+               0x24, 0x97, 0xe0, 0x0c, 0x9f, 0xf2, 0x95, 0x11, 0x63, 0x6f,
+               0xcf, 0x59, 0xfb, 0xd2, 0xcc, 0x10, 0xec, 0xaa, 0xef, 0x89,
+               0xff, 0x1b, 0x48, 0xc9, 0xce, 0x78, 0x22, 0x50, 0xf6, 0x31,
+               0x47, 0x78, 0x38, 0x3b, 0xae, 0x32, 0xed, 0xf6, 0xaa, 0xa9,
+               0x7a, 0x53, 0x71, 0xc6, 0xbd, 0x10, 0xcf, 0x17, 0xf4, 0x1b, /* 500 */
+               0x1e, 0xb0, 0x90, 0x4d, 0xd1, 0xd2, 0xa2, 0x9b, 0x5c, 0x37,
+               0xd3, 0x9c, 0x31, 0xb2, 0xb8, 0x5b, 0x8c, 0xa2, 0xde, 0x11,
+               0xf7, 0x97, 0x03, 0xea, 0x45, 0x38, 0xc5, 0x5c, 0x22, 0x8e,
+               0x3d, 0x60, 0x4a, 0xc7, 0x32, 0xaa, 0xee, 0x7a, 0x67, 0x9a,
+               0xa5, 0x85, 0x1f, 0x64, 0xb1, 0x45, 0xe7, 0xe1, 0x69, 0x68,
+               0x5c, 0x65, 0x1e, 0x0a, 0xf3, 0xf3, 0x11, 0x26, 0x98, 0x7b,
+               0xf8, 0x27, 0x23, 0xad, 0xf4, 0x25, 0x6f, 0xab, 0x83, 0x48,
+               0xc4, 0x5e, 0xba, 0xea, 0x73, 0x6a, 0x2b, 0x82, 0x66, 0x02,
+               0xf5, 0x21, 0x5a, 0xbc, 0xf5, 0xbf, 0xf1, 0xa4, 0x72, 0x1c,
+               0xd9, 0x9d, 0xb6, 0x46, 0xe9, 0xb5, 0x61, 0xbe, 0xe5, 0x59, /* 600 */
+               0x8a, 0xf9, 0x8e, 0xfa, 0x79, 0x2e, 0xa6, 0x02, 0xad, 0x22,
+               0xea, 0x06, 0x2c, 0x42, 0x66, 0xb9, 0x0c, 0x6d, 0x4b, 0x2b,
+               0x8b, 0xd9, 0xa3, 0x8b, 0x60, 0xe2, 0x63, 0xe0, 0x44, 0x54,
+               0x02, 0x2f, 0x75, 0xb7, 0x41, 0x81, 0x9c, 0xe7, 0xce, 0xc4,
+               0x3e, 0x82, 0x05, 0x5e, 0x0e, 0x4c, 0x16, 0x0a, 0x59, 0xfa,
+               0xb1, 0x13, 0x02, 0x87, 0xb8, 0xd8, 0xa7, 0xbc, 0x15, 0xb2,
+               0x5a, 0xb5, 0xea, 0x50, 0x76, 0x76, 0x73, 0xa1, 0xf4, 0xc2,
+               0x71, 0x88, 0x5d, 0x0c, 0x8c, 0xbe, 0x32, 0x3d, 0x60, 0x15,
+               0xdb, 0xad, 0xde, 0x37, 0xf8, 0x8e, 0xb8, 0xd2, 0x24, 0xc3,
+               0x3c, 0x97, 0xe7, 0x9c, 0xc6, 0xdc, 0xcd, 0xcd, 0x43, 0x93, /* 700 */
+               0x06, 0xd8, 0x64, 0x9f, 0xca, 0x07, 0x15, 0x47, 0xca, 0x13,
+               0x39, 0x8d, 0xd6, 0x75, 0xe0, 0x61, 0x7f, 0x7f, 0x15, 0x28,
+               0x8f, 0xe8, 0x4d, 0x19, 0xb6, 0x41, 0x20, 0x93, 0x17, 0x03,
+               0xaf, 0x1b, 0x16, 0x13, 0x07, 0xc7, 0x50, 0xfe, 0xeb, 0x97,
+               0x7c, 0xe3, 0x72, 0x32, 0x9b, 0x87, 0xab, 0xab, 0x2d, 0x47,
+               0xa0, 0x93, 0xc3, 0xc9, 0x17, 0x58, 0xc6, 0x2c, 0x8a, 0xa8,
+               0x78, 0x6e, 0x6c, 0x30, 0x6c, 0xbf, 0x3f, 0x66),
+       .shared = chunk_from_chars(
+               0xfc, 0xe8, 0xe5, 0xeb, 0xf2, 0xb0, 0x07, 0xfc, 0x46, 0x60,
+               0x17, 0xa8, 0xed, 0xf0, 0xf1, 0xa6, 0x9f, 0x5a, 0xf2, 0xea,
+               0x49, 0x2a, 0x09, 0xd8, 0x08, 0xd2, 0x84, 0xc2, 0x2d, 0x9b,
+               0x3d, 0x07, 0x2b, 0x9f, 0x89, 0x1b, 0x0c, 0x0f, 0x09, 0xe4,
+               0x67, 0xd1, 0x6e, 0x33, 0x8d, 0x2e, 0x6d, 0xd1, 0xf5, 0x1b,
+               0xdb, 0xc4, 0xe8, 0x64, 0x61, 0xf5, 0x49, 0x47, 0xd0, 0x07,
+               0x0f, 0xbe, 0xc1, 0xfc, 0xe3, 0xe4, 0xf3, 0xd8, 0xa6, 0xeb,
+               0x73, 0x8c, 0xb1, 0xd5, 0xcf, 0xc6, 0x54, 0x6d, 0xe2, 0x07,
+               0xba, 0x55, 0x17, 0xe8, 0x2b, 0x39, 0xc2, 0xab, 0x30, 0x8d,
+               0x2d, 0x48, 0xe1, 0xe7, 0x3f, 0x7f, 0x5c, 0xf8, 0x4a, 0xfa, /* 100 */
+               0x7b, 0x71, 0xb3, 0xf2, 0x4c, 0x52, 0x45, 0x5d, 0xfd, 0xa0,
+               0x94, 0x98, 0xe9, 0xde, 0x3f, 0x14, 0x52, 0x7f, 0xa5, 0xd6,
+               0xf7, 0xa4, 0x67, 0x27, 0x4d, 0x84, 0x4e, 0xaf, 0x7f, 0x20,
+               0xef, 0xc6, 0xaf, 0x5d, 0xac, 0xaf, 0xd7, 0xe1, 0x52, 0x02,
+               0x6f, 0xd4, 0x84, 0x73, 0x15, 0x7b, 0x74, 0x89, 0x65, 0xcd,
+               0xa7, 0xb8, 0xd5, 0x8d, 0x54, 0x94, 0x44, 0x88, 0xf6, 0xd2,
+               0xa9, 0x7f, 0xa9, 0x12, 0xd1, 0x19, 0xa7, 0x75, 0x2f, 0xcf,
+               0x3c, 0xb9, 0xc2, 0xc7, 0x66, 0x18, 0x91, 0x83, 0xd9, 0xa1,
+               0x69, 0xe2, 0x09, 0xc0, 0x38, 0x7f, 0x7b, 0xff, 0x5e, 0x44,
+               0x9d, 0x34, 0x3c, 0xef, 0xb3, 0xbc, 0x86, 0x57, 0xaa, 0x28, /* 200 */
+               0x22, 0x09, 0x7a, 0xa1, 0x64, 0xad, 0xf0, 0x16, 0xcb, 0x15,
+               0x8f, 0xaf, 0x9e, 0xb8, 0x0f, 0x9f, 0x53, 0x1c, 0x8a, 0xf9,
+               0xf3, 0x2d, 0xee, 0xf7, 0x31, 0xa8, 0xcd, 0x44, 0x6a, 0x5f,
+               0xea, 0x66, 0x95, 0x81, 0x96, 0x49, 0x83, 0xd7, 0x1d, 0x54,
+               0xaf, 0x34, 0x81, 0x5d, 0x3c, 0x4e, 0x4e, 0xc5, 0xe6, 0x5c,
+               0x04, 0x4d, 0x7a, 0x5c, 0x4b, 0x7b, 0x54, 0x14, 0xa1, 0x19,
+               0x31, 0xe3, 0xda, 0x28, 0x4f, 0x8a, 0x3a, 0x99, 0x12, 0x3c,
+               0x22, 0xb5, 0xce, 0xe7, 0x8b, 0x1c, 0xf0, 0x3a, 0xdf, 0x88,
+               0x5b, 0xe5, 0xdb, 0x0a, 0x88, 0xcd, 0x84, 0x9d, 0x41, 0xdd,
+               0xf1, 0x63, 0x00, 0xf3, 0x6c, 0x23, 0xa4, 0x4b, 0x81, 0x04, /* 300 */
+               0x74, 0xd1, 0x35, 0x8f, 0xef, 0x99, 0x9d, 0xf9, 0x46, 0x7f,
+               0x96, 0x98, 0x15, 0xbc, 0xa6, 0x25, 0x39, 0x6e, 0x32, 0xd1,
+               0x7f, 0xa0, 0xcc, 0xe9, 0x60, 0x41, 0xc7, 0xcf, 0x0d, 0xd3,
+               0x16, 0x99, 0xee, 0xb7, 0x63, 0xbb, 0xb2, 0x4c, 0x93, 0x7f,
+               0x50, 0xd0, 0xfe, 0x90, 0x39, 0x33, 0x87, 0xc6, 0x17, 0x97,
+               0x44, 0x83, 0xad, 0x3c, 0x20, 0x2f, 0xd5, 0xc0, 0x30, 0xf4,
+               0xfa, 0xde, 0xdf, 0x42, 0x43, 0x16, 0x46, 0x6a, 0x6b, 0x36,
+               0x59, 0xcd, 0xf1, 0x8c, 0x39, 0x82, 0xba, 0x54, 0xf6, 0x34,
+               0x3f, 0x6b, 0xf2, 0xf2, 0x1f, 0x58, 0x58, 0xea, 0xdb, 0x8f,
+               0x80, 0xa2, 0x4d, 0x01, 0xe8, 0x2d, 0x70, 0x0c, 0x58, 0xf9, /* 400 */
+               0x56, 0x4f, 0x6e, 0xea, 0xe2, 0x98, 0x0c, 0xc7, 0x01, 0x74,
+               0x40, 0x25, 0x24, 0xcc, 0x87, 0x16, 0x98, 0x67, 0x5a, 0x7e,
+               0x95, 0x87, 0xa1, 0x41, 0x0e, 0xa6, 0x22, 0x89, 0x13, 0x26,
+               0x0f, 0x6f, 0x81, 0xdc, 0xd5, 0x3d, 0x75, 0xe0, 0xd6, 0x71,
+               0xe7, 0xde, 0x0a, 0x6c, 0x62, 0x3b, 0x64, 0xab, 0x2f, 0x67,
+               0xa0, 0xad, 0xdc, 0x32, 0x70, 0x1c, 0xa1, 0xfa, 0xe9, 0x08,
+               0xed, 0x5d, 0x90, 0x09, 0xad, 0x42, 0x74, 0x5d, 0xcd, 0x12,
+               0x24, 0xfb, 0x14, 0xe8, 0xb9, 0x89, 0xa4, 0x4f, 0x0b, 0x07,
+               0xa9, 0x4a, 0x7a, 0x27, 0xce, 0x19, 0x8d, 0x32, 0x6f, 0x74,
+               0x9a, 0xc5, 0x10, 0x91, 0xf1, 0xfc, 0x03, 0xfa, 0x1c, 0x87, /* 500 */
+               0xe8, 0x70, 0x5c, 0x36, 0xa8, 0xef, 0x2c, 0xc7, 0xb6, 0xe4,
+               0x47, 0xac, 0xb7, 0x3d, 0x0e, 0x44, 0x12, 0xbd, 0xa2, 0xf9,
+               0xdb, 0x49, 0x5f, 0xc5, 0xe6, 0xdf, 0x7a, 0x37, 0x87, 0x32,
+               0x73, 0xb3, 0x6d, 0x08, 0xac, 0xef, 0xb8, 0xa3, 0x0a, 0x14,
+               0xb6, 0xd7, 0x7f, 0x76, 0x0f, 0x02, 0x9b, 0x93, 0x45, 0x7b,
+               0xee, 0xd4, 0x92, 0x53, 0x40, 0x6c, 0x9e, 0xe1, 0x52, 0xe4,
+               0x22, 0x31, 0xcf, 0xcb, 0xc5, 0x30, 0x11, 0xe0, 0xb6, 0xe4,
+               0x17, 0xad, 0x03, 0xe9, 0x8d, 0xaf, 0x2e, 0xc8, 0x5a, 0x2c,
+               0x89, 0x49, 0x9d, 0xde, 0x67, 0xc4, 0x03, 0x1d, 0x91, 0x8f,
+               0x30, 0x7d, 0x11, 0xd1, 0x93, 0x8c, 0x7b, 0xb9, 0x17, 0x71, /* 600 */
+               0x7c, 0x3b, 0x14, 0x34, 0x03, 0xba, 0x76, 0x8a, 0x4b, 0xe0,
+               0xd0, 0x93, 0xc9, 0x25, 0x59, 0xce, 0x3f, 0xcc, 0x5d, 0x38,
+               0xfe, 0x18, 0xfa, 0xbb, 0x0d, 0xde, 0xe0, 0xd4, 0x17, 0x3e,
+               0x18, 0x27, 0x58, 0x73, 0x86, 0x89, 0x71, 0xa0, 0x7f, 0xcd,
+               0xd4, 0x8e, 0x54, 0xcc, 0x3f, 0x63, 0x1e, 0x44, 0x3d, 0xb9,
+               0x39, 0x77, 0x4c, 0xb8, 0xaa, 0x57, 0x5f, 0x7b, 0xd2, 0xa9,
+               0x86, 0x9c, 0x15, 0xbe, 0xa7, 0xf1, 0xea, 0xa9, 0xdf, 0x95,
+               0x32, 0x2c, 0xbf, 0x93, 0xb0, 0x31, 0xaf, 0x6e, 0x74, 0xe0,
+               0x37, 0x7c, 0x94, 0xf0, 0x4f, 0x6c, 0x44, 0x3c, 0xd9, 0x1c,
+               0x3b, 0x48, 0x24, 0x8b, 0x28, 0x2f, 0x65, 0x54, 0xce, 0x69, /* 700 */
+               0xf4, 0x5b, 0xb6, 0x11, 0xef, 0xab, 0xec, 0x45, 0x4d, 0x10,
+               0x58, 0xa7, 0xf2, 0xa7, 0xc7, 0x1a, 0x9f, 0xfa, 0xdc, 0xcd,
+               0x54, 0xfa, 0x0d, 0xe8, 0x96, 0xbc, 0x0d, 0x55, 0x0a, 0x49,
+               0xf1, 0x2a, 0x31, 0x28, 0x15, 0x26, 0x56, 0xf2, 0xa0, 0x6c,
+               0x84, 0x51, 0xbd, 0x6b, 0xee, 0x20, 0xc5, 0xd6, 0x4b, 0x36,
+               0x5f, 0x7b, 0xb8, 0xd0, 0xeb, 0x41, 0xb6, 0x7c, 0xfb, 0x9d,
+               0x9d, 0xfd, 0x62, 0x0e, 0xb7, 0x99, 0xca, 0x17)
 };
 
 ke_test_vector_t modp8192 = {
-       .method = MODP_8192_BIT, .priv_len = 64, .pub_len = 1024, .shared_len = 1024,
-       .priv_a = "\xa6\x48\x81\x47\x45\xfe\x1e\xd1\x98\x9b\x75\xba\x6d\xd5\x01\xe4"
-                         "\x4e\x77\x6d\xc9\x97\xa0\xae\x27\x37\x64\x61\xb0\xee\x79\x65\x94"
-                         "\xc2\xe6\xdb\x07\xe5\xf9\xd8\x7d\x94\x4d\x37\x01\x22\x38\xe5\x70"
-                         "\xaf\x52\x3a\x47\xf3\xe8\x6e\x2a\x4c\xd0\xdb\x3a\x49\x40\xcf\x0b",
-       .priv_b = "\xd8\xf2\xb0\x9f\x17\xbe\x6f\x13\x64\x5c\xb4\x57\xbe\x0a\xa8\x02"
-                         "\x02\xe8\x43\xf5\x10\xd2\x93\xf9\x32\x55\x98\x2f\x89\x87\x26\x61"
-                         "\x79\xd6\x01\x90\x95\x70\xa3\xf9\xcc\x58\x50\x8b\x62\xf8\x8d\x64"
-                         "\xe0\xd0\x59\xf1\xa2\xed\xea\xd4\x42\x82\x04\xcc\x09\x2a\x2d\x82",
-       .pub_a  = "\x1f\x6d\x66\x0a\xfb\x04\x87\x42\x55\xe6\x83\xee\x89\x9a\xd2\xfd"
-                         "\xbc\xf7\x35\x7f\xdf\xe2\x47\xef\x3b\x2f\xf9\x41\x19\x48\x45\x26"
-                         "\x44\x53\x41\xc5\xdf\xea\x28\xa7\x45\xa0\xff\x56\x95\x13\x24\x72"
-                         "\x34\x1b\x11\xb2\xe6\x9b\xd8\xe9\x98\x18\xf0\x5c\x22\x74\x26\x65"
-                         "\x9c\xf0\x34\x81\x55\x50\x1d\xce\x5a\x7b\x5d\x11\xae\xaf\xfb\xd0"
-                         "\x52\xb5\xff\x8a\xc8\xe3\x5e\x78\x50\x29\x79\x53\x9e\xf4\xe4\xa7"
-                         "\xa9\x51\x55\x1a\xcc\x10\x02\x72\x6b\xa8\xee\x95\x95\x70\x19\x92"
-                         "\x34\x15\xd8\xec\x61\x27\xbe\x25\x2c\x44\x65\xb0\xef\xae\x8a\xee"
-                         "\xcd\x39\x0f\x33\x55\xcf\x94\x52\x5e\xef\x38\xdb\x92\x62\x79\xb8"
-                         "\xfd\xce\xe1\x3c\x43\x8e\xdd\xb2\xa5\x22\x44\xa7\x1b\xda\x1e\x85"
-                         "\x30\x91\x82\xfa\x8c\x57\xff\x0c\xd4\x06\x9d\x4f\xfb\xcc\x42\xe5"
-                         "\xe6\x60\xc1\xf0\x07\x3c\x85\x6a\xc6\x11\xcb\xf7\xf9\xf3\x2c\x95"
-                         "\x67\xa1\x8e\x44\x94\xed\xe7\x42\x7b\x1a\x18\x16\x55\xdb\xc7\x91"
-                         "\xc7\x9d\x54\x7d\x88\xfd\x49\x45\x9b\xd3\x56\xee\x47\x26\xa9\x5c"
-                         "\xd3\x7b\xf2\x42\xe4\x8a\x94\xd9\x22\xcc\x06\x66\xce\x4f\x29\x91"
-                         "\x2a\x1e\x4e\xc8\x8e\x3e\x40\xde\xdc\x95\xe1\x2c\xe2\x50\x47\x2e"
-                         "\x58\x37\x49\x32\xe4\x64\x81\xe7\x03\x11\x81\x13\xb7\xdd\x6f\xef"
-                         "\xae\xf5\xc5\xe6\x1c\x13\x6b\x76\xa1\xb0\xbf\x4d\xf0\x01\xc3\x09"
-                         "\xd8\x59\xff\x13\x34\x6d\x52\x11\x9b\xa6\xc9\xca\x38\xe6\x71\x80"
-                         "\x39\xae\x37\x4b\x1c\xe1\x13\xfb\xc6\x91\x8f\x32\xc3\x6a\x04\xd8"
-                         "\xc6\x80\x08\x4e\xef\xf6\x80\xf9\x8f\xda\xaf\x27\x79\x9b\x21\x2d"
-                         "\x2d\xea\x87\x4b\x4d\xeb\x5a\x87\xfb\x72\x36\xe2\x3e\x9b\x42\xcf"
-                         "\xa9\xeb\x49\x41\xe6\xc2\xb8\xc0\xad\xbd\xb3\x61\xc1\x61\x5f\x9c"
-                         "\xb6\xbd\x8f\x99\x3a\xe8\xca\x86\xb8\xd8\x7f\x2f\xb2\x33\xc0\x9f"
-                         "\xd3\x8e\x44\xdc\x6d\x0c\x19\x89\xb9\x05\xc6\x36\xf4\x7a\xc3\x06"
-                         "\x46\xa4\x22\x6e\xef\x76\xba\x92\xfd\xaf\xce\x71\xbc\x0c\x05\xfe"
-                         "\xec\x8f\x8d\xfb\x59\x46\xf9\x7c\xc1\x1f\x1c\x52\x62\x4d\x01\x57"
-                         "\x4e\x86\x03\x94\x8b\xba\xf7\xbd\xca\xbb\x15\xaa\x61\xdd\xbc\x32"
-                         "\xdf\x9e\x5f\xad\x3b\xf8\xf6\xfb\x4d\x1e\x9c\x86\x9e\x7e\x0f\xaf"
-                         "\xf6\x91\x7e\x08\xf4\xfb\x55\xd8\xe0\x4b\xd9\xcd\x23\x57\x83\x58"
-                         "\x59\xd7\x56\x93\xee\x14\x2f\x2b\xd2\x83\xa4\xce\x45\xa2\x90\xba"
-                         "\x15\x4d\xca\x0c\x8b\x29\x7a\xe5\xbc\xba\xa0\x45\xd0\x08\x27\x75"
-                         "\x61\x3a\x83\x99\x2f\x39\xc6\x41\x03\xc0\xb7\xd6\xfb\x5b\x94\x64"
-                         "\xc3\xfe\xca\x32\x1c\xe3\x66\xc8\xb4\x49\x44\x1c\x63\xb0\xaa\x18"
-                         "\x31\x4b\x15\x8a\xda\x77\xc5\xfd\xea\x33\x6c\x9a\x45\x4c\x24\xb5"
-                         "\x1c\xd2\x5d\x56\x98\x3c\xdf\xb1\x5f\x10\xee\xc1\x17\xec\xbe\x7c"
-                         "\xdb\x24\xdd\xdb\x22\xf6\x47\x8a\xfc\xc5\xb5\xa8\x9a\x8f\xb8\x27"
-                         "\x72\xa1\xd4\x5e\x43\xcd\x7b\x33\x2e\xe3\x09\x94\x77\x20\xfe\xba"
-                         "\xae\x2e\x9b\xc1\x43\xdd\x9d\x44\xd8\xd6\xfe\xff\xe3\x0f\xf6\xd3"
-                         "\x71\xa1\xf8\xda\x1c\xff\x41\x21\x6f\x07\xc9\x55\x99\x6f\x0a\xef"
-                         "\xd6\x5a\x6c\xa5\xdd\xba\x98\x46\x30\x43\xad\x27\xe4\xf1\x1e\x3a"
-                         "\x89\x4a\xb3\xc8\x6d\xf7\xe9\x2f\x48\xd0\xd7\x29\x38\x5c\xe7\xac"
-                         "\xbc\x3f\x65\x5e\x23\xdd\xc1\xad\x73\xed\x1a\xee\x81\xf3\x63\x29"
-                         "\x7e\x72\x8f\x1a\xfc\x2d\x03\xf9\xbb\x3c\x38\x42\xc2\xfb\x53\x2f"
-                         "\x56\xd6\xca\xb9\xeb\xa4\x17\x46\xdb\x53\x56\xf0\xdd\x1d\x8a\xfc"
-                         "\x03\x06\x4d\x8c\x97\x7e\xf0\xc6\x5d\x6d\x5a\x23\xed\xee\xf9\x11"
-                         "\xed\x04\x34\x0c\x04\xa0\x60\xf9\xa8\xfe\x8f\xfa\xd6\xf3\x27\x3d"
-                         "\x32\x48\xbe\x3b\x56\x3a\xe8\x76\xe9\x54\xe7\x81\xef\xe3\x8f\xd9"
-                         "\x03\x42\x5b\xa7\xd2\x69\x96\x39\x05\x8f\x41\x25\x35\x3a\x56\x66"
-                         "\x5a\xc8\x36\xda\x84\xc5\xe9\x2e\x55\xac\xe9\xeb\xdc\x8f\xd8\x26"
-                         "\x06\x3b\x61\x7f\xd7\x78\x4e\x5b\xe5\xd7\xca\x76\xf0\xd0\x71\xf6"
-                         "\x45\x21\x30\xdf\xfc\x69\x82\xcf\xc3\x02\xda\x4f\x4e\x51\x59\x4f"
-                         "\x56\xd1\x60\x5a\xd9\x12\x21\x7a\xa9\x99\x81\x5a\xa8\xa8\x10\x94"
-                         "\xd7\x3e\x58\x7e\xd9\xde\xbc\xf5\x83\xf0\x92\x4f\xe6\xdd\x17\xb3"
-                         "\x9c\xdd\xd5\x7b\xc0\xb4\xb5\x8c\xae\x7b\x63\x1a\xaa\xd0\x93\x55"
-                         "\x31\x28\xd7\x8e\xec\x8c\x28\x64\x81\x9e\x2e\x47\xa9\xb3\xa0\x06"
-                         "\x2a\x3d\xfe\x27\x40\x9c\x13\x96\xa0\xff\x65\xd9\x05\xd8\x92\xa2"
-                         "\x63\x0e\xbf\xe2\xc5\xe3\x51\xbf\x20\x74\xdc\xbe\x5a\xfb\xd5\x5c"
-                         "\x1b\x8f\x41\x21\x43\xaf\xdf\x35\xd1\x46\x80\x16\xf0\x28\x5d\x55"
-                         "\x52\x0c\x05\x24\x63\x68\x5d\x50\x7a\x50\xde\x2d\xfa\xae\xd0\x71"
-                         "\x9a\xad\x2a\x56\xb6\xa2\x52\xbc\xe1\x93\xc4\x93\x36\xc6\x08\xec"
-                         "\xf3\x26\x14\x0b\xa5\x4c\x9e\x15\xf3\x48\xf6\xd1\xd4\x45\x41\xd7"
-                         "\xb7\x5c\xd9\x89\x89\xe6\x62\xe6\x4b\x9f\x3a\xf7\xc7\x77\xd7\xc3"
-                         "\xae\x18\x3c\x5c\xee\x2a\xf1\x80\x8a\x73\x83\xa4\x0e\x63\x12\x04",
-       .pub_b  = "\x8e\x2b\x1b\xac\x90\x76\x05\x3f\xf4\xd5\xde\xa3\xad\xf0\xe9\x40"
-                         "\x27\x69\xb2\x65\x1a\x54\x5c\x89\x0a\x82\xbd\x59\xc3\x4f\x55\x02"
-                         "\x77\xdd\xac\x4c\x3b\x43\xb5\x34\xf5\xa2\x15\x85\xba\xa2\x40\x6f"
-                         "\xb7\x37\x6c\xdb\x3d\xd1\xc0\xc9\xa0\x6c\x17\x3c\xa3\xc1\xcf\x7f"
-                         "\x86\x86\xcb\xaf\x9a\x5c\x27\x36\x8e\x47\xac\x3f\x30\x46\xe7\xd9"
-                         "\xd9\x56\x54\x22\xfe\x43\xb6\xc9\x04\xf9\xd0\x63\x02\x02\xcd\x7d"
-                         "\x77\xcc\x21\x1b\x7b\xea\x4a\xc1\x9c\xdb\x68\x0e\x34\x00\x43\x4b"
-                         "\xd1\x66\x03\x07\x42\xc9\x79\x7f\x81\x0f\xcc\xff\x4b\x2c\x00\xf9"
-                         "\xb9\xd4\x70\xde\x92\x65\x45\x32\xac\x64\x76\x49\xe6\xc0\x26\x77"
-                         "\xbc\xb8\x09\xa6\xbd\xa1\x22\x73\x13\x4b\x1c\x7c\xa8\x88\xe1\x69"
-                         "\xb1\xe2\x64\x48\x3f\x4b\x2f\xd8\xa3\xb4\xf6\x4e\x5a\x79\x06\xf0"
-                         "\xcb\x72\x9c\x72\x0e\xe6\x39\xa6\x69\x7b\xa3\x32\x9e\xa0\x81\xb0"
-                         "\xd6\xa2\x10\xee\xbb\x5b\xd5\x51\xd0\xd6\xbf\x28\x80\x0c\x67\xf4"
-                         "\x38\xf4\xc3\x16\x3b\x83\xd2\x6c\xd3\xf3\x02\x34\x64\xeb\xa1\x6c"
-                         "\xb3\xa5\x13\x6a\x64\xb5\xa6\x3a\x1b\x63\x5e\xe7\x03\x96\xdb\x37"
-                         "\x4f\xc8\xb8\x60\x86\x45\x30\x61\x97\xfa\x8e\x3d\xae\x48\xa4\x7d"
-                         "\xfe\x72\x6a\xe9\x98\xeb\x77\x13\x4a\x4e\x6a\xae\x24\xf2\xd2\xad"
-                         "\xa6\xca\x7e\x98\x38\x53\x24\xea\x98\x09\x2c\x5b\x0f\x46\x9c\x6a"
-                         "\x50\x0c\x46\x27\x98\x51\x56\x06\x6e\xca\xe9\xb8\x47\xe7\x20\xd7"
-                         "\x71\x38\xdc\x17\x74\x4e\x0b\x9d\xa6\xe3\x8e\x69\x28\x2a\x90\x45"
-                         "\x3e\x72\xdf\x62\x88\x3a\x8a\x04\x59\x05\x43\x2a\xa3\x22\x90\x1f"
-                         "\x62\xa2\x46\x03\x90\x81\xd8\x1a\x12\x77\x37\x08\x34\x58\x0d\x0b"
-                         "\x5d\x02\x5f\xa3\x66\xfb\x6e\xeb\x22\x5c\xe3\xbc\xcc\x8d\xa5\x94"
-                         "\xe8\x14\xd5\x08\xfe\x8b\x75\x6a\xf1\x9a\xde\x32\x26\x10\xb4\xb9"
-                         "\x9f\x5d\x60\x83\x66\xdf\xfc\xfe\x4d\xdc\xd9\x95\xcf\xa9\x89\xc4"
-                         "\xe6\x92\x8a\xd5\x99\x35\x7e\xc5\x5b\x42\x62\x92\x3f\x7e\x2a\x32"
-                         "\xd0\x64\x8b\x0a\x61\x0f\x3d\xa8\x83\xb8\x95\x77\x34\x3c\xd0\x31"
-                         "\xe6\xf9\x01\x69\x2f\x3f\xb4\xa1\x03\x18\x1b\xf1\xbd\xac\xe1\x8d"
-                         "\x61\xb8\xd0\xf6\x7f\xd9\x7a\x3f\x26\xc1\x81\x16\x80\x93\xe6\x65"
-                         "\x56\x5b\xc1\x56\xfb\xf1\x65\xd9\x5a\x21\xe9\xf2\xd2\xde\x7d\x89"
-                         "\x12\xa2\x4f\x8f\xd9\x61\x0c\x51\xbf\xfc\x36\x65\x36\x5b\x51\x20"
-                         "\x90\x42\x3a\x99\xd1\x88\x21\xf1\xd7\x1a\xe1\xed\xca\xdd\x08\x4e"
-                         "\xb5\x29\xa3\x72\x83\xed\x85\x15\xe5\x20\x5c\x6e\xbb\x39\x2a\x38"
-                         "\x12\xde\xe0\x5a\x1c\x10\x7b\xb2\x5b\x46\xa2\x80\xb4\x3e\x59\x1a"
-                         "\x7d\x09\x70\x9d\xbc\x6f\x76\x8a\xf4\xb4\xc9\x35\x26\xfb\xcc\x7a"
-                         "\xb5\x52\x8b\x06\xe3\x6f\x50\xb1\xf6\x4d\xf4\xbd\xa9\x1e\x39\x37"
-                         "\x56\x1b\x25\x62\x0f\x7a\x4a\xfb\xe1\xff\xf5\x28\xf8\x40\xd4\xf2"
-                         "\x99\xd1\xad\xd9\x23\x5b\x4e\x3b\x8a\x57\x87\x54\x23\xd7\x73\x54"
-                         "\xf9\xa0\x0e\xa5\x49\x5f\x8e\x93\x8e\x41\xeb\x69\x7b\xef\x48\xeb"
-                         "\x1b\xb6\x6b\x48\x29\xff\x4e\x89\xb1\xf2\xbd\xef\x77\x7a\x92\x71"
-                         "\x97\xac\x21\x76\x6e\x54\xd3\x89\xe2\xca\x07\xbe\x00\xe8\xb4\xd4"
-                         "\xd5\x63\xf1\x4b\xbb\x76\x16\xc8\xdb\xf1\x14\x18\x4b\xbe\x39\x00"
-                         "\x75\xf2\x85\x2b\x8e\xd8\xc0\x81\x12\x9b\xe4\x9f\x98\x74\x6f\x70"
-                         "\xa8\xa4\x7f\x14\x66\x21\x91\x61\x86\x2b\xa6\x01\xf5\xd1\x00\x6c"
-                         "\x7b\x3a\x39\xb8\x3b\x6c\xe8\x4b\x16\xd0\x99\xcc\x2a\x9f\x63\xdd"
-                         "\x77\xc1\x1d\x14\x98\x38\xca\x3f\x5a\xdf\xc4\x9d\xf5\xe6\xa8\x2a"
-                         "\x4b\xfb\x53\x68\x6e\x31\x39\x12\x07\x2b\x7e\xe3\x78\x3d\x23\x79"
-                         "\xc4\x2b\xc1\xac\x29\x20\x59\x91\xf0\xd8\xfb\x9d\x20\x5b\x21\x70"
-                         "\x0e\xa8\x46\xca\xfc\x09\x38\x12\x1c\x2c\xa4\x67\xa8\x94\x04\x87"
-                         "\xa4\xaa\x2c\x25\xea\x57\x35\xc2\x4e\xa9\x15\x0e\x7c\x46\xe3\xdf"
-                         "\x40\x77\x81\xd6\xf3\x9c\xee\xd4\x22\x3b\xe9\x20\x98\x1a\x18\x4e"
-                         "\xd3\x3d\xe6\xd0\xfc\xcc\x2d\x5c\x72\x69\xe7\xc4\xca\x12\xe9\xb7"
-                         "\xbe\x84\x31\x9e\x5d\x6f\xcf\x91\x37\x15\xeb\xf8\x08\xba\x50\xc3"
-                         "\xb4\xad\x36\x09\xe0\xd3\x61\xea\x9b\xe6\x28\x56\x33\x73\x2b\xe7"
-                         "\x51\x52\xc5\x40\x66\x34\x47\x03\xe4\xd9\xff\x4b\x23\xaf\x80\x63"
-                         "\xbd\x30\xe0\x2d\xe2\x08\x4a\x09\xd3\x04\x0a\x4d\xbc\x7b\xac\x80"
-                         "\x94\x8c\x4d\xd7\x4a\x35\x72\xa4\x18\x66\xf2\x0e\x01\x6a\x0f\x31"
-                         "\x17\x31\x07\xb9\x65\x68\xd6\xac\x2f\x53\x36\x01\x3f\x06\x18\x77"
-                         "\xae\xbe\xb4\xac\x60\x9a\x73\x3d\x7d\x40\xdc\xed\x19\x27\x03\x57"
-                         "\x0a\xca\xe4\xcc\xc6\xfe\x3b\x7a\x9d\x73\xb2\xa4\xf1\x21\x32\x11"
-                         "\x21\x86\x77\x1e\x25\x96\xc8\xb0\xce\xd5\x1e\x4c\xea\xd0\x04\xde"
-                         "\x67\xa8\x36\x23\x89\x85\x7b\xa9\x2a\x0c\x52\xd5\x63\xbe\x17\xdb"
-                         "\x82\xd5\xf6\x51\xc3\x9a\x9f\xab\x58\x46\x87\x0c\xb3\xc1\x23\x87"
-                         "\x61\xac\x00\xed\x46\xe5\x79\x2c\x5b\xd6\x6e\xaa\xee\x4b\x08\xb2",
-       .shared = "\x7d\xc5\xc9\x35\xc9\x62\x79\x93\x1d\xfc\x55\xc6\x20\x36\x95\x7c"
-                         "\xa1\x5d\x9c\x0f\xdf\x95\xa7\x1f\x59\xae\xb7\xa6\x39\x0f\xd1\x7e"
-                         "\x93\x34\x7f\xb6\x72\x96\xf2\xe3\x20\x30\x40\xe7\x77\x51\xc1\x0a"
-                         "\x08\xf3\xad\x86\x40\xec\xf0\xd2\x9d\x88\xba\xff\x50\xf7\x4e\x88"
-                         "\x1f\xf0\xdd\x12\x17\x05\x97\x1e\x3c\xe3\x91\x65\x10\xd9\x16\x32"
-                         "\x21\x44\xd8\x81\xed\x17\x9a\x60\x34\xee\x4d\x81\x03\xbc\x05\x56"
-                         "\xba\x7f\xa7\x31\xc9\x3b\x57\x5e\x38\x1c\x45\xbf\xfc\x51\x48\xf3"
-                         "\x05\xa9\x74\x39\xdf\xa1\x34\x48\x62\x31\x5d\x58\x45\x16\xc1\x9e"
-                         "\x26\x38\xb4\x59\x95\xdd\x92\x52\x1e\x26\x20\xed\xd2\xb2\xb3\x98"
-                         "\x6b\xde\xbe\xf1\xa0\xbc\x52\xc9\xfe\x97\x65\x78\xd6\xce\x91\xb1"
-                         "\x8e\x9b\x04\xfc\x74\xb9\x1d\x52\x7d\x0b\xf0\x1d\x2a\x3c\xde\x2e"
-                         "\x4c\x49\xee\x62\x9c\x59\x09\x12\xd7\x4a\xd7\x0d\x03\x72\x3d\x04"
-                         "\x58\xd5\x19\x9e\x42\x97\x2c\x32\xb9\xda\x5c\xee\xaf\x40\x44\xc9"
-                         "\xfd\x69\xcf\x6e\x81\x6b\x2b\xa4\x21\x3b\xde\x2d\xc3\xb7\x03\xe3"
-                         "\xa3\xf2\x77\xd8\x70\xf5\x6f\x24\x48\xbf\x48\xb5\xa5\xff\x86\x06"
-                         "\x0c\x23\xc2\xc9\x8e\xfa\x0f\xa6\xaa\x77\x95\x1a\x1a\x91\xfe\x30"
-                         "\x6b\x18\xc5\xfb\x13\x76\x7a\xa5\x29\xa3\x02\xce\x2b\x46\x74\x5a"
-                         "\x1c\xe6\x7c\x3a\xb7\x43\xea\xf9\x3f\x53\xa9\xfb\x63\x94\x26\x42"
-                         "\x82\xdc\x9a\x4a\xd6\xbb\xa9\xd1\x6e\xc2\xc7\x92\x28\x3b\x33\xc3"
-                         "\x58\xf6\xfb\x44\x5c\x5d\xea\xe0\x62\xaa\x30\x97\x30\x38\x36\x47"
-                         "\xb1\xae\x3b\x99\x35\xab\xc9\x45\x2a\x07\xec\x34\x88\x61\x70\xb0"
-                         "\x47\xf9\xd6\x61\x23\x48\x71\x6f\x85\x3b\xf1\x8a\x17\x72\xc1\x99"
-                         "\x6d\x4f\x94\x2b\x11\xf2\x75\x33\x08\x67\x08\xba\xa6\x50\x2a\x1f"
-                         "\x6b\x0e\x38\x0e\x52\xea\xe0\xd8\xcd\xd0\x11\x80\xa7\xb9\x97\xd9"
-                         "\x68\x1b\x21\x7c\xe2\x69\x8e\x14\x61\x39\x49\x65\xbb\xc2\x7c\x2e"
-                         "\x8e\xb1\x83\x28\x7b\xf0\xf0\x62\xdc\x35\x33\xea\xc9\x14\x3f\x83"
-                         "\x60\xd3\xec\x37\xd4\xe3\x87\x86\x2c\x43\x53\x80\x3f\x39\x36\x4d"
-                         "\x1e\x73\x2a\x5c\x8c\xfb\x2d\x2e\x78\xd1\xf1\xe5\x8c\x89\x35\x1e"
-                         "\x0a\xd3\x07\x3c\x05\x0d\x4e\xa0\x81\x6a\xee\xb5\x27\xef\xa6\x2e"
-                         "\x04\x07\x01\xf7\x40\x9b\xbf\x7b\xf8\x3d\x0f\x68\x79\xc6\x96\x16"
-                         "\x53\x5b\xb0\x8f\xb1\xbd\xd4\x28\xa7\x73\x37\x7b\x06\xbf\x9c\xd2"
-                         "\xb4\x28\x82\xb4\xd2\x63\xf9\xb2\x56\x7c\x28\x02\x4b\x91\x63\x03"
-                         "\xdc\x58\x6e\xb5\x88\x2e\x76\x3a\x53\x4a\xd4\x22\x7c\xa5\xca\xdc"
-                         "\x96\x14\xa6\xfb\x64\xe9\xa5\x09\xf2\x3e\x4d\x7e\x40\x01\x93\x05"
-                         "\xe0\xad\x2e\x20\x7c\x4e\x17\x45\xa8\x70\x7e\xd1\xc7\xbb\x10\x94"
-                         "\x81\x36\x22\x62\x3f\x44\xe2\xfa\x36\x9e\x4e\x37\x75\xdf\x8d\x6f"
-                         "\x15\x73\x41\xf0\x6f\x32\xce\xa9\xfc\x06\x8f\x39\xcf\xfb\x34\x16"
-                         "\xba\x74\x7d\xe6\x02\x18\xd3\xe4\x8c\xee\xd1\xef\xdc\xd4\x59\x8d"
-                         "\xeb\x25\x7a\x09\xc8\xcc\x38\x7b\xcb\x8b\x3c\xb8\x77\xb4\xad\x1a"
-                         "\x9e\x78\x20\x58\x6b\x36\x4d\x5d\xbb\x07\x38\xba\x65\xf4\xfe\x4d"
-                         "\x86\x94\xdf\x77\x52\x08\xb1\x75\x07\x85\xaf\x77\xe9\xb3\xab\x3a"
-                         "\x35\x30\x8a\xfd\x34\x99\x3b\x8f\xfc\x9a\x9e\xe1\x46\xcb\xbf\xf3"
-                         "\xbd\xb9\x9c\x8c\x4e\x29\x6d\xa3\x29\x5a\x1f\x88\x23\xdf\x89\xa7"
-                         "\x88\x7c\x90\x75\x5a\xd5\x97\x60\x17\xdf\x5e\x96\x04\xf8\xae\x24"
-                         "\xd8\xf1\xa3\x3a\xa1\x40\x40\xd1\x45\x8e\xa5\xe5\x32\x32\xcc\xcc"
-                         "\x1c\x8a\x9f\x6d\xa0\xa8\x89\x9d\x75\x2b\xd2\xc2\x07\xb2\xe1\x1a"
-                         "\xcd\x4f\x31\x80\xb2\x19\x5f\x06\x9d\x8e\x7a\xf1\x2e\x15\x1d\xbc"
-                         "\x4c\xb4\x75\x6f\x7b\xb7\xe4\x70\xd6\x0c\xe1\x27\x93\xce\x4a\x63"
-                         "\xde\xe7\x48\x87\x5c\x75\xae\x34\x82\x5a\x71\xda\x1f\x93\x72\x64"
-                         "\x7c\x7b\xda\x6a\xd7\xf9\xe8\x1f\x72\x67\x71\x68\x6f\x85\x64\x53"
-                         "\x72\x80\x8f\x1f\x7a\x15\x1c\x11\xfd\x11\xf7\x8c\xc4\x43\x41\x60"
-                         "\x03\xf2\x79\x19\x27\xdf\x98\x37\xaf\x07\xb3\x8d\x0b\xee\x01\x85"
-                         "\x6f\x6d\xa9\xbd\x0e\x1f\x79\xdf\x21\x78\x24\xbf\xc5\x09\x29\x9e"
-                         "\x64\x0d\x8e\xff\xc9\xe7\xe8\x51\xd3\xe8\xfe\xa5\xe0\xa9\x8d\x54"
-                         "\x17\x3a\x34\xaf\xd9\xbd\xfd\xaa\x8c\x81\x79\xfb\x65\x85\x67\x73"
-                         "\x32\x2d\x32\x00\xcb\x3b\xe2\x0e\x43\xe8\x40\xf6\x42\xf2\x74\x00"
-                         "\xa0\xfd\xe6\x96\x4a\x2b\xbb\xa9\xd9\x95\xc4\x42\x75\x12\x3f\xbb"
-                         "\x79\x35\x9c\x91\xb5\x24\x10\xc4\xc5\xbd\x4a\x4c\x47\xd8\x89\x92"
-                         "\x70\xa5\xe6\xc9\xed\x2e\xbd\x98\xc0\x17\xb0\xad\x8c\x31\x95\x81"
-                         "\x84\x86\xb1\xaa\x42\xf6\x2e\x10\x92\x2f\x67\x73\x33\xb9\x02\x43"
-                         "\x52\x24\x05\xdb\x9c\xec\xc5\xf1\x3e\x78\x05\xcb\x04\xd6\x91\xa8"
-                         "\x51\x9e\x48\xa8\xae\xa8\x8d\x13\x2d\xcd\xa1\xbe\x23\x9e\x00\x4c"
-                         "\x0a\x59\xf8\x18\xb0\x0a\x06\xe2\x0a\xb4\x16\x02\xa7\x21\x4c\xac"
-                         "\x9a\x80\x62\x7f\xb6\xd6\xa0\x3b\x11\xd3\x30\xf9\x3d\xfd\x26\x27",
+       .method = MODP_8192_BIT,
+       .seed = chunk_from_chars(
+               0xa6, 0x48, 0x81, 0x47, 0x45, 0xfe, 0x1e, 0xd1, 0x98, 0x9b,
+               0x75, 0xba, 0x6d, 0xd5, 0x01, 0xe4, 0x4e, 0x77, 0x6d, 0xc9,
+               0x97, 0xa0, 0xae, 0x27, 0x37, 0x64, 0x61, 0xb0, 0xee, 0x79,
+               0x65, 0x94, 0xc2, 0xe6, 0xdb, 0x07, 0xe5, 0xf9, 0xd8, 0x7d,
+               0x94, 0x4d, 0x37, 0x01, 0x22, 0x38, 0xe5, 0x70, 0xaf, 0x52,
+               0x3a, 0x47, 0xf3, 0xe8, 0x6e, 0x2a, 0x4c, 0xd0, 0xdb, 0x3a,
+               0x49, 0x40, 0xcf, 0x0b, /* - */
+               0xd8, 0xf2, 0xb0, 0x9f, 0x17, 0xbe, 0x6f, 0x13, 0x64, 0x5c,
+               0xb4, 0x57, 0xbe, 0x0a, 0xa8, 0x02, 0x02, 0xe8, 0x43, 0xf5,
+               0x10, 0xd2, 0x93, 0xf9, 0x32, 0x55, 0x98, 0x2f, 0x89, 0x87,
+               0x26, 0x61, 0x79, 0xd6, 0x01, 0x90, 0x95, 0x70, 0xa3, 0xf9,
+               0xcc, 0x58, 0x50, 0x8b, 0x62, 0xf8, 0x8d, 0x64, 0xe0, 0xd0,
+               0x59, 0xf1, 0xa2, 0xed, 0xea, 0xd4, 0x42, 0x82, 0x04, 0xcc,
+               0x09, 0x2a, 0x2d, 0x82),
+       .pub_i = chunk_from_chars(
+               0x1f, 0x6d, 0x66, 0x0a, 0xfb, 0x04, 0x87, 0x42, 0x55, 0xe6,
+               0x83, 0xee, 0x89, 0x9a, 0xd2, 0xfd, 0xbc, 0xf7, 0x35, 0x7f,
+               0xdf, 0xe2, 0x47, 0xef, 0x3b, 0x2f, 0xf9, 0x41, 0x19, 0x48,
+               0x45, 0x26, 0x44, 0x53, 0x41, 0xc5, 0xdf, 0xea, 0x28, 0xa7,
+               0x45, 0xa0, 0xff, 0x56, 0x95, 0x13, 0x24, 0x72, 0x34, 0x1b,
+               0x11, 0xb2, 0xe6, 0x9b, 0xd8, 0xe9, 0x98, 0x18, 0xf0, 0x5c,
+               0x22, 0x74, 0x26, 0x65, 0x9c, 0xf0, 0x34, 0x81, 0x55, 0x50,
+               0x1d, 0xce, 0x5a, 0x7b, 0x5d, 0x11, 0xae, 0xaf, 0xfb, 0xd0,
+               0x52, 0xb5, 0xff, 0x8a, 0xc8, 0xe3, 0x5e, 0x78, 0x50, 0x29,
+               0x79, 0x53, 0x9e, 0xf4, 0xe4, 0xa7, 0xa9, 0x51, 0x55, 0x1a, /* 100 */
+               0xcc, 0x10, 0x02, 0x72, 0x6b, 0xa8, 0xee, 0x95, 0x95, 0x70,
+               0x19, 0x92, 0x34, 0x15, 0xd8, 0xec, 0x61, 0x27, 0xbe, 0x25,
+               0x2c, 0x44, 0x65, 0xb0, 0xef, 0xae, 0x8a, 0xee, 0xcd, 0x39,
+               0x0f, 0x33, 0x55, 0xcf, 0x94, 0x52, 0x5e, 0xef, 0x38, 0xdb,
+               0x92, 0x62, 0x79, 0xb8, 0xfd, 0xce, 0xe1, 0x3c, 0x43, 0x8e,
+               0xdd, 0xb2, 0xa5, 0x22, 0x44, 0xa7, 0x1b, 0xda, 0x1e, 0x85,
+               0x30, 0x91, 0x82, 0xfa, 0x8c, 0x57, 0xff, 0x0c, 0xd4, 0x06,
+               0x9d, 0x4f, 0xfb, 0xcc, 0x42, 0xe5, 0xe6, 0x60, 0xc1, 0xf0,
+               0x07, 0x3c, 0x85, 0x6a, 0xc6, 0x11, 0xcb, 0xf7, 0xf9, 0xf3,
+               0x2c, 0x95, 0x67, 0xa1, 0x8e, 0x44, 0x94, 0xed, 0xe7, 0x42, /* 200 */
+               0x7b, 0x1a, 0x18, 0x16, 0x55, 0xdb, 0xc7, 0x91, 0xc7, 0x9d,
+               0x54, 0x7d, 0x88, 0xfd, 0x49, 0x45, 0x9b, 0xd3, 0x56, 0xee,
+               0x47, 0x26, 0xa9, 0x5c, 0xd3, 0x7b, 0xf2, 0x42, 0xe4, 0x8a,
+               0x94, 0xd9, 0x22, 0xcc, 0x06, 0x66, 0xce, 0x4f, 0x29, 0x91,
+               0x2a, 0x1e, 0x4e, 0xc8, 0x8e, 0x3e, 0x40, 0xde, 0xdc, 0x95,
+               0xe1, 0x2c, 0xe2, 0x50, 0x47, 0x2e, 0x58, 0x37, 0x49, 0x32,
+               0xe4, 0x64, 0x81, 0xe7, 0x03, 0x11, 0x81, 0x13, 0xb7, 0xdd,
+               0x6f, 0xef, 0xae, 0xf5, 0xc5, 0xe6, 0x1c, 0x13, 0x6b, 0x76,
+               0xa1, 0xb0, 0xbf, 0x4d, 0xf0, 0x01, 0xc3, 0x09, 0xd8, 0x59,
+               0xff, 0x13, 0x34, 0x6d, 0x52, 0x11, 0x9b, 0xa6, 0xc9, 0xca, /* 300 */
+               0x38, 0xe6, 0x71, 0x80, 0x39, 0xae, 0x37, 0x4b, 0x1c, 0xe1,
+               0x13, 0xfb, 0xc6, 0x91, 0x8f, 0x32, 0xc3, 0x6a, 0x04, 0xd8,
+               0xc6, 0x80, 0x08, 0x4e, 0xef, 0xf6, 0x80, 0xf9, 0x8f, 0xda,
+               0xaf, 0x27, 0x79, 0x9b, 0x21, 0x2d, 0x2d, 0xea, 0x87, 0x4b,
+               0x4d, 0xeb, 0x5a, 0x87, 0xfb, 0x72, 0x36, 0xe2, 0x3e, 0x9b,
+               0x42, 0xcf, 0xa9, 0xeb, 0x49, 0x41, 0xe6, 0xc2, 0xb8, 0xc0,
+               0xad, 0xbd, 0xb3, 0x61, 0xc1, 0x61, 0x5f, 0x9c, 0xb6, 0xbd,
+               0x8f, 0x99, 0x3a, 0xe8, 0xca, 0x86, 0xb8, 0xd8, 0x7f, 0x2f,
+               0xb2, 0x33, 0xc0, 0x9f, 0xd3, 0x8e, 0x44, 0xdc, 0x6d, 0x0c,
+               0x19, 0x89, 0xb9, 0x05, 0xc6, 0x36, 0xf4, 0x7a, 0xc3, 0x06, /* 400 */
+               0x46, 0xa4, 0x22, 0x6e, 0xef, 0x76, 0xba, 0x92, 0xfd, 0xaf,
+               0xce, 0x71, 0xbc, 0x0c, 0x05, 0xfe, 0xec, 0x8f, 0x8d, 0xfb,
+               0x59, 0x46, 0xf9, 0x7c, 0xc1, 0x1f, 0x1c, 0x52, 0x62, 0x4d,
+               0x01, 0x57, 0x4e, 0x86, 0x03, 0x94, 0x8b, 0xba, 0xf7, 0xbd,
+               0xca, 0xbb, 0x15, 0xaa, 0x61, 0xdd, 0xbc, 0x32, 0xdf, 0x9e,
+               0x5f, 0xad, 0x3b, 0xf8, 0xf6, 0xfb, 0x4d, 0x1e, 0x9c, 0x86,
+               0x9e, 0x7e, 0x0f, 0xaf, 0xf6, 0x91, 0x7e, 0x08, 0xf4, 0xfb,
+               0x55, 0xd8, 0xe0, 0x4b, 0xd9, 0xcd, 0x23, 0x57, 0x83, 0x58,
+               0x59, 0xd7, 0x56, 0x93, 0xee, 0x14, 0x2f, 0x2b, 0xd2, 0x83,
+               0xa4, 0xce, 0x45, 0xa2, 0x90, 0xba, 0x15, 0x4d, 0xca, 0x0c, /* 500 */
+               0x8b, 0x29, 0x7a, 0xe5, 0xbc, 0xba, 0xa0, 0x45, 0xd0, 0x08,
+               0x27, 0x75, 0x61, 0x3a, 0x83, 0x99, 0x2f, 0x39, 0xc6, 0x41,
+               0x03, 0xc0, 0xb7, 0xd6, 0xfb, 0x5b, 0x94, 0x64, 0xc3, 0xfe,
+               0xca, 0x32, 0x1c, 0xe3, 0x66, 0xc8, 0xb4, 0x49, 0x44, 0x1c,
+               0x63, 0xb0, 0xaa, 0x18, 0x31, 0x4b, 0x15, 0x8a, 0xda, 0x77,
+               0xc5, 0xfd, 0xea, 0x33, 0x6c, 0x9a, 0x45, 0x4c, 0x24, 0xb5,
+               0x1c, 0xd2, 0x5d, 0x56, 0x98, 0x3c, 0xdf, 0xb1, 0x5f, 0x10,
+               0xee, 0xc1, 0x17, 0xec, 0xbe, 0x7c, 0xdb, 0x24, 0xdd, 0xdb,
+               0x22, 0xf6, 0x47, 0x8a, 0xfc, 0xc5, 0xb5, 0xa8, 0x9a, 0x8f,
+               0xb8, 0x27, 0x72, 0xa1, 0xd4, 0x5e, 0x43, 0xcd, 0x7b, 0x33, /* 600 */
+               0x2e, 0xe3, 0x09, 0x94, 0x77, 0x20, 0xfe, 0xba, 0xae, 0x2e,
+               0x9b, 0xc1, 0x43, 0xdd, 0x9d, 0x44, 0xd8, 0xd6, 0xfe, 0xff,
+               0xe3, 0x0f, 0xf6, 0xd3, 0x71, 0xa1, 0xf8, 0xda, 0x1c, 0xff,
+               0x41, 0x21, 0x6f, 0x07, 0xc9, 0x55, 0x99, 0x6f, 0x0a, 0xef,
+               0xd6, 0x5a, 0x6c, 0xa5, 0xdd, 0xba, 0x98, 0x46, 0x30, 0x43,
+               0xad, 0x27, 0xe4, 0xf1, 0x1e, 0x3a, 0x89, 0x4a, 0xb3, 0xc8,
+               0x6d, 0xf7, 0xe9, 0x2f, 0x48, 0xd0, 0xd7, 0x29, 0x38, 0x5c,
+               0xe7, 0xac, 0xbc, 0x3f, 0x65, 0x5e, 0x23, 0xdd, 0xc1, 0xad,
+               0x73, 0xed, 0x1a, 0xee, 0x81, 0xf3, 0x63, 0x29, 0x7e, 0x72,
+               0x8f, 0x1a, 0xfc, 0x2d, 0x03, 0xf9, 0xbb, 0x3c, 0x38, 0x42, /* 700 */
+               0xc2, 0xfb, 0x53, 0x2f, 0x56, 0xd6, 0xca, 0xb9, 0xeb, 0xa4,
+               0x17, 0x46, 0xdb, 0x53, 0x56, 0xf0, 0xdd, 0x1d, 0x8a, 0xfc,
+               0x03, 0x06, 0x4d, 0x8c, 0x97, 0x7e, 0xf0, 0xc6, 0x5d, 0x6d,
+               0x5a, 0x23, 0xed, 0xee, 0xf9, 0x11, 0xed, 0x04, 0x34, 0x0c,
+               0x04, 0xa0, 0x60, 0xf9, 0xa8, 0xfe, 0x8f, 0xfa, 0xd6, 0xf3,
+               0x27, 0x3d, 0x32, 0x48, 0xbe, 0x3b, 0x56, 0x3a, 0xe8, 0x76,
+               0xe9, 0x54, 0xe7, 0x81, 0xef, 0xe3, 0x8f, 0xd9, 0x03, 0x42,
+               0x5b, 0xa7, 0xd2, 0x69, 0x96, 0x39, 0x05, 0x8f, 0x41, 0x25,
+               0x35, 0x3a, 0x56, 0x66, 0x5a, 0xc8, 0x36, 0xda, 0x84, 0xc5,
+               0xe9, 0x2e, 0x55, 0xac, 0xe9, 0xeb, 0xdc, 0x8f, 0xd8, 0x26, /* 800 */
+               0x06, 0x3b, 0x61, 0x7f, 0xd7, 0x78, 0x4e, 0x5b, 0xe5, 0xd7,
+               0xca, 0x76, 0xf0, 0xd0, 0x71, 0xf6, 0x45, 0x21, 0x30, 0xdf,
+               0xfc, 0x69, 0x82, 0xcf, 0xc3, 0x02, 0xda, 0x4f, 0x4e, 0x51,
+               0x59, 0x4f, 0x56, 0xd1, 0x60, 0x5a, 0xd9, 0x12, 0x21, 0x7a,
+               0xa9, 0x99, 0x81, 0x5a, 0xa8, 0xa8, 0x10, 0x94, 0xd7, 0x3e,
+               0x58, 0x7e, 0xd9, 0xde, 0xbc, 0xf5, 0x83, 0xf0, 0x92, 0x4f,
+               0xe6, 0xdd, 0x17, 0xb3, 0x9c, 0xdd, 0xd5, 0x7b, 0xc0, 0xb4,
+               0xb5, 0x8c, 0xae, 0x7b, 0x63, 0x1a, 0xaa, 0xd0, 0x93, 0x55,
+               0x31, 0x28, 0xd7, 0x8e, 0xec, 0x8c, 0x28, 0x64, 0x81, 0x9e,
+               0x2e, 0x47, 0xa9, 0xb3, 0xa0, 0x06, 0x2a, 0x3d, 0xfe, 0x27, /* 900 */
+               0x40, 0x9c, 0x13, 0x96, 0xa0, 0xff, 0x65, 0xd9, 0x05, 0xd8,
+               0x92, 0xa2, 0x63, 0x0e, 0xbf, 0xe2, 0xc5, 0xe3, 0x51, 0xbf,
+               0x20, 0x74, 0xdc, 0xbe, 0x5a, 0xfb, 0xd5, 0x5c, 0x1b, 0x8f,
+               0x41, 0x21, 0x43, 0xaf, 0xdf, 0x35, 0xd1, 0x46, 0x80, 0x16,
+               0xf0, 0x28, 0x5d, 0x55, 0x52, 0x0c, 0x05, 0x24, 0x63, 0x68,
+               0x5d, 0x50, 0x7a, 0x50, 0xde, 0x2d, 0xfa, 0xae, 0xd0, 0x71,
+               0x9a, 0xad, 0x2a, 0x56, 0xb6, 0xa2, 0x52, 0xbc, 0xe1, 0x93,
+               0xc4, 0x93, 0x36, 0xc6, 0x08, 0xec, 0xf3, 0x26, 0x14, 0x0b,
+               0xa5, 0x4c, 0x9e, 0x15, 0xf3, 0x48, 0xf6, 0xd1, 0xd4, 0x45,
+               0x41, 0xd7, 0xb7, 0x5c, 0xd9, 0x89, 0x89, 0xe6, 0x62, 0xe6, /* 1000 */
+               0x4b, 0x9f, 0x3a, 0xf7, 0xc7, 0x77, 0xd7, 0xc3, 0xae, 0x18,
+               0x3c, 0x5c, 0xee, 0x2a, 0xf1, 0x80, 0x8a, 0x73, 0x83, 0xa4,
+               0x0e, 0x63, 0x12, 0x04),
+       .pub_r = chunk_from_chars(
+               0x8e, 0x2b, 0x1b, 0xac, 0x90, 0x76, 0x05, 0x3f, 0xf4, 0xd5,
+               0xde, 0xa3, 0xad, 0xf0, 0xe9, 0x40, 0x27, 0x69, 0xb2, 0x65,
+               0x1a, 0x54, 0x5c, 0x89, 0x0a, 0x82, 0xbd, 0x59, 0xc3, 0x4f,
+               0x55, 0x02, 0x77, 0xdd, 0xac, 0x4c, 0x3b, 0x43, 0xb5, 0x34,
+               0xf5, 0xa2, 0x15, 0x85, 0xba, 0xa2, 0x40, 0x6f, 0xb7, 0x37,
+               0x6c, 0xdb, 0x3d, 0xd1, 0xc0, 0xc9, 0xa0, 0x6c, 0x17, 0x3c,
+               0xa3, 0xc1, 0xcf, 0x7f, 0x86, 0x86, 0xcb, 0xaf, 0x9a, 0x5c,
+               0x27, 0x36, 0x8e, 0x47, 0xac, 0x3f, 0x30, 0x46, 0xe7, 0xd9,
+               0xd9, 0x56, 0x54, 0x22, 0xfe, 0x43, 0xb6, 0xc9, 0x04, 0xf9,
+               0xd0, 0x63, 0x02, 0x02, 0xcd, 0x7d, 0x77, 0xcc, 0x21, 0x1b, /* 100 */
+               0x7b, 0xea, 0x4a, 0xc1, 0x9c, 0xdb, 0x68, 0x0e, 0x34, 0x00,
+               0x43, 0x4b, 0xd1, 0x66, 0x03, 0x07, 0x42, 0xc9, 0x79, 0x7f,
+               0x81, 0x0f, 0xcc, 0xff, 0x4b, 0x2c, 0x00, 0xf9, 0xb9, 0xd4,
+               0x70, 0xde, 0x92, 0x65, 0x45, 0x32, 0xac, 0x64, 0x76, 0x49,
+               0xe6, 0xc0, 0x26, 0x77, 0xbc, 0xb8, 0x09, 0xa6, 0xbd, 0xa1,
+               0x22, 0x73, 0x13, 0x4b, 0x1c, 0x7c, 0xa8, 0x88, 0xe1, 0x69,
+               0xb1, 0xe2, 0x64, 0x48, 0x3f, 0x4b, 0x2f, 0xd8, 0xa3, 0xb4,
+               0xf6, 0x4e, 0x5a, 0x79, 0x06, 0xf0, 0xcb, 0x72, 0x9c, 0x72,
+               0x0e, 0xe6, 0x39, 0xa6, 0x69, 0x7b, 0xa3, 0x32, 0x9e, 0xa0,
+               0x81, 0xb0, 0xd6, 0xa2, 0x10, 0xee, 0xbb, 0x5b, 0xd5, 0x51, /* 200 */
+               0xd0, 0xd6, 0xbf, 0x28, 0x80, 0x0c, 0x67, 0xf4, 0x38, 0xf4,
+               0xc3, 0x16, 0x3b, 0x83, 0xd2, 0x6c, 0xd3, 0xf3, 0x02, 0x34,
+               0x64, 0xeb, 0xa1, 0x6c, 0xb3, 0xa5, 0x13, 0x6a, 0x64, 0xb5,
+               0xa6, 0x3a, 0x1b, 0x63, 0x5e, 0xe7, 0x03, 0x96, 0xdb, 0x37,
+               0x4f, 0xc8, 0xb8, 0x60, 0x86, 0x45, 0x30, 0x61, 0x97, 0xfa,
+               0x8e, 0x3d, 0xae, 0x48, 0xa4, 0x7d, 0xfe, 0x72, 0x6a, 0xe9,
+               0x98, 0xeb, 0x77, 0x13, 0x4a, 0x4e, 0x6a, 0xae, 0x24, 0xf2,
+               0xd2, 0xad, 0xa6, 0xca, 0x7e, 0x98, 0x38, 0x53, 0x24, 0xea,
+               0x98, 0x09, 0x2c, 0x5b, 0x0f, 0x46, 0x9c, 0x6a, 0x50, 0x0c,
+               0x46, 0x27, 0x98, 0x51, 0x56, 0x06, 0x6e, 0xca, 0xe9, 0xb8, /* 300 */
+               0x47, 0xe7, 0x20, 0xd7, 0x71, 0x38, 0xdc, 0x17, 0x74, 0x4e,
+               0x0b, 0x9d, 0xa6, 0xe3, 0x8e, 0x69, 0x28, 0x2a, 0x90, 0x45,
+               0x3e, 0x72, 0xdf, 0x62, 0x88, 0x3a, 0x8a, 0x04, 0x59, 0x05,
+               0x43, 0x2a, 0xa3, 0x22, 0x90, 0x1f, 0x62, 0xa2, 0x46, 0x03,
+               0x90, 0x81, 0xd8, 0x1a, 0x12, 0x77, 0x37, 0x08, 0x34, 0x58,
+               0x0d, 0x0b, 0x5d, 0x02, 0x5f, 0xa3, 0x66, 0xfb, 0x6e, 0xeb,
+               0x22, 0x5c, 0xe3, 0xbc, 0xcc, 0x8d, 0xa5, 0x94, 0xe8, 0x14,
+               0xd5, 0x08, 0xfe, 0x8b, 0x75, 0x6a, 0xf1, 0x9a, 0xde, 0x32,
+               0x26, 0x10, 0xb4, 0xb9, 0x9f, 0x5d, 0x60, 0x83, 0x66, 0xdf,
+               0xfc, 0xfe, 0x4d, 0xdc, 0xd9, 0x95, 0xcf, 0xa9, 0x89, 0xc4, /* 400 */
+               0xe6, 0x92, 0x8a, 0xd5, 0x99, 0x35, 0x7e, 0xc5, 0x5b, 0x42,
+               0x62, 0x92, 0x3f, 0x7e, 0x2a, 0x32, 0xd0, 0x64, 0x8b, 0x0a,
+               0x61, 0x0f, 0x3d, 0xa8, 0x83, 0xb8, 0x95, 0x77, 0x34, 0x3c,
+               0xd0, 0x31, 0xe6, 0xf9, 0x01, 0x69, 0x2f, 0x3f, 0xb4, 0xa1,
+               0x03, 0x18, 0x1b, 0xf1, 0xbd, 0xac, 0xe1, 0x8d, 0x61, 0xb8,
+               0xd0, 0xf6, 0x7f, 0xd9, 0x7a, 0x3f, 0x26, 0xc1, 0x81, 0x16,
+               0x80, 0x93, 0xe6, 0x65, 0x56, 0x5b, 0xc1, 0x56, 0xfb, 0xf1,
+               0x65, 0xd9, 0x5a, 0x21, 0xe9, 0xf2, 0xd2, 0xde, 0x7d, 0x89,
+               0x12, 0xa2, 0x4f, 0x8f, 0xd9, 0x61, 0x0c, 0x51, 0xbf, 0xfc,
+               0x36, 0x65, 0x36, 0x5b, 0x51, 0x20, 0x90, 0x42, 0x3a, 0x99, /* 500 */
+               0xd1, 0x88, 0x21, 0xf1, 0xd7, 0x1a, 0xe1, 0xed, 0xca, 0xdd,
+               0x08, 0x4e, 0xb5, 0x29, 0xa3, 0x72, 0x83, 0xed, 0x85, 0x15,
+               0xe5, 0x20, 0x5c, 0x6e, 0xbb, 0x39, 0x2a, 0x38, 0x12, 0xde,
+               0xe0, 0x5a, 0x1c, 0x10, 0x7b, 0xb2, 0x5b, 0x46, 0xa2, 0x80,
+               0xb4, 0x3e, 0x59, 0x1a, 0x7d, 0x09, 0x70, 0x9d, 0xbc, 0x6f,
+               0x76, 0x8a, 0xf4, 0xb4, 0xc9, 0x35, 0x26, 0xfb, 0xcc, 0x7a,
+               0xb5, 0x52, 0x8b, 0x06, 0xe3, 0x6f, 0x50, 0xb1, 0xf6, 0x4d,
+               0xf4, 0xbd, 0xa9, 0x1e, 0x39, 0x37, 0x56, 0x1b, 0x25, 0x62,
+               0x0f, 0x7a, 0x4a, 0xfb, 0xe1, 0xff, 0xf5, 0x28, 0xf8, 0x40,
+               0xd4, 0xf2, 0x99, 0xd1, 0xad, 0xd9, 0x23, 0x5b, 0x4e, 0x3b, /* 600 */
+               0x8a, 0x57, 0x87, 0x54, 0x23, 0xd7, 0x73, 0x54, 0xf9, 0xa0,
+               0x0e, 0xa5, 0x49, 0x5f, 0x8e, 0x93, 0x8e, 0x41, 0xeb, 0x69,
+               0x7b, 0xef, 0x48, 0xeb, 0x1b, 0xb6, 0x6b, 0x48, 0x29, 0xff,
+               0x4e, 0x89, 0xb1, 0xf2, 0xbd, 0xef, 0x77, 0x7a, 0x92, 0x71,
+               0x97, 0xac, 0x21, 0x76, 0x6e, 0x54, 0xd3, 0x89, 0xe2, 0xca,
+               0x07, 0xbe, 0x00, 0xe8, 0xb4, 0xd4, 0xd5, 0x63, 0xf1, 0x4b,
+               0xbb, 0x76, 0x16, 0xc8, 0xdb, 0xf1, 0x14, 0x18, 0x4b, 0xbe,
+               0x39, 0x00, 0x75, 0xf2, 0x85, 0x2b, 0x8e, 0xd8, 0xc0, 0x81,
+               0x12, 0x9b, 0xe4, 0x9f, 0x98, 0x74, 0x6f, 0x70, 0xa8, 0xa4,
+               0x7f, 0x14, 0x66, 0x21, 0x91, 0x61, 0x86, 0x2b, 0xa6, 0x01, /* 700 */
+               0xf5, 0xd1, 0x00, 0x6c, 0x7b, 0x3a, 0x39, 0xb8, 0x3b, 0x6c,
+               0xe8, 0x4b, 0x16, 0xd0, 0x99, 0xcc, 0x2a, 0x9f, 0x63, 0xdd,
+               0x77, 0xc1, 0x1d, 0x14, 0x98, 0x38, 0xca, 0x3f, 0x5a, 0xdf,
+               0xc4, 0x9d, 0xf5, 0xe6, 0xa8, 0x2a, 0x4b, 0xfb, 0x53, 0x68,
+               0x6e, 0x31, 0x39, 0x12, 0x07, 0x2b, 0x7e, 0xe3, 0x78, 0x3d,
+               0x23, 0x79, 0xc4, 0x2b, 0xc1, 0xac, 0x29, 0x20, 0x59, 0x91,
+               0xf0, 0xd8, 0xfb, 0x9d, 0x20, 0x5b, 0x21, 0x70, 0x0e, 0xa8,
+               0x46, 0xca, 0xfc, 0x09, 0x38, 0x12, 0x1c, 0x2c, 0xa4, 0x67,
+               0xa8, 0x94, 0x04, 0x87, 0xa4, 0xaa, 0x2c, 0x25, 0xea, 0x57,
+               0x35, 0xc2, 0x4e, 0xa9, 0x15, 0x0e, 0x7c, 0x46, 0xe3, 0xdf, /* 800 */
+               0x40, 0x77, 0x81, 0xd6, 0xf3, 0x9c, 0xee, 0xd4, 0x22, 0x3b,
+               0xe9, 0x20, 0x98, 0x1a, 0x18, 0x4e, 0xd3, 0x3d, 0xe6, 0xd0,
+               0xfc, 0xcc, 0x2d, 0x5c, 0x72, 0x69, 0xe7, 0xc4, 0xca, 0x12,
+               0xe9, 0xb7, 0xbe, 0x84, 0x31, 0x9e, 0x5d, 0x6f, 0xcf, 0x91,
+               0x37, 0x15, 0xeb, 0xf8, 0x08, 0xba, 0x50, 0xc3, 0xb4, 0xad,
+               0x36, 0x09, 0xe0, 0xd3, 0x61, 0xea, 0x9b, 0xe6, 0x28, 0x56,
+               0x33, 0x73, 0x2b, 0xe7, 0x51, 0x52, 0xc5, 0x40, 0x66, 0x34,
+               0x47, 0x03, 0xe4, 0xd9, 0xff, 0x4b, 0x23, 0xaf, 0x80, 0x63,
+               0xbd, 0x30, 0xe0, 0x2d, 0xe2, 0x08, 0x4a, 0x09, 0xd3, 0x04,
+               0x0a, 0x4d, 0xbc, 0x7b, 0xac, 0x80, 0x94, 0x8c, 0x4d, 0xd7, /* 900 */
+               0x4a, 0x35, 0x72, 0xa4, 0x18, 0x66, 0xf2, 0x0e, 0x01, 0x6a,
+               0x0f, 0x31, 0x17, 0x31, 0x07, 0xb9, 0x65, 0x68, 0xd6, 0xac,
+               0x2f, 0x53, 0x36, 0x01, 0x3f, 0x06, 0x18, 0x77, 0xae, 0xbe,
+               0xb4, 0xac, 0x60, 0x9a, 0x73, 0x3d, 0x7d, 0x40, 0xdc, 0xed,
+               0x19, 0x27, 0x03, 0x57, 0x0a, 0xca, 0xe4, 0xcc, 0xc6, 0xfe,
+               0x3b, 0x7a, 0x9d, 0x73, 0xb2, 0xa4, 0xf1, 0x21, 0x32, 0x11,
+               0x21, 0x86, 0x77, 0x1e, 0x25, 0x96, 0xc8, 0xb0, 0xce, 0xd5,
+               0x1e, 0x4c, 0xea, 0xd0, 0x04, 0xde, 0x67, 0xa8, 0x36, 0x23,
+               0x89, 0x85, 0x7b, 0xa9, 0x2a, 0x0c, 0x52, 0xd5, 0x63, 0xbe,
+               0x17, 0xdb, 0x82, 0xd5, 0xf6, 0x51, 0xc3, 0x9a, 0x9f, 0xab, /* 1000 */
+               0x58, 0x46, 0x87, 0x0c, 0xb3, 0xc1, 0x23, 0x87, 0x61, 0xac,
+               0x00, 0xed, 0x46, 0xe5, 0x79, 0x2c, 0x5b, 0xd6, 0x6e, 0xaa,
+               0xee, 0x4b, 0x08, 0xb2),
+       .shared = chunk_from_chars(
+               0x7d, 0xc5, 0xc9, 0x35, 0xc9, 0x62, 0x79, 0x93, 0x1d, 0xfc,
+               0x55, 0xc6, 0x20, 0x36, 0x95, 0x7c, 0xa1, 0x5d, 0x9c, 0x0f,
+               0xdf, 0x95, 0xa7, 0x1f, 0x59, 0xae, 0xb7, 0xa6, 0x39, 0x0f,
+               0xd1, 0x7e, 0x93, 0x34, 0x7f, 0xb6, 0x72, 0x96, 0xf2, 0xe3,
+               0x20, 0x30, 0x40, 0xe7, 0x77, 0x51, 0xc1, 0x0a, 0x08, 0xf3,
+               0xad, 0x86, 0x40, 0xec, 0xf0, 0xd2, 0x9d, 0x88, 0xba, 0xff,
+               0x50, 0xf7, 0x4e, 0x88, 0x1f, 0xf0, 0xdd, 0x12, 0x17, 0x05,
+               0x97, 0x1e, 0x3c, 0xe3, 0x91, 0x65, 0x10, 0xd9, 0x16, 0x32,
+               0x21, 0x44, 0xd8, 0x81, 0xed, 0x17, 0x9a, 0x60, 0x34, 0xee,
+               0x4d, 0x81, 0x03, 0xbc, 0x05, 0x56, 0xba, 0x7f, 0xa7, 0x31, /* 100 */
+               0xc9, 0x3b, 0x57, 0x5e, 0x38, 0x1c, 0x45, 0xbf, 0xfc, 0x51,
+               0x48, 0xf3, 0x05, 0xa9, 0x74, 0x39, 0xdf, 0xa1, 0x34, 0x48,
+               0x62, 0x31, 0x5d, 0x58, 0x45, 0x16, 0xc1, 0x9e, 0x26, 0x38,
+               0xb4, 0x59, 0x95, 0xdd, 0x92, 0x52, 0x1e, 0x26, 0x20, 0xed,
+               0xd2, 0xb2, 0xb3, 0x98, 0x6b, 0xde, 0xbe, 0xf1, 0xa0, 0xbc,
+               0x52, 0xc9, 0xfe, 0x97, 0x65, 0x78, 0xd6, 0xce, 0x91, 0xb1,
+               0x8e, 0x9b, 0x04, 0xfc, 0x74, 0xb9, 0x1d, 0x52, 0x7d, 0x0b,
+               0xf0, 0x1d, 0x2a, 0x3c, 0xde, 0x2e, 0x4c, 0x49, 0xee, 0x62,
+               0x9c, 0x59, 0x09, 0x12, 0xd7, 0x4a, 0xd7, 0x0d, 0x03, 0x72,
+               0x3d, 0x04, 0x58, 0xd5, 0x19, 0x9e, 0x42, 0x97, 0x2c, 0x32, /* 200 */
+               0xb9, 0xda, 0x5c, 0xee, 0xaf, 0x40, 0x44, 0xc9, 0xfd, 0x69,
+               0xcf, 0x6e, 0x81, 0x6b, 0x2b, 0xa4, 0x21, 0x3b, 0xde, 0x2d,
+               0xc3, 0xb7, 0x03, 0xe3, 0xa3, 0xf2, 0x77, 0xd8, 0x70, 0xf5,
+               0x6f, 0x24, 0x48, 0xbf, 0x48, 0xb5, 0xa5, 0xff, 0x86, 0x06,
+               0x0c, 0x23, 0xc2, 0xc9, 0x8e, 0xfa, 0x0f, 0xa6, 0xaa, 0x77,
+               0x95, 0x1a, 0x1a, 0x91, 0xfe, 0x30, 0x6b, 0x18, 0xc5, 0xfb,
+               0x13, 0x76, 0x7a, 0xa5, 0x29, 0xa3, 0x02, 0xce, 0x2b, 0x46,
+               0x74, 0x5a, 0x1c, 0xe6, 0x7c, 0x3a, 0xb7, 0x43, 0xea, 0xf9,
+               0x3f, 0x53, 0xa9, 0xfb, 0x63, 0x94, 0x26, 0x42, 0x82, 0xdc,
+               0x9a, 0x4a, 0xd6, 0xbb, 0xa9, 0xd1, 0x6e, 0xc2, 0xc7, 0x92, /* 300 */
+               0x28, 0x3b, 0x33, 0xc3, 0x58, 0xf6, 0xfb, 0x44, 0x5c, 0x5d,
+               0xea, 0xe0, 0x62, 0xaa, 0x30, 0x97, 0x30, 0x38, 0x36, 0x47,
+               0xb1, 0xae, 0x3b, 0x99, 0x35, 0xab, 0xc9, 0x45, 0x2a, 0x07,
+               0xec, 0x34, 0x88, 0x61, 0x70, 0xb0, 0x47, 0xf9, 0xd6, 0x61,
+               0x23, 0x48, 0x71, 0x6f, 0x85, 0x3b, 0xf1, 0x8a, 0x17, 0x72,
+               0xc1, 0x99, 0x6d, 0x4f, 0x94, 0x2b, 0x11, 0xf2, 0x75, 0x33,
+               0x08, 0x67, 0x08, 0xba, 0xa6, 0x50, 0x2a, 0x1f, 0x6b, 0x0e,
+               0x38, 0x0e, 0x52, 0xea, 0xe0, 0xd8, 0xcd, 0xd0, 0x11, 0x80,
+               0xa7, 0xb9, 0x97, 0xd9, 0x68, 0x1b, 0x21, 0x7c, 0xe2, 0x69,
+               0x8e, 0x14, 0x61, 0x39, 0x49, 0x65, 0xbb, 0xc2, 0x7c, 0x2e, /* 400 */
+               0x8e, 0xb1, 0x83, 0x28, 0x7b, 0xf0, 0xf0, 0x62, 0xdc, 0x35,
+               0x33, 0xea, 0xc9, 0x14, 0x3f, 0x83, 0x60, 0xd3, 0xec, 0x37,
+               0xd4, 0xe3, 0x87, 0x86, 0x2c, 0x43, 0x53, 0x80, 0x3f, 0x39,
+               0x36, 0x4d, 0x1e, 0x73, 0x2a, 0x5c, 0x8c, 0xfb, 0x2d, 0x2e,
+               0x78, 0xd1, 0xf1, 0xe5, 0x8c, 0x89, 0x35, 0x1e, 0x0a, 0xd3,
+               0x07, 0x3c, 0x05, 0x0d, 0x4e, 0xa0, 0x81, 0x6a, 0xee, 0xb5,
+               0x27, 0xef, 0xa6, 0x2e, 0x04, 0x07, 0x01, 0xf7, 0x40, 0x9b,
+               0xbf, 0x7b, 0xf8, 0x3d, 0x0f, 0x68, 0x79, 0xc6, 0x96, 0x16,
+               0x53, 0x5b, 0xb0, 0x8f, 0xb1, 0xbd, 0xd4, 0x28, 0xa7, 0x73,
+               0x37, 0x7b, 0x06, 0xbf, 0x9c, 0xd2, 0xb4, 0x28, 0x82, 0xb4, /* 500 */
+               0xd2, 0x63, 0xf9, 0xb2, 0x56, 0x7c, 0x28, 0x02, 0x4b, 0x91,
+               0x63, 0x03, 0xdc, 0x58, 0x6e, 0xb5, 0x88, 0x2e, 0x76, 0x3a,
+               0x53, 0x4a, 0xd4, 0x22, 0x7c, 0xa5, 0xca, 0xdc, 0x96, 0x14,
+               0xa6, 0xfb, 0x64, 0xe9, 0xa5, 0x09, 0xf2, 0x3e, 0x4d, 0x7e,
+               0x40, 0x01, 0x93, 0x05, 0xe0, 0xad, 0x2e, 0x20, 0x7c, 0x4e,
+               0x17, 0x45, 0xa8, 0x70, 0x7e, 0xd1, 0xc7, 0xbb, 0x10, 0x94,
+               0x81, 0x36, 0x22, 0x62, 0x3f, 0x44, 0xe2, 0xfa, 0x36, 0x9e,
+               0x4e, 0x37, 0x75, 0xdf, 0x8d, 0x6f, 0x15, 0x73, 0x41, 0xf0,
+               0x6f, 0x32, 0xce, 0xa9, 0xfc, 0x06, 0x8f, 0x39, 0xcf, 0xfb,
+               0x34, 0x16, 0xba, 0x74, 0x7d, 0xe6, 0x02, 0x18, 0xd3, 0xe4, /* 600 */
+               0x8c, 0xee, 0xd1, 0xef, 0xdc, 0xd4, 0x59, 0x8d, 0xeb, 0x25,
+               0x7a, 0x09, 0xc8, 0xcc, 0x38, 0x7b, 0xcb, 0x8b, 0x3c, 0xb8,
+               0x77, 0xb4, 0xad, 0x1a, 0x9e, 0x78, 0x20, 0x58, 0x6b, 0x36,
+               0x4d, 0x5d, 0xbb, 0x07, 0x38, 0xba, 0x65, 0xf4, 0xfe, 0x4d,
+               0x86, 0x94, 0xdf, 0x77, 0x52, 0x08, 0xb1, 0x75, 0x07, 0x85,
+               0xaf, 0x77, 0xe9, 0xb3, 0xab, 0x3a, 0x35, 0x30, 0x8a, 0xfd,
+               0x34, 0x99, 0x3b, 0x8f, 0xfc, 0x9a, 0x9e, 0xe1, 0x46, 0xcb,
+               0xbf, 0xf3, 0xbd, 0xb9, 0x9c, 0x8c, 0x4e, 0x29, 0x6d, 0xa3,
+               0x29, 0x5a, 0x1f, 0x88, 0x23, 0xdf, 0x89, 0xa7, 0x88, 0x7c,
+               0x90, 0x75, 0x5a, 0xd5, 0x97, 0x60, 0x17, 0xdf, 0x5e, 0x96, /* 700 */
+               0x04, 0xf8, 0xae, 0x24, 0xd8, 0xf1, 0xa3, 0x3a, 0xa1, 0x40,
+               0x40, 0xd1, 0x45, 0x8e, 0xa5, 0xe5, 0x32, 0x32, 0xcc, 0xcc,
+               0x1c, 0x8a, 0x9f, 0x6d, 0xa0, 0xa8, 0x89, 0x9d, 0x75, 0x2b,
+               0xd2, 0xc2, 0x07, 0xb2, 0xe1, 0x1a, 0xcd, 0x4f, 0x31, 0x80,
+               0xb2, 0x19, 0x5f, 0x06, 0x9d, 0x8e, 0x7a, 0xf1, 0x2e, 0x15,
+               0x1d, 0xbc, 0x4c, 0xb4, 0x75, 0x6f, 0x7b, 0xb7, 0xe4, 0x70,
+               0xd6, 0x0c, 0xe1, 0x27, 0x93, 0xce, 0x4a, 0x63, 0xde, 0xe7,
+               0x48, 0x87, 0x5c, 0x75, 0xae, 0x34, 0x82, 0x5a, 0x71, 0xda,
+               0x1f, 0x93, 0x72, 0x64, 0x7c, 0x7b, 0xda, 0x6a, 0xd7, 0xf9,
+               0xe8, 0x1f, 0x72, 0x67, 0x71, 0x68, 0x6f, 0x85, 0x64, 0x53, /* 800 */
+               0x72, 0x80, 0x8f, 0x1f, 0x7a, 0x15, 0x1c, 0x11, 0xfd, 0x11,
+               0xf7, 0x8c, 0xc4, 0x43, 0x41, 0x60, 0x03, 0xf2, 0x79, 0x19,
+               0x27, 0xdf, 0x98, 0x37, 0xaf, 0x07, 0xb3, 0x8d, 0x0b, 0xee,
+               0x01, 0x85, 0x6f, 0x6d, 0xa9, 0xbd, 0x0e, 0x1f, 0x79, 0xdf,
+               0x21, 0x78, 0x24, 0xbf, 0xc5, 0x09, 0x29, 0x9e, 0x64, 0x0d,
+               0x8e, 0xff, 0xc9, 0xe7, 0xe8, 0x51, 0xd3, 0xe8, 0xfe, 0xa5,
+               0xe0, 0xa9, 0x8d, 0x54, 0x17, 0x3a, 0x34, 0xaf, 0xd9, 0xbd,
+               0xfd, 0xaa, 0x8c, 0x81, 0x79, 0xfb, 0x65, 0x85, 0x67, 0x73,
+               0x32, 0x2d, 0x32, 0x00, 0xcb, 0x3b, 0xe2, 0x0e, 0x43, 0xe8,
+               0x40, 0xf6, 0x42, 0xf2, 0x74, 0x00, 0xa0, 0xfd, 0xe6, 0x96, /* 900 */
+               0x4a, 0x2b, 0xbb, 0xa9, 0xd9, 0x95, 0xc4, 0x42, 0x75, 0x12,
+               0x3f, 0xbb, 0x79, 0x35, 0x9c, 0x91, 0xb5, 0x24, 0x10, 0xc4,
+               0xc5, 0xbd, 0x4a, 0x4c, 0x47, 0xd8, 0x89, 0x92, 0x70, 0xa5,
+               0xe6, 0xc9, 0xed, 0x2e, 0xbd, 0x98, 0xc0, 0x17, 0xb0, 0xad,
+               0x8c, 0x31, 0x95, 0x81, 0x84, 0x86, 0xb1, 0xaa, 0x42, 0xf6,
+               0x2e, 0x10, 0x92, 0x2f, 0x67, 0x73, 0x33, 0xb9, 0x02, 0x43,
+               0x52, 0x24, 0x05, 0xdb, 0x9c, 0xec, 0xc5, 0xf1, 0x3e, 0x78,
+               0x05, 0xcb, 0x04, 0xd6, 0x91, 0xa8, 0x51, 0x9e, 0x48, 0xa8,
+               0xae, 0xa8, 0x8d, 0x13, 0x2d, 0xcd, 0xa1, 0xbe, 0x23, 0x9e,
+               0x00, 0x4c, 0x0a, 0x59, 0xf8, 0x18, 0xb0, 0x0a, 0x06, 0xe2, /* 1000 */
+               0x0a, 0xb4, 0x16, 0x02, 0xa7, 0x21, 0x4c, 0xac, 0x9a, 0x80,
+               0x62, 0x7f, 0xb6, 0xd6, 0xa0, 0x3b, 0x11, 0xd3, 0x30, 0xf9,
+               0x3d, 0xfd, 0x26, 0x27)
 };
index 54b743e4b7eee4f97264e2970161539d97c8203b..261e98e2ad624bd88dd89348eefc7b91db3f104e 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2019 Andreas Steffen
  * Copyright (C) 2015 Martin Willi
  *
  * Copyright (C) secunet Security Networks AG
  */
 
 ke_test_vector_t modp1024_160 = {
-       .method = MODP_1024_160, .priv_len = 20, .pub_len = 128, .shared_len = 128,
-       .priv_a = "\xB9\xA3\xB3\xAE\x8F\xEF\xC1\xA2\x93\x04\x96\x50\x70\x86\xF8\x45"
-                         "\x5D\x48\x94\x3E",
-       .priv_b = "\x93\x92\xC9\xF9\xEB\x6A\x7A\x6A\x90\x22\xF7\xD8\x3E\x72\x23\xC6"
-                         "\x83\x5B\xBD\xDA",
-       .pub_a  = "\x2A\x85\x3B\x3D\x92\x19\x75\x01\xB9\x01\x5B\x2D\xEB\x3E\xD8\x4F"
-                         "\x5E\x02\x1D\xCC\x3E\x52\xF1\x09\xD3\x27\x3D\x2B\x75\x21\x28\x1C"
-                         "\xBA\xBE\x0E\x76\xFF\x57\x27\xFA\x8A\xCC\xE2\x69\x56\xBA\x9A\x1F"
-                         "\xCA\x26\xF2\x02\x28\xD8\x69\x3F\xEB\x10\x84\x1D\x84\xA7\x36\x00"
-                         "\x54\xEC\xE5\xA7\xF5\xB7\xA6\x1A\xD3\xDF\xB3\xC6\x0D\x2E\x43\x10"
-                         "\x6D\x87\x27\xDA\x37\xDF\x9C\xCE\x95\xB4\x78\x75\x5D\x06\xBC\xEA"
-                         "\x8F\x9D\x45\x96\x5F\x75\xA5\xF3\xD1\xDF\x37\x01\x16\x5F\xC9\xE5"
-                         "\x0C\x42\x79\xCE\xB0\x7F\x98\x95\x40\xAE\x96\xD5\xD8\x8E\xD7\x76",
-       .pub_b  = "\x71\x7A\x6C\xB0\x53\x37\x1F\xF4\xA3\xB9\x32\x94\x1C\x1E\x56\x63"
-                         "\xF8\x61\xA1\xD6\xAD\x34\xAE\x66\x57\x6D\xFB\x98\xF6\xC6\xCB\xF9"
-                         "\xDD\xD5\xA5\x6C\x78\x33\xF6\xBC\xFD\xFF\x09\x55\x82\xAD\x86\x8E"
-                         "\x44\x0E\x8D\x09\xFD\x76\x9E\x3C\xEC\xCD\xC3\xD3\xB1\xE4\xCF\xA0"
-                         "\x57\x77\x6C\xAA\xF9\x73\x9B\x6A\x9F\xEE\x8E\x74\x11\xF8\xD6\xDA"
-                         "\xC0\x9D\x6A\x4E\xDB\x46\xCC\x2B\x5D\x52\x03\x09\x0E\xAE\x61\x26"
-                         "\x31\x1E\x53\xFD\x2C\x14\xB5\x74\xE6\xA3\x10\x9A\x3D\xA1\xBE\x41"
-                         "\xBD\xCE\xAA\x18\x6F\x5C\xE0\x67\x16\xA2\xB6\xA0\x7B\x3C\x33\xFE",
-       .shared = "\x5C\x80\x4F\x45\x4D\x30\xD9\xC4\xDF\x85\x27\x1F\x93\x52\x8C\x91"
-                         "\xDF\x6B\x48\xAB\x5F\x80\xB3\xB5\x9C\xAA\xC1\xB2\x8F\x8A\xCB\xA9"
-                         "\xCD\x3E\x39\xF3\xCB\x61\x45\x25\xD9\x52\x1D\x2E\x64\x4C\x53\xB8"
-                         "\x07\xB8\x10\xF3\x40\x06\x2F\x25\x7D\x7D\x6F\xBF\xE8\xD5\xE8\xF0"
-                         "\x72\xE9\xB6\xE9\xAF\xDA\x94\x13\xEA\xFB\x2E\x8B\x06\x99\xB1\xFB"
-                         "\x5A\x0C\xAC\xED\xDE\xAE\xAD\x7E\x9C\xFB\xB3\x6A\xE2\xB4\x20\x83"
-                         "\x5B\xD8\x3A\x19\xFB\x0B\x5E\x96\xBF\x8F\xA4\xD0\x9E\x34\x55\x25"
-                         "\x16\x7E\xCD\x91\x55\x41\x6F\x46\xF4\x08\xED\x31\xB6\x3C\x6E\x6D",
+       .method = MODP_1024_160,
+       .seed = chunk_from_chars(
+               0xB9, 0xA3, 0xB3, 0xAE, 0x8F, 0xEF, 0xC1, 0xA2, 0x93, 0x04,
+               0x96, 0x50, 0x70, 0x86, 0xF8, 0x45, 0x5D, 0x48, 0x94, 0x3E, /* - */
+               0x93, 0x92, 0xC9, 0xF9, 0xEB, 0x6A, 0x7A, 0x6A, 0x90, 0x22,
+               0xF7, 0xD8, 0x3E, 0x72, 0x23, 0xC6, 0x83, 0x5B, 0xBD, 0xDA),
+       .pub_i = chunk_from_chars(
+               0x2A, 0x85, 0x3B, 0x3D, 0x92, 0x19, 0x75, 0x01, 0xB9, 0x01,
+               0x5B, 0x2D, 0xEB, 0x3E, 0xD8, 0x4F, 0x5E, 0x02, 0x1D, 0xCC,
+               0x3E, 0x52, 0xF1, 0x09, 0xD3, 0x27, 0x3D, 0x2B, 0x75, 0x21,
+               0x28, 0x1C, 0xBA, 0xBE, 0x0E, 0x76, 0xFF, 0x57, 0x27, 0xFA,
+               0x8A, 0xCC, 0xE2, 0x69, 0x56, 0xBA, 0x9A, 0x1F, 0xCA, 0x26,
+               0xF2, 0x02, 0x28, 0xD8, 0x69, 0x3F, 0xEB, 0x10, 0x84, 0x1D,
+               0x84, 0xA7, 0x36, 0x00, 0x54, 0xEC, 0xE5, 0xA7, 0xF5, 0xB7,
+               0xA6, 0x1A, 0xD3, 0xDF, 0xB3, 0xC6, 0x0D, 0x2E, 0x43, 0x10,
+               0x6D, 0x87, 0x27, 0xDA, 0x37, 0xDF, 0x9C, 0xCE, 0x95, 0xB4,
+               0x78, 0x75, 0x5D, 0x06, 0xBC, 0xEA, 0x8F, 0x9D, 0x45, 0x96, /* 100 */
+               0x5F, 0x75, 0xA5, 0xF3, 0xD1, 0xDF, 0x37, 0x01, 0x16, 0x5F,
+               0xC9, 0xE5, 0x0C, 0x42, 0x79, 0xCE, 0xB0, 0x7F, 0x98, 0x95,
+               0x40, 0xAE, 0x96, 0xD5, 0xD8, 0x8E, 0xD7, 0x76),
+       .pub_r = chunk_from_chars(
+               0x71, 0x7A, 0x6C, 0xB0, 0x53, 0x37, 0x1F, 0xF4, 0xA3, 0xB9,
+               0x32, 0x94, 0x1C, 0x1E, 0x56, 0x63, 0xF8, 0x61, 0xA1, 0xD6,
+               0xAD, 0x34, 0xAE, 0x66, 0x57, 0x6D, 0xFB, 0x98, 0xF6, 0xC6,
+               0xCB, 0xF9, 0xDD, 0xD5, 0xA5, 0x6C, 0x78, 0x33, 0xF6, 0xBC,
+               0xFD, 0xFF, 0x09, 0x55, 0x82, 0xAD, 0x86, 0x8E, 0x44, 0x0E,
+               0x8D, 0x09, 0xFD, 0x76, 0x9E, 0x3C, 0xEC, 0xCD, 0xC3, 0xD3,
+               0xB1, 0xE4, 0xCF, 0xA0, 0x57, 0x77, 0x6C, 0xAA, 0xF9, 0x73,
+               0x9B, 0x6A, 0x9F, 0xEE, 0x8E, 0x74, 0x11, 0xF8, 0xD6, 0xDA,
+               0xC0, 0x9D, 0x6A, 0x4E, 0xDB, 0x46, 0xCC, 0x2B, 0x5D, 0x52,
+               0x03, 0x09, 0x0E, 0xAE, 0x61, 0x26, 0x31, 0x1E, 0x53, 0xFD, /* 100 */
+               0x2C, 0x14, 0xB5, 0x74, 0xE6, 0xA3, 0x10, 0x9A, 0x3D, 0xA1,
+               0xBE, 0x41, 0xBD, 0xCE, 0xAA, 0x18, 0x6F, 0x5C, 0xE0, 0x67,
+               0x16, 0xA2, 0xB6, 0xA0, 0x7B, 0x3C, 0x33, 0xFE),
+       .shared = chunk_from_chars(
+               0x5C, 0x80, 0x4F, 0x45, 0x4D, 0x30, 0xD9, 0xC4, 0xDF, 0x85,
+               0x27, 0x1F, 0x93, 0x52, 0x8C, 0x91, 0xDF, 0x6B, 0x48, 0xAB,
+               0x5F, 0x80, 0xB3, 0xB5, 0x9C, 0xAA, 0xC1, 0xB2, 0x8F, 0x8A,
+               0xCB, 0xA9, 0xCD, 0x3E, 0x39, 0xF3, 0xCB, 0x61, 0x45, 0x25,
+               0xD9, 0x52, 0x1D, 0x2E, 0x64, 0x4C, 0x53, 0xB8, 0x07, 0xB8,
+               0x10, 0xF3, 0x40, 0x06, 0x2F, 0x25, 0x7D, 0x7D, 0x6F, 0xBF,
+               0xE8, 0xD5, 0xE8, 0xF0, 0x72, 0xE9, 0xB6, 0xE9, 0xAF, 0xDA,
+               0x94, 0x13, 0xEA, 0xFB, 0x2E, 0x8B, 0x06, 0x99, 0xB1, 0xFB,
+               0x5A, 0x0C, 0xAC, 0xED, 0xDE, 0xAE, 0xAD, 0x7E, 0x9C, 0xFB,
+               0xB3, 0x6A, 0xE2, 0xB4, 0x20, 0x83, 0x5B, 0xD8, 0x3A, 0x19, /* 100 */
+               0xFB, 0x0B, 0x5E, 0x96, 0xBF, 0x8F, 0xA4, 0xD0, 0x9E, 0x34,
+               0x55, 0x25, 0x16, 0x7E, 0xCD, 0x91, 0x55, 0x41, 0x6F, 0x46,
+               0xF4, 0x08, 0xED, 0x31, 0xB6, 0x3C, 0x6E, 0x6D)
 };
 
 ke_test_vector_t modp2048_224 = {
-       .method = MODP_2048_224, .priv_len = 28, .pub_len = 256, .shared_len = 256,
-       .priv_a = "\x22\xe6\x26\x01\xdb\xff\xd0\x67\x08\xa6\x80\xf7\x47\xf3\x61\xf7"
-                         "\x6d\x8f\x4f\x72\x1a\x05\x48\xe4\x83\x29\x4b\x0c",
-       .priv_b = "\x4f\xf3\xbc\x96\xc7\xfc\x6a\x6d\x71\xd3\xb3\x63\x80\x0a\x7c\xdf"
-                         "\xef\x6f\xc4\x1b\x44\x17\xea\x15\x35\x3b\x75\x90",
-       .pub_a  = "\x1b\x3a\x63\x45\x1b\xd8\x86\xe6\x99\xe6\x7b\x49\x4e\x28\x8b\xd7"
-                         "\xf8\xe0\xd3\x70\xba\xdd\xa7\xa0\xef\xd2\xfd\xe7\xd8\xf6\x61\x45"
-                         "\xcc\x9f\x28\x04\x19\x97\x5e\xb8\x08\x87\x7c\x8a\x4c\x0c\x8e\x0b"
-                         "\xd4\x8d\x4a\x54\x01\xeb\x1e\x87\x76\xbf\xee\xe1\x34\xc0\x38\x31"
-                         "\xac\x27\x3c\xd9\xd6\x35\xab\x0c\xe0\x06\xa4\x2a\x88\x7e\x3f\x52"
-                         "\xfb\x87\x66\xb6\x50\xf3\x80\x78\xbc\x8e\xe8\x58\x0c\xef\xe2\x43"
-                         "\x96\x8c\xfc\x4f\x8d\xc3\xdb\x08\x45\x54\x17\x1d\x41\xbf\x2e\x86"
-                         "\x1b\x7b\xb4\xd6\x9d\xd0\xe0\x1e\xa3\x87\xcb\xaa\x5c\xa6\x72\xaf"
-                         "\xcb\xe8\xbd\xb9\xd6\x2d\x4c\xe1\x5f\x17\xdd\x36\xf9\x1e\xd1\xee"
-                         "\xdd\x65\xca\x4a\x06\x45\x5c\xb9\x4c\xd4\x0a\x52\xec\x36\x0e\x84"
-                         "\xb3\xc9\x26\xe2\x2c\x43\x80\xa3\xbf\x30\x9d\x56\x84\x97\x68\xb7"
-                         "\xf5\x2c\xfd\xf6\x55\xfd\x05\x3a\x7e\xf7\x06\x97\x9e\x7e\x58\x06"
-                         "\xb1\x7d\xfa\xe5\x3a\xd2\xa5\xbc\x56\x8e\xbb\x52\x9a\x7a\x61\xd6"
-                         "\x8d\x25\x6f\x8f\xc9\x7c\x07\x4a\x86\x1d\x82\x7e\x2e\xbc\x8c\x61"
-                         "\x34\x55\x31\x15\xb7\x0e\x71\x03\x92\x0a\xa1\x6d\x85\xe5\x2b\xcb"
-                         "\xab\x8d\x78\x6a\x68\x17\x8f\xa8\xff\x7c\x2f\x5c\x71\x64\x8d\x6f",
-       .pub_b  = "\x4d\xce\xe9\x92\xa9\x76\x2a\x13\xf2\xf8\x38\x44\xad\x3d\x77\xee"
-                         "\x0e\x31\xc9\x71\x8b\x3d\xb6\xc2\x03\x5d\x39\x61\x18\x2c\x3e\x0b"
-                         "\xa2\x47\xec\x41\x82\xd7\x60\xcd\x48\xd9\x95\x99\x97\x06\x22\xa1"
-                         "\x88\x1b\xba\x2d\xc8\x22\x93\x9c\x78\xc3\x91\x2c\x66\x61\xfa\x54"
-                         "\x38\xb2\x07\x66\x22\x2b\x75\xe2\x4c\x2e\x3a\xd0\xc7\x28\x72\x36"
-                         "\x12\x95\x25\xee\x15\xb5\xdd\x79\x98\xaa\x04\xc4\xa9\x69\x6c\xac"
-                         "\xd7\x17\x20\x83\xa9\x7a\x81\x66\x4e\xad\x2c\x47\x9e\x44\x4e\x4c"
-                         "\x06\x54\xcc\x19\xe2\x8d\x77\x03\xce\xe8\xda\xcd\x61\x26\xf5\xd6"
-                         "\x65\xec\x52\xc6\x72\x55\xdb\x92\x01\x4b\x03\x7e\xb6\x21\xa2\xac"
-                         "\x8e\x36\x5d\xe0\x71\xff\xc1\x40\x0a\xcf\x07\x7a\x12\x91\x3d\xd8"
-                         "\xde\x89\x47\x34\x37\xab\x7b\xa3\x46\x74\x3c\x1b\x21\x5d\xd9\xc1"
-                         "\x21\x64\xa7\xe4\x05\x31\x18\xd1\x99\xbe\xc8\xef\x6f\xc5\x61\x17"
-                         "\x0c\x84\xc8\x7d\x10\xee\x9a\x67\x4a\x1f\xa8\xff\xe1\x3b\xdf\xba"
-                         "\x1d\x44\xde\x48\x94\x6d\x68\xdc\x0c\xdd\x77\x76\x35\xa7\xab\x5b"
-                         "\xfb\x1e\x4b\xb7\xb8\x56\xf9\x68\x27\x73\x4c\x18\x41\x38\xe9\x15"
-                         "\xd9\xc3\x00\x2e\xbc\xe5\x31\x20\x54\x6a\x7e\x20\x02\x14\x2b\x6c",
-       .shared = "\x34\xd9\xbd\xdc\x1b\x42\x17\x6c\x31\x3f\xea\x03\x4c\x21\x03\x4d"
-                         "\x07\x4a\x63\x13\xbb\x4e\xcd\xb3\x70\x3f\xff\x42\x45\x67\xa4\x6b"
-                         "\xdf\x75\x53\x0e\xde\x0a\x9d\xa5\x22\x9d\xe7\xd7\x67\x32\x28\x6c"
-                         "\xbc\x0f\x91\xda\x4c\x3c\x85\x2f\xc0\x99\xc6\x79\x53\x1d\x94\xc7"
-                         "\x8a\xb0\x3d\x9d\xec\xb0\xa4\xe4\xca\x8b\x2b\xb4\x59\x1c\x40\x21"
-                         "\xcf\x8c\xe3\xa2\x0a\x54\x1d\x33\x99\x40\x17\xd0\x20\x0a\xe2\xc9"
-                         "\x51\x6e\x2f\xf5\x14\x57\x79\x26\x9e\x86\x2b\x0f\xb4\x74\xa2\xd5"
-                         "\x6d\xc3\x1e\xd5\x69\xa7\x70\x0b\x4c\x4a\xb1\x6b\x22\xa4\x55\x13"
-                         "\x53\x1e\xf5\x23\xd7\x12\x12\x07\x7b\x5a\x16\x9b\xde\xff\xad\x7a"
-                         "\xd9\x60\x82\x84\xc7\x79\x5b\x6d\x5a\x51\x83\xb8\x70\x66\xde\x17"
-                         "\xd8\xd6\x71\xc9\xeb\xd8\xec\x89\x54\x4d\x45\xec\x06\x15\x93\xd4"
-                         "\x42\xc6\x2a\xb9\xce\x3b\x1c\xb9\x94\x3a\x1d\x23\xa5\xea\x3b\xcf"
-                         "\x21\xa0\x14\x71\xe6\x7e\x00\x3e\x7f\x8a\x69\xc7\x28\xbe\x49\x0b"
-                         "\x2f\xc8\x8c\xfe\xb9\x2d\xb6\xa2\x15\xe5\xd0\x3c\x17\xc4\x64\xc9"
-                         "\xac\x1a\x46\xe2\x03\xe1\x3f\x95\x29\x95\xfb\x03\xc6\x9d\x3c\xc4"
-                         "\x7f\xcb\x51\x0b\x69\x98\xff\xd3\xaa\x6d\xe7\x3c\xf9\xf6\x38\x69",
+       .method = MODP_2048_224,
+       .seed = chunk_from_chars(
+               0x22, 0xe6, 0x26, 0x01, 0xdb, 0xff, 0xd0, 0x67, 0x08, 0xa6,
+               0x80, 0xf7, 0x47, 0xf3, 0x61, 0xf7, 0x6d, 0x8f, 0x4f, 0x72,
+               0x1a, 0x05, 0x48, 0xe4, 0x83, 0x29, 0x4b, 0x0c, /* - */
+               0x4f, 0xf3, 0xbc, 0x96, 0xc7, 0xfc, 0x6a, 0x6d, 0x71, 0xd3,
+               0xb3, 0x63, 0x80, 0x0a, 0x7c, 0xdf, 0xef, 0x6f, 0xc4, 0x1b,
+               0x44, 0x17, 0xea, 0x15, 0x35, 0x3b, 0x75, 0x90),
+       .pub_i = chunk_from_chars(
+               0x1b, 0x3a, 0x63, 0x45, 0x1b, 0xd8, 0x86, 0xe6, 0x99, 0xe6,
+               0x7b, 0x49, 0x4e, 0x28, 0x8b, 0xd7, 0xf8, 0xe0, 0xd3, 0x70,
+               0xba, 0xdd, 0xa7, 0xa0, 0xef, 0xd2, 0xfd, 0xe7, 0xd8, 0xf6,
+               0x61, 0x45, 0xcc, 0x9f, 0x28, 0x04, 0x19, 0x97, 0x5e, 0xb8,
+               0x08, 0x87, 0x7c, 0x8a, 0x4c, 0x0c, 0x8e, 0x0b, 0xd4, 0x8d,
+               0x4a, 0x54, 0x01, 0xeb, 0x1e, 0x87, 0x76, 0xbf, 0xee, 0xe1,
+               0x34, 0xc0, 0x38, 0x31, 0xac, 0x27, 0x3c, 0xd9, 0xd6, 0x35,
+               0xab, 0x0c, 0xe0, 0x06, 0xa4, 0x2a, 0x88, 0x7e, 0x3f, 0x52,
+               0xfb, 0x87, 0x66, 0xb6, 0x50, 0xf3, 0x80, 0x78, 0xbc, 0x8e,
+               0xe8, 0x58, 0x0c, 0xef, 0xe2, 0x43, 0x96, 0x8c, 0xfc, 0x4f, /* 100 */
+               0x8d, 0xc3, 0xdb, 0x08, 0x45, 0x54, 0x17, 0x1d, 0x41, 0xbf,
+               0x2e, 0x86, 0x1b, 0x7b, 0xb4, 0xd6, 0x9d, 0xd0, 0xe0, 0x1e,
+               0xa3, 0x87, 0xcb, 0xaa, 0x5c, 0xa6, 0x72, 0xaf, 0xcb, 0xe8,
+               0xbd, 0xb9, 0xd6, 0x2d, 0x4c, 0xe1, 0x5f, 0x17, 0xdd, 0x36,
+               0xf9, 0x1e, 0xd1, 0xee, 0xdd, 0x65, 0xca, 0x4a, 0x06, 0x45,
+               0x5c, 0xb9, 0x4c, 0xd4, 0x0a, 0x52, 0xec, 0x36, 0x0e, 0x84,
+               0xb3, 0xc9, 0x26, 0xe2, 0x2c, 0x43, 0x80, 0xa3, 0xbf, 0x30,
+               0x9d, 0x56, 0x84, 0x97, 0x68, 0xb7, 0xf5, 0x2c, 0xfd, 0xf6,
+               0x55, 0xfd, 0x05, 0x3a, 0x7e, 0xf7, 0x06, 0x97, 0x9e, 0x7e,
+               0x58, 0x06, 0xb1, 0x7d, 0xfa, 0xe5, 0x3a, 0xd2, 0xa5, 0xbc, /* 200 */
+               0x56, 0x8e, 0xbb, 0x52, 0x9a, 0x7a, 0x61, 0xd6, 0x8d, 0x25,
+               0x6f, 0x8f, 0xc9, 0x7c, 0x07, 0x4a, 0x86, 0x1d, 0x82, 0x7e,
+               0x2e, 0xbc, 0x8c, 0x61, 0x34, 0x55, 0x31, 0x15, 0xb7, 0x0e,
+               0x71, 0x03, 0x92, 0x0a, 0xa1, 0x6d, 0x85, 0xe5, 0x2b, 0xcb,
+               0xab, 0x8d, 0x78, 0x6a, 0x68, 0x17, 0x8f, 0xa8, 0xff, 0x7c,
+               0x2f, 0x5c, 0x71, 0x64, 0x8d, 0x6f),
+       .pub_r = chunk_from_chars(
+               0x4d, 0xce, 0xe9, 0x92, 0xa9, 0x76, 0x2a, 0x13, 0xf2, 0xf8,
+               0x38, 0x44, 0xad, 0x3d, 0x77, 0xee, 0x0e, 0x31, 0xc9, 0x71,
+               0x8b, 0x3d, 0xb6, 0xc2, 0x03, 0x5d, 0x39, 0x61, 0x18, 0x2c,
+               0x3e, 0x0b, 0xa2, 0x47, 0xec, 0x41, 0x82, 0xd7, 0x60, 0xcd,
+               0x48, 0xd9, 0x95, 0x99, 0x97, 0x06, 0x22, 0xa1, 0x88, 0x1b,
+               0xba, 0x2d, 0xc8, 0x22, 0x93, 0x9c, 0x78, 0xc3, 0x91, 0x2c,
+               0x66, 0x61, 0xfa, 0x54, 0x38, 0xb2, 0x07, 0x66, 0x22, 0x2b,
+               0x75, 0xe2, 0x4c, 0x2e, 0x3a, 0xd0, 0xc7, 0x28, 0x72, 0x36,
+               0x12, 0x95, 0x25, 0xee, 0x15, 0xb5, 0xdd, 0x79, 0x98, 0xaa,
+               0x04, 0xc4, 0xa9, 0x69, 0x6c, 0xac, 0xd7, 0x17, 0x20, 0x83, /* 100 */
+               0xa9, 0x7a, 0x81, 0x66, 0x4e, 0xad, 0x2c, 0x47, 0x9e, 0x44,
+               0x4e, 0x4c, 0x06, 0x54, 0xcc, 0x19, 0xe2, 0x8d, 0x77, 0x03,
+               0xce, 0xe8, 0xda, 0xcd, 0x61, 0x26, 0xf5, 0xd6, 0x65, 0xec,
+               0x52, 0xc6, 0x72, 0x55, 0xdb, 0x92, 0x01, 0x4b, 0x03, 0x7e,
+               0xb6, 0x21, 0xa2, 0xac, 0x8e, 0x36, 0x5d, 0xe0, 0x71, 0xff,
+               0xc1, 0x40, 0x0a, 0xcf, 0x07, 0x7a, 0x12, 0x91, 0x3d, 0xd8,
+               0xde, 0x89, 0x47, 0x34, 0x37, 0xab, 0x7b, 0xa3, 0x46, 0x74,
+               0x3c, 0x1b, 0x21, 0x5d, 0xd9, 0xc1, 0x21, 0x64, 0xa7, 0xe4,
+               0x05, 0x31, 0x18, 0xd1, 0x99, 0xbe, 0xc8, 0xef, 0x6f, 0xc5,
+               0x61, 0x17, 0x0c, 0x84, 0xc8, 0x7d, 0x10, 0xee, 0x9a, 0x67, /* 200 */
+               0x4a, 0x1f, 0xa8, 0xff, 0xe1, 0x3b, 0xdf, 0xba, 0x1d, 0x44,
+               0xde, 0x48, 0x94, 0x6d, 0x68, 0xdc, 0x0c, 0xdd, 0x77, 0x76,
+               0x35, 0xa7, 0xab, 0x5b, 0xfb, 0x1e, 0x4b, 0xb7, 0xb8, 0x56,
+               0xf9, 0x68, 0x27, 0x73, 0x4c, 0x18, 0x41, 0x38, 0xe9, 0x15,
+               0xd9, 0xc3, 0x00, 0x2e, 0xbc, 0xe5, 0x31, 0x20, 0x54, 0x6a,
+               0x7e, 0x20, 0x02, 0x14, 0x2b, 0x6c),
+       .shared = chunk_from_chars(
+               0x34, 0xd9, 0xbd, 0xdc, 0x1b, 0x42, 0x17, 0x6c, 0x31, 0x3f,
+               0xea, 0x03, 0x4c, 0x21, 0x03, 0x4d, 0x07, 0x4a, 0x63, 0x13,
+               0xbb, 0x4e, 0xcd, 0xb3, 0x70, 0x3f, 0xff, 0x42, 0x45, 0x67,
+               0xa4, 0x6b, 0xdf, 0x75, 0x53, 0x0e, 0xde, 0x0a, 0x9d, 0xa5,
+               0x22, 0x9d, 0xe7, 0xd7, 0x67, 0x32, 0x28, 0x6c, 0xbc, 0x0f,
+               0x91, 0xda, 0x4c, 0x3c, 0x85, 0x2f, 0xc0, 0x99, 0xc6, 0x79,
+               0x53, 0x1d, 0x94, 0xc7, 0x8a, 0xb0, 0x3d, 0x9d, 0xec, 0xb0,
+               0xa4, 0xe4, 0xca, 0x8b, 0x2b, 0xb4, 0x59, 0x1c, 0x40, 0x21,
+               0xcf, 0x8c, 0xe3, 0xa2, 0x0a, 0x54, 0x1d, 0x33, 0x99, 0x40,
+               0x17, 0xd0, 0x20, 0x0a, 0xe2, 0xc9, 0x51, 0x6e, 0x2f, 0xf5, /* 100 */
+               0x14, 0x57, 0x79, 0x26, 0x9e, 0x86, 0x2b, 0x0f, 0xb4, 0x74,
+               0xa2, 0xd5, 0x6d, 0xc3, 0x1e, 0xd5, 0x69, 0xa7, 0x70, 0x0b,
+               0x4c, 0x4a, 0xb1, 0x6b, 0x22, 0xa4, 0x55, 0x13, 0x53, 0x1e,
+               0xf5, 0x23, 0xd7, 0x12, 0x12, 0x07, 0x7b, 0x5a, 0x16, 0x9b,
+               0xde, 0xff, 0xad, 0x7a, 0xd9, 0x60, 0x82, 0x84, 0xc7, 0x79,
+               0x5b, 0x6d, 0x5a, 0x51, 0x83, 0xb8, 0x70, 0x66, 0xde, 0x17,
+               0xd8, 0xd6, 0x71, 0xc9, 0xeb, 0xd8, 0xec, 0x89, 0x54, 0x4d,
+               0x45, 0xec, 0x06, 0x15, 0x93, 0xd4, 0x42, 0xc6, 0x2a, 0xb9,
+               0xce, 0x3b, 0x1c, 0xb9, 0x94, 0x3a, 0x1d, 0x23, 0xa5, 0xea,
+               0x3b, 0xcf, 0x21, 0xa0, 0x14, 0x71, 0xe6, 0x7e, 0x00, 0x3e, /* 200 */
+               0x7f, 0x8a, 0x69, 0xc7, 0x28, 0xbe, 0x49, 0x0b, 0x2f, 0xc8,
+               0x8c, 0xfe, 0xb9, 0x2d, 0xb6, 0xa2, 0x15, 0xe5, 0xd0, 0x3c,
+               0x17, 0xc4, 0x64, 0xc9, 0xac, 0x1a, 0x46, 0xe2, 0x03, 0xe1,
+               0x3f, 0x95, 0x29, 0x95, 0xfb, 0x03, 0xc6, 0x9d, 0x3c, 0xc4,
+               0x7f, 0xcb, 0x51, 0x0b, 0x69, 0x98, 0xff, 0xd3, 0xaa, 0x6d,
+               0xe7, 0x3c, 0xf9, 0xf6, 0x38, 0x69)
 };
 
 ke_test_vector_t modp2048_256 = {
-       .method = MODP_2048_256, .priv_len = 32, .pub_len = 256, .shared_len = 256,
-       .priv_a = "\x08\x81\x38\x2c\xdb\x87\x66\x0c\x6d\xc1\x3e\x61\x49\x38\xd5\xb9"
-                         "\xc8\xb2\xf2\x48\x58\x1c\xc5\xe3\x1b\x35\x45\x43\x97\xfc\xe5\x0e",
-       .priv_b = "\x7d\x62\xa7\xe3\xef\x36\xde\x61\x7b\x13\xd1\xaf\xb8\x2c\x78\x0d"
-                         "\x83\xa2\x3b\xd4\xee\x67\x05\x64\x51\x21\xf3\x71\xf5\x46\xa5\x3d",
-       .pub_a  = "\x2e\x93\x80\xc8\x32\x3a\xf9\x75\x45\xbc\x49\x41\xde\xb0\xec\x37"
-                         "\x42\xc6\x2f\xe0\xec\xe8\x24\xa6\xab\xdb\xe6\x6c\x59\xbe\xe0\x24"
-                         "\x29\x11\xbf\xb9\x67\x23\x5c\xeb\xa3\x5a\xe1\x3e\x4e\xc7\x52\xbe"
-                         "\x63\x0b\x92\xdc\x4b\xde\x28\x47\xa9\xc6\x2c\xb8\x15\x27\x45\x42"
-                         "\x1f\xb7\xeb\x60\xa6\x3c\x0f\xe9\x15\x9f\xcc\xe7\x26\xce\x7c\xd8"
-                         "\x52\x3d\x74\x50\x66\x7e\xf8\x40\xe4\x91\x91\x21\xeb\x5f\x01\xc8"
-                         "\xc9\xb0\xd3\xd6\x48\xa9\x3b\xfb\x75\x68\x9e\x82\x44\xac\x13\x4a"
-                         "\xf5\x44\x71\x1c\xe7\x9a\x02\xdc\xc3\x42\x26\x68\x47\x80\xdd\xdc"
-                         "\xb4\x98\x59\x41\x06\xc3\x7f\x5b\xc7\x98\x56\x48\x7a\xf5\xab\x02"
-                         "\x2a\x2e\x5e\x42\xf0\x98\x97\xc1\xa8\x5a\x11\xea\x02\x12\xaf\x04"
-                         "\xd9\xb4\xce\xbc\x93\x7c\x3c\x1a\x3e\x15\xa8\xa0\x34\x2e\x33\x76"
-                         "\x15\xc8\x4e\x7f\xe3\xb8\xb9\xb8\x7f\xb1\xe7\x3a\x15\xaf\x12\xa3"
-                         "\x0d\x74\x6e\x06\xdf\xc3\x4f\x29\x0d\x79\x7c\xe5\x1a\xa1\x3a\xa7"
-                         "\x85\xbf\x66\x58\xaf\xf5\xe4\xb0\x93\x00\x3c\xbe\xaf\x66\x5b\x3c"
-                         "\x2e\x11\x3a\x3a\x4e\x90\x52\x69\x34\x1d\xc0\x71\x14\x26\x68\x5f"
-                         "\x4e\xf3\x7e\x86\x8a\x81\x26\xff\x3f\x22\x79\xb5\x7c\xa6\x7e\x29",
-       .pub_b  = "\x57\x5f\x03\x51\xbd\x2b\x1b\x81\x74\x48\xbd\xf8\x7a\x6c\x36\x2c"
-                         "\x1e\x28\x9d\x39\x03\xa3\x0b\x98\x32\xc5\x74\x1f\xa2\x50\x36\x3e"
-                         "\x7a\xcb\xc7\xf7\x7f\x3d\xac\xbc\x1f\x13\x1a\xdd\x8e\x03\x36\x7e"
-                         "\xff\x8f\xbb\xb3\xe1\xc5\x78\x44\x24\x80\x9b\x25\xaf\xe4\xd2\x26"
-                         "\x2a\x1a\x6f\xd2\xfa\xb6\x41\x05\xca\x30\xa6\x74\xe0\x7f\x78\x09"
-                         "\x85\x20\x88\x63\x2f\xc0\x49\x23\x37\x91\xad\x4e\xdd\x08\x3a\x97"
-                         "\x8b\x88\x3e\xe6\x18\xbc\x5e\x0d\xd0\x47\x41\x5f\x2d\x95\xe6\x83"
-                         "\xcf\x14\x82\x6b\x5f\xbe\x10\xd3\xce\x41\xc6\xc1\x20\xc7\x8a\xb2"
-                         "\x00\x08\xc6\x98\xbf\x7f\x0b\xca\xb9\xd7\xf4\x07\xbe\xd0\xf4\x3a"
-                         "\xfb\x29\x70\xf5\x7f\x8d\x12\x04\x39\x63\xe6\x6d\xdd\x32\x0d\x59"
-                         "\x9a\xd9\x93\x6c\x8f\x44\x13\x7c\x08\xb1\x80\xec\x5e\x98\x5c\xeb"
-                         "\xe1\x86\xf3\xd5\x49\x67\x7e\x80\x60\x73\x31\xee\x17\xaf\x33\x80"
-                         "\xa7\x25\xb0\x78\x23\x17\xd7\xdd\x43\xf5\x9d\x7a\xf9\x56\x8a\x9b"
-                         "\xb6\x3a\x84\xd3\x65\xf9\x22\x44\xed\x12\x09\x88\x21\x93\x02\xf4"
-                         "\x29\x24\xc7\xca\x90\xb8\x9d\x24\xf7\x1b\x0a\xb6\x97\x82\x3d\x7d"
-                         "\xeb\x1a\xff\x5b\x0e\x8e\x4a\x45\xd4\x9f\x7f\x53\x75\x7e\x19\x13",
-       .shared = "\x86\xc7\x0b\xf8\xd0\xbb\x81\xbb\x01\x07\x8a\x17\x21\x9c\xb7\xd2"
-                         "\x72\x03\xdb\x2a\x19\xc8\x77\xf1\xd1\xf1\x9f\xd7\xd7\x7e\xf2\x25"
-                         "\x46\xa6\x8f\x00\x5a\xd5\x2d\xc8\x45\x53\xb7\x8f\xc6\x03\x30\xbe"
-                         "\x51\xea\x7c\x06\x72\xca\xc1\x51\x5e\x4b\x35\xc0\x47\xb9\xa5\x51"
-                         "\xb8\x8f\x39\xdc\x26\xda\x14\xa0\x9e\xf7\x47\x74\xd4\x7c\x76\x2d"
-                         "\xd1\x77\xf9\xed\x5b\xc2\xf1\x1e\x52\xc8\x79\xbd\x95\x09\x85\x04"
-                         "\xcd\x9e\xec\xd8\xa8\xf9\xb3\xef\xbd\x1f\x00\x8a\xc5\x85\x30\x97"
-                         "\xd9\xd1\x83\x7f\x2b\x18\xf7\x7c\xd7\xbe\x01\xaf\x80\xa7\xc7\xb5"
-                         "\xea\x3c\xa5\x4c\xc0\x2d\x0c\x11\x6f\xee\x3f\x95\xbb\x87\x39\x93"
-                         "\x85\x87\x5d\x7e\x86\x74\x7e\x67\x6e\x72\x89\x38\xac\xbf\xf7\x09"
-                         "\x8e\x05\xbe\x4d\xcf\xb2\x40\x52\xb8\x3a\xef\xfb\x14\x78\x3f\x02"
-                         "\x9a\xdb\xde\x7f\x53\xfa\xe9\x20\x84\x22\x40\x90\xe0\x07\xce\xe9"
-                         "\x4d\x4b\xf2\xba\xce\x9f\xfd\x4b\x57\xd2\xaf\x7c\x72\x4d\x0c\xaa"
-                         "\x19\xbf\x05\x01\xf6\xf1\x7b\x4a\xa1\x0f\x42\x5e\x3e\xa7\x60\x80"
-                         "\xb4\xb9\xd6\xb3\xce\xfe\xa1\x15\xb2\xce\xb8\x78\x9b\xb8\xa3\xb0"
-                         "\xea\x87\xfe\xbe\x63\xb6\xc8\xf8\x46\xec\x6d\xb0\xc2\x6c\x5d\x7c",
+       .method = MODP_2048_256,
+       .seed = chunk_from_chars(
+               0x08, 0x81, 0x38, 0x2c, 0xdb, 0x87, 0x66, 0x0c, 0x6d, 0xc1,
+               0x3e, 0x61, 0x49, 0x38, 0xd5, 0xb9, 0xc8, 0xb2, 0xf2, 0x48,
+               0x58, 0x1c, 0xc5, 0xe3, 0x1b, 0x35, 0x45, 0x43, 0x97, 0xfc,
+               0xe5, 0x0e, /* - */
+               0x7d, 0x62, 0xa7, 0xe3, 0xef, 0x36, 0xde, 0x61, 0x7b, 0x13,
+               0xd1, 0xaf, 0xb8, 0x2c, 0x78, 0x0d, 0x83, 0xa2, 0x3b, 0xd4,
+               0xee, 0x67, 0x05, 0x64, 0x51, 0x21, 0xf3, 0x71, 0xf5, 0x46,
+               0xa5, 0x3d),
+       .pub_i = chunk_from_chars(
+               0x2e, 0x93, 0x80, 0xc8, 0x32, 0x3a, 0xf9, 0x75, 0x45, 0xbc,
+               0x49, 0x41, 0xde, 0xb0, 0xec, 0x37, 0x42, 0xc6, 0x2f, 0xe0,
+               0xec, 0xe8, 0x24, 0xa6, 0xab, 0xdb, 0xe6, 0x6c, 0x59, 0xbe,
+               0xe0, 0x24, 0x29, 0x11, 0xbf, 0xb9, 0x67, 0x23, 0x5c, 0xeb,
+               0xa3, 0x5a, 0xe1, 0x3e, 0x4e, 0xc7, 0x52, 0xbe, 0x63, 0x0b,
+               0x92, 0xdc, 0x4b, 0xde, 0x28, 0x47, 0xa9, 0xc6, 0x2c, 0xb8,
+               0x15, 0x27, 0x45, 0x42, 0x1f, 0xb7, 0xeb, 0x60, 0xa6, 0x3c,
+               0x0f, 0xe9, 0x15, 0x9f, 0xcc, 0xe7, 0x26, 0xce, 0x7c, 0xd8,
+               0x52, 0x3d, 0x74, 0x50, 0x66, 0x7e, 0xf8, 0x40, 0xe4, 0x91,
+               0x91, 0x21, 0xeb, 0x5f, 0x01, 0xc8, 0xc9, 0xb0, 0xd3, 0xd6, /* 100 */
+               0x48, 0xa9, 0x3b, 0xfb, 0x75, 0x68, 0x9e, 0x82, 0x44, 0xac,
+               0x13, 0x4a, 0xf5, 0x44, 0x71, 0x1c, 0xe7, 0x9a, 0x02, 0xdc,
+               0xc3, 0x42, 0x26, 0x68, 0x47, 0x80, 0xdd, 0xdc, 0xb4, 0x98,
+               0x59, 0x41, 0x06, 0xc3, 0x7f, 0x5b, 0xc7, 0x98, 0x56, 0x48,
+               0x7a, 0xf5, 0xab, 0x02, 0x2a, 0x2e, 0x5e, 0x42, 0xf0, 0x98,
+               0x97, 0xc1, 0xa8, 0x5a, 0x11, 0xea, 0x02, 0x12, 0xaf, 0x04,
+               0xd9, 0xb4, 0xce, 0xbc, 0x93, 0x7c, 0x3c, 0x1a, 0x3e, 0x15,
+               0xa8, 0xa0, 0x34, 0x2e, 0x33, 0x76, 0x15, 0xc8, 0x4e, 0x7f,
+               0xe3, 0xb8, 0xb9, 0xb8, 0x7f, 0xb1, 0xe7, 0x3a, 0x15, 0xaf,
+               0x12, 0xa3, 0x0d, 0x74, 0x6e, 0x06, 0xdf, 0xc3, 0x4f, 0x29, /* 200 */
+               0x0d, 0x79, 0x7c, 0xe5, 0x1a, 0xa1, 0x3a, 0xa7, 0x85, 0xbf,
+               0x66, 0x58, 0xaf, 0xf5, 0xe4, 0xb0, 0x93, 0x00, 0x3c, 0xbe,
+               0xaf, 0x66, 0x5b, 0x3c, 0x2e, 0x11, 0x3a, 0x3a, 0x4e, 0x90,
+               0x52, 0x69, 0x34, 0x1d, 0xc0, 0x71, 0x14, 0x26, 0x68, 0x5f,
+               0x4e, 0xf3, 0x7e, 0x86, 0x8a, 0x81, 0x26, 0xff, 0x3f, 0x22,
+               0x79, 0xb5, 0x7c, 0xa6, 0x7e, 0x29),
+       .pub_r = chunk_from_chars(
+               0x57, 0x5f, 0x03, 0x51, 0xbd, 0x2b, 0x1b, 0x81, 0x74, 0x48,
+               0xbd, 0xf8, 0x7a, 0x6c, 0x36, 0x2c, 0x1e, 0x28, 0x9d, 0x39,
+               0x03, 0xa3, 0x0b, 0x98, 0x32, 0xc5, 0x74, 0x1f, 0xa2, 0x50,
+               0x36, 0x3e, 0x7a, 0xcb, 0xc7, 0xf7, 0x7f, 0x3d, 0xac, 0xbc,
+               0x1f, 0x13, 0x1a, 0xdd, 0x8e, 0x03, 0x36, 0x7e, 0xff, 0x8f,
+               0xbb, 0xb3, 0xe1, 0xc5, 0x78, 0x44, 0x24, 0x80, 0x9b, 0x25,
+               0xaf, 0xe4, 0xd2, 0x26, 0x2a, 0x1a, 0x6f, 0xd2, 0xfa, 0xb6,
+               0x41, 0x05, 0xca, 0x30, 0xa6, 0x74, 0xe0, 0x7f, 0x78, 0x09,
+               0x85, 0x20, 0x88, 0x63, 0x2f, 0xc0, 0x49, 0x23, 0x37, 0x91,
+               0xad, 0x4e, 0xdd, 0x08, 0x3a, 0x97, 0x8b, 0x88, 0x3e, 0xe6, /* 100 */
+               0x18, 0xbc, 0x5e, 0x0d, 0xd0, 0x47, 0x41, 0x5f, 0x2d, 0x95,
+               0xe6, 0x83, 0xcf, 0x14, 0x82, 0x6b, 0x5f, 0xbe, 0x10, 0xd3,
+               0xce, 0x41, 0xc6, 0xc1, 0x20, 0xc7, 0x8a, 0xb2, 0x00, 0x08,
+               0xc6, 0x98, 0xbf, 0x7f, 0x0b, 0xca, 0xb9, 0xd7, 0xf4, 0x07,
+               0xbe, 0xd0, 0xf4, 0x3a, 0xfb, 0x29, 0x70, 0xf5, 0x7f, 0x8d,
+               0x12, 0x04, 0x39, 0x63, 0xe6, 0x6d, 0xdd, 0x32, 0x0d, 0x59,
+               0x9a, 0xd9, 0x93, 0x6c, 0x8f, 0x44, 0x13, 0x7c, 0x08, 0xb1,
+               0x80, 0xec, 0x5e, 0x98, 0x5c, 0xeb, 0xe1, 0x86, 0xf3, 0xd5,
+               0x49, 0x67, 0x7e, 0x80, 0x60, 0x73, 0x31, 0xee, 0x17, 0xaf,
+               0x33, 0x80, 0xa7, 0x25, 0xb0, 0x78, 0x23, 0x17, 0xd7, 0xdd, /* 200 */
+               0x43, 0xf5, 0x9d, 0x7a, 0xf9, 0x56, 0x8a, 0x9b, 0xb6, 0x3a,
+               0x84, 0xd3, 0x65, 0xf9, 0x22, 0x44, 0xed, 0x12, 0x09, 0x88,
+               0x21, 0x93, 0x02, 0xf4, 0x29, 0x24, 0xc7, 0xca, 0x90, 0xb8,
+               0x9d, 0x24, 0xf7, 0x1b, 0x0a, 0xb6, 0x97, 0x82, 0x3d, 0x7d,
+               0xeb, 0x1a, 0xff, 0x5b, 0x0e, 0x8e, 0x4a, 0x45, 0xd4, 0x9f,
+               0x7f, 0x53, 0x75, 0x7e, 0x19, 0x13),
+       .shared = chunk_from_chars(
+               0x86, 0xc7, 0x0b, 0xf8, 0xd0, 0xbb, 0x81, 0xbb, 0x01, 0x07,
+               0x8a, 0x17, 0x21, 0x9c, 0xb7, 0xd2, 0x72, 0x03, 0xdb, 0x2a,
+               0x19, 0xc8, 0x77, 0xf1, 0xd1, 0xf1, 0x9f, 0xd7, 0xd7, 0x7e,
+               0xf2, 0x25, 0x46, 0xa6, 0x8f, 0x00, 0x5a, 0xd5, 0x2d, 0xc8,
+               0x45, 0x53, 0xb7, 0x8f, 0xc6, 0x03, 0x30, 0xbe, 0x51, 0xea,
+               0x7c, 0x06, 0x72, 0xca, 0xc1, 0x51, 0x5e, 0x4b, 0x35, 0xc0,
+               0x47, 0xb9, 0xa5, 0x51, 0xb8, 0x8f, 0x39, 0xdc, 0x26, 0xda,
+               0x14, 0xa0, 0x9e, 0xf7, 0x47, 0x74, 0xd4, 0x7c, 0x76, 0x2d,
+               0xd1, 0x77, 0xf9, 0xed, 0x5b, 0xc2, 0xf1, 0x1e, 0x52, 0xc8,
+               0x79, 0xbd, 0x95, 0x09, 0x85, 0x04, 0xcd, 0x9e, 0xec, 0xd8, /* 100 */
+               0xa8, 0xf9, 0xb3, 0xef, 0xbd, 0x1f, 0x00, 0x8a, 0xc5, 0x85,
+               0x30, 0x97, 0xd9, 0xd1, 0x83, 0x7f, 0x2b, 0x18, 0xf7, 0x7c,
+               0xd7, 0xbe, 0x01, 0xaf, 0x80, 0xa7, 0xc7, 0xb5, 0xea, 0x3c,
+               0xa5, 0x4c, 0xc0, 0x2d, 0x0c, 0x11, 0x6f, 0xee, 0x3f, 0x95,
+               0xbb, 0x87, 0x39, 0x93, 0x85, 0x87, 0x5d, 0x7e, 0x86, 0x74,
+               0x7e, 0x67, 0x6e, 0x72, 0x89, 0x38, 0xac, 0xbf, 0xf7, 0x09,
+               0x8e, 0x05, 0xbe, 0x4d, 0xcf, 0xb2, 0x40, 0x52, 0xb8, 0x3a,
+               0xef, 0xfb, 0x14, 0x78, 0x3f, 0x02, 0x9a, 0xdb, 0xde, 0x7f,
+               0x53, 0xfa, 0xe9, 0x20, 0x84, 0x22, 0x40, 0x90, 0xe0, 0x07,
+               0xce, 0xe9, 0x4d, 0x4b, 0xf2, 0xba, 0xce, 0x9f, 0xfd, 0x4b, /* 200 */
+               0x57, 0xd2, 0xaf, 0x7c, 0x72, 0x4d, 0x0c, 0xaa, 0x19, 0xbf,
+               0x05, 0x01, 0xf6, 0xf1, 0x7b, 0x4a, 0xa1, 0x0f, 0x42, 0x5e,
+               0x3e, 0xa7, 0x60, 0x80, 0xb4, 0xb9, 0xd6, 0xb3, 0xce, 0xfe,
+               0xa1, 0x15, 0xb2, 0xce, 0xb8, 0x78, 0x9b, 0xb8, 0xa3, 0xb0,
+               0xea, 0x87, 0xfe, 0xbe, 0x63, 0xb6, 0xc8, 0xf8, 0x46, 0xec,
+               0x6d, 0xb0, 0xc2, 0x6c, 0x5d, 0x7c)
 };
index 2f64c4800050588e888252c383fa69df99bc2472..f0ad41f3b4b00b539c20e89006e71437a770bd83 100644 (file)
@@ -124,8 +124,8 @@ METHOD(key_exchange_t, set_public_key, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_wolfssl_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_wolfssl_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        bool success = FALSE;
        chunk_t g;
@@ -223,7 +223,7 @@ static wolfssl_diffie_hellman_t *create_generic(key_exchange_method_t group,
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index 739f348afe0e3853836ce76fcf9794c102641eb3..4951b05f0b5c5564e3464d6bc02be1cbd4207842 100644 (file)
@@ -169,8 +169,8 @@ METHOD(key_exchange_t, get_public_key, bool,
        return ecp2chunk(this->keysize, &this->key.pubkey, value, FALSE);
 }
 
-METHOD(key_exchange_t, set_private_key, bool,
-       private_wolfssl_ec_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed, bool,
+       private_wolfssl_ec_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        bool success = FALSE;
        ecc_point *base;
@@ -291,7 +291,7 @@ wolfssl_ec_diffie_hellman_t *wolfssl_ec_diffie_hellman_create(key_exchange_metho
                                .get_shared_secret = _get_shared_secret,
                                .set_public_key = _set_public_key,
                                .get_public_key = _get_public_key,
-                               .set_private_key = _set_private_key,
+                               .set_seed = _set_seed,
                                .get_method = _get_method,
                                .destroy = _destroy,
                        },
index f2361f2efb87b5c33b882facefb064b08559826f..d211cb3a73dc3def7ef6b5a83fe26251b3896a1d 100644 (file)
@@ -142,8 +142,8 @@ METHOD(key_exchange_t, get_public_key_25519, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key_25519, bool,
-       private_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed_25519, bool,
+       private_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        curve25519_key pub;
        u_char basepoint[CURVE25519_KEYSIZE] = {9};
@@ -229,8 +229,8 @@ METHOD(key_exchange_t, get_public_key_448, bool,
        return TRUE;
 }
 
-METHOD(key_exchange_t, set_private_key_448, bool,
-       private_diffie_hellman_t *this, chunk_t value)
+METHOD(key_exchange_t, set_seed_448, bool,
+       private_diffie_hellman_t *this, chunk_t value, drbg_t *drbg)
 {
        curve448_key pub;
        u_char basepoint[CURVE448_KEY_SIZE] = {5};
@@ -317,7 +317,7 @@ key_exchange_t *wolfssl_x_diffie_hellman_create(key_exchange_method_t group)
                this->public.get_shared_secret = _get_shared_secret_25519;
                this->public.set_public_key = _set_public_key_25519;
                this->public.get_public_key = _get_public_key_25519;
-               this->public.set_private_key = _set_private_key_25519;
+               this->public.set_seed = _set_seed_25519;
 
                if (wc_curve25519_init(&this->key.key25519) != 0 ||
                        wc_curve25519_init(&this->pub.key25519) != 0)
@@ -336,7 +336,7 @@ key_exchange_t *wolfssl_x_diffie_hellman_create(key_exchange_method_t group)
                this->public.get_shared_secret = _get_shared_secret_448;
                this->public.set_public_key = _set_public_key_448;
                this->public.get_public_key = _get_public_key_448;
-               this->public.set_private_key = _set_private_key_448;
+               this->public.set_seed = _set_seed_448;
 
                if (wc_curve448_init(&this->key.key448) != 0 ||
                        wc_curve448_init(&this->pub.key448) != 0)