tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

README (1320B)


      1 See http://code.google.com/p/curve25519-donna/ for details.
      2 
      3 BUILDING:
      4 
      5 If you run `make`, two .a archives will be built, similar to djb's curve25519
      6 code. Alternatively, read on:
      7 
      8 The C implementation is contained within curve25519-donna.c. It has no external
      9 dependencies and is BSD licenced. You can copy/include/link it directly in with
     10 your program. Recommended C flags: -O2
     11 
     12 The x86-64 bit implementation is contained within curve25519-donna-x86-64.c and
     13 curve25519-donna-x86-64.s. Build like this:
     14 
     15 % cpp curve25519-donna-x86-64.s > curve25519-donna-x86-64.s.pp
     16 % as -o curve25519-donna-x86-64.s.o curve25519-donna-x86-64.s.pp
     17 % gcc -O2 -c curve25519-donna-x86-64.c
     18 
     19 Then the two .o files can be linked in
     20 
     21 USAGE:
     22 
     23 The usage is exactly the same as djb's code (as described at
     24 http://cr.yp.to/ecdh.html) expect that the function is called curve25519_donna.
     25 
     26 In short,
     27 
     28 To generate a private key, generate 32 random bytes and:
     29 
     30   mysecret[0] &= 248;
     31   mysecret[31] &= 127;
     32   mysecret[31] |= 64;
     33 
     34 To generate the public key, just do
     35 
     36   static const uint8_t basepoint[32] = {9};
     37   curve25519_donna(mypublic, mysecret, basepoint);
     38 
     39 To generate an agreed key do:
     40   uint8_t shared_key[32];
     41   curve25519_donna(shared_key, mysecret, theirpublic);
     42 
     43 And hash the shared_key with a cryptographic hash function before using.
     44