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,90 @@
1
+ /* PKCS Header Info */
2
+
3
+ /* ===> PKCS #1 -- RSA Cryptography <=== */
4
+ #ifdef LTC_PKCS_1
5
+
6
+ enum ltc_pkcs_1_v1_5_blocks
7
+ {
8
+ LTC_PKCS_1_EMSA = 1, /* Block type 1 (PKCS #1 v1.5 signature padding) */
9
+ LTC_PKCS_1_EME = 2 /* Block type 2 (PKCS #1 v1.5 encryption padding) */
10
+ };
11
+
12
+ enum ltc_pkcs_1_paddings
13
+ {
14
+ LTC_PKCS_1_V1_5 = 1, /* PKCS #1 v1.5 padding (\sa ltc_pkcs_1_v1_5_blocks) */
15
+ LTC_PKCS_1_OAEP = 2, /* PKCS #1 v2.0 encryption padding */
16
+ LTC_PKCS_1_PSS = 3 /* PKCS #1 v2.1 signature padding */
17
+ };
18
+
19
+ int pkcs_1_mgf1( int hash_idx,
20
+ const unsigned char *seed, unsigned long seedlen,
21
+ unsigned char *mask, unsigned long masklen);
22
+
23
+ int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out);
24
+ int pkcs_1_os2ip(void *n, unsigned char *in, unsigned long inlen);
25
+
26
+ /* *** v1.5 padding */
27
+ int pkcs_1_v1_5_encode(const unsigned char *msg,
28
+ unsigned long msglen,
29
+ int block_type,
30
+ unsigned long modulus_bitlen,
31
+ prng_state *prng,
32
+ int prng_idx,
33
+ unsigned char *out,
34
+ unsigned long *outlen);
35
+
36
+ int pkcs_1_v1_5_decode(const unsigned char *msg,
37
+ unsigned long msglen,
38
+ int block_type,
39
+ unsigned long modulus_bitlen,
40
+ unsigned char *out,
41
+ unsigned long *outlen,
42
+ int *is_valid);
43
+
44
+ /* *** v2.1 padding */
45
+ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen,
46
+ const unsigned char *lparam, unsigned long lparamlen,
47
+ unsigned long modulus_bitlen, prng_state *prng,
48
+ int prng_idx, int hash_idx,
49
+ unsigned char *out, unsigned long *outlen);
50
+
51
+ int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen,
52
+ const unsigned char *lparam, unsigned long lparamlen,
53
+ unsigned long modulus_bitlen, int hash_idx,
54
+ unsigned char *out, unsigned long *outlen,
55
+ int *res);
56
+
57
+ int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen,
58
+ unsigned long saltlen, prng_state *prng,
59
+ int prng_idx, int hash_idx,
60
+ unsigned long modulus_bitlen,
61
+ unsigned char *out, unsigned long *outlen);
62
+
63
+ int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen,
64
+ const unsigned char *sig, unsigned long siglen,
65
+ unsigned long saltlen, int hash_idx,
66
+ unsigned long modulus_bitlen, int *res);
67
+
68
+ #endif /* LTC_PKCS_1 */
69
+
70
+ /* ===> PKCS #5 -- Password Based Cryptography <=== */
71
+ #ifdef LTC_PKCS_5
72
+
73
+ /* Algorithm #1 (old) */
74
+ int pkcs_5_alg1(const unsigned char *password, unsigned long password_len,
75
+ const unsigned char *salt,
76
+ int iteration_count, int hash_idx,
77
+ unsigned char *out, unsigned long *outlen);
78
+
79
+ /* Algorithm #2 (new) */
80
+ int pkcs_5_alg2(const unsigned char *password, unsigned long password_len,
81
+ const unsigned char *salt, unsigned long salt_len,
82
+ int iteration_count, int hash_idx,
83
+ unsigned char *out, unsigned long *outlen);
84
+
85
+ int pkcs_5_test (void);
86
+ #endif /* LTC_PKCS_5 */
87
+
88
+ /* $Source$ */
89
+ /* $Revision$ */
90
+ /* $Date$ */
@@ -0,0 +1,199 @@
1
+ /* ---- PRNG Stuff ---- */
2
+ #ifdef LTC_YARROW
3
+ struct yarrow_prng {
4
+ int cipher, hash;
5
+ unsigned char pool[MAXBLOCKSIZE];
6
+ symmetric_CTR ctr;
7
+ LTC_MUTEX_TYPE(prng_lock)
8
+ };
9
+ #endif
10
+
11
+ #ifdef LTC_RC4
12
+ struct rc4_prng {
13
+ int x, y;
14
+ unsigned char buf[256];
15
+ };
16
+ #endif
17
+
18
+ #ifdef LTC_FORTUNA
19
+ struct fortuna_prng {
20
+ hash_state pool[LTC_FORTUNA_POOLS]; /* the pools */
21
+
22
+ symmetric_key skey;
23
+
24
+ unsigned char K[32], /* the current key */
25
+ IV[16]; /* IV for CTR mode */
26
+
27
+ unsigned long pool_idx, /* current pool we will add to */
28
+ pool0_len, /* length of 0'th pool */
29
+ wd;
30
+
31
+ ulong64 reset_cnt; /* number of times we have reset */
32
+ LTC_MUTEX_TYPE(prng_lock)
33
+ };
34
+ #endif
35
+
36
+ #ifdef LTC_SOBER128
37
+ struct sober128_prng {
38
+ ulong32 R[17], /* Working storage for the shift register */
39
+ initR[17], /* saved register contents */
40
+ konst, /* key dependent constant */
41
+ sbuf; /* partial word encryption buffer */
42
+
43
+ int nbuf, /* number of part-word stream bits buffered */
44
+ flag, /* first add_entropy call or not? */
45
+ set; /* did we call add_entropy to set key? */
46
+
47
+ };
48
+ #endif
49
+
50
+ typedef union Prng_state {
51
+ char dummy[1];
52
+ #ifdef LTC_YARROW
53
+ struct yarrow_prng yarrow;
54
+ #endif
55
+ #ifdef LTC_RC4
56
+ struct rc4_prng rc4;
57
+ #endif
58
+ #ifdef LTC_FORTUNA
59
+ struct fortuna_prng fortuna;
60
+ #endif
61
+ #ifdef LTC_SOBER128
62
+ struct sober128_prng sober128;
63
+ #endif
64
+ } prng_state;
65
+
66
+ /** PRNG descriptor */
67
+ extern struct ltc_prng_descriptor {
68
+ /** Name of the PRNG */
69
+ char *name;
70
+ /** size in bytes of exported state */
71
+ int export_size;
72
+ /** Start a PRNG state
73
+ @param prng [out] The state to initialize
74
+ @return CRYPT_OK if successful
75
+ */
76
+ int (*start)(prng_state *prng);
77
+ /** Add entropy to the PRNG
78
+ @param in The entropy
79
+ @param inlen Length of the entropy (octets)\
80
+ @param prng The PRNG state
81
+ @return CRYPT_OK if successful
82
+ */
83
+ int (*add_entropy)(const unsigned char *in, unsigned long inlen, prng_state *prng);
84
+ /** Ready a PRNG state to read from
85
+ @param prng The PRNG state to ready
86
+ @return CRYPT_OK if successful
87
+ */
88
+ int (*ready)(prng_state *prng);
89
+ /** Read from the PRNG
90
+ @param out [out] Where to store the data
91
+ @param outlen Length of data desired (octets)
92
+ @param prng The PRNG state to read from
93
+ @return Number of octets read
94
+ */
95
+ unsigned long (*read)(unsigned char *out, unsigned long outlen, prng_state *prng);
96
+ /** Terminate a PRNG state
97
+ @param prng The PRNG state to terminate
98
+ @return CRYPT_OK if successful
99
+ */
100
+ int (*done)(prng_state *prng);
101
+ /** Export a PRNG state
102
+ @param out [out] The destination for the state
103
+ @param outlen [in/out] The max size and resulting size of the PRNG state
104
+ @param prng The PRNG to export
105
+ @return CRYPT_OK if successful
106
+ */
107
+ int (*pexport)(unsigned char *out, unsigned long *outlen, prng_state *prng);
108
+ /** Import a PRNG state
109
+ @param in The data to import
110
+ @param inlen The length of the data to import (octets)
111
+ @param prng The PRNG to initialize/import
112
+ @return CRYPT_OK if successful
113
+ */
114
+ int (*pimport)(const unsigned char *in, unsigned long inlen, prng_state *prng);
115
+ /** Self-test the PRNG
116
+ @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
117
+ */
118
+ int (*test)(void);
119
+ } prng_descriptor[];
120
+
121
+ #ifdef LTC_YARROW
122
+ int yarrow_start(prng_state *prng);
123
+ int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
124
+ int yarrow_ready(prng_state *prng);
125
+ unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *prng);
126
+ int yarrow_done(prng_state *prng);
127
+ int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
128
+ int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
129
+ int yarrow_test(void);
130
+ extern const struct ltc_prng_descriptor yarrow_desc;
131
+ #endif
132
+
133
+ #ifdef LTC_FORTUNA
134
+ int fortuna_start(prng_state *prng);
135
+ int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
136
+ int fortuna_ready(prng_state *prng);
137
+ unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng);
138
+ int fortuna_done(prng_state *prng);
139
+ int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
140
+ int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
141
+ int fortuna_test(void);
142
+ extern const struct ltc_prng_descriptor fortuna_desc;
143
+ #endif
144
+
145
+ #ifdef LTC_RC4
146
+ int rc4_start(prng_state *prng);
147
+ int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
148
+ int rc4_ready(prng_state *prng);
149
+ unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng);
150
+ int rc4_done(prng_state *prng);
151
+ int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
152
+ int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
153
+ int rc4_test(void);
154
+ extern const struct ltc_prng_descriptor rc4_desc;
155
+ #endif
156
+
157
+ #ifdef LTC_SPRNG
158
+ int sprng_start(prng_state *prng);
159
+ int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
160
+ int sprng_ready(prng_state *prng);
161
+ unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng);
162
+ int sprng_done(prng_state *prng);
163
+ int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
164
+ int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
165
+ int sprng_test(void);
166
+ extern const struct ltc_prng_descriptor sprng_desc;
167
+ #endif
168
+
169
+ #ifdef LTC_SOBER128
170
+ int sober128_start(prng_state *prng);
171
+ int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
172
+ int sober128_ready(prng_state *prng);
173
+ unsigned long sober128_read(unsigned char *out, unsigned long outlen, prng_state *prng);
174
+ int sober128_done(prng_state *prng);
175
+ int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
176
+ int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
177
+ int sober128_test(void);
178
+ extern const struct ltc_prng_descriptor sober128_desc;
179
+ #endif
180
+
181
+ int find_prng(const char *name);
182
+ int register_prng(const struct ltc_prng_descriptor *prng);
183
+ int unregister_prng(const struct ltc_prng_descriptor *prng);
184
+ int prng_is_valid(int idx);
185
+ LTC_MUTEX_PROTO(ltc_prng_mutex)
186
+
187
+ /* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this
188
+ * might not work on all platforms as planned
189
+ */
190
+ unsigned long rng_get_bytes(unsigned char *out,
191
+ unsigned long outlen,
192
+ void (*callback)(void));
193
+
194
+ int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void));
195
+
196
+
197
+ /* $Source$ */
198
+ /* $Revision$ */
199
+ /* $Date$ */
@@ -0,0 +1,271 @@
1
+ /* -*- C -*- */
2
+
3
+ /*
4
+ * stream_template.c : Generic framework for stream ciphers
5
+ *
6
+ * Written by Andrew Kuchling and others
7
+ *
8
+ * ===================================================================
9
+ * The contents of this file are dedicated to the public domain. To
10
+ * the extent that dedication to the public domain is not available,
11
+ * everyone is granted a worldwide, perpetual, royalty-free,
12
+ * non-exclusive license to exercise all rights associated with the
13
+ * contents of this file for any purpose whatsoever.
14
+ * No rights are reserved.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ * ===================================================================
25
+ */
26
+
27
+
28
+ #ifdef HAVE_CONFIG_H
29
+ #include "config.h"
30
+ #endif
31
+
32
+ #ifdef _HAVE_STDC_HEADERS
33
+ #include <string.h>
34
+ #endif
35
+
36
+ #ifndef PY_SSIZE_T_CLEAN
37
+ #define PY_SSIZE_T_CLEAN
38
+ #endif
39
+
40
+ #include "Python.h"
41
+ #include "modsupport.h"
42
+
43
+ #define _STR(x) #x
44
+ #define _XSTR(x) _STR(x)
45
+ #define _PASTE(x,y) x##y
46
+ #define _PASTE2(x,y) _PASTE(x,y)
47
+ #define _MODULE_NAME _PASTE2(init,MODULE_NAME)
48
+ #define _MODULE_STRING _XSTR(MODULE_NAME)
49
+
50
+ /*
51
+ *
52
+ * Python interface
53
+ *
54
+ */
55
+
56
+ typedef struct
57
+ {
58
+ PyObject_HEAD
59
+ stream_state st;
60
+ } ALGobject;
61
+
62
+ staticforward PyTypeObject ALGtype;
63
+
64
+ #define is_ALGobject(v) ((v)->ob_type == &ALGtype)
65
+
66
+ static ALGobject *
67
+ newALGobject(void)
68
+ {
69
+ ALGobject * new;
70
+ new = PyObject_New(ALGobject, &ALGtype);
71
+ return new;
72
+ }
73
+
74
+ static void
75
+ ALGdealloc(PyObject *ptr)
76
+ {
77
+ ALGobject *self = (ALGobject *)ptr;
78
+
79
+ /* Overwrite the contents of the object */
80
+ memset((char*)&(self->st), 0, sizeof(stream_state));
81
+ PyObject_Del(ptr);
82
+ }
83
+
84
+ static char ALGnew__doc__[] =
85
+ "Return a new " _MODULE_STRING " encryption object.";
86
+
87
+ static char *kwlist[] = {"key", NULL};
88
+
89
+ static ALGobject *
90
+ ALGnew(PyObject *self, PyObject *args, PyObject *kwdict)
91
+ {
92
+ unsigned char *key;
93
+ ALGobject * new;
94
+ Py_ssize_t keylen;
95
+
96
+ new = newALGobject();
97
+ if (!PyArg_ParseTupleAndKeywords(args, kwdict, "s#", kwlist,
98
+ &key, &keylen))
99
+ {
100
+ Py_DECREF(new);
101
+ return NULL;
102
+ }
103
+
104
+ if (KEY_SIZE!=0 && keylen != KEY_SIZE)
105
+ {
106
+ PyErr_SetString(PyExc_ValueError,
107
+ _MODULE_STRING " key must be "
108
+ "KEY_SIZE bytes long");
109
+ return NULL;
110
+ }
111
+ if (KEY_SIZE== 0 && keylen == 0)
112
+ {
113
+ PyErr_SetString(PyExc_ValueError,
114
+ _MODULE_STRING " key cannot be "
115
+ "the null string (0 bytes long)");
116
+ return NULL;
117
+ }
118
+ stream_init(&(new->st), key, (int) keylen);
119
+ if (PyErr_Occurred())
120
+ {
121
+ Py_DECREF(new);
122
+ return NULL;
123
+ }
124
+ return new;
125
+ }
126
+
127
+ static char ALG_Encrypt__doc__[] =
128
+ "Decrypt the provided string of binary data.";
129
+
130
+ static PyObject *
131
+ ALG_Encrypt(ALGobject *self, PyObject *args)
132
+ {
133
+ unsigned char *buffer, *str;
134
+ Py_ssize_t len;
135
+ PyObject *result;
136
+
137
+ if (!PyArg_Parse(args, "s#", &str, &len))
138
+ return NULL;
139
+ if (len == 0) /* Handle empty string */
140
+ {
141
+ return PyString_FromStringAndSize(NULL, 0);
142
+ }
143
+ buffer = malloc(len);
144
+ if (buffer == NULL)
145
+ {
146
+ PyErr_SetString(PyExc_MemoryError, "No memory available in "
147
+ _MODULE_STRING " encrypt");
148
+ return NULL;
149
+ }
150
+ Py_BEGIN_ALLOW_THREADS;
151
+ memcpy(buffer, str, len);
152
+ stream_encrypt(&(self->st), buffer, (int) len);
153
+ Py_END_ALLOW_THREADS;
154
+ result = PyString_FromStringAndSize((char *)buffer, len);
155
+ free(buffer);
156
+ return (result);
157
+ }
158
+
159
+ static char ALG_Decrypt__doc__[] =
160
+ "decrypt(string): Decrypt the provided string of binary data.";
161
+
162
+ static PyObject *
163
+ ALG_Decrypt(ALGobject *self, PyObject *args)
164
+ {
165
+ unsigned char *buffer, *str;
166
+ Py_ssize_t len;
167
+ PyObject *result;
168
+
169
+ if (!PyArg_Parse(args, "s#", &str, &len))
170
+ return NULL;
171
+ if (len == 0) /* Handle empty string */
172
+ {
173
+ return PyString_FromStringAndSize(NULL, 0);
174
+ }
175
+ buffer = malloc(len);
176
+ if (buffer == NULL)
177
+ {
178
+ PyErr_SetString(PyExc_MemoryError, "No memory available in "
179
+ _MODULE_STRING " decrypt");
180
+ return NULL;
181
+ }
182
+ Py_BEGIN_ALLOW_THREADS;
183
+ memcpy(buffer, str, len);
184
+ stream_decrypt(&(self->st), buffer, (int) len);
185
+ Py_END_ALLOW_THREADS;
186
+ result = PyString_FromStringAndSize((char *)buffer, len);
187
+ free(buffer);
188
+ return (result);
189
+ }
190
+
191
+ /* ALGobject methods */
192
+
193
+ static PyMethodDef ALGmethods[] =
194
+ {
195
+ {"encrypt", (PyCFunction) ALG_Encrypt, 0, ALG_Encrypt__doc__},
196
+ {"decrypt", (PyCFunction) ALG_Decrypt, 0, ALG_Decrypt__doc__},
197
+ {NULL, NULL} /* sentinel */
198
+ };
199
+
200
+ static PyObject *
201
+ ALGgetattr(PyObject *self, char *name)
202
+ {
203
+ if (strcmp(name, "block_size") == 0)
204
+ {
205
+ return PyInt_FromLong(BLOCK_SIZE);
206
+ }
207
+ if (strcmp(name, "key_size") == 0)
208
+ {
209
+ return PyInt_FromLong(KEY_SIZE);
210
+ }
211
+ return Py_FindMethod(ALGmethods, self, name);
212
+ }
213
+
214
+
215
+ /* List of functions defined in the module */
216
+
217
+ static struct PyMethodDef modulemethods[] =
218
+ {
219
+ {"new", (PyCFunction) ALGnew,
220
+ METH_VARARGS|METH_KEYWORDS, ALGnew__doc__},
221
+ {NULL, NULL} /* sentinel */
222
+ };
223
+
224
+ static PyTypeObject ALGtype =
225
+ {
226
+ PyObject_HEAD_INIT(NULL)
227
+ 0, /*ob_size*/
228
+ _MODULE_STRING, /*tp_name*/
229
+ sizeof(ALGobject), /*tp_size*/
230
+ 0, /*tp_itemsize*/
231
+ /* methods */
232
+ ALGdealloc, /*tp_dealloc*/
233
+ 0, /*tp_print*/
234
+ ALGgetattr, /*tp_getattr*/
235
+ 0, /*tp_setattr*/
236
+ 0, /*tp_compare*/
237
+ 0, /*tp_repr*/
238
+ 0, /*tp_as_number*/
239
+ };
240
+
241
+ /* Initialization function for the module */
242
+
243
+ #if PYTHON_API_VERSION < 1011
244
+ #define PyModule_AddIntConstant(m,n,v) {PyObject *o=PyInt_FromLong(v); \
245
+ if (o!=NULL) \
246
+ {PyDict_SetItemString(PyModule_GetDict(m),n,o); Py_DECREF(o);}}
247
+ #endif
248
+
249
+ void
250
+ _MODULE_NAME (void)
251
+ {
252
+ PyObject *m, *d, *x;
253
+
254
+ ALGtype.ob_type = &PyType_Type;
255
+ /* Create the module and add the functions */
256
+ m = Py_InitModule("Crypto.Cipher." _MODULE_STRING, modulemethods);
257
+
258
+ /* Add some symbolic constants to the module */
259
+ d = PyModule_GetDict(m);
260
+ x = PyString_FromString(_MODULE_STRING ".error");
261
+ PyDict_SetItemString(d, "error", x);
262
+
263
+ PyModule_AddIntConstant(m, "block_size", BLOCK_SIZE);
264
+ PyModule_AddIntConstant(m, "key_size", KEY_SIZE);
265
+
266
+ /* Check for errors */
267
+ if (PyErr_Occurred())
268
+ Py_FatalError("can't initialize module " _MODULE_STRING);
269
+ }
270
+
271
+ /* vim:set ts=8 sw=8 sts=0 noexpandtab: */