Blob: ecc.h

Blob id: 5d7b25d75add6f8c5ef7f5616b66aca6b9457242

Size: 1.8 KB

 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
/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (c) 2013, Kenneth MacKay
 * All rights reserved.
 *
 */

#include <stdbool.h>
#include <stdint.h>

/* Create a public key from a private key.
 *
 * Inputs:
 *	private_key - Your private key.
 *
 * Outputs:
 *	public_key  - Will be filled in with the public key.
 *
 * Returns true if the public key was generated successfully, false
 * if an error occurred. The keys are with the LSB first.
 */
bool ecc_make_public_key(const uint8_t private_key[32], uint8_t public_key[64]);

/* Create a public/private key pair.
 *
 * Outputs:
 *	public_key  - Will be filled in with the public key.
 *	private_key - Will be filled in with the private key.
 *
 * Returns true if the key pair was generated successfully, false
 * if an error occurred. The keys are with the LSB first.
 */
bool ecc_make_key(uint8_t public_key[64], uint8_t private_key[32]);

/* Check to see if a public key is valid.
 *
 * Inputs:
 *	public_key - The public key to check.
 *
 * Returns true if the public key is valid, false if it is invalid.
*/
bool ecc_valid_public_key(const uint8_t public_key[64]);

/* Compute a shared secret given your secret key and someone else's
 * public key.
 * Note: It is recommended that you hash the result of ecdh_shared_secret
 * before using it for symmetric encryption or HMAC.
 *
 * Inputs:
 *	public_key  - The public key of the remote party.
 *	private_key - Your private key.
 *
 * Outputs:
 *	secret - Will be filled in with the shared secret value.
 *
 * Returns true if the shared secret was generated successfully, false
 * if an error occurred. Both input and output parameters are with the
 * LSB first.
 */
bool ecdh_shared_secret(const uint8_t public_key[64],
				const uint8_t private_key[32],
				uint8_t secret[32]);