Skip to content

Latest commit

 

History

History
100 lines (72 loc) · 2.76 KB

README.md

File metadata and controls

100 lines (72 loc) · 2.76 KB

py25519

Python wrapper around curve25519 by mehdi sotoodeh. The files under py25519/c are from mehdi sotoodeh and are copied unchanged from https://github.com/msotoodeh/curve25519.

LICENSE

The files under py25519/c are licensed under the MIT LICENSE (see license.txt file under py25519/c).

All remaining files in this package are licensed under the GNU General Public License version 3 or (at your option) any later version.

See the file LICENSE-GPLv3.txt for details of the GNU General Public License version 3.

Class Documentation

class Key25519(__builtin__.object)
	  __init__(self, secretkey=None, verifyingkey=None, pubkey=None)
	    '''
	      secretkey-->bytes[32]
	        verifyingkey-->bytes[32]
	      pubkey-->bytes[32]

	      A PublicKey version of the object will have ONLY verifyingkey
	      and pubkey and signingkey will be None
	      A PrivateKey version of the object will have secretkey set
	      and verifyingkey and pubkey are ignored and derived from secretkey

	      Storing and reusing the secretkey is a way to recreate your key pair
	    '''

	  get_ecdh_key(self, other)
	    '''
	      other-->Key25519 instance
	    '''

	  public_key(self)
	    '''
	      Returns a PublicKey version of this object
	    '''

	  selftest(self)
	    '''
	      Returns-->boolean
	    '''

	  serialize(self)

	  sign = wrapped(*args, **kwargs)

	  verify = wrapped(*args, **kwargs)

	  # ---------------------------------------------------------------------
	  # Properties (data descriptors)
	  # ---------------------------------------------------------------------

	  pubkey

	  secretkey

	  signingkey

	  verifyingkey

Simple test

see py25519.test.py

from py25519 import Key25519


c = Key25519()
print('secretkey: ', c.secretkey)
print('signingkey: ', c.signingkey)
print('verifyingkey: ', c.verifyingkey)

msg = 'Hello world'
badmsg = msg + '1'
sig = c.sign(msg)
badsig = c.sign(badmsg)
print('good verify: ', c.verify(sig, msg))
print('badmsg verify: ', c.verify(sig, badmsg))
print('badsig verify: ', c.verify(badsig, msg))

d = Key25519(secretkey=c.secretkey)
print('----- d is a copy of c -----')
print('d.verify: ', d.verify(sig, msg))
print('c == d:', c == d)
print('public(c) == public(d):', c.public_key() == d.public_key())
print('c == public(d):', c == d.public_key())

print('----- e is a new different key -----')
e = Key25519()
print('e.verify: ', e.verify(sig, msg))
print('c == e:', c == e)
print('public(c) == public(e):', c.public_key() == e.public_key())

print('----- Test ECDH shared key -----')
ecdh1 = c.get_ecdh_key(e.public_key())
ecdh2 = e.get_ecdh_key(c.public_key())
print('ecdh equal: ', ecdh1 == ecdh2)
ecdh3 = e.get_ecdh_key(c.public_key())
print('ecdh equal again: ', ecdh1 == ecdh3)