diff options
| author | Mattias Andrée <maandree@operamail.com> | 2014-04-23 18:24:25 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@operamail.com> | 2014-04-23 18:24:25 +0200 |
| commit | 3d12da5569c59259092f578ba62023ced941b1cf (patch) | |
| tree | 14adf28e9ef67e113a1321e1ce7ed7bf5fa67f1d /src/sha3.h | |
| parent | add copying and license (diff) | |
| download | autopasswd-3d12da5569c59259092f578ba62023ced941b1cf.tar.gz autopasswd-3d12da5569c59259092f578ba62023ced941b1cf.tar.bz2 autopasswd-3d12da5569c59259092f578ba62023ced941b1cf.tar.xz | |
first draft
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src/sha3.h')
| -rw-r--r-- | src/sha3.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/sha3.h b/src/sha3.h new file mode 100644 index 0000000..f984df5 --- /dev/null +++ b/src/sha3.h @@ -0,0 +1,115 @@ +/** + * sha3sum – SHA-3 (Keccak) checksum calculator + * + * Copyright © 2013, 2014 Mattias Andrée (maandree@member.fsf.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 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. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#ifndef __SHA3_H__ +#define __SHA3_H__ + +#include <stdlib.h> + + +#ifdef WITH_C99 + #include <inttypes.h> + #define restrict_ restrict + #define byte int_fast8_t + #define boolean int_fast8_t + #define llong int_fast64_t + #define ullong uint_fast64_t +#else + #define restrict_ /* introduced in C99 */ + #define byte char + #define boolean char + #if __x86_64__ || __ppc64__ + #define llong long int + #else + #define llong long long int + #endif + #define ullong unsigned llong +#endif + + + +/** + * Initialise Keccak sponge + * + * @param bitrate The bitrate + * @param capacity The capacity + * @param output The output size + */ +extern void sha3_initialise(long bitrate, long capacity, long output); + + +/** + * Dispose of the Keccak sponge + */ +extern void sha3_dispose(void); + + +/** + * Absorb the more of the message to the Keccak sponge + * + * @param msg The partial message + * @param msglen The length of the partial message + */ +extern void sha3_update(byte* restrict_ msg, long msglen); + + +/** + * Absorb the last part of the message and squeeze the Keccak sponge + * + * @param msg The rest of the message, may be {@code null} + * @param msglen The length of the partial message + * @param withReturn Whether to return the hash instead of just do a quick squeeze phrase and return {@code null} + * @return The hash sum, or {@code null} if <tt>withReturn</tt> is {@code false} + */ +extern byte* sha3_digest(byte* restrict_ msg, long msglen, boolean withReturn); + + +/** + * Force some rounds of Keccak-f + * + * @param times The number of rounds + */ +extern void sha3_simpleSqueeze(long times); + + +/** + * Squeeze as much as is needed to get a digest a number of times + * + * @param times The number of digests + */ +extern void sha3_fastSqueeze(long times); + + +/** + * Squeeze out another digest + * + * @return The hash sum + */ +extern byte* sha3_squeeze(void); + + +/** + * Retrieve the state of the Keccak sponge + * + * @return A 25-element array with the state, changes will be applied to the sponge + */ +extern llong* sha3_state(void); + + +#endif + |
