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,39 @@
1
+ import unittest
2
+
3
+ from charm.schemes.grpsig.groupsig_bgls04_var import ShortSig as BGLS04_Var
4
+ from charm.toolbox.pairinggroup import PairingGroup
5
+
6
+ debug = False
7
+
8
+
9
+ class BGLS04_VarTest(unittest.TestCase):
10
+ def testBGLS04_Var(self):
11
+ groupObj = PairingGroup('MNT224')
12
+ n = 3 # how manu users in the group
13
+ user = 1 # which user's key to sign a message with
14
+
15
+ sigTest = BGLS04_Var(groupObj)
16
+
17
+ (gpk, gmsk, gsk) = sigTest.keygen(n)
18
+
19
+ message = 'Hello World this is a message!'
20
+ if debug: print("\n\nSign the following M: '%s'" % (message))
21
+
22
+ signature = sigTest.sign(gpk, gsk[user], message)
23
+
24
+ result = sigTest.verify(gpk, message, signature)
25
+ # if result:
26
+ # print("Verify signers identity...")
27
+ # index = sigTest.open(gpk, gmsk, message, signature)
28
+ # i = 0
29
+ # while i < n:
30
+ # if gsk[i][0] == index:
31
+ # print('Found index of signer: %d' % i)
32
+ # print('A = %s' % index)
33
+ # i += 1
34
+ assert result, "Signature Failed"
35
+ if debug: print('Successful Verification!')
36
+
37
+
38
+ if __name__ == "__main__":
39
+ unittest.main()
File without changes
@@ -0,0 +1,28 @@
1
+ from charm.schemes.hibenc.hibenc_bb04 import HIBE_BB04
2
+ from charm.toolbox.pairinggroup import PairingGroup, GT
3
+ import unittest
4
+
5
+ debug = False
6
+
7
+ class HIBE_BB04Test(unittest.TestCase):
8
+ def testHIBE_BB04(self):
9
+ groupObj = PairingGroup('SS512')
10
+ hibe = HIBE_BB04(groupObj)
11
+ (mpk, mk) = hibe.setup()
12
+
13
+ # represents public identity
14
+ ID = "bob@mail.com"
15
+ (pk, sk) = hibe.extract(3, mpk, mk, ID)
16
+ # dID => pk, sk
17
+ if debug: print("ID:%s , sk:%s" % (pk, sk))
18
+
19
+ M = groupObj.random(GT)
20
+ if debug: print("M :=", M)
21
+ ct = hibe.encrypt(mpk, pk, M)
22
+
23
+ orig_M = hibe.decrypt(pk, sk, ct)
24
+ assert orig_M == M, "invalid decryption!!!!"
25
+ if debug: print("Successful DECRYPTION!!!")
26
+
27
+ if __name__ == "__main__":
28
+ unittest.main()
File without changes
@@ -0,0 +1,26 @@
1
+ import unittest
2
+
3
+ from charm.schemes.ibenc.ibenc_bb03 import IBE_BB04
4
+ from charm.toolbox.pairinggroup import PairingGroup
5
+ from charm.toolbox.pairinggroup import ZR, GT
6
+
7
+ debug = False
8
+
9
+
10
+ class IBE_BB04Test(unittest.TestCase):
11
+ def testIBE_BB04(self):
12
+ # initialize the element object so that object references have global scope
13
+ groupObj = PairingGroup('MNT224')
14
+ ibe = IBE_BB04(groupObj)
15
+ (params, mk) = ibe.setup()
16
+
17
+ # represents public identity
18
+ kID = groupObj.random(ZR)
19
+ key = ibe.extract(mk, kID)
20
+
21
+ M = groupObj.random(GT)
22
+ cipher = ibe.encrypt(params, kID, M)
23
+ m = ibe.decrypt(params, key, cipher)
24
+
25
+ assert m == M, "FAILED Decryption!"
26
+ if debug: print("Successful Decryption!! M => '%s'" % m)
@@ -0,0 +1,24 @@
1
+ import unittest
2
+
3
+ from charm.schemes.ibenc.ibenc_bf01 import IBE_BonehFranklin
4
+ from charm.toolbox.pairinggroup import PairingGroup
5
+
6
+ debug = False
7
+
8
+
9
+ class IBE_BonehFranklinTest(unittest.TestCase):
10
+ def testIBE_BonehFranklin(self):
11
+ groupObj = PairingGroup('MNT224', secparam=1024)
12
+ ibe = IBE_BonehFranklin(groupObj)
13
+
14
+ (pk, sk) = ibe.setup()
15
+
16
+ id = 'user@email.com'
17
+ key = ibe.extract(sk, id)
18
+
19
+ m = b"hello world!!!!!"
20
+ ciphertext = ibe.encrypt(pk, id, m)
21
+
22
+ msg = ibe.decrypt(pk, key, ciphertext)
23
+ assert msg == m, "failed decrypt: \n%s\n%s" % (msg, m)
24
+ if debug: print("Successful Decryption!!!")
@@ -0,0 +1,25 @@
1
+ import unittest
2
+
3
+ from charm.schemes.ibenc.ibenc_ckrs09 import IBE_CKRS
4
+ from charm.toolbox.pairinggroup import PairingGroup, GT
5
+
6
+ debug = False
7
+
8
+
9
+ class IBE_CKRSTest(unittest.TestCase):
10
+ def testIBE_CKRS(self):
11
+ groupObj = PairingGroup('SS512')
12
+ ibe = IBE_CKRS(groupObj)
13
+ (mpk, msk) = ibe.setup()
14
+
15
+ # represents public identity
16
+ ID = "bob@mail.com"
17
+ sk = ibe.extract(mpk, msk, ID)
18
+
19
+ M = groupObj.random(GT)
20
+ ct = ibe.encrypt(mpk, ID, M)
21
+ m = ibe.decrypt(mpk, sk, ct)
22
+ if debug: print('m =>', m)
23
+
24
+ assert m == M, "FAILED Decryption!"
25
+ if debug: print("Successful Decryption!!! m => '%s'" % m)
@@ -0,0 +1,31 @@
1
+ import unittest
2
+
3
+ from charm.schemes.ibenc.ibenc_lsw08 import IBE_Revoke
4
+ from charm.toolbox.pairinggroup import PairingGroup, GT
5
+
6
+ debug = False
7
+
8
+
9
+ class IBE_RevokeTest(unittest.TestCase):
10
+ def testIBE_Revoke(self):
11
+ # scheme designed for symmetric billinear groups
12
+ grp = PairingGroup('SS512')
13
+ n = 5 # total # of users
14
+
15
+ ibe = IBE_Revoke(grp)
16
+
17
+ ID = "user2@email.com"
18
+ S = ["user1@email.com", "user3@email.com", "user4@email.com"]
19
+ (mpk, msk) = ibe.setup(n)
20
+
21
+ sk = ibe.keygen(mpk, msk, ID)
22
+ if debug: print("Keygen...\nsk :=", sk)
23
+
24
+ M = grp.random(GT)
25
+
26
+ ct = ibe.encrypt(mpk, M, S)
27
+ if debug: print("Ciphertext...\nct :=", ct)
28
+
29
+ m = ibe.decrypt(S, ct, sk)
30
+ assert M == m, "Decryption FAILED!"
31
+ if debug: print("Successful Decryption!!!")
@@ -0,0 +1,32 @@
1
+ import unittest
2
+
3
+ from charm.schemes.ibenc.ibenc_sw05 import IBE_SW05_LUC
4
+ from charm.toolbox.pairinggroup import PairingGroup, GT
5
+
6
+ debug = False
7
+
8
+
9
+ class IBE_SW05_LUCTest(unittest.TestCase):
10
+ def testIBE_SW05_LUC(self):
11
+ # initialize the element object so that object references have global scope
12
+ groupObj = PairingGroup('SS512')
13
+ n = 6;
14
+ d = 4
15
+ ibe = IBE_SW05_LUC(groupObj)
16
+ (pk, mk) = ibe.setup(n, d)
17
+ if debug:
18
+ print("Parameter Setup...")
19
+ print("pk =>", pk)
20
+ print("mk =>", mk)
21
+
22
+ w = ['insurance', 'id=2345', 'oncology', 'doctor', 'nurse', 'JHU'] # private identity
23
+ wPrime = ['insurance', 'id=2345', 'doctor', 'oncology', 'JHU', 'billing', 'misc'] # public identity for encrypt
24
+
25
+ (w_hashed, sk) = ibe.extract(mk, w, pk, d, n)
26
+
27
+ M = groupObj.random(GT)
28
+ cipher = ibe.encrypt(pk, wPrime, M, n)
29
+ m = ibe.decrypt(pk, sk, cipher, w_hashed, d)
30
+
31
+ assert m == M, "FAILED Decryption: \nrecovered m = %s and original m = %s" % (m, M)
32
+ if debug: print("Successful Decryption!! M => '%s'" % m)
@@ -0,0 +1,31 @@
1
+ import unittest
2
+
3
+ from charm.schemes.ibenc.ibenc_waters05 import IBE_N04
4
+ from charm.toolbox.hash_module import Waters
5
+ from charm.toolbox.pairinggroup import PairingGroup, GT
6
+
7
+ debug = False
8
+
9
+
10
+ class IBE_N04Test(unittest.TestCase):
11
+ def testIBE_N04(self):
12
+ # initialize the element object so that object references have global scope
13
+ groupObj = PairingGroup('SS512')
14
+ waters = Waters(groupObj)
15
+ ibe = IBE_N04(groupObj)
16
+ (pk, mk) = ibe.setup()
17
+
18
+ # represents public identity
19
+ ID = "bob@mail.com"
20
+ kID = waters.hash(ID)
21
+ # if debug: print("Bob's key =>", kID)
22
+ key = ibe.extract(mk, kID)
23
+
24
+ M = groupObj.random(GT)
25
+ cipher = ibe.encrypt(pk, kID, M)
26
+ m = ibe.decrypt(pk, key, cipher)
27
+ # print('m =>', m)
28
+
29
+ assert m == M, "FAILED Decryption!"
30
+ if debug: print("Successful Decryption!!! m => '%s'" % m)
31
+ del groupObj
@@ -0,0 +1,27 @@
1
+ import unittest
2
+
3
+ from charm.schemes.ibenc.ibenc_waters09 import DSE09
4
+ from charm.toolbox.pairinggroup import PairingGroup, GT
5
+
6
+ debug = False
7
+
8
+
9
+ class DSE09Test(unittest.TestCase):
10
+ def testDSE09(self):
11
+ grp = PairingGroup('SS512')
12
+
13
+ ibe = DSE09(grp)
14
+
15
+ ID = "user2@email.com"
16
+ (mpk, msk) = ibe.setup()
17
+
18
+ sk = ibe.keygen(mpk, msk, ID)
19
+ if debug: print("Keygen...\nsk :=", sk)
20
+
21
+ M = grp.random(GT)
22
+ ct = ibe.encrypt(mpk, M, ID)
23
+ if debug: print("Ciphertext...\nct :=", ct)
24
+
25
+ m = ibe.decrypt(ct, sk)
26
+ assert M == m, "Decryption FAILED!"
27
+ if debug: print("Successful Decryption!!!")
@@ -0,0 +1,29 @@
1
+ from charm.toolbox.pairinggroup import PairingGroup
2
+ from charm.schemes.pk_vrf import VRF10
3
+ import unittest
4
+
5
+ debug = False
6
+ class VRF10Test(unittest.TestCase):
7
+ def testVRF10(self):
8
+ grp = PairingGroup('MNT224')
9
+
10
+ # bits
11
+ x1 = [0, 1, 1, 0, 1, 0, 1, 0]
12
+ # x2 = [1, 1, 1, 0, 1, 0, 1, 0]
13
+ # block of bits
14
+ n = 8
15
+
16
+ vrf = VRF10(grp)
17
+
18
+ # setup the VRF to accept input blocks of 8-bits
19
+ (pk, sk) = vrf.setup(n)
20
+
21
+ # generate proof over block x (using sk)
22
+ st = vrf.prove(sk, x1)
23
+
24
+ # verify bits using pk and proof
25
+ assert vrf.verify(pk, x1, st), "VRF failed verification"
26
+ # assert vrf.verify(pk, x2, st), "VRF should FAIL verification!!!"
27
+
28
+ if __name__ == "__main__":
29
+ unittest.main()
File without changes
@@ -0,0 +1,255 @@
1
+ import unittest
2
+
3
+ import pytest
4
+
5
+ from charm.adapters.pkenc_adapt_hybrid import HybridEnc
6
+ from charm.adapters.pkenc_adapt_chk04 import CHK04
7
+ from charm.adapters.pkenc_adapt_bchk05 import BCHKIBEnc
8
+ from charm.adapters.ibenc_adapt_identityhash import HashIDAdapter
9
+ from charm.schemes.encap_bchk05 import EncapBCHK
10
+ from charm.schemes.ibenc.ibenc_bb03 import IBE_BB04
11
+ from charm.schemes.pksig.pksig_bls04 import BLS01
12
+ from charm.schemes.pkenc.pkenc_cs98 import CS98
13
+ from charm.schemes.pkenc.pkenc_elgamal85 import ElGamal
14
+ from charm.schemes.pkenc.pkenc_paillier99 import Pai99
15
+ from charm.schemes.pkenc.pkenc_rabin import Rabin_Enc, Rabin_Sig
16
+ from charm.schemes.pkenc.pkenc_rsa import RSA_Enc, RSA_Sig
17
+ from charm.toolbox.pairinggroup import PairingGroup, GT
18
+ from charm.toolbox.ecgroup import elliptic_curve, ECGroup
19
+ from charm.toolbox.eccurve import prime192v1, prime192v2
20
+ from charm.toolbox.integergroup import RSAGroup, integer, IntegerGroupQ, IntegerGroup
21
+
22
+ debug = False
23
+
24
+ class BCHKIBEncTest(unittest.TestCase):
25
+ def testBCHKIBEnc(self):
26
+ groupObj = PairingGroup('SS512')
27
+ ibe = IBE_BB04(groupObj)
28
+ encap = EncapBCHK()
29
+
30
+ hyb_ibe = BCHKIBEnc(ibe, groupObj, encap)
31
+
32
+ (pk, sk) = hyb_ibe.keygen()
33
+ if debug:
34
+ print("pk => ", pk)
35
+ print("sk => ", sk)
36
+
37
+ msg = b"Hello World!"
38
+
39
+ ct = hyb_ibe.encrypt(pk, msg)
40
+ if debug:
41
+ print("\nCiphertext")
42
+ print("C1 =>", ct['C1'])
43
+ print("C2 =>", ct['C2'])
44
+ print("tag =>", ct['tag'])
45
+
46
+ decrypted_msg = hyb_ibe.decrypt(pk, sk, ct)
47
+ assert decrypted_msg == msg
48
+ if debug: print("Successful Decryption!!! =>", decrypted_msg)
49
+ del groupObj
50
+
51
+ class CHK04Test(unittest.TestCase):
52
+ def testCHK04(self):
53
+ groupObj = PairingGroup('SS512')
54
+ # instantiate an Identity-Based Encryption scheme
55
+ ibe = IBE_BB04(groupObj)
56
+ hash_ibe = HashIDAdapter(ibe, groupObj)
57
+
58
+ # instantiate an one-time signature scheme such as BLS04
59
+ ots = BLS01(groupObj)
60
+
61
+ pkenc = CHK04(hash_ibe, ots, groupObj)
62
+
63
+ # not sure how to enforce secparam yet
64
+ (pk, sk) = pkenc.keygen(0)
65
+
66
+ msg = groupObj.random(GT)
67
+ ciphertext = pkenc.encrypt(pk, msg)
68
+
69
+ rec_msg = pkenc.decrypt(pk, sk, ciphertext)
70
+ assert rec_msg == msg, "FAILED Decryption!!!"
71
+ if debug: print("Successful Decryption!")
72
+
73
+ class HybridEncTest(unittest.TestCase):
74
+ def testHybridEnc(self):
75
+ groupObj = ECGroup(prime192v1)
76
+ pkenc = ElGamal(groupObj)
77
+ hyenc = HybridEnc(pkenc, msg_len=groupObj.bitsize())
78
+
79
+ (pk, sk) = hyenc.keygen()
80
+
81
+ # message len should be group.bitsize() len for prime192v1 (or 20 bytes)
82
+ m = b'the hello world msg1'
83
+ cipher = hyenc.encrypt(pk, m)
84
+ orig_m = hyenc.decrypt(pk, sk, cipher)
85
+ assert m == orig_m, "Failed Decryption"
86
+ if debug: print("Successful Decryption!!")
87
+
88
+ class EC_CS98Test(unittest.TestCase):
89
+ def testEC_CS98(self):
90
+ groupObj = ECGroup(prime192v1)
91
+ pkenc = CS98(groupObj)
92
+
93
+ (pk, sk) = pkenc.keygen()
94
+
95
+ # message len should be group.bitsize() len for prime192v1 (or 20 bytes)
96
+ M = b'the hello world msg1'
97
+ ciphertext = pkenc.encrypt(pk, M)
98
+ message = pkenc.decrypt(pk, sk, ciphertext)
99
+
100
+ assert M == message, "Failed Decryption!!!"
101
+ if debug: print("SUCCESSFUL DECRYPTION!!! => %s" % message)
102
+
103
+ class CS98Test(unittest.TestCase):
104
+ def testCS98(self):
105
+ p = integer(156053402631691285300957066846581395905893621007563090607988086498527791650834395958624527746916581251903190331297268907675919283232442999706619659475326192111220545726433895802392432934926242553363253333261282122117343404703514696108330984423475697798156574052962658373571332699002716083130212467463571362679)
106
+ q = integer(78026701315845642650478533423290697952946810503781545303994043249263895825417197979312263873458290625951595165648634453837959641616221499853309829737663096055610272863216947901196216467463121276681626666630641061058671702351757348054165492211737848899078287026481329186785666349501358041565106233731785681339)
107
+ groupObj = IntegerGroup()
108
+ pkenc = CS98(groupObj, p, q)
109
+
110
+ (pk, sk) = pkenc.keygen(1024)
111
+ M = b"hello world. test message"
112
+ ciphertext = pkenc.encrypt(pk, M)
113
+
114
+ message = pkenc.decrypt(pk, sk, ciphertext)
115
+
116
+ assert M == message, "UNSUCCESSFUL!!!! :-( why?"
117
+ if debug: print("SUCCESSFULLY RECOVERED => %s" % message)
118
+
119
+ class ElGamalTest(unittest.TestCase):
120
+ def testElGamal(self):
121
+ groupObj = ECGroup(prime192v2)
122
+ el = ElGamal(groupObj)
123
+ (pk, sk) = el.keygen()
124
+ # message len should be group.bitsize() len for prime192v1 (or 20 bytes)
125
+ msg = b'the hello world msg1'
126
+ cipher1 = el.encrypt(pk, msg)
127
+ m = el.decrypt(pk, sk, cipher1)
128
+ assert m == msg, "Failed Decryption!!!"
129
+ if debug: print("SUCCESSFULLY DECRYPTED!!!")
130
+
131
+ class ElGamalTest(unittest.TestCase):
132
+ def testElGamal(self):
133
+ p = integer(148829018183496626261556856344710600327516732500226144177322012998064772051982752493460332138204351040296264880017943408846937646702376203733370973197019636813306480144595809796154634625021213611577190781215296823124523899584781302512549499802030946698512327294159881907114777803654670044046376468983244647367)
134
+ q = integer(74414509091748313130778428172355300163758366250113072088661006499032386025991376246730166069102175520148132440008971704423468823351188101866685486598509818406653240072297904898077317312510606805788595390607648411562261949792390651256274749901015473349256163647079940953557388901827335022023188234491622323683)
135
+ groupObj = IntegerGroupQ()
136
+ el = ElGamal(groupObj, p, q)
137
+ (pk, sk) = el.keygen()
138
+ msg = b"hello world!"
139
+ cipher1 = el.encrypt(pk, msg)
140
+ m = el.decrypt(pk, sk, cipher1)
141
+ assert m == msg, "Failed Decryption!!!"
142
+ if debug: print("SUCCESSFULLY DECRYPTED!!!")
143
+
144
+ class Pai99Test(unittest.TestCase):
145
+ def testPai99(self):
146
+ group = RSAGroup()
147
+ pai = Pai99(group)
148
+
149
+ (pk, sk) = pai.keygen()
150
+
151
+ m1 = 12345678987654321
152
+ m2 = 12345761234123409
153
+ m3 = 24691440221777730 # target
154
+ c1 = pai.encrypt(pk, m1)
155
+ c2 = pai.encrypt(pk, m2)
156
+
157
+ if debug: print("c1 =>", c1, "\n")
158
+ if debug: print("c2 =>", c2, "\n")
159
+ c3 = c1 + c2
160
+ if debug: print("Homomorphic Add Test...\nc1 + c2 =>", c3, "\n")
161
+
162
+ orig_m = pai.decrypt(pk, sk, c3)
163
+ if debug: print("orig_m =>", orig_m)
164
+
165
+ # m3 = m1 + m2
166
+ assert m3 == orig_m, "FAILED Decryption!!!"
167
+ if debug: print("Successful Decryption!")
168
+
169
+ if debug: print("Homomorphic Mul Test...\n")
170
+ c4 = c1 + 200
171
+ if debug: print("c4 = c1 + 200 =>", c4, "\n")
172
+ orig_m = pai.decrypt(pk, sk, c4)
173
+ if debug: print("m4 =>", orig_m, "\n")
174
+
175
+ c5 = c2 * 20201
176
+ if debug: print("c5 = c2 * 2021 =>", c5, "\n")
177
+ orig_m = pai.decrypt(pk, sk, c5)
178
+ if debug: print("m5 =>", orig_m, "\n")
179
+
180
+ messages = range(0, 10)
181
+ cts = []
182
+
183
+ for m in messages:
184
+ c = pai.encrypt(pk, pai.encode(pk['n'], m))
185
+ cts.append(c)
186
+ enc_m = pai.encode(pk['n'], m)
187
+ rec_m = pai.decrypt(pk, sk, c)
188
+ assert rec_m == m, "Failed to decrypt"
189
+
190
+ # test homomorphic properties (addition)
191
+ c0 = cts[0]
192
+ for i in range(1, len(cts)):
193
+ c0 = c0 + cts[i]
194
+
195
+ rec_sum = pai.decrypt(pk, sk, c0)
196
+ print("Total Sum: ", rec_sum)
197
+ tot_sum = sum(list(messages))
198
+ assert rec_sum == tot_sum, "Failed to decrypt to correct sum"
199
+
200
+ class Rabin_EncTest(unittest.TestCase):
201
+ @pytest.mark.skip(reason="Fails on Linux CI - SAEP padding decode issue")
202
+ def testRabin_Enc(self):
203
+ rabin = Rabin_Enc()
204
+
205
+ (pk, sk) = rabin.keygen(128, 1024)
206
+
207
+ m = b'This is a test'
208
+ #m = 55
209
+ #m = b'A'
210
+ c = rabin.encrypt(pk, m)
211
+ if debug: print("ct =>", c)
212
+
213
+ orig_m = rabin.decrypt(pk, sk, c)
214
+ if debug: print("recovered m =>", orig_m)
215
+
216
+ assert m == orig_m
217
+ if debug: print("Successful Decryption!!!")
218
+
219
+ class Rabin_SigTest(unittest.TestCase):
220
+ @pytest.mark.skip_py312plus
221
+ def testRabin_Sig(self):
222
+ M = b'This is a test message.'
223
+ rabin = Rabin_Sig()
224
+ (pk, sk) = rabin.keygen(1024)
225
+ S = rabin.sign(sk, M)
226
+ assert rabin.verify(pk, M, S)
227
+ if debug: print("Successful Signature!")
228
+
229
+ class RSA_EncTest(unittest.TestCase):
230
+ def testRSA_Enc(self):
231
+ rsa = RSA_Enc()
232
+
233
+ (pk, sk) = rsa.keygen(1024)
234
+
235
+ m = b'This is a test'
236
+ c = rsa.encrypt(pk, m)
237
+ if debug: print("ct =>", c)
238
+
239
+ orig_m = rsa.decrypt(pk, sk, c)
240
+ if debug: print("recovered m =>", orig_m)
241
+
242
+ assert m == orig_m
243
+ if debug: print("Successful Decryption!!!")
244
+
245
+ class RSA_SigTest(unittest.TestCase):
246
+ def testRSA_Sig(self):
247
+ M = b'This is a test message.'
248
+ rsa = RSA_Sig()
249
+ (pk, sk) = rsa.keygen(1024)
250
+ S = rsa.sign(sk, M)
251
+ assert rsa.verify(pk, M, S)
252
+ if debug: print("Successful Signature!")
253
+
254
+ if __name__ == "__main__":
255
+ unittest.main()
File without changes