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,534 @@
1
+ /** math functions **/
2
+
3
+ #define LTC_MP_LT -1
4
+ #define LTC_MP_EQ 0
5
+ #define LTC_MP_GT 1
6
+
7
+ #define LTC_MP_NO 0
8
+ #define LTC_MP_YES 1
9
+
10
+ #ifndef LTC_MECC
11
+ typedef void ecc_point;
12
+ #endif
13
+
14
+ #ifndef LTC_MRSA
15
+ typedef void rsa_key;
16
+ #endif
17
+
18
+ /** math descriptor */
19
+ typedef struct {
20
+ /** Name of the math provider */
21
+ char *name;
22
+
23
+ /** Bits per digit, amount of bits must fit in an unsigned long */
24
+ int bits_per_digit;
25
+
26
+ /* ---- init/deinit functions ---- */
27
+
28
+ /** initialize a bignum
29
+ @param a The number to initialize
30
+ @return CRYPT_OK on success
31
+ */
32
+ int (*init)(void **a);
33
+
34
+ /** init copy
35
+ @param dst The number to initialize and write to
36
+ @param src The number to copy from
37
+ @return CRYPT_OK on success
38
+ */
39
+ int (*init_copy)(void **dst, void *src);
40
+
41
+ /** deinit
42
+ @param a The number to free
43
+ @return CRYPT_OK on success
44
+ */
45
+ void (*deinit)(void *a);
46
+
47
+ /* ---- data movement ---- */
48
+
49
+ /** negate
50
+ @param src The number to negate
51
+ @param dst The destination
52
+ @return CRYPT_OK on success
53
+ */
54
+ int (*neg)(void *src, void *dst);
55
+
56
+ /** copy
57
+ @param src The number to copy from
58
+ @param dst The number to write to
59
+ @return CRYPT_OK on success
60
+ */
61
+ int (*copy)(void *src, void *dst);
62
+
63
+ /* ---- trivial low level functions ---- */
64
+
65
+ /** set small constant
66
+ @param a Number to write to
67
+ @param n Source upto bits_per_digit (actually meant for very small constants)
68
+ @return CRYPT_OK on succcess
69
+ */
70
+ int (*set_int)(void *a, unsigned long n);
71
+
72
+ /** get small constant
73
+ @param a Number to read, only fetches upto bits_per_digit from the number
74
+ @return The lower bits_per_digit of the integer (unsigned)
75
+ */
76
+ unsigned long (*get_int)(void *a);
77
+
78
+ /** get digit n
79
+ @param a The number to read from
80
+ @param n The number of the digit to fetch
81
+ @return The bits_per_digit sized n'th digit of a
82
+ */
83
+ ltc_mp_digit (*get_digit)(void *a, int n);
84
+
85
+ /** Get the number of digits that represent the number
86
+ @param a The number to count
87
+ @return The number of digits used to represent the number
88
+ */
89
+ int (*get_digit_count)(void *a);
90
+
91
+ /** compare two integers
92
+ @param a The left side integer
93
+ @param b The right side integer
94
+ @return LTC_MP_LT if a < b, LTC_MP_GT if a > b and LTC_MP_EQ otherwise. (signed comparison)
95
+ */
96
+ int (*compare)(void *a, void *b);
97
+
98
+ /** compare against int
99
+ @param a The left side integer
100
+ @param b The right side integer (upto bits_per_digit)
101
+ @return LTC_MP_LT if a < b, LTC_MP_GT if a > b and LTC_MP_EQ otherwise. (signed comparison)
102
+ */
103
+ int (*compare_d)(void *a, unsigned long n);
104
+
105
+ /** Count the number of bits used to represent the integer
106
+ @param a The integer to count
107
+ @return The number of bits required to represent the integer
108
+ */
109
+ int (*count_bits)(void * a);
110
+
111
+ /** Count the number of LSB bits which are zero
112
+ @param a The integer to count
113
+ @return The number of contiguous zero LSB bits
114
+ */
115
+ int (*count_lsb_bits)(void *a);
116
+
117
+ /** Compute a power of two
118
+ @param a The integer to store the power in
119
+ @param n The power of two you want to store (a = 2^n)
120
+ @return CRYPT_OK on success
121
+ */
122
+ int (*twoexpt)(void *a , int n);
123
+
124
+ /* ---- radix conversions ---- */
125
+
126
+ /** read ascii string
127
+ @param a The integer to store into
128
+ @param str The string to read
129
+ @param radix The radix the integer has been represented in (2-64)
130
+ @return CRYPT_OK on success
131
+ */
132
+ int (*read_radix)(void *a, const char *str, int radix);
133
+
134
+ /** write number to string
135
+ @param a The integer to store
136
+ @param str The destination for the string
137
+ @param radix The radix the integer is to be represented in (2-64)
138
+ @return CRYPT_OK on success
139
+ */
140
+ int (*write_radix)(void *a, char *str, int radix);
141
+
142
+ /** get size as unsigned char string
143
+ @param a The integer to get the size (when stored in array of octets)
144
+ @return The length of the integer
145
+ */
146
+ unsigned long (*unsigned_size)(void *a);
147
+
148
+ /** store an integer as an array of octets
149
+ @param src The integer to store
150
+ @param dst The buffer to store the integer in
151
+ @return CRYPT_OK on success
152
+ */
153
+ int (*unsigned_write)(void *src, unsigned char *dst);
154
+
155
+ /** read an array of octets and store as integer
156
+ @param dst The integer to load
157
+ @param src The array of octets
158
+ @param len The number of octets
159
+ @return CRYPT_OK on success
160
+ */
161
+ int (*unsigned_read)(void *dst, unsigned char *src, unsigned long len);
162
+
163
+ /* ---- basic math ---- */
164
+
165
+ /** add two integers
166
+ @param a The first source integer
167
+ @param b The second source integer
168
+ @param c The destination of "a + b"
169
+ @return CRYPT_OK on success
170
+ */
171
+ int (*add)(void *a, void *b, void *c);
172
+
173
+
174
+ /** add two integers
175
+ @param a The first source integer
176
+ @param b The second source integer (single digit of upto bits_per_digit in length)
177
+ @param c The destination of "a + b"
178
+ @return CRYPT_OK on success
179
+ */
180
+ int (*addi)(void *a, unsigned long b, void *c);
181
+
182
+ /** subtract two integers
183
+ @param a The first source integer
184
+ @param b The second source integer
185
+ @param c The destination of "a - b"
186
+ @return CRYPT_OK on success
187
+ */
188
+ int (*sub)(void *a, void *b, void *c);
189
+
190
+ /** subtract two integers
191
+ @param a The first source integer
192
+ @param b The second source integer (single digit of upto bits_per_digit in length)
193
+ @param c The destination of "a - b"
194
+ @return CRYPT_OK on success
195
+ */
196
+ int (*subi)(void *a, unsigned long b, void *c);
197
+
198
+ /** multiply two integers
199
+ @param a The first source integer
200
+ @param b The second source integer (single digit of upto bits_per_digit in length)
201
+ @param c The destination of "a * b"
202
+ @return CRYPT_OK on success
203
+ */
204
+ int (*mul)(void *a, void *b, void *c);
205
+
206
+ /** multiply two integers
207
+ @param a The first source integer
208
+ @param b The second source integer (single digit of upto bits_per_digit in length)
209
+ @param c The destination of "a * b"
210
+ @return CRYPT_OK on success
211
+ */
212
+ int (*muli)(void *a, unsigned long b, void *c);
213
+
214
+ /** Square an integer
215
+ @param a The integer to square
216
+ @param b The destination
217
+ @return CRYPT_OK on success
218
+ */
219
+ int (*sqr)(void *a, void *b);
220
+
221
+ /** Divide an integer
222
+ @param a The dividend
223
+ @param b The divisor
224
+ @param c The quotient (can be NULL to signify don't care)
225
+ @param d The remainder (can be NULL to signify don't care)
226
+ @return CRYPT_OK on success
227
+ */
228
+ int (*mpdiv)(void *a, void *b, void *c, void *d);
229
+
230
+ /** divide by two
231
+ @param a The integer to divide (shift right)
232
+ @param b The destination
233
+ @return CRYPT_OK on success
234
+ */
235
+ int (*div_2)(void *a, void *b);
236
+
237
+ /** Get remainder (small value)
238
+ @param a The integer to reduce
239
+ @param b The modulus (upto bits_per_digit in length)
240
+ @param c The destination for the residue
241
+ @return CRYPT_OK on success
242
+ */
243
+ int (*modi)(void *a, unsigned long b, unsigned long *c);
244
+
245
+ /** gcd
246
+ @param a The first integer
247
+ @param b The second integer
248
+ @param c The destination for (a, b)
249
+ @return CRYPT_OK on success
250
+ */
251
+ int (*gcd)(void *a, void *b, void *c);
252
+
253
+ /** lcm
254
+ @param a The first integer
255
+ @param b The second integer
256
+ @param c The destination for [a, b]
257
+ @return CRYPT_OK on success
258
+ */
259
+ int (*lcm)(void *a, void *b, void *c);
260
+
261
+ /** Modular multiplication
262
+ @param a The first source
263
+ @param b The second source
264
+ @param c The modulus
265
+ @param d The destination (a*b mod c)
266
+ @return CRYPT_OK on success
267
+ */
268
+ int (*mulmod)(void *a, void *b, void *c, void *d);
269
+
270
+ /** Modular squaring
271
+ @param a The first source
272
+ @param b The modulus
273
+ @param c The destination (a*a mod b)
274
+ @return CRYPT_OK on success
275
+ */
276
+ int (*sqrmod)(void *a, void *b, void *c);
277
+
278
+ /** Modular inversion
279
+ @param a The value to invert
280
+ @param b The modulus
281
+ @param c The destination (1/a mod b)
282
+ @return CRYPT_OK on success
283
+ */
284
+ int (*invmod)(void *, void *, void *);
285
+
286
+ /* ---- reduction ---- */
287
+
288
+ /** setup montgomery
289
+ @param a The modulus
290
+ @param b The destination for the reduction digit
291
+ @return CRYPT_OK on success
292
+ */
293
+ int (*montgomery_setup)(void *a, void **b);
294
+
295
+ /** get normalization value
296
+ @param a The destination for the normalization value
297
+ @param b The modulus
298
+ @return CRYPT_OK on success
299
+ */
300
+ int (*montgomery_normalization)(void *a, void *b);
301
+
302
+ /** reduce a number
303
+ @param a The number [and dest] to reduce
304
+ @param b The modulus
305
+ @param c The value "b" from montgomery_setup()
306
+ @return CRYPT_OK on success
307
+ */
308
+ int (*montgomery_reduce)(void *a, void *b, void *c);
309
+
310
+ /** clean up (frees memory)
311
+ @param a The value "b" from montgomery_setup()
312
+ @return CRYPT_OK on success
313
+ */
314
+ void (*montgomery_deinit)(void *a);
315
+
316
+ /* ---- exponentiation ---- */
317
+
318
+ /** Modular exponentiation
319
+ @param a The base integer
320
+ @param b The power (can be negative) integer
321
+ @param c The modulus integer
322
+ @param d The destination
323
+ @return CRYPT_OK on success
324
+ */
325
+ int (*exptmod)(void *a, void *b, void *c, void *d);
326
+
327
+ /** Primality testing
328
+ @param a The integer to test
329
+ @param b The number of tests that shall be executed
330
+ @param c The destination of the result (FP_YES if prime)
331
+ @return CRYPT_OK on success
332
+ */
333
+ int (*isprime)(void *a, int b, int *c);
334
+
335
+ /* ---- (optional) ecc point math ---- */
336
+
337
+ /** ECC GF(p) point multiplication (from the NIST curves)
338
+ @param k The integer to multiply the point by
339
+ @param G The point to multiply
340
+ @param R The destination for kG
341
+ @param modulus The modulus for the field
342
+ @param map Boolean indicated whether to map back to affine or not (can be ignored if you work in affine only)
343
+ @return CRYPT_OK on success
344
+ */
345
+ int (*ecc_ptmul)(void *k, ecc_point *G, ecc_point *R, void *modulus, int map);
346
+
347
+ /** ECC GF(p) point addition
348
+ @param P The first point
349
+ @param Q The second point
350
+ @param R The destination of P + Q
351
+ @param modulus The modulus
352
+ @param mp The "b" value from montgomery_setup()
353
+ @return CRYPT_OK on success
354
+ */
355
+ int (*ecc_ptadd)(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp);
356
+
357
+ /** ECC GF(p) point double
358
+ @param P The first point
359
+ @param R The destination of 2P
360
+ @param modulus The modulus
361
+ @param mp The "b" value from montgomery_setup()
362
+ @return CRYPT_OK on success
363
+ */
364
+ int (*ecc_ptdbl)(ecc_point *P, ecc_point *R, void *modulus, void *mp);
365
+
366
+ /** ECC mapping from projective to affine, currently uses (x,y,z) => (x/z^2, y/z^3, 1)
367
+ @param P The point to map
368
+ @param modulus The modulus
369
+ @param mp The "b" value from montgomery_setup()
370
+ @return CRYPT_OK on success
371
+ @remark The mapping can be different but keep in mind a ecc_point only has three
372
+ integers (x,y,z) so if you use a different mapping you have to make it fit.
373
+ */
374
+ int (*ecc_map)(ecc_point *P, void *modulus, void *mp);
375
+
376
+ /** Computes kA*A + kB*B = C using Shamir's Trick
377
+ @param A First point to multiply
378
+ @param kA What to multiple A by
379
+ @param B Second point to multiply
380
+ @param kB What to multiple B by
381
+ @param C [out] Destination point (can overlap with A or B
382
+ @param modulus Modulus for curve
383
+ @return CRYPT_OK on success
384
+ */
385
+ int (*ecc_mul2add)(ecc_point *A, void *kA,
386
+ ecc_point *B, void *kB,
387
+ ecc_point *C,
388
+ void *modulus);
389
+
390
+ /* ---- (optional) rsa optimized math (for internal CRT) ---- */
391
+
392
+ /** RSA Key Generation
393
+ @param prng An active PRNG state
394
+ @param wprng The index of the PRNG desired
395
+ @param size The size of the modulus (key size) desired (octets)
396
+ @param e The "e" value (public key). e==65537 is a good choice
397
+ @param key [out] Destination of a newly created private key pair
398
+ @return CRYPT_OK if successful, upon error all allocated ram is freed
399
+ */
400
+ int (*rsa_keygen)(prng_state *prng, int wprng, int size, long e, rsa_key *key);
401
+
402
+
403
+ /** RSA exponentiation
404
+ @param in The octet array representing the base
405
+ @param inlen The length of the input
406
+ @param out The destination (to be stored in an octet array format)
407
+ @param outlen The length of the output buffer and the resulting size (zero padded to the size of the modulus)
408
+ @param which PK_PUBLIC for public RSA and PK_PRIVATE for private RSA
409
+ @param key The RSA key to use
410
+ @return CRYPT_OK on success
411
+ */
412
+ int (*rsa_me)(const unsigned char *in, unsigned long inlen,
413
+ unsigned char *out, unsigned long *outlen, int which,
414
+ rsa_key *key);
415
+
416
+ /* ---- basic math continued ---- */
417
+
418
+ /** Modular addition
419
+ @param a The first source
420
+ @param b The second source
421
+ @param c The modulus
422
+ @param d The destination (a + b mod c)
423
+ @return CRYPT_OK on success
424
+ */
425
+ int (*addmod)(void *a, void *b, void *c, void *d);
426
+
427
+ /** Modular substraction
428
+ @param a The first source
429
+ @param b The second source
430
+ @param c The modulus
431
+ @param d The destination (a - b mod c)
432
+ @return CRYPT_OK on success
433
+ */
434
+ int (*submod)(void *a, void *b, void *c, void *d);
435
+
436
+ /* ---- misc stuff ---- */
437
+ /** Make a pseudo-random mpi
438
+ @param a The mpi to make random
439
+ @param size The desired length
440
+ @return CRYPT_OK on success
441
+ */
442
+ int (*rand)(void *a, int size);
443
+
444
+ } ltc_math_descriptor;
445
+
446
+ extern ltc_math_descriptor ltc_mp;
447
+
448
+ int ltc_init_multi(void **a, ...);
449
+ void ltc_deinit_multi(void *a, ...);
450
+
451
+ #ifdef LTM_DESC
452
+ extern const ltc_math_descriptor ltm_desc;
453
+ #endif
454
+
455
+ #ifdef TFM_DESC
456
+ extern const ltc_math_descriptor tfm_desc;
457
+ #endif
458
+
459
+ #ifdef GMP_DESC
460
+ extern const ltc_math_descriptor gmp_desc;
461
+ #endif
462
+
463
+ #if !defined(DESC_DEF_ONLY) && defined(LTC_SOURCE)
464
+
465
+ #define MP_DIGIT_BIT ltc_mp.bits_per_digit
466
+
467
+ /* some handy macros */
468
+ #define mp_init(a) ltc_mp.init(a)
469
+ #define mp_init_multi ltc_init_multi
470
+ #define mp_clear(a) ltc_mp.deinit(a)
471
+ #define mp_clear_multi ltc_deinit_multi
472
+ #define mp_init_copy(a, b) ltc_mp.init_copy(a, b)
473
+
474
+ #define mp_neg(a, b) ltc_mp.neg(a, b)
475
+ #define mp_copy(a, b) ltc_mp.copy(a, b)
476
+
477
+ #define mp_set(a, b) ltc_mp.set_int(a, b)
478
+ #define mp_set_int(a, b) ltc_mp.set_int(a, b)
479
+ #define mp_get_int(a) ltc_mp.get_int(a)
480
+ #define mp_get_digit(a, n) ltc_mp.get_digit(a, n)
481
+ #define mp_get_digit_count(a) ltc_mp.get_digit_count(a)
482
+ #define mp_cmp(a, b) ltc_mp.compare(a, b)
483
+ #define mp_cmp_d(a, b) ltc_mp.compare_d(a, b)
484
+ #define mp_count_bits(a) ltc_mp.count_bits(a)
485
+ #define mp_cnt_lsb(a) ltc_mp.count_lsb_bits(a)
486
+ #define mp_2expt(a, b) ltc_mp.twoexpt(a, b)
487
+
488
+ #define mp_read_radix(a, b, c) ltc_mp.read_radix(a, b, c)
489
+ #define mp_toradix(a, b, c) ltc_mp.write_radix(a, b, c)
490
+ #define mp_unsigned_bin_size(a) ltc_mp.unsigned_size(a)
491
+ #define mp_to_unsigned_bin(a, b) ltc_mp.unsigned_write(a, b)
492
+ #define mp_read_unsigned_bin(a, b, c) ltc_mp.unsigned_read(a, b, c)
493
+
494
+ #define mp_add(a, b, c) ltc_mp.add(a, b, c)
495
+ #define mp_add_d(a, b, c) ltc_mp.addi(a, b, c)
496
+ #define mp_sub(a, b, c) ltc_mp.sub(a, b, c)
497
+ #define mp_sub_d(a, b, c) ltc_mp.subi(a, b, c)
498
+ #define mp_mul(a, b, c) ltc_mp.mul(a, b, c)
499
+ #define mp_mul_d(a, b, c) ltc_mp.muli(a, b, c)
500
+ #define mp_sqr(a, b) ltc_mp.sqr(a, b)
501
+ #define mp_div(a, b, c, d) ltc_mp.mpdiv(a, b, c, d)
502
+ #define mp_div_2(a, b) ltc_mp.div_2(a, b)
503
+ #define mp_mod(a, b, c) ltc_mp.mpdiv(a, b, NULL, c)
504
+ #define mp_mod_d(a, b, c) ltc_mp.modi(a, b, c)
505
+ #define mp_gcd(a, b, c) ltc_mp.gcd(a, b, c)
506
+ #define mp_lcm(a, b, c) ltc_mp.lcm(a, b, c)
507
+
508
+ #define mp_addmod(a, b, c, d) ltc_mp.addmod(a, b, c, d)
509
+ #define mp_submod(a, b, c, d) ltc_mp.submod(a, b, c, d)
510
+ #define mp_mulmod(a, b, c, d) ltc_mp.mulmod(a, b, c, d)
511
+ #define mp_sqrmod(a, b, c) ltc_mp.sqrmod(a, b, c)
512
+ #define mp_invmod(a, b, c) ltc_mp.invmod(a, b, c)
513
+
514
+ #define mp_montgomery_setup(a, b) ltc_mp.montgomery_setup(a, b)
515
+ #define mp_montgomery_normalization(a, b) ltc_mp.montgomery_normalization(a, b)
516
+ #define mp_montgomery_reduce(a, b, c) ltc_mp.montgomery_reduce(a, b, c)
517
+ #define mp_montgomery_free(a) ltc_mp.montgomery_deinit(a)
518
+
519
+ #define mp_exptmod(a,b,c,d) ltc_mp.exptmod(a,b,c,d)
520
+ #define mp_prime_is_prime(a, b, c) ltc_mp.isprime(a, b, c)
521
+
522
+ #define mp_iszero(a) (mp_cmp_d(a, 0) == LTC_MP_EQ ? LTC_MP_YES : LTC_MP_NO)
523
+ #define mp_isodd(a) (mp_get_digit_count(a) > 0 ? (mp_get_digit(a, 0) & 1 ? LTC_MP_YES : LTC_MP_NO) : LTC_MP_NO)
524
+ #define mp_exch(a, b) do { void *ABC__tmp = a; a = b; b = ABC__tmp; } while(0)
525
+
526
+ #define mp_tohex(a, b) mp_toradix(a, b, 16)
527
+
528
+ #define mp_rand(a, b) ltc_mp.rand(a, b)
529
+
530
+ #endif
531
+
532
+ /* $Source$ */
533
+ /* $Revision$ */
534
+ /* $Date$ */
@@ -0,0 +1,103 @@
1
+ /* ---- LTC_BASE64 Routines ---- */
2
+ #ifdef LTC_BASE64
3
+ int base64_encode(const unsigned char *in, unsigned long len,
4
+ unsigned char *out, unsigned long *outlen);
5
+
6
+ int base64_decode(const unsigned char *in, unsigned long len,
7
+ unsigned char *out, unsigned long *outlen);
8
+ #endif
9
+
10
+ #ifdef LTC_BASE64_URL
11
+ int base64url_encode(const unsigned char *in, unsigned long len,
12
+ unsigned char *out, unsigned long *outlen);
13
+
14
+ int base64url_decode(const unsigned char *in, unsigned long len,
15
+ unsigned char *out, unsigned long *outlen);
16
+ #endif
17
+
18
+ /* ===> LTC_HKDF -- RFC5869 HMAC-based Key Derivation Function <=== */
19
+ #ifdef LTC_HKDF
20
+
21
+ int hkdf_test(void);
22
+
23
+ int hkdf_extract(int hash_idx,
24
+ const unsigned char *salt, unsigned long saltlen,
25
+ const unsigned char *in, unsigned long inlen,
26
+ unsigned char *out, unsigned long *outlen);
27
+
28
+ int hkdf_expand(int hash_idx,
29
+ const unsigned char *info, unsigned long infolen,
30
+ const unsigned char *in, unsigned long inlen,
31
+ unsigned char *out, unsigned long outlen);
32
+
33
+ int hkdf(int hash_idx,
34
+ const unsigned char *salt, unsigned long saltlen,
35
+ const unsigned char *info, unsigned long infolen,
36
+ const unsigned char *in, unsigned long inlen,
37
+ unsigned char *out, unsigned long outlen);
38
+
39
+ #endif /* LTC_HKDF */
40
+
41
+ /* ---- MEM routines ---- */
42
+ int mem_neq(const void *a, const void *b, size_t len);
43
+ void zeromem(volatile void *dst, size_t len);
44
+ void burn_stack(unsigned long len);
45
+
46
+ const char *error_to_string(int err);
47
+
48
+ extern const char *crypt_build_settings;
49
+
50
+ /* ---- HMM ---- */
51
+ int crypt_fsa(void *mp, ...);
52
+
53
+ /* ---- Dynamic language support ---- */
54
+ int crypt_get_constant(const char* namein, int *valueout);
55
+ int crypt_list_all_constants(char *names_list, unsigned int *names_list_size);
56
+
57
+ int crypt_get_size(const char* namein, unsigned int *sizeout);
58
+ int crypt_list_all_sizes(char *names_list, unsigned int *names_list_size);
59
+
60
+ #ifdef LTM_DESC
61
+ void init_LTM(void);
62
+ #endif
63
+ #ifdef TFM_DESC
64
+ void init_TFM(void);
65
+ #endif
66
+ /* *** use of GMP is untested ***
67
+ #ifdef GMP_DESC
68
+ void init_GMP(void);
69
+ #endif
70
+ */
71
+
72
+ #ifdef LTC_ADLER32
73
+ typedef struct adler32_state_s
74
+ {
75
+ unsigned short s[2];
76
+ } adler32_state;
77
+
78
+ void adler32_init(adler32_state *ctx);
79
+ void adler32_update(adler32_state *ctx, const unsigned char *input, unsigned long length);
80
+ void adler32_finish(adler32_state *ctx, void *hash, unsigned long size);
81
+ int adler32_test(void);
82
+ #endif
83
+
84
+ #ifdef LTC_CRC32
85
+ typedef struct crc32_state_s
86
+ {
87
+ ulong32 crc;
88
+ } crc32_state;
89
+
90
+ void crc32_init(crc32_state *ctx);
91
+ void crc32_update(crc32_state *ctx, const unsigned char *input, unsigned long length);
92
+ void crc32_finish(crc32_state *ctx, void *hash, unsigned long size);
93
+ int crc32_test(void);
94
+ #endif
95
+
96
+ /* yeah it's not exactly in misc in the library, but in testprof/x86_prof.c */
97
+ #if defined(LTC_TEST) && defined(LTC_TEST_DBG)
98
+ void print_hex(const char* what, const unsigned char* p, const unsigned long l);
99
+ #endif
100
+
101
+ /* $Source$ */
102
+ /* $Revision$ */
103
+ /* $Date$ */