Exemple #1
0
int
hmac_sha256 (const void *key, size_t keylen,
             const void *in, size_t inlen, void *resbuf)
{
  struct sha256_ctx inner;
  struct sha256_ctx outer;
  char optkeybuf[32];
  char block[64];
  char innerhash[32];

  /* Reduce the key's size, so that it becomes <= 64 bytes large.  */

  if (keylen > 64)
    {
      struct sha256_ctx keyhash;

      sha256_init_ctx (&keyhash);
      sha256_process_bytes (key, keylen, &keyhash);
      sha256_finish_ctx (&keyhash, optkeybuf);

      key = optkeybuf;
      keylen = 32;
    }

  /* Compute INNERHASH from KEY and IN.  */

  sha256_init_ctx (&inner);

  memset (block, IPAD, sizeof (block));
  memxor (block, key, keylen);

  sha256_process_block (block, 64, &inner);
  sha256_process_bytes (in, inlen, &inner);

  sha256_finish_ctx (&inner, innerhash);

  /* Compute result from KEY and INNERHASH.  */

  sha256_init_ctx (&outer);

  memset (block, OPAD, sizeof (block));
  memxor (block, key, keylen);

  sha256_process_block (block, 64, &outer);
  sha256_process_bytes (innerhash, 32, &outer);

  sha256_finish_ctx (&outer, resbuf);

  return 0;
}
Exemple #2
0
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
// update hash
void sha256_t::update(const void * const p, uint64_t size)
{
	if (this->psha256_item == NULL) return;
	sha256_process_bytes(p, size, &this->ctx);
}