Path: blob/main/crypto/libecc/src/hash/shake256.c
103954 views
/*1* Copyright (C) 2021 - This file is part of libecc project2*3* Authors:4* Ryad BENADJILA <[email protected]>5* Arnaud EBALARD <[email protected]>6*7* This software is licensed under a dual BSD and GPL v2 license.8* See LICENSE file at the root folder of the project.9*/10#include <libecc/lib_ecc_config.h>11#ifdef WITH_HASH_SHAKE2561213#include <libecc/hash/shake256.h>1415int shake256_init(shake256_context *ctx)16{17int ret;1819ret = _shake_init(ctx, SHAKE256_DIGEST_SIZE, SHAKE256_BLOCK_SIZE); EG(ret, err);2021/* Tell that we are initialized */22ctx->magic = SHAKE256_HASH_MAGIC;2324err:25return ret;26}2728int shake256_update(shake256_context *ctx, const u8 *input, u32 ilen)29{30int ret;3132SHAKE256_HASH_CHECK_INITIALIZED(ctx, ret, err);3334ret = _shake_update((shake_context *)ctx, input, ilen);3536err:37return ret;38}3940int shake256_final(shake256_context *ctx, u8 output[SHAKE256_DIGEST_SIZE])41{42int ret;4344SHAKE256_HASH_CHECK_INITIALIZED(ctx, ret, err);4546ret = _shake_finalize((shake_context *)ctx, output);4748/* Tell that we are uninitialized */49ctx->magic = WORD(0);5051err:52return ret;53}5455int shake256_scattered(const u8 **inputs, const u32 *ilens,56u8 output[SHAKE256_DIGEST_SIZE])57{58shake256_context ctx;59int pos = 0, ret;6061MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err);6263ret = shake256_init(&ctx); EG(ret, err);6465while (inputs[pos] != NULL) {66ret = shake256_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err);67pos += 1;68}6970ret = shake256_final(&ctx, output);7172err:73return ret;74}7576int shake256(const u8 *input, u32 ilen, u8 output[SHAKE256_DIGEST_SIZE])77{78int ret;79shake256_context ctx;8081ret = shake256_init(&ctx); EG(ret, err);82ret = shake256_update(&ctx, input, ilen); EG(ret, err);83ret = shake256_final(&ctx, output);8485err:86return ret;87}8889#else /* WITH_HASH_SHAKE256 */9091/*92* Dummy definition to avoid the empty translation unit ISO C warning93*/94typedef int dummy;95#endif /* WITH_HASH_SHAKE256 */969798