23 #ifndef CRYPTO_CURVE15519_h
24 #define CRYPTO_CURVE15519_h
31 #define CURVE25519_LIMB_8BIT 0
32 #define CURVE25519_LIMB_16BIT 1
33 #define CURVE25519_LIMB_32BIT 0
38 static bool eval(uint8_t result[32],
const uint8_t s[32],
const uint8_t x[32]);
40 static void dh1(uint8_t k[32], uint8_t f[32]);
41 static bool dh2(uint8_t k[32], uint8_t f[32]);
43 #if defined(TEST_CURVE25519_FIELD_OPS)
49 #if CURVE25519_LIMB_8BIT
50 typedef uint8_t limb_t;
51 typedef int8_t slimb_t;
52 typedef uint16_t dlimb_t;
53 #elif CURVE25519_LIMB_16BIT
54 typedef uint16_t limb_t;
55 typedef int16_t slimb_t;
56 typedef uint32_t dlimb_t;
57 #elif CURVE25519_LIMB_32BIT
58 typedef uint32_t limb_t;
59 typedef int32_t slimb_t;
60 typedef uint64_t dlimb_t;
62 #error "limb_t must be 8, 16, or 32 bits in size"
65 static uint8_t isWeakPoint(
const uint8_t k[32]);
67 static void reduce(limb_t *result, limb_t *x, uint8_t size);
68 static limb_t reduceQuick(limb_t *x);
70 static void mul(limb_t *result,
const limb_t *x,
const limb_t *y);
71 static void square(limb_t *result,
const limb_t *x)
76 static void mulA24(limb_t *result,
const limb_t *x);
78 static void add(limb_t *result,
const limb_t *x,
const limb_t *y);
79 static void sub(limb_t *result,
const limb_t *x,
const limb_t *y);
81 static void cswap(uint8_t select, limb_t *x, limb_t *y);
83 static void recip(limb_t *result,
const limb_t *x);
85 static void unpack(limb_t *result,
const uint8_t *x);
86 static void pack(uint8_t *result,
const limb_t *x);
Diffie-Hellman key agreement based on the elliptic curve modulo 2^255 - 19.
static bool eval(uint8_t result[32], const uint8_t s[32], const uint8_t x[32])
Evaluates the raw Curve25519 function.
static void dh1(uint8_t k[32], uint8_t f[32])
Performs phase 1 of a Diffie-Hellman key exchange using Curve25519.
static bool dh2(uint8_t k[32], uint8_t f[32])
Performs phase 2 of a Diffie-Hellman key exchange using Curve25519.