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.
- charm/__init__.py +5 -0
- charm/adapters/__init__.py +0 -0
- charm/adapters/abenc_adapt_hybrid.py +90 -0
- charm/adapters/dabenc_adapt_hybrid.py +145 -0
- charm/adapters/ibenc_adapt_hybrid.py +72 -0
- charm/adapters/ibenc_adapt_identityhash.py +80 -0
- charm/adapters/kpabenc_adapt_hybrid.py +91 -0
- charm/adapters/pkenc_adapt_bchk05.py +121 -0
- charm/adapters/pkenc_adapt_chk04.py +91 -0
- charm/adapters/pkenc_adapt_hybrid.py +98 -0
- charm/adapters/pksig_adapt_naor01.py +89 -0
- charm/config.py +7 -0
- charm/core/__init__.py +0 -0
- charm/core/benchmark/benchmark_util.c +353 -0
- charm/core/benchmark/benchmark_util.h +61 -0
- charm/core/benchmark/benchmarkmodule.c +476 -0
- charm/core/benchmark/benchmarkmodule.h +162 -0
- charm/core/benchmark.cpython-313-darwin.so +0 -0
- charm/core/crypto/AES/AES.c +1464 -0
- charm/core/crypto/AES.cpython-313-darwin.so +0 -0
- charm/core/crypto/DES/DES.c +113 -0
- charm/core/crypto/DES.cpython-313-darwin.so +0 -0
- charm/core/crypto/DES3/DES3.c +26 -0
- charm/core/crypto/DES3.cpython-313-darwin.so +0 -0
- charm/core/crypto/__init__.py +0 -0
- charm/core/crypto/cryptobase/XOR.c +80 -0
- charm/core/crypto/cryptobase/_counter.c +496 -0
- charm/core/crypto/cryptobase/_counter.h +54 -0
- charm/core/crypto/cryptobase/block_template.c +900 -0
- charm/core/crypto/cryptobase/block_template.h +69 -0
- charm/core/crypto/cryptobase/cryptobasemodule.c +220 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt.h +90 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_argchk.h +44 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_cfg.h +186 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_cipher.h +941 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_custom.h +556 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_des.c +1912 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_hash.h +407 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_mac.h +496 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_macros.h +435 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_math.h +534 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_misc.h +103 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_pk.h +653 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_pkcs.h +90 -0
- charm/core/crypto/cryptobase/libtom/tomcrypt_prng.h +199 -0
- charm/core/crypto/cryptobase/stream_template.c +271 -0
- charm/core/crypto/cryptobase/strxor.c +229 -0
- charm/core/crypto/cryptobase.cpython-313-darwin.so +0 -0
- charm/core/engine/__init__.py +5 -0
- charm/core/engine/protocol.py +293 -0
- charm/core/engine/util.py +174 -0
- charm/core/math/__init__.py +0 -0
- charm/core/math/elliptic_curve/ecmodule.c +1986 -0
- charm/core/math/elliptic_curve/ecmodule.h +230 -0
- charm/core/math/elliptic_curve.cpython-313-darwin.so +0 -0
- charm/core/math/elliptic_curve.pyi +63 -0
- charm/core/math/integer/integermodule.c +2539 -0
- charm/core/math/integer/integermodule.h +145 -0
- charm/core/math/integer.cpython-313-darwin.so +0 -0
- charm/core/math/integer.pyi +76 -0
- charm/core/math/pairing/miracl/miracl_config.h +37 -0
- charm/core/math/pairing/miracl/miracl_interface.h +118 -0
- charm/core/math/pairing/miracl/miracl_interface2.h +126 -0
- charm/core/math/pairing/miracl/pairingmodule2.c +2094 -0
- charm/core/math/pairing/miracl/pairingmodule2.h +307 -0
- charm/core/math/pairing/pairingmodule.c +2230 -0
- charm/core/math/pairing/pairingmodule.h +241 -0
- charm/core/math/pairing/relic/pairingmodule3.c +1853 -0
- charm/core/math/pairing/relic/pairingmodule3.h +233 -0
- charm/core/math/pairing/relic/relic_interface.c +1337 -0
- charm/core/math/pairing/relic/relic_interface.h +217 -0
- charm/core/math/pairing/relic/test_relic.c +171 -0
- charm/core/math/pairing.cpython-313-darwin.so +0 -0
- charm/core/math/pairing.pyi +69 -0
- charm/core/utilities/base64.c +248 -0
- charm/core/utilities/base64.h +15 -0
- charm/schemes/__init__.py +0 -0
- charm/schemes/abenc/__init__.py +0 -0
- charm/schemes/abenc/abenc_accountability_jyjxgd20.py +647 -0
- charm/schemes/abenc/abenc_bsw07.py +146 -0
- charm/schemes/abenc/abenc_ca_cpabe_ar17.py +684 -0
- charm/schemes/abenc/abenc_dacmacs_yj14.py +298 -0
- charm/schemes/abenc/abenc_lsw08.py +159 -0
- charm/schemes/abenc/abenc_maabe_rw15.py +236 -0
- charm/schemes/abenc/abenc_maabe_yj14.py +297 -0
- charm/schemes/abenc/abenc_tbpre_lww14.py +309 -0
- charm/schemes/abenc/abenc_unmcpabe_yahk14.py +223 -0
- charm/schemes/abenc/abenc_waters09.py +144 -0
- charm/schemes/abenc/abenc_yct14.py +208 -0
- charm/schemes/abenc/abenc_yllc15.py +178 -0
- charm/schemes/abenc/ac17.py +248 -0
- charm/schemes/abenc/bsw07.py +141 -0
- charm/schemes/abenc/cgw15.py +277 -0
- charm/schemes/abenc/dabe_aw11.py +204 -0
- charm/schemes/abenc/dfa_fe12.py +144 -0
- charm/schemes/abenc/pk_hve08.py +179 -0
- charm/schemes/abenc/waters11.py +143 -0
- charm/schemes/aggrsign_MuSig.py +150 -0
- charm/schemes/aggrsign_bls.py +267 -0
- charm/schemes/blindsig_ps16.py +654 -0
- charm/schemes/chamhash_adm05.py +113 -0
- charm/schemes/chamhash_rsa_hw09.py +100 -0
- charm/schemes/commit/__init__.py +0 -0
- charm/schemes/commit/commit_gs08.py +77 -0
- charm/schemes/commit/commit_pedersen92.py +53 -0
- charm/schemes/encap_bchk05.py +62 -0
- charm/schemes/grpsig/__init__.py +0 -0
- charm/schemes/grpsig/groupsig_bgls04.py +114 -0
- charm/schemes/grpsig/groupsig_bgls04_var.py +115 -0
- charm/schemes/hibenc/__init__.py +0 -0
- charm/schemes/hibenc/hibenc_bb04.py +105 -0
- charm/schemes/hibenc/hibenc_lew11.py +193 -0
- charm/schemes/ibenc/__init__.py +0 -0
- charm/schemes/ibenc/clpkc_rp03.py +119 -0
- charm/schemes/ibenc/ibenc_CW13_z.py +168 -0
- charm/schemes/ibenc/ibenc_bb03.py +94 -0
- charm/schemes/ibenc/ibenc_bf01.py +121 -0
- charm/schemes/ibenc/ibenc_ckrs09.py +120 -0
- charm/schemes/ibenc/ibenc_cllww12_z.py +172 -0
- charm/schemes/ibenc/ibenc_lsw08.py +120 -0
- charm/schemes/ibenc/ibenc_sw05.py +238 -0
- charm/schemes/ibenc/ibenc_waters05.py +144 -0
- charm/schemes/ibenc/ibenc_waters05_z.py +164 -0
- charm/schemes/ibenc/ibenc_waters09.py +107 -0
- charm/schemes/ibenc/ibenc_waters09_z.py +147 -0
- charm/schemes/joye_scheme.py +106 -0
- charm/schemes/lem_scheme.py +207 -0
- charm/schemes/pk_fre_ccv11.py +107 -0
- charm/schemes/pk_vrf.py +127 -0
- charm/schemes/pkenc/__init__.py +0 -0
- charm/schemes/pkenc/pkenc_cs98.py +108 -0
- charm/schemes/pkenc/pkenc_elgamal85.py +122 -0
- charm/schemes/pkenc/pkenc_gm82.py +98 -0
- charm/schemes/pkenc/pkenc_paillier99.py +118 -0
- charm/schemes/pkenc/pkenc_rabin.py +254 -0
- charm/schemes/pkenc/pkenc_rsa.py +186 -0
- charm/schemes/pksig/__init__.py +0 -0
- charm/schemes/pksig/pksig_CW13_z.py +135 -0
- charm/schemes/pksig/pksig_bls04.py +87 -0
- charm/schemes/pksig/pksig_boyen.py +156 -0
- charm/schemes/pksig/pksig_chch.py +97 -0
- charm/schemes/pksig/pksig_chp.py +70 -0
- charm/schemes/pksig/pksig_cl03.py +150 -0
- charm/schemes/pksig/pksig_cl04.py +87 -0
- charm/schemes/pksig/pksig_cllww12_z.py +142 -0
- charm/schemes/pksig/pksig_cyh.py +132 -0
- charm/schemes/pksig/pksig_dsa.py +76 -0
- charm/schemes/pksig/pksig_ecdsa.py +71 -0
- charm/schemes/pksig/pksig_hess.py +104 -0
- charm/schemes/pksig/pksig_hw.py +110 -0
- charm/schemes/pksig/pksig_lamport.py +63 -0
- charm/schemes/pksig/pksig_ps01.py +135 -0
- charm/schemes/pksig/pksig_ps02.py +124 -0
- charm/schemes/pksig/pksig_ps03.py +119 -0
- charm/schemes/pksig/pksig_rsa_hw09.py +206 -0
- charm/schemes/pksig/pksig_schnorr91.py +77 -0
- charm/schemes/pksig/pksig_waters.py +115 -0
- charm/schemes/pksig/pksig_waters05.py +121 -0
- charm/schemes/pksig/pksig_waters09.py +121 -0
- charm/schemes/pre_mg07.py +150 -0
- charm/schemes/prenc/pre_afgh06.py +126 -0
- charm/schemes/prenc/pre_bbs98.py +123 -0
- charm/schemes/prenc/pre_nal16.py +216 -0
- charm/schemes/protocol_a01.py +272 -0
- charm/schemes/protocol_ao00.py +215 -0
- charm/schemes/protocol_cns07.py +274 -0
- charm/schemes/protocol_schnorr91.py +125 -0
- charm/schemes/sigma1.py +64 -0
- charm/schemes/sigma2.py +129 -0
- charm/schemes/sigma3.py +126 -0
- charm/schemes/threshold/__init__.py +59 -0
- charm/schemes/threshold/dkls23_dkg.py +556 -0
- charm/schemes/threshold/dkls23_presign.py +1089 -0
- charm/schemes/threshold/dkls23_sign.py +761 -0
- charm/schemes/threshold/xrpl_wallet.py +967 -0
- charm/test/__init__.py +0 -0
- charm/test/adapters/__init__.py +0 -0
- charm/test/adapters/abenc_adapt_hybrid_test.py +29 -0
- charm/test/adapters/dabenc_adapt_hybrid_test.py +56 -0
- charm/test/adapters/ibenc_adapt_hybrid_test.py +36 -0
- charm/test/adapters/ibenc_adapt_identityhash_test.py +32 -0
- charm/test/adapters/kpabenc_adapt_hybrid_test.py +30 -0
- charm/test/benchmark/abenc_yllc15_bench.py +92 -0
- charm/test/benchmark/benchmark_test.py +148 -0
- charm/test/benchmark_threshold.py +260 -0
- charm/test/conftest.py +38 -0
- charm/test/fuzz/__init__.py +1 -0
- charm/test/fuzz/conftest.py +5 -0
- charm/test/fuzz/fuzz_policy_parser.py +76 -0
- charm/test/fuzz/fuzz_serialization.py +83 -0
- charm/test/schemes/__init__.py +0 -0
- charm/test/schemes/abenc/__init__.py +0 -0
- charm/test/schemes/abenc/abenc_bsw07_test.py +39 -0
- charm/test/schemes/abenc/abenc_dacmacs_yj14_test.py +16 -0
- charm/test/schemes/abenc/abenc_lsw08_test.py +33 -0
- charm/test/schemes/abenc/abenc_maabe_yj14_test.py +16 -0
- charm/test/schemes/abenc/abenc_tbpre_lww14_test.py +16 -0
- charm/test/schemes/abenc/abenc_waters09_test.py +38 -0
- charm/test/schemes/abenc/abenc_yllc15_test.py +74 -0
- charm/test/schemes/chamhash_adm05_test.py +31 -0
- charm/test/schemes/chamhash_rsa_hw09_test.py +29 -0
- charm/test/schemes/commit/__init__.py +0 -0
- charm/test/schemes/commit/commit_gs08_test.py +24 -0
- charm/test/schemes/commit/commit_pedersen92_test.py +26 -0
- charm/test/schemes/dabe_aw11_test.py +45 -0
- charm/test/schemes/encap_bchk05_test.py +21 -0
- charm/test/schemes/grpsig/__init__.py +0 -0
- charm/test/schemes/grpsig/groupsig_bgls04_test.py +35 -0
- charm/test/schemes/grpsig/groupsig_bgls04_var_test.py +39 -0
- charm/test/schemes/hibenc/__init__.py +0 -0
- charm/test/schemes/hibenc/hibenc_bb04_test.py +28 -0
- charm/test/schemes/ibenc/__init__.py +0 -0
- charm/test/schemes/ibenc/ibenc_bb03_test.py +26 -0
- charm/test/schemes/ibenc/ibenc_bf01_test.py +24 -0
- charm/test/schemes/ibenc/ibenc_ckrs09_test.py +25 -0
- charm/test/schemes/ibenc/ibenc_lsw08_test.py +31 -0
- charm/test/schemes/ibenc/ibenc_sw05_test.py +32 -0
- charm/test/schemes/ibenc/ibenc_waters05_test.py +31 -0
- charm/test/schemes/ibenc/ibenc_waters09_test.py +27 -0
- charm/test/schemes/pk_vrf_test.py +29 -0
- charm/test/schemes/pkenc/__init__.py +0 -0
- charm/test/schemes/pkenc_test.py +255 -0
- charm/test/schemes/pksig/__init__.py +0 -0
- charm/test/schemes/pksig_test.py +376 -0
- charm/test/schemes/rsa_alg_test.py +340 -0
- charm/test/schemes/threshold_test.py +1792 -0
- charm/test/serialize/__init__.py +0 -0
- charm/test/serialize/serialize_test.py +40 -0
- charm/test/toolbox/__init__.py +0 -0
- charm/test/toolbox/conversion_test.py +30 -0
- charm/test/toolbox/ecgroup_test.py +53 -0
- charm/test/toolbox/integer_arithmetic_test.py +441 -0
- charm/test/toolbox/paddingschemes_test.py +238 -0
- charm/test/toolbox/policy_parser_stress_test.py +969 -0
- charm/test/toolbox/secretshare_test.py +28 -0
- charm/test/toolbox/symcrypto_test.py +108 -0
- charm/test/toolbox/test_policy_expression.py +16 -0
- charm/test/vectors/__init__.py +1 -0
- charm/test/vectors/test_bls_vectors.py +289 -0
- charm/test/vectors/test_pedersen_vectors.py +315 -0
- charm/test/vectors/test_schnorr_vectors.py +368 -0
- charm/test/zkp_compiler/__init__.py +9 -0
- charm/test/zkp_compiler/benchmark_zkp.py +258 -0
- charm/test/zkp_compiler/test_and_proof.py +240 -0
- charm/test/zkp_compiler/test_batch_verify.py +248 -0
- charm/test/zkp_compiler/test_dleq_proof.py +264 -0
- charm/test/zkp_compiler/test_or_proof.py +231 -0
- charm/test/zkp_compiler/test_proof_serialization.py +121 -0
- charm/test/zkp_compiler/test_range_proof.py +241 -0
- charm/test/zkp_compiler/test_representation_proof.py +325 -0
- charm/test/zkp_compiler/test_schnorr_proof.py +221 -0
- charm/test/zkp_compiler/test_thread_safety.py +169 -0
- charm/test/zkp_compiler/test_zkp_parser.py +139 -0
- charm/toolbox/ABEnc.py +26 -0
- charm/toolbox/ABEncMultiAuth.py +66 -0
- charm/toolbox/ABEnumeric.py +800 -0
- charm/toolbox/Commit.py +24 -0
- charm/toolbox/DFA.py +89 -0
- charm/toolbox/FSA.py +1254 -0
- charm/toolbox/Hash.py +39 -0
- charm/toolbox/IBEnc.py +62 -0
- charm/toolbox/IBSig.py +64 -0
- charm/toolbox/PKEnc.py +66 -0
- charm/toolbox/PKSig.py +56 -0
- charm/toolbox/PREnc.py +32 -0
- charm/toolbox/ZKProof.py +289 -0
- charm/toolbox/__init__.py +0 -0
- charm/toolbox/bitstring.py +49 -0
- charm/toolbox/broadcast.py +220 -0
- charm/toolbox/conversion.py +100 -0
- charm/toolbox/eccurve.py +149 -0
- charm/toolbox/ecgroup.py +143 -0
- charm/toolbox/enum.py +60 -0
- charm/toolbox/hash_module.py +91 -0
- charm/toolbox/integergroup.py +323 -0
- charm/toolbox/iterate.py +22 -0
- charm/toolbox/matrixops.py +76 -0
- charm/toolbox/mpc_utils.py +296 -0
- charm/toolbox/msp.py +175 -0
- charm/toolbox/mta.py +985 -0
- charm/toolbox/node.py +120 -0
- charm/toolbox/ot/__init__.py +22 -0
- charm/toolbox/ot/base_ot.py +374 -0
- charm/toolbox/ot/dpf.py +642 -0
- charm/toolbox/ot/mpfss.py +228 -0
- charm/toolbox/ot/ot_extension.py +589 -0
- charm/toolbox/ot/silent_ot.py +378 -0
- charm/toolbox/paddingschemes.py +423 -0
- charm/toolbox/paddingschemes_test.py +238 -0
- charm/toolbox/pairingcurves.py +85 -0
- charm/toolbox/pairinggroup.py +186 -0
- charm/toolbox/policy_expression_spec.py +70 -0
- charm/toolbox/policytree.py +189 -0
- charm/toolbox/reCompiler.py +346 -0
- charm/toolbox/redundancyschemes.py +65 -0
- charm/toolbox/schemebase.py +188 -0
- charm/toolbox/secretshare.py +104 -0
- charm/toolbox/secretutil.py +174 -0
- charm/toolbox/securerandom.py +73 -0
- charm/toolbox/sigmaprotocol.py +46 -0
- charm/toolbox/specialprimes.py +45 -0
- charm/toolbox/symcrypto.py +279 -0
- charm/toolbox/threshold_sharing.py +553 -0
- charm/toolbox/xmlserialize.py +94 -0
- charm/toolbox/zknode.py +105 -0
- charm/zkp_compiler/__init__.py +89 -0
- charm/zkp_compiler/and_proof.py +460 -0
- charm/zkp_compiler/batch_verify.py +324 -0
- charm/zkp_compiler/dleq_proof.py +423 -0
- charm/zkp_compiler/or_proof.py +305 -0
- charm/zkp_compiler/range_proof.py +417 -0
- charm/zkp_compiler/representation_proof.py +466 -0
- charm/zkp_compiler/schnorr_proof.py +273 -0
- charm/zkp_compiler/thread_safe.py +150 -0
- charm/zkp_compiler/zk_demo.py +489 -0
- charm/zkp_compiler/zkp_factory.py +330 -0
- charm/zkp_compiler/zkp_generator.py +370 -0
- charm/zkp_compiler/zkparser.py +269 -0
- charm_crypto_framework-0.61.1.dist-info/METADATA +337 -0
- charm_crypto_framework-0.61.1.dist-info/RECORD +323 -0
- charm_crypto_framework-0.61.1.dist-info/WHEEL +5 -0
- charm_crypto_framework-0.61.1.dist-info/licenses/LICENSE.txt +165 -0
- 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: */
|