Ephemeral Diffie-Hellman key exchange.
Definition in file dhe.h.
| int dhe_key |
( |
const void * | modulus, |
|
|
size_t | len, |
|
|
const void * | generator, |
|
|
size_t | generator_len, |
|
|
const void * | partner, |
|
|
size_t | partner_len, |
|
|
const void * | private, |
|
|
size_t | private_len, |
|
|
void * | public, |
|
|
void * | shared ) |
|
extern |
Calculate Diffie-Hellman key.
- Parameters
-
| modulus | Prime modulus |
| len | Length of prime modulus |
| generator | Generator |
| generator_len | Length of generator |
| partner | Partner public key |
| partner_len | Length of partner public key |
| private | Private key |
| private_len | Length of private key |
- Return values
-
| public | Public key (length equal to prime modulus) |
| shared | Shared secret (length equal to prime modulus) |
| rc | Return status code |
Definition at line 54 of file dhe.c.
57 {
62 struct {
71
72 DBGC2 ( modulus,
"DHE %p modulus:\n", modulus );
74 DBGC2 ( modulus,
"DHE %p generator:\n", modulus );
75 DBGC2_HDA ( modulus, 0, generator, generator_len );
76 DBGC2 ( modulus,
"DHE %p partner public key:\n", modulus );
78 DBGC2 ( modulus,
"DHE %p private key:\n", modulus );
79 DBGC2_HDA ( modulus, 0,
private, private_len );
80
81
82 if ( generator_len >
len ) {
83 DBGC ( modulus,
"DHE %p overlength generator\n", modulus );
85 goto err_sanity;
86 }
87 if ( partner_len >
len ) {
88 DBGC ( modulus,
"DHE %p overlength partner public key\n",
89 modulus );
91 goto err_sanity;
92 }
93 if ( private_len >
len ) {
94 DBGC ( modulus,
"DHE %p overlength private key\n", modulus );
96 goto err_sanity;
97 }
98
99
103 goto err_alloc;
104 }
105
106
111
112
116 DBGC2 ( modulus,
"DHE %p public key:\n", modulus );
118
119
123 DBGC2 ( modulus,
"DHE %p shared secret:\n", modulus );
125
126
128
130 err_alloc:
131 err_sanity:
133}
struct golan_eq_context ctx
struct arbelprm_rc_send_wqe rc
struct eth_slow_lacp_entity_tlv partner
Partner information.
uint16_t size
Buffer size.
#define EINVAL
Invalid argument.
#define ENOMEM
Not enough space.
#define bigint_mod_exp(base, modulus, exponent, result, tmp)
Perform modular exponentiation of big integers.
#define bigint_mod_exp_tmp_len(modulus)
Calculate temporary working space required for moduluar exponentiation.
#define bigint_t(size)
Define a big-integer type.
#define bigint_required_size(len)
Determine number of elements required for a big-integer type.
#define bigint_done(value, out, len)
Finalise big integer.
#define bigint_init(value, data, len)
Initialise big integer.
void * malloc(size_t size)
Allocate memory.
static void(* free)(struct refcnt *refcnt))
References __attribute__, bigint_done, bigint_init, bigint_mod_exp, bigint_mod_exp_tmp_len, bigint_required_size, bigint_t, ctx, DBGC, DBGC2, DBGC2_HDA, EINVAL, ENOMEM, free, len, malloc(), partner, rc, result, size, and tmp.
Referenced by dhe_key_okx(), and tls_send_client_key_exchange_dhe().