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
charm/test/conftest.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pytest configuration for Charm test suite.
|
|
3
|
+
|
|
4
|
+
This module provides custom pytest hooks and fixtures for version-specific
|
|
5
|
+
test skipping and other test configuration.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def pytest_configure(config):
|
|
13
|
+
"""Register custom markers."""
|
|
14
|
+
config.addinivalue_line(
|
|
15
|
+
"markers",
|
|
16
|
+
"skip_py312plus: Skip test on Python 3.12+ due to known issues"
|
|
17
|
+
)
|
|
18
|
+
config.addinivalue_line(
|
|
19
|
+
"markers",
|
|
20
|
+
"slow: Mark test as slow-running"
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def pytest_collection_modifyitems(config, items):
|
|
25
|
+
"""
|
|
26
|
+
Automatically skip tests marked with skip_py312plus on Python 3.12+.
|
|
27
|
+
|
|
28
|
+
This hook runs after test collection and modifies the test items
|
|
29
|
+
to add skip markers based on the Python version.
|
|
30
|
+
"""
|
|
31
|
+
if sys.version_info >= (3, 12):
|
|
32
|
+
skip_py312plus = pytest.mark.skip(
|
|
33
|
+
reason="Test skipped on Python 3.12+ due to known hanging/compatibility issues"
|
|
34
|
+
)
|
|
35
|
+
for item in items:
|
|
36
|
+
if "skip_py312plus" in item.keywords:
|
|
37
|
+
item.add_marker(skip_py312plus)
|
|
38
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
Fuzzing harness for PolicyParser in charm.toolbox.policytree
|
|
4
|
+
|
|
5
|
+
This fuzzer tests the policy parser with random inputs to find crashes,
|
|
6
|
+
hangs, or other unexpected behavior.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
pip install atheris
|
|
10
|
+
python charm/test/fuzz/fuzz_policy_parser.py
|
|
11
|
+
|
|
12
|
+
The fuzzer will run continuously until stopped (Ctrl+C) or a crash is found.
|
|
13
|
+
|
|
14
|
+
Note: This file is not a pytest test module. It requires atheris to be installed
|
|
15
|
+
and should be run directly.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import sys
|
|
19
|
+
|
|
20
|
+
# Defer atheris import to runtime to avoid pytest collection errors
|
|
21
|
+
atheris = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def setup_module():
|
|
25
|
+
"""Import modules after Atheris initialization for proper instrumentation."""
|
|
26
|
+
global PolicyParser
|
|
27
|
+
from charm.toolbox.policytree import PolicyParser
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def fuzz_policy_parser(data: bytes) -> None:
|
|
31
|
+
"""Fuzz target for PolicyParser.
|
|
32
|
+
|
|
33
|
+
Tests the parser with random byte strings converted to policy strings.
|
|
34
|
+
"""
|
|
35
|
+
try:
|
|
36
|
+
# Convert bytes to string, handling encoding errors gracefully
|
|
37
|
+
policy_str = data.decode('utf-8', errors='replace')
|
|
38
|
+
|
|
39
|
+
# Skip empty strings
|
|
40
|
+
if not policy_str.strip():
|
|
41
|
+
return
|
|
42
|
+
|
|
43
|
+
# Parse the policy string
|
|
44
|
+
parser = PolicyParser()
|
|
45
|
+
parser.parse(policy_str)
|
|
46
|
+
|
|
47
|
+
except Exception:
|
|
48
|
+
# Expected exceptions from invalid input are fine
|
|
49
|
+
# We're looking for crashes, hangs, or memory issues
|
|
50
|
+
pass
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def main():
|
|
54
|
+
"""Main entry point for the fuzzer."""
|
|
55
|
+
global atheris
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
import atheris as _atheris
|
|
59
|
+
atheris = _atheris
|
|
60
|
+
except ImportError:
|
|
61
|
+
print("ERROR: atheris is required for fuzzing.")
|
|
62
|
+
print("Install with: pip install atheris")
|
|
63
|
+
sys.exit(1)
|
|
64
|
+
|
|
65
|
+
# Initialize Atheris with instrumentation
|
|
66
|
+
atheris.instrument_all()
|
|
67
|
+
setup_module()
|
|
68
|
+
|
|
69
|
+
# Start fuzzing
|
|
70
|
+
atheris.Setup(sys.argv, fuzz_policy_parser)
|
|
71
|
+
atheris.Fuzz()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
if __name__ == "__main__":
|
|
75
|
+
main()
|
|
76
|
+
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
Fuzzing harness for serialization/deserialization in Charm
|
|
4
|
+
|
|
5
|
+
This fuzzer tests the deserialization functions with random byte inputs
|
|
6
|
+
to find crashes, memory corruption, or other issues.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
pip install atheris
|
|
10
|
+
python charm/test/fuzz/fuzz_serialization.py
|
|
11
|
+
|
|
12
|
+
Note: This file is not a pytest test module. It requires atheris to be installed
|
|
13
|
+
and should be run directly.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import sys
|
|
17
|
+
|
|
18
|
+
# Defer atheris import to runtime to avoid pytest collection errors
|
|
19
|
+
atheris = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def setup_module():
|
|
23
|
+
"""Import modules after Atheris initialization."""
|
|
24
|
+
global PairingGroup, objectToBytes, bytesToObject
|
|
25
|
+
from charm.toolbox.pairinggroup import PairingGroup
|
|
26
|
+
from charm.core.engine.util import objectToBytes, bytesToObject
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def fuzz_pairing_deserialization(data: bytes) -> None:
|
|
30
|
+
"""Fuzz target for pairing group deserialization.
|
|
31
|
+
|
|
32
|
+
Tests bytesToObject with random bytes to find crashes.
|
|
33
|
+
"""
|
|
34
|
+
try:
|
|
35
|
+
group = PairingGroup('BN254')
|
|
36
|
+
|
|
37
|
+
# Try to deserialize random bytes
|
|
38
|
+
bytesToObject(data, group)
|
|
39
|
+
|
|
40
|
+
except Exception:
|
|
41
|
+
# Expected exceptions are fine
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def fuzz_combined(data: bytes) -> None:
|
|
46
|
+
"""Combined fuzz target testing multiple deserialization paths."""
|
|
47
|
+
fdp = atheris.FuzzedDataProvider(data)
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
group = PairingGroup('BN254')
|
|
51
|
+
|
|
52
|
+
# Get random bytes of varying lengths
|
|
53
|
+
payload = fdp.ConsumeBytes(fdp.ConsumeIntInRange(0, 1024))
|
|
54
|
+
|
|
55
|
+
# Try deserialization
|
|
56
|
+
bytesToObject(payload, group)
|
|
57
|
+
|
|
58
|
+
except Exception:
|
|
59
|
+
pass
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def main():
|
|
63
|
+
"""Main entry point."""
|
|
64
|
+
global atheris
|
|
65
|
+
|
|
66
|
+
try:
|
|
67
|
+
import atheris as _atheris
|
|
68
|
+
atheris = _atheris
|
|
69
|
+
except ImportError:
|
|
70
|
+
print("ERROR: atheris is required for fuzzing.")
|
|
71
|
+
print("Install with: pip install atheris")
|
|
72
|
+
sys.exit(1)
|
|
73
|
+
|
|
74
|
+
atheris.instrument_all()
|
|
75
|
+
setup_module()
|
|
76
|
+
|
|
77
|
+
atheris.Setup(sys.argv, fuzz_combined)
|
|
78
|
+
atheris.Fuzz()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
if __name__ == "__main__":
|
|
82
|
+
main()
|
|
83
|
+
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.abenc.abenc_bsw07 import CPabe_BSW07
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CPabe_BSW07Test(unittest.TestCase):
|
|
10
|
+
def testCPabe_BSW07(self):
|
|
11
|
+
groupObj = PairingGroup('SS512')
|
|
12
|
+
|
|
13
|
+
cpabe = CPabe_BSW07(groupObj)
|
|
14
|
+
attrs = ['ONE', 'TWO', 'THREE']
|
|
15
|
+
access_policy = '((four or three) and (three or one))'
|
|
16
|
+
if debug:
|
|
17
|
+
print("Attributes =>", attrs);
|
|
18
|
+
print("Policy =>", access_policy)
|
|
19
|
+
|
|
20
|
+
(pk, mk) = cpabe.setup()
|
|
21
|
+
|
|
22
|
+
sk = cpabe.keygen(pk, mk, attrs)
|
|
23
|
+
|
|
24
|
+
rand_msg = groupObj.random(GT)
|
|
25
|
+
if debug: print("msg =>", rand_msg)
|
|
26
|
+
ct = cpabe.encrypt(pk, rand_msg, access_policy)
|
|
27
|
+
if debug: print("\n\nCiphertext...\n")
|
|
28
|
+
groupObj.debug(ct)
|
|
29
|
+
|
|
30
|
+
rec_msg = cpabe.decrypt(pk, sk, ct)
|
|
31
|
+
if debug: print("\n\nDecrypt...\n")
|
|
32
|
+
if debug: print("Rec msg =>", rec_msg)
|
|
33
|
+
|
|
34
|
+
assert rand_msg == rec_msg, "FAILED Decryption: message is incorrect"
|
|
35
|
+
if debug: print("Successful Decryption!!!")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if __name__ == "__main__":
|
|
39
|
+
unittest.main()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
import charm.schemes.abenc.abenc_dacmacs_yj14 as abenc_dacmacs_yj14
|
|
4
|
+
|
|
5
|
+
debug = False
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# unit test for scheme contributed by artjomb
|
|
9
|
+
class DacMacs_YJ14Test(unittest.TestCase):
|
|
10
|
+
def testDacmacs_YJ14(self):
|
|
11
|
+
abenc_dacmacs_yj14.basicTest()
|
|
12
|
+
abenc_dacmacs_yj14.revokedTest()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
if __name__ == "__main__":
|
|
16
|
+
unittest.main()
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.abenc.abenc_lsw08 import KPabe
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class KPabeTest(unittest.TestCase):
|
|
10
|
+
def testKPabe(self):
|
|
11
|
+
groupObj = PairingGroup('MNT224')
|
|
12
|
+
kpabe = KPabe(groupObj)
|
|
13
|
+
|
|
14
|
+
(pk, mk) = kpabe.setup()
|
|
15
|
+
|
|
16
|
+
policy = '(ONE or THREE) and (THREE or TWO)'
|
|
17
|
+
attributes = ['ONE', 'TWO', 'THREE', 'FOUR']
|
|
18
|
+
msg = groupObj.random(GT)
|
|
19
|
+
|
|
20
|
+
mykey = kpabe.keygen(pk, mk, policy)
|
|
21
|
+
|
|
22
|
+
if debug: print("Encrypt under these attributes: ", attributes)
|
|
23
|
+
ciphertext = kpabe.encrypt(pk, msg, attributes)
|
|
24
|
+
if debug: print(ciphertext)
|
|
25
|
+
|
|
26
|
+
rec_msg = kpabe.decrypt(ciphertext, mykey)
|
|
27
|
+
|
|
28
|
+
assert msg == rec_msg
|
|
29
|
+
if debug: print("Successful Decryption!")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
unittest.main()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
import charm.schemes.abenc.abenc_maabe_yj14 as abenc_maabe_yj14
|
|
4
|
+
|
|
5
|
+
debug = False
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# unit test for scheme contributed by artjomb
|
|
9
|
+
class MAabe_YJ14Test(unittest.TestCase):
|
|
10
|
+
def testMAabe_YJ14(self):
|
|
11
|
+
abenc_maabe_yj14.basicTest()
|
|
12
|
+
abenc_maabe_yj14.revokedTest()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
if __name__ == "__main__":
|
|
16
|
+
unittest.main()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
import charm.schemes.abenc.abenc_tbpre_lww14 as abenc_tbpre_lww14
|
|
4
|
+
|
|
5
|
+
debug = False
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# unit test for scheme contributed by artjomb
|
|
9
|
+
class TBPre_LWW14Test(unittest.TestCase):
|
|
10
|
+
def testTBPre_LWW14(self):
|
|
11
|
+
abenc_tbpre_lww14.basicTest()
|
|
12
|
+
# abenc_tbpre_lww14.basicTest2() # seems to fail
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
if __name__ == "__main__":
|
|
16
|
+
unittest.main()
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.abenc.abenc_waters09 import CPabe09
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CPabe09Test(unittest.TestCase):
|
|
10
|
+
def testCPabe(self):
|
|
11
|
+
# Get the eliptic curve with the bilinear mapping feature needed.
|
|
12
|
+
groupObj = PairingGroup('SS512')
|
|
13
|
+
|
|
14
|
+
cpabe = CPabe09(groupObj)
|
|
15
|
+
(msk, pk) = cpabe.setup()
|
|
16
|
+
pol = '((ONE or THREE) and (TWO or FOUR))'
|
|
17
|
+
attr_list = ['THREE', 'ONE', 'TWO']
|
|
18
|
+
|
|
19
|
+
if debug: print('Acces Policy: %s' % pol)
|
|
20
|
+
if debug: print('User credential list: %s' % attr_list)
|
|
21
|
+
m = groupObj.random(GT)
|
|
22
|
+
|
|
23
|
+
cpkey = cpabe.keygen(pk, msk, attr_list)
|
|
24
|
+
if debug: print("\nSecret key: %s" % attr_list)
|
|
25
|
+
if debug: groupObj.debug(cpkey)
|
|
26
|
+
cipher = cpabe.encrypt(pk, m, pol)
|
|
27
|
+
|
|
28
|
+
if debug: print("\nCiphertext...")
|
|
29
|
+
if debug: groupObj.debug(cipher)
|
|
30
|
+
orig_m = cpabe.decrypt(pk, cpkey, cipher)
|
|
31
|
+
|
|
32
|
+
assert m == orig_m, 'FAILED Decryption!!!'
|
|
33
|
+
if debug: print('Successful Decryption!')
|
|
34
|
+
del groupObj
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
unittest.main()
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import unittest
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
from charm.toolbox.secretutil import SecretUtil
|
|
7
|
+
|
|
8
|
+
settings = pytest.importorskip("hypothesis").settings
|
|
9
|
+
given = pytest.importorskip("hypothesis").given
|
|
10
|
+
from hypothesis.strategies import lists
|
|
11
|
+
|
|
12
|
+
from charm.schemes.abenc.abenc_yllc15 import YLLC15
|
|
13
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
14
|
+
from charm.toolbox.policy_expression_spec import attributes, policy_expressions
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class YLLC15Test(unittest.TestCase):
|
|
18
|
+
|
|
19
|
+
def setUp(self):
|
|
20
|
+
group = PairingGroup('SS512')
|
|
21
|
+
self.abe = YLLC15(group)
|
|
22
|
+
(self.params, self.msk) = self.abe.setup()
|
|
23
|
+
|
|
24
|
+
def test_ukgen(self, user_id='bob@example.com'):
|
|
25
|
+
(public_key, secret_key) = self.abe.ukgen(self.params)
|
|
26
|
+
|
|
27
|
+
@pytest.mark.skipif(sys.version_info < (3, 4),
|
|
28
|
+
reason="requires python3.4 or higher")
|
|
29
|
+
@given(attrs=lists(attributes(), min_size=1))
|
|
30
|
+
@settings(deadline=300, max_examples=50)
|
|
31
|
+
def test_proxy_key_gen_deduplicates_and_uppercases_attributes(self, attrs):
|
|
32
|
+
pkcs, skcs = self.abe.ukgen(self.params)
|
|
33
|
+
pku, sku = self.abe.ukgen(self.params)
|
|
34
|
+
proxy_key_user = self.abe.proxy_keygen(self.params, self.msk, pkcs, pku, attrs)
|
|
35
|
+
self.assertEqual({ attr.upper() for attr in set(attrs) }, proxy_key_user['k_attrs'].keys())
|
|
36
|
+
|
|
37
|
+
@settings(deadline=1000, max_examples=50) # Increased deadline for CI variability
|
|
38
|
+
@given(policy_str=policy_expressions())
|
|
39
|
+
def test_encrypt_proxy_decrypt_decrypt_round_trip(self, policy_str):
|
|
40
|
+
pkcs, skcs = self.abe.ukgen(self.params)
|
|
41
|
+
pku, sku = self.abe.ukgen(self.params)
|
|
42
|
+
attrs = self.extract_attributes(policy_str)
|
|
43
|
+
random_key_elem = self.abe.group.random(GT)
|
|
44
|
+
|
|
45
|
+
proxy_key_user = self.abe.proxy_keygen(self.params, self.msk, pkcs, pku, attrs)
|
|
46
|
+
ciphertext = self.abe.encrypt(self.params, random_key_elem, policy_str)
|
|
47
|
+
intermediate_value = self.abe.proxy_decrypt(skcs, proxy_key_user, ciphertext)
|
|
48
|
+
recovered_key_elem = self.abe.decrypt(None, sku, intermediate_value)
|
|
49
|
+
self.assertEqual(random_key_elem, recovered_key_elem)
|
|
50
|
+
|
|
51
|
+
def extract_attributes(self, policy_str):
|
|
52
|
+
util = SecretUtil(self.abe.group)
|
|
53
|
+
policy = util.createPolicy(policy_str)
|
|
54
|
+
return [util.strip_index(policy_attr) for policy_attr in util.getAttributeList(policy)]
|
|
55
|
+
|
|
56
|
+
@pytest.mark.skipif(sys.version_info < (3, 4),
|
|
57
|
+
reason="requires python3.4 or higher")
|
|
58
|
+
@settings(deadline=400, max_examples=50)
|
|
59
|
+
@given(policy=policy_expressions())
|
|
60
|
+
def test_policy_not_satisfied(self, policy):
|
|
61
|
+
pkcs, skcs = self.abe.ukgen(self.params)
|
|
62
|
+
pku, sku = self.abe.ukgen(self.params)
|
|
63
|
+
attribute_list = ["UNLIKELY_ATTRIBUTE_NAME"]
|
|
64
|
+
proxy_key_user = self.abe.proxy_keygen(self.params, self.msk, pkcs, pku, attribute_list)
|
|
65
|
+
|
|
66
|
+
random_key_elem = self.abe.group.random(GT)
|
|
67
|
+
ciphertext = self.abe.encrypt(self.params, random_key_elem, policy)
|
|
68
|
+
|
|
69
|
+
result = self.abe.proxy_decrypt(skcs, proxy_key_user, ciphertext)
|
|
70
|
+
self.assertIsNone(result)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
unittest.main()
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from charm.schemes.chamhash_adm05 import ChamHash_Adm05
|
|
6
|
+
from charm.toolbox.integergroup import integer
|
|
7
|
+
|
|
8
|
+
debug = False
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ChamHash_Adm05Test(unittest.TestCase):
|
|
12
|
+
@pytest.mark.skip(reason="Fails on Linux CI - investigating platform-specific issue with IntegerGroupQ.hash")
|
|
13
|
+
def testChamHash_Adm05(self):
|
|
14
|
+
# fixed params for unit tests
|
|
15
|
+
p = integer(141660875619984104245410764464185421040193281776686085728248762539241852738181649330509191671665849071206347515263344232662465937366909502530516774705282764748558934610432918614104329009095808618770549804432868118610669336907161081169097403439689930233383598055540343198389409225338204714777812724565461351567)
|
|
16
|
+
q = integer(70830437809992052122705382232092710520096640888343042864124381269620926369090824665254595835832924535603173757631672116331232968683454751265258387352641382374279467305216459307052164504547904309385274902216434059305334668453580540584548701719844965116691799027770171599194704612669102357388906362282730675783)
|
|
17
|
+
chamHash = ChamHash_Adm05(p, q)
|
|
18
|
+
(pk, sk) = chamHash.paramgen()
|
|
19
|
+
if debug: print("pk => ", pk)
|
|
20
|
+
if debug: print("sk => ", sk)
|
|
21
|
+
|
|
22
|
+
msg = "Hello world this is the message!"
|
|
23
|
+
(h, r, s) = chamHash.hash(pk, msg)
|
|
24
|
+
if debug: print("Hash...")
|
|
25
|
+
if debug: print("sig =>", h)
|
|
26
|
+
|
|
27
|
+
(h1, r1, s1) = chamHash.hash(pk, msg, r, s)
|
|
28
|
+
if debug: print("sig 2 =>", h1)
|
|
29
|
+
|
|
30
|
+
assert h == h1, "Signature failed!!!"
|
|
31
|
+
if debug: print("Signature generated correctly!!!")
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.chamhash_rsa_hw09 import ChamHash_HW09
|
|
4
|
+
from charm.toolbox.integergroup import integer
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ChamHash_HW09Test(unittest.TestCase):
|
|
10
|
+
def testChamHash_HW09(self):
|
|
11
|
+
# Test p and q primes for unit tests only
|
|
12
|
+
# These primes are mathematically suitable - phi_N = (p-1)*(q-1) is coprime with 65537
|
|
13
|
+
# This ensures the deterministic coprime algorithm finds a solution quickly
|
|
14
|
+
p = integer(95969491500266197744623842643163713790605329484264579952704690252128663957034885038057265490969414900858594119440280815406458877960454430736966405387849574204717896425412057524927419980472986383200765875162149934175300724788379539851438576829444747397186724447127392785957485487971933719848100802790176324337)
|
|
15
|
+
q = integer(165685596906806363133681673469906489437474476163789251744214878002662496954723502283532073376723817149461444040314419947626958411649072129703545884779008062578922350877123596086401947242893563534827734633284461244941306661332124200807263458137608535445118169374047964965396160553232687802551488935469282118877)
|
|
16
|
+
|
|
17
|
+
chamHash = ChamHash_HW09()
|
|
18
|
+
(pk, sk) = chamHash.paramgen(1024, p, q)
|
|
19
|
+
|
|
20
|
+
msg = "Hello world this is the message!"
|
|
21
|
+
(h, r) = chamHash.hash(pk, msg)
|
|
22
|
+
if debug: print("Hash...")
|
|
23
|
+
if debug: print("sig =>", h)
|
|
24
|
+
|
|
25
|
+
(h1, r1) = chamHash.hash(pk, msg, r)
|
|
26
|
+
if debug: print("sig 2 =>", h1)
|
|
27
|
+
|
|
28
|
+
assert h == h1, "Signature failed!!!"
|
|
29
|
+
if debug: print("Signature generated correctly!!!")
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.commit.commit_gs08 import Commitment_GS08
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, G1
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Commitment_GS08Test(unittest.TestCase):
|
|
10
|
+
def testCommitment_GS08(self):
|
|
11
|
+
groupObj = PairingGroup('SS512')
|
|
12
|
+
cm = Commitment_GS08(groupObj)
|
|
13
|
+
|
|
14
|
+
pk = cm.setup()
|
|
15
|
+
if debug:
|
|
16
|
+
print("Public parameters...")
|
|
17
|
+
print("pk =>", pk)
|
|
18
|
+
|
|
19
|
+
m = groupObj.random(G1)
|
|
20
|
+
if debug: print("Committing to =>", m)
|
|
21
|
+
(c, d) = cm.commit(pk, m)
|
|
22
|
+
|
|
23
|
+
assert cm.decommit(pk, c, d, m), "FAILED to decommit"
|
|
24
|
+
if debug: print("Successful and Verified decommitment!!!")
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.commit.commit_pedersen92 import CM_Ped92
|
|
4
|
+
from charm.toolbox.ecgroup import ECGroup
|
|
5
|
+
from charm.toolbox.pairinggroup import ZR
|
|
6
|
+
|
|
7
|
+
debug = False
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CM_Ped92Test(unittest.TestCase):
|
|
11
|
+
def testCM_Ped92(self):
|
|
12
|
+
groupObj = ECGroup(410)
|
|
13
|
+
cm = CM_Ped92(groupObj)
|
|
14
|
+
|
|
15
|
+
pk = cm.setup()
|
|
16
|
+
if debug:
|
|
17
|
+
print("Public parameters...")
|
|
18
|
+
print("pk =>", pk)
|
|
19
|
+
|
|
20
|
+
m = groupObj.random(ZR)
|
|
21
|
+
if debug: print("Commiting to =>", m)
|
|
22
|
+
(c, d) = cm.commit(pk, m)
|
|
23
|
+
|
|
24
|
+
assert cm.decommit(pk, c, d, m), "FAILED to decommit"
|
|
25
|
+
if debug: print("Successful and Verified decommitment!!!")
|
|
26
|
+
del groupObj
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.abenc.dabe_aw11 import Dabe
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DabeTest(unittest.TestCase):
|
|
10
|
+
def testDabe(self):
|
|
11
|
+
groupObj = PairingGroup('SS512')
|
|
12
|
+
|
|
13
|
+
dabe = Dabe(groupObj)
|
|
14
|
+
GP = dabe.setup()
|
|
15
|
+
|
|
16
|
+
# Setup an authority
|
|
17
|
+
auth_attrs = ['ONE', 'TWO', 'THREE', 'FOUR']
|
|
18
|
+
(SK, PK) = dabe.authsetup(GP, auth_attrs)
|
|
19
|
+
if debug: print("Authority SK")
|
|
20
|
+
if debug: print(SK)
|
|
21
|
+
|
|
22
|
+
# Setup a user and give him some keys
|
|
23
|
+
gid, K = "bob", {}
|
|
24
|
+
usr_attrs = ['THREE', 'ONE', 'TWO']
|
|
25
|
+
for i in usr_attrs: dabe.keygen(GP, SK, i, gid, K)
|
|
26
|
+
if debug: print('User credential list: %s' % usr_attrs)
|
|
27
|
+
if debug: print("\nSecret key:")
|
|
28
|
+
if debug: groupObj.debug(K)
|
|
29
|
+
|
|
30
|
+
# Encrypt a random element in GT
|
|
31
|
+
m = groupObj.random(GT)
|
|
32
|
+
policy = '((one or three) and (TWO or FOUR))'
|
|
33
|
+
if debug: print('Acces Policy: %s' % policy)
|
|
34
|
+
CT = dabe.encrypt(GP, PK, m, policy)
|
|
35
|
+
if debug: print("\nCiphertext...")
|
|
36
|
+
if debug: groupObj.debug(CT)
|
|
37
|
+
|
|
38
|
+
orig_m = dabe.decrypt(GP, K, CT)
|
|
39
|
+
|
|
40
|
+
assert m == orig_m, 'FAILED Decryption!!!'
|
|
41
|
+
if debug: print('Successful Decryption!')
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
if __name__ == "__main__":
|
|
45
|
+
unittest.main()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from charm.schemes.encap_bchk05 import EncapBCHK
|
|
2
|
+
import unittest
|
|
3
|
+
|
|
4
|
+
debug = False
|
|
5
|
+
class EncapBCHKTest(unittest.TestCase):
|
|
6
|
+
def testEncapBCHK(self):
|
|
7
|
+
encap = EncapBCHK()
|
|
8
|
+
|
|
9
|
+
hout = encap.setup()
|
|
10
|
+
|
|
11
|
+
(r, com, dec) = encap.S(hout)
|
|
12
|
+
|
|
13
|
+
rout = encap.R(hout, com, dec)
|
|
14
|
+
|
|
15
|
+
if debug: print("recovered m =>", rout)
|
|
16
|
+
|
|
17
|
+
assert r == rout, "Failed Decryption"
|
|
18
|
+
if debug: print("Successful Decryption!!!")
|
|
19
|
+
|
|
20
|
+
if __name__ == "__main__":
|
|
21
|
+
unittest.main()
|
|
File without changes
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.grpsig.groupsig_bgls04 import ShortSig as BGLS04
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class BGLS04Test(unittest.TestCase):
|
|
10
|
+
def testBGLS04(self):
|
|
11
|
+
groupObj = PairingGroup('MNT224')
|
|
12
|
+
n = 3 # how manu users in the group
|
|
13
|
+
user = 1 # which user's key to sign a message with
|
|
14
|
+
|
|
15
|
+
sigTest = BGLS04(groupObj)
|
|
16
|
+
|
|
17
|
+
(gpk, gmsk, gsk) = sigTest.keygen(n)
|
|
18
|
+
|
|
19
|
+
message = 'Hello World this is a message!'
|
|
20
|
+
if debug: print("\n\nSign the following M: '%s'" % (message))
|
|
21
|
+
|
|
22
|
+
signature = sigTest.sign(gpk, gsk[user], message)
|
|
23
|
+
|
|
24
|
+
result = sigTest.verify(gpk, message, signature)
|
|
25
|
+
#if result:
|
|
26
|
+
# print("Verify signers identity...")
|
|
27
|
+
# index = sigTest.open(gpk, gmsk, message, signature)
|
|
28
|
+
# i = 0
|
|
29
|
+
# while i < n:
|
|
30
|
+
# if gsk[i][0] == index:
|
|
31
|
+
# print('Found index of signer: %d' % i)
|
|
32
|
+
# print('A = %s' % index)
|
|
33
|
+
# i += 1
|
|
34
|
+
assert result, "Signature Failed"
|
|
35
|
+
if debug: print('Complete!')
|