Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/crypto/dh.h
26285 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* Diffie-Hellman secret to be used with kpp API along with helper functions
4
*
5
* Copyright (c) 2016, Intel Corporation
6
* Authors: Salvatore Benedetto <[email protected]>
7
*/
8
#ifndef _CRYPTO_DH_
9
#define _CRYPTO_DH_
10
11
/**
12
* DOC: DH Helper Functions
13
*
14
* To use DH with the KPP cipher API, the following data structure and
15
* functions should be used.
16
*
17
* To use DH with KPP, the following functions should be used to operate on
18
* a DH private key. The packet private key that can be set with
19
* the KPP API function call of crypto_kpp_set_secret.
20
*/
21
22
/**
23
* struct dh - define a DH private key
24
*
25
* @key: Private DH key
26
* @p: Diffie-Hellman parameter P
27
* @g: Diffie-Hellman generator G
28
* @key_size: Size of the private DH key
29
* @p_size: Size of DH parameter P
30
* @g_size: Size of DH generator G
31
*/
32
struct dh {
33
const void *key;
34
const void *p;
35
const void *g;
36
unsigned int key_size;
37
unsigned int p_size;
38
unsigned int g_size;
39
};
40
41
/**
42
* crypto_dh_key_len() - Obtain the size of the private DH key
43
* @params: private DH key
44
*
45
* This function returns the packet DH key size. A caller can use that
46
* with the provided DH private key reference to obtain the required
47
* memory size to hold a packet key.
48
*
49
* Return: size of the key in bytes
50
*/
51
unsigned int crypto_dh_key_len(const struct dh *params);
52
53
/**
54
* crypto_dh_encode_key() - encode the private key
55
* @buf: Buffer allocated by the caller to hold the packet DH
56
* private key. The buffer should be at least crypto_dh_key_len
57
* bytes in size.
58
* @len: Length of the packet private key buffer
59
* @params: Buffer with the caller-specified private key
60
*
61
* The DH implementations operate on a packet representation of the private
62
* key.
63
*
64
* Return: -EINVAL if buffer has insufficient size, 0 on success
65
*/
66
int crypto_dh_encode_key(char *buf, unsigned int len, const struct dh *params);
67
68
/**
69
* crypto_dh_decode_key() - decode a private key
70
* @buf: Buffer holding a packet key that should be decoded
71
* @len: Length of the packet private key buffer
72
* @params: Buffer allocated by the caller that is filled with the
73
* unpacked DH private key.
74
*
75
* The unpacking obtains the private key by pointing @p to the correct location
76
* in @buf. Thus, both pointers refer to the same memory.
77
*
78
* Return: -EINVAL if buffer has insufficient size, 0 on success
79
*/
80
int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params);
81
82
/**
83
* __crypto_dh_decode_key() - decode a private key without parameter checks
84
* @buf: Buffer holding a packet key that should be decoded
85
* @len: Length of the packet private key buffer
86
* @params: Buffer allocated by the caller that is filled with the
87
* unpacked DH private key.
88
*
89
* Internal function providing the same services as the exported
90
* crypto_dh_decode_key(), but without any of those basic parameter
91
* checks conducted by the latter.
92
*
93
* Return: -EINVAL if buffer has insufficient size, 0 on success
94
*/
95
int __crypto_dh_decode_key(const char *buf, unsigned int len,
96
struct dh *params);
97
98
#endif
99
100