pkenc_cs98

Cramer-Shoup Public Key Encryption Scheme (Decisional Diffie-Hellman Assumption in groups of prime order)

From: “R. Cramer, V. Shoup: A practical public key cryptosystem provably secure against adaptive chosen ciphertext attack”
Published in: CRYPTO 1998
Notes:
  • type: encryption (public key)
  • setting: DDH-hard EC groups of prime order (F_p) or Integer Groups
  • assumption: DDH
  • Name: PKEnc_DDH_CCA_CS98
Authors:Matthew Green
Date:1/2011
class pkenc_cs98.CS98(groupObj, p=0, q=0)[source]

Bases: charm.toolbox.PKEnc.PKEnc

>>> from charm.toolbox.eccurve import prime192v1
>>> from charm.toolbox.ecgroup import ECGroup
>>> groupObj = ECGroup(prime192v1)
>>> pkenc = CS98(groupObj)
>>> (public_key, secret_key) = pkenc.keygen()
>>> msg = b"hello world!!!123456"
>>> cipher_text = pkenc.encrypt(public_key, msg)
>>> decrypted_msg = pkenc.decrypt(public_key, secret_key, cipher_text)
>>> decrypted_msg == msg
True
>>> from charm.toolbox.integergroup import IntegerGroup, integer
>>> p = integer(156053402631691285300957066846581395905893621007563090607988086498527791650834395958624527746916581251903190331297268907675919283232442999706619659475326192111220545726433895802392432934926242553363253333261282122117343404703514696108330984423475697798156574052962658373571332699002716083130212467463571362679)
>>> q = integer(78026701315845642650478533423290697952946810503781545303994043249263895825417197979312263873458290625951595165648634453837959641616221499853309829737663096055610272863216947901196216467463121276681626666630641061058671702351757348054165492211737848899078287026481329186785666349501358041565106233731785681339)
>>> groupObj = IntegerGroup()
>>> pkenc = CS98(groupObj, p, q)
>>> (public_key, secret_key) = pkenc.keygen(1024)
>>> msg = b"hello world. test message"
>>> cipher_text = pkenc.encrypt(public_key, msg)
>>> decrypted_msg = pkenc.decrypt(public_key, secret_key, cipher_text)
>>> decrypted_msg == msg
True
decrypt(pk, sk, c)[source]
encrypt(pk, M)[source]
keygen(secparam=0)[source]