Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

74 wiersze
2.0 KiB

  1. /**
  2. * @cond internal
  3. * @file shakesum.c
  4. * @copyright
  5. * Copyright (c) 2015 Cryptography Research, Inc. \n
  6. * Released under the MIT License. See LICENSE.txt for license information.
  7. * @author Mike Hamburg
  8. * @brief SHA3 utility, to be combined with test vectors eventually...
  9. */
  10. #include <stdio.h>
  11. #include <unistd.h>
  12. #include <string.h>
  13. #include <decaf/shake.h>
  14. static void usage() {
  15. fprintf(
  16. stderr,
  17. "shakesum [shake256|shake128|sha3-224|sha3-384|sha3-512] < infile > outfile\n"
  18. );
  19. }
  20. int main(int argc, char **argv) {
  21. (void)argc; (void)argv;
  22. keccak_sponge_t sponge;
  23. unsigned char buf[1024];
  24. unsigned int outlen = 512;
  25. shake256_gen_init(sponge);
  26. /* Sloppy. Real utility would parse --algo, --size ... */
  27. if (argc > 1) {
  28. if (!strcmp(argv[1], "shake256") || !strcmp(argv[1], "SHAKE256")) {
  29. outlen = 512;
  30. shake256_gen_init(sponge);
  31. } else if (!strcmp(argv[1], "shake128") || !strcmp(argv[1], "SHAKE128")) {
  32. outlen = 512;
  33. shake128_gen_init(sponge);
  34. } else if (!strcmp(argv[1], "sha3-224") || !strcmp(argv[1], "SHA3-224")) {
  35. outlen = 224/8;
  36. sha3_224_gen_init(sponge);
  37. } else if (!strcmp(argv[1], "sha3-256") || !strcmp(argv[1], "SHA3-256")) {
  38. outlen = 256/8;
  39. sha3_256_gen_init(sponge);
  40. } else if (!strcmp(argv[1], "sha3-384") || !strcmp(argv[1], "SHA3-384")) {
  41. outlen = 384/8;
  42. sha3_384_gen_init(sponge);
  43. } else if (!strcmp(argv[1], "sha3-512") || !strcmp(argv[1], "SHA3-512")) {
  44. outlen = 512/8;
  45. sha3_512_gen_init(sponge);
  46. } else {
  47. usage();
  48. return 2;
  49. }
  50. }
  51. ssize_t red;
  52. do {
  53. red = read(0, buf, sizeof(buf));
  54. if (red>0) sha3_update(sponge,buf,red);
  55. } while (red>0);
  56. sha3_output(sponge,buf,outlen);
  57. sponge_destroy(sponge);
  58. unsigned i;
  59. for (i=0; i<outlen; i++) {
  60. printf("%02x", buf[i]);
  61. }
  62. printf("\n");
  63. return 0;
  64. }