static void
test_size(long x, unsigned size)
{
  mpz_t t;

  mpz_init_set_si(t, x);
  ASSERT(nettle_mpz_sizeinbase_256_s(t) == size);
  mpz_clear(t);
}
Beispiel #2
0
static int
wrap_nettle_mpi_print(const bigint_t a, void *buffer, size_t * nbytes,
		      gnutls_bigint_format_t format)
{
	unsigned int size;
	mpz_t *p = (void *) a;

	if (format == GNUTLS_MPI_FORMAT_USG) {
		size = nettle_mpz_sizeinbase_256_u(*p);
	} else if (format == GNUTLS_MPI_FORMAT_STD) {
		size = nettle_mpz_sizeinbase_256_s(*p);
#if ENABLE_GOST
	} else if (format == GNUTLS_MPI_FORMAT_ULE) {
		size = nettle_mpz_sizeinbase_256_u_le(*p);
#endif
	} else {
		gnutls_assert();
		return GNUTLS_E_INVALID_REQUEST;
	}

	if (buffer == NULL || size > *nbytes) {
		*nbytes = size;
		gnutls_assert();
		return GNUTLS_E_SHORT_MEMORY_BUFFER;
	}

#if ENABLE_GOST
	if (format == GNUTLS_MPI_FORMAT_ULE)
		nettle_mpz_get_str_256_u_le(size, buffer, *p);
	else
#endif
		nettle_mpz_get_str_256(size, buffer, *p);
	*nbytes = size;

	return 0;
}