-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcurve25519.h
74 lines (62 loc) · 2.06 KB
/
curve25519.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* Copyright 2017 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
// Ported from ChromeOS EC repository.
// https://chromium.googlesource.com/chromiumos/platform/ec/+/\
// 136a80e1138633c2f2ac249c15078b587af9c7ec/include/curve25519.h
#ifndef HAMMERD_CURVE25519_H_
#define HAMMERD_CURVE25519_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/* Curve25519.
*
* Curve25519 is an elliptic curve. See https://tools.ietf.org/html/rfc7748.
*/
/* X25519.
*
* X25519 is the Diffie-Hellman primitive built from curve25519. It is
* sometimes referred to as “curve25519”, but “X25519” is a more precise
* name.
* See http://cr.yp.to/ecdh.html and https://tools.ietf.org/html/rfc7748.
*/
#define X25519_PRIVATE_KEY_LEN 32
#define X25519_PUBLIC_VALUE_LEN 32
/**
* Generate a public/private key pair.
* @param out_public_value generated public key.
* @param out_private_value generated private key.
*/
void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]);
/**
* Diffie-Hellman function.
* @param out_shared_key
* @param private_key
* @param out_public_value
* @return one on success and zero on error.
*
* X25519() writes a shared key to @out_shared_key that is calculated from the
* given private key and the peer's public value.
*
* Don't use the shared key directly, rather use a KDF and also include the two
* public values as inputs.
*/
int X25519(uint8_t out_shared_key[32],
const uint8_t private_key[32],
const uint8_t peers_public_value[32]);
/**
* Compute the matching public key.
* @param out_public_value computed public key.
* @param private_key private key to use.
*
* X25519_public_from_private() calculates a Diffie-Hellman public value from
* the given private key and writes it to @out_public_value.
*/
void X25519_public_from_private(uint8_t out_public_value[32],
const uint8_t private_key[32]);
#ifdef __cplusplus
}
#endif
#endif // HAMMERD_CURVE25519_H_