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,307 @@
|
|
|
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 pairingmodule2.h
|
|
23
|
+
*
|
|
24
|
+
* @brief charm interface over MIRACL's pairing-based operations
|
|
25
|
+
*
|
|
26
|
+
* @author jakinye3@jhu.edu
|
|
27
|
+
* @remark this version of the pairing module uses the MIRACL library (www.shamus.ie).
|
|
28
|
+
* At the moment, only useful for academic purposes and should be treated as such.
|
|
29
|
+
* To build into Charm, you'll need to acquire the MIRACL source and compile with the
|
|
30
|
+
* build script located in the miracl dir. See the online documentation at charm-crypto.com
|
|
31
|
+
* for how to install.
|
|
32
|
+
*
|
|
33
|
+
************************************************************************/
|
|
34
|
+
|
|
35
|
+
#ifndef PAIRINGMODULE2_H
|
|
36
|
+
#define PAIRINGMODULE2_H
|
|
37
|
+
|
|
38
|
+
#ifndef PY_SSIZE_T_CLEAN
|
|
39
|
+
#define PY_SSIZE_T_CLEAN
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
/* Define MS_WIN64 to get correct PYLONG_BITS_IN_DIGIT on Windows. */
|
|
43
|
+
#if PY_MINOR_VERSION <= 10 && defined(_WIN64) && !defined(MS_WIN64)
|
|
44
|
+
#define MS_WIN64
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#include <Python.h>
|
|
48
|
+
#include <structmember.h>
|
|
49
|
+
|
|
50
|
+
#if PY_MINOR_VERSION <= 10
|
|
51
|
+
#include <longintrepr.h>
|
|
52
|
+
#else
|
|
53
|
+
#include <cpython/longintrepr.h> /* for conversions */
|
|
54
|
+
#endif
|
|
55
|
+
#include <stdlib.h>
|
|
56
|
+
#include "miracl_interface2.h"
|
|
57
|
+
#include <gmp.h>
|
|
58
|
+
#include <limits.h>
|
|
59
|
+
#include <sys/types.h>
|
|
60
|
+
#include <sys/stat.h>
|
|
61
|
+
#include <fcntl.h>
|
|
62
|
+
#include "benchmarkmodule.h"
|
|
63
|
+
#include <openssl/objects.h>
|
|
64
|
+
#include <openssl/rand.h>
|
|
65
|
+
#include <openssl/sha.h>
|
|
66
|
+
#include <openssl/evp.h>
|
|
67
|
+
#ifdef BENCHMARK_ENABLED
|
|
68
|
+
#include "benchmark_util.h"
|
|
69
|
+
#endif
|
|
70
|
+
|
|
71
|
+
/* supported pairing curves */
|
|
72
|
+
#define MNT160 80
|
|
73
|
+
#define BN256 128
|
|
74
|
+
#define SS512 80
|
|
75
|
+
#define SS1536 128
|
|
76
|
+
|
|
77
|
+
/* buf sizes */
|
|
78
|
+
#define BenchmarkIdentifier 1
|
|
79
|
+
#define BUF_MAX_LEN 512
|
|
80
|
+
#define HASH_LEN 20
|
|
81
|
+
#define ID_LEN 8
|
|
82
|
+
|
|
83
|
+
/* Index numbers for different hash functions. These are all implemented as SHA1(index || message). */
|
|
84
|
+
#define HASH_FUNCTION_STR_TO_Zr_CRH 0
|
|
85
|
+
#define HASH_FUNCTION_Zr_TO_G1_ROM 1
|
|
86
|
+
#define HASH_FUNCTION_ELEMENTS 2
|
|
87
|
+
#define HASH_FUNCTION_STRINGS 3
|
|
88
|
+
|
|
89
|
+
#ifdef DEBUG
|
|
90
|
+
#define debug_e(...) element_printf("DEBUG: "__VA_ARGS__)
|
|
91
|
+
#else
|
|
92
|
+
#define debug_e(...)
|
|
93
|
+
#endif
|
|
94
|
+
|
|
95
|
+
int pairing_init_finished;
|
|
96
|
+
PyTypeObject ElementType;
|
|
97
|
+
PyTypeObject PairingType;
|
|
98
|
+
static PyObject *ElementError;
|
|
99
|
+
|
|
100
|
+
#define PyElement_Check(obj) PyObject_TypeCheck(obj, &ElementType)
|
|
101
|
+
#define PyPairing_Check(obj) PyObject_TypeCheck(obj, &PairingType)
|
|
102
|
+
|
|
103
|
+
PyMethodDef Element_methods[];
|
|
104
|
+
PyMethodDef pairing_methods[];
|
|
105
|
+
PyMemberDef Element_members[];
|
|
106
|
+
PyNumberMethods element_number;
|
|
107
|
+
|
|
108
|
+
#ifdef BENCHMARK_ENABLED
|
|
109
|
+
typedef struct {
|
|
110
|
+
PyObject_HEAD
|
|
111
|
+
int op_init;
|
|
112
|
+
int exp_pyZR_t, exp_pyG1_t, exp_pyG2_t, exp_pyGT_t;
|
|
113
|
+
int mul_pyZR_t, mul_pyG1_t, mul_pyG2_t, mul_pyGT_t;
|
|
114
|
+
int div_pyZR_t, div_pyG1_t, div_pyG2_t, div_pyGT_t;
|
|
115
|
+
// optional
|
|
116
|
+
int add_pyZR_t, add_pyG1_t, add_pyG2_t, add_pyGT_t;
|
|
117
|
+
int sub_pyZR_t, sub_pyG1_t, sub_pyG2_t, sub_pyGT_t;
|
|
118
|
+
} Operations;
|
|
119
|
+
#endif
|
|
120
|
+
|
|
121
|
+
typedef struct {
|
|
122
|
+
PyObject_HEAD
|
|
123
|
+
pairing_t *pair_obj;
|
|
124
|
+
element_t *order;
|
|
125
|
+
int curve;
|
|
126
|
+
int group_init;
|
|
127
|
+
#ifdef BENCHMARK_ENABLED
|
|
128
|
+
Operations *gBench;
|
|
129
|
+
Benchmark *dBench;
|
|
130
|
+
uint8_t bench_id[ID_LEN+1];
|
|
131
|
+
#endif
|
|
132
|
+
} Pairing;
|
|
133
|
+
|
|
134
|
+
typedef struct {
|
|
135
|
+
PyObject_HEAD
|
|
136
|
+
Pairing *pairing;
|
|
137
|
+
element_t *e;
|
|
138
|
+
Group_t element_type;
|
|
139
|
+
int elem_initialized;
|
|
140
|
+
int elem_initPP;
|
|
141
|
+
} Element;
|
|
142
|
+
|
|
143
|
+
#define IS_PAIRING_OBJ_NULL(obj) \
|
|
144
|
+
if(obj->pairing == NULL) { \
|
|
145
|
+
PyErr_SetString(ElementError, "pairing structure not initialized."); \
|
|
146
|
+
return NULL; \
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* miracl macros to simplify interface */
|
|
150
|
+
#define print(msg, type, e) \
|
|
151
|
+
printf("%s", msg); \
|
|
152
|
+
element_printf(type, e); \
|
|
153
|
+
printf("\n");
|
|
154
|
+
|
|
155
|
+
#define element_init_hash(a) _init_hash(a->pair_obj)
|
|
156
|
+
#define element_add_str_hash(a, b, c) _element_add_str_hash(a->pair_obj, b, c)
|
|
157
|
+
#define element_add_to_hash(a) _element_add_to_hash(a->element_type, a->pairing->pair_obj, a->e)
|
|
158
|
+
#define element_finish_hash(a, t) a->e = finish_hash(t, a->pairing->pair_obj)
|
|
159
|
+
#define element_hash_to_key(a, b, c) _element_hash_key(a->pairing->pair_obj, a->element_type, a->e, b, c)
|
|
160
|
+
|
|
161
|
+
#define element_is(a, b) element_is_value(a->element_type, a->e, b)
|
|
162
|
+
#define element_add(c, a, b) _element_add(a->element_type, c->e, a->e, b->e, a->pairing->order)
|
|
163
|
+
#define element_sub(c, a, b) _element_sub(a->element_type, c->e, a->e, b->e, a->pairing->order)
|
|
164
|
+
#define element_mul(c, a, b) _element_mul(a->element_type, c->e, a->e, b->e, a->pairing->order)
|
|
165
|
+
#define element_mul_si(c, a, b) _element_mul_si(a->element_type, a->pairing->pair_obj, c->e, a->e, b, a->pairing->order)
|
|
166
|
+
#define element_mul_zn(c, a, b) _element_mul_zn(a->element_type, a->pairing->pair_obj, c->e, a->e, b->e, a->pairing->order)
|
|
167
|
+
// TODO: fix for -1 / ZR and similar operations
|
|
168
|
+
#define element_div(c, a, b) _element_div(a->element_type, c->e, a->e, b->e, a->pairing->order)
|
|
169
|
+
#define element_set(a, b) _element_set(a->pairing->curve, a->element_type, a->e, b->e);
|
|
170
|
+
#define element_set_raw(g, t, a, b) _element_set(g->curve, t, a, b);
|
|
171
|
+
#define element_setG1(c, a, b) _element_setG1(c->element_type, c->e, a->e, b->e);
|
|
172
|
+
|
|
173
|
+
#define element_set_si(a, b) \
|
|
174
|
+
if(a->element_type == pyZR_t) { _element_set_si(a->element_type, a->e, b); }
|
|
175
|
+
|
|
176
|
+
#define element_set_mpz(a, b) _element_set_mpz(a->element_type, a->e, b);
|
|
177
|
+
#define element_to_mpz(a, b) _element_to_mpz(pyZR_t, a->e, b);
|
|
178
|
+
#define object_to_mpz(a, b) _element_to_mpz(pyZR_t, a, b);
|
|
179
|
+
|
|
180
|
+
#define element_neg(a, b) \
|
|
181
|
+
a->e = _element_neg(a->element_type, b->e, b->pairing->order);
|
|
182
|
+
|
|
183
|
+
#define element_invert(a, b) \
|
|
184
|
+
_element_inv(b->element_type, b->pairing->pair_obj, b->e, a->e, b->pairing->order)
|
|
185
|
+
|
|
186
|
+
#define element_pow_zr(c, a, b) \
|
|
187
|
+
if (a->element_type != NONE_G) { \
|
|
188
|
+
c->e = _element_pow_zr(a->element_type, a->pairing->pair_obj, a->e, b->e, a->pairing->order); \
|
|
189
|
+
c->element_type = a->element_type; }
|
|
190
|
+
|
|
191
|
+
#define element_pow_int(c, a, b) \
|
|
192
|
+
c->e = _element_pow_zr_zr(pyZR_t, a->pairing->pair_obj, a->e, b, a->pairing->order); \
|
|
193
|
+
c->element_type = pyZR_t;
|
|
194
|
+
|
|
195
|
+
#define element_pp_init(b, a) \
|
|
196
|
+
b = _element_pp_init(a->pairing->pair_obj, a->element_type, a->e)
|
|
197
|
+
|
|
198
|
+
#define pairing_apply(c, a, b) \
|
|
199
|
+
if(a->pairing->curve == MNT || a->pairing->curve == BN || a->pairing->curve == SS) { \
|
|
200
|
+
c->e = _element_pairing(a->pairing->pair_obj, a->e, b->e); \
|
|
201
|
+
c->element_type = pyGT_t; \
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
#define element_prod_pairing(c, a, b, l) \
|
|
205
|
+
if(c->pairing->curve == MNT || c->pairing->curve == BN || c->pairing->curve == SS) { \
|
|
206
|
+
c->e = _element_prod_pairing(c->pairing->pair_obj, a, b, l); \
|
|
207
|
+
c->element_type = pyGT_t; }
|
|
208
|
+
|
|
209
|
+
#define element_from_hash(a, d, l) \
|
|
210
|
+
a->e = _element_from_hash(a->element_type, a->pairing->pair_obj, d, l);
|
|
211
|
+
|
|
212
|
+
#define element_after_hash(a, d, l) \
|
|
213
|
+
a->e = hash_then_map(a->element_type, a->pairing->pair_obj, d, l);
|
|
214
|
+
|
|
215
|
+
#define element_length_in_bytes(a) \
|
|
216
|
+
_element_length_in_bytes(a->pairing->curve, a->element_type, a->e);
|
|
217
|
+
|
|
218
|
+
#define element_to_bytes(d, a) \
|
|
219
|
+
_element_to_bytes(d, a->pairing->curve, a->element_type, a->e);
|
|
220
|
+
|
|
221
|
+
#define element_from_bytes(o, b) \
|
|
222
|
+
o->e = _element_from_bytes(o->pairing->curve, o->element_type, b);
|
|
223
|
+
|
|
224
|
+
#define element_cmp(a, b) _element_cmp(a->element_type, a->e, b->e);
|
|
225
|
+
#define element_length_to_str(a) _element_length_to_str(a->element_type, a->e);
|
|
226
|
+
#define element_to_str(d, a) _element_to_str(d, a->element_type, a->e);
|
|
227
|
+
#define element_init_G1 _element_init_G1
|
|
228
|
+
#define element_init_G2 _element_init_G2
|
|
229
|
+
#define element_init_GT(a) _element_init_GT(a->pair_obj);
|
|
230
|
+
#define check_membership(a) element_is_member(a->pairing->curve, a->element_type, a->pairing->pair_obj, a->e)
|
|
231
|
+
|
|
232
|
+
#define Check_Elements(o1, o2) PyElement_Check(o1) && PyElement_Check(o2)
|
|
233
|
+
|
|
234
|
+
#define Check_Types2(o1, o2, lhs_o1, rhs_o2, longLHS_o1, longRHS_o2) \
|
|
235
|
+
if(PyElement_Check(o1)) { \
|
|
236
|
+
lhs_o1 = (Element *) o1; \
|
|
237
|
+
debug("found a lhs element.\n"); \
|
|
238
|
+
} \
|
|
239
|
+
else if(_PyLong_Check(o1)) { \
|
|
240
|
+
longLHS_o1 = TRUE; } \
|
|
241
|
+
\
|
|
242
|
+
if(PyElement_Check(o2)) { \
|
|
243
|
+
rhs_o2 = (Element *) o2; \
|
|
244
|
+
debug("found a rhs element.\n"); \
|
|
245
|
+
} \
|
|
246
|
+
else if(_PyLong_Check(o2)) { \
|
|
247
|
+
longRHS_o2 = TRUE; } \
|
|
248
|
+
|
|
249
|
+
#define VERIFY_GROUP(g) \
|
|
250
|
+
if(PyPairing_Check(g) && g->group_init == FALSE) { \
|
|
251
|
+
PyErr_SetString(ElementError, "invalid group object specified."); \
|
|
252
|
+
return NULL; } \
|
|
253
|
+
if(g->pair_obj == NULL) { \
|
|
254
|
+
PyErr_SetString(ElementError, "pairing object is NULL."); \
|
|
255
|
+
return NULL; } \
|
|
256
|
+
|
|
257
|
+
PyObject *Element_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
|
|
258
|
+
int Element_init(Element *self, PyObject *args, PyObject *kwds);
|
|
259
|
+
PyObject *Element_print(Element* self);
|
|
260
|
+
PyObject *Element_call(Element *elem, PyObject *args, PyObject *kwds);
|
|
261
|
+
void Element_dealloc(Element* self);
|
|
262
|
+
Element *convertToZR(PyObject *LongObj, PyObject *elemObj);
|
|
263
|
+
|
|
264
|
+
PyObject *Apply_pairing(Element *self, PyObject *args);
|
|
265
|
+
PyObject *sha2_hash(Element *self, PyObject *args);
|
|
266
|
+
|
|
267
|
+
int exp_rule(Group_t lhs, Group_t rhs);
|
|
268
|
+
int mul_rule(Group_t lhs, Group_t rhs);
|
|
269
|
+
int add_rule(Group_t lhs, Group_t rhs);
|
|
270
|
+
int sub_rule(Group_t lhs, Group_t rhs);
|
|
271
|
+
int div_rule(Group_t lhs, Group_t rhs);
|
|
272
|
+
int pair_rule(Group_t lhs, Group_t rhs);
|
|
273
|
+
|
|
274
|
+
#ifdef BENCHMARK_ENABLED
|
|
275
|
+
|
|
276
|
+
#define Update_Op(name, op_type, elem_type, bench_obj) \
|
|
277
|
+
Op_ ##name(op_type, elem_type, pyZR_t, bench_obj) \
|
|
278
|
+
Op_ ##name(op_type, elem_type, pyG1_t, bench_obj) \
|
|
279
|
+
Op_ ##name(op_type, elem_type, pyG2_t, bench_obj) \
|
|
280
|
+
Op_ ##name(op_type, elem_type, pyGT_t, bench_obj) \
|
|
281
|
+
|
|
282
|
+
#define CLEAR_ALLDBENCH(bench_obj) \
|
|
283
|
+
CLEAR_DBENCH(bench_obj, pyZR_t); \
|
|
284
|
+
CLEAR_DBENCH(bench_obj, pyG1_t); \
|
|
285
|
+
CLEAR_DBENCH(bench_obj, pyG2_t); \
|
|
286
|
+
CLEAR_DBENCH(bench_obj, pyGT_t); \
|
|
287
|
+
|
|
288
|
+
#else
|
|
289
|
+
|
|
290
|
+
#define UPDATE_BENCH(op_type, elem_type, bench_obj) /* ... */
|
|
291
|
+
// #define UPDATE_BENCHMARK(op_type, bench_obj) /* ... */
|
|
292
|
+
#define CLEAR_ALLDBENCH(bench_obj) /* ... */
|
|
293
|
+
#define GetField(count, type, group, bench_obj) /* ... */
|
|
294
|
+
#endif
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
#define EXIT_IF(check, msg) \
|
|
298
|
+
if(check) { \
|
|
299
|
+
PyErr_SetString(ElementError, msg); \
|
|
300
|
+
return NULL; }
|
|
301
|
+
|
|
302
|
+
#define EXITCODE_IF(check, msg, code) \
|
|
303
|
+
if(check) { \
|
|
304
|
+
PyErr_SetString(ElementError, msg); \
|
|
305
|
+
return Py_BuildValue("i", code); }
|
|
306
|
+
|
|
307
|
+
#endif
|