2 * @file diffie_hellman.h
4 * @brief Interface of diffie_hellman_t.
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 #ifndef DIFFIE_HELLMAN_H_
24 #define DIFFIE_HELLMAN_H_
29 typedef enum diffie_hellman_group_t diffie_hellman_group_t
;
32 * @brief Diffie-Hellman group.
34 * The modulus (or group) to use for a Diffie-Hellman calculation.
36 * @see IKEv2 draft 3.3.2 and RFC 3526.
38 enum diffie_hellman_group_t
{
39 MODP_UNDEFINED
= 1024,
51 * string mappings for diffie_hellman_group_t
53 extern mapping_t diffie_hellman_group_m
[];
56 typedef struct diffie_hellman_t diffie_hellman_t
;
59 * @brief Implementation of the widely used Diffie-Hellman algorithm.
63 struct diffie_hellman_t
{
66 * @brief Returns the shared secret of this diffie hellman exchange.
68 * @warning Space for returned secret is allocated and must be
69 * freed by the caller.
71 * @param this calling diffie_hellman_t object
72 * @param[out] secret shared secret will be written into this chunk
75 * - FAILED if not both DH values are set
76 * - OUT_OF_RES if out of ressources
78 status_t (*get_shared_secret
) (diffie_hellman_t
*this, chunk_t
*secret
);
81 * @brief Sets the public value of partner.
83 * @warning chunk gets copied
85 * @param this calling diffie_hellman_t object
86 * @param public_value public value of partner
89 * - OUT_OF_RES if out of ressources
91 status_t (*set_other_public_value
) (diffie_hellman_t
*this, chunk_t public_value
);
94 * @brief Gets the public value of partner.
96 * @warning chunk gets copied
98 * @param this calling diffie_hellman_t object
99 * @param[out] public_value public value of partner is stored at this location
102 * - OUT_OF_RES if out of ressources
103 * - FAILED if other public value not set
105 status_t (*get_other_public_value
) (diffie_hellman_t
*this, chunk_t
*public_value
);
108 * @brief Gets the public value of caller
110 * @warning chunk gets copied
112 * @param this calling diffie_hellman_t object
113 * @param[out] public_value public value of caller is stored at this location
116 * - OUT_OF_RES if out of ressources
118 status_t (*get_my_public_value
) (diffie_hellman_t
*this, chunk_t
*public_value
);
121 * @brief Destroys an diffie_hellman_t object.
123 * @param this diffie_hellman_t object to destroy
125 * - SUCCESS in any case
127 status_t (*destroy
) (diffie_hellman_t
*this);
131 * @brief Creates a new diffie_hellman_t object.
133 * The first diffie hellman public value gets automatically created.
135 * @param dh_group_number Diffie Hellman group number to use
137 * - diffie_hellman_t if successfully
138 * - NULL if out of ressources or dh_group not supported
140 * @ingroup transforms
142 diffie_hellman_t
*diffie_hellman_create(diffie_hellman_group_t dh_group_number
);
144 #endif /*DIFFIE_HELLMAN_H_*/