Skip to content

Instantly share code, notes, and snippets.

@wo0dyn
Created September 24, 2012 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wo0dyn/3776206 to your computer and use it in GitHub Desktop.
Save wo0dyn/3776206 to your computer and use it in GitHub Desktop.

PyElliptic

PyElliptic is a high level wrapper for the cryptographic library : OpenSSL. Under the GNU General Public License

Python3 compatible. For GNU/Linux and Windows. Require OpenSSL

Features

Asymmetric cryptography using Elliptic Curve Cryptography (ECC)

  • Key agreement : ECDH
  • Digital signatures : ECDSA
  • Hybrid encryption : ECIES (like RSA)

Symmetric cryptography

  • AES-128 (CFB and CBC)
  • AES-256 (CFB and CBC)
  • Blowfish (CFB and CBC)

Other

  • CSPRNG
  • HMAC (using SHA512)

Example

#!/usr/bin/python

import pyelliptic

# Symmetric encryption
iv = pyelliptic.cipher.gen_IV('aes-256-cfb')
ctx = pyelliptic.cipher("secretkey", iv, 1, ciphername='aes-256-cfb')

ctx.update('test1')
ctx.update('test2')
ciphertext = ctx.final()

ctx2 = pyelliptic.cipher("secretkey", iv, 0, ciphername='aes-256-cfb')
print ctx2.ciphering(ciphertext)

# Asymmetric encryption
alice = pyelliptic.ecc() # default curve: sect283r1
bob = pyelliptic.ecc(curve='sect571r1')

ciphertext = alice.encrypt("Hello Bob", bob.get_pubkey())
print bob.decrypt(ciphertext)

signature = bob.sign("Hello Alice")
# alice's job :
print pyelliptic.ecc(pubkey=bob.get_pubkey()).verify(signature, "Hello Alice")

# ERROR !!!
try:
    key = alice.get_ecdh_key(bob.get_pubkey())
except: print("For ECDH key agreement, the keys must be defined on the same curve !")

alice = pyelliptic.ecc(curve='sect571r1')
print alice.get_ecdh_key(bob.get_pubkey()).encode('hex')
print bob.get_ecdh_key(alice.get_pubkey()).encode('hex')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment