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,233 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Charm-Crypto is a framework for rapidly prototyping cryptosystems.
|
|
3
|
+
*
|
|
4
|
+
* Charm-Crypto is free software; you can redistribute it and/or
|
|
5
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
6
|
+
* License as published by the Free Software Foundation; either
|
|
7
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
8
|
+
*
|
|
9
|
+
* Charm-Crypto is distributed in the hope that it will be useful,
|
|
10
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
12
|
+
* Lesser General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Lesser General Public License
|
|
15
|
+
* along with Charm-Crypto. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*
|
|
17
|
+
* Please contact the charm-crypto dev team at support@charm-crypto.com
|
|
18
|
+
* for any questions.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* @file pairingmodule3.h
|
|
23
|
+
*
|
|
24
|
+
* @brief charm interface over RELIC's pairing-based crypto module
|
|
25
|
+
*
|
|
26
|
+
* @author jakinye3@jhu.edu
|
|
27
|
+
*
|
|
28
|
+
************************************************************************/
|
|
29
|
+
|
|
30
|
+
#ifndef PAIRINGMODULE3_H
|
|
31
|
+
#define PAIRINGMODULE3_H
|
|
32
|
+
|
|
33
|
+
#ifndef PY_SSIZE_T_CLEAN
|
|
34
|
+
#define PY_SSIZE_T_CLEAN
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
/* Define MS_WIN64 to get correct PYLONG_BITS_IN_DIGIT on Windows. */
|
|
38
|
+
#if PY_MINOR_VERSION <= 10 && defined(_WIN64) && !defined(MS_WIN64)
|
|
39
|
+
#define MS_WIN64
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
#include <Python.h>
|
|
43
|
+
#include <structmember.h>
|
|
44
|
+
|
|
45
|
+
#if PY_MINOR_VERSION <= 10
|
|
46
|
+
#include <longintrepr.h>
|
|
47
|
+
#else
|
|
48
|
+
#include <cpython/longintrepr.h> /* for conversions */
|
|
49
|
+
#endif
|
|
50
|
+
#include <stdlib.h>
|
|
51
|
+
#include <sys/types.h>
|
|
52
|
+
#include <sys/stat.h>
|
|
53
|
+
#include <fcntl.h>
|
|
54
|
+
#include "benchmarkmodule.h"
|
|
55
|
+
#include "base64.h"
|
|
56
|
+
#include "relic_interface.h"
|
|
57
|
+
#ifdef BENCHMARK_ENABLED
|
|
58
|
+
#define RAND_pseudo_bytes(a, b) /* redefine */
|
|
59
|
+
#include "benchmark_util.h"
|
|
60
|
+
#endif
|
|
61
|
+
|
|
62
|
+
//#define DEBUG 1
|
|
63
|
+
//#define TRUE 1
|
|
64
|
+
//#define FALSE 0
|
|
65
|
+
#define MAX_LEN 2048
|
|
66
|
+
#define HASH_LEN 20
|
|
67
|
+
#define ID_LEN 4
|
|
68
|
+
#define MAX_BENCH_OBJECTS 2
|
|
69
|
+
|
|
70
|
+
/* Index numbers for different hash functions. These are all implemented as SHA1(index || message). */
|
|
71
|
+
#define HASH_FUNCTION_ELEMENTS 0
|
|
72
|
+
#define HASH_FUNCTION_STR_TO_Zr_CRH 1
|
|
73
|
+
#define HASH_FUNCTION_Zr_TO_G1_ROM 2
|
|
74
|
+
#define HASH_FUNCTION_STRINGS 3
|
|
75
|
+
|
|
76
|
+
#ifdef DEBUG
|
|
77
|
+
#define debug_e(...) element_printf("DEBUG: "__VA_ARGS__)
|
|
78
|
+
#else
|
|
79
|
+
#define debug_e(...)
|
|
80
|
+
#endif
|
|
81
|
+
|
|
82
|
+
PyTypeObject ElementType;
|
|
83
|
+
PyTypeObject PairingType;
|
|
84
|
+
static PyObject *ElementError;
|
|
85
|
+
#define PyElement_Check(obj) PyObject_TypeCheck(obj, &ElementType)
|
|
86
|
+
#define PyPairing_Check(obj) PyObject_TypeCheck(obj, &PairingType)
|
|
87
|
+
|
|
88
|
+
PyMethodDef Element_methods[];
|
|
89
|
+
PyMethodDef pairing_methods[];
|
|
90
|
+
PyMemberDef Element_members[];
|
|
91
|
+
PyNumberMethods element_number;
|
|
92
|
+
|
|
93
|
+
#ifdef BENCHMARK_ENABLED
|
|
94
|
+
|
|
95
|
+
typedef struct {
|
|
96
|
+
PyObject_HEAD
|
|
97
|
+
int op_init;
|
|
98
|
+
int exp_ZR, exp_G1, exp_G2, exp_GT;
|
|
99
|
+
int mul_ZR, mul_G1, mul_G2, mul_GT;
|
|
100
|
+
int div_ZR, div_G1, div_G2, div_GT;
|
|
101
|
+
// optional
|
|
102
|
+
int add_ZR, add_G1, add_G2, add_GT;
|
|
103
|
+
int sub_ZR, sub_G1, sub_G2, sub_GT;
|
|
104
|
+
} Operations;
|
|
105
|
+
|
|
106
|
+
#endif
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
typedef struct {
|
|
110
|
+
PyObject_HEAD
|
|
111
|
+
int group_init;
|
|
112
|
+
uint8_t hash_id[ID_LEN+1];
|
|
113
|
+
#ifdef BENCHMARK_ENABLED
|
|
114
|
+
Operations *gBench;
|
|
115
|
+
Benchmark *dBench;
|
|
116
|
+
uint8_t bench_id[ID_LEN+1];
|
|
117
|
+
#endif
|
|
118
|
+
} Pairing;
|
|
119
|
+
|
|
120
|
+
typedef struct {
|
|
121
|
+
PyObject_HEAD
|
|
122
|
+
Pairing *pairing;
|
|
123
|
+
element_t e;
|
|
124
|
+
GroupType element_type;
|
|
125
|
+
int elem_initialized;
|
|
126
|
+
element_pp_t e_pp;
|
|
127
|
+
int elem_initPP;
|
|
128
|
+
} Element;
|
|
129
|
+
|
|
130
|
+
#define IS_PAIRING_OBJ_NULL(obj) /* do nothing */
|
|
131
|
+
// if(obj->pairing == NULL) {
|
|
132
|
+
// PyErr_SetString(ElementError, "pairing structure not initialized.");
|
|
133
|
+
// return NULL;
|
|
134
|
+
// }
|
|
135
|
+
|
|
136
|
+
#define Check_Elements(o1, o2) PyElement_Check(o1) && PyElement_Check(o2)
|
|
137
|
+
#define Check_Types2(o1, o2, lhs_o1, rhs_o2, longLHS_o1, longRHS_o2) \
|
|
138
|
+
if(PyElement_Check(o1)) { \
|
|
139
|
+
lhs_o1 = (Element *) o1; \
|
|
140
|
+
debug("found a lhs element.\n"); \
|
|
141
|
+
} \
|
|
142
|
+
else if(_PyLong_Check(o1)) { \
|
|
143
|
+
longLHS_o1 = TRUE; } \
|
|
144
|
+
\
|
|
145
|
+
if(PyElement_Check(o2)) { \
|
|
146
|
+
rhs_o2 = (Element *) o2; \
|
|
147
|
+
debug("found a rhs element.\n"); \
|
|
148
|
+
} \
|
|
149
|
+
else if(_PyLong_Check(o2)) { \
|
|
150
|
+
longRHS_o2 = TRUE; } \
|
|
151
|
+
|
|
152
|
+
#define set_element_ZR(obj, value) \
|
|
153
|
+
if(value == 0) \
|
|
154
|
+
element_set0(obj); \
|
|
155
|
+
else if(value == 1) \
|
|
156
|
+
element_set1(obj); \
|
|
157
|
+
else { element_set_si(obj, (signed int) value); }
|
|
158
|
+
|
|
159
|
+
#define VERIFY_GROUP(g) \
|
|
160
|
+
if(PyPairing_Check(g) && g->group_init == FALSE) { \
|
|
161
|
+
PyErr_SetString(ElementError, "Not a Pairing group object."); \
|
|
162
|
+
return NULL; }
|
|
163
|
+
|
|
164
|
+
PyObject *Element_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
|
|
165
|
+
int Element_init(Element *self, PyObject *args, PyObject *kwds);
|
|
166
|
+
PyObject *Element_print(Element* self);
|
|
167
|
+
PyObject *Element_call(Element *elem, PyObject *args, PyObject *kwds);
|
|
168
|
+
void Element_dealloc(Element* self);
|
|
169
|
+
Element *convertToZR(PyObject *LongObj, PyObject *elemObj);
|
|
170
|
+
|
|
171
|
+
PyObject *Apply_pairing(Element *self, PyObject *args);
|
|
172
|
+
PyObject *sha2_hash(Element *self, PyObject *args);
|
|
173
|
+
|
|
174
|
+
int exp_rule(GroupType lhs, GroupType rhs);
|
|
175
|
+
int mul_rule(GroupType lhs, GroupType rhs);
|
|
176
|
+
int add_rule(GroupType lhs, GroupType rhs);
|
|
177
|
+
int sub_rule(GroupType lhs, GroupType rhs);
|
|
178
|
+
int div_rule(GroupType lhs, GroupType rhs);
|
|
179
|
+
int pair_rule(GroupType lhs, GroupType rhs);
|
|
180
|
+
//void print_int(integer_t x, int base);
|
|
181
|
+
|
|
182
|
+
#if PY_MAJOR_VERSION < 3
|
|
183
|
+
#define ConvertToInt2(x, obj) \
|
|
184
|
+
PyObject *_longObj = PyNumber_Long(obj); \
|
|
185
|
+
longObjToInt(x, (PyLongObject *) _longObj); \
|
|
186
|
+
Py_DECREF(_longObj);
|
|
187
|
+
#else
|
|
188
|
+
#define ConvertToInt2(x, obj) \
|
|
189
|
+
longObjToInt(x, (PyLongObject *) obj);
|
|
190
|
+
#endif
|
|
191
|
+
|
|
192
|
+
#ifdef BENCHMARK_ENABLED
|
|
193
|
+
|
|
194
|
+
#define IsBenchSet(obj) obj->dBench != NULL
|
|
195
|
+
|
|
196
|
+
#define Update_Op(name, op_type, elem_type, bench_obj) \
|
|
197
|
+
Op_ ##name(op_type, elem_type, ZR, bench_obj) \
|
|
198
|
+
Op_ ##name(op_type, elem_type, G1, bench_obj) \
|
|
199
|
+
Op_ ##name(op_type, elem_type, G2, bench_obj) \
|
|
200
|
+
Op_ ##name(op_type, elem_type, GT, bench_obj) \
|
|
201
|
+
|
|
202
|
+
#define CLEAR_ALLDBENCH(bench_obj) \
|
|
203
|
+
CLEAR_DBENCH(bench_obj, ZR); \
|
|
204
|
+
CLEAR_DBENCH(bench_obj, G1); \
|
|
205
|
+
CLEAR_DBENCH(bench_obj, G2); \
|
|
206
|
+
CLEAR_DBENCH(bench_obj, GT); \
|
|
207
|
+
|
|
208
|
+
#else
|
|
209
|
+
|
|
210
|
+
#define UPDATE_BENCH(op_type, elem_type, bench_obj) /* ... */
|
|
211
|
+
// #define UPDATE_BENCHMARK(op_type, bench_obj) /* ... */
|
|
212
|
+
#define CLEAR_ALLDBENCH(bench_obj) /* ... */
|
|
213
|
+
#define GetField(count, type, group, bench_obj) /* ... */
|
|
214
|
+
#endif
|
|
215
|
+
|
|
216
|
+
#define EXIT_IF(check, msg) \
|
|
217
|
+
if(check) { \
|
|
218
|
+
PyErr_SetString(ElementError, msg); \
|
|
219
|
+
return NULL; }
|
|
220
|
+
|
|
221
|
+
#define EXITCODE_IF(check, msg, code) \
|
|
222
|
+
if(check) { \
|
|
223
|
+
PyErr_SetString(ElementError, msg); \
|
|
224
|
+
return Py_BuildValue("i", code); }
|
|
225
|
+
|
|
226
|
+
#define IS_SAME_GROUP(a, b) /* doesn't apply */
|
|
227
|
+
//#define IS_SAME_GROUP(a, b)
|
|
228
|
+
// if(strncmp((const char *) a->pairing->hash_id, (const char *) b->pairing->hash_id, ID_LEN) != 0) {
|
|
229
|
+
// PyErr_SetString(ElementError, "mixing group elements from different curves.");
|
|
230
|
+
// return NULL;
|
|
231
|
+
// }
|
|
232
|
+
|
|
233
|
+
#endif
|