bpki_test.c 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. *******************************************************************************
  3. \file bpki_test.c
  4. \brief Tests for STB 34.101.78 (bpki) helpers
  5. \project bee2/test
  6. \created 2021.04.13
  7. \version 2022.07.05
  8. \license This program is released under the GNU General Public License
  9. version 3. See Copyright Notices in bee2/info.h.
  10. *******************************************************************************
  11. */
  12. #include <bee2/core/mem.h>
  13. #include <bee2/core/str.h>
  14. #include <bee2/core/util.h>
  15. #include <bee2/crypto/belt.h>
  16. #include <bee2/crypto/bpki.h>
  17. bool_t bpkiTest()
  18. {
  19. octet epki[1024];
  20. octet key[65];
  21. octet pwd[] = { 'z', 'e', 'd' };
  22. size_t epki_len, key_len;
  23. // создать контейнер с личным ключом (l = 128)
  24. if (bpkiPrivkeyWrap(epki, &epki_len, beltH(), 32,
  25. pwd, sizeof(pwd), beltH() + 32, 10000) != ERR_OK)
  26. return FALSE;
  27. ASSERT(epki_len <= sizeof(epki));
  28. // разобрать контейнер с личным ключом (l = 128)
  29. if (bpkiPrivkeyUnwrap(key, &key_len, epki, epki_len,
  30. pwd, sizeof(pwd)) != ERR_OK ||
  31. key_len != 32 || !memEq(key, beltH(), 32))
  32. return FALSE;
  33. // создать контейнер с личным ключом (l = 192)
  34. if (bpkiPrivkeyWrap(epki, &epki_len, beltH(), 48,
  35. pwd, sizeof(pwd), beltH() + 40, 10001) != ERR_OK)
  36. return FALSE;
  37. ASSERT(epki_len <= sizeof(epki));
  38. // разобрать контейнер с личным ключом (l = 192)
  39. if (bpkiPrivkeyUnwrap(key, &key_len, epki, epki_len,
  40. pwd, sizeof(pwd)) != ERR_OK ||
  41. key_len != 48 || !memEq(key, beltH(), 48))
  42. return FALSE;
  43. // создать контейнер с личным ключом (l = 256)
  44. if (bpkiPrivkeyWrap(epki, &epki_len, beltH(), 64,
  45. pwd, sizeof(pwd), beltH() + 48, 10002) != ERR_OK)
  46. return FALSE;
  47. ASSERT(epki_len <= sizeof(epki));
  48. // разобрать контейнер с личным ключом (l = 256)
  49. if (bpkiPrivkeyUnwrap(key, &key_len, epki, epki_len,
  50. pwd, sizeof(pwd)) != ERR_OK ||
  51. key_len != 64 || !memEq(key, beltH(), 64))
  52. return FALSE;
  53. // создать контейнер с частичным секретом (l = 128)
  54. memCopy(key + 1, beltH(), 16), key[0] = 1;
  55. if (bpkiShareWrap(epki, &epki_len, key, 17,
  56. pwd, sizeof(pwd), beltH() + 64, 10003) != ERR_OK)
  57. return FALSE;
  58. ASSERT(epki_len <= sizeof(epki));
  59. // разобрать контейнер с частичным секретом (l = 128)
  60. if (bpkiShareUnwrap(key, &key_len, epki, epki_len,
  61. pwd, sizeof(pwd)) != ERR_OK ||
  62. key_len != 17 || !memEq(key + 1, beltH(), 16) || key[0] != 1)
  63. return FALSE;
  64. // создать контейнер с частичным секретом (l = 192)
  65. memCopy(key + 1, beltH(), 24), key[0] = 2;
  66. if (bpkiShareWrap(epki, &epki_len, key, 25,
  67. pwd, sizeof(pwd), beltH() + 64, 10004) != ERR_OK)
  68. return FALSE;
  69. ASSERT(epki_len <= sizeof(epki));
  70. // разобрать контейнер с частичным секретом (l = 192)
  71. if (bpkiShareUnwrap(key, &key_len, epki, epki_len,
  72. pwd, sizeof(pwd)) != ERR_OK ||
  73. key_len != 25 || !memEq(key + 1, beltH(), 24) || key[0] != 2)
  74. return FALSE;
  75. // создать контейнер с частичным секретом (l = 256)
  76. memCopy(key + 1, beltH(), 32), key[0] = 16;
  77. if (bpkiShareWrap(epki, &epki_len, key, 33,
  78. pwd, sizeof(pwd), beltH() + 64, 10005) != ERR_OK)
  79. return FALSE;
  80. ASSERT(epki_len <= sizeof(epki));
  81. // разобрать контейнер с частичным секретом (l = 128)
  82. if (bpkiShareUnwrap(key, &key_len, epki, epki_len,
  83. pwd, sizeof(pwd)) != ERR_OK ||
  84. key_len != 33 || !memEq(key + 1, beltH(), 32) || key[0] != 16)
  85. return FALSE;
  86. // все нормально
  87. return TRUE;
  88. }