mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | // sha3.h
 | ||
|  | // 19-Nov-11  Markku-Juhani O. Saarinen <mjos@iki.fi>
 | ||
|  | 
 | ||
|  | #ifndef SHA3_H
 | ||
|  | #define SHA3_H
 | ||
|  | 
 | ||
|  | #include <stddef.h>
 | ||
|  | #include <stdint.h>
 | ||
|  | 
 | ||
|  | #ifndef KECCAKF_ROUNDS
 | ||
|  | #define KECCAKF_ROUNDS 24
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifndef ROTL64
 | ||
|  | #define ROTL64(x, y) (((x) << (y)) | ((x) >> (64 - (y))))
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | // state context
 | ||
|  | typedef struct { | ||
|  |     union {                                 // state:
 | ||
|  |         uint8_t b[200];                     // 8-bit bytes
 | ||
|  |         uint64_t q[25];                     // 64-bit words
 | ||
|  |     } st; | ||
|  |     int pt, rsiz, mdlen;                    // these don't overflow
 | ||
|  | } sha3_ctx_t; | ||
|  | 
 | ||
|  | // Compression function.
 | ||
|  | static void sha3_keccakf(uint64_t st[25]); | ||
|  | 
 | ||
|  | // OpenSSL - like interfece
 | ||
|  | static int sha3_init(sha3_ctx_t *c, int mdlen);    // mdlen = hash output in bytes
 | ||
|  | static int sha3_update(sha3_ctx_t *c, const void *data, size_t len); | ||
|  | static int sha3_final(void *md, sha3_ctx_t *c);    // digest goes to md
 | ||
|  | 
 | ||
|  | // compute a sha3 hash (md) of given byte length from "in"
 | ||
|  | #if 0
 | ||
|  | static void *sha3(const void *in, size_t inlen, void *md, int mdlen); | ||
|  | #endif
 | ||
|  | 
 | ||
|  | // SHAKE128 and SHAKE256 extensible-output functions
 | ||
|  | #define shake128_init(c) sha3_init(c, 16)
 | ||
|  | #define shake256_init(c) sha3_init(c, 32)
 | ||
|  | #define shake_update sha3_update
 | ||
|  | 
 | ||
|  | static void shake_xof(sha3_ctx_t *c); | ||
|  | static void shake_out(sha3_ctx_t *c, void *out, size_t len); | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 |