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:
-
PKG —
CocksPKG
: implements the public key generator (PKG) for the scheme's initialisation and extracting secret keys from identity strings. -
Client —
Cocks
: used for encrypting and decrypting messages using the secret key and public modulus generated byCocksPKG
.
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/test_pycocks.py
- gmpy2 (tested v2.0.8)
Please use the following if you use pycocks in a publication:
@software{shepherd:pycocks,
title={pycocks},
version={1.0},
author={Carlton Shepherd},
year={2022},
url={https://github.com/cgshep/pycocks}
}
- C. Cocks, "An identity based encryption scheme based on quadratic residues", Proceedings of the IMA International Conference on Cryptography and Coding. Springer, 2001.
- D. Boneh and M. Franklin, "Identity-based encryption from the Weil pairing", Annual International Cryptology Conference. Springer, 2001.