예제 #1
0
파일: bignum.c 프로젝트: Distrotech/nettle
void
nettle_mpz_init_set_str_256_s(mpz_t x,
			      size_t length, const uint8_t *s)
{
  mpz_init(x);
  nettle_mpz_set_str_256_s(x, length, s);
}
예제 #2
0
파일: parse.c 프로젝트: jeremyfrench/lsh
int
parse_bignum(struct simple_buffer *buffer, mpz_t result, uint32_t limit)
{
  uint32_t length;
  const uint8_t *digits;

  if (!parse_string(buffer, &length, &digits))
    return 0;

  /* NOTE: If the reciever expects an integer less than 256^limit,
   * there may still be limit + 1 digits, as a leading zero is
   * sometimes required to resolve signedness. */
  if (limit && (length > (limit + 1)))
    return 0;

  nettle_mpz_set_str_256_s(result, length, digits);

  return 1;
}
예제 #3
0
파일: mpi.c 프로젝트: gnutls/gnutls
static int
wrap_nettle_mpi_scan(bigint_t r, const void *buffer, size_t nbytes,
		     gnutls_bigint_format_t format)
{
	if (format == GNUTLS_MPI_FORMAT_USG) {
		nettle_mpz_set_str_256_u(TOMPZ(r), nbytes, buffer);
	} else if (format == GNUTLS_MPI_FORMAT_STD) {
		nettle_mpz_set_str_256_s(TOMPZ(r), nbytes, buffer);
#if ENABLE_GOST
	} else if (format == GNUTLS_MPI_FORMAT_ULE) {
		nettle_mpz_set_str_256_u_le(TOMPZ(r), nbytes, buffer);
#endif
	} else {
		gnutls_assert();
		goto fail;
	}

	return 0;
 fail:
	return GNUTLS_E_MPI_SCAN_FAILED;
}
예제 #4
0
int
nettle_mpz_set_sexp(mpz_t x, unsigned limit, struct sexp_iterator *i)
{
  if (i->type == SEXP_ATOM
      && i->atom_length
      && !i->display)
    {
      /* Allow some extra here, for leading sign octets. */
      if (limit && (8 * i->atom_length > (16 + limit)))
	return 0;
      
      nettle_mpz_set_str_256_s(x, i->atom_length, i->atom);

      /* FIXME: How to interpret a limit for negative numbers? */
      if (limit && mpz_sizeinbase(x, 2) > limit)
	return 0;
      
      return sexp_iterator_next(i);
    }
  else
    return 0;
}
예제 #5
0
int
asn1_der_get_bignum(struct asn1_der_iterator *i,
		    mpz_t x, unsigned max_bits)
{
  if (i->length > 1
      && ((i->data[0] == 0 && i->data[1] < 0x80)
	  || (i->data[0] == 0xff && i->data[1] >= 0x80)))
    /* Non-minimal number of digits */
    return 0;

  /* Allow some extra here, for leading sign octets. */
  if (max_bits && (8 * i->length > (16 + max_bits)))
    return 0;

  nettle_mpz_set_str_256_s(x, i->length, i->data);

  /* FIXME: How to interpret a max_bits for negative numbers? */
  if (max_bits && mpz_sizeinbase(x, 2) > max_bits)
    return 0;

  return 1;
}