Skip to content
Snippets Groups Projects
Select Git revision
  • master
  • wip/dueno/ml-dsa2
  • wip/pacbti2
  • wip/dueno/pacbti
  • wip/dueno/deterministic-ecdsa
  • wip/dueno/kyber2
  • wip/dueno/shake-streaming-update
  • wip/dueno/shake-streaming
  • master-updates
  • release-3.7-fixes
  • fix-chacha-counter
  • arm64
  • delete-1-way-neon
  • fat-build-by-default
  • ppc-chacha-4core
  • delete-internal-name-mangling
  • ppc-gcm
  • ppc-chacha-2core
  • refactor-ecc-mod
  • ppc-chacha-core
  • nettle_3.7.2_release_20210321
  • nettle_3.7.1_release_20210217
  • nettle_3.7_release_20210104
  • nettle_3.7rc1
  • nettle_3.6_release_20200429
  • nettle_3.6rc3
  • nettle_3.6rc2
  • nettle_3.6rc1
  • nettle_3.5.1_release_20190627
  • nettle_3.5_release_20190626
  • nettle_3.5rc1
  • nettle_3.4.1_release_20181204
  • nettle_3.4.1rc1
  • nettle_3.4_release_20171119
  • nettle_3.4rc2
  • nettle_3.4rc1
  • nettle_3.3_release_20161001
  • nettle_3.2_release_20160128
  • nettle_3.1.1_release_20150424
  • nettle_3.1_release_20150407
40 results

gostdsa-sign-test.c

Blame
  • 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 */