blob: 297e7fbf47b56960a1f18c3759f34b6be5f3702d [file] [log] [blame]
Ulf Möller4486d0c2000-01-22 20:05:23 +00001=pod
2
3=head1 NAME
4
Ulf Möller4d524e12000-02-24 11:55:57 +00005DH_generate_key, DH_compute_key - perform Diffie-Hellman key exchange
Ulf Möller4486d0c2000-01-22 20:05:23 +00006
7=head1 SYNOPSIS
8
9 #include <openssl/dh.h>
10
11 int DH_generate_key(DH *dh);
12
13 int DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh);
14
15=head1 DESCRIPTION
16
17DH_generate_key() performs the first step of a Diffie-Hellman key
18exchange by generating private and public DH values. By calling
19DH_compute_key(), these are combined with the other party's public
20value to compute the shared key.
21
22DH_generate_key() expects B<dh> to contain the shared parameters
23B<dh-E<gt>p> and B<dh-E<gt>g>. It generates a random private DH value
Bodo Möller924875e2001-07-27 22:34:25 +000024unless B<dh-E<gt>priv_key> is already set, and computes the
25corresponding public value B<dh-E<gt>pub_key>, which can then be
26published.
Ulf Möller4486d0c2000-01-22 20:05:23 +000027
28DH_compute_key() computes the shared secret from the private DH value
29in B<dh> and the other party's public value in B<pub_key> and stores
30it in B<key>. B<key> must point to B<DH_size(dh)> bytes of memory.
31
32=head1 RETURN VALUES
33
34DH_generate_key() returns 1 on success, 0 otherwise.
35
36DH_compute_key() returns the size of the shared secret on success, -1
37on error.
38
Rich Salz9b869742015-08-17 15:21:33 -040039The error codes can be obtained by L<ERR_get_error(3)>.
Ulf Möller4486d0c2000-01-22 20:05:23 +000040
41=head1 SEE ALSO
42
Richard Levitteb97fdb52016-11-11 09:33:09 +010043L<DH_new(3)>, L<ERR_get_error(3)>, L<RAND_bytes(3)>, L<DH_size(3)>
Ulf Möller4486d0c2000-01-22 20:05:23 +000044
Rich Salze2f92612016-05-18 11:44:05 -040045=head1 COPYRIGHT
46
47Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
48
49Licensed under the OpenSSL license (the "License"). You may not use
50this file except in compliance with the License. You can obtain a copy
51in the file LICENSE in the source distribution or at
52L<https://www.openssl.org/source/license.html>.
53
54=cut