Git Product home page Git Product logo

python-pure25519's Introduction

python-pure25519

This contains a collection of pure-python functions to implement Curve25519-based cryptography, including:

  • Diffie-Hellman Key Agreement
  • Ed25519 digital signatures
  • SPAKE2 Password Authenticated Key Agreement

You almost certainly want to use pynacl or python-ed25519 instead, which are python bindings to djb's C implementations of Curve25519/Ed25519 (and the rest of the NaCl suite).

Bad things about this module:

  • much slower than C
  • not written by djb, so probably horribly buggy and insecure
  • very much not constant-time: leaks hamming weights like crazy

Good things about this module:

  • can be used without a C compiler
  • compatible with python2 and python3
  • exposes enough point math (addition and scalarmult) to implement SPAKE2

Slow

The pure-python functions are considerably slower than their pynacl (libsodium) equivalents, using python-2.7.9 on my 2.6GHz Core-i7:

function pure25519 pynacl (C)
Ed25519 sign 2.8 ms 142 us
Ed25519 verify 10.8 ms 240 us
DH-start 2.8 ms 72 us
DH-finish 5.4 ms 89 us
SPAKE2 start 5.4 ms N/A
SPAKE2 finish 8.0 ms N/A

This library is conservative, and performs full subgroup-membership checks on decoded points, which adds considerable overhead. The Curve25519/Ed25519 algorithms were designed to not require these checks, so a careful application might be able to improve on this slightly (Ed25519 verify down to 6.2ms, DH-finish to 3.2ms).

Compatibility, and the lack thereof

The sample Diffie-Hellman key-agreement code in dh.py is not actually Curve25519: it uses the Ed25519 curve, which is sufficiently similar for security purposes, but won't interoperate with a proper Curve25519 implementation. It is included just to exercise the API and obtain a comparable performance number.

The Ed25519 implementation should be compatible with other versions, and includes the known-answer-tests from http://ed25519.cr.yp.to/software.html to confirm this.

The SPAKE2 implementation is new, and there's nothing else for it to interoperate with yet.

Sources

This code is adapted and modified from a number of original sources, including:

Many thanks to Ron Garret, Daniel Holth, and Matthew Dempsky.

License

This software is released under the MIT license.

python-pure25519's People

Contributors

warner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

python-pure25519's Issues

eBay's Ed2559 private key is 64 character base64 which is too long

When trying to generate an Ed25519 signature using eBay's private key which I believe is 64 character base64, the length is too long. When I convert to to binary the length is 48 and needs to be 32.

def signature(m,sk,pk):
    assert len(sk) == 32 # seed

Will this code work with longer private keys?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.