32#define LOG(kind, ...) GNUNET_log_from (kind, "util-crypto-hash", __VA_ARGS__) 
   34#define LOG_STRERROR_FILE(kind, syscall, \ 
   35                          filename) GNUNET_log_from_strerror_file (kind, \ 
 
   46  gcry_md_hash_buffer (GCRY_MD_SHA512, 
ret, block, 
size);
 
 
   76  char upper_enc[enclen + 1];
 
   77  char *up_ptr = upper_enc;
 
 
   92  unsigned int x1 = (a->
bits[1] - b->
bits[1]) >> 16;
 
   93  unsigned int x2 = (b->
bits[1] - a->
bits[1]) >> 16;
 
 
  112  for (ssize_t i = (
sizeof(
struct GNUNET_HashCode) / 
sizeof(
unsigned int)) - 1;
 
 
  124  for (ssize_t i = (
sizeof(
struct GNUNET_HashCode) / 
sizeof(
unsigned int)) - 1;
 
 
  136  const unsigned long long *lla = (
const unsigned long long *) a;
 
  137  const unsigned long long *llb = (
const unsigned long long *) b;
 
  138  unsigned long long *llr = (
unsigned long long *) 
result;
 
  143  for (
int i = 
sizeof (*
result) / 
sizeof (*llr) - 1; i>=0; i--)
 
  144    llr[i] = lla[i] ^ llb[i];
 
 
  158                   "Hash key derivation",
 
  159                   strlen (
"Hash key derivation"),
 
  166                   "Initialization vector derivation",
 
  167                   strlen (
"Initialization vector derivation"),
 
 
  176  const unsigned long long *llp = (
const unsigned long long *) 
h;
 
  177  unsigned int ret = 0;
 
  182  for (i = 0; i<
sizeof (*h) / 
sizeof (*llp); i++)
 
  186    ret += 
sizeof (*llp) * 8;
 
  188  if (
ret == 8 * 
sizeof (*
h))
 
 
  198  const unsigned long long *llp = (
const unsigned long long *) 
h;
 
  199  unsigned int ret = 0;
 
  204  for (i = 
sizeof (*
h) / 
sizeof (*llp) - 1; i>=0; i--)
 
  208    ret += 
sizeof (*llp) * 8;
 
  210  if (
ret == 8 * 
sizeof (*
h))
 
 
  224  i1 = (
unsigned int *) h1;
 
  225  i2 = (
unsigned int *) h2;
 
  226  for (ssize_t i = (
sizeof(
struct GNUNET_HashCode) / 
sizeof(
unsigned int)) - 1;
 
 
  244  const unsigned long long *l1 = (
const unsigned long long *) h1;
 
  245  const unsigned long long *l2 = (
const unsigned long long *) h2;
 
  246  const unsigned long long *
t = (
const unsigned long long *) target;
 
  249  for (
size_t i = 0; i < 
sizeof(*h1) / 
sizeof(*l1); i++)
 
  251    unsigned long long x1 = l1[i] ^ 
t[i];
 
  252    unsigned long long x2 = l2[i] ^ 
t[i];
 
 
  267  const void *
salt, 
size_t salt_len,
 
 
  286  const void *
salt, 
size_t salt_len,
 
 
  298                        const void *plaintext, 
size_t plaintext_len,
 
  302  static gcry_md_hd_t md;
 
  303  const unsigned char *
mc;
 
  318                 gcry_md_setkey (md, 
key, key_len));
 
  319  gcry_md_write (md, plaintext, plaintext_len);
 
  320  mc = gcry_md_read (md, GCRY_MD_SHA512);
 
 
  328                    const void *plaintext, 
size_t plaintext_len,
 
  332                          plaintext, plaintext_len,
 
 
  354                 gcry_md_open (&hc->
hd,
 
 
  368  gcry_md_write (hc->
hd, buf, 
size);
 
 
  380                 gcry_md_copy (&cp->
hd,
 
 
  390  const void *
res = gcry_md_read (hc->
hd, 0);
 
 
  407  gcry_md_close (hc->
hd);
 
 
benchmarking for various operations
 
#define BENCHMARK_START(opname)
 
#define BENCHMARK_END(opname)
 
static struct GNUNET_ARM_Handle * h
Connection with ARM.
 
static int ret
Final status code.
 
struct GNUNET_HashCode key
The key used in the DHT.
 
static OpusEncoder * enc
OPUS encoder.
 
static struct GNUNET_SCHEDULER_Task * t
Main task.
 
static char * res
Currently read line or NULL on EOF.
 
static int once
Option -i.
 
static struct GNUNET_TESTBED_Controller * mc
Handle to the master controller.
 
static int result
Global testing status.
 
static struct GNUNET_CRYPTO_PowSalt salt
Salt for PoW calculations.
 
static enum @49 mode
Should we do a PUT (mode = 0) or GET (mode = 1);.
 
void GNUNET_CRYPTO_random_block(enum GNUNET_CRYPTO_Quality mode, void *buffer, size_t length)
Fill block with a random values.
 
GNUNET_CRYPTO_Quality
Desired quality level for random numbers.
 
void GNUNET_CRYPTO_hash_difference(const struct GNUNET_HashCode *a, const struct GNUNET_HashCode *b, struct GNUNET_HashCode *result)
compute result = b - a
 
void GNUNET_CRYPTO_hash(const void *block, size_t size, struct GNUNET_HashCode *ret)
Compute hash of a given block.
 
void GNUNET_CRYPTO_hash_to_enc(const struct GNUNET_HashCode *block, struct GNUNET_CRYPTO_HashAsciiEncoded *result)
Convert hash to ASCII encoding.
 
void GNUNET_CRYPTO_hash_create_random(enum GNUNET_CRYPTO_Quality mode, struct GNUNET_HashCode *result)
Create a random hash code.
 
void GNUNET_CRYPTO_hmac(const struct GNUNET_CRYPTO_AuthKey *key, const void *plaintext, size_t plaintext_len, struct GNUNET_HashCode *hmac)
Calculate HMAC of a message (RFC 2104)
 
void GNUNET_CRYPTO_hash_sum(const struct GNUNET_HashCode *a, const struct GNUNET_HashCode *delta, struct GNUNET_HashCode *result)
compute result = a + delta
 
void GNUNET_CRYPTO_hash_xor(const struct GNUNET_HashCode *a, const struct GNUNET_HashCode *b, struct GNUNET_HashCode *result)
compute result = a ^ b
 
int GNUNET_CRYPTO_hash_xorcmp(const struct GNUNET_HashCode *h1, const struct GNUNET_HashCode *h2, const struct GNUNET_HashCode *target)
Find out which of the two GNUNET_CRYPTO_hash codes is closer to target in the XOR metric (Kademlia).
 
void GNUNET_CRYPTO_hmac_derive_key_v(struct GNUNET_CRYPTO_AuthKey *key, const struct GNUNET_CRYPTO_SymmetricSessionKey *rkey, const void *salt, size_t salt_len, va_list argp)
Derive an authentication key.
 
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hash_from_string2(const char *enc, size_t enclen, struct GNUNET_HashCode *result)
Convert ASCII encoding back to a 'struct GNUNET_HashCode'.
 
int GNUNET_CRYPTO_hash_cmp(const struct GNUNET_HashCode *h1, const struct GNUNET_HashCode *h2)
Compare function for HashCodes, producing a total ordering of all hashcodes.
 
unsigned int GNUNET_CRYPTO_hash_distance_u32(const struct GNUNET_HashCode *a, const struct GNUNET_HashCode *b)
Compute the distance between 2 hashcodes.
 
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_kdf(void *result, size_t out_len, const void *xts, size_t xts_len, const void *skm, size_t skm_len,...)
Derive key.
 
void GNUNET_CRYPTO_hmac_derive_key(struct GNUNET_CRYPTO_AuthKey *key, const struct GNUNET_CRYPTO_SymmetricSessionKey *rkey, const void *salt, size_t salt_len,...)
Derive an authentication key.
 
void GNUNET_CRYPTO_hash_to_aes_key(const struct GNUNET_HashCode *hc, struct GNUNET_CRYPTO_SymmetricSessionKey *skey, struct GNUNET_CRYPTO_SymmetricInitializationVector *iv)
Convert a hashcode into a key.
 
unsigned int GNUNET_CRYPTO_hash_count_leading_zeros(const struct GNUNET_HashCode *h)
Count the number of leading 0 bits in h.
 
void GNUNET_CRYPTO_hash_context_read(struct GNUNET_HashContext *hc, const void *buf, size_t size)
Add data to be hashed.
 
struct GNUNET_HashContext * GNUNET_CRYPTO_hash_context_copy(const struct GNUNET_HashContext *hc)
Make a copy of the hash computation.
 
uint64_t GNUNET_ntohll(uint64_t n)
Convert unsigned 64-bit integer to host byte order.
 
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_kdf_v(void *result, size_t out_len, const void *xts, size_t xts_len, const void *skm, size_t skm_len, va_list argp)
Derive key.
 
void GNUNET_CRYPTO_hash_context_abort(struct GNUNET_HashContext *hc)
Abort hashing, do not bother calculating final result.
 
void GNUNET_CRYPTO_hash_context_finish(struct GNUNET_HashContext *hc, struct GNUNET_HashCode *r_hash)
Finish the hash computation.
 
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
 
unsigned int GNUNET_CRYPTO_hash_count_tailing_zeros(const struct GNUNET_HashCode *h)
Count the number of tailing 0 bits in h.
 
GNUNET_GenericReturnValue
Named constants for return values.
 
struct GNUNET_HashContext * GNUNET_CRYPTO_hash_context_start()
Start incremental hashing operation.
 
void GNUNET_CRYPTO_hmac_raw(const void *key, size_t key_len, const void *plaintext, size_t plaintext_len, struct GNUNET_HashCode *hmac)
Calculate HMAC of a message (RFC 2104) TODO: Shouldn't this be the standard hmac function and the abo...
 
#define GNUNET_static_assert(cond)
Assertion to be checked (if supported by C compiler) at compile time, otherwise checked at runtime an...
 
uint32_t bits[512/8/sizeof(uint32_t)]
 
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
 
#define GNUNET_new(type)
Allocate a struct or union of the given type.
 
#define GNUNET_free(ptr)
Wrapper around free.
 
char * GNUNET_STRINGS_data_to_string(const void *data, size_t size, char *out, size_t out_size)
Convert binary data to ASCII encoding using CrockfordBase32.
 
enum GNUNET_GenericReturnValue GNUNET_STRINGS_utf8_toupper(const char *input, char *output)
Convert the utf-8 input string to upper case.
 
enum GNUNET_GenericReturnValue GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
 
static unsigned int size
Size of the "table".
 
static struct GNUNET_TIME_Relative delta
 
type for (message) authentication keys
 
0-terminated ASCII encoding of a struct GNUNET_HashCode.
 
gcry_md_hd_t hd
Internal state of the hash function.