/** * @cond internal * @file shakesum.c * @copyright * Copyright (c) 2015 Cryptography Research, Inc. \n * Released under the MIT License. See LICENSE.txt for license information. * @author Mike Hamburg * @brief SHA3 utility, to be combined with test vectors eventually... */ #include #include #include #include "shake.h" int main(int argc, char **argv) { (void)argc; (void)argv; keccak_sponge_t sponge; unsigned char buf[1024]; unsigned int outlen = 512; shake256_init(sponge); /* Sloppy. Real utility would parse --algo, --size ... */ if (argc > 1) { if (!strcmp(argv[1], "shake256") || !strcmp(argv[1], "SHAKE256")) { outlen = 512; shake256_init(sponge); } else if (!strcmp(argv[1], "shake128") || !strcmp(argv[1], "SHAKE128")) { outlen = 512; shake128_init(sponge); } else if (!strcmp(argv[1], "sha3-224") || !strcmp(argv[1], "SHA3-224")) { outlen = 224/8; sha3_224_init(sponge); } else if (!strcmp(argv[1], "sha3-256") || !strcmp(argv[1], "SHA3-256")) { outlen = 256/8; sha3_256_init(sponge); } else if (!strcmp(argv[1], "sha3-384") || !strcmp(argv[1], "SHA3-384")) { outlen = 384/8; sha3_384_init(sponge); } else if (!strcmp(argv[1], "sha3-512") || !strcmp(argv[1], "SHA3-512")) { outlen = 512/8; sha3_512_init(sponge); } } ssize_t red; do { red = read(0, buf, sizeof(buf)); if (red>0) sha3_update(sponge,buf,red); } while (red>0); sha3_output(sponge,buf,outlen); sponge_destroy(sponge); unsigned i; for (i=0; i