pkenc_cs98

Cramer-Shoup Public Key Encryption Scheme (CS98)

Authors: R. Cramer, V. Shoup

Title: “A Practical Public Key Cryptosystem Provably Secure Against Adaptive Chosen Ciphertext Attack”
Published in: CRYPTO 1998
Notes:

Scheme Properties

  • Type: encryption (public key)

  • Setting: DDH-hard EC groups of prime order (F_p) or Integer Groups

  • Assumption: DDH

Implementation

Authors:

Matthew Green

Date:

1/2011

class pkenc_cs98.CS98(groupObj, p=0, q=0)[source]

Bases: 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]