Skip to main content

A Python implementation of Cocks' identity-based encryption (IBE) scheme.

Project description


PyPI PyPI - Python Version PyPI - Downloads PyPI - License

A Python implementation of Cocks' identity-based encryption (IBE) scheme [1]. IBE allows strings to be used directly as public encryption keys.

Cocks' scheme uses the quadratic residuosity hardness problem, rather than bilinear pairings with other IBE schemes, e.g. Boneh-Franklin [2]. As a result, no additional dependencies are required for pairing-based cryptography; only gmpy2 is sufficient.


Two classes are utilised for server- (PKG) and client-side communication:

  1. PKGCocksPKG: implements the public key generator (PKG) for the scheme's initialisation and extracting secret keys from identity strings.

  2. ClientCocks: used for encrypting and decrypting messages using the secret key and public modulus generated by CocksPKG.


from pycocks.cocks import CocksPKG

# Instantiate the PKG
# Optional parameters: bit size (default = 2048) and hash function (default = SHA512)
cocks_pkg = CocksPKG()   

# Extract private key, r, from an identity string. This is
# "User1" in this instance.
# A transformed ID string, a, is also returned that is
# required for encryption and decryption by the client.
r, a = cocks_pkg.extract("User1")


from pycocks.cocks import Cocks

# Instantiate the client
# Must use the same modulus, n, as the PKG
cocks = Cocks(cocks_pkg.n)  

# Encryption example
# Transformed identity string, a, is provided by the server PKG
c = cocks.encrypt(b"test", a)

# Decryption example
# Private key, r, is generated by the server PKG
msg = cocks.decrypt(c, r, a)  # => b"test"


Use pytest to execute tests in tests/


  • gmpy2 (tested v2.0.8)


Please use the following if you use pycocks in a publication:

      author={Carlton Shepherd},


  1. C. Cocks, "An identity based encryption scheme based on quadratic residues", Proceedings of the IMA International Conference on Cryptography and Coding. Springer, 2001.
  2. D. Boneh and M. Franklin, "Identity-based encryption from the Weil pairing", Annual International Cryptology Conference. Springer, 2001.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycocks-1.0.tar.gz (6.9 kB view hashes)

Uploaded source

Built Distribution

pycocks-1.0-py3-none-any.whl (5.8 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page