abouttreesummaryrefslogcommitdiff
path: root/ext/olm/lib/curve25519-donna
ModeNameSize
-rw-r--r--.gitignore209logplain
-rw-r--r--LICENSE.md2091logplain
-rw-r--r--Makefile2294logplain
-rw-r--r--README1253logplain
d---------contrib179logplain
-rw-r--r--curve25519-donna-c64.c13539logplain
-rw-r--r--curve25519-donna.c31699logplain
-rw-r--r--curve25519-donna.podspec618logplain
-rw-r--r--setup.py1483logplain
-rw-r--r--speed-curve25519.c926logplain
-rw-r--r--test-curve25519.c1238logplain
-rw-r--r--test-noncanon.c1167logplain
-rw-r--r--test-sc-curve25519.c1884logplain
-rw-r--r--test-sc-curve25519.s69logplain

See http://code.google.com/p/curve25519-donna/ for details.

BUILDING:

If you run make, two .a archives will be built, similar to djb's curve25519 code. Alternatively, read on:

The C implementation is contained within curve25519-donna.c. It has no external dependancies and is BSD licenced. You can copy/include/link it directly in with your program. Recommended C flags: -O2

The x86-64 bit implementation is contained within curve25519-donna-x86-64.c and curve25519-donna-x86-64.s. Build like this:

% cpp curve25519-donna-x86-64.s > curve25519-donna-x86-64.s.pp % as -o curve25519-donna-x86-64.s.o curve25519-donna-x86-64.s.pp % gcc -O2 -c curve25519-donna-x86-64.c

Then the two .o files can be linked in

USAGE:

The usage is exactly the same as djb's code (as described at http://cr.yp.to/ecdh.html) expect that the function is called curve25519_donna.

In short,

To generate a private key just generate 32 random bytes.

To generate the public key, just do:

static const uint8_t basepoint[32] = {9}; curve25519_donna(mypublic, mysecret, basepoint);

To generate an agreed key do:

uint8_t shared_key[32]; curve25519_donna(shared_key, mysecret, theirpublic);

And hash the shared_key with a cryptographic hash function before using.