This repository has been archived on 2024-12-19. You can view files and clone it, but cannot push or open issues or pull requests.
PyBitmessage-2024-12-19/src/pyelliptic
surbhi ed6cd83cae
rebase conflict fix and Ui Enhancement with dynamic addressbook updation and sent screen updation
Ui Enhancement with dynamic addressbook updation and sent screen updation

Changes made for Sent Items refresh feature with auto add new message in kivy
2019-08-02 14:28:03 +05:30
..
__init__.py Debian packaging 2013-04-01 20:23:32 +01:00
arithmetic.py Fixed: Code style and lint fixes 2018-05-24 10:53:11 +01:00
cipher.py LibreSSL compatibility 2017-02-18 17:22:17 +01:00
ecc.py Changes based on style and lint checks. (final_code_quality_12) 2018-10-31 16:20:42 +00:00
hash.py Removed obsolete Protocol v2 code 2014-12-25 04:06:57 -05:00
LICENSE Debian packaging 2013-04-01 20:23:32 +01:00
openssl.py rebase conflict fix and Ui Enhancement with dynamic addressbook updation and sent screen updation 2019-08-02 14:28:03 +05:30
README.md Debian packaging 2013-04-01 20:23:32 +01:00

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 (CBC, OFB, CFB)
  • AES-256 (CBC, OFB, CFB)
  • Blowfish (CFB and CBC)
  • RC4

Other

  • CSPRNG
  • HMAC (using SHA512)
  • PBKDF2 (SHA256 and 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')

ciphertext = ctx.update('test1')
ciphertext += 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')