kpqc 0.1.0 → 0.2.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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Gemfile +4 -0
  4. data/README.md +9 -6
  5. data/THIRD_PARTY_NOTICES.md +14 -47
  6. data/ext/kpqc/extconf_helper.rb +6 -3
  7. data/ext/kpqc/secure_clear.c +8 -0
  8. data/kpqc.gemspec +4 -5
  9. data/lib/kpqc/aimer.rb +6 -6
  10. data/lib/kpqc/version.rb +1 -2
  11. data/test/kat/aimer128f.rsp +4 -4
  12. data/test/kat/aimer128s.rsp +4 -4
  13. data/test/kat/aimer192f.rsp +4 -4
  14. data/test/kat/aimer192s.rsp +4 -4
  15. data/test/kat/aimer256f.rsp +4 -4
  16. data/test/kat/aimer256s.rsp +4 -4
  17. data/test/kat/haetae2.rsp +1 -1
  18. data/test/kat/haetae3.rsp +1 -1
  19. data/test/kat/haetae5.rsp +1 -1
  20. data/vendor/AIMer/LICENSE +1 -1
  21. data/vendor/AIMer/aim3.c +227 -0
  22. data/vendor/AIMer/aim3.h +63 -0
  23. data/vendor/AIMer/field.h +12 -4
  24. data/vendor/AIMer/field128.c +24 -381
  25. data/vendor/AIMer/field192.c +24 -400
  26. data/vendor/AIMer/field256.c +28 -447
  27. data/vendor/AIMer/field_common.c +98 -0
  28. data/vendor/AIMer/field_internal.h +218 -0
  29. data/vendor/AIMer/params/params-aimer-128f.h +8 -8
  30. data/vendor/AIMer/params/params-aimer-128s.h +8 -8
  31. data/vendor/AIMer/params/params-aimer-192f.h +8 -8
  32. data/vendor/AIMer/params/params-aimer-192s.h +8 -8
  33. data/vendor/AIMer/params/params-aimer-256f.h +8 -8
  34. data/vendor/AIMer/params/params-aimer-256s.h +8 -8
  35. data/vendor/AIMer/params.h +5 -0
  36. data/vendor/AIMer/sign.c +246 -167
  37. data/vendor/AIMer/sign.h +6 -6
  38. data/vendor/AIMer/tree.c +10 -4
  39. data/vendor/AIMer/tree.h +1 -1
  40. data/vendor/HAETAE/include/fixpoint.h +14 -14
  41. data/vendor/HAETAE/include/rans_byte.h +10 -9
  42. data/vendor/HAETAE/src/decompose.c +8 -4
  43. data/vendor/HAETAE/src/encoding.c +5 -5
  44. data/vendor/HAETAE/src/fft.c +1 -1
  45. data/vendor/HAETAE/src/fips202.c +26 -14
  46. data/vendor/HAETAE/src/fixpoint.c +21 -18
  47. data/vendor/HAETAE/src/ntt.c +2 -0
  48. data/vendor/HAETAE/src/packing.c +15 -15
  49. data/vendor/HAETAE/src/poly.c +30 -3
  50. data/vendor/HAETAE/src/polyfix.c +2 -2
  51. data/vendor/HAETAE/src/polymat.c +2 -2
  52. data/vendor/HAETAE/src/polyvec.c +7 -5
  53. data/vendor/HAETAE/src/reduce.c +2 -0
  54. data/vendor/HAETAE/src/sampler.c +231 -47
  55. data/vendor/HAETAE/src/sign.c +11 -10
  56. data/vendor/NTRUplus/NTRU+1152/api.h +27 -8
  57. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.c +12 -269
  58. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.h +4 -113
  59. data/vendor/NTRUplus/NTRU+1152/kem.c +110 -40
  60. data/vendor/NTRUplus/NTRU+1152/ntt.c +50 -54
  61. data/vendor/NTRUplus/NTRU+1152/poly.c +21 -13
  62. data/vendor/NTRUplus/NTRU+1152/poly.h +3 -3
  63. data/vendor/NTRUplus/NTRU+1152/randombytes.h +1 -0
  64. data/vendor/NTRUplus/NTRU+1152/symmetric.c +3 -9
  65. data/vendor/NTRUplus/NTRU+1152/symmetric.h +13 -3
  66. data/vendor/NTRUplus/NTRU+1152/util.h +15 -0
  67. data/vendor/NTRUplus/NTRU+768/api.h +27 -8
  68. data/vendor/NTRUplus/NTRU+768/fips202/fips202.c +12 -269
  69. data/vendor/NTRUplus/NTRU+768/fips202/fips202.h +4 -113
  70. data/vendor/NTRUplus/NTRU+768/kem.c +110 -40
  71. data/vendor/NTRUplus/NTRU+768/ntt.c +50 -54
  72. data/vendor/NTRUplus/NTRU+768/poly.c +23 -13
  73. data/vendor/NTRUplus/NTRU+768/poly.h +3 -3
  74. data/vendor/NTRUplus/NTRU+768/randombytes.h +1 -0
  75. data/vendor/NTRUplus/NTRU+768/symmetric.c +3 -9
  76. data/vendor/NTRUplus/NTRU+768/symmetric.h +13 -3
  77. data/vendor/NTRUplus/NTRU+768/util.h +15 -0
  78. data/vendor/NTRUplus/NTRU+864/api.h +27 -8
  79. data/vendor/NTRUplus/NTRU+864/fips202/fips202.c +12 -269
  80. data/vendor/NTRUplus/NTRU+864/fips202/fips202.h +4 -113
  81. data/vendor/NTRUplus/NTRU+864/kem.c +110 -40
  82. data/vendor/NTRUplus/NTRU+864/ntt.c +24 -28
  83. data/vendor/NTRUplus/NTRU+864/poly.c +26 -12
  84. data/vendor/NTRUplus/NTRU+864/poly.h +3 -3
  85. data/vendor/NTRUplus/NTRU+864/randombytes.h +1 -0
  86. data/vendor/NTRUplus/NTRU+864/symmetric.c +3 -9
  87. data/vendor/NTRUplus/NTRU+864/symmetric.h +13 -3
  88. data/vendor/NTRUplus/NTRU+864/util.h +15 -0
  89. data/vendor/SMAUG-T/src/cbd.c +4 -4
  90. data/vendor/SMAUG-T/src/ciphertext.c +2 -2
  91. data/vendor/SMAUG-T/src/dg.c +2 -2
  92. data/vendor/SMAUG-T/src/hwt.c +4 -4
  93. data/vendor/SMAUG-T/src/indcpa.c +5 -5
  94. data/vendor/SMAUG-T/src/kem.c +9 -7
  95. data/vendor/SMAUG-T/src/key.c +2 -2
  96. data/vendor/SMAUG-T/src/pack.c +8 -8
  97. metadata +17 -42
  98. data/vendor/AIMer/aim2.c +0 -163
  99. data/vendor/AIMer/aim2.h +0 -36
  100. data/vendor/AIMer/aim2_constant.h +0 -74
  101. data/vendor/SOURCES.json +0 -130
