kpqc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +21 -0
  4. data/README.md +174 -0
  5. data/Rakefile +57 -0
  6. data/THIRD_PARTY_NOTICES.md +53 -0
  7. data/ext/kpqc/aimer128f/extconf.rb +4 -0
  8. data/ext/kpqc/aimer128s/extconf.rb +4 -0
  9. data/ext/kpqc/aimer192f/extconf.rb +4 -0
  10. data/ext/kpqc/aimer192s/extconf.rb +4 -0
  11. data/ext/kpqc/aimer256f/extconf.rb +4 -0
  12. data/ext/kpqc/aimer256s/extconf.rb +4 -0
  13. data/ext/kpqc/extconf_helper.rb +93 -0
  14. data/ext/kpqc/haetae2/extconf.rb +4 -0
  15. data/ext/kpqc/haetae3/extconf.rb +4 -0
  16. data/ext/kpqc/haetae5/extconf.rb +4 -0
  17. data/ext/kpqc/module.c +195 -0
  18. data/ext/kpqc/ntruplus1152/extconf.rb +4 -0
  19. data/ext/kpqc/ntruplus768/extconf.rb +4 -0
  20. data/ext/kpqc/ntruplus864/extconf.rb +4 -0
  21. data/ext/kpqc/randombytes.c +107 -0
  22. data/ext/kpqc/smaugt128/extconf.rb +4 -0
  23. data/ext/kpqc/smaugt192/extconf.rb +4 -0
  24. data/ext/kpqc/smaugt256/extconf.rb +4 -0
  25. data/ext/kpqc/timer/extconf.rb +4 -0
  26. data/kpqc.gemspec +41 -0
  27. data/lib/kpqc/aimer.rb +38 -0
  28. data/lib/kpqc/api.rb +129 -0
  29. data/lib/kpqc/haetae.rb +25 -0
  30. data/lib/kpqc/ntruplus.rb +25 -0
  31. data/lib/kpqc/smaugt.rb +29 -0
  32. data/lib/kpqc/types.rb +103 -0
  33. data/lib/kpqc/version.rb +6 -0
  34. data/lib/kpqc.rb +33 -0
  35. data/test/algorithm_test.rb +111 -0
  36. data/test/api_test.rb +52 -0
  37. data/test/interop.mjs +34 -0
  38. data/test/interop_test.rb +82 -0
  39. data/test/kat/aimer128f.rsp +10 -0
  40. data/test/kat/aimer128s.rsp +10 -0
  41. data/test/kat/aimer192f.rsp +10 -0
  42. data/test/kat/aimer192s.rsp +10 -0
  43. data/test/kat/aimer256f.rsp +10 -0
  44. data/test/kat/aimer256s.rsp +10 -0
  45. data/test/kat/haetae2.rsp +10 -0
  46. data/test/kat/haetae3.rsp +10 -0
  47. data/test/kat/haetae5.rsp +10 -0
  48. data/test/kat/ntruplus1152.rsp +8 -0
  49. data/test/kat/ntruplus768.rsp +8 -0
  50. data/test/kat/ntruplus864.rsp +8 -0
  51. data/test/kat/smaugt128.rsp +8 -0
  52. data/test/kat/smaugt192.rsp +8 -0
  53. data/test/kat/smaugt256.rsp +8 -0
  54. data/test/kat/timer.rsp +8 -0
  55. data/test/kat_drbg.rb +155 -0
  56. data/test/kat_test.rb +99 -0
  57. data/test/test_helper.rb +21 -0
  58. data/vendor/AIMer/LICENSE +21 -0
  59. data/vendor/AIMer/aim2.c +163 -0
  60. data/vendor/AIMer/aim2.h +36 -0
  61. data/vendor/AIMer/aim2_constant.h +74 -0
  62. data/vendor/AIMer/api.h +42 -0
  63. data/vendor/AIMer/common/crypto_declassify.h +7 -0
  64. data/vendor/AIMer/common/fips202.c +878 -0
  65. data/vendor/AIMer/common/fips202.h +166 -0
  66. data/vendor/AIMer/common/rng.h +56 -0
  67. data/vendor/AIMer/field.h +43 -0
  68. data/vendor/AIMer/field128.c +454 -0
  69. data/vendor/AIMer/field192.c +485 -0
  70. data/vendor/AIMer/field256.c +564 -0
  71. data/vendor/AIMer/hash.c +50 -0
  72. data/vendor/AIMer/hash.h +37 -0
  73. data/vendor/AIMer/params/params-aimer-128f.h +34 -0
  74. data/vendor/AIMer/params/params-aimer-128s.h +34 -0
  75. data/vendor/AIMer/params/params-aimer-192f.h +34 -0
  76. data/vendor/AIMer/params/params-aimer-192s.h +34 -0
  77. data/vendor/AIMer/params/params-aimer-256f.h +34 -0
  78. data/vendor/AIMer/params/params-aimer-256s.h +34 -0
  79. data/vendor/AIMer/params.h +5 -0
  80. data/vendor/AIMer/sign.c +631 -0
  81. data/vendor/AIMer/sign.h +40 -0
  82. data/vendor/AIMer/tree.c +75 -0
  83. data/vendor/AIMer/tree.h +26 -0
  84. data/vendor/HAETAE/LICENSE +22 -0
  85. data/vendor/HAETAE/include/api.h +54 -0
  86. data/vendor/HAETAE/include/common.h +12 -0
  87. data/vendor/HAETAE/include/config.h +42 -0
  88. data/vendor/HAETAE/include/decompose.h +19 -0
  89. data/vendor/HAETAE/include/encoding.h +20 -0
  90. data/vendor/HAETAE/include/fft.h +26 -0
  91. data/vendor/HAETAE/include/fips202.h +40 -0
  92. data/vendor/HAETAE/include/fixpoint.h +125 -0
  93. data/vendor/HAETAE/include/ntt.h +16 -0
  94. data/vendor/HAETAE/include/packing.h +58 -0
  95. data/vendor/HAETAE/include/params.h +117 -0
  96. data/vendor/HAETAE/include/poly.h +65 -0
  97. data/vendor/HAETAE/include/polyfix.h +65 -0
  98. data/vendor/HAETAE/include/polymat.h +32 -0
  99. data/vendor/HAETAE/include/polyvec.h +131 -0
  100. data/vendor/HAETAE/include/randombytes.h +39 -0
  101. data/vendor/HAETAE/include/rans_byte.h +335 -0
  102. data/vendor/HAETAE/include/reduce.h +31 -0
  103. data/vendor/HAETAE/include/sampler.h +23 -0
  104. data/vendor/HAETAE/include/symmetric.h +52 -0
  105. data/vendor/HAETAE/src/decompose.c +73 -0
  106. data/vendor/HAETAE/src/encoding.c +700 -0
  107. data/vendor/HAETAE/src/fft.c +235 -0
  108. data/vendor/HAETAE/src/fips202.c +745 -0
  109. data/vendor/HAETAE/src/fixpoint.c +143 -0
  110. data/vendor/HAETAE/src/ntt.c +98 -0
  111. data/vendor/HAETAE/src/packing.c +595 -0
  112. data/vendor/HAETAE/src/poly.c +371 -0
  113. data/vendor/HAETAE/src/polyfix.c +298 -0
  114. data/vendor/HAETAE/src/polymat.c +82 -0
  115. data/vendor/HAETAE/src/polyvec.c +534 -0
  116. data/vendor/HAETAE/src/reduce.c +96 -0
  117. data/vendor/HAETAE/src/sampler.c +310 -0
  118. data/vendor/HAETAE/src/sign.c +558 -0
  119. data/vendor/HAETAE/src/symmetric-shake.c +50 -0
  120. data/vendor/NTRUplus/LICENSE +21 -0
  121. data/vendor/NTRUplus/NTRU+1152/api.h +24 -0
  122. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.c +878 -0
  123. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.h +166 -0
  124. data/vendor/NTRUplus/NTRU+1152/kem.c +286 -0
  125. data/vendor/NTRUplus/NTRU+1152/ntt.c +394 -0
  126. data/vendor/NTRUplus/NTRU+1152/ntt.h +16 -0
  127. data/vendor/NTRUplus/NTRU+1152/params.h +18 -0
  128. data/vendor/NTRUplus/NTRU+1152/poly.c +318 -0
  129. data/vendor/NTRUplus/NTRU+1152/poly.h +31 -0
  130. data/vendor/NTRUplus/NTRU+1152/randombytes.h +9 -0
  131. data/vendor/NTRUplus/NTRU+1152/symmetric.c +39 -0
  132. data/vendor/NTRUplus/NTRU+1152/symmetric.h +12 -0
  133. data/vendor/NTRUplus/NTRU+768/api.h +24 -0
  134. data/vendor/NTRUplus/NTRU+768/fips202/fips202.c +878 -0
  135. data/vendor/NTRUplus/NTRU+768/fips202/fips202.h +166 -0
  136. data/vendor/NTRUplus/NTRU+768/kem.c +286 -0
  137. data/vendor/NTRUplus/NTRU+768/ntt.c +379 -0
  138. data/vendor/NTRUplus/NTRU+768/ntt.h +16 -0
  139. data/vendor/NTRUplus/NTRU+768/params.h +18 -0
  140. data/vendor/NTRUplus/NTRU+768/poly.c +320 -0
  141. data/vendor/NTRUplus/NTRU+768/poly.h +31 -0
  142. data/vendor/NTRUplus/NTRU+768/randombytes.h +9 -0
  143. data/vendor/NTRUplus/NTRU+768/symmetric.c +39 -0
  144. data/vendor/NTRUplus/NTRU+768/symmetric.h +12 -0
  145. data/vendor/NTRUplus/NTRU+864/api.h +24 -0
  146. data/vendor/NTRUplus/NTRU+864/fips202/fips202.c +878 -0
  147. data/vendor/NTRUplus/NTRU+864/fips202/fips202.h +166 -0
  148. data/vendor/NTRUplus/NTRU+864/kem.c +286 -0
  149. data/vendor/NTRUplus/NTRU+864/ntt.c +383 -0
  150. data/vendor/NTRUplus/NTRU+864/ntt.h +16 -0
  151. data/vendor/NTRUplus/NTRU+864/params.h +18 -0
  152. data/vendor/NTRUplus/NTRU+864/poly.c +314 -0
  153. data/vendor/NTRUplus/NTRU+864/poly.h +31 -0
  154. data/vendor/NTRUplus/NTRU+864/randombytes.h +9 -0
  155. data/vendor/NTRUplus/NTRU+864/symmetric.c +39 -0
  156. data/vendor/NTRUplus/NTRU+864/symmetric.h +12 -0
  157. data/vendor/SMAUG-T/LICENSE +22 -0
  158. data/vendor/SMAUG-T/include/api.h +37 -0
  159. data/vendor/SMAUG-T/include/cbd.h +15 -0
  160. data/vendor/SMAUG-T/include/ciphertext.h +45 -0
  161. data/vendor/SMAUG-T/include/common.h +12 -0
  162. data/vendor/SMAUG-T/include/config.h +48 -0
  163. data/vendor/SMAUG-T/include/dg.h +28 -0
  164. data/vendor/SMAUG-T/include/fips202.h +41 -0
  165. data/vendor/SMAUG-T/include/hash.h +21 -0
  166. data/vendor/SMAUG-T/include/hwt.h +28 -0
  167. data/vendor/SMAUG-T/include/indcpa.h +33 -0
  168. data/vendor/SMAUG-T/include/key.h +34 -0
  169. data/vendor/SMAUG-T/include/pack.h +78 -0
  170. data/vendor/SMAUG-T/include/packring.h +50 -0
  171. data/vendor/SMAUG-T/include/params.h +84 -0
  172. data/vendor/SMAUG-T/include/poly.h +41 -0
  173. data/vendor/SMAUG-T/include/randombytes.h +11 -0
  174. data/vendor/SMAUG-T/include/toomcook.h +14 -0
  175. data/vendor/SMAUG-T/include/verify.h +16 -0
  176. data/vendor/SMAUG-T/src/cbd.c +159 -0
  177. data/vendor/SMAUG-T/src/ciphertext.c +95 -0
  178. data/vendor/SMAUG-T/src/dg.c +112 -0
  179. data/vendor/SMAUG-T/src/fips202.c +745 -0
  180. data/vendor/SMAUG-T/src/hash.c +15 -0
  181. data/vendor/SMAUG-T/src/hwt.c +121 -0
  182. data/vendor/SMAUG-T/src/indcpa.c +187 -0
  183. data/vendor/SMAUG-T/src/kem.c +194 -0
  184. data/vendor/SMAUG-T/src/key.c +102 -0
  185. data/vendor/SMAUG-T/src/pack.c +349 -0
  186. data/vendor/SMAUG-T/src/packring.c +503 -0
  187. data/vendor/SMAUG-T/src/poly.c +200 -0
  188. data/vendor/SMAUG-T/src/toomcook.c +256 -0
  189. data/vendor/SMAUG-T/src/verify.c +48 -0
  190. data/vendor/SOURCES.json +130 -0
  191. metadata +280 -0
