belt_bench.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. *******************************************************************************
  3. \file belt_bench.c
  4. \brief Benchmarks for STB 34.101.31 (belt)
  5. \project bee2/test
  6. \author (C) Sergey Agievich [agievich@{bsu.by|gmail.com}]
  7. \created 2014.11.18
  8. \version 2020.06.23
  9. \license This program is released under the GNU General Public License
  10. version 3. See Copyright Notices in bee2/info.h.
  11. *******************************************************************************
  12. */
  13. #include <stdio.h>
  14. #include <bee2/core/prng.h>
  15. #include <bee2/core/tm.h>
  16. #include <bee2/core/util.h>
  17. #include <bee2/crypto/belt.h>
  18. #include <bee2/math/pp.h>
  19. #include <bee2/math/ww.h>
  20. /*
  21. *******************************************************************************
  22. Замер производительности
  23. *******************************************************************************
  24. */
  25. bool_t beltBench()
  26. {
  27. const size_t reps = 5000;
  28. octet belt_state[512];
  29. octet combo_state[256];
  30. octet buf[1024];
  31. octet key[32];
  32. octet iv[16];
  33. octet hash[32];
  34. size_t i;
  35. tm_ticks_t ticks;
  36. // псевдослучайная генерация объектов
  37. ASSERT(prngCOMBO_keep() <= sizeof(combo_state));
  38. prngCOMBOStart(combo_state, utilNonce32());
  39. prngCOMBOStepR(buf, sizeof(buf), combo_state);
  40. prngCOMBOStepR(key, sizeof(key), combo_state);
  41. prngCOMBOStepR(iv, sizeof(iv), combo_state);
  42. // cкорость belt-ecb
  43. ASSERT(beltECB_keep() <= sizeof(belt_state));
  44. beltECBStart(belt_state, key, 32);
  45. for (i = 0, ticks = tmTicks(); i < reps; ++i)
  46. beltECBStepE(buf, 1024, belt_state),
  47. beltECBStepD(buf, 1024, belt_state);
  48. ticks = tmTicks() - ticks;
  49. printf("beltBench::belt-ecb: %3u cpb [%5u kBytes/sec]\n",
  50. (unsigned)(ticks / 2048 / reps),
  51. (unsigned)tmSpeed(2 * reps, ticks));
  52. // cкорость belt-cbc
  53. ASSERT(beltCFB_keep() <= sizeof(belt_state));
  54. beltCBCStart(belt_state, key, 32, iv);
  55. for (i = 0, ticks = tmTicks(); i < reps; ++i)
  56. beltCBCStepE(buf, 1024, belt_state),
  57. beltCBCStepD(buf, 1024, belt_state);
  58. ticks = tmTicks() - ticks;
  59. printf("beltBench::belt-cbc: %3u cpb [%5u kBytes/sec]\n",
  60. (unsigned)(ticks / 2048 / reps),
  61. (unsigned)tmSpeed(2 * reps, ticks));
  62. // cкорость belt-cfb
  63. ASSERT(beltCFB_keep() <= sizeof(belt_state));
  64. beltCFBStart(belt_state, key, 32, iv);
  65. for (i = 0, ticks = tmTicks(); i < reps; ++i)
  66. beltCFBStepE(buf, 1024, belt_state),
  67. beltCFBStepD(buf, 1024, belt_state);
  68. ticks = tmTicks() - ticks;
  69. printf("beltBench::belt-cfb: %3u cpb [%5u kBytes/sec]\n",
  70. (unsigned)(ticks / 2048 / reps),
  71. (unsigned)tmSpeed(2 * reps, ticks));
  72. // cкорость belt-ctr
  73. ASSERT(beltCTR_keep() <= sizeof(belt_state));
  74. beltCTRStart(belt_state, key, 32, iv);
  75. for (i = 0, ticks = tmTicks(); i < reps; ++i)
  76. beltCTRStepE(buf, 1024, belt_state),
  77. beltCTRStepD(buf, 1024, belt_state);
  78. ticks = tmTicks() - ticks;
  79. printf("beltBench::belt-ctr: %3u cpb [%5u kBytes/sec]\n",
  80. (unsigned)(ticks / 2048 / reps),
  81. (unsigned)tmSpeed(2 * reps, ticks));
  82. // cкорость belt-mac
  83. ASSERT(beltMAC_keep() <= sizeof(belt_state));
  84. beltMACStart(belt_state, key, 32);
  85. for (i = 0, ticks = tmTicks(); i < reps; ++i)
  86. beltMACStepA(buf, 1024, belt_state);
  87. beltMACStepG(hash, belt_state);
  88. ticks = tmTicks() - ticks;
  89. printf("beltBench::belt-mac: %3u cpb [%5u kBytes/sec]\n",
  90. (unsigned)(ticks / 1024 / reps),
  91. (unsigned)tmSpeed(reps, ticks));
  92. // cкорость belt-dwp
  93. ASSERT(beltDWP_keep() <= sizeof(belt_state));
  94. beltDWPStart(belt_state, key, 32, iv);
  95. for (i = 0, ticks = tmTicks(); i < reps; ++i)
  96. beltDWPStepE(buf, 1024, belt_state),
  97. beltDWPStepA(buf, 1024, belt_state);
  98. beltDWPStepG(hash, belt_state);
  99. ticks = tmTicks() - ticks;
  100. printf("beltBench::belt-dwp: %3u cpb [%5u kBytes/sec]\n",
  101. (unsigned)(ticks / 1024 / reps),
  102. (unsigned)tmSpeed(reps, ticks));
  103. // cкорость belt-hash
  104. ASSERT(beltHash_keep() <= sizeof(belt_state));
  105. beltHashStart(belt_state);
  106. for (i = 0, ticks = tmTicks(); i < reps; ++i)
  107. beltHashStepH(buf, 1024, belt_state);
  108. beltHashStepG(hash, belt_state);
  109. ticks = tmTicks() - ticks;
  110. printf("beltBench::belt-hash: %3u cpb [%5u kBytes/sec]\n",
  111. (unsigned)(ticks / 1024 / reps),
  112. (unsigned)tmSpeed(reps, ticks));
  113. // все нормально
  114. return TRUE;
  115. }