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,230 @@
|
|
|
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 ecmodule.h
|
|
23
|
+
*
|
|
24
|
+
* @brief charm interface over OpenSSL Ellipic-curve module
|
|
25
|
+
*
|
|
26
|
+
* @author jakinye3@jhu.edu
|
|
27
|
+
*
|
|
28
|
+
************************************************************************/
|
|
29
|
+
|
|
30
|
+
#ifndef ECMODULE_H
|
|
31
|
+
#define ECMODULE_H
|
|
32
|
+
|
|
33
|
+
#ifndef PY_SSIZE_T_CLEAN
|
|
34
|
+
#define PY_SSIZE_T_CLEAN
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#include <Python.h>
|
|
38
|
+
#include <structmember.h>
|
|
39
|
+
|
|
40
|
+
#if PY_MINOR_VERSION <= 10
|
|
41
|
+
#include <longintrepr.h>
|
|
42
|
+
#else
|
|
43
|
+
#include <cpython/longintrepr.h> /* for conversions */
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
#include <math.h>
|
|
47
|
+
#include "benchmarkmodule.h"
|
|
48
|
+
#include "base64.h"
|
|
49
|
+
|
|
50
|
+
/* Openssl header files */
|
|
51
|
+
#include <openssl/ec.h>
|
|
52
|
+
#include <openssl/err.h>
|
|
53
|
+
#include <openssl/obj_mac.h>
|
|
54
|
+
#include <openssl/objects.h>
|
|
55
|
+
#include <openssl/rand.h>
|
|
56
|
+
#include <openssl/bn.h>
|
|
57
|
+
#include <openssl/sha.h>
|
|
58
|
+
#include <openssl/evp.h>
|
|
59
|
+
#ifdef BENCHMARK_ENABLED
|
|
60
|
+
#include "benchmark_util.h"
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
//#define DEBUG 1
|
|
65
|
+
#define TRUE 1
|
|
66
|
+
#define FALSE 0
|
|
67
|
+
#define BYTE 8
|
|
68
|
+
#define ID_LEN BYTE
|
|
69
|
+
#define BASE_DEC 10
|
|
70
|
+
#define BASE_HEX 16
|
|
71
|
+
#define MAX_BUF 256
|
|
72
|
+
#define RAND_MAX_BYTES 2048
|
|
73
|
+
/* Index numbers for different hash functions. These are all implemented as SHA1(index || message). */
|
|
74
|
+
#define HASH_FUNCTION_STR_TO_ZR_CRH 10
|
|
75
|
+
#define HASH_FUNCTION_STR_TO_G_CRH 11
|
|
76
|
+
#define HASH_FUNCTION_KEM_DERIVE 12
|
|
77
|
+
#define HASH_LEN SHA256_DIGEST_LENGTH
|
|
78
|
+
#define RESERVED_ENCODING_BYTES 4
|
|
79
|
+
|
|
80
|
+
PyTypeObject ECType;
|
|
81
|
+
PyTypeObject ECGroupType;
|
|
82
|
+
PyTypeObject OperationType;
|
|
83
|
+
static PyObject *PyECErrorObject;
|
|
84
|
+
#define PyEC_Check(obj) PyObject_TypeCheck(obj, &ECType)
|
|
85
|
+
#define PyECGroup_Check(obj) PyObject_TypeCheck(obj, &ECGroupType)
|
|
86
|
+
enum Group {ZR = 0, G, NONE_G};
|
|
87
|
+
typedef enum Group GroupType;
|
|
88
|
+
|
|
89
|
+
PyMethodDef ECElement_methods[];
|
|
90
|
+
PyNumberMethods ecc_number;
|
|
91
|
+
|
|
92
|
+
#ifdef BENCHMARK_ENABLED
|
|
93
|
+
typedef struct {
|
|
94
|
+
PyObject_HEAD
|
|
95
|
+
int op_init;
|
|
96
|
+
int exp_ZR, exp_G;
|
|
97
|
+
int mul_ZR, mul_G;
|
|
98
|
+
int div_ZR, div_G;
|
|
99
|
+
|
|
100
|
+
int add_ZR, add_G;
|
|
101
|
+
int sub_ZR, sub_G;
|
|
102
|
+
} Operations;
|
|
103
|
+
#endif
|
|
104
|
+
|
|
105
|
+
typedef struct {
|
|
106
|
+
PyObject_HEAD
|
|
107
|
+
EC_GROUP *ec_group;
|
|
108
|
+
int group_init;
|
|
109
|
+
int nid;
|
|
110
|
+
BN_CTX *ctx;
|
|
111
|
+
BIGNUM *order;
|
|
112
|
+
#ifdef BENCHMARK_ENABLED
|
|
113
|
+
Benchmark *dBench;
|
|
114
|
+
Operations *gBench;
|
|
115
|
+
uint8_t bench_id[ID_LEN+1];
|
|
116
|
+
#endif
|
|
117
|
+
} ECGroup;
|
|
118
|
+
|
|
119
|
+
typedef struct {
|
|
120
|
+
PyObject_HEAD
|
|
121
|
+
GroupType type;
|
|
122
|
+
ECGroup *group;
|
|
123
|
+
EC_POINT *P;
|
|
124
|
+
BIGNUM *elemZ;
|
|
125
|
+
int point_init;
|
|
126
|
+
} ECElement;
|
|
127
|
+
|
|
128
|
+
#define PyLong_ToUnsignedLong(o) PyLong_AsUnsignedLong(o)
|
|
129
|
+
#define PyLongCheck(o) PyLong_Check(o)
|
|
130
|
+
|
|
131
|
+
#define ErrorMsg(msg) \
|
|
132
|
+
PyErr_SetString(PyECErrorObject, msg); \
|
|
133
|
+
debug("%s: %d error occured here!", __FUNCTION__, __LINE__); \
|
|
134
|
+
return NULL;
|
|
135
|
+
|
|
136
|
+
#define Check_Types2(o1, o2, lhs, rhs, foundLHS, foundRHS) \
|
|
137
|
+
if(PyEC_Check(o1)) { \
|
|
138
|
+
lhs = (ECElement *) o1; \
|
|
139
|
+
debug("found a lhs object.\n"); \
|
|
140
|
+
} \
|
|
141
|
+
else if(PyLongCheck(o1)) { \
|
|
142
|
+
foundLHS = TRUE; } \
|
|
143
|
+
else { ErrorMsg("invalid type specified."); \
|
|
144
|
+
} \
|
|
145
|
+
if(PyEC_Check(o2)) { \
|
|
146
|
+
rhs = (ECElement *) o2; \
|
|
147
|
+
debug("found a rhs object.\n"); \
|
|
148
|
+
} \
|
|
149
|
+
else if(PyLongCheck(o2)) { \
|
|
150
|
+
foundRHS = TRUE; } \
|
|
151
|
+
else { ErrorMsg("invalid type specified."); \
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
#define Group_NULL(obj) if(obj->ec_group == NULL) { \
|
|
155
|
+
PyErr_SetString(PyECErrorObject, "group object not allocated."); \
|
|
156
|
+
return NULL; }
|
|
157
|
+
|
|
158
|
+
#define VERIFY_GROUP(obj) \
|
|
159
|
+
if(!PyECGroup_Check(obj)) { \
|
|
160
|
+
PyErr_SetString(PyECErrorObject, "not an ecc object."); return NULL; } \
|
|
161
|
+
if(obj->group_init == FALSE || obj->ec_group == NULL) { \
|
|
162
|
+
PyErr_SetString(PyECErrorObject, "group object not initialized."); \
|
|
163
|
+
return NULL; }
|
|
164
|
+
|
|
165
|
+
#define Point_Init(obj) if(!obj->point_init) { \
|
|
166
|
+
printf("ERROR: element not initialized.\n"); \
|
|
167
|
+
return NULL; }
|
|
168
|
+
|
|
169
|
+
#define isPoint(a) a->type == G
|
|
170
|
+
#define ElementG(a, b) a->type == G && b->type == G
|
|
171
|
+
#define ElementZR(a, b) a->type == ZR && b->type == ZR
|
|
172
|
+
|
|
173
|
+
void setBigNum(PyLongObject *obj, BIGNUM **value);
|
|
174
|
+
PyObject *ECElement_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
|
|
175
|
+
int ECElement_init(ECElement *self, PyObject *args, PyObject *kwds);
|
|
176
|
+
PyObject *ECElement_call(ECElement *intObject, PyObject *args, PyObject *kwds);
|
|
177
|
+
PyObject *ECElement_print(ECElement *self);
|
|
178
|
+
void ECElement_dealloc(ECElement* self);
|
|
179
|
+
|
|
180
|
+
ECElement *negatePoint(ECElement *self);
|
|
181
|
+
ECElement *invertECElement(ECElement *self);
|
|
182
|
+
int hash_to_bytes(uint8_t *input_buf, int input_len, uint8_t *output_buf, int hash_len, uint8_t hash_prefix);
|
|
183
|
+
void set_element_from_hash(ECElement *self, uint8_t *input, int input_len);
|
|
184
|
+
|
|
185
|
+
#define EXIT_IF(check, msg) \
|
|
186
|
+
if(check) { \
|
|
187
|
+
PyErr_SetString(PyECErrorObject, msg); \
|
|
188
|
+
return NULL; }
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
#ifdef BENCHMARK_ENABLED
|
|
192
|
+
|
|
193
|
+
#define IS_SAME_GROUP(a, b) \
|
|
194
|
+
if(a->group->nid != b->group->nid) { \
|
|
195
|
+
PyErr_SetString(PyECErrorObject, "mixing group elements from different curves."); \
|
|
196
|
+
return NULL; \
|
|
197
|
+
} \
|
|
198
|
+
if(strncmp((const char *) a->group->bench_id, (const char *) b->group->bench_id, ID_LEN) != 0) { \
|
|
199
|
+
PyErr_SetString(PyECErrorObject, "mixing benchmark objects not allowed."); \
|
|
200
|
+
return NULL; \
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
#define IsBenchSet(obj) obj->dBench != NULL
|
|
204
|
+
|
|
205
|
+
#define Update_Op(name, op_type, elem_type, bench_obj) \
|
|
206
|
+
Op_ ##name(op_type, elem_type, ZR, bench_obj) \
|
|
207
|
+
Op_ ##name(op_type, elem_type, G, bench_obj) \
|
|
208
|
+
|
|
209
|
+
#define CLEAR_ALLDBENCH(bench_obj) \
|
|
210
|
+
CLEAR_DBENCH(bench_obj, ZR); \
|
|
211
|
+
CLEAR_DBENCH(bench_obj, G);
|
|
212
|
+
|
|
213
|
+
#else
|
|
214
|
+
|
|
215
|
+
#define IS_SAME_GROUP(a, b) \
|
|
216
|
+
if(a->group->nid != b->group->nid) { \
|
|
217
|
+
PyErr_SetString(PyECErrorObject, "mixing group elements from different curves."); \
|
|
218
|
+
return NULL; \
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
#define UPDATE_BENCH(op_type, elem_type, bench_obj) /* ... */
|
|
222
|
+
// #define UPDATE_BENCHMARK(op_type, bench_obj) /* ... */
|
|
223
|
+
#define CLEAR_ALLDBENCH(bench_obj) /* ... */
|
|
224
|
+
#define GetField(count, type, group, bench_obj) /* ... */
|
|
225
|
+
|
|
226
|
+
#endif
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
#endif
|
|
Binary file
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Type stubs for charm.core.math.elliptic_curve C extension module."""
|
|
2
|
+
|
|
3
|
+
from typing import overload
|
|
4
|
+
|
|
5
|
+
# Module-level constants (group types)
|
|
6
|
+
ZR: int
|
|
7
|
+
G: int
|
|
8
|
+
|
|
9
|
+
class ECGroup:
|
|
10
|
+
"""Elliptic curve group initialized with an OpenSSL NID (curve identifier)."""
|
|
11
|
+
|
|
12
|
+
def __init__(self, nid: int) -> None: ...
|
|
13
|
+
|
|
14
|
+
class Element:
|
|
15
|
+
"""Element in an elliptic curve group (either ZR or G)."""
|
|
16
|
+
|
|
17
|
+
type: int
|
|
18
|
+
initialized: int
|
|
19
|
+
|
|
20
|
+
def __init__(self) -> None: ...
|
|
21
|
+
def isInf(self) -> bool: ...
|
|
22
|
+
|
|
23
|
+
# Arithmetic operations
|
|
24
|
+
def __add__(self, other: Element) -> Element: ...
|
|
25
|
+
def __radd__(self, other: Element) -> Element: ...
|
|
26
|
+
def __sub__(self, other: Element) -> Element: ...
|
|
27
|
+
def __rsub__(self, other: Element) -> Element: ...
|
|
28
|
+
def __mul__(self, other: Element | int) -> Element: ...
|
|
29
|
+
def __rmul__(self, other: Element | int) -> Element: ...
|
|
30
|
+
def __mod__(self, other: Element) -> Element: ...
|
|
31
|
+
def __pow__(self, exp: Element | int) -> Element: ...
|
|
32
|
+
def __neg__(self) -> Element: ...
|
|
33
|
+
def __invert__(self) -> Element: ...
|
|
34
|
+
|
|
35
|
+
# Comparison operations
|
|
36
|
+
def __eq__(self, other: object) -> bool: ...
|
|
37
|
+
def __ne__(self, other: object) -> bool: ...
|
|
38
|
+
def __lt__(self, other: Element) -> bool: ...
|
|
39
|
+
def __le__(self, other: Element) -> bool: ...
|
|
40
|
+
def __gt__(self, other: Element) -> bool: ...
|
|
41
|
+
def __ge__(self, other: Element) -> bool: ...
|
|
42
|
+
|
|
43
|
+
# Conversion
|
|
44
|
+
def __int__(self) -> int: ...
|
|
45
|
+
def __hash__(self) -> int: ...
|
|
46
|
+
|
|
47
|
+
# Module-level functions
|
|
48
|
+
def init(group: ECGroup, type: int, value: int = ...) -> Element: ...
|
|
49
|
+
def random(group: ECGroup, type: int) -> Element: ...
|
|
50
|
+
def order(group: ECGroup) -> Element: ...
|
|
51
|
+
def getGenerator(group: ECGroup) -> Element: ...
|
|
52
|
+
def bitsize(group: ECGroup) -> int: ...
|
|
53
|
+
def serialize(element: Element) -> bytes: ...
|
|
54
|
+
def deserialize(group: ECGroup, data: bytes, type: int) -> Element: ...
|
|
55
|
+
def hashEC(group: ECGroup, data: bytes, type: int) -> Element: ...
|
|
56
|
+
def encode(group: ECGroup, message: bytes) -> Element: ...
|
|
57
|
+
def decode(element: Element) -> bytes: ...
|
|
58
|
+
|
|
59
|
+
@overload
|
|
60
|
+
def getXY(group: ECGroup, element: Element, x_only: bool = True) -> Element: ...
|
|
61
|
+
@overload
|
|
62
|
+
def getXY(group: ECGroup, element: Element, x_only: bool = False) -> tuple[Element, Element]: ...
|
|
63
|
+
|