Пример #1
0
static gpg_err_code_t
elg_generate_ext (int algo, unsigned int nbits, unsigned long evalue,
                  const gcry_sexp_t genparms,
                  gcry_mpi_t *skey, gcry_mpi_t **retfactors,
                  gcry_sexp_t *r_extrainfo)
{
  gpg_err_code_t ec;
  ELG_secret_key sk;
  gcry_mpi_t xvalue = NULL;
  gcry_sexp_t l1;

  (void)algo;
  (void)evalue;
  (void)r_extrainfo;

  if (genparms)
    {
      /* Parse the optional xvalue element. */
      l1 = gcry_sexp_find_token (genparms, "xvalue", 0);
      if (l1)
        {
          xvalue = gcry_sexp_nth_mpi (l1, 1, 0);
          gcry_sexp_release (l1);
          if (!xvalue)
            return GPG_ERR_BAD_MPI;
        }
    }

  if (xvalue)
    {
      ec = generate_using_x (&sk, nbits, xvalue, retfactors);
      mpi_free (xvalue);
    }
  else
    {
      generate (&sk, nbits, retfactors);
      ec = 0;
    }

  skey[0] = sk.p;
  skey[1] = sk.g;
  skey[2] = sk.y;
  skey[3] = sk.x;

  return ec;
}
Пример #2
0
/* This is a specila generate function which is not called via the
   module interface.  */
gcry_err_code_t
_gcry_elg_generate_using_x (int algo, unsigned int nbits, gcry_mpi_t x,
                            gcry_mpi_t *skey, gcry_mpi_t **retfactors)
{
  gcry_err_code_t ec;
  ELG_secret_key sk;

  (void)algo;

  ec = generate_using_x (&sk, nbits, x, retfactors);
  if (!ec)
    {
      skey[0] = sk.p;
      skey[1] = sk.g;
      skey[2] = sk.y;
      skey[3] = sk.x;
    }
  return ec;
}