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,39 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.grpsig.groupsig_bgls04_var import ShortSig as BGLS04_Var
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class BGLS04_VarTest(unittest.TestCase):
|
|
10
|
+
def testBGLS04_Var(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_Var(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('Successful Verification!')
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if __name__ == "__main__":
|
|
39
|
+
unittest.main()
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from charm.schemes.hibenc.hibenc_bb04 import HIBE_BB04
|
|
2
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
3
|
+
import unittest
|
|
4
|
+
|
|
5
|
+
debug = False
|
|
6
|
+
|
|
7
|
+
class HIBE_BB04Test(unittest.TestCase):
|
|
8
|
+
def testHIBE_BB04(self):
|
|
9
|
+
groupObj = PairingGroup('SS512')
|
|
10
|
+
hibe = HIBE_BB04(groupObj)
|
|
11
|
+
(mpk, mk) = hibe.setup()
|
|
12
|
+
|
|
13
|
+
# represents public identity
|
|
14
|
+
ID = "bob@mail.com"
|
|
15
|
+
(pk, sk) = hibe.extract(3, mpk, mk, ID)
|
|
16
|
+
# dID => pk, sk
|
|
17
|
+
if debug: print("ID:%s , sk:%s" % (pk, sk))
|
|
18
|
+
|
|
19
|
+
M = groupObj.random(GT)
|
|
20
|
+
if debug: print("M :=", M)
|
|
21
|
+
ct = hibe.encrypt(mpk, pk, M)
|
|
22
|
+
|
|
23
|
+
orig_M = hibe.decrypt(pk, sk, ct)
|
|
24
|
+
assert orig_M == M, "invalid decryption!!!!"
|
|
25
|
+
if debug: print("Successful DECRYPTION!!!")
|
|
26
|
+
|
|
27
|
+
if __name__ == "__main__":
|
|
28
|
+
unittest.main()
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.ibenc.ibenc_bb03 import IBE_BB04
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup
|
|
5
|
+
from charm.toolbox.pairinggroup import ZR, GT
|
|
6
|
+
|
|
7
|
+
debug = False
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class IBE_BB04Test(unittest.TestCase):
|
|
11
|
+
def testIBE_BB04(self):
|
|
12
|
+
# initialize the element object so that object references have global scope
|
|
13
|
+
groupObj = PairingGroup('MNT224')
|
|
14
|
+
ibe = IBE_BB04(groupObj)
|
|
15
|
+
(params, mk) = ibe.setup()
|
|
16
|
+
|
|
17
|
+
# represents public identity
|
|
18
|
+
kID = groupObj.random(ZR)
|
|
19
|
+
key = ibe.extract(mk, kID)
|
|
20
|
+
|
|
21
|
+
M = groupObj.random(GT)
|
|
22
|
+
cipher = ibe.encrypt(params, kID, M)
|
|
23
|
+
m = ibe.decrypt(params, key, cipher)
|
|
24
|
+
|
|
25
|
+
assert m == M, "FAILED Decryption!"
|
|
26
|
+
if debug: print("Successful Decryption!! M => '%s'" % m)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.ibenc.ibenc_bf01 import IBE_BonehFranklin
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class IBE_BonehFranklinTest(unittest.TestCase):
|
|
10
|
+
def testIBE_BonehFranklin(self):
|
|
11
|
+
groupObj = PairingGroup('MNT224', secparam=1024)
|
|
12
|
+
ibe = IBE_BonehFranklin(groupObj)
|
|
13
|
+
|
|
14
|
+
(pk, sk) = ibe.setup()
|
|
15
|
+
|
|
16
|
+
id = 'user@email.com'
|
|
17
|
+
key = ibe.extract(sk, id)
|
|
18
|
+
|
|
19
|
+
m = b"hello world!!!!!"
|
|
20
|
+
ciphertext = ibe.encrypt(pk, id, m)
|
|
21
|
+
|
|
22
|
+
msg = ibe.decrypt(pk, key, ciphertext)
|
|
23
|
+
assert msg == m, "failed decrypt: \n%s\n%s" % (msg, m)
|
|
24
|
+
if debug: print("Successful Decryption!!!")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.ibenc.ibenc_ckrs09 import IBE_CKRS
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class IBE_CKRSTest(unittest.TestCase):
|
|
10
|
+
def testIBE_CKRS(self):
|
|
11
|
+
groupObj = PairingGroup('SS512')
|
|
12
|
+
ibe = IBE_CKRS(groupObj)
|
|
13
|
+
(mpk, msk) = ibe.setup()
|
|
14
|
+
|
|
15
|
+
# represents public identity
|
|
16
|
+
ID = "bob@mail.com"
|
|
17
|
+
sk = ibe.extract(mpk, msk, ID)
|
|
18
|
+
|
|
19
|
+
M = groupObj.random(GT)
|
|
20
|
+
ct = ibe.encrypt(mpk, ID, M)
|
|
21
|
+
m = ibe.decrypt(mpk, sk, ct)
|
|
22
|
+
if debug: print('m =>', m)
|
|
23
|
+
|
|
24
|
+
assert m == M, "FAILED Decryption!"
|
|
25
|
+
if debug: print("Successful Decryption!!! m => '%s'" % m)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.ibenc.ibenc_lsw08 import IBE_Revoke
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class IBE_RevokeTest(unittest.TestCase):
|
|
10
|
+
def testIBE_Revoke(self):
|
|
11
|
+
# scheme designed for symmetric billinear groups
|
|
12
|
+
grp = PairingGroup('SS512')
|
|
13
|
+
n = 5 # total # of users
|
|
14
|
+
|
|
15
|
+
ibe = IBE_Revoke(grp)
|
|
16
|
+
|
|
17
|
+
ID = "user2@email.com"
|
|
18
|
+
S = ["user1@email.com", "user3@email.com", "user4@email.com"]
|
|
19
|
+
(mpk, msk) = ibe.setup(n)
|
|
20
|
+
|
|
21
|
+
sk = ibe.keygen(mpk, msk, ID)
|
|
22
|
+
if debug: print("Keygen...\nsk :=", sk)
|
|
23
|
+
|
|
24
|
+
M = grp.random(GT)
|
|
25
|
+
|
|
26
|
+
ct = ibe.encrypt(mpk, M, S)
|
|
27
|
+
if debug: print("Ciphertext...\nct :=", ct)
|
|
28
|
+
|
|
29
|
+
m = ibe.decrypt(S, ct, sk)
|
|
30
|
+
assert M == m, "Decryption FAILED!"
|
|
31
|
+
if debug: print("Successful Decryption!!!")
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.ibenc.ibenc_sw05 import IBE_SW05_LUC
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class IBE_SW05_LUCTest(unittest.TestCase):
|
|
10
|
+
def testIBE_SW05_LUC(self):
|
|
11
|
+
# initialize the element object so that object references have global scope
|
|
12
|
+
groupObj = PairingGroup('SS512')
|
|
13
|
+
n = 6;
|
|
14
|
+
d = 4
|
|
15
|
+
ibe = IBE_SW05_LUC(groupObj)
|
|
16
|
+
(pk, mk) = ibe.setup(n, d)
|
|
17
|
+
if debug:
|
|
18
|
+
print("Parameter Setup...")
|
|
19
|
+
print("pk =>", pk)
|
|
20
|
+
print("mk =>", mk)
|
|
21
|
+
|
|
22
|
+
w = ['insurance', 'id=2345', 'oncology', 'doctor', 'nurse', 'JHU'] # private identity
|
|
23
|
+
wPrime = ['insurance', 'id=2345', 'doctor', 'oncology', 'JHU', 'billing', 'misc'] # public identity for encrypt
|
|
24
|
+
|
|
25
|
+
(w_hashed, sk) = ibe.extract(mk, w, pk, d, n)
|
|
26
|
+
|
|
27
|
+
M = groupObj.random(GT)
|
|
28
|
+
cipher = ibe.encrypt(pk, wPrime, M, n)
|
|
29
|
+
m = ibe.decrypt(pk, sk, cipher, w_hashed, d)
|
|
30
|
+
|
|
31
|
+
assert m == M, "FAILED Decryption: \nrecovered m = %s and original m = %s" % (m, M)
|
|
32
|
+
if debug: print("Successful Decryption!! M => '%s'" % m)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.ibenc.ibenc_waters05 import IBE_N04
|
|
4
|
+
from charm.toolbox.hash_module import Waters
|
|
5
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
6
|
+
|
|
7
|
+
debug = False
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class IBE_N04Test(unittest.TestCase):
|
|
11
|
+
def testIBE_N04(self):
|
|
12
|
+
# initialize the element object so that object references have global scope
|
|
13
|
+
groupObj = PairingGroup('SS512')
|
|
14
|
+
waters = Waters(groupObj)
|
|
15
|
+
ibe = IBE_N04(groupObj)
|
|
16
|
+
(pk, mk) = ibe.setup()
|
|
17
|
+
|
|
18
|
+
# represents public identity
|
|
19
|
+
ID = "bob@mail.com"
|
|
20
|
+
kID = waters.hash(ID)
|
|
21
|
+
# if debug: print("Bob's key =>", kID)
|
|
22
|
+
key = ibe.extract(mk, kID)
|
|
23
|
+
|
|
24
|
+
M = groupObj.random(GT)
|
|
25
|
+
cipher = ibe.encrypt(pk, kID, M)
|
|
26
|
+
m = ibe.decrypt(pk, key, cipher)
|
|
27
|
+
# print('m =>', m)
|
|
28
|
+
|
|
29
|
+
assert m == M, "FAILED Decryption!"
|
|
30
|
+
if debug: print("Successful Decryption!!! m => '%s'" % m)
|
|
31
|
+
del groupObj
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
from charm.schemes.ibenc.ibenc_waters09 import DSE09
|
|
4
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
5
|
+
|
|
6
|
+
debug = False
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DSE09Test(unittest.TestCase):
|
|
10
|
+
def testDSE09(self):
|
|
11
|
+
grp = PairingGroup('SS512')
|
|
12
|
+
|
|
13
|
+
ibe = DSE09(grp)
|
|
14
|
+
|
|
15
|
+
ID = "user2@email.com"
|
|
16
|
+
(mpk, msk) = ibe.setup()
|
|
17
|
+
|
|
18
|
+
sk = ibe.keygen(mpk, msk, ID)
|
|
19
|
+
if debug: print("Keygen...\nsk :=", sk)
|
|
20
|
+
|
|
21
|
+
M = grp.random(GT)
|
|
22
|
+
ct = ibe.encrypt(mpk, M, ID)
|
|
23
|
+
if debug: print("Ciphertext...\nct :=", ct)
|
|
24
|
+
|
|
25
|
+
m = ibe.decrypt(ct, sk)
|
|
26
|
+
assert M == m, "Decryption FAILED!"
|
|
27
|
+
if debug: print("Successful Decryption!!!")
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from charm.toolbox.pairinggroup import PairingGroup
|
|
2
|
+
from charm.schemes.pk_vrf import VRF10
|
|
3
|
+
import unittest
|
|
4
|
+
|
|
5
|
+
debug = False
|
|
6
|
+
class VRF10Test(unittest.TestCase):
|
|
7
|
+
def testVRF10(self):
|
|
8
|
+
grp = PairingGroup('MNT224')
|
|
9
|
+
|
|
10
|
+
# bits
|
|
11
|
+
x1 = [0, 1, 1, 0, 1, 0, 1, 0]
|
|
12
|
+
# x2 = [1, 1, 1, 0, 1, 0, 1, 0]
|
|
13
|
+
# block of bits
|
|
14
|
+
n = 8
|
|
15
|
+
|
|
16
|
+
vrf = VRF10(grp)
|
|
17
|
+
|
|
18
|
+
# setup the VRF to accept input blocks of 8-bits
|
|
19
|
+
(pk, sk) = vrf.setup(n)
|
|
20
|
+
|
|
21
|
+
# generate proof over block x (using sk)
|
|
22
|
+
st = vrf.prove(sk, x1)
|
|
23
|
+
|
|
24
|
+
# verify bits using pk and proof
|
|
25
|
+
assert vrf.verify(pk, x1, st), "VRF failed verification"
|
|
26
|
+
# assert vrf.verify(pk, x2, st), "VRF should FAIL verification!!!"
|
|
27
|
+
|
|
28
|
+
if __name__ == "__main__":
|
|
29
|
+
unittest.main()
|
|
File without changes
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from charm.adapters.pkenc_adapt_hybrid import HybridEnc
|
|
6
|
+
from charm.adapters.pkenc_adapt_chk04 import CHK04
|
|
7
|
+
from charm.adapters.pkenc_adapt_bchk05 import BCHKIBEnc
|
|
8
|
+
from charm.adapters.ibenc_adapt_identityhash import HashIDAdapter
|
|
9
|
+
from charm.schemes.encap_bchk05 import EncapBCHK
|
|
10
|
+
from charm.schemes.ibenc.ibenc_bb03 import IBE_BB04
|
|
11
|
+
from charm.schemes.pksig.pksig_bls04 import BLS01
|
|
12
|
+
from charm.schemes.pkenc.pkenc_cs98 import CS98
|
|
13
|
+
from charm.schemes.pkenc.pkenc_elgamal85 import ElGamal
|
|
14
|
+
from charm.schemes.pkenc.pkenc_paillier99 import Pai99
|
|
15
|
+
from charm.schemes.pkenc.pkenc_rabin import Rabin_Enc, Rabin_Sig
|
|
16
|
+
from charm.schemes.pkenc.pkenc_rsa import RSA_Enc, RSA_Sig
|
|
17
|
+
from charm.toolbox.pairinggroup import PairingGroup, GT
|
|
18
|
+
from charm.toolbox.ecgroup import elliptic_curve, ECGroup
|
|
19
|
+
from charm.toolbox.eccurve import prime192v1, prime192v2
|
|
20
|
+
from charm.toolbox.integergroup import RSAGroup, integer, IntegerGroupQ, IntegerGroup
|
|
21
|
+
|
|
22
|
+
debug = False
|
|
23
|
+
|
|
24
|
+
class BCHKIBEncTest(unittest.TestCase):
|
|
25
|
+
def testBCHKIBEnc(self):
|
|
26
|
+
groupObj = PairingGroup('SS512')
|
|
27
|
+
ibe = IBE_BB04(groupObj)
|
|
28
|
+
encap = EncapBCHK()
|
|
29
|
+
|
|
30
|
+
hyb_ibe = BCHKIBEnc(ibe, groupObj, encap)
|
|
31
|
+
|
|
32
|
+
(pk, sk) = hyb_ibe.keygen()
|
|
33
|
+
if debug:
|
|
34
|
+
print("pk => ", pk)
|
|
35
|
+
print("sk => ", sk)
|
|
36
|
+
|
|
37
|
+
msg = b"Hello World!"
|
|
38
|
+
|
|
39
|
+
ct = hyb_ibe.encrypt(pk, msg)
|
|
40
|
+
if debug:
|
|
41
|
+
print("\nCiphertext")
|
|
42
|
+
print("C1 =>", ct['C1'])
|
|
43
|
+
print("C2 =>", ct['C2'])
|
|
44
|
+
print("tag =>", ct['tag'])
|
|
45
|
+
|
|
46
|
+
decrypted_msg = hyb_ibe.decrypt(pk, sk, ct)
|
|
47
|
+
assert decrypted_msg == msg
|
|
48
|
+
if debug: print("Successful Decryption!!! =>", decrypted_msg)
|
|
49
|
+
del groupObj
|
|
50
|
+
|
|
51
|
+
class CHK04Test(unittest.TestCase):
|
|
52
|
+
def testCHK04(self):
|
|
53
|
+
groupObj = PairingGroup('SS512')
|
|
54
|
+
# instantiate an Identity-Based Encryption scheme
|
|
55
|
+
ibe = IBE_BB04(groupObj)
|
|
56
|
+
hash_ibe = HashIDAdapter(ibe, groupObj)
|
|
57
|
+
|
|
58
|
+
# instantiate an one-time signature scheme such as BLS04
|
|
59
|
+
ots = BLS01(groupObj)
|
|
60
|
+
|
|
61
|
+
pkenc = CHK04(hash_ibe, ots, groupObj)
|
|
62
|
+
|
|
63
|
+
# not sure how to enforce secparam yet
|
|
64
|
+
(pk, sk) = pkenc.keygen(0)
|
|
65
|
+
|
|
66
|
+
msg = groupObj.random(GT)
|
|
67
|
+
ciphertext = pkenc.encrypt(pk, msg)
|
|
68
|
+
|
|
69
|
+
rec_msg = pkenc.decrypt(pk, sk, ciphertext)
|
|
70
|
+
assert rec_msg == msg, "FAILED Decryption!!!"
|
|
71
|
+
if debug: print("Successful Decryption!")
|
|
72
|
+
|
|
73
|
+
class HybridEncTest(unittest.TestCase):
|
|
74
|
+
def testHybridEnc(self):
|
|
75
|
+
groupObj = ECGroup(prime192v1)
|
|
76
|
+
pkenc = ElGamal(groupObj)
|
|
77
|
+
hyenc = HybridEnc(pkenc, msg_len=groupObj.bitsize())
|
|
78
|
+
|
|
79
|
+
(pk, sk) = hyenc.keygen()
|
|
80
|
+
|
|
81
|
+
# message len should be group.bitsize() len for prime192v1 (or 20 bytes)
|
|
82
|
+
m = b'the hello world msg1'
|
|
83
|
+
cipher = hyenc.encrypt(pk, m)
|
|
84
|
+
orig_m = hyenc.decrypt(pk, sk, cipher)
|
|
85
|
+
assert m == orig_m, "Failed Decryption"
|
|
86
|
+
if debug: print("Successful Decryption!!")
|
|
87
|
+
|
|
88
|
+
class EC_CS98Test(unittest.TestCase):
|
|
89
|
+
def testEC_CS98(self):
|
|
90
|
+
groupObj = ECGroup(prime192v1)
|
|
91
|
+
pkenc = CS98(groupObj)
|
|
92
|
+
|
|
93
|
+
(pk, sk) = pkenc.keygen()
|
|
94
|
+
|
|
95
|
+
# message len should be group.bitsize() len for prime192v1 (or 20 bytes)
|
|
96
|
+
M = b'the hello world msg1'
|
|
97
|
+
ciphertext = pkenc.encrypt(pk, M)
|
|
98
|
+
message = pkenc.decrypt(pk, sk, ciphertext)
|
|
99
|
+
|
|
100
|
+
assert M == message, "Failed Decryption!!!"
|
|
101
|
+
if debug: print("SUCCESSFUL DECRYPTION!!! => %s" % message)
|
|
102
|
+
|
|
103
|
+
class CS98Test(unittest.TestCase):
|
|
104
|
+
def testCS98(self):
|
|
105
|
+
p = integer(156053402631691285300957066846581395905893621007563090607988086498527791650834395958624527746916581251903190331297268907675919283232442999706619659475326192111220545726433895802392432934926242553363253333261282122117343404703514696108330984423475697798156574052962658373571332699002716083130212467463571362679)
|
|
106
|
+
q = integer(78026701315845642650478533423290697952946810503781545303994043249263895825417197979312263873458290625951595165648634453837959641616221499853309829737663096055610272863216947901196216467463121276681626666630641061058671702351757348054165492211737848899078287026481329186785666349501358041565106233731785681339)
|
|
107
|
+
groupObj = IntegerGroup()
|
|
108
|
+
pkenc = CS98(groupObj, p, q)
|
|
109
|
+
|
|
110
|
+
(pk, sk) = pkenc.keygen(1024)
|
|
111
|
+
M = b"hello world. test message"
|
|
112
|
+
ciphertext = pkenc.encrypt(pk, M)
|
|
113
|
+
|
|
114
|
+
message = pkenc.decrypt(pk, sk, ciphertext)
|
|
115
|
+
|
|
116
|
+
assert M == message, "UNSUCCESSFUL!!!! :-( why?"
|
|
117
|
+
if debug: print("SUCCESSFULLY RECOVERED => %s" % message)
|
|
118
|
+
|
|
119
|
+
class ElGamalTest(unittest.TestCase):
|
|
120
|
+
def testElGamal(self):
|
|
121
|
+
groupObj = ECGroup(prime192v2)
|
|
122
|
+
el = ElGamal(groupObj)
|
|
123
|
+
(pk, sk) = el.keygen()
|
|
124
|
+
# message len should be group.bitsize() len for prime192v1 (or 20 bytes)
|
|
125
|
+
msg = b'the hello world msg1'
|
|
126
|
+
cipher1 = el.encrypt(pk, msg)
|
|
127
|
+
m = el.decrypt(pk, sk, cipher1)
|
|
128
|
+
assert m == msg, "Failed Decryption!!!"
|
|
129
|
+
if debug: print("SUCCESSFULLY DECRYPTED!!!")
|
|
130
|
+
|
|
131
|
+
class ElGamalTest(unittest.TestCase):
|
|
132
|
+
def testElGamal(self):
|
|
133
|
+
p = integer(148829018183496626261556856344710600327516732500226144177322012998064772051982752493460332138204351040296264880017943408846937646702376203733370973197019636813306480144595809796154634625021213611577190781215296823124523899584781302512549499802030946698512327294159881907114777803654670044046376468983244647367)
|
|
134
|
+
q = integer(74414509091748313130778428172355300163758366250113072088661006499032386025991376246730166069102175520148132440008971704423468823351188101866685486598509818406653240072297904898077317312510606805788595390607648411562261949792390651256274749901015473349256163647079940953557388901827335022023188234491622323683)
|
|
135
|
+
groupObj = IntegerGroupQ()
|
|
136
|
+
el = ElGamal(groupObj, p, q)
|
|
137
|
+
(pk, sk) = el.keygen()
|
|
138
|
+
msg = b"hello world!"
|
|
139
|
+
cipher1 = el.encrypt(pk, msg)
|
|
140
|
+
m = el.decrypt(pk, sk, cipher1)
|
|
141
|
+
assert m == msg, "Failed Decryption!!!"
|
|
142
|
+
if debug: print("SUCCESSFULLY DECRYPTED!!!")
|
|
143
|
+
|
|
144
|
+
class Pai99Test(unittest.TestCase):
|
|
145
|
+
def testPai99(self):
|
|
146
|
+
group = RSAGroup()
|
|
147
|
+
pai = Pai99(group)
|
|
148
|
+
|
|
149
|
+
(pk, sk) = pai.keygen()
|
|
150
|
+
|
|
151
|
+
m1 = 12345678987654321
|
|
152
|
+
m2 = 12345761234123409
|
|
153
|
+
m3 = 24691440221777730 # target
|
|
154
|
+
c1 = pai.encrypt(pk, m1)
|
|
155
|
+
c2 = pai.encrypt(pk, m2)
|
|
156
|
+
|
|
157
|
+
if debug: print("c1 =>", c1, "\n")
|
|
158
|
+
if debug: print("c2 =>", c2, "\n")
|
|
159
|
+
c3 = c1 + c2
|
|
160
|
+
if debug: print("Homomorphic Add Test...\nc1 + c2 =>", c3, "\n")
|
|
161
|
+
|
|
162
|
+
orig_m = pai.decrypt(pk, sk, c3)
|
|
163
|
+
if debug: print("orig_m =>", orig_m)
|
|
164
|
+
|
|
165
|
+
# m3 = m1 + m2
|
|
166
|
+
assert m3 == orig_m, "FAILED Decryption!!!"
|
|
167
|
+
if debug: print("Successful Decryption!")
|
|
168
|
+
|
|
169
|
+
if debug: print("Homomorphic Mul Test...\n")
|
|
170
|
+
c4 = c1 + 200
|
|
171
|
+
if debug: print("c4 = c1 + 200 =>", c4, "\n")
|
|
172
|
+
orig_m = pai.decrypt(pk, sk, c4)
|
|
173
|
+
if debug: print("m4 =>", orig_m, "\n")
|
|
174
|
+
|
|
175
|
+
c5 = c2 * 20201
|
|
176
|
+
if debug: print("c5 = c2 * 2021 =>", c5, "\n")
|
|
177
|
+
orig_m = pai.decrypt(pk, sk, c5)
|
|
178
|
+
if debug: print("m5 =>", orig_m, "\n")
|
|
179
|
+
|
|
180
|
+
messages = range(0, 10)
|
|
181
|
+
cts = []
|
|
182
|
+
|
|
183
|
+
for m in messages:
|
|
184
|
+
c = pai.encrypt(pk, pai.encode(pk['n'], m))
|
|
185
|
+
cts.append(c)
|
|
186
|
+
enc_m = pai.encode(pk['n'], m)
|
|
187
|
+
rec_m = pai.decrypt(pk, sk, c)
|
|
188
|
+
assert rec_m == m, "Failed to decrypt"
|
|
189
|
+
|
|
190
|
+
# test homomorphic properties (addition)
|
|
191
|
+
c0 = cts[0]
|
|
192
|
+
for i in range(1, len(cts)):
|
|
193
|
+
c0 = c0 + cts[i]
|
|
194
|
+
|
|
195
|
+
rec_sum = pai.decrypt(pk, sk, c0)
|
|
196
|
+
print("Total Sum: ", rec_sum)
|
|
197
|
+
tot_sum = sum(list(messages))
|
|
198
|
+
assert rec_sum == tot_sum, "Failed to decrypt to correct sum"
|
|
199
|
+
|
|
200
|
+
class Rabin_EncTest(unittest.TestCase):
|
|
201
|
+
@pytest.mark.skip(reason="Fails on Linux CI - SAEP padding decode issue")
|
|
202
|
+
def testRabin_Enc(self):
|
|
203
|
+
rabin = Rabin_Enc()
|
|
204
|
+
|
|
205
|
+
(pk, sk) = rabin.keygen(128, 1024)
|
|
206
|
+
|
|
207
|
+
m = b'This is a test'
|
|
208
|
+
#m = 55
|
|
209
|
+
#m = b'A'
|
|
210
|
+
c = rabin.encrypt(pk, m)
|
|
211
|
+
if debug: print("ct =>", c)
|
|
212
|
+
|
|
213
|
+
orig_m = rabin.decrypt(pk, sk, c)
|
|
214
|
+
if debug: print("recovered m =>", orig_m)
|
|
215
|
+
|
|
216
|
+
assert m == orig_m
|
|
217
|
+
if debug: print("Successful Decryption!!!")
|
|
218
|
+
|
|
219
|
+
class Rabin_SigTest(unittest.TestCase):
|
|
220
|
+
@pytest.mark.skip_py312plus
|
|
221
|
+
def testRabin_Sig(self):
|
|
222
|
+
M = b'This is a test message.'
|
|
223
|
+
rabin = Rabin_Sig()
|
|
224
|
+
(pk, sk) = rabin.keygen(1024)
|
|
225
|
+
S = rabin.sign(sk, M)
|
|
226
|
+
assert rabin.verify(pk, M, S)
|
|
227
|
+
if debug: print("Successful Signature!")
|
|
228
|
+
|
|
229
|
+
class RSA_EncTest(unittest.TestCase):
|
|
230
|
+
def testRSA_Enc(self):
|
|
231
|
+
rsa = RSA_Enc()
|
|
232
|
+
|
|
233
|
+
(pk, sk) = rsa.keygen(1024)
|
|
234
|
+
|
|
235
|
+
m = b'This is a test'
|
|
236
|
+
c = rsa.encrypt(pk, m)
|
|
237
|
+
if debug: print("ct =>", c)
|
|
238
|
+
|
|
239
|
+
orig_m = rsa.decrypt(pk, sk, c)
|
|
240
|
+
if debug: print("recovered m =>", orig_m)
|
|
241
|
+
|
|
242
|
+
assert m == orig_m
|
|
243
|
+
if debug: print("Successful Decryption!!!")
|
|
244
|
+
|
|
245
|
+
class RSA_SigTest(unittest.TestCase):
|
|
246
|
+
def testRSA_Sig(self):
|
|
247
|
+
M = b'This is a test message.'
|
|
248
|
+
rsa = RSA_Sig()
|
|
249
|
+
(pk, sk) = rsa.keygen(1024)
|
|
250
|
+
S = rsa.sign(sk, M)
|
|
251
|
+
assert rsa.verify(pk, M, S)
|
|
252
|
+
if debug: print("Successful Signature!")
|
|
253
|
+
|
|
254
|
+
if __name__ == "__main__":
|
|
255
|
+
unittest.main()
|
|
File without changes
|