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,241 @@
|
|
|
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 pairingmodule.h
|
|
23
|
+
*
|
|
24
|
+
* @brief charm interface over PBC library
|
|
25
|
+
*
|
|
26
|
+
* @author jakinye3@jhu.edu
|
|
27
|
+
*
|
|
28
|
+
************************************************************************/
|
|
29
|
+
|
|
30
|
+
#ifndef PAIRINGMODULE_H
|
|
31
|
+
#define PAIRINGMODULE_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(_WIN32) && !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
|
+
|
|
51
|
+
#include <stdlib.h>
|
|
52
|
+
#include <gmp.h>
|
|
53
|
+
#include <pbc/pbc.h>
|
|
54
|
+
#include <sys/types.h>
|
|
55
|
+
#include <sys/stat.h>
|
|
56
|
+
#include <fcntl.h>
|
|
57
|
+
#include "benchmarkmodule.h"
|
|
58
|
+
#include "base64.h"
|
|
59
|
+
#include <openssl/objects.h>
|
|
60
|
+
#include <openssl/rand.h>
|
|
61
|
+
#include <openssl/sha.h>
|
|
62
|
+
#include <openssl/evp.h>
|
|
63
|
+
#ifdef BENCHMARK_ENABLED
|
|
64
|
+
#include "benchmark_util.h"
|
|
65
|
+
#endif
|
|
66
|
+
|
|
67
|
+
//#define DEBUG 1
|
|
68
|
+
//#define TRUE 1
|
|
69
|
+
//#define FALSE 0
|
|
70
|
+
#define BYTE 8
|
|
71
|
+
#define MAX_LEN 2048
|
|
72
|
+
#define HASH_LEN SHA256_DIGEST_LENGTH
|
|
73
|
+
#define ID_LEN 8
|
|
74
|
+
#define MAX_BENCH_OBJECTS 2
|
|
75
|
+
// define element_types
|
|
76
|
+
enum Group {ZR = 0, G1, G2, GT, NONE_G};
|
|
77
|
+
typedef enum Group GroupType;
|
|
78
|
+
|
|
79
|
+
/* Index numbers for different hash functions. These are all implemented as SHA1(index || message). */
|
|
80
|
+
#define HASH_FUNCTION_ELEMENTS 0
|
|
81
|
+
#define HASH_FUNCTION_STR_TO_Zr_CRH 1
|
|
82
|
+
#define HASH_FUNCTION_Zr_TO_G1_ROM 2
|
|
83
|
+
#define HASH_FUNCTION_STRINGS 3
|
|
84
|
+
|
|
85
|
+
#ifdef DEBUG
|
|
86
|
+
#define debug_e(...) element_printf("DEBUG: "__VA_ARGS__)
|
|
87
|
+
#define debug_gmp(...) gmp_printf("DEBUG: "__VA_ARGS__)
|
|
88
|
+
#else
|
|
89
|
+
#define debug_e(...)
|
|
90
|
+
#define debug_gmp(...)
|
|
91
|
+
#endif
|
|
92
|
+
|
|
93
|
+
#define PrintPyRef(msg, o) printf("%s:" #msg " ref cnt = '%i'\n", __FUNCTION__, (int) Py_REFCNT(o));
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
PyTypeObject ElementType;
|
|
97
|
+
PyTypeObject PairingType;
|
|
98
|
+
static PyObject *ElementError;
|
|
99
|
+
#define PyElement_Check(obj) PyObject_TypeCheck(obj, &ElementType)
|
|
100
|
+
#define PyPairing_Check(obj) PyObject_TypeCheck(obj, &PairingType)
|
|
101
|
+
|
|
102
|
+
PyMethodDef Element_methods[];
|
|
103
|
+
PyMethodDef pairing_methods[];
|
|
104
|
+
PyMemberDef Element_members[];
|
|
105
|
+
PyNumberMethods element_number;
|
|
106
|
+
|
|
107
|
+
#ifdef BENCHMARK_ENABLED
|
|
108
|
+
|
|
109
|
+
typedef struct {
|
|
110
|
+
PyObject_HEAD
|
|
111
|
+
int op_init;
|
|
112
|
+
int exp_ZR, exp_G1, exp_G2, exp_GT;
|
|
113
|
+
int mul_ZR, mul_G1, mul_G2, mul_GT;
|
|
114
|
+
int div_ZR, div_G1, div_G2, div_GT;
|
|
115
|
+
// optional
|
|
116
|
+
int add_ZR, add_G1, add_G2, add_GT;
|
|
117
|
+
int sub_ZR, sub_G1, sub_G2, sub_GT;
|
|
118
|
+
} Operations;
|
|
119
|
+
|
|
120
|
+
#endif
|
|
121
|
+
|
|
122
|
+
typedef struct {
|
|
123
|
+
PyObject_HEAD
|
|
124
|
+
pbc_param_t p;
|
|
125
|
+
char *params;
|
|
126
|
+
char *param_buf;
|
|
127
|
+
pairing_t pair_obj;
|
|
128
|
+
int group_init;
|
|
129
|
+
uint8_t hash_id[ID_LEN+1];
|
|
130
|
+
#ifdef BENCHMARK_ENABLED
|
|
131
|
+
Operations *gBench;
|
|
132
|
+
Benchmark *dBench;
|
|
133
|
+
uint8_t bench_id[ID_LEN+1];
|
|
134
|
+
#endif
|
|
135
|
+
} Pairing;
|
|
136
|
+
|
|
137
|
+
typedef struct {
|
|
138
|
+
PyObject_HEAD
|
|
139
|
+
Pairing *pairing;
|
|
140
|
+
element_t e;
|
|
141
|
+
GroupType element_type;
|
|
142
|
+
int elem_initialized;
|
|
143
|
+
element_pp_t e_pp;
|
|
144
|
+
int elem_initPP;
|
|
145
|
+
} Element;
|
|
146
|
+
|
|
147
|
+
#define Check_Elements(o1, o2) PyElement_Check(o1) && PyElement_Check(o2)
|
|
148
|
+
#define Check_Types2(o1, o2, lhs_o1, rhs_o2, longLHS_o1, longRHS_o2) \
|
|
149
|
+
if(PyElement_Check(o1)) { \
|
|
150
|
+
lhs_o1 = (Element *) o1; \
|
|
151
|
+
debug("found a lhs element.\n"); \
|
|
152
|
+
} \
|
|
153
|
+
else if(_PyLong_Check(o1)) { \
|
|
154
|
+
longLHS_o1 = TRUE; } \
|
|
155
|
+
\
|
|
156
|
+
if(PyElement_Check(o2)) { \
|
|
157
|
+
rhs_o2 = (Element *) o2; \
|
|
158
|
+
debug("found a rhs element.\n"); \
|
|
159
|
+
} \
|
|
160
|
+
else if(_PyLong_Check(o2)) { \
|
|
161
|
+
longRHS_o2 = TRUE; } \
|
|
162
|
+
|
|
163
|
+
#define set_element_ZR(obj, value) \
|
|
164
|
+
if(value == 0) \
|
|
165
|
+
element_set0(obj); \
|
|
166
|
+
else if(value == 1) \
|
|
167
|
+
element_set1(obj); \
|
|
168
|
+
else { element_set_si(obj, (signed int) value); }
|
|
169
|
+
|
|
170
|
+
#define VERIFY_GROUP(g) \
|
|
171
|
+
if(PyPairing_Check(g) && g->group_init == FALSE) { \
|
|
172
|
+
PyErr_SetString(ElementError, "Not a Pairing group object."); \
|
|
173
|
+
return NULL; } \
|
|
174
|
+
if(g->pair_obj == NULL) { \
|
|
175
|
+
PyErr_SetString(ElementError, "Pairing object not initialized."); \
|
|
176
|
+
return NULL; } \
|
|
177
|
+
|
|
178
|
+
PyObject *Element_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
|
|
179
|
+
int Element_init(Element *self, PyObject *args, PyObject *kwds);
|
|
180
|
+
PyObject *Element_print(Element* self);
|
|
181
|
+
PyObject *Element_call(Element *elem, PyObject *args, PyObject *kwds);
|
|
182
|
+
void Element_dealloc(Element* self);
|
|
183
|
+
Element *convertToZR(PyObject *LongObj, PyObject *elemObj);
|
|
184
|
+
|
|
185
|
+
PyObject *Apply_pairing(PyObject *self, PyObject *args);
|
|
186
|
+
PyObject *sha2_hash(Element *self, PyObject *args);
|
|
187
|
+
|
|
188
|
+
int exp_rule(GroupType lhs, GroupType rhs);
|
|
189
|
+
int mul_rule(GroupType lhs, GroupType rhs);
|
|
190
|
+
int add_rule(GroupType lhs, GroupType rhs);
|
|
191
|
+
int sub_rule(GroupType lhs, GroupType rhs);
|
|
192
|
+
int div_rule(GroupType lhs, GroupType rhs);
|
|
193
|
+
int pair_rule(GroupType lhs, GroupType rhs);
|
|
194
|
+
void print_mpz(mpz_t x, int base);
|
|
195
|
+
|
|
196
|
+
#ifdef BENCHMARK_ENABLED
|
|
197
|
+
|
|
198
|
+
#define IS_SAME_GROUP(a, b) \
|
|
199
|
+
if(strncmp((const char *) a->pairing->hash_id, (const char *) b->pairing->hash_id, ID_LEN) != 0) { \
|
|
200
|
+
PyErr_SetString(ElementError, "mixing group elements from different curves."); \
|
|
201
|
+
return NULL; \
|
|
202
|
+
} \
|
|
203
|
+
if(strncmp((const char *) a->pairing->bench_id, (const char *) b->pairing->bench_id, ID_LEN) != 0) { \
|
|
204
|
+
PyErr_SetString(ElementError, "mixing benchmark objects not allowed."); \
|
|
205
|
+
return NULL; \
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
#define IsBenchSet(obj) obj->dBench != NULL
|
|
209
|
+
|
|
210
|
+
#define Update_Op(name, op_type, elem_type, bench_obj) \
|
|
211
|
+
Op_ ##name(op_type, elem_type, ZR, bench_obj) \
|
|
212
|
+
Op_ ##name(op_type, elem_type, G1, bench_obj) \
|
|
213
|
+
Op_ ##name(op_type, elem_type, G2, bench_obj) \
|
|
214
|
+
Op_ ##name(op_type, elem_type, GT, bench_obj) \
|
|
215
|
+
|
|
216
|
+
#define CLEAR_ALLDBENCH(bench_obj) \
|
|
217
|
+
CLEAR_DBENCH(bench_obj, ZR); \
|
|
218
|
+
CLEAR_DBENCH(bench_obj, G1); \
|
|
219
|
+
CLEAR_DBENCH(bench_obj, G2); \
|
|
220
|
+
CLEAR_DBENCH(bench_obj, GT); \
|
|
221
|
+
|
|
222
|
+
#else
|
|
223
|
+
|
|
224
|
+
#define IS_SAME_GROUP(a, b) \
|
|
225
|
+
if(strncmp((const char *) a->pairing->hash_id, (const char *) b->pairing->hash_id, ID_LEN) != 0) { \
|
|
226
|
+
PyErr_SetString(PyExc_ValueError, "mixing group elements from different curves."); \
|
|
227
|
+
return NULL; \
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
#define UPDATE_BENCH(op_type, elem_type, bench_obj) /* ... */
|
|
231
|
+
// #define UPDATE_BENCHMARK(op_type, bench_obj) /* ... */
|
|
232
|
+
#define CLEAR_ALLDBENCH(bench_obj) /* ... */
|
|
233
|
+
#define GetField(count, type, group, bench_obj) /* ... */
|
|
234
|
+
#endif
|
|
235
|
+
|
|
236
|
+
#define EXIT_IF(check, msg) \
|
|
237
|
+
if(check) { \
|
|
238
|
+
PyErr_SetString(ElementError, msg); \
|
|
239
|
+
return NULL; }
|
|
240
|
+
|
|
241
|
+
#endif
|