charm-crypto-framework 0.61.1__cp313-cp313-macosx_10_13_universal2.whl

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 (323) hide show
  1. charm/__init__.py +5 -0
  2. charm/adapters/__init__.py +0 -0
  3. charm/adapters/abenc_adapt_hybrid.py +90 -0
  4. charm/adapters/dabenc_adapt_hybrid.py +145 -0
  5. charm/adapters/ibenc_adapt_hybrid.py +72 -0
  6. charm/adapters/ibenc_adapt_identityhash.py +80 -0
  7. charm/adapters/kpabenc_adapt_hybrid.py +91 -0
  8. charm/adapters/pkenc_adapt_bchk05.py +121 -0
  9. charm/adapters/pkenc_adapt_chk04.py +91 -0
  10. charm/adapters/pkenc_adapt_hybrid.py +98 -0
  11. charm/adapters/pksig_adapt_naor01.py +89 -0
  12. charm/config.py +7 -0
  13. charm/core/__init__.py +0 -0
  14. charm/core/benchmark/benchmark_util.c +353 -0
  15. charm/core/benchmark/benchmark_util.h +61 -0
  16. charm/core/benchmark/benchmarkmodule.c +476 -0
  17. charm/core/benchmark/benchmarkmodule.h +162 -0
  18. charm/core/benchmark.cpython-313-darwin.so +0 -0
  19. charm/core/crypto/AES/AES.c +1464 -0
  20. charm/core/crypto/AES.cpython-313-darwin.so +0 -0
  21. charm/core/crypto/DES/DES.c +113 -0
  22. charm/core/crypto/DES.cpython-313-darwin.so +0 -0
  23. charm/core/crypto/DES3/DES3.c +26 -0
  24. charm/core/crypto/DES3.cpython-313-darwin.so +0 -0
  25. charm/core/crypto/__init__.py +0 -0
  26. charm/core/crypto/cryptobase/XOR.c +80 -0
  27. charm/core/crypto/cryptobase/_counter.c +496 -0
  28. charm/core/crypto/cryptobase/_counter.h +54 -0
  29. charm/core/crypto/cryptobase/block_template.c +900 -0
  30. charm/core/crypto/cryptobase/block_template.h +69 -0
  31. charm/core/crypto/cryptobase/cryptobasemodule.c +220 -0
  32. charm/core/crypto/cryptobase/libtom/tomcrypt.h +90 -0
  33. charm/core/crypto/cryptobase/libtom/tomcrypt_argchk.h +44 -0
  34. charm/core/crypto/cryptobase/libtom/tomcrypt_cfg.h +186 -0
  35. charm/core/crypto/cryptobase/libtom/tomcrypt_cipher.h +941 -0
  36. charm/core/crypto/cryptobase/libtom/tomcrypt_custom.h +556 -0
  37. charm/core/crypto/cryptobase/libtom/tomcrypt_des.c +1912 -0
  38. charm/core/crypto/cryptobase/libtom/tomcrypt_hash.h +407 -0
  39. charm/core/crypto/cryptobase/libtom/tomcrypt_mac.h +496 -0
  40. charm/core/crypto/cryptobase/libtom/tomcrypt_macros.h +435 -0
  41. charm/core/crypto/cryptobase/libtom/tomcrypt_math.h +534 -0
  42. charm/core/crypto/cryptobase/libtom/tomcrypt_misc.h +103 -0
  43. charm/core/crypto/cryptobase/libtom/tomcrypt_pk.h +653 -0
  44. charm/core/crypto/cryptobase/libtom/tomcrypt_pkcs.h +90 -0
  45. charm/core/crypto/cryptobase/libtom/tomcrypt_prng.h +199 -0
  46. charm/core/crypto/cryptobase/stream_template.c +271 -0
  47. charm/core/crypto/cryptobase/strxor.c +229 -0
  48. charm/core/crypto/cryptobase.cpython-313-darwin.so +0 -0
  49. charm/core/engine/__init__.py +5 -0
  50. charm/core/engine/protocol.py +293 -0
  51. charm/core/engine/util.py +174 -0
  52. charm/core/math/__init__.py +0 -0
  53. charm/core/math/elliptic_curve/ecmodule.c +1986 -0
  54. charm/core/math/elliptic_curve/ecmodule.h +230 -0
  55. charm/core/math/elliptic_curve.cpython-313-darwin.so +0 -0
  56. charm/core/math/elliptic_curve.pyi +63 -0
  57. charm/core/math/integer/integermodule.c +2539 -0
  58. charm/core/math/integer/integermodule.h +145 -0
  59. charm/core/math/integer.cpython-313-darwin.so +0 -0
  60. charm/core/math/integer.pyi +76 -0
  61. charm/core/math/pairing/miracl/miracl_config.h +37 -0
  62. charm/core/math/pairing/miracl/miracl_interface.h +118 -0
  63. charm/core/math/pairing/miracl/miracl_interface2.h +126 -0
  64. charm/core/math/pairing/miracl/pairingmodule2.c +2094 -0
  65. charm/core/math/pairing/miracl/pairingmodule2.h +307 -0
  66. charm/core/math/pairing/pairingmodule.c +2230 -0
  67. charm/core/math/pairing/pairingmodule.h +241 -0
  68. charm/core/math/pairing/relic/pairingmodule3.c +1853 -0
  69. charm/core/math/pairing/relic/pairingmodule3.h +233 -0
  70. charm/core/math/pairing/relic/relic_interface.c +1337 -0
  71. charm/core/math/pairing/relic/relic_interface.h +217 -0
  72. charm/core/math/pairing/relic/test_relic.c +171 -0
  73. charm/core/math/pairing.cpython-313-darwin.so +0 -0
  74. charm/core/math/pairing.pyi +69 -0
  75. charm/core/utilities/base64.c +248 -0
  76. charm/core/utilities/base64.h +15 -0
  77. charm/schemes/__init__.py +0 -0
  78. charm/schemes/abenc/__init__.py +0 -0
  79. charm/schemes/abenc/abenc_accountability_jyjxgd20.py +647 -0
  80. charm/schemes/abenc/abenc_bsw07.py +146 -0
  81. charm/schemes/abenc/abenc_ca_cpabe_ar17.py +684 -0
  82. charm/schemes/abenc/abenc_dacmacs_yj14.py +298 -0
  83. charm/schemes/abenc/abenc_lsw08.py +159 -0
  84. charm/schemes/abenc/abenc_maabe_rw15.py +236 -0
  85. charm/schemes/abenc/abenc_maabe_yj14.py +297 -0
  86. charm/schemes/abenc/abenc_tbpre_lww14.py +309 -0
  87. charm/schemes/abenc/abenc_unmcpabe_yahk14.py +223 -0
  88. charm/schemes/abenc/abenc_waters09.py +144 -0
  89. charm/schemes/abenc/abenc_yct14.py +208 -0
  90. charm/schemes/abenc/abenc_yllc15.py +178 -0
  91. charm/schemes/abenc/ac17.py +248 -0
  92. charm/schemes/abenc/bsw07.py +141 -0
  93. charm/schemes/abenc/cgw15.py +277 -0
  94. charm/schemes/abenc/dabe_aw11.py +204 -0
  95. charm/schemes/abenc/dfa_fe12.py +144 -0
  96. charm/schemes/abenc/pk_hve08.py +179 -0
  97. charm/schemes/abenc/waters11.py +143 -0
  98. charm/schemes/aggrsign_MuSig.py +150 -0
  99. charm/schemes/aggrsign_bls.py +267 -0
  100. charm/schemes/blindsig_ps16.py +654 -0
  101. charm/schemes/chamhash_adm05.py +113 -0
  102. charm/schemes/chamhash_rsa_hw09.py +100 -0
  103. charm/schemes/commit/__init__.py +0 -0
  104. charm/schemes/commit/commit_gs08.py +77 -0
  105. charm/schemes/commit/commit_pedersen92.py +53 -0
  106. charm/schemes/encap_bchk05.py +62 -0
  107. charm/schemes/grpsig/__init__.py +0 -0
  108. charm/schemes/grpsig/groupsig_bgls04.py +114 -0
  109. charm/schemes/grpsig/groupsig_bgls04_var.py +115 -0
  110. charm/schemes/hibenc/__init__.py +0 -0
  111. charm/schemes/hibenc/hibenc_bb04.py +105 -0
  112. charm/schemes/hibenc/hibenc_lew11.py +193 -0
  113. charm/schemes/ibenc/__init__.py +0 -0
  114. charm/schemes/ibenc/clpkc_rp03.py +119 -0
  115. charm/schemes/ibenc/ibenc_CW13_z.py +168 -0
  116. charm/schemes/ibenc/ibenc_bb03.py +94 -0
  117. charm/schemes/ibenc/ibenc_bf01.py +121 -0
  118. charm/schemes/ibenc/ibenc_ckrs09.py +120 -0
  119. charm/schemes/ibenc/ibenc_cllww12_z.py +172 -0
  120. charm/schemes/ibenc/ibenc_lsw08.py +120 -0
  121. charm/schemes/ibenc/ibenc_sw05.py +238 -0
  122. charm/schemes/ibenc/ibenc_waters05.py +144 -0
  123. charm/schemes/ibenc/ibenc_waters05_z.py +164 -0
  124. charm/schemes/ibenc/ibenc_waters09.py +107 -0
  125. charm/schemes/ibenc/ibenc_waters09_z.py +147 -0
  126. charm/schemes/joye_scheme.py +106 -0
  127. charm/schemes/lem_scheme.py +207 -0
  128. charm/schemes/pk_fre_ccv11.py +107 -0
  129. charm/schemes/pk_vrf.py +127 -0
  130. charm/schemes/pkenc/__init__.py +0 -0
  131. charm/schemes/pkenc/pkenc_cs98.py +108 -0
  132. charm/schemes/pkenc/pkenc_elgamal85.py +122 -0
  133. charm/schemes/pkenc/pkenc_gm82.py +98 -0
  134. charm/schemes/pkenc/pkenc_paillier99.py +118 -0
  135. charm/schemes/pkenc/pkenc_rabin.py +254 -0
  136. charm/schemes/pkenc/pkenc_rsa.py +186 -0
  137. charm/schemes/pksig/__init__.py +0 -0
  138. charm/schemes/pksig/pksig_CW13_z.py +135 -0
  139. charm/schemes/pksig/pksig_bls04.py +87 -0
  140. charm/schemes/pksig/pksig_boyen.py +156 -0
  141. charm/schemes/pksig/pksig_chch.py +97 -0
  142. charm/schemes/pksig/pksig_chp.py +70 -0
  143. charm/schemes/pksig/pksig_cl03.py +150 -0
  144. charm/schemes/pksig/pksig_cl04.py +87 -0
  145. charm/schemes/pksig/pksig_cllww12_z.py +142 -0
  146. charm/schemes/pksig/pksig_cyh.py +132 -0
  147. charm/schemes/pksig/pksig_dsa.py +76 -0
  148. charm/schemes/pksig/pksig_ecdsa.py +71 -0
  149. charm/schemes/pksig/pksig_hess.py +104 -0
  150. charm/schemes/pksig/pksig_hw.py +110 -0
  151. charm/schemes/pksig/pksig_lamport.py +63 -0
  152. charm/schemes/pksig/pksig_ps01.py +135 -0
  153. charm/schemes/pksig/pksig_ps02.py +124 -0
  154. charm/schemes/pksig/pksig_ps03.py +119 -0
  155. charm/schemes/pksig/pksig_rsa_hw09.py +206 -0
  156. charm/schemes/pksig/pksig_schnorr91.py +77 -0
  157. charm/schemes/pksig/pksig_waters.py +115 -0
  158. charm/schemes/pksig/pksig_waters05.py +121 -0
  159. charm/schemes/pksig/pksig_waters09.py +121 -0
  160. charm/schemes/pre_mg07.py +150 -0
  161. charm/schemes/prenc/pre_afgh06.py +126 -0
  162. charm/schemes/prenc/pre_bbs98.py +123 -0
  163. charm/schemes/prenc/pre_nal16.py +216 -0
  164. charm/schemes/protocol_a01.py +272 -0
  165. charm/schemes/protocol_ao00.py +215 -0
  166. charm/schemes/protocol_cns07.py +274 -0
  167. charm/schemes/protocol_schnorr91.py +125 -0
  168. charm/schemes/sigma1.py +64 -0
  169. charm/schemes/sigma2.py +129 -0
  170. charm/schemes/sigma3.py +126 -0
  171. charm/schemes/threshold/__init__.py +59 -0
  172. charm/schemes/threshold/dkls23_dkg.py +556 -0
  173. charm/schemes/threshold/dkls23_presign.py +1089 -0
  174. charm/schemes/threshold/dkls23_sign.py +761 -0
  175. charm/schemes/threshold/xrpl_wallet.py +967 -0
  176. charm/test/__init__.py +0 -0
  177. charm/test/adapters/__init__.py +0 -0
  178. charm/test/adapters/abenc_adapt_hybrid_test.py +29 -0
  179. charm/test/adapters/dabenc_adapt_hybrid_test.py +56 -0
  180. charm/test/adapters/ibenc_adapt_hybrid_test.py +36 -0
  181. charm/test/adapters/ibenc_adapt_identityhash_test.py +32 -0
  182. charm/test/adapters/kpabenc_adapt_hybrid_test.py +30 -0
  183. charm/test/benchmark/abenc_yllc15_bench.py +92 -0
  184. charm/test/benchmark/benchmark_test.py +148 -0
  185. charm/test/benchmark_threshold.py +260 -0
  186. charm/test/conftest.py +38 -0
  187. charm/test/fuzz/__init__.py +1 -0
  188. charm/test/fuzz/conftest.py +5 -0
  189. charm/test/fuzz/fuzz_policy_parser.py +76 -0
  190. charm/test/fuzz/fuzz_serialization.py +83 -0
  191. charm/test/schemes/__init__.py +0 -0
  192. charm/test/schemes/abenc/__init__.py +0 -0
  193. charm/test/schemes/abenc/abenc_bsw07_test.py +39 -0
  194. charm/test/schemes/abenc/abenc_dacmacs_yj14_test.py +16 -0
  195. charm/test/schemes/abenc/abenc_lsw08_test.py +33 -0
  196. charm/test/schemes/abenc/abenc_maabe_yj14_test.py +16 -0
  197. charm/test/schemes/abenc/abenc_tbpre_lww14_test.py +16 -0
  198. charm/test/schemes/abenc/abenc_waters09_test.py +38 -0
  199. charm/test/schemes/abenc/abenc_yllc15_test.py +74 -0
  200. charm/test/schemes/chamhash_adm05_test.py +31 -0
  201. charm/test/schemes/chamhash_rsa_hw09_test.py +29 -0
  202. charm/test/schemes/commit/__init__.py +0 -0
  203. charm/test/schemes/commit/commit_gs08_test.py +24 -0
  204. charm/test/schemes/commit/commit_pedersen92_test.py +26 -0
  205. charm/test/schemes/dabe_aw11_test.py +45 -0
  206. charm/test/schemes/encap_bchk05_test.py +21 -0
  207. charm/test/schemes/grpsig/__init__.py +0 -0
  208. charm/test/schemes/grpsig/groupsig_bgls04_test.py +35 -0
  209. charm/test/schemes/grpsig/groupsig_bgls04_var_test.py +39 -0
  210. charm/test/schemes/hibenc/__init__.py +0 -0
  211. charm/test/schemes/hibenc/hibenc_bb04_test.py +28 -0
  212. charm/test/schemes/ibenc/__init__.py +0 -0
  213. charm/test/schemes/ibenc/ibenc_bb03_test.py +26 -0
  214. charm/test/schemes/ibenc/ibenc_bf01_test.py +24 -0
  215. charm/test/schemes/ibenc/ibenc_ckrs09_test.py +25 -0
  216. charm/test/schemes/ibenc/ibenc_lsw08_test.py +31 -0
  217. charm/test/schemes/ibenc/ibenc_sw05_test.py +32 -0
  218. charm/test/schemes/ibenc/ibenc_waters05_test.py +31 -0
  219. charm/test/schemes/ibenc/ibenc_waters09_test.py +27 -0
  220. charm/test/schemes/pk_vrf_test.py +29 -0
  221. charm/test/schemes/pkenc/__init__.py +0 -0
  222. charm/test/schemes/pkenc_test.py +255 -0
  223. charm/test/schemes/pksig/__init__.py +0 -0
  224. charm/test/schemes/pksig_test.py +376 -0
  225. charm/test/schemes/rsa_alg_test.py +340 -0
  226. charm/test/schemes/threshold_test.py +1792 -0
  227. charm/test/serialize/__init__.py +0 -0
  228. charm/test/serialize/serialize_test.py +40 -0
  229. charm/test/toolbox/__init__.py +0 -0
  230. charm/test/toolbox/conversion_test.py +30 -0
  231. charm/test/toolbox/ecgroup_test.py +53 -0
  232. charm/test/toolbox/integer_arithmetic_test.py +441 -0
  233. charm/test/toolbox/paddingschemes_test.py +238 -0
  234. charm/test/toolbox/policy_parser_stress_test.py +969 -0
  235. charm/test/toolbox/secretshare_test.py +28 -0
  236. charm/test/toolbox/symcrypto_test.py +108 -0
  237. charm/test/toolbox/test_policy_expression.py +16 -0
  238. charm/test/vectors/__init__.py +1 -0
  239. charm/test/vectors/test_bls_vectors.py +289 -0
  240. charm/test/vectors/test_pedersen_vectors.py +315 -0
  241. charm/test/vectors/test_schnorr_vectors.py +368 -0
  242. charm/test/zkp_compiler/__init__.py +9 -0
  243. charm/test/zkp_compiler/benchmark_zkp.py +258 -0
  244. charm/test/zkp_compiler/test_and_proof.py +240 -0
  245. charm/test/zkp_compiler/test_batch_verify.py +248 -0
  246. charm/test/zkp_compiler/test_dleq_proof.py +264 -0
  247. charm/test/zkp_compiler/test_or_proof.py +231 -0
  248. charm/test/zkp_compiler/test_proof_serialization.py +121 -0
  249. charm/test/zkp_compiler/test_range_proof.py +241 -0
  250. charm/test/zkp_compiler/test_representation_proof.py +325 -0
  251. charm/test/zkp_compiler/test_schnorr_proof.py +221 -0
  252. charm/test/zkp_compiler/test_thread_safety.py +169 -0
  253. charm/test/zkp_compiler/test_zkp_parser.py +139 -0
  254. charm/toolbox/ABEnc.py +26 -0
  255. charm/toolbox/ABEncMultiAuth.py +66 -0
  256. charm/toolbox/ABEnumeric.py +800 -0
  257. charm/toolbox/Commit.py +24 -0
  258. charm/toolbox/DFA.py +89 -0
  259. charm/toolbox/FSA.py +1254 -0
  260. charm/toolbox/Hash.py +39 -0
  261. charm/toolbox/IBEnc.py +62 -0
  262. charm/toolbox/IBSig.py +64 -0
  263. charm/toolbox/PKEnc.py +66 -0
  264. charm/toolbox/PKSig.py +56 -0
  265. charm/toolbox/PREnc.py +32 -0
  266. charm/toolbox/ZKProof.py +289 -0
  267. charm/toolbox/__init__.py +0 -0
  268. charm/toolbox/bitstring.py +49 -0
  269. charm/toolbox/broadcast.py +220 -0
  270. charm/toolbox/conversion.py +100 -0
  271. charm/toolbox/eccurve.py +149 -0
  272. charm/toolbox/ecgroup.py +143 -0
  273. charm/toolbox/enum.py +60 -0
  274. charm/toolbox/hash_module.py +91 -0
  275. charm/toolbox/integergroup.py +323 -0
  276. charm/toolbox/iterate.py +22 -0
  277. charm/toolbox/matrixops.py +76 -0
  278. charm/toolbox/mpc_utils.py +296 -0
  279. charm/toolbox/msp.py +175 -0
  280. charm/toolbox/mta.py +985 -0
  281. charm/toolbox/node.py +120 -0
  282. charm/toolbox/ot/__init__.py +22 -0
  283. charm/toolbox/ot/base_ot.py +374 -0
  284. charm/toolbox/ot/dpf.py +642 -0
  285. charm/toolbox/ot/mpfss.py +228 -0
  286. charm/toolbox/ot/ot_extension.py +589 -0
  287. charm/toolbox/ot/silent_ot.py +378 -0
  288. charm/toolbox/paddingschemes.py +423 -0
  289. charm/toolbox/paddingschemes_test.py +238 -0
  290. charm/toolbox/pairingcurves.py +85 -0
  291. charm/toolbox/pairinggroup.py +186 -0
  292. charm/toolbox/policy_expression_spec.py +70 -0
  293. charm/toolbox/policytree.py +189 -0
  294. charm/toolbox/reCompiler.py +346 -0
  295. charm/toolbox/redundancyschemes.py +65 -0
  296. charm/toolbox/schemebase.py +188 -0
  297. charm/toolbox/secretshare.py +104 -0
  298. charm/toolbox/secretutil.py +174 -0
  299. charm/toolbox/securerandom.py +73 -0
  300. charm/toolbox/sigmaprotocol.py +46 -0
  301. charm/toolbox/specialprimes.py +45 -0
  302. charm/toolbox/symcrypto.py +279 -0
  303. charm/toolbox/threshold_sharing.py +553 -0
  304. charm/toolbox/xmlserialize.py +94 -0
  305. charm/toolbox/zknode.py +105 -0
  306. charm/zkp_compiler/__init__.py +89 -0
  307. charm/zkp_compiler/and_proof.py +460 -0
  308. charm/zkp_compiler/batch_verify.py +324 -0
  309. charm/zkp_compiler/dleq_proof.py +423 -0
  310. charm/zkp_compiler/or_proof.py +305 -0
  311. charm/zkp_compiler/range_proof.py +417 -0
  312. charm/zkp_compiler/representation_proof.py +466 -0
  313. charm/zkp_compiler/schnorr_proof.py +273 -0
  314. charm/zkp_compiler/thread_safe.py +150 -0
  315. charm/zkp_compiler/zk_demo.py +489 -0
  316. charm/zkp_compiler/zkp_factory.py +330 -0
  317. charm/zkp_compiler/zkp_generator.py +370 -0
  318. charm/zkp_compiler/zkparser.py +269 -0
  319. charm_crypto_framework-0.61.1.dist-info/METADATA +337 -0
  320. charm_crypto_framework-0.61.1.dist-info/RECORD +323 -0
  321. charm_crypto_framework-0.61.1.dist-info/WHEEL +5 -0
  322. charm_crypto_framework-0.61.1.dist-info/licenses/LICENSE.txt +165 -0
  323. charm_crypto_framework-0.61.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,145 @@
