Exemple #1
0
int
rsa_keypair_to_sexp(struct nettle_buffer *buffer,
		    const char *algorithm_name,
		    const struct rsa_public_key *pub,
		    const struct rsa_private_key *priv)
{
  if (!algorithm_name)
    algorithm_name = "rsa-pkcs1";
  
  if (priv)
    return sexp_format(buffer,
		       "(private-key(%0s(n%b)(e%b)"
		       "(d%b)(p%b)(q%b)(a%b)(b%b)(c%b)))",
		       algorithm_name, pub->n, pub->e,
		       priv->d, priv->p, priv->q,
		       priv->a, priv->b, priv->c);
  else
    return sexp_format(buffer, "(public-key(%0s(n%b)(e%b)))",
		       algorithm_name, pub->n, pub->e);
}
Exemple #2
0
static struct lsh_string *
do_rsa_sign(struct signer *s,
	    int algorithm,
	    UINT32 msg_length,
	    const UINT8 *msg)
{
  CAST(rsa_signer, self, s);
  struct lsh_string *res;
  mpz_t m;

  trace("do_rsa_sign: Signing according to %a\n", algorithm);
  
  mpz_init(m);
  pkcs1_encode(m, self->verifier->params, self->verifier->size - 1,
	       msg_length, msg);

  rsa_compute_root(self, m, m);

  switch (algorithm)
    {
    case ATOM_SSH_RSA:
      /* Uses the encoding:
       *
       * string ssh-rsa
       * string signature-blob
       */
  
      res = ssh_format("%a%un", ATOM_SSH_RSA, m);
      break;
#if 0
    case ATOM_RSA_PKCS1_SHA1:
    case ATOM_RSA_PKCS1_SHA1_LOCAL:
      /* Uses the encoding:
       *
       * string rsa-pkcs1
       * string signature-blob
       */
  
      res = ssh_format("%a%un", ATOM_RSA_PKCS1_SHA1, m);
      break;
#endif
      /* It doesn't matter here which flavour of SPKI is used. */
    case ATOM_SPKI_SIGN_RSA:
    case ATOM_SPKI_SIGN_DSS:

      res = sexp_format(encode_rsa_sig_val(m), SEXP_CANONICAL, 0);
      break;
    default:
      fatal("do_rsa_sign: Internal error!\n");
    }
  mpz_clear(m);
  return res;
}
Exemple #3
0
static int
subject_match_hash(struct spki_subject *self,
		   int method,
		   const struct lsh_string *h1)
{
  struct lsh_string *h2;

  switch (method)
    {
    case ATOM_SHA1:
      if (self->sha1)
	h2 = self->sha1;
#if 0
      else if (self->key)
	h2 = self->sha1
	  = hash_string(&sha1_algorithm,
			sexp_format(self->key, SEXP_CANONICAL, 0), 1);
#endif
      else
	return 0;
      break;

    case ATOM_MD5:
      if (self->md5)
	h2 = self->md5;
#if 0
      else if (self->key)
	h2 = self->md5
	  = hash_string(&md5_algorithm,
			sexp_format(self->key, SEXP_CANONICAL, 0), 1);
#endif
      else
	return 0;
      break;

    default:
      return 0;
    }
  return lsh_string_eq(h1, h2);
}