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,407 @@
1
+ /* ---- HASH FUNCTIONS ---- */
2
+ #ifdef LTC_SHA512
3
+ struct sha512_state {
4
+ ulong64 length, state[8];
5
+ unsigned long curlen;
6
+ unsigned char buf[128];
7
+ };
8
+ #endif
9
+
10
+ #ifdef LTC_SHA256
11
+ struct sha256_state {
12
+ ulong64 length;
13
+ ulong32 state[8], curlen;
14
+ unsigned char buf[64];
15
+ };
16
+ #endif
17
+
18
+ #ifdef LTC_SHA1
19
+ struct sha1_state {
20
+ ulong64 length;
21
+ ulong32 state[5], curlen;
22
+ unsigned char buf[64];
23
+ };
24
+ #endif
25
+
26
+ #ifdef LTC_MD5
27
+ struct md5_state {
28
+ ulong64 length;
29
+ ulong32 state[4], curlen;
30
+ unsigned char buf[64];
31
+ };
32
+ #endif
33
+
34
+ #ifdef LTC_MD4
35
+ struct md4_state {
36
+ ulong64 length;
37
+ ulong32 state[4], curlen;
38
+ unsigned char buf[64];
39
+ };
40
+ #endif
41
+
42
+ #ifdef LTC_TIGER
43
+ struct tiger_state {
44
+ ulong64 state[3], length;
45
+ unsigned long curlen;
46
+ unsigned char buf[64];
47
+ };
48
+ #endif
49
+
50
+ #ifdef LTC_MD2
51
+ struct md2_state {
52
+ unsigned char chksum[16], X[48], buf[16];
53
+ unsigned long curlen;
54
+ };
55
+ #endif
56
+
57
+ #ifdef LTC_RIPEMD128
58
+ struct rmd128_state {
59
+ ulong64 length;
60
+ unsigned char buf[64];
61
+ ulong32 curlen, state[4];
62
+ };
63
+ #endif
64
+
65
+ #ifdef LTC_RIPEMD160
66
+ struct rmd160_state {
67
+ ulong64 length;
68
+ unsigned char buf[64];
69
+ ulong32 curlen, state[5];
70
+ };
71
+ #endif
72
+
73
+ #ifdef LTC_RIPEMD256
74
+ struct rmd256_state {
75
+ ulong64 length;
76
+ unsigned char buf[64];
77
+ ulong32 curlen, state[8];
78
+ };
79
+ #endif
80
+
81
+ #ifdef LTC_RIPEMD320
82
+ struct rmd320_state {
83
+ ulong64 length;
84
+ unsigned char buf[64];
85
+ ulong32 curlen, state[10];
86
+ };
87
+ #endif
88
+
89
+ #ifdef LTC_WHIRLPOOL
90
+ struct whirlpool_state {
91
+ ulong64 length, state[8];
92
+ unsigned char buf[64];
93
+ ulong32 curlen;
94
+ };
95
+ #endif
96
+
97
+ #ifdef LTC_CHC_HASH
98
+ struct chc_state {
99
+ ulong64 length;
100
+ unsigned char state[MAXBLOCKSIZE], buf[MAXBLOCKSIZE];
101
+ ulong32 curlen;
102
+ };
103
+ #endif
104
+
105
+ typedef union Hash_state {
106
+ char dummy[1];
107
+ #ifdef LTC_CHC_HASH
108
+ struct chc_state chc;
109
+ #endif
110
+ #ifdef LTC_WHIRLPOOL
111
+ struct whirlpool_state whirlpool;
112
+ #endif
113
+ #ifdef LTC_SHA512
114
+ struct sha512_state sha512;
115
+ #endif
116
+ #ifdef LTC_SHA256
117
+ struct sha256_state sha256;
118
+ #endif
119
+ #ifdef LTC_SHA1
120
+ struct sha1_state sha1;
121
+ #endif
122
+ #ifdef LTC_MD5
123
+ struct md5_state md5;
124
+ #endif
125
+ #ifdef LTC_MD4
126
+ struct md4_state md4;
127
+ #endif
128
+ #ifdef LTC_MD2
129
+ struct md2_state md2;
130
+ #endif
131
+ #ifdef LTC_TIGER
132
+ struct tiger_state tiger;
133
+ #endif
134
+ #ifdef LTC_RIPEMD128
135
+ struct rmd128_state rmd128;
136
+ #endif
137
+ #ifdef LTC_RIPEMD160
138
+ struct rmd160_state rmd160;
139
+ #endif
140
+ #ifdef LTC_RIPEMD256
141
+ struct rmd256_state rmd256;
142
+ #endif
143
+ #ifdef LTC_RIPEMD320
144
+ struct rmd320_state rmd320;
145
+ #endif
146
+ void *data;
147
+ } hash_state;
148
+
149
+ /** hash descriptor */
150
+ extern struct ltc_hash_descriptor {
151
+ /** name of hash */
152
+ char *name;
153
+ /** internal ID */
154
+ unsigned char ID;
155
+ /** Size of digest in octets */
156
+ unsigned long hashsize;
157
+ /** Input block size in octets */
158
+ unsigned long blocksize;
159
+ /** ASN.1 OID */
160
+ unsigned long OID[16];
161
+ /** Length of DER encoding */
162
+ unsigned long OIDlen;
163
+
164
+ /** Init a hash state
165
+ @param hash The hash to initialize
166
+ @return CRYPT_OK if successful
167
+ */
168
+ int (*init)(hash_state *hash);
169
+ /** Process a block of data
170
+ @param hash The hash state
171
+ @param in The data to hash
172
+ @param inlen The length of the data (octets)
173
+ @return CRYPT_OK if successful
174
+ */
175
+ int (*process)(hash_state *hash, const unsigned char *in, unsigned long inlen);
176
+ /** Produce the digest and store it
177
+ @param hash The hash state
178
+ @param out [out] The destination of the digest
179
+ @return CRYPT_OK if successful
180
+ */
181
+ int (*done)(hash_state *hash, unsigned char *out);
182
+ /** Self-test
183
+ @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled
184
+ */
185
+ int (*test)(void);
186
+
187
+ /* accelerated hmac callback: if you need to-do multiple packets just use the generic hmac_memory and provide a hash callback */
188
+ int (*hmac_block)(const unsigned char *key, unsigned long keylen,
189
+ const unsigned char *in, unsigned long inlen,
190
+ unsigned char *out, unsigned long *outlen);
191
+
192
+ } hash_descriptor[];
193
+
194
+ #ifdef LTC_CHC_HASH
195
+ int chc_register(int cipher);
196
+ int chc_init(hash_state * md);
197
+ int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen);
198
+ int chc_done(hash_state * md, unsigned char *hash);
199
+ int chc_test(void);
200
+ extern const struct ltc_hash_descriptor chc_desc;
201
+ #endif
202
+
203
+ #ifdef LTC_WHIRLPOOL
204
+ int whirlpool_init(hash_state * md);
205
+ int whirlpool_process(hash_state * md, const unsigned char *in, unsigned long inlen);
206
+ int whirlpool_done(hash_state * md, unsigned char *hash);
207
+ int whirlpool_test(void);
208
+ extern const struct ltc_hash_descriptor whirlpool_desc;
209
+ #endif
210
+
211
+ #ifdef LTC_SHA512
212
+ int sha512_init(hash_state * md);
213
+ int sha512_process(hash_state * md, const unsigned char *in, unsigned long inlen);
214
+ int sha512_done(hash_state * md, unsigned char *hash);
215
+ int sha512_test(void);
216
+ extern const struct ltc_hash_descriptor sha512_desc;
217
+ #endif
218
+
219
+ #ifdef LTC_SHA384
220
+ #ifndef LTC_SHA512
221
+ #error LTC_SHA512 is required for LTC_SHA384
222
+ #endif
223
+ int sha384_init(hash_state * md);
224
+ #define sha384_process sha512_process
225
+ int sha384_done(hash_state * md, unsigned char *hash);
226
+ int sha384_test(void);
227
+ extern const struct ltc_hash_descriptor sha384_desc;
228
+ #endif
229
+
230
+ #ifdef LTC_SHA512_256
231
+ #ifndef LTC_SHA512
232
+ #error LTC_SHA512 is required for LTC_SHA512_256
233
+ #endif
234
+ int sha512_256_init(hash_state * md);
235
+ #define sha512_256_process sha512_process
236
+ int sha512_256_done(hash_state * md, unsigned char *hash);
237
+ int sha512_256_test(void);
238
+ extern const struct ltc_hash_descriptor sha512_256_desc;
239
+ #endif
240
+
241
+ #ifdef LTC_SHA512_224
242
+ #ifndef LTC_SHA512
243
+ #error LTC_SHA512 is required for LTC_SHA512_224
244
+ #endif
245
+ int sha512_224_init(hash_state * md);
246
+ #define sha512_224_process sha512_process
247
+ int sha512_224_done(hash_state * md, unsigned char *hash);
248
+ int sha512_224_test(void);
249
+ extern const struct ltc_hash_descriptor sha512_224_desc;
250
+ #endif
251
+
252
+ #ifdef LTC_SHA256
253
+ int sha256_init(hash_state * md);
254
+ int sha256_process(hash_state * md, const unsigned char *in, unsigned long inlen);
255
+ int sha256_done(hash_state * md, unsigned char *hash);
256
+ int sha256_test(void);
257
+ extern const struct ltc_hash_descriptor sha256_desc;
258
+
259
+ #ifdef LTC_SHA224
260
+ #ifndef LTC_SHA256
261
+ #error LTC_SHA256 is required for LTC_SHA224
262
+ #endif
263
+ int sha224_init(hash_state * md);
264
+ #define sha224_process sha256_process
265
+ int sha224_done(hash_state * md, unsigned char *hash);
266
+ int sha224_test(void);
267
+ extern const struct ltc_hash_descriptor sha224_desc;
268
+ #endif
269
+ #endif
270
+
271
+ #ifdef LTC_SHA1
272
+ int sha1_init(hash_state * md);
273
+ int sha1_process(hash_state * md, const unsigned char *in, unsigned long inlen);
274
+ int sha1_done(hash_state * md, unsigned char *hash);
275
+ int sha1_test(void);
276
+ extern const struct ltc_hash_descriptor sha1_desc;
277
+ #endif
278
+
279
+ #ifdef LTC_MD5
280
+ int md5_init(hash_state * md);
281
+ int md5_process(hash_state * md, const unsigned char *in, unsigned long inlen);
282
+ int md5_done(hash_state * md, unsigned char *hash);
283
+ int md5_test(void);
284
+ extern const struct ltc_hash_descriptor md5_desc;
285
+ #endif
286
+
287
+ #ifdef LTC_MD4
288
+ int md4_init(hash_state * md);
289
+ int md4_process(hash_state * md, const unsigned char *in, unsigned long inlen);
290
+ int md4_done(hash_state * md, unsigned char *hash);
291
+ int md4_test(void);
292
+ extern const struct ltc_hash_descriptor md4_desc;
293
+ #endif
294
+
295
+ #ifdef LTC_MD2
296
+ int md2_init(hash_state * md);
297
+ int md2_process(hash_state * md, const unsigned char *in, unsigned long inlen);
298
+ int md2_done(hash_state * md, unsigned char *hash);
299
+ int md2_test(void);
300
+ extern const struct ltc_hash_descriptor md2_desc;
301
+ #endif
302
+
303
+ #ifdef LTC_TIGER
304
+ int tiger_init(hash_state * md);
305
+ int tiger_process(hash_state * md, const unsigned char *in, unsigned long inlen);
306
+ int tiger_done(hash_state * md, unsigned char *hash);
307
+ int tiger_test(void);
308
+ extern const struct ltc_hash_descriptor tiger_desc;
309
+ #endif
310
+
311
+ #ifdef LTC_RIPEMD128
312
+ int rmd128_init(hash_state * md);
313
+ int rmd128_process(hash_state * md, const unsigned char *in, unsigned long inlen);
314
+ int rmd128_done(hash_state * md, unsigned char *hash);
315
+ int rmd128_test(void);
316
+ extern const struct ltc_hash_descriptor rmd128_desc;
317
+ #endif
318
+
319
+ #ifdef LTC_RIPEMD160
320
+ int rmd160_init(hash_state * md);
321
+ int rmd160_process(hash_state * md, const unsigned char *in, unsigned long inlen);
322
+ int rmd160_done(hash_state * md, unsigned char *hash);
323
+ int rmd160_test(void);
324
+ extern const struct ltc_hash_descriptor rmd160_desc;
325
+ #endif
326
+
327
+ #ifdef LTC_RIPEMD256
328
+ int rmd256_init(hash_state * md);
329
+ int rmd256_process(hash_state * md, const unsigned char *in, unsigned long inlen);
330
+ int rmd256_done(hash_state * md, unsigned char *hash);
331
+ int rmd256_test(void);
332
+ extern const struct ltc_hash_descriptor rmd256_desc;
333
+ #endif
334
+
335
+ #ifdef LTC_RIPEMD320
336
+ int rmd320_init(hash_state * md);
337
+ int rmd320_process(hash_state * md, const unsigned char *in, unsigned long inlen);
338
+ int rmd320_done(hash_state * md, unsigned char *hash);
339
+ int rmd320_test(void);
340
+ extern const struct ltc_hash_descriptor rmd320_desc;
341
+ #endif
342
+
343
+
344
+ int find_hash(const char *name);
345
+ int find_hash_id(unsigned char ID);
346
+ int find_hash_oid(const unsigned long *ID, unsigned long IDlen);
347
+ int find_hash_any(const char *name, int digestlen);
348
+ int register_hash(const struct ltc_hash_descriptor *hash);
349
+ int unregister_hash(const struct ltc_hash_descriptor *hash);
350
+ int hash_is_valid(int idx);
351
+
352
+ LTC_MUTEX_PROTO(ltc_hash_mutex)
353
+
354
+ int hash_memory(int hash,
355
+ const unsigned char *in, unsigned long inlen,
356
+ unsigned char *out, unsigned long *outlen);
357
+ int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen,
358
+ const unsigned char *in, unsigned long inlen, ...);
359
+
360
+ #ifndef LTC_NO_FILE
361
+ int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen);
362
+ int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen);
363
+ #endif
364
+
365
+ /* a simple macro for making hash "process" functions */
366
+ #define HASH_PROCESS(func_name, compress_name, state_var, block_size) \
367
+ int func_name (hash_state * md, const unsigned char *in, unsigned long inlen) \
368
+ { \
369
+ unsigned long n; \
370
+ int err; \
371
+ LTC_ARGCHK(md != NULL); \
372
+ LTC_ARGCHK(in != NULL); \
373
+ if (md-> state_var .curlen > sizeof(md-> state_var .buf)) { \
374
+ return CRYPT_INVALID_ARG; \
375
+ } \
376
+ if ((md-> state_var .length + inlen) < md-> state_var .length) { \
377
+ return CRYPT_HASH_OVERFLOW; \
378
+ } \
379
+ while (inlen > 0) { \
380
+ if (md-> state_var .curlen == 0 && inlen >= block_size) { \
381
+ if ((err = compress_name (md, (unsigned char *)in)) != CRYPT_OK) { \
382
+ return err; \
383
+ } \
384
+ md-> state_var .length += block_size * 8; \
385
+ in += block_size; \
386
+ inlen -= block_size; \
387
+ } else { \
388
+ n = MIN(inlen, (block_size - md-> state_var .curlen)); \
389
+ XMEMCPY(md-> state_var .buf + md-> state_var.curlen, in, (size_t)n); \
390
+ md-> state_var .curlen += n; \
391
+ in += n; \
392
+ inlen -= n; \
393
+ if (md-> state_var .curlen == block_size) { \
394
+ if ((err = compress_name (md, md-> state_var .buf)) != CRYPT_OK) { \
395
+ return err; \
396
+ } \
397
+ md-> state_var .length += 8*block_size; \
398
+ md-> state_var .curlen = 0; \
399
+ } \
400
+ } \
401
+ } \
402
+ return CRYPT_OK; \
403
+ }
404
+
405
+ /* $Source$ */
406
+ /* $Revision$ */
407
+ /* $Date$ */