JHUISI / charm

Charm: A Framework for Rapidly Prototyping Cryptosystems
http://charm-crypto.io
GNU Lesser General Public License v3.0
542 stars 166 forks source link

Support multiple ABEnc adapters with varying schemes #254

Closed raghavkaul closed 4 years ago

raghavkaul commented 4 years ago

When instantiating multiple HybridABEnc adapters with varying ABEnc schemes, the last ABEnc scheme overwrites the keygen/encrypt/decrypt functions for all other adapters.

Small test case:

>>> from charm.toolbox.pairinggroup import PairingGroup
>>> from charm.schemes.abenc.abenc_bsw07 import CPabe_BSW07
>>> from charm.schemes.abenc.abenc_waters09 import CPabe09
>>> from charm.adapters.abenc_adapt_hybrid import HybridABEnc
>>> group = PairingGroup("SS512")
>>> bsw07 = CPabe_BSW07(group)
>>> mpk, mk = bsw07.setup()
>>> waters09 = CPabe09(group)
>>> hyb_bsw07 = HybridABEnc(bsw07, group)
>>> hyb_bsw07.encrypt(mpk, b"foo", "A AND B")
{'c1': ... } # Correct result
>>> hyb_waters09 = HybridABEnc(waters09, group)
>>> hyb_bsw07.encrypt(mpk, b"foo", "A AND B")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/Charm_Crypto-0.50-py3.6-linux-x86_64.egg/charm/adapters/abenc_adapt_hybrid.py", line 38, in encrypt
    c1 = abenc.encrypt(pk, key, object)
  File "/usr/local/lib/python3.6/dist-packages/Charm_Crypto-0.50-py3.6-linux-x86_64.egg/charm/schemes/abenc/abenc_waters09.py", line 69, in encrypt
    C_tilde = (pk['e(gg)^alpha'] ** s) * M
KeyError: 'e(gg)^alpha'