1
+ /*
2
+ * Charm-Crypto is a framework for rapidly prototyping cryptosystems.
3
+ *
4
+ * Charm-Crypto is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * Charm-Crypto is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public License
15
+ * along with Charm-Crypto. If not, see <http://www.gnu.org/licenses/>.
16
+ *
17
+ * Please contact the charm-crypto dev team at support@charm-crypto.com
18
+ * for any questions.
19
+ */
20
+
21
+ /*
22
+ * @file integermodule.h
23
+ *
24
+ * @brief charm interface over GMP multi-precision integers
25
+ *
26
+ * @author jakinye3@jhu.edu
27
+ *
28
+ ************************************************************************/
29
+
30
+ #ifndef INTEGERMODULE_H
31
+ #define INTEGERMODULE_H
32
+
33
+ #ifndef PY_SSIZE_T_CLEAN
34
+ #define PY_SSIZE_T_CLEAN
35
+ #endif
36
+
37
+ /* Define MS_WIN64 to get correct PYLONG_BITS_IN_DIGIT on Windows. */
38
+ #if PY_MINOR_VERSION <= 10 && defined(_WIN64) && !defined(MS_WIN64)
39
+ #define MS_WIN64
40
+ #endif
41
+
42
+ #include <Python.h>
43
+ #include <stdio.h>
44
+ #include <string.h>
45
+ #include <structmember.h>
46
+
47
+ #if PY_MINOR_VERSION <= 10
48
+ #include <longintrepr.h>
49
+ #else
50
+ #include <cpython/longintrepr.h> /* for conversions */
51
+ #endif
52
+
53
+ #include <math.h>
54
+ #include <string.h>
55
+ #include <gmp.h>
56
+ #include "benchmarkmodule.h"
57
+ #include "base64.h"
58
+ /* used to initialize the RNG */
59
+ #include <openssl/objects.h>
60
+ #include <openssl/rand.h>
61
+ #include <openssl/bn.h>
62
+ #include <openssl/sha.h>
63
+ #include <openssl/evp.h>
64
+
65
+ /* integermath */
66
+ #define MAX_RUN 25
67
+ #define HASH_LEN SHA256_DIGEST_LENGTH
68
+ #define MSG_LEN 128
69
+
70
+ #define ErrorMsg(msg) \
71
+ PyErr_SetString(IntegerError, msg); \
72
+ return NULL;
73
+
74
+ #define Convert_Types(left, right, lhs, rhs, foundLHS, foundRHS, lhs_mpz, rhs_mpz, errorOccured) \
75
+ if(PyInteger_Check(left)) { \
76
+ lhs = (Integer *) left; } \
77
+ else if(PyLong_Check(left)) { \
78
+ longObjToMPZ(lhs_mpz, left); \
79
+ foundLHS = TRUE; } \
80
+ else { errorOccured = TRUE; } \
81
+ \
82
+ if(PyInteger_Check(right)) { \
83
+ rhs = (Integer *) right; } \
84
+ else if(PyLong_Check(right)) { \
85
+ longObjToMPZ(rhs_mpz, right); \
86
+ foundRHS = TRUE; } \
87
+ else { errorOccured = TRUE; }
88
+
89
+ #define Convert_Types2(o1, o2, lhs, rhs, foundLHS, foundRHS) \
90
+ if(PyInteger_Check(o1)) { \
91
+ lhs = (Integer *) o1; } \
92
+ else if(PyLong_Check(o1)) { \
93
+ foundLHS = TRUE; } \
94
+ else { ErrorMsg("invalid left operand type."); } \
95
+ \
96
+ if(PyInteger_Check(o2)) { \
97
+ rhs = (Integer *) o2; } \
98
+ else if(PyLong_Check(o2)) { \
99
+ foundRHS = TRUE; } \
100
+ else { ErrorMsg("invalid right operand type."); }
101
+
102
+ //#ifdef BENCHMARK_ENABLED
103
+ //static Benchmark *dBench;
104
+ //#endif
105
+
106
+ /* Index numbers for different hash functions. These are all implemented as SHA1(index || message). */
107
+ #define HASH_FUNCTION_STR_TO_Zr_CRH 0
108
+ #define HASH_FUNCTION_Zr_TO_G1_ROM 1
109
+ #define HASH_FUNCTION_KEM_DERIVE 2
110
+ #define RAND_MAX_BYTES 2048
111
+
112
+ // declare global gmp_randstate_t state object. Initialize based on /dev/random if linux
113
+ // then make available to all random functions
114
+ PyTypeObject IntegerType;
115
+ static PyObject *IntegerError;
116
+ #define PyInteger_Check(obj) PyObject_TypeCheck(obj, &IntegerType)
117
+ #define PyInteger_Init(obj1, obj2) obj1->initialized && obj2->initialized
118
+
119
+ typedef struct {
120
+ PyObject_HEAD
121
+ mpz_t m;
122
+ mpz_t e;
123
+ int initialized;
124
+ } Integer;
125
+
126
+ PyMethodDef Integer_methods[];
127
+ PyNumberMethods integer_number;
128
+
129
+ void Integer_dealloc(Integer* self);
130
+ PyObject *Integer_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
131
+ int Integer_init(Integer *self, PyObject *args, PyObject *kwds);
132
+ PyObject *Integer_print(Integer *self);
133
+ Integer *createNewInteger(void);
134
+ void print_mpz(mpz_t x, int base);
135
+ void print_bn_dec(const BIGNUM *bn);
136
+
137
+ #define EXIT_IF(check, msg) \
138
+ if(check) { \
139
+ PyErr_SetString(IntegerError, msg); \
140
+ return NULL; }
141
+
142
+
143
+ #endif
144
+
145
+
@@ -0,0 +1,76 @@
1
+ """Type stubs for charm.core.math.integer C extension module."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import overload
6
+
7
+ class Element:
8
+ """Integer element, optionally with modulus for modular arithmetic."""
9
+
10
+ @overload
11
+ def __init__(self, number: int) -> None: ...
12
+ @overload
13
+ def __init__(self, number: Element) -> None: ...
14
+ @overload
15
+ def __init__(self, number: int, modulus: int) -> None: ...
16
+ @overload
17
+ def __init__(self, number: int, modulus: Element) -> None: ...
18
+ @overload
19
+ def __init__(self, number: Element, modulus: int) -> None: ...
20
+ @overload
21
+ def __init__(self, number: Element, modulus: Element) -> None: ...
22
+ def set(self, other: Element) -> bool: ...
23
+ def isCoPrime(self, other: Element | int) -> bool: ...
24
+ def isCongruent(self, a: int, n: int) -> bool: ...
25
+
26
+ # Arithmetic operations
27
+ def __add__(self, other: Element | int) -> Element: ...
28
+ def __radd__(self, other: Element | int) -> Element: ...
29
+ def __sub__(self, other: Element | int) -> Element: ...
30
+ def __rsub__(self, other: Element | int) -> Element: ...
31
+ def __mul__(self, other: Element | int) -> Element: ...
32
+ def __rmul__(self, other: Element | int) -> Element: ...
33
+ def __truediv__(self, other: Element | int) -> Element: ...
34
+ def __rtruediv__(self, other: Element | int) -> Element: ...
35
+ def __mod__(self, other: Element | int) -> Element: ...
36
+ def __rmod__(self, other: Element | int) -> Element: ...
37
+ def __pow__(self, other: Element | int) -> Element: ...
38
+ def __rpow__(self, other: Element | int) -> Element: ...
39
+ def __neg__(self) -> Element: ...
40
+ def __invert__(self) -> Element: ...
41
+ def __xor__(self, other: Element | int) -> Element: ...
42
+ def __rxor__(self, other: Element | int) -> Element: ...
43
+
44
+ # Comparison operations
45
+ def __eq__(self, other: object) -> bool: ...
46
+ def __ne__(self, other: object) -> bool: ...
47
+ def __lt__(self, other: Element | int) -> bool: ...
48
+ def __le__(self, other: Element | int) -> bool: ...
49
+ def __gt__(self, other: Element | int) -> bool: ...
50
+ def __ge__(self, other: Element | int) -> bool: ...
51
+
52
+ # Conversion
53
+ def __int__(self) -> int: ...
54
+ def __str__(self) -> str: ...
55
+ def __repr__(self) -> str: ...
56
+ def __hash__(self) -> int: ...
57
+
58
+ # Module-level functions
59
+ def randomBits(bits: int) -> Element: ...
60
+ def random(n: Element | int) -> Element: ...
61
+ def randomPrime(bits: int) -> Element: ...
62
+ def isPrime(n: Element | int) -> bool: ...
63
+ def encode(message: bytes, modulus: Element | int) -> Element: ...
64
+ def decode(element: Element) -> bytes: ...
65
+ def hashInt(value: bytes, modulus: Element | int) -> Element: ...
66
+ def bitsize(n: Element | int) -> int: ...
67
+ def legendre(a: Element | int, p: Element | int) -> int: ...
68
+ def gcd(a: Element | int, b: Element | int) -> Element: ...
69
+ def lcm(a: Element | int, b: Element | int) -> Element: ...
70
+ def serialize(element: Element) -> bytes: ...
71
+ def deserialize(data: bytes) -> Element: ...
72
+ def int2Bytes(element: Element) -> bytes: ...
73
+ def toInt(element: Element) -> Element: ...
74
+ def getMod(element: Element) -> Element: ...
75
+ def reduce(element: Element) -> Element: ...
76
+
@@ -0,0 +1,37 @@
1
+
2
+ /* auto-generated configuration */
3
+ //#define BUILD_MNT_CURVE 0
4
+ //#define BUILD_BN_CURVE 0
5
+ #define PAD_SIZE 2 // 2 bytes for zero padding on deserialization
6
+
7
+ #if BUILD_MNT_CURVE == 1
8
+ // k=6 MNT curve
9
+ #define MR_PAIRING_MNT
10
+ #define ASYMMETRIC 1
11
+ #define AES_SECURITY 80 // for MNT-160
12
+ #define BIG_SIZE 20
13
+ #define MAX_LEN BIG_SIZE + PAD_SIZE // 20 bytes necessary for representation of ints
14
+
15
+ #include "pairing_3.h"
16
+
17
+ #elif BUILD_BN_CURVE == 1
18
+
19
+ #define MR_PAIRING_BN
20
+ #define ASYMMETRIC 1
21
+ #define AES_SECURITY 128 // for BN-256
22
+ #define BIG_SIZE 32
23
+ #define MAX_LEN BIG_SIZE + PAD_SIZE // 32 bytes necessary, 2 for zero padding on deserialization
24
+
25
+ #include "pairing_3.h"
26
+
27
+ #elif BUILD_SS_CURVE == 1
28
+ // super-singular curve over GF(P) where k=2 (large prime)
29
+ #define MR_PAIRING_SSP
30
+ #define ASYMMETRIC 0
31
+ #define AES_SECURITY 80 // for SS512, 128 for SS1536
32
+ #define BIG_SIZE 64
33
+ #define MAX_LEN BIG_SIZE + PAD_SIZE // 64 bytes necessary, 2 for zero padding on deserialization
34
+ #include "pairing_1.h"
35
+
36
+ #endif
37
+
@@ -0,0 +1,118 @@
1
+ /*
2
+ * Charm-Crypto is a framework for rapidly prototyping cryptosystems.
3
+ *
4
+ * Charm-Crypto is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * Charm-Crypto is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public License
15
+ * along with Charm-Crypto. If not, see <http://www.gnu.org/licenses/>.
16
+ *
17
+ * Please contact the charm-crypto dev team at support@charm-crypto.com
18
+ * for any questions.
19
+ */
20
+
21
+ /*
22
+ * @file miracl_interface.h
23
+ *
24
+ * @brief charm interface over MIRACL's pairing-based crypto C++ classes
25
+ *
26
+ * @author jakinye3@jhu.edu
27
+ *
28
+ ************************************************************************/
29
+
30
+ #include <gmp.h>
31
+
32
+ typedef void pairing_t;
33
+ typedef void element_t;
34
+
35
+ #ifdef __cplusplus
36
+ extern "C" {
37
+ #endif
38
+
39
+ enum Curve {MNT, SS, BLS, NONE_C}; // control what type of curve we are dealing with
40
+ enum Group {ZR_t = 0, G1_t, G2_t, GT_t, NONE_G}; // clashes with types in pairing_3.h
41
+ typedef enum Group Group_t;
42
+ typedef enum Curve Curve_t;
43
+
44
+ #define TRUE 1
45
+ #define FALSE 0
46
+ #define CF 2 // Co-factor = 2 in MNT curves
47
+ #define MAX_LEN 256
48
+ #define LEN_BITS 4
49
+ #define aes_block_size 16
50
+
51
+ pairing_t *pairing_init(int securitylevel);
52
+ void pairing_clear(pairing_t *pairing);
53
+ // to clean up the mriacl system completely.NOTE: Make sure miracl PFC classes are patched.
54
+ void miracl_clean();
55
+ element_t *order(pairing_t *pairing);
56
+
57
+ element_t *element_init_ZR(int value);
58
+ element_t *_element_init_G1(void);
59
+ element_t *_element_init_G2(void);
60
+ element_t *_element_init_GT(const pairing_t *pairing);
61
+ void element_random(Group_t type, const pairing_t *pairing, element_t *e);
62
+ void element_printf(Group_t type, const element_t *e);
63
+ int _element_length_to_str(Group_t type, const element_t *e);
64
+ int _element_to_str(unsigned char **data_str, Group_t type, const element_t *e);
65
+
66
+ void _element_add(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a + b
67
+ void _element_sub(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = (a - b) % o
68
+ void _element_mul(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o);
69
+ void _element_mul_si(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const signed long int b, const element_t *o);
70
+ void _element_mul_zn(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const element_t *b, const element_t *o);
71
+ void _element_div(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a / b
72
+
73
+ // c = a (G1, G2 or GT) ^ b (ZR)
74
+ element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, element_t *a, element_t *b, element_t *o);
75
+ //element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, const element_t *a, const element_t *b, const element_t *o);
76
+ element_t *_element_pow_zr_zr(Group_t type, const pairing_t *pairing, const element_t *a, const int b, const element_t *o);
77
+ element_t *_element_neg(Group_t type, const element_t *e, const element_t *o);
78
+ //void _element_inv(Group_t type, const element_t *a, element_t *b, element_t *o);
79
+ void _element_inv(Group_t type, const pairing_t *pairing, const element_t *a, element_t *b, element_t *o);
80
+
81
+ element_t *hash_then_map(Group_t type, const pairing_t *pairing, char *data, int len);
82
+ element_t *_element_from_hash(Group_t type, const pairing_t *pairing, void *data, int len);
83
+
84
+ int element_is_member(Curve_t ctype, Group_t type, const pairing_t *pairing, element_t *e);
85
+ int element_is_value(Group_t type, element_t *n, int value);
86
+
87
+ int _element_cmp(Group_t type, element_t *a, element_t *b);
88
+ void _element_set_si(Group_t type, element_t *dst, const signed long int src);
89
+ int _element_setG1(Group_t type, element_t *c, const element_t *a, const element_t *b);
90
+ void _element_set(Curve_t ctype, Group_t type, element_t *dst, const element_t *src);
91
+ char *print_mpz(mpz_t x, int base);
92
+ void _element_set_mpz(Group_t type, element_t *dst, mpz_t src);
93
+ void _element_to_mpz(Group_t type, element_t *src, mpz_t dst);
94
+ element_t *_element_pairing_type3(const pairing_t *pairing, const element_t *in1, const element_t *in2);
95
+ element_t *_element_prod_pairing_type3(const pairing_t *pairing, const element_t **in1, const element_t **in2, int length);
96
+
97
+ // I/O functions start
98
+ int _element_length_in_bytes(Curve_t ctype, Group_t type, element_t *e);
99
+ int _element_to_bytes(unsigned char *data, Curve_t ctype, Group_t type, element_t *e);
100
+ element_t *_element_from_bytes(Curve_t ctype, Group_t type, unsigned char *data);
101
+ // I/O functiond end
102
+
103
+ void element_delete(Group_t type, element_t *e);
104
+
105
+ void _init_hash(const pairing_t *pairing);
106
+ void _element_add_str_hash(const pairing_t *pairing, void *data, int len);
107
+ void _element_add_to_hash(Group_t type, const pairing_t *pairing, const element_t *e);
108
+ element_t *finish_hash(Group_t type, const pairing_t *pairing);
109
+
110
+ void _element_hash_key(const pairing_t *pairing, Group_t type, element_t *e, void *data, int len);
111
+
112
+ int aes_encrypt(char *key, char *message, int len, char **out);
113
+ int aes_decrypt(char *key, char *ciphertext, int len, char **out);
114
+
115
+ #ifdef __cplusplus
116
+ }
117
+ #endif
118
+
@@ -0,0 +1,126 @@
1
+ /*
2
+ * Charm-Crypto is a framework for rapidly prototyping cryptosystems.
3
+ *
4
+ * Charm-Crypto is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * Charm-Crypto is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public License
15
+ * along with Charm-Crypto. If not, see <http://www.gnu.org/licenses/>.
16
+ *
17
+ * Please contact the charm-crypto dev team at support@charm-crypto.com
18
+ * for any questions.
19
+ */
20
+
21
+ /*
22
+ * @file miracl_interface.h
23
+ *
24
+ * @brief charm interface over MIRACL's pairing-based crypto C++ classes
25
+ *
26
+ * @author jakinye3@jhu.edu
27
+ *
28
+ ************************************************************************/
29
+ #include <gmp.h>
30
+
31
+ typedef void pairing_t;
32
+ typedef void element_t;
33
+
34
+ #ifdef __cplusplus
35
+ extern "C" {
36
+ #endif
37
+
38
+ enum Curve {MNT, BN, SS, NONE_C}; // control what type of curve we are dealing with
39
+ #if (BUILD_MNT_CURVE == 1 || BUILD_BN_CURVE == 1)
40
+ enum Group {pyZR_t = 0, pyG1_t, pyG2_t, pyGT_t, NONE_G}; // clashes with types in pairing_3.h
41
+ #else
42
+ enum Group {pyZR_t = 0, pyG1_t, pyGT_t, NONE_G};
43
+ #define pyG2_t pyG1_t // for backwards compatibility
44
+ #define G2 G1
45
+ #endif
46
+
47
+ typedef enum Group Group_t;
48
+ typedef enum Curve Curve_t;
49
+
50
+ #define TRUE 1
51
+ #define FALSE 0
52
+ #define CF 2 // Co-factor = 2 in MNT curves
53
+ #define LEN_BITS 4
54
+ #define aes_block_size 16
55
+
56
+ pairing_t *pairing_init(int securitylevel);
57
+ void pairing_clear(pairing_t *pairing);
58
+ // to clean up the mriacl system completely.NOTE: Make sure miracl PFC classes are patched.
59
+ void miracl_clean(void);
60
+ element_t *order(pairing_t *pairing);
61
+ element_t *element_gt(const pairing_t *pairing);
62
+
63
+ element_t *element_init_ZR(int value);
64
+ element_t *_element_init_G1(void);
65
+ element_t *_element_init_G2(void);
66
+ element_t *_element_init_GT(const pairing_t *pairing);
67
+ int _element_pp_init(const pairing_t *pairing, Group_t type, element_t *e);
68
+ void element_random(Group_t type, const pairing_t *pairing, element_t *e);
69
+ void element_printf(Group_t type, const element_t *e);
70
+ int _element_length_to_str(Group_t type, const element_t *e);
71
+ int _element_to_str(unsigned char **data_str, Group_t type, const element_t *e);
72
+
73
+ void _element_add(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a + b
74
+ void _element_sub(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = (a - b) % o
75
+ void _element_mul(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o);
76
+ void _element_mul_si(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const signed long int b, const element_t *o);
77
+ void _element_mul_zn(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const element_t *b, const element_t *o);
78
+ void _element_div(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a / b
79
+
80
+ // c = a (G1, G2 or GT) ^ b (ZR)
81
+ element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, element_t *a, element_t *b, element_t *o);
82
+ //element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, const element_t *a, const element_t *b, const element_t *o);
83
+ element_t *_element_pow_zr_zr(Group_t type, const pairing_t *pairing, const element_t *a, const int b, const element_t *o);
84
+ element_t *_element_neg(Group_t type, const element_t *e, const element_t *o);
85
+ //void _element_inv(Group_t type, const element_t *a, element_t *b, element_t *o);
86
+ void _element_inv(Group_t type, const pairing_t *pairing, const element_t *a, element_t *b, element_t *o);
87
+
88
+ element_t *hash_then_map(Group_t type, const pairing_t *pairing, char *data, int len);
89
+ element_t *_element_from_hash(Group_t type, const pairing_t *pairing, void *data, int len);
90
+
91
+ int element_is_member(Curve_t ctype, Group_t type, const pairing_t *pairing, element_t *e);
92
+ int element_is_value(Group_t type, element_t *n, int value);
93
+
94
+ int _element_cmp(Group_t type, element_t *a, element_t *b);
95
+ void _element_set_si(Group_t type, element_t *dst, const signed long int src);
96
+ int _element_setG1(Group_t type, element_t *c, const element_t *a, const element_t *b);
97
+ void _element_set(Curve_t ctype, Group_t type, element_t *dst, const element_t *src);
98
+ char *print_mpz(mpz_t x, int base);
99
+ void _element_set_mpz(Group_t type, element_t *dst, mpz_t src);
100
+ void _element_to_mpz(Group_t type, element_t *src, mpz_t dst);
101
+
102
+ element_t *_element_pairing(const pairing_t *pairing, const element_t *in1, const element_t *in2);
103
+ element_t *_element_prod_pairing(const pairing_t *pairing, const element_t **in1, const element_t **in2, int length);
104
+
105
+ // I/O functions start
106
+ int _element_length_in_bytes(Curve_t ctype, Group_t type, element_t *e);
107
+ int _element_to_bytes(unsigned char *data, Curve_t ctype, Group_t type, element_t *e);
108
+ element_t *_element_from_bytes(Curve_t ctype, Group_t type, unsigned char *data);
109
+ // I/O functiond end
110
+
111
+ void element_delete(Group_t type, element_t *e);
112
+
113
+ void _init_hash(const pairing_t *pairing);
114
+ void _element_add_str_hash(const pairing_t *pairing, char *data, int len);
115
+ void _element_add_to_hash(Group_t type, const pairing_t *pairing, const element_t *e);
116
+ element_t *finish_hash(Group_t type, const pairing_t *pairing);
117
+
118
+ void _element_hash_key(const pairing_t *pairing, Group_t type, element_t *e, void *data, int len);
119
+
120
+ int aes_encrypt(char *key, char *message, int len, char **out);
121
+ int aes_decrypt(char *key, char *ciphertext, int len, char **out);
122
+
123
+ #ifdef __cplusplus
124
+ }
125
+ #endif
126
+