| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /* sha3.h - an implementation of Secure Hash Algorithm 3 (Keccak).
- * based on the
- * The Keccak SHA-3 submission. Submission to NIST (Round 3), 2011
- * by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche
- *
- * Copyright: 2013 Aleksey Kravchenko <rhash.admin@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. Use this program at your own risk!
- */
- #ifndef __SHA3_H__
- #define __SHA3_H__
- #include <stdint.h>
- #include "options.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define sha3_224_hash_size 28
- #define sha3_256_hash_size 32
- #define sha3_384_hash_size 48
- #define sha3_512_hash_size 64
- #define sha3_max_permutation_size 25
- #define sha3_max_rate_in_qwords 24
- #define SHA3_224_BLOCK_LENGTH 144
- #define SHA3_256_BLOCK_LENGTH 136
- #define SHA3_384_BLOCK_LENGTH 104
- #define SHA3_512_BLOCK_LENGTH 72
- #define SHA3_224_DIGEST_LENGTH sha3_224_hash_size
- #define SHA3_256_DIGEST_LENGTH sha3_256_hash_size
- #define SHA3_384_DIGEST_LENGTH sha3_384_hash_size
- #define SHA3_512_DIGEST_LENGTH sha3_512_hash_size
- /**
- * SHA3 Algorithm context.
- */
- typedef struct SHA3_CTX {
- /* 1600 bits algorithm hashing state */
- uint64_t hash[sha3_max_permutation_size];
- /* 1536-bit buffer for leftovers */
- uint64_t message[sha3_max_rate_in_qwords];
- /* count of bytes in the message[] buffer */
- unsigned rest;
- /* size of a message block processed at once */
- unsigned block_size;
- } SHA3_CTX;
- /* methods for calculating the hash function */
- void sha3_224_Init(SHA3_CTX* ctx);
- void sha3_256_Init(SHA3_CTX* ctx);
- void sha3_384_Init(SHA3_CTX* ctx);
- void sha3_512_Init(SHA3_CTX* ctx);
- void sha3_Update(SHA3_CTX* ctx, const unsigned char* msg, size_t size);
- void sha3_Final(SHA3_CTX* ctx, unsigned char* result);
- #if USE_KECCAK
- #define keccak_224_Init sha3_224_Init
- #define keccak_256_Init sha3_256_Init
- #define keccak_384_Init sha3_384_Init
- #define keccak_512_Init sha3_512_Init
- #define keccak_Update sha3_Update
- void keccak_Final(SHA3_CTX* ctx, unsigned char* result);
- void keccak_256(const unsigned char* data, size_t len, unsigned char* digest);
- void keccak_512(const unsigned char* data, size_t len, unsigned char* digest);
- #endif
- void sha3_256(const unsigned char* data, size_t len, unsigned char* digest);
- void sha3_512(const unsigned char* data, size_t len, unsigned char* digest);
- #ifdef __cplusplus
- } /* extern "C" */
- #endif /* __cplusplus */
- #endif /* __SHA3_H__ */
|