Search code examples
pythoncryptographymingwcharm-crypto

Python.exe stopped working on Charm Crypto HybridEnc.Decrypt()


I am trying to run the code of a Proxy Re-Encryption implementation, thanks to Nikosft on https://github.com/nikosft/IB-PRE

I am using the pre_mg07a.py file. Python executes and successfully prints all debug messages for encryption and reencryption, but on the last line of the following code, it shows python.exe stopped working. I tried finding out source of problem, but all I know is it crashes during decryption when it calls the HybridEnc.decrypt() method in charm.adapters.pkenc_adapt_hybrid.

my test.py file:

from pre_mg07a import PreGA

def main():
    from charm.toolbox.pairinggroup import PairingGroup,GT
    from charm.core.engine.util import objectToBytes,bytesToObject
    from charm.schemes.pkenc.pkenc_cs98 import CS98
    from charm.toolbox.ecgroup import ECGroup
    from charm.toolbox.eccurve import prime192v2
    group = PairingGroup('SS512', secparam=1024)
    groupcs98 = ECGroup(prime192v2)
    pkenc = CS98(groupcs98)
    pre = PreGA(group,pkenc)
    ID1 = "nikos"
    msg  =  group.random(GT)
    print("MESSAGE:::::::\n %s", msg)
    (master_secret_key, params) = pre.setup()
    (public_key, secret_key) = pkenc.keygen()
    id1_secret_key = pre.keyGen(master_secret_key, ID1)
    ciphertext = pre.encrypt(params, ID1, msg)
    re_encryption_key = pre.rkGenPKenc(params,id1_secret_key, public_key)
    ciphertext2 = pre.reEncryptPKenc(params, re_encryption_key, ciphertext)
    pre.decryptPKenc(params, public_key, secret_key, ciphertext2) #problem here
if __name__ == "__main__": main()

https://github.com/nikosft/IB-PRE/blob/master/pre_mg07a.py file 'decrptPKenc' method:

def decryptPKenc(self, params, public_key, secret_key, cid):
    print('here')
    Xbytes = pkenc.decrypt(public_key, secret_key, cid['C3'])#stopped working
    X = bytesToObject(Xbytes, group)          
    m = cid['C2']/pair(cid['C1'],group.hash(X,G1))            
    if(debug):
        print('\nDecrypting...')
        print('m=>')
        print(m)
    return m

Platform details: Windows 7 64bit, Python 3.4 32bit, MingW 32bit with Msys. Installed: openssl 1.0.1u, GMP 5.0.2, PBC 0.5.14, Charm Crypto 0.43.

Tried: Using different python versions, 2.7 and 3.2. I cant configure and make charm correctly with them.

Any help would be really appreciated. I know this might be a very specific topic, but maybe the problem is different. Any suggestions welcome too.


Solution

  • Eventually gave up on windows. Tried Ubuntu 14.04 and it worked after some usual config problems.

    Here's for others how to configure Charm-Crypto for Python 3.4:

    sudo apt-get install subversion
    sudo apt-get install m4
    sudo apt-get install flex
    sudo apt-get install bison
    sudo apt-get install libssl-dev
    sudo apt-get install python3-setuptools python3-dev
    sudo apt-get install libgmp-dev
    wget http://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz
    tar xf pbc-0.5.14.tar.gz
    cd pbc-0.5.14
    ./configure && make && sudo make install
    

    Downloaded charm's tar.gz file from https://pypi.python.org/pypi/charm-crypto/0.43, extracted, and changed directory, then:

    ./configure.sh
    sudo make
    sudo make install
    sudo ldconfig