[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [UNIKRAFT/LIBHOGWEED v2 3/3] Add glue code
Signed-off-by: ARGINT DRAGOS IULIAN <dragosargint21@xxxxxxxxx>
---
include/testutils_glue.h | 26 ++
testutils_glue.c | 805 +++++++++++++++++++++++++++++++++++++++
2 files changed, 831 insertions(+)
create mode 100644 include/testutils_glue.h
create mode 100644 testutils_glue.c
diff --git a/include/testutils_glue.h b/include/testutils_glue.h
new file mode 100644
index 0000000..6213879
--- /dev/null
+++ b/include/testutils_glue.h
@@ -0,0 +1,26 @@
+void rsa_compute_root_test(void);
+void rsa_compute_root_test(void);
+void rsa_encrypt_test(void);
+void rsa_keygen_test(void);
+void rsa_pss_sign_tr_test(void);
+void rsa_sec_decrypt_test(void);
+void rsa_sign_tr_test(void);
+void rsa_test(void);
+void rsa2sexp_test(void);
+void sexp2rsa_test(void);
+void curve25519_dh_test(void);
+void curve448_dh_test(void);
+void dsa_keygen_test(void);
+void dsa_test(void);
+void ecdsa_keygen_test(void);
+void ecdsa_sign_test(void);
+void ecdsa_verify_test(void);
+void eddsa_compress_test(void);
+void eddsa_sign_test(void);
+void eddsa_verify_test(void);
+void gostdsa_keygen_test(void);
+void gostdsa_sign_test(void);
+void gostdsa_verify_test(void);
+void gostdsa_vko_test(void);
+int run_all_libhogweed_tests(int v);
+
diff --git a/testutils_glue.c b/testutils_glue.c
new file mode 100644
index 0000000..5b5af82
--- /dev/null
+++ b/testutils_glue.c
@@ -0,0 +1,805 @@
+/* testutils.c */
+
+#include "testutils.h"
+#include "testutils_glue.h"
+#include "base16.h"
+#include "cbc.h"
+#include "cfb.h"
+#include "ctr.h"
+#include "knuth-lfib.h"
+#include "macros.h"
+#include "nettle-internal.h"
+#include "uk/config.h"
+#include <assert.h>
+#include <ctype.h>
+
+void
+die(const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ vfprintf(stderr, format, args);
+ va_end(args);
+
+ abort ();
+}
+
+void *
+xalloc(size_t size)
+{
+ void *p = malloc(size);
+ if (size && !p)
+ {
+ fprintf(stderr, "Virtual memory exhausted.\n");
+ abort();
+ }
+
+ return p;
+}
+
+static struct tstring *tstring_first = NULL;
+
+struct tstring *
+tstring_alloc (size_t length)
+{
+ struct tstring *s = xalloc(sizeof(struct tstring) + length);
+ s->length = length;
+ s->next = tstring_first;
+ /* NUL-terminate, for convenience. */
+ s->data[length] = '\0';
+ tstring_first = s;
+ return s;
+}
+
+void
+tstring_clear(void)
+{
+ while (tstring_first)
+ {
+ struct tstring *s = tstring_first;
+ tstring_first = s->next;
+ free(s);
+ }
+}
+
+struct tstring *
+tstring_data(size_t length, const uint8_t *data)
+{
+ struct tstring *s = tstring_alloc (length);
+ memcpy (s->data, data, length);
+ return s;
+}
+
+struct tstring *
+tstring_hex(const char *hex)
+{
+ struct base16_decode_ctx ctx;
+ struct tstring *s;
+ size_t length = strlen(hex);
+
+ s = tstring_alloc(BASE16_DECODE_LENGTH (length));
+ base16_decode_init (&ctx);
+ ASSERT (base16_decode_update (&ctx, &s->length, s->data,
+ length, hex));
+ ASSERT (base16_decode_final (&ctx));
+
+ return s;
+}
+
+void
+tstring_print_hex(const struct tstring *s)
+{
+ print_hex (s->length, s->data);
+}
+
+void
+print_hex(size_t length, const uint8_t *data)
+{
+ size_t i;
+
+ for (i = 0; i < length; i++)
+ {
+ switch (i % 16)
+ {
+ default:
+ break;
+ case 0:
+ printf("\n");
+ break;
+ case 8:
+ printf(" ");
+ break;
+ }
+ printf("%02x", data[i]);
+ }
+ printf("\n");
+}
+
+int verbose = 0;
+
+void
+mpn_out_str (FILE *f, int base, const mp_limb_t *xp, mp_size_t xn)
+{
+ mpz_t x;
+ mpz_out_str (f, base, mpz_roinit_n (x, xp, xn));
+}
+
+#if NETTLE_USE_MINI_GMP
+void
+gmp_randinit_default (struct knuth_lfib_ctx *ctx)
+{
+ knuth_lfib_init (ctx, 17);
+}
+void
+mpz_urandomb (mpz_t r, struct knuth_lfib_ctx *ctx, mp_bitcnt_t bits)
+{
+ size_t bytes = (bits+7)/8;
+ uint8_t *buf = xalloc (bytes);
+
+ knuth_lfib_random (ctx, bytes, buf);
+ buf[0] &= 0xff >> (8*bytes - bits);
+ nettle_mpz_set_str_256_u (r, bytes, buf);
+ free (buf);
+}
+#endif /* NETTLE_USE_MINI_GMP */
+
+mp_limb_t *
+xalloc_limbs (mp_size_t n)
+{
+ return xalloc (n * sizeof (mp_limb_t));
+}
+
+/* Expects local variables pub, key, rstate, digest, signature */
+#define SIGN(hash, msg, expected) do { \
+ hash##_update(&hash, LDATA(msg)); \
+ ASSERT(rsa_##hash##_sign(key, &hash, signature)); \
+ if (verbose) \
+ { \
+ fprintf(stderr, "rsa-%s signature: ", #hash); \
+ mpz_out_str(stderr, 16, signature); \
+ fprintf(stderr, "\n"); \
+ } \
+ ASSERT(mpz_cmp (signature, expected) == 0); \
+ \
+ hash##_update(&hash, LDATA(msg)); \
+ ASSERT(rsa_##hash##_sign_tr(pub, key, &rstate, \
+ (nettle_random_func *) knuth_lfib_random, \
+ &hash, signature)); \
+ ASSERT(mpz_cmp (signature, expected) == 0); \
+ \
+ hash##_update(&hash, LDATA(msg)); \
+ hash##_digest(&hash, sizeof(digest), digest); \
+ ASSERT(rsa_##hash##_sign_digest(key, digest, signature)); \
+ ASSERT(mpz_cmp (signature, expected) == 0); \
+ \
+ ASSERT(rsa_##hash##_sign_digest_tr(pub, key, &rstate, \
+ (nettle_random_func *)knuth_lfib_random, \
+ digest, signature)); \
+ ASSERT(mpz_cmp (signature, expected) == 0); \
+} while(0)
+
+#define VERIFY(key, hash, msg, signature) ( \
+ hash##_update(&hash, LDATA(msg)), \
+ rsa_##hash##_verify(key, &hash, signature) \
+)
+
+void
+test_rsa_set_key_1(struct rsa_public_key *pub,
+ struct rsa_private_key *key)
+{
+ /* Initialize key pair for test programs */
+ /* 1000-bit key, generated by
+ *
+ * lsh-keygen -a rsa -l 1000 -f advanced-hex
+ *
+ * (private-key (rsa-pkcs1
+ * (n #69abd505285af665 36ddc7c8f027e6f0 ed435d6748b16088
+ * 4fd60842b3a8d7fb bd8a3c98f0cc50ae 4f6a9f7dd73122cc
+ * ec8afa3f77134406 f53721973115fc2d 8cfbba23b145f28d
+ * 84f81d3b6ae8ce1e 2850580c026e809b cfbb52566ea3a3b3
+ * df7edf52971872a7 e35c1451b8636d22 279a8fb299368238
+ * e545fbb4cf#)
+ * (e #0db2ad57#)
+ * (d #3240a56f4cd0dcc2 4a413eb4ea545259 5c83d771a1c2ba7b
+ * ec47c5b43eb4b374 09bd2aa1e236dd86 481eb1768811412f
+ * f8d91be3545912af b55c014cb55ceac6 54216af3b85d5c4f
+ * 4a32894e3b5dfcde 5b2875aa4dc8d9a8 6afd0ca92ef50d35
+ * bd09f1c47efb4c8d c631e07698d362aa 4a83fd304e66d6c5
+ * 468863c307#)
+ * (p #0a66399919be4b4d e5a78c5ea5c85bf9 aba8c013cb4a8732
+ * 14557a12bd67711e bb4073fd39ad9a86 f4e80253ad809e5b
+ * f2fad3bc37f6f013 273c9552c9f489#)
+ * (q #0a294f069f118625 f5eae2538db9338c 776a298eae953329
+ * 9fd1eed4eba04e82 b2593bc98ba8db27 de034da7daaea795
+ * 2d55b07b5f9a5875 d1ca5f6dcab897#)
+ * (a #011b6c48eb592eee e85d1bb35cfb6e07 344ea0b5e5f03a28
+ * 5b405396cbc78c5c 868e961db160ba8d 4b984250930cf79a
+ * 1bf8a9f28963de53 128aa7d690eb87#)
+ * (b #0409ecf3d2557c88 214f1af5e1f17853 d8b2d63782fa5628
+ * 60cf579b0833b7ff 5c0529f2a97c6452 2fa1a8878a9635ab
+ * ce56debf431bdec2 70b308fa5bf387#)
+ * (c #04e103ee925cb5e6 6653949fa5e1a462 c9e65e1adcd60058
+ * e2df9607cee95fa8 daec7a389a7d9afc 8dd21fef9d83805a
+ * 40d46f49676a2f6b 2926f70c572c00#)))
+ */
+
+ mpz_set_str(pub->n,
+ "69abd505285af665" "36ddc7c8f027e6f0" "ed435d6748b16088"
+ "4fd60842b3a8d7fb" "bd8a3c98f0cc50ae" "4f6a9f7dd73122cc"
+ "ec8afa3f77134406" "f53721973115fc2d" "8cfbba23b145f28d"
+ "84f81d3b6ae8ce1e" "2850580c026e809b" "cfbb52566ea3a3b3"
+ "df7edf52971872a7" "e35c1451b8636d22" "279a8fb299368238"
+ "e545fbb4cf", 16);
+ mpz_set_str(pub->e, "0db2ad57", 16);
+
+ ASSERT (rsa_public_key_prepare(pub));
+
+ /* d is not used */
+#if 0
+ mpz_set_str(key->d,
+ "3240a56f4cd0dcc2" "4a413eb4ea545259" "5c83d771a1c2ba7b"
+ "ec47c5b43eb4b374" "09bd2aa1e236dd86" "481eb1768811412f"
+ "f8d91be3545912af" "b55c014cb55ceac6" "54216af3b85d5c4f"
+ "4a32894e3b5dfcde" "5b2875aa4dc8d9a8" "6afd0ca92ef50d35"
+ "bd09f1c47efb4c8d" "c631e07698d362aa" "4a83fd304e66d6c5"
+ "468863c307", 16);
+#endif
+
+ mpz_set_str(key->p,
+ "0a66399919be4b4d" "e5a78c5ea5c85bf9" "aba8c013cb4a8732"
+ "14557a12bd67711e" "bb4073fd39ad9a86" "f4e80253ad809e5b"
+ "f2fad3bc37f6f013" "273c9552c9f489", 16);
+
+ mpz_set_str(key->q,
+ "0a294f069f118625" "f5eae2538db9338c" "776a298eae953329"
+ "9fd1eed4eba04e82" "b2593bc98ba8db27" "de034da7daaea795"
+ "2d55b07b5f9a5875" "d1ca5f6dcab897", 16);
+
+ mpz_set_str(key->a,
+ "011b6c48eb592eee" "e85d1bb35cfb6e07" "344ea0b5e5f03a28"
+ "5b405396cbc78c5c" "868e961db160ba8d" "4b984250930cf79a"
+ "1bf8a9f28963de53" "128aa7d690eb87", 16);
+
+ mpz_set_str(key->b,
+ "0409ecf3d2557c88" "214f1af5e1f17853" "d8b2d63782fa5628"
+ "60cf579b0833b7ff" "5c0529f2a97c6452" "2fa1a8878a9635ab"
+ "ce56debf431bdec2" "70b308fa5bf387", 16);
+
+ mpz_set_str(key->c,
+ "04e103ee925cb5e6" "6653949fa5e1a462" "c9e65e1adcd60058"
+ "e2df9607cee95fa8" "daec7a389a7d9afc" "8dd21fef9d83805a"
+ "40d46f49676a2f6b" "2926f70c572c00", 16);
+
+ ASSERT (rsa_private_key_prepare(key));
+ ASSERT (pub->size == key->size);
+}
+
+void
+test_rsa_md5(struct rsa_public_key *pub,
+ struct rsa_private_key *key,
+ mpz_t expected)
+{
+ struct md5_ctx md5;
+ struct knuth_lfib_ctx rstate;
+ uint8_t digest[MD5_DIGEST_SIZE];
+ mpz_t signature;
+
+ md5_init(&md5);
+ mpz_init(signature);
+ knuth_lfib_init (&rstate, 15);
+
+ SIGN(md5, "The magic words are squeamish ossifrage", expected);
+
+ /* Try bad data */
+ ASSERT (!VERIFY(pub, md5,
+ "The magick words are squeamish ossifrage", signature));
+
+ /* Try correct data */
+ ASSERT (VERIFY(pub, md5,
+ "The magic words are squeamish ossifrage", signature));
+
+ /* Try bad signature */
+ mpz_combit(signature, 17);
+ ASSERT (!VERIFY(pub, md5,
+ "The magic words are squeamish ossifrage", signature));
+
+ mpz_clear(signature);
+}
+
+void
+test_rsa_sha1(struct rsa_public_key *pub,
+ struct rsa_private_key *key,
+ mpz_t expected)
+{
+ struct sha1_ctx sha1;
+ struct knuth_lfib_ctx rstate;
+ uint8_t digest[SHA1_DIGEST_SIZE];
+ mpz_t signature;
+
+ sha1_init(&sha1);
+ mpz_init(signature);
+ knuth_lfib_init (&rstate, 16);
+
+ SIGN(sha1, "The magic words are squeamish ossifrage", expected);
+
+ /* Try bad data */
+ ASSERT (!VERIFY(pub, sha1,
+ "The magick words are squeamish ossifrage", signature));
+
+ /* Try correct data */
+ ASSERT (VERIFY(pub, sha1,
+ "The magic words are squeamish ossifrage", signature));
+
+ /* Try bad signature */
+ mpz_combit(signature, 17);
+ ASSERT (!VERIFY(pub, sha1,
+ "The magic words are squeamish ossifrage", signature));
+
+ mpz_clear(signature);
+}
+
+void
+test_rsa_sha256(struct rsa_public_key *pub,
+ struct rsa_private_key *key,
+ mpz_t expected)
+{
+ struct sha256_ctx sha256;
+ struct knuth_lfib_ctx rstate;
+ uint8_t digest[SHA256_DIGEST_SIZE];
+ mpz_t signature;
+
+ sha256_init(&sha256);
+ mpz_init(signature);
+ knuth_lfib_init (&rstate, 17);
+
+ SIGN(sha256, "The magic words are squeamish ossifrage", expected);
+
+ /* Try bad data */
+ ASSERT (!VERIFY(pub, sha256,
+ "The magick words are squeamish ossifrage", signature));
+
+ /* Try correct data */
+ ASSERT (VERIFY(pub, sha256,
+ "The magic words are squeamish ossifrage", signature));
+
+ /* Try bad signature */
+ mpz_combit(signature, 17);
+ ASSERT (!VERIFY(pub, sha256,
+ "The magic words are squeamish ossifrage", signature));
+
+ mpz_clear(signature);
+}
+
+void
+test_rsa_sha512(struct rsa_public_key *pub,
+ struct rsa_private_key *key,
+ mpz_t expected)
+{
+ struct sha512_ctx sha512;
+ struct knuth_lfib_ctx rstate;
+ uint8_t digest[SHA512_DIGEST_SIZE];
+ mpz_t signature;
+
+ sha512_init(&sha512);
+ mpz_init(signature);
+ knuth_lfib_init (&rstate, 18);
+
+ SIGN(sha512, "The magic words are squeamish ossifrage", expected);
+
+ /* Try bad data */
+ ASSERT (!VERIFY(pub, sha512,
+ "The magick words are squeamish ossifrage", signature));
+
+ /* Try correct data */
+ ASSERT (VERIFY(pub, sha512,
+ "The magic words are squeamish ossifrage", signature));
+
+ /* Try bad signature */
+ mpz_combit(signature, 17);
+ ASSERT (!VERIFY(pub, sha512,
+ "The magic words are squeamish ossifrage", signature));
+
+ mpz_clear(signature);
+}
+
+#undef SIGN
+#undef VERIFY
+
+void
+test_rsa_key(struct rsa_public_key *pub,
+ struct rsa_private_key *key)
+{
+ mpz_t tmp;
+ mpz_t phi;
+
+ mpz_init(tmp); mpz_init(phi);
+
+ if (verbose)
+ {
+ /* FIXME: Use gmp_printf */
+ fprintf(stderr, "Public key: n=");
+ mpz_out_str(stderr, 16, pub->n);
+ fprintf(stderr, "\n e=");
+ mpz_out_str(stderr, 16, pub->e);
+
+ fprintf(stderr, "\n\nPrivate key: d=");
+ mpz_out_str(stderr, 16, key->d);
+ fprintf(stderr, "\n p=");
+ mpz_out_str(stderr, 16, key->p);
+ fprintf(stderr, "\n q=");
+ mpz_out_str(stderr, 16, key->q);
+ fprintf(stderr, "\n a=");
+ mpz_out_str(stderr, 16, key->a);
+ fprintf(stderr, "\n b=");
+ mpz_out_str(stderr, 16, key->b);
+ fprintf(stderr, "\n c=");
+ mpz_out_str(stderr, 16, key->c);
+ fprintf(stderr, "\n\n");
+ }
+
+ /* Check n = p q */
+ mpz_mul(tmp, key->p, key->q);
+ ASSERT (mpz_cmp(tmp, pub->n)== 0);
+
+ /* Check c q = 1 mod p */
+ mpz_mul(tmp, key->c, key->q);
+ mpz_fdiv_r(tmp, tmp, key->p);
+ ASSERT (mpz_cmp_ui(tmp, 1) == 0);
+
+ /* Check ed = 1 (mod phi) */
+ mpz_sub_ui(phi, key->p, 1);
+ mpz_sub_ui(tmp, key->q, 1);
+
+ mpz_mul(phi, phi, tmp);
+
+ mpz_mul(tmp, pub->e, key->d);
+ mpz_fdiv_r(tmp, tmp, phi);
+ ASSERT (mpz_cmp_ui(tmp, 1) == 0);
+
+ /* Check a e = 1 (mod (p-1) ) */
+ mpz_sub_ui(phi, key->p, 1);
+ mpz_mul(tmp, pub->e, key->a);
+ mpz_fdiv_r(tmp, tmp, phi);
+ ASSERT (mpz_cmp_ui(tmp, 1) == 0);
+
+ /* Check b e = 1 (mod (q-1) ) */
+ mpz_sub_ui(phi, key->q, 1);
+ mpz_mul(tmp, pub->e, key->b);
+ mpz_fdiv_r(tmp, tmp, phi);
+ ASSERT (mpz_cmp_ui(tmp, 1) == 0);
+
+ mpz_clear(tmp); mpz_clear(phi);
+}
+
+/* Requires that the context is named like the hash algorithm. */
+#define DSA_VERIFY(key, hash, msg, signature) \
+ (hash##_update(&hash, LDATA(msg)), \
+ dsa_##hash##_verify(key, &hash, signature))
+
+void
+test_dsa160(const struct dsa_public_key *pub,
+ const struct dsa_private_key *key,
+ const struct dsa_signature *expected)
+{
+ struct sha1_ctx sha1;
+ struct dsa_signature signature;
+ struct knuth_lfib_ctx lfib;
+
+ sha1_init(&sha1);
+ dsa_signature_init(&signature);
+ knuth_lfib_init(&lfib, 1111);
+
+ sha1_update(&sha1, LDATA("The magic words are squeamish ossifrage"));
+ ASSERT (dsa_sha1_sign(pub, key,
+ &lfib, (nettle_random_func *) knuth_lfib_random,
+ &sha1, &signature));
+
+ if (verbose)
+ {
+ fprintf(stderr, "dsa160 signature: ");
+ mpz_out_str(stderr, 16, signature.r);
+ fprintf(stderr, ", ");
+ mpz_out_str(stderr, 16, signature.s);
+ fprintf(stderr, "\n");
+ }
+
+ if (expected)
+ ASSERT (mpz_cmp (signature.r, expected->r) == 0
+ && mpz_cmp (signature.s, expected->s) == 0);
+
+ /* Try bad data */
+ ASSERT (!DSA_VERIFY(pub, sha1,
+ "The magick words are squeamish ossifrage",
+ &signature));
+
+ /* Try correct data */
+ ASSERT (DSA_VERIFY(pub, sha1,
+ "The magic words are squeamish ossifrage",
+ &signature));
+
+ /* Try bad signature */
+ mpz_combit(signature.r, 17);
+ ASSERT (!DSA_VERIFY(pub, sha1,
+ "The magic words are squeamish ossifrage",
+ &signature));
+
+ dsa_signature_clear(&signature);
+}
+
+void
+test_dsa256(const struct dsa_public_key *pub,
+ const struct dsa_private_key *key,
+ const struct dsa_signature *expected)
+{
+ struct sha256_ctx sha256;
+ struct dsa_signature signature;
+ struct knuth_lfib_ctx lfib;
+
+ sha256_init(&sha256);
+ dsa_signature_init(&signature);
+ knuth_lfib_init(&lfib, 1111);
+
+ sha256_update(&sha256, LDATA("The magic words are squeamish ossifrage"));
+ ASSERT (dsa_sha256_sign(pub, key,
+ &lfib, (nettle_random_func *) knuth_lfib_random,
+ &sha256, &signature));
+
+ if (verbose)
+ {
+ fprintf(stderr, "dsa256 signature: ");
+ mpz_out_str(stderr, 16, signature.r);
+ fprintf(stderr, ", ");
+ mpz_out_str(stderr, 16, signature.s);
+ fprintf(stderr, "\n");
+ }
+
+ if (expected)
+ ASSERT (mpz_cmp (signature.r, expected->r) == 0
+ && mpz_cmp (signature.s, expected->s) == 0);
+
+ /* Try bad data */
+ ASSERT (!DSA_VERIFY(pub, sha256,
+ "The magick words are squeamish ossifrage",
+ &signature));
+
+ /* Try correct data */
+ ASSERT (DSA_VERIFY(pub, sha256,
+ "The magic words are squeamish ossifrage",
+ &signature));
+
+ /* Try bad signature */
+ mpz_combit(signature.r, 17);
+ ASSERT (!DSA_VERIFY(pub, sha256,
+ "The magic words are squeamish ossifrage",
+ &signature));
+
+ dsa_signature_clear(&signature);
+}
+
+
+void
+test_dsa_verify(const struct dsa_params *params,
+ const mpz_t pub,
+ const struct nettle_hash *hash,
+ struct tstring *msg,
+ const struct dsa_signature *ref)
+{
+ void *ctx = xalloc (hash->context_size);
+ uint8_t *digest = xalloc (hash->digest_size);
+ struct dsa_signature signature;
+
+ dsa_signature_init (&signature);
+
+ hash->init(ctx);
+
+ hash->update (ctx, msg->length, msg->data);
+ hash->digest (ctx, hash->digest_size, digest);
+
+ mpz_set (signature.r, ref->r);
+ mpz_set (signature.s, ref->s);
+
+ ASSERT (dsa_verify (params, pub,
+ hash->digest_size, digest,
+ &signature));
+
+ /* Try bad signature */
+ mpz_combit(signature.r, 17);
+ ASSERT (!dsa_verify (params, pub,
+ hash->digest_size, digest,
+ &signature));
+
+ /* Try bad data */
+ digest[hash->digest_size / 2-1] ^= 8;
+ ASSERT (!dsa_verify (params, pub,
+ hash->digest_size, digest,
+ ref));
+
+ free (ctx);
+ free (digest);
+ dsa_signature_clear(&signature);
+}
+
+void
+test_dsa_key(const struct dsa_params *params,
+ const mpz_t pub,
+ const mpz_t key,
+ unsigned q_size)
+{
+ mpz_t t;
+
+ mpz_init(t);
+
+ ASSERT(mpz_sizeinbase(params->q, 2) == q_size);
+ ASSERT(mpz_sizeinbase(params->p, 2) >= DSA_SHA1_MIN_P_BITS);
+
+ ASSERT(mpz_probab_prime_p(params->p, 10));
+
+ ASSERT(mpz_probab_prime_p(params->q, 10));
+
+ mpz_fdiv_r(t, params->p, params->q);
+
+ ASSERT(0 == mpz_cmp_ui(t, 1));
+
+ ASSERT(mpz_cmp_ui(params->g, 1) > 0);
+
+ mpz_powm(t, params->g, params->q, params->p);
+ ASSERT(0 == mpz_cmp_ui(t, 1));
+
+ mpz_powm(t, params->g, key, params->p);
+ ASSERT(0 == mpz_cmp(t, pub));
+
+ mpz_clear(t);
+}
+
+const struct ecc_curve * const ecc_curves[] = {
+ &_nettle_secp_192r1,
+ &_nettle_secp_224r1,
+ &_nettle_secp_256r1,
+ &_nettle_secp_384r1,
+ &_nettle_secp_521r1,
+ &_nettle_curve25519,
+ &_nettle_curve448,
+ &_nettle_gost_gc256b,
+ &_nettle_gost_gc512a,
+ NULL
+};
+
+void
+write_mpn (FILE *f, int base, const mp_limb_t *xp, mp_size_t n)
+{
+ mpz_t t;
+ mpz_out_str (f, base, mpz_roinit_n (t,xp, n));
+}
+
+int
+run_all_libhogweed_tests(int v)
+{
I really appreciate that you changed the `int argc, char *argv[]` arguments with an `int verbose` argument, but you forgot the `v == 0` case.
+ if (v == 1) {
+ verbose = 1;
+ } else {
+ fprintf(stderr, "Invalid argument `%d', only accepted option is `1'.\n",
+ v);
+ return 1;
+ }
+
+#ifdef CONFIG_RSA_COMPUTE_ROOT_TEST
+ puts("running rsa_compute_root_test __________________________________________________");
+ rsa_compute_root_test();
+ puts("rsa_compute_root_test is complete ______________________________________________\n");
+#endif
+#ifdef CONFIG_RSA_ENCRYPT_TEST
+ puts("running rsa_encrypt_test _______________________________________________________");
+ rsa_encrypt_test();
+ puts("rsa_encrypt_test is complete ___________________________________________________\n");
+#endif
+#ifdef CONFIG_RSA_KEYGEN_TEST
+ puts("running rsa_keygen_test ________________________________________________________");
+ rsa_keygen_test();
+ puts("rsa_keygen_test is complete ____________________________________________________\n");
+#endif
+#ifdef CONFIG_RSA_PSS_SIGN_TR_TEST
+ puts("running rsa_pss_sign_tr_test ___________________________________________________");
+ rsa_pss_sign_tr_test();
+ puts("rsa_pss_sign_tr_test is complete _______________________________________________\n");
+#endif
+#ifdef CONFIG_RSA_SEC_DECRYPT_TEST
+ puts("running rsa_sec_decrypt_test ___________________________________________________");
+ rsa_sec_decrypt_test();
+ puts("rsa_sec_decrypt_test is complete _______________________________________________\n");
+#endif
+#ifdef CONFIG_RSA_SIGN_TR_TEST
+ puts("running rsa_sign_tr_test _______________________________________________________");
+ rsa_sign_tr_test();
+ puts("rsa_sign_tr_test is complete ___________________________________________________\n");
+#endif
+#ifdef CONFIG_RSA_TEST
+ puts("running rsa_test _______________________________________________________________");
+ rsa_test();
+ puts("rsa_test is complete ___________________________________________________________\n");
+#endif
+#ifdef CONFIG_RSA2SEXP_TEST
+ puts("running rsa2sexp_test __________________________________________________________");
+ rsa2sexp_test();
+ puts("rsa2sexp_test is complete ______________________________________________________\n");
+#endif
+#ifdef CONFIG_SEXP2RSA_TEST
+ puts("running sexp2rsa_test __________________________________________________________");
+ sexp2rsa_test();
+ puts("sexp2rsa_test is complete ______________________________________________________\n");
+#endif
+#ifdef CONFIG_CURVE25519_DH_TEST
+ puts("running curve25519_dh_test _____________________________________________________");
+ curve25519_dh_test();
+ puts("curve25519_dh_test is complete _________________________________________________\n");
+#endif
+#ifdef CONFIG_CURVE448_DH_TEST
+ puts("running curve448_dh_test _______________________________________________________");
+ curve448_dh_test();
+ puts("curve448_dh_test is complete ___________________________________________________\n");
+#endif
+#ifdef CONFIG_DSA_KEYGEN_TEST
+ puts("running dsa_keygen_test ________________________________________________________");
+ dsa_keygen_test();
+ puts("dsa_keygen_test is complete ____________________________________________________\n");
+#endif
+#ifdef CONFIG_DSA_TEST
+ puts("running dsa_test _______________________________________________________________");
+ dsa_test();
+ puts("dsa_test is complete ___________________________________________________________\n");
+#endif
+#ifdef CONFIG_ECDSA_KEYGEN_TEST
+ puts("running ecdsa_keygen_test ______________________________________________________");
+ ecdsa_keygen_test();
+ puts("ecdsa_keygen_test is complete __________________________________________________\n");
+#endif
+#ifdef CONFIG_ECDSA_SIGN_TEST
+ puts("running ecdsa_sign_test ________________________________________________________");
+ ecdsa_sign_test();
+ puts("ecdsa_sign_test is complete ____________________________________________________\n");
+#endif
+#ifdef CONFIG_ECDSA_VERIFY_TEST
+ puts("running ecdsa_verify_test ______________________________________________________");
+ ecdsa_verify_test();
+ puts("ecdsa_verify_test is complete __________________________________________________\n");
+#endif
+#ifdef CONFIG_EDDSA_COMPRESS_TEST
+ puts("running eddsa_compress_test ____________________________________________________");
+ eddsa_compress_test();
+ puts("eddsa_compress_test is complete ________________________________________________\n");
+#endif
+#ifdef CONFIG_EDDSA_SIGN_TEST
+ puts("running eddsa_sign_test ________________________________________________________");
+ eddsa_sign_test();
+ puts("eddsa_sign_test is complete ____________________________________________________\n");
+#endif
+#ifdef CONFIG_EDDSA_VERIFY_TEST
+ puts("running eddsa_verify_test ______________________________________________________");
+ eddsa_verify_test();
+ puts("eddsa_verify_test is complete __________________________________________________\n");
+#endif
+#ifdef CONFIG_GOSTDSA_KEYGEN_TEST
+ puts("running gostdsa_keygen_test ____________________________________________________");
+ gostdsa_keygen_test();
+ puts("gostdsa_keygen_test is complete ________________________________________________\n");
+#endif
+#ifdef CONFIG_GOSTDSA_SIGN_TEST
+ puts("running gostdsa_sign_test ______________________________________________________");
+ gostdsa_sign_test();
+ puts("gostdsa_sign_test is complete __________________________________________________\n");
+#endif
+#ifdef CONFIG_GOSTDSA_VERIFY_TEST
+ puts("running gostdsa_verify_test ____________________________________________________");
+ gostdsa_verify_test();
+ puts("gostdsa_verify_test is complete ________________________________________________\n");
+#endif
+#ifdef CONFIG_GOSTDSA_VKO_TEST
+ puts("running gostdsa_vko_test _______________________________________________________");
+ gostdsa_vko_test();
+ puts("gostdsa_vko_test is complete ___________________________________________________\n");
+#endif
+
+
+ tstring_clear();
+ return EXIT_SUCCESS;
+}
+
--
2.17.1
|