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,145 @@
|
|
|
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 integermodule.h
|
|
23
|
+
*
|
|
24
|
+
* @brief charm interface over GMP multi-precision integers
|
|
25
|
+
*
|
|
26
|
+
* @author jakinye3@jhu.edu
|
|
27
|
+
*
|
|
28
|
+
************************************************************************/
|
|
29
|
+
|
|
30
|
+
#ifndef INTEGERMODULE_H
|
|
31
|
+
#define INTEGERMODULE_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 <stdio.h>
|
|
44
|
+
#include <string.h>
|
|
45
|
+
#include <structmember.h>
|
|
46
|
+
|
|
47
|
+
#if PY_MINOR_VERSION <= 10
|
|
48
|
+
#include <longintrepr.h>
|
|
49
|
+
#else
|
|
50
|
+
#include <cpython/longintrepr.h> /* for conversions */
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
#include <math.h>
|
|
54
|
+
#include <string.h>
|
|
55
|
+
#include <gmp.h>
|
|
56
|
+
#include "benchmarkmodule.h"
|
|
57
|
+
#include "base64.h"
|
|
58
|
+
/* used to initialize the RNG */
|
|
59
|
+
#include <openssl/objects.h>
|
|
60
|
+
#include <openssl/rand.h>
|
|
61
|
+
#include <openssl/bn.h>
|
|
62
|
+
#include <openssl/sha.h>
|
|
63
|
+
#include <openssl/evp.h>
|
|
64
|
+
|
|
65
|
+
/* integermath */
|
|
66
|
+
#define MAX_RUN 25
|
|
67
|
+
#define HASH_LEN SHA256_DIGEST_LENGTH
|
|
68
|
+
#define MSG_LEN 128
|
|
69
|
+
|
|
70
|
+
#define ErrorMsg(msg) \
|
|
71
|
+
PyErr_SetString(IntegerError, msg); \
|
|
72
|
+
return NULL;
|
|
73
|
+
|
|
74
|
+
#define Convert_Types(left, right, lhs, rhs, foundLHS, foundRHS, lhs_mpz, rhs_mpz, errorOccured) \
|
|
75
|
+
if(PyInteger_Check(left)) { \
|
|
76
|
+
lhs = (Integer *) left; } \
|
|
77
|
+
else if(PyLong_Check(left)) { \
|
|
78
|
+
longObjToMPZ(lhs_mpz, left); \
|
|
79
|
+
foundLHS = TRUE; } \
|
|
80
|
+
else { errorOccured = TRUE; } \
|
|
81
|
+
\
|
|
82
|
+
if(PyInteger_Check(right)) { \
|
|
83
|
+
rhs = (Integer *) right; } \
|
|
84
|
+
else if(PyLong_Check(right)) { \
|
|
85
|
+
longObjToMPZ(rhs_mpz, right); \
|
|
86
|
+
foundRHS = TRUE; } \
|
|
87
|
+
else { errorOccured = TRUE; }
|
|
88
|
+
|
|
89
|
+
#define Convert_Types2(o1, o2, lhs, rhs, foundLHS, foundRHS) \
|
|
90
|
+
if(PyInteger_Check(o1)) { \
|
|
91
|
+
lhs = (Integer *) o1; } \
|
|
92
|
+
else if(PyLong_Check(o1)) { \
|
|
93
|
+
foundLHS = TRUE; } \
|
|
94
|
+
else { ErrorMsg("invalid left operand type."); } \
|
|
95
|
+
\
|
|
96
|
+
if(PyInteger_Check(o2)) { \
|
|
97
|
+
rhs = (Integer *) o2; } \
|
|
98
|
+
else if(PyLong_Check(o2)) { \
|
|
99
|
+
foundRHS = TRUE; } \
|
|
100
|
+
else { ErrorMsg("invalid right operand type."); }
|
|
101
|
+
|
|
102
|
+
//#ifdef BENCHMARK_ENABLED
|
|
103
|
+
//static Benchmark *dBench;
|
|
104
|
+
//#endif
|
|
105
|
+
|
|
106
|
+
/* Index numbers for different hash functions. These are all implemented as SHA1(index || message). */
|
|
107
|
+
#define HASH_FUNCTION_STR_TO_Zr_CRH 0
|
|
108
|
+
#define HASH_FUNCTION_Zr_TO_G1_ROM 1
|
|
109
|
+
#define HASH_FUNCTION_KEM_DERIVE 2
|
|
110
|
+
#define RAND_MAX_BYTES 2048
|
|
111
|
+
|
|
112
|
+
// declare global gmp_randstate_t state object. Initialize based on /dev/random if linux
|
|
113
|
+
// then make available to all random functions
|
|
114
|
+
PyTypeObject IntegerType;
|
|
115
|
+
static PyObject *IntegerError;
|
|
116
|
+
#define PyInteger_Check(obj) PyObject_TypeCheck(obj, &IntegerType)
|
|
117
|
+
#define PyInteger_Init(obj1, obj2) obj1->initialized && obj2->initialized
|
|
118
|
+
|
|
119
|
+
typedef struct {
|
|
120
|
+
PyObject_HEAD
|
|
121
|
+
mpz_t m;
|
|
122
|
+
mpz_t e;
|
|
123
|
+
int initialized;
|
|
124
|
+
} Integer;
|
|
125
|
+
|
|
126
|
+
PyMethodDef Integer_methods[];
|
|
127
|
+
PyNumberMethods integer_number;
|
|
128
|
+
|
|
129
|
+
void Integer_dealloc(Integer* self);
|
|
130
|
+
PyObject *Integer_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
|
|
131
|
+
int Integer_init(Integer *self, PyObject *args, PyObject *kwds);
|
|
132
|
+
PyObject *Integer_print(Integer *self);
|
|
133
|
+
Integer *createNewInteger(void);
|
|
134
|
+
void print_mpz(mpz_t x, int base);
|
|
135
|
+
void print_bn_dec(const BIGNUM *bn);
|
|
136
|
+
|
|
137
|
+
#define EXIT_IF(check, msg) \
|
|
138
|
+
if(check) { \
|
|
139
|
+
PyErr_SetString(IntegerError, msg); \
|
|
140
|
+
return NULL; }
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
#endif
|
|
144
|
+
|
|
145
|
+
|
|
Binary file
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""Type stubs for charm.core.math.integer C extension module."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import overload
|
|
6
|
+
|
|
7
|
+
class Element:
|
|
8
|
+
"""Integer element, optionally with modulus for modular arithmetic."""
|
|
9
|
+
|
|
10
|
+
@overload
|
|
11
|
+
def __init__(self, number: int) -> None: ...
|
|
12
|
+
@overload
|
|
13
|
+
def __init__(self, number: Element) -> None: ...
|
|
14
|
+
@overload
|
|
15
|
+
def __init__(self, number: int, modulus: int) -> None: ...
|
|
16
|
+
@overload
|
|
17
|
+
def __init__(self, number: int, modulus: Element) -> None: ...
|
|
18
|
+
@overload
|
|
19
|
+
def __init__(self, number: Element, modulus: int) -> None: ...
|
|
20
|
+
@overload
|
|
21
|
+
def __init__(self, number: Element, modulus: Element) -> None: ...
|
|
22
|
+
def set(self, other: Element) -> bool: ...
|
|
23
|
+
def isCoPrime(self, other: Element | int) -> bool: ...
|
|
24
|
+
def isCongruent(self, a: int, n: int) -> bool: ...
|
|
25
|
+
|
|
26
|
+
# Arithmetic operations
|
|
27
|
+
def __add__(self, other: Element | int) -> Element: ...
|
|
28
|
+
def __radd__(self, other: Element | int) -> Element: ...
|
|
29
|
+
def __sub__(self, other: Element | int) -> Element: ...
|
|
30
|
+
def __rsub__(self, other: Element | int) -> Element: ...
|
|
31
|
+
def __mul__(self, other: Element | int) -> Element: ...
|
|
32
|
+
def __rmul__(self, other: Element | int) -> Element: ...
|
|
33
|
+
def __truediv__(self, other: Element | int) -> Element: ...
|
|
34
|
+
def __rtruediv__(self, other: Element | int) -> Element: ...
|
|
35
|
+
def __mod__(self, other: Element | int) -> Element: ...
|
|
36
|
+
def __rmod__(self, other: Element | int) -> Element: ...
|
|
37
|
+
def __pow__(self, other: Element | int) -> Element: ...
|
|
38
|
+
def __rpow__(self, other: Element | int) -> Element: ...
|
|
39
|
+
def __neg__(self) -> Element: ...
|
|
40
|
+
def __invert__(self) -> Element: ...
|
|
41
|
+
def __xor__(self, other: Element | int) -> Element: ...
|
|
42
|
+
def __rxor__(self, other: Element | int) -> Element: ...
|
|
43
|
+
|
|
44
|
+
# Comparison operations
|
|
45
|
+
def __eq__(self, other: object) -> bool: ...
|
|
46
|
+
def __ne__(self, other: object) -> bool: ...
|
|
47
|
+
def __lt__(self, other: Element | int) -> bool: ...
|
|
48
|
+
def __le__(self, other: Element | int) -> bool: ...
|
|
49
|
+
def __gt__(self, other: Element | int) -> bool: ...
|
|
50
|
+
def __ge__(self, other: Element | int) -> bool: ...
|
|
51
|
+
|
|
52
|
+
# Conversion
|
|
53
|
+
def __int__(self) -> int: ...
|
|
54
|
+
def __str__(self) -> str: ...
|
|
55
|
+
def __repr__(self) -> str: ...
|
|
56
|
+
def __hash__(self) -> int: ...
|
|
57
|
+
|
|
58
|
+
# Module-level functions
|
|
59
|
+
def randomBits(bits: int) -> Element: ...
|
|
60
|
+
def random(n: Element | int) -> Element: ...
|
|
61
|
+
def randomPrime(bits: int) -> Element: ...
|
|
62
|
+
def isPrime(n: Element | int) -> bool: ...
|
|
63
|
+
def encode(message: bytes, modulus: Element | int) -> Element: ...
|
|
64
|
+
def decode(element: Element) -> bytes: ...
|
|
65
|
+
def hashInt(value: bytes, modulus: Element | int) -> Element: ...
|
|
66
|
+
def bitsize(n: Element | int) -> int: ...
|
|
67
|
+
def legendre(a: Element | int, p: Element | int) -> int: ...
|
|
68
|
+
def gcd(a: Element | int, b: Element | int) -> Element: ...
|
|
69
|
+
def lcm(a: Element | int, b: Element | int) -> Element: ...
|
|
70
|
+
def serialize(element: Element) -> bytes: ...
|
|
71
|
+
def deserialize(data: bytes) -> Element: ...
|
|
72
|
+
def int2Bytes(element: Element) -> bytes: ...
|
|
73
|
+
def toInt(element: Element) -> Element: ...
|
|
74
|
+
def getMod(element: Element) -> Element: ...
|
|
75
|
+
def reduce(element: Element) -> Element: ...
|
|
76
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
/* auto-generated configuration */
|
|
3
|
+
//#define BUILD_MNT_CURVE 0
|
|
4
|
+
//#define BUILD_BN_CURVE 0
|
|
5
|
+
#define PAD_SIZE 2 // 2 bytes for zero padding on deserialization
|
|
6
|
+
|
|
7
|
+
#if BUILD_MNT_CURVE == 1
|
|
8
|
+
// k=6 MNT curve
|
|
9
|
+
#define MR_PAIRING_MNT
|
|
10
|
+
#define ASYMMETRIC 1
|
|
11
|
+
#define AES_SECURITY 80 // for MNT-160
|
|
12
|
+
#define BIG_SIZE 20
|
|
13
|
+
#define MAX_LEN BIG_SIZE + PAD_SIZE // 20 bytes necessary for representation of ints
|
|
14
|
+
|
|
15
|
+
#include "pairing_3.h"
|
|
16
|
+
|
|
17
|
+
#elif BUILD_BN_CURVE == 1
|
|
18
|
+
|
|
19
|
+
#define MR_PAIRING_BN
|
|
20
|
+
#define ASYMMETRIC 1
|
|
21
|
+
#define AES_SECURITY 128 // for BN-256
|
|
22
|
+
#define BIG_SIZE 32
|
|
23
|
+
#define MAX_LEN BIG_SIZE + PAD_SIZE // 32 bytes necessary, 2 for zero padding on deserialization
|
|
24
|
+
|
|
25
|
+
#include "pairing_3.h"
|
|
26
|
+
|
|
27
|
+
#elif BUILD_SS_CURVE == 1
|
|
28
|
+
// super-singular curve over GF(P) where k=2 (large prime)
|
|
29
|
+
#define MR_PAIRING_SSP
|
|
30
|
+
#define ASYMMETRIC 0
|
|
31
|
+
#define AES_SECURITY 80 // for SS512, 128 for SS1536
|
|
32
|
+
#define BIG_SIZE 64
|
|
33
|
+
#define MAX_LEN BIG_SIZE + PAD_SIZE // 64 bytes necessary, 2 for zero padding on deserialization
|
|
34
|
+
#include "pairing_1.h"
|
|
35
|
+
|
|
36
|
+
#endif
|
|
37
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
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 miracl_interface.h
|
|
23
|
+
*
|
|
24
|
+
* @brief charm interface over MIRACL's pairing-based crypto C++ classes
|
|
25
|
+
*
|
|
26
|
+
* @author jakinye3@jhu.edu
|
|
27
|
+
*
|
|
28
|
+
************************************************************************/
|
|
29
|
+
|
|
30
|
+
#include <gmp.h>
|
|
31
|
+
|
|
32
|
+
typedef void pairing_t;
|
|
33
|
+
typedef void element_t;
|
|
34
|
+
|
|
35
|
+
#ifdef __cplusplus
|
|
36
|
+
extern "C" {
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
enum Curve {MNT, SS, BLS, NONE_C}; // control what type of curve we are dealing with
|
|
40
|
+
enum Group {ZR_t = 0, G1_t, G2_t, GT_t, NONE_G}; // clashes with types in pairing_3.h
|
|
41
|
+
typedef enum Group Group_t;
|
|
42
|
+
typedef enum Curve Curve_t;
|
|
43
|
+
|
|
44
|
+
#define TRUE 1
|
|
45
|
+
#define FALSE 0
|
|
46
|
+
#define CF 2 // Co-factor = 2 in MNT curves
|
|
47
|
+
#define MAX_LEN 256
|
|
48
|
+
#define LEN_BITS 4
|
|
49
|
+
#define aes_block_size 16
|
|
50
|
+
|
|
51
|
+
pairing_t *pairing_init(int securitylevel);
|
|
52
|
+
void pairing_clear(pairing_t *pairing);
|
|
53
|
+
// to clean up the mriacl system completely.NOTE: Make sure miracl PFC classes are patched.
|
|
54
|
+
void miracl_clean();
|
|
55
|
+
element_t *order(pairing_t *pairing);
|
|
56
|
+
|
|
57
|
+
element_t *element_init_ZR(int value);
|
|
58
|
+
element_t *_element_init_G1(void);
|
|
59
|
+
element_t *_element_init_G2(void);
|
|
60
|
+
element_t *_element_init_GT(const pairing_t *pairing);
|
|
61
|
+
void element_random(Group_t type, const pairing_t *pairing, element_t *e);
|
|
62
|
+
void element_printf(Group_t type, const element_t *e);
|
|
63
|
+
int _element_length_to_str(Group_t type, const element_t *e);
|
|
64
|
+
int _element_to_str(unsigned char **data_str, Group_t type, const element_t *e);
|
|
65
|
+
|
|
66
|
+
void _element_add(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a + b
|
|
67
|
+
void _element_sub(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = (a - b) % o
|
|
68
|
+
void _element_mul(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o);
|
|
69
|
+
void _element_mul_si(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const signed long int b, const element_t *o);
|
|
70
|
+
void _element_mul_zn(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const element_t *b, const element_t *o);
|
|
71
|
+
void _element_div(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a / b
|
|
72
|
+
|
|
73
|
+
// c = a (G1, G2 or GT) ^ b (ZR)
|
|
74
|
+
element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, element_t *a, element_t *b, element_t *o);
|
|
75
|
+
//element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, const element_t *a, const element_t *b, const element_t *o);
|
|
76
|
+
element_t *_element_pow_zr_zr(Group_t type, const pairing_t *pairing, const element_t *a, const int b, const element_t *o);
|
|
77
|
+
element_t *_element_neg(Group_t type, const element_t *e, const element_t *o);
|
|
78
|
+
//void _element_inv(Group_t type, const element_t *a, element_t *b, element_t *o);
|
|
79
|
+
void _element_inv(Group_t type, const pairing_t *pairing, const element_t *a, element_t *b, element_t *o);
|
|
80
|
+
|
|
81
|
+
element_t *hash_then_map(Group_t type, const pairing_t *pairing, char *data, int len);
|
|
82
|
+
element_t *_element_from_hash(Group_t type, const pairing_t *pairing, void *data, int len);
|
|
83
|
+
|
|
84
|
+
int element_is_member(Curve_t ctype, Group_t type, const pairing_t *pairing, element_t *e);
|
|
85
|
+
int element_is_value(Group_t type, element_t *n, int value);
|
|
86
|
+
|
|
87
|
+
int _element_cmp(Group_t type, element_t *a, element_t *b);
|
|
88
|
+
void _element_set_si(Group_t type, element_t *dst, const signed long int src);
|
|
89
|
+
int _element_setG1(Group_t type, element_t *c, const element_t *a, const element_t *b);
|
|
90
|
+
void _element_set(Curve_t ctype, Group_t type, element_t *dst, const element_t *src);
|
|
91
|
+
char *print_mpz(mpz_t x, int base);
|
|
92
|
+
void _element_set_mpz(Group_t type, element_t *dst, mpz_t src);
|
|
93
|
+
void _element_to_mpz(Group_t type, element_t *src, mpz_t dst);
|
|
94
|
+
element_t *_element_pairing_type3(const pairing_t *pairing, const element_t *in1, const element_t *in2);
|
|
95
|
+
element_t *_element_prod_pairing_type3(const pairing_t *pairing, const element_t **in1, const element_t **in2, int length);
|
|
96
|
+
|
|
97
|
+
// I/O functions start
|
|
98
|
+
int _element_length_in_bytes(Curve_t ctype, Group_t type, element_t *e);
|
|
99
|
+
int _element_to_bytes(unsigned char *data, Curve_t ctype, Group_t type, element_t *e);
|
|
100
|
+
element_t *_element_from_bytes(Curve_t ctype, Group_t type, unsigned char *data);
|
|
101
|
+
// I/O functiond end
|
|
102
|
+
|
|
103
|
+
void element_delete(Group_t type, element_t *e);
|
|
104
|
+
|
|
105
|
+
void _init_hash(const pairing_t *pairing);
|
|
106
|
+
void _element_add_str_hash(const pairing_t *pairing, void *data, int len);
|
|
107
|
+
void _element_add_to_hash(Group_t type, const pairing_t *pairing, const element_t *e);
|
|
108
|
+
element_t *finish_hash(Group_t type, const pairing_t *pairing);
|
|
109
|
+
|
|
110
|
+
void _element_hash_key(const pairing_t *pairing, Group_t type, element_t *e, void *data, int len);
|
|
111
|
+
|
|
112
|
+
int aes_encrypt(char *key, char *message, int len, char **out);
|
|
113
|
+
int aes_decrypt(char *key, char *ciphertext, int len, char **out);
|
|
114
|
+
|
|
115
|
+
#ifdef __cplusplus
|
|
116
|
+
}
|
|
117
|
+
#endif
|
|
118
|
+
|
|
@@ -0,0 +1,126 @@
|
|
|
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 miracl_interface.h
|
|
23
|
+
*
|
|
24
|
+
* @brief charm interface over MIRACL's pairing-based crypto C++ classes
|
|
25
|
+
*
|
|
26
|
+
* @author jakinye3@jhu.edu
|
|
27
|
+
*
|
|
28
|
+
************************************************************************/
|
|
29
|
+
#include <gmp.h>
|
|
30
|
+
|
|
31
|
+
typedef void pairing_t;
|
|
32
|
+
typedef void element_t;
|
|
33
|
+
|
|
34
|
+
#ifdef __cplusplus
|
|
35
|
+
extern "C" {
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
enum Curve {MNT, BN, SS, NONE_C}; // control what type of curve we are dealing with
|
|
39
|
+
#if (BUILD_MNT_CURVE == 1 || BUILD_BN_CURVE == 1)
|
|
40
|
+
enum Group {pyZR_t = 0, pyG1_t, pyG2_t, pyGT_t, NONE_G}; // clashes with types in pairing_3.h
|
|
41
|
+
#else
|
|
42
|
+
enum Group {pyZR_t = 0, pyG1_t, pyGT_t, NONE_G};
|
|
43
|
+
#define pyG2_t pyG1_t // for backwards compatibility
|
|
44
|
+
#define G2 G1
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
typedef enum Group Group_t;
|
|
48
|
+
typedef enum Curve Curve_t;
|
|
49
|
+
|
|
50
|
+
#define TRUE 1
|
|
51
|
+
#define FALSE 0
|
|
52
|
+
#define CF 2 // Co-factor = 2 in MNT curves
|
|
53
|
+
#define LEN_BITS 4
|
|
54
|
+
#define aes_block_size 16
|
|
55
|
+
|
|
56
|
+
pairing_t *pairing_init(int securitylevel);
|
|
57
|
+
void pairing_clear(pairing_t *pairing);
|
|
58
|
+
// to clean up the mriacl system completely.NOTE: Make sure miracl PFC classes are patched.
|
|
59
|
+
void miracl_clean(void);
|
|
60
|
+
element_t *order(pairing_t *pairing);
|
|
61
|
+
element_t *element_gt(const pairing_t *pairing);
|
|
62
|
+
|
|
63
|
+
element_t *element_init_ZR(int value);
|
|
64
|
+
element_t *_element_init_G1(void);
|
|
65
|
+
element_t *_element_init_G2(void);
|
|
66
|
+
element_t *_element_init_GT(const pairing_t *pairing);
|
|
67
|
+
int _element_pp_init(const pairing_t *pairing, Group_t type, element_t *e);
|
|
68
|
+
void element_random(Group_t type, const pairing_t *pairing, element_t *e);
|
|
69
|
+
void element_printf(Group_t type, const element_t *e);
|
|
70
|
+
int _element_length_to_str(Group_t type, const element_t *e);
|
|
71
|
+
int _element_to_str(unsigned char **data_str, Group_t type, const element_t *e);
|
|
72
|
+
|
|
73
|
+
void _element_add(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a + b
|
|
74
|
+
void _element_sub(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = (a - b) % o
|
|
75
|
+
void _element_mul(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o);
|
|
76
|
+
void _element_mul_si(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const signed long int b, const element_t *o);
|
|
77
|
+
void _element_mul_zn(Group_t type, const pairing_t *pairing, element_t *c, const element_t *a, const element_t *b, const element_t *o);
|
|
78
|
+
void _element_div(Group_t type, element_t *c, const element_t *a, const element_t *b, const element_t *o); // c = a / b
|
|
79
|
+
|
|
80
|
+
// c = a (G1, G2 or GT) ^ b (ZR)
|
|
81
|
+
element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, element_t *a, element_t *b, element_t *o);
|
|
82
|
+
//element_t *_element_pow_zr(Group_t type, const pairing_t *pairing, const element_t *a, const element_t *b, const element_t *o);
|
|
83
|
+
element_t *_element_pow_zr_zr(Group_t type, const pairing_t *pairing, const element_t *a, const int b, const element_t *o);
|
|
84
|
+
element_t *_element_neg(Group_t type, const element_t *e, const element_t *o);
|
|
85
|
+
//void _element_inv(Group_t type, const element_t *a, element_t *b, element_t *o);
|
|
86
|
+
void _element_inv(Group_t type, const pairing_t *pairing, const element_t *a, element_t *b, element_t *o);
|
|
87
|
+
|
|
88
|
+
element_t *hash_then_map(Group_t type, const pairing_t *pairing, char *data, int len);
|
|
89
|
+
element_t *_element_from_hash(Group_t type, const pairing_t *pairing, void *data, int len);
|
|
90
|
+
|
|
91
|
+
int element_is_member(Curve_t ctype, Group_t type, const pairing_t *pairing, element_t *e);
|
|
92
|
+
int element_is_value(Group_t type, element_t *n, int value);
|
|
93
|
+
|
|
94
|
+
int _element_cmp(Group_t type, element_t *a, element_t *b);
|
|
95
|
+
void _element_set_si(Group_t type, element_t *dst, const signed long int src);
|
|
96
|
+
int _element_setG1(Group_t type, element_t *c, const element_t *a, const element_t *b);
|
|
97
|
+
void _element_set(Curve_t ctype, Group_t type, element_t *dst, const element_t *src);
|
|
98
|
+
char *print_mpz(mpz_t x, int base);
|
|
99
|
+
void _element_set_mpz(Group_t type, element_t *dst, mpz_t src);
|
|
100
|
+
void _element_to_mpz(Group_t type, element_t *src, mpz_t dst);
|
|
101
|
+
|
|
102
|
+
element_t *_element_pairing(const pairing_t *pairing, const element_t *in1, const element_t *in2);
|
|
103
|
+
element_t *_element_prod_pairing(const pairing_t *pairing, const element_t **in1, const element_t **in2, int length);
|
|
104
|
+
|
|
105
|
+
// I/O functions start
|
|
106
|
+
int _element_length_in_bytes(Curve_t ctype, Group_t type, element_t *e);
|
|
107
|
+
int _element_to_bytes(unsigned char *data, Curve_t ctype, Group_t type, element_t *e);
|
|
108
|
+
element_t *_element_from_bytes(Curve_t ctype, Group_t type, unsigned char *data);
|
|
109
|
+
// I/O functiond end
|
|
110
|
+
|
|
111
|
+
void element_delete(Group_t type, element_t *e);
|
|
112
|
+
|
|
113
|
+
void _init_hash(const pairing_t *pairing);
|
|
114
|
+
void _element_add_str_hash(const pairing_t *pairing, char *data, int len);
|
|
115
|
+
void _element_add_to_hash(Group_t type, const pairing_t *pairing, const element_t *e);
|
|
116
|
+
element_t *finish_hash(Group_t type, const pairing_t *pairing);
|
|
117
|
+
|
|
118
|
+
void _element_hash_key(const pairing_t *pairing, Group_t type, element_t *e, void *data, int len);
|
|
119
|
+
|
|
120
|
+
int aes_encrypt(char *key, char *message, int len, char **out);
|
|
121
|
+
int aes_decrypt(char *key, char *ciphertext, int len, char **out);
|
|
122
|
+
|
|
123
|
+
#ifdef __cplusplus
|
|
124
|
+
}
|
|
125
|
+
#endif
|
|
126
|
+
|