@@ -19,7 +19,7 @@
19
19
  * - uint8_t *seed: pointer to input seed (of length
20
20
  * SMAUGT_DELTA_BYTES)
21
21
  *
22
- * Specification: Implements Algorithm 5, ExpandR.
22
+ * Specification: Implements @[KS X 123456, Algorithm 5, ExpandR]
23
23
  **************************************************/
24
24
  void expand_r(polyvec *r, const uint8_t *seed) {
25
25
  unsigned int i;
@@ -49,7 +49,7 @@ void expand_r(polyvec *r, const uint8_t *seed) {
49
49
  * private key
50
50
  * - uint8_t seed[SMAUGT_CRYPTO_BYTES]: pointer to input seed
51
51
  *
52
- * Specification: Implements Algorithm 25, SMAUGT-T.PKE.KeyGen.
52
+ * Specification: Implements @[KS X 123456, Algorithm 25, SMAUGT-T.PKE.KeyGen]
53
53
  **************************************************/
54
54
  void indcpa_keypair(uint8_t pk[SMAUGT_PUBLICKEY_BYTES],
55
55
  uint8_t sk[SMAUGT_PKE_SECRETKEY_BYTES],
@@ -94,7 +94,7 @@ void indcpa_keypair(uint8_t pk[SMAUGT_PUBLICKEY_BYTES],
94
94
  * message
95
95
  * - const uint8_t seed[SMAUGT_DELTA_BYTES]: pointer to input seed
96
96
  *
97
- * Specification: Implements Algorithm 26, SMAUGT-T.PKE.Enc.
97
+ * Specification: Implements @[KS X 123456, Algorithm 26, SMAUGT-T.PKE.Enc]
98
98
  **************************************************/
99
99
  void indcpa_enc(uint8_t ctxt[SMAUGT_CIPHERTEXT_BYTES],
100
100
  const uint8_t pk[SMAUGT_PUBLICKEY_BYTES],
@@ -110,7 +110,7 @@ void indcpa_enc(uint8_t ctxt[SMAUGT_CIPHERTEXT_BYTES],
110
110
  memset(&r, 0, sizeof(polyvec));
111
111
 
112
112
  if (seed == NULL)
113
- { if (randombytes(seed_r, SMAUGT_DELTA_BYTES) != 0) return; }
113
+ randombytes(seed_r, SMAUGT_DELTA_BYTES);
114
114
  else
115
115
  cmov(seed_r, seed, SMAUGT_DELTA_BYTES, 1);
116
116
  expand_r(&r, seed_r);
@@ -139,7 +139,7 @@ void indcpa_enc(uint8_t ctxt[SMAUGT_CIPHERTEXT_BYTES],
139
139
  * - const uint8_t ctxt[SMAUGT_CIPHERTEXT_BYTES]: pointer to input
140
140
  * ciphertext
141
141
  *
142
- * Specification: Implements Algorithm 28, SMAUGT-T.PKE.Dec.
142
+ * Specification: Implements @[KS X 123456, Algorithm 28, SMAUGT-T.PKE.Dec]
143
143
  **************************************************/
144
144
  void indcpa_dec(uint8_t mu[SMAUGT_MSG_BYTES],
145
145
  const uint8_t sk[SMAUGT_PKE_SECRETKEY_BYTES],
@@ -1,4 +1,3 @@
1
- /* kpqc-py: propagate OS entropy failures (2026-09-06). */
2
1
  // SPDX-License-Identifier: MIT
3
2
 
4
3
  #include "api.h"
@@ -25,7 +24,8 @@
25
24
  *
26
25
  * Return: 0 on success, 1 on failure
27
26
  *
28
- * Specification: Implements Algorithm 33, SMAUG-T.KEM.EncapInternal.
27
+ * Specification: Implements @[KS X 123456, Algorithm 33,
28
+ * SMAUG-T.KEM.EncapInternal]
29
29
  **************************************************/
30
30
  int crypto_kem_keypair_internal(uint8_t *pk, uint8_t *sk,
31
31
  uint8_t d[SMAUGT_T_BYTES],
@@ -51,7 +51,7 @@ int crypto_kem_keypair_internal(uint8_t *pk, uint8_t *sk,
51
51
  *
52
52
  * Return: 0 on success, 1 on failure
53
53
  *
54
- * Specification: Implements Algorithm 30, SMAUG-T.KEM.KeyGen.
54
+ * Specification: Implements @[KS X 123456, Algorithm 30, SMAUG-T.KEM.KeyGen]
55
55
  **************************************************/
56
56
  int crypto_kem_keypair(uint8_t *pk, uint8_t *sk) {
57
57
  int ret = 0;
@@ -81,7 +81,8 @@ int crypto_kem_keypair(uint8_t *pk, uint8_t *sk) {
81
81
  *
82
82
  * Return: 0 on success, 1 on failure
83
83
  *
84
- * Specification: Implements Algorithm 34, SMAUG-T.KEM.EncapInternal.
84
+ * Specification: Implements @[KS X 123456, Algorithm 34,
85
+ * SMAUG-T.KEM.EncapInternal]
85
86
  **************************************************/
86
87
  int crypto_kem_enc_internal(uint8_t *ctxt, uint8_t *ss, const uint8_t *pk,
87
88
  const uint8_t *mu) {
@@ -111,7 +112,7 @@ int crypto_kem_enc_internal(uint8_t *ctxt, uint8_t *ss, const uint8_t *pk,
111
112
  *
112
113
  * Return: 0 on success, 1 on failure
113
114
  *
114
- * Specification: Implements Algorithm 31, SMAUG-T.KEM.Encap.
115
+ * Specification: Implements @[KS X 123456, Algorithm 31, SMAUG-T.KEM.Encap]
115
116
  **************************************************/
116
117
  int crypto_kem_enc(uint8_t *ctxt, uint8_t *ss, const uint8_t *pk) {
117
118
  int ret = 0;
@@ -136,7 +137,8 @@ int crypto_kem_enc(uint8_t *ctxt, uint8_t *ss, const uint8_t *pk) {
136
137
  *
137
138
  * Return: 0 on success, 1 on failure
138
139
  *
139
- * Specification: Implements Algorithm 35, SMAUG-T.KEM.DecapInternal.
140
+ * Specification: Implements @[KS X 123456, Algorithm 35,
141
+ * SMAUG-T.KEM.DecapInternal]
140
142
  **************************************************/
141
143
  int crypto_kem_dec_internal(uint8_t *ss, const uint8_t *ctxt,
142
144
  const uint8_t *sk) {
@@ -185,7 +187,7 @@ int crypto_kem_dec_internal(uint8_t *ss, const uint8_t *ctxt,
185
187
  *
186
188
  * Return: 0 on success, 1 on failure
187
189
  *
188
- * Specification: Implements Algorithm 32, SMAUG-T.KEM.Decap.
190
+ * Specification: Implements @[KS X 123456, Algorithm 32, SMAUG-T.KEM.Decap]
189
191
  **************************************************/
190
192
  int crypto_kem_dec(uint8_t *ss, const uint8_t *ctxt, const uint8_t *sk) {
191
193
  int ret = 0;
@@ -18,7 +18,7 @@
18
18
  * Arguments: - polyvec A[SMAUGT_K]: pointer to output matrix A
19
19
  * - const uint8_t seed[SMAUGT_PKSEED_BYTES]: pointer to input seed
20
20
  *
21
- * Specification: Implements Algorithm 1, ExpandA.
21
+ * Specification: Implements @[KS X 123456, Algorithm 1, ExpandA]
22
22
  **************************************************/
23
23
  void expand_A(polyvec A[SMAUGT_K], const uint8_t seed[SMAUGT_PKSEED_BYTES]) {
24
24
  unsigned int i, j;
@@ -65,7 +65,7 @@ void expand_b(polyvec *b, const polyvec A[SMAUGT_K], const polyvec *s,
65
65
  * - const uint8_t seed[SMAUGT_CRYPTO_BYTES]: pointer to input seed
66
66
  * of s(x)
67
67
  *
68
- * Specification: Implements Algorithm 2, ExpandS.
68
+ * Specification: Implements @[KS X 123456, Algorithm 2, ExpandS]
69
69
  **************************************************/
70
70
  void expand_s(secret_key *sk, const uint8_t seed[SMAUGT_CRYPTO_BYTES]) {
71
71
  unsigned int i, j;
@@ -13,7 +13,7 @@
13
13
  * Arguments: - uint8_t *output: pointer to output byte array
14
14
  * - const public_key *pk: pointer to input public key
15
15
  *
16
- * Specification: Implements Algorithm 14, PackEncK.
16
+ * Specification: Implements @[KS X 123456, Algorithm 14, PackEncK]
17
17
  **************************************************/
18
18
  void pack_enck(uint8_t *output, const public_key *pk) {
19
19
  memcpy(output, pk->seed, sizeof(uint8_t) * SMAUGT_PKSEED_BYTES);
@@ -28,7 +28,7 @@ void pack_enck(uint8_t *output, const public_key *pk) {
28
28
  * Arguments: - public_key *pk: pointer to output public key
29
29
  * - const uint8_t *input: pointer to input byte array
30
30
  *
31
- * Specification: Implements Algorithm 15, UnpackEncK.
31
+ * Specification: Implements @[KS X 123456, Algorithm 15, UnpackEncK]
32
32
  **************************************************/
33
33
  void unpack_enck(public_key *pk, const uint8_t *input) {
34
34
  memcpy(pk->seed, input, SMAUGT_PKSEED_BYTES);
@@ -44,7 +44,7 @@ void unpack_enck(public_key *pk, const uint8_t *input) {
44
44
  * Arguments: - uint8_t *output: pointer to output byte array
45
45
  * - const secret_key *sk: pointer to input private key
46
46
  *
47
- * Specification: Implements Algorithm 16, PackDecK.
47
+ * Specification: Implements @[KS X 123456, Algorithm 16, PackDecK]
48
48
  **************************************************/
49
49
  void pack_deck(uint8_t *output, const secret_key *sk) {
50
50
  for (size_t i = 0; i < SMAUGT_K; ++i)
@@ -59,7 +59,7 @@ void pack_deck(uint8_t *output, const secret_key *sk) {
59
59
  * Arguments: - secret_key *sk: pointer to output private key
60
60
  * - const uint8_t *input: pointer to input byte array
61
61
  *
62
- * Specification: Implements Algorithm 17, UnpackDecK.
62
+ * Specification: Implements @[KS X 123456, Algorithm 17, UnpackDecK]
63
63
  **************************************************/
64
64
  void unpack_deck(secret_key *sk, const uint8_t *input) {
65
65
  for (size_t i = 0; i < SMAUGT_K; ++i)
@@ -74,7 +74,7 @@ void unpack_deck(secret_key *sk, const uint8_t *input) {
74
74
  * Arguments: - uint8_t *bytes: pointer to output bytes
75
75
  * - const poly *s: pointer to input poly in Sn
76
76
  *
77
- * Specification: Implements Algorithm 18, PackSPoly.
77
+ * Specification: Implements @[KS X 123456, Algorithm 18, PackSPoly]
78
78
  **************************************************/
79
79
  void pack_s_poly(uint8_t *bytes, const poly *s) {
80
80
  unsigned int i;
@@ -96,7 +96,7 @@ void pack_s_poly(uint8_t *bytes, const poly *s) {
96
96
  * Arguments: - poly *s: pointer to output poly in Sn
97
97
  * - const uint8_t *bytes: pointer to input bytes
98
98
  *
99
- * Specification: Implements Algorithm 19, UnpackSPoly.
99
+ * Specification: Implements @[KS X 123456, Algorithm 19, UnpackSPoly]
100
100
  **************************************************/
101
101
  void unpack_s_poly(poly *s, const uint8_t *bytes) {
102
102
  unsigned int i;
@@ -123,7 +123,7 @@ void unpack_s_poly(poly *s, const uint8_t *bytes) {
123
123
  * Arguments: - uint8_t *output: pointer to output byte array
124
124
  * - const ciphertext *ctxt: pointer to input ciphertext
125
125
  *
126
- * Specification: Implements Algorithm 20, PackCT.
126
+ * Specification: Implements @[KS X 123456, Algorithm 20, PackCT]
127
127
  * **************************************************/
128
128
  void pack_ct(uint8_t *output, const ciphertext *ctxt) {
129
129
  pack_ring_p_vec(output, &(ctxt->c1));
@@ -138,7 +138,7 @@ void pack_ct(uint8_t *output, const ciphertext *ctxt) {
138
138
  * Arguments: - ciphertext *ctxt: pointer to output ciphertext
139
139
  * - const uint8_t *input: pointer to input byte array
140
140
  *
141
- * Specification: Implements Algorithm 21, UnpackCT.
141
+ * Specification: Implements @[KS X 123456, Algorithm 21, UnpackCT]
142
142
  **************************************************/
143
143
  void unpack_ct(ciphertext *ctxt, const uint8_t *input) {
144
144
  unpack_ring_p_vec(&(ctxt->c1), input);
metadata CHANGED
@@ -1,43 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kpqc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - osuolfou
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-09-09 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '12.3'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '12.3'
27
- - !ruby/object:Gem::Dependency
28
- name: minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '5.10'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '5.10'
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
41
12
  description: Synchronous Ruby bindings for the bundled AIMer and HAETAE signature
42
13
  schemes and NTRU+ and SMAUG-T key-encapsulation mechanisms.
43
14
  email:
@@ -62,6 +33,7 @@ extensions:
62
33
  - ext/kpqc/timer/extconf.rb
63
34
  extra_rdoc_files: []
64
35
  files:
36
+ - CHANGELOG.md
65
37
  - Gemfile
66
38
  - LICENSE
67
39
  - README.md
@@ -82,6 +54,7 @@ files:
82
54
  - ext/kpqc/ntruplus768/extconf.rb
83
55
  - ext/kpqc/ntruplus864/extconf.rb
84
56
  - ext/kpqc/randombytes.c
57
+ - ext/kpqc/secure_clear.c
85
58
  - ext/kpqc/smaugt128/extconf.rb
86
59
  - ext/kpqc/smaugt192/extconf.rb
87
60
  - ext/kpqc/smaugt256/extconf.rb
@@ -119,9 +92,8 @@ files:
119
92
  - test/kat_test.rb
120
93
  - test/test_helper.rb
121
94
  - vendor/AIMer/LICENSE
122
- - vendor/AIMer/aim2.c
123
- - vendor/AIMer/aim2.h
124
- - vendor/AIMer/aim2_constant.h
95
+ - vendor/AIMer/aim3.c
96
+ - vendor/AIMer/aim3.h
125
97
  - vendor/AIMer/api.h
126
98
  - vendor/AIMer/common/crypto_declassify.h
127
99
  - vendor/AIMer/common/fips202.c
@@ -131,6 +103,8 @@ files:
131
103
  - vendor/AIMer/field128.c
132
104
  - vendor/AIMer/field192.c
133
105
  - vendor/AIMer/field256.c
106
+ - vendor/AIMer/field_common.c
107
+ - vendor/AIMer/field_internal.h
134
108
  - vendor/AIMer/hash.c
135
109
  - vendor/AIMer/hash.h
136
110
  - vendor/AIMer/params.h
@@ -193,6 +167,7 @@ files:
193
167
  - vendor/NTRUplus/NTRU+1152/randombytes.h
194
168
  - vendor/NTRUplus/NTRU+1152/symmetric.c
195
169
  - vendor/NTRUplus/NTRU+1152/symmetric.h
170
+ - vendor/NTRUplus/NTRU+1152/util.h
196
171
  - vendor/NTRUplus/NTRU+768/api.h
197
172
  - vendor/NTRUplus/NTRU+768/fips202/fips202.c
198
173
  - vendor/NTRUplus/NTRU+768/fips202/fips202.h
@@ -205,6 +180,7 @@ files:
205
180
  - vendor/NTRUplus/NTRU+768/randombytes.h
206
181
  - vendor/NTRUplus/NTRU+768/symmetric.c
207
182
  - vendor/NTRUplus/NTRU+768/symmetric.h
183
+ - vendor/NTRUplus/NTRU+768/util.h
208
184
  - vendor/NTRUplus/NTRU+864/api.h
209
185
  - vendor/NTRUplus/NTRU+864/fips202/fips202.c
210
186
  - vendor/NTRUplus/NTRU+864/fips202/fips202.h
@@ -217,6 +193,7 @@ files:
217
193
  - vendor/NTRUplus/NTRU+864/randombytes.h
218
194
  - vendor/NTRUplus/NTRU+864/symmetric.c
219
195
  - vendor/NTRUplus/NTRU+864/symmetric.h
196
+ - vendor/NTRUplus/NTRU+864/util.h
220
197
  - vendor/SMAUG-T/LICENSE
221
198
  - vendor/SMAUG-T/include/api.h
222
199
  - vendor/SMAUG-T/include/cbd.h
@@ -250,15 +227,14 @@ files:
250
227
  - vendor/SMAUG-T/src/poly.c
251
228
  - vendor/SMAUG-T/src/toomcook.c
252
229
  - vendor/SMAUG-T/src/verify.c
253
- - vendor/SOURCES.json
254
- homepage: https://github.com/osuolfou/kpqc-rb
230
+ homepage: https://github.com/KpqC/kpqc-ruby
255
231
  licenses:
256
232
  - MIT
257
233
  metadata:
258
- source_code_uri: https://github.com/osuolfou/kpqc-rb
259
- bug_tracker_uri: https://github.com/osuolfou/kpqc-rb/issues
234
+ source_code_uri: https://github.com/KpqC/kpqc-ruby
235
+ bug_tracker_uri: https://github.com/KpqC/kpqc-ruby/issues
236
+ changelog_uri: https://github.com/KpqC/kpqc-ruby/blob/main/CHANGELOG.md
260
237
  rubygems_mfa_required: 'true'
261
- post_install_message:
262
238
  rdoc_options: []
263
239
  require_paths:
264
240
  - lib
@@ -273,8 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
273
249
  - !ruby/object:Gem::Version
274
250
  version: '0'
275
251
  requirements: []
276
- rubygems_version: 3.0.3.1
277
- signing_key:
252
+ rubygems_version: 4.0.20
278
253
  specification_version: 4
279
254
  summary: Ruby APIs for AIMer, HAETAE, NTRU+, and SMAUG-T.
280
255
  test_files: []
data/vendor/AIMer/aim2.c DELETED
@@ -1,163 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
-
3
- #include "aim2.h"
4
- #include "field.h"
5
- #include "hash.h"
6
- #include "params.h"
7
- #include <stddef.h>
8
- #include <stdint.h>
9
-
10
- static void generate_matrices_L_and_U(
11
- gf matrix_L[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD],
12
- gf matrix_U[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD],
13
- gf vector_b,
14
- const uint8_t iv[AIM2_IV_SIZE])
15
- {
16
- uint8_t buf[AIM2_NUM_BYTES_FIELD];
17
- uint64_t ormask, lmask, umask;
18
- hash_instance ctx;
19
- gf temp = {0,};
20
-
21
- // initialize hash
22
- hash_init(&ctx);
23
- hash_update(&ctx, iv, AIM2_IV_SIZE);
24
- hash_final(&ctx);
25
-
26
- for (size_t ell = 0; ell < AIM2_NUM_INPUT_SBOX; ell++)
27
- {
28
- for (size_t row = 0; row < AIM2_NUM_BITS_FIELD; row++)
29
- {
30
- hash_squeeze(&ctx, buf, AIM2_NUM_BYTES_FIELD);
31
- gf_from_bytes(temp, buf);
32
-
33
- ormask = ((uint64_t)1) << (row % 64);
34
- lmask = ((uint64_t)-1) << (row % 64);
35
- umask = ~lmask;
36
-
37
- size_t inter = row / 64;
38
- size_t col_word;
39
- for (col_word = 0; col_word < inter; col_word++)
40
- {
41
- // L is zero, U is full
42
- matrix_L[ell][row][col_word] = 0;
43
- matrix_U[ell][row][col_word] = temp[col_word];
44
- }
45
- matrix_L[ell][row][inter] = (temp[inter] & lmask) | ormask;
46
- matrix_U[ell][row][inter] = (temp[inter] & umask) | ormask;
47
- for (col_word = inter + 1; col_word < AIM2_NUM_WORDS_FIELD; col_word++)
48
- {
49
- // L is full, U is zero
50
- matrix_L[ell][row][col_word] = temp[col_word];
51
- matrix_U[ell][row][col_word] = 0;
52
- }
53
- }
54
- }
55
-
56
- hash_squeeze(&ctx, (uint8_t *)vector_b, AIM2_NUM_BYTES_FIELD);
57
- hash_ctx_release(&ctx);
58
- }
59
-
60
- void aim2_generate_linear(gf matrix_A[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD],
61
- gf vector_b,
62
- const uint8_t iv[AIM2_IV_SIZE])
63
- {
64
- gf matrix_L[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD];
65
- gf matrix_U[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD];
66
-
67
- generate_matrices_L_and_U(matrix_L, matrix_U, vector_b, iv);
68
-
69
- for (size_t ell = 0; ell < AIM2_NUM_INPUT_SBOX; ell++)
70
- {
71
- for (size_t i = 0; i < AIM2_NUM_BITS_FIELD; i++)
72
- {
73
- gf_mat_vec_mul(matrix_A[ell][i], matrix_U[ell][i],
74
- (const gf *)matrix_L[ell]);
75
- }
76
- }
77
- }
78
-
79
- void aim2(uint8_t ct[AIM2_NUM_BYTES_FIELD],
80
- const uint8_t pt[AIM2_NUM_BYTES_FIELD],
81
- const uint8_t iv[AIM2_IV_SIZE])
82
- {
83
- gf matrix_L[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD];
84
- gf matrix_U[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD];
85
- gf vector_b = {0,};
86
-
87
- gf state[AIM2_NUM_INPUT_SBOX];
88
- gf pt_gf = {0,}, ct_gf = {0,};
89
- gf_from_bytes(pt_gf, pt);
90
-
91
- // generate random matrix
92
- generate_matrices_L_and_U(matrix_L, matrix_U, vector_b, iv);
93
-
94
- for (size_t i = 0; i < AIMER_L; i++)
95
- {
96
- // linear component: constant addition
97
- gf_add(state[i], pt_gf, aim2_constants[i]);
98
-
99
- // non-linear component: inverse Mersenne S-box
100
- gf_exp(state[i], state[i], aim2_sbox_exponents[i]);
101
-
102
- // linear component: affine layer
103
- gf_mat_vec_mul(state[i], state[i], (const gf *)matrix_U[i]);
104
- gf_mat_vec_mul(state[i], state[i], (const gf *)matrix_L[i]);
105
- }
106
-
107
- for (size_t i = 1; i < AIMER_L; i++)
108
- {
109
- gf_add(state[0], state[0], state[i]);
110
- }
111
- gf_add(state[0], state[0], vector_b);
112
-
113
- // non-linear component: Mersenne S-box
114
- gf_exp(state[0], state[0], aim2_sbox_exponents[AIMER_L]);
115
-
116
- // linear component: feed-forward
117
- gf_add(ct_gf, state[0], pt_gf);
118
-
119
- gf_to_bytes(ct, ct_gf);
120
- }
121
-
122
- void aim2_sbox_outputs(gf sbox_outputs[AIM2_NUM_INPUT_SBOX], const gf pt)
123
- {
124
- for (size_t i = 0; i < AIMER_L; i ++)
125
- {
126
- // linear component: constant addition
127
- gf_add(sbox_outputs[i], pt, aim2_constants[i]);
128
-
129
- // non-linear component: inverse Mersenne S-box
130
- gf_exp(sbox_outputs[i], sbox_outputs[i], aim2_sbox_exponents[i]);
131
- }
132
- }
133
-
134
- void aim2_mpc(mult_chk_t *mult_chk,
135
- const gf matrix_A[AIMER_L][AIM2_NUM_BITS_FIELD],
136
- const gf ct_gf)
137
- {
138
- // pt + c = t ^ {2 ^ e - 1}
139
- // --> t ^ {2 ^ e} + t * c = t * pt
140
- // --> z = x * pt
141
- for (size_t ell = 0; ell < AIMER_L; ell++)
142
- {
143
- gf_sqr(mult_chk->z_shares[ell], mult_chk->x_shares[ell]);
144
- for (size_t i = 1; i < aim2_exponents[ell]; i++)
145
- {
146
- gf_sqr(mult_chk->z_shares[ell], mult_chk->z_shares[ell]);
147
- }
148
- gf_mul_add(mult_chk->z_shares[ell], mult_chk->x_shares[ell],
149
- aim2_constants[ell]);
150
- gf_mat_vec_mul_add(mult_chk->x_shares[AIMER_L],
151
- mult_chk->x_shares[ell], matrix_A[ell]);
152
- }
153
-
154
- // x ^ {2 ^ e - 1} = pt + ct
155
- // --> x ^ {2 ^ e} + x * ct = x * pt
156
- // --> z = x * pt
157
- gf_sqr(mult_chk->z_shares[AIMER_L], mult_chk->x_shares[AIMER_L]);
158
- for (size_t i = 1; i < aim2_exponents[AIMER_L]; i++)
159
- {
160
- gf_sqr(mult_chk->z_shares[AIMER_L], mult_chk->z_shares[AIMER_L]);
161
- }
162
- gf_mul_add(mult_chk->z_shares[AIMER_L], mult_chk->x_shares[AIMER_L], ct_gf);
163
- }
data/vendor/AIMer/aim2.h DELETED
@@ -1,36 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
-
3
- #ifndef AIM2_H
4
- #define AIM2_H
5
-
6
- #include "aim2_constant.h"
7
- #include "field.h"
8
- #include "params.h"
9
- #include <stdint.h>
10
-
11
- typedef struct mult_chk_t
12
- {
13
- gf pt_share;
14
- gf x_shares[AIMER_L + 1];
15
- gf z_shares[AIMER_L + 1];
16
- } mult_chk_t;
17
-
18
- #define aim2_generate_linear AIMER_NAMESPACE(aim2_generate_linear)
19
- void aim2_generate_linear(gf matrix_A[AIM2_NUM_INPUT_SBOX][AIM2_NUM_BITS_FIELD],
20
- gf vector_b,
21
- const uint8_t iv[AIM2_IV_SIZE]);
22
-
23
- #define aim2_sbox_outputs AIMER_NAMESPACE(aim2_sbox_outputs)
24
- void aim2_sbox_outputs(gf sbox_outputs[AIM2_NUM_INPUT_SBOX], const gf pt);
25
-
26
- #define aim2 AIMER_NAMESPACE(aim2)
27
- void aim2(uint8_t ct[AIM2_NUM_BYTES_FIELD],
28
- const uint8_t pt[AIM2_NUM_BYTES_FIELD],
29
- const uint8_t iv[AIM2_IV_SIZE]);
30
-
31
- #define aim2_mpc AIMER_NAMESPACE(aim2_mpc)
32
- void aim2_mpc(mult_chk_t *mult_chk,
33
- const gf matrix_A[AIMER_L][AIM2_NUM_BITS_FIELD],
34
- const gf ct_gf);
35
-
36
- #endif // AIM2_H
@@ -1,74 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
-
3
- #ifndef AIM2_CONSTANT_H
4
- #define AIM2_CONSTANT_H
5
-
6
- #include "field.h"
7
- #include "params.h"
8
- #include <stdint.h>
9
-
10
- #if SECURITY_BITS == 128
11
- static const gf aim2_constants[AIM2_NUM_INPUT_SBOX] =
12
- {
13
- {0x13198a2e03707344, 0x243f6a8885a308d3},
14
- {0x082efa98ec4e6c89, 0xa4093822299f31d0},
15
- };
16
-
17
- static const uint64_t
18
- aim2_sbox_exponents[AIM2_NUM_INPUT_SBOX + 1][AIM2_NUM_WORDS_FIELD] =
19
- {
20
- {0x6b6b6d6dadadb5b5, 0xb6b6d6d6dadb5b5b},
21
- {0x6d6db6d6db6b6db5, 0xb6db5b6dadb6dadb},
22
- {7, 0}
23
- };
24
-
25
- static const size_t aim2_exponents[AIM2_NUM_INPUT_SBOX + 1] =
26
- {
27
- 49, 91, 3
28
- };
29
-
30
- #elif SECURITY_BITS == 192
31
- static const gf aim2_constants[AIM2_NUM_INPUT_SBOX] =
32
- {
33
- {0xc0ac29b7c97c50dd, 0xbe5466cf34e90c6c, 0x452821e638d01377},
34
- {0xd1310ba698dfb5ac, 0x9216d5d98979fb1b, 0x3f84d5b5b5470917}
35
- };
36
-
37
- static const uint64_t
38
- aim2_sbox_exponents[AIM2_NUM_INPUT_SBOX + 1][AIM2_NUM_WORDS_FIELD] =
39
- {
40
- {0xd6ad6b56b5ab5ad5, 0x6ad6b56b5ab5ad5a, 0xad6b56b5ab5ad5ad},
41
- {0x7776eeeeeeeeeeed, 0xbbbbbbbb77777777, 0xddddddddddddbbbb},
42
- {31, 0, 0}
43
- };
44
-
45
- static const size_t aim2_exponents[AIM2_NUM_INPUT_SBOX + 1] =
46
- {
47
- 17, 47, 5
48
- };
49
-
50
- #else
51
- static const gf aim2_constants[AIM2_NUM_INPUT_SBOX] =
52
- {
53
- {0x24a19947b3916cf7,0xba7c9045f12c7f99,0xb8e1afed6a267e96,0x2ffd72dbd01adfb7},
54
- {0x0d95748f728eb658,0xa458fea3f4933d7e,0x636920d871574e69,0x0801f2e2858efc16},
55
- {0xc5d1b023286085f0,0x9c30d5392af26013,0x7b54a41dc25a59b5,0x718bcd5882154aee}
56
- };
57
-
58
- static const uint64_t
59
- aim2_sbox_exponents[AIM2_NUM_INPUT_SBOX + 1][AIM2_NUM_WORDS_FIELD] =
60
- {
61
- {0xdadb5b6b6d6dadb5,0x6b6d6dadb5b6b6d6,0xadb5b6b6d6dadb5b,0xb6d6dadb5b6b6d6d},
62
- {0x1112224444889111,0x8891112224444889,0x4448889112222444,0x2224448889112222},
63
- {0xeddbb76eddbb76ed,0x76eddbb76eddbb76,0xbb76eddbb76eddbb,0xddbb76eddbb76edd},
64
- {7, 0, 0, 0}
65
- };
66
-
67
- static const size_t aim2_exponents[AIM2_NUM_INPUT_SBOX + 1] =
68
- {
69
- 11, 141, 7, 3
70
- };
71
-
72
- #endif
73
-
74
- #endif // AIM2_CONSTANT_H