@@ -0,0 +1,34 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #ifndef PARAMS_H
4
+ #define PARAMS_H
5
+
6
+ #define AIMER_NAMESPACE(s) samsungsds_aimer_128s_ref_##s
7
+
8
+ #define SECURITY_BITS 128 // security parameter
9
+ #define SECURITY_BYTES (SECURITY_BITS / 8) // byte size of security parameter
10
+
11
+ #define AIM2_NUM_BITS_FIELD SECURITY_BITS // number of bits in field element
12
+ #define AIM2_NUM_BYTES_FIELD SECURITY_BYTES // number of bytes in field element
13
+ #define AIM2_NUM_WORDS_FIELD (SECURITY_BITS / 64) // number of 64-bit words in element
14
+ #define AIM2_NUM_BITS_WORD 64 // number of bits in word
15
+ #define AIM2_IV_SIZE SECURITY_BYTES // byte size of AIM2 initial vector
16
+
17
+ #define AIM2_NUM_INPUT_SBOX 2 // number of AIM2 input S-boxes
18
+
19
+ #define AIMER_SALT_SIZE SECURITY_BYTES // byte size of salt
20
+ #define AIMER_SEED_SIZE SECURITY_BYTES // byte size of seed
21
+ #define AIMER_COMMIT_SIZE (SECURITY_BYTES * 2) // byte size of commitment
22
+
23
+ #define AIMER_L AIM2_NUM_INPUT_SBOX
24
+ #define AIMER_T 17 // number of parallel repetitions (Tau)
25
+ #define AIMER_N 256 // number of MPC parties (N)
26
+ #define AIMER_LOGN 8 // log_2(N)
27
+
28
+ #define AIMER_PK_BYTES 32 // byte size of public key
29
+ #define AIMER_SK_BYTES 48 // byte size of secret key
30
+ #define AIMER_SIG_BYTES 4160 // byte size of signature
31
+
32
+ #define AIMER_HASH_PREFIX_0 0x10
33
+
34
+ #endif // PARAMS_H
@@ -0,0 +1,34 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #ifndef PARAMS_H
4
+ #define PARAMS_H
5
+
6
+ #define AIMER_NAMESPACE(s) samsungsds_aimer_192f_ref_##s
7
+
8
+ #define SECURITY_BITS 192 // security parameter
9
+ #define SECURITY_BYTES (SECURITY_BITS / 8) // byte size of security parameter
10
+
11
+ #define AIM2_NUM_BITS_FIELD SECURITY_BITS // number of bits in field element
12
+ #define AIM2_NUM_BYTES_FIELD SECURITY_BYTES // number of bytes in field element
13
+ #define AIM2_NUM_WORDS_FIELD (SECURITY_BITS / 64) // number of 64-bit words in element
14
+ #define AIM2_NUM_BITS_WORD 64 // number of bits in word
15
+ #define AIM2_IV_SIZE SECURITY_BYTES // byte size of AIM2 initial vector
16
+
17
+ #define AIM2_NUM_INPUT_SBOX 2 // number of AIM2 input S-boxes
18
+
19
+ #define AIMER_SALT_SIZE SECURITY_BYTES // byte size of salt
20
+ #define AIMER_SEED_SIZE SECURITY_BYTES // byte size of seed
21
+ #define AIMER_COMMIT_SIZE (SECURITY_BYTES * 2) // byte size of commitment
22
+
23
+ #define AIMER_L AIM2_NUM_INPUT_SBOX
24
+ #define AIMER_T 49 // number of parallel repetitions (Tau)
25
+ #define AIMER_N 16 // number of MPC parties (N)
26
+ #define AIMER_LOGN 4 // log_2(N)
27
+
28
+ #define AIMER_PK_BYTES 48 // byte size of public key
29
+ #define AIMER_SK_BYTES 72 // byte size of secret key
30
+ #define AIMER_SIG_BYTES 13056 // byte size of signature
31
+
32
+ #define AIMER_HASH_PREFIX_0 0x20
33
+
34
+ #endif // PARAMS_H
@@ -0,0 +1,34 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #ifndef PARAMS_H
4
+ #define PARAMS_H
5
+
6
+ #define AIMER_NAMESPACE(s) samsungsds_aimer_192s_ref_##s
7
+
8
+ #define SECURITY_BITS 192 // security parameter
9
+ #define SECURITY_BYTES (SECURITY_BITS / 8) // byte size of security parameter
10
+
11
+ #define AIM2_NUM_BITS_FIELD SECURITY_BITS // number of bits in field element
12
+ #define AIM2_NUM_BYTES_FIELD SECURITY_BYTES // number of bytes in field element
13
+ #define AIM2_NUM_WORDS_FIELD (SECURITY_BITS / 64) // number of 64-bit words in element
14
+ #define AIM2_NUM_BITS_WORD 64 // number of bits in word
15
+ #define AIM2_IV_SIZE SECURITY_BYTES // byte size of AIM2 initial vector
16
+
17
+ #define AIM2_NUM_INPUT_SBOX 2 // number of AIM2 input S-boxes
18
+
19
+ #define AIMER_SALT_SIZE SECURITY_BYTES // byte size of salt
20
+ #define AIMER_SEED_SIZE SECURITY_BYTES // byte size of seed
21
+ #define AIMER_COMMIT_SIZE (SECURITY_BYTES * 2) // byte size of commitment
22
+
23
+ #define AIMER_L AIM2_NUM_INPUT_SBOX
24
+ #define AIMER_T 25 // number of parallel repetitions (Tau)
25
+ #define AIMER_N 256 // number of MPC parties (N)
26
+ #define AIMER_LOGN 8 // log_2(N)
27
+
28
+ #define AIMER_PK_BYTES 48 // byte size of public key
29
+ #define AIMER_SK_BYTES 72 // byte size of secret key
30
+ #define AIMER_SIG_BYTES 9120 // byte size of signature
31
+
32
+ #define AIMER_HASH_PREFIX_0 0x30
33
+
34
+ #endif // PARAMS_H
@@ -0,0 +1,34 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #ifndef PARAMS_H
4
+ #define PARAMS_H
5
+
6
+ #define AIMER_NAMESPACE(s) samsungsds_aimer_256f_ref_##s
7
+
8
+ #define SECURITY_BITS 256 // security parameter
9
+ #define SECURITY_BYTES (SECURITY_BITS / 8) // byte size of security parameter
10
+
11
+ #define AIM2_NUM_BITS_FIELD SECURITY_BITS // number of bits in field element
12
+ #define AIM2_NUM_BYTES_FIELD SECURITY_BYTES // number of bytes in field element
13
+ #define AIM2_NUM_WORDS_FIELD (SECURITY_BITS / 64) // number of 64-bit words in element
14
+ #define AIM2_NUM_BITS_WORD 64 // number of bits in word
15
+ #define AIM2_IV_SIZE SECURITY_BYTES // byte size of AIM2 initial vector
16
+
17
+ #define AIM2_NUM_INPUT_SBOX 3 // number of AIM2 input S-boxes
18
+
19
+ #define AIMER_SALT_SIZE SECURITY_BYTES // byte size of salt
20
+ #define AIMER_SEED_SIZE SECURITY_BYTES // byte size of seed
21
+ #define AIMER_COMMIT_SIZE (SECURITY_BYTES * 2) // byte size of commitment
22
+
23
+ #define AIMER_L AIM2_NUM_INPUT_SBOX
24
+ #define AIMER_T 65 // number of parallel repetitions (Tau)
25
+ #define AIMER_N 16 // number of MPC parties (N)
26
+ #define AIMER_LOGN 4 // log_2(N)
27
+
28
+ #define AIMER_PK_BYTES 64 // byte size of public key
29
+ #define AIMER_SK_BYTES 96 // byte size of secret key
30
+ #define AIMER_SIG_BYTES 25120 // byte size of signature
31
+
32
+ #define AIMER_HASH_PREFIX_0 0x40
33
+
34
+ #endif // PARAMS_H
@@ -0,0 +1,34 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #ifndef PARAMS_H
4
+ #define PARAMS_H
5
+
6
+ #define AIMER_NAMESPACE(s) samsungsds_aimer_256s_ref_##s
7
+
8
+ #define SECURITY_BITS 256 // security parameter
9
+ #define SECURITY_BYTES (SECURITY_BITS / 8) // byte size of security parameter
10
+
11
+ #define AIM2_NUM_BITS_FIELD SECURITY_BITS // number of bits in field element
12
+ #define AIM2_NUM_BYTES_FIELD SECURITY_BYTES // number of bytes in field element
13
+ #define AIM2_NUM_WORDS_FIELD (SECURITY_BITS / 64) // number of 64-bit words in element
14
+ #define AIM2_NUM_BITS_WORD 64 // number of bits in word
15
+ #define AIM2_IV_SIZE SECURITY_BYTES // byte size of AIM2 initial vector
16
+
17
+ #define AIM2_NUM_INPUT_SBOX 3 // number of AIM2 input S-boxes
18
+
19
+ #define AIMER_SALT_SIZE SECURITY_BYTES // byte size of salt
20
+ #define AIMER_SEED_SIZE SECURITY_BYTES // byte size of seed
21
+ #define AIMER_COMMIT_SIZE (SECURITY_BYTES * 2) // byte size of commitment
22
+
23
+ #define AIMER_L AIM2_NUM_INPUT_SBOX
24
+ #define AIMER_T 33 // number of parallel repetitions (Tau)
25
+ #define AIMER_N 256 // number of MPC parties (N)
26
+ #define AIMER_LOGN 8 // log_2(N)
27
+
28
+ #define AIMER_PK_BYTES 64 // byte size of public key
29
+ #define AIMER_SK_BYTES 96 // byte size of secret key
30
+ #define AIMER_SIG_BYTES 17056 // byte size of signature
31
+
32
+ #define AIMER_HASH_PREFIX_0 0x50
33
+
34
+ #endif // PARAMS_H
@@ -0,0 +1,5 @@
1
+ // SPDX-License-Identifier: MIT
2
+ #define str(s) #s
3
+ #define xstr(s) str(s)
4
+
5
+ #include xstr(params/params-aimer-PARAMS.h)