Select Git revision
gostdsa-sign-test.c
Forked from
Nettle / nettle
Source project has a limited visibility.
gostdsa-sign-test.c 2.75 KiB
#include "testutils.h"
#include "gostdsa.h"
static void
test_gostdsa (const struct ecc_curve *ecc,
/* Private key */
const char *sz,
/* Random nonce */
const char *sk,
/* Hash */
const struct tstring *h,
/* Expected signature */
const char *r, const char *s)
{
struct dsa_signature ref;
mpz_t z;
mpz_t k;
mp_limb_t *rp = xalloc_limbs (ecc->p.size);
mp_limb_t *sp = xalloc_limbs (ecc->p.size);
mp_limb_t *scratch = xalloc_limbs (ecc_gostdsa_sign_itch (ecc));
dsa_signature_init (&ref);
mpz_init_set_str (z, sz, 16);
mpz_init_set_str (k, sk, 16);
ecc_gostdsa_sign (ecc, mpz_limbs_read_n (z, ecc->p.size),
mpz_limbs_read_n (k, ecc->p.size),
h->length, h->data, rp, sp, scratch);
mpz_set_str (ref.r, r, 16);
mpz_set_str (ref.s, s, 16);
if (mpz_limbs_cmp (ref.r, rp, ecc->p.size) != 0
|| mpz_limbs_cmp (ref.s, sp, ecc->p.size) != 0)
{
fprintf (stderr, "_gostdsa_sign failed, bit_size = %u\n", ecc->p.bit_size);
fprintf (stderr, "r = ");
write_mpn (stderr, 16, rp, ecc->p.size);
fprintf (stderr, "\ns = ");
write_mpn (stderr, 16, sp, ecc->p.size);
fprintf (stderr, "\nref.r = ");
mpz_out_str (stderr, 16, ref.r);
fprintf (stderr, "\nref.s = ");
mpz_out_str (stderr, 16, ref.s);
fprintf (stderr, "\n");
abort();
}
free (rp);
free (sp);
free (scratch);
dsa_signature_clear (&ref);
mpz_clear (k);
mpz_clear (z);
}
void
test_main (void)
{
test_gostdsa (nettle_get_gost_gc256b(),
"BFCF1D623E5CDD3032A7C6EABB4A923C46E43D640FFEAAF2C3ED39A8FA399924", /* z */
"5782C53F110C596F9155D35EBD25A06A89C50391850A8FEFE33B0E270318857C", /* k */
SHEX("1C067E20EA6CB183F22EFB0F3C6FD2A4E6A02821CB7A1B17FACD5E1F7AA76F70"), /* h */
"E9323A5E88DD87FB7C724383BFFE7CECD4B9FFA2AC33BEEF73A5A1F743404F6B", /* r */