| Mode | Name | Size | |
|---|---|---|---|
| -rw-r--r-- | .gitignore | 209 | logplain |
| -rw-r--r-- | LICENSE.md | 2091 | logplain |
| -rw-r--r-- | Makefile | 2294 | logplain |
| -rw-r--r-- | README | 1253 | logplain |
| d--------- | contrib | 179 | logplain |
| -rw-r--r-- | curve25519-donna-c64.c | 13539 | logplain |
| -rw-r--r-- | curve25519-donna.c | 31699 | logplain |
| -rw-r--r-- | curve25519-donna.podspec | 618 | logplain |
| -rw-r--r-- | setup.py | 1483 | logplain |
| -rw-r--r-- | speed-curve25519.c | 926 | logplain |
| -rw-r--r-- | test-curve25519.c | 1238 | logplain |
| -rw-r--r-- | test-noncanon.c | 1167 | logplain |
| -rw-r--r-- | test-sc-curve25519.c | 1884 | logplain |
| -rw-r--r-- | test-sc-curve25519.s | 69 | logplain |
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.
