stb99_test.c 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /*
  2. *******************************************************************************
  3. \file stb99_test.c
  4. \brief Tests for STB 1176.2-99[generation of parameters]
  5. \project bee2/test
  6. \created 2023.08.05
  7. \version 2024.02.29
  8. \copyright The Bee2 authors
  9. \license Licensed under the Apache License, Version 2.0 (see LICENSE.txt).
  10. *******************************************************************************
  11. */
  12. #include <bee2/core/mem.h>
  13. #include <bee2/core/hex.h>
  14. #include <bee2/core/prng.h>
  15. #include <bee2/core/str.h>
  16. #include <bee2/core/util.h>
  17. #include <bee2/math/ww.h>
  18. #include <bee2/math/zz.h>
  19. #include <bee2/crypto/stb99.h>
  20. /*
  21. *******************************************************************************
  22. Самотестирование
  23. Реализованы тесты из Методики НИИ ППМИ.
  24. Тест GPQA.LNN -- это объединение тестов GPQ.LNN и GA.LNN Методики.
  25. В тесте GPQ.LNN проверяется генерация параметров p, q уровня NN,
  26. в тесте GA.LNN -- генерация параметра a.
  27. В функции stb99TestParamsTest() реализован тест GPQA.L01.
  28. В функции stb99TestParamsStd() реализованы тесты GPQA.L03, GPQA.L06, GPQA.L10.
  29. В этих тестах проверяется корректность генерации стандартных параметров,
  30. определенных в СТБ 34.101.50.
  31. \remark Тесты GPQA.L{03,06,10}, реализованные в функции stb99TestParamsStd(),
  32. выполняются достаточно долго и поэтому заблокированы.
  33. *******************************************************************************
  34. */
  35. bool_t stb99TestParamsTest()
  36. {
  37. stb99_seed seed[1];
  38. stb99_seed seed1[1];
  39. stb99_params params[1];
  40. stb99_params params1[1];
  41. // проверка затравочных параметров
  42. memSetZero(seed1, sizeof(stb99_seed));
  43. if (stb99SeedVal(seed1) == ERR_OK ||
  44. stb99ParamsStd(params, seed, "test") != ERR_OK ||
  45. (seed1->l = params->l, stb99SeedAdj(seed1)) != ERR_OK ||
  46. !memEq(seed, seed1, sizeof(stb99_seed)))
  47. return FALSE;
  48. // доопределение затравочных параметров
  49. memCopy(seed1->zi, seed->zi, sizeof(seed->zi));
  50. if (stb99SeedAdj(seed1) != ERR_OK ||
  51. !memEq(seed, seed1, sizeof(stb99_seed)) ||
  52. (seed1->di[4] = 0, stb99SeedVal(seed1)) == ERR_OK ||
  53. (seed1->di[4] = SIZE_MAX / 5 - 1, stb99SeedVal(seed1)) == ERR_OK)
  54. return FALSE;
  55. memSetZero(seed1->di, sizeof(seed1->di));
  56. if (stb99SeedAdj(seed1) != ERR_OK ||
  57. stb99SeedVal(seed1) != ERR_OK ||
  58. !memEq(seed, seed1, sizeof(stb99_seed)) ||
  59. (seed1->ri[3] = 0, stb99SeedVal(seed1)) == ERR_OK ||
  60. (seed1->ri[3] = SIZE_MAX / 5 - 1, stb99SeedVal(seed1)) == ERR_OK)
  61. return FALSE;
  62. memSetZero(seed1->ri, sizeof(seed1->ri));
  63. if (stb99SeedAdj(seed1) != ERR_OK ||
  64. stb99SeedVal(seed1) != ERR_OK ||
  65. !memEq(seed, seed1, sizeof(stb99_seed)))
  66. return FALSE;
  67. // тест GPQA.L01
  68. if (stb99ParamsStd(params, 0, "test") != ERR_OK ||
  69. stb99ParamsGen(params1, seed1) != ERR_OK ||
  70. stb99ParamsVal(params1) != ERR_OK ||
  71. !memEq(params, params1, sizeof(stb99_params)))
  72. return FALSE;
  73. // испортить параметры
  74. params1->d[0] += 2;
  75. if (stb99ParamsVal(params1) == ERR_OK)
  76. return FALSE;
  77. // все нормально
  78. return TRUE;
  79. }
  80. bool_t stb99TestParamsStd()
  81. {
  82. stb99_params params[1];
  83. stb99_params params1[1];
  84. stb99_seed seed[1];
  85. // тест GPQA.L03
  86. if (stb99ParamsStd(params, seed, "1.2.112.0.2.0.1176.2.3.3.1") != ERR_OK ||
  87. stb99ParamsGen(params1, seed) != ERR_OK ||
  88. !memEq(params, params1, sizeof(stb99_params)))
  89. return FALSE;
  90. // тест GPQA.L06
  91. if (stb99ParamsStd(params, seed, "1.2.112.0.2.0.1176.2.3.6.1") != ERR_OK ||
  92. stb99ParamsGen(params1, seed) != ERR_OK ||
  93. !memEq(params, params1, sizeof(stb99_params)))
  94. return FALSE;
  95. // тест GPQA.L10
  96. if (stb99ParamsStd(params, seed, "1.2.112.0.2.0.1176.2.3.10.1") != ERR_OK ||
  97. stb99ParamsGen(params1, seed) != ERR_OK ||
  98. !memEq(params, params1, sizeof(stb99_params)))
  99. return FALSE;
  100. // все нормально
  101. return TRUE;
  102. }
  103. bool_t stb99TestParamsStd2()
  104. {
  105. stb99_params params[1];
  106. stb99_seed seed[1];
  107. // проверка параметров теста GPQA.L03
  108. if (stb99ParamsStd(params, seed, "1.2.112.0.2.0.1176.2.3.3.1") != ERR_OK ||
  109. stb99SeedVal(seed) != ERR_OK ||
  110. stb99ParamsVal(params) != ERR_OK)
  111. return FALSE;
  112. // проверка параметров теста GPQA.L06
  113. if (stb99ParamsStd(params, seed, "1.2.112.0.2.0.1176.2.3.6.1") != ERR_OK ||
  114. stb99SeedVal(seed) != ERR_OK ||
  115. stb99ParamsVal(params) != ERR_OK)
  116. return FALSE;
  117. // проверка параметров теста GPQA.L10
  118. if (stb99ParamsStd(params, seed, "1.2.112.0.2.0.1176.2.3.10.1") != ERR_OK ||
  119. stb99SeedVal(seed) != ERR_OK ||
  120. stb99ParamsVal(params) != ERR_OK)
  121. return FALSE;
  122. // все нормально
  123. return TRUE;
  124. }
  125. bool_t stb99Test()
  126. {
  127. return stb99TestParamsTest() && stb99TestParamsStd2();
  128. }