mbed client lightswitch demo

Dependencies:   mbed Socket lwip-eth lwip-sys lwip

Fork of mbed-client-classic-example-lwip by Austin Blackstone

Committer:
mbedAustin
Date:
Thu Jun 09 17:08:36 2016 +0000
Revision:
11:cada08fc8a70
Commit for public Consumption

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedAustin 11:cada08fc8a70 1 /**
mbedAustin 11:cada08fc8a70 2 * \file dhm.h
mbedAustin 11:cada08fc8a70 3 *
mbedAustin 11:cada08fc8a70 4 * \brief Diffie-Hellman-Merkle key exchange
mbedAustin 11:cada08fc8a70 5 *
mbedAustin 11:cada08fc8a70 6 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
mbedAustin 11:cada08fc8a70 7 * SPDX-License-Identifier: Apache-2.0
mbedAustin 11:cada08fc8a70 8 *
mbedAustin 11:cada08fc8a70 9 * Licensed under the Apache License, Version 2.0 (the "License"); you may
mbedAustin 11:cada08fc8a70 10 * not use this file except in compliance with the License.
mbedAustin 11:cada08fc8a70 11 * You may obtain a copy of the License at
mbedAustin 11:cada08fc8a70 12 *
mbedAustin 11:cada08fc8a70 13 * http://www.apache.org/licenses/LICENSE-2.0
mbedAustin 11:cada08fc8a70 14 *
mbedAustin 11:cada08fc8a70 15 * Unless required by applicable law or agreed to in writing, software
mbedAustin 11:cada08fc8a70 16 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
mbedAustin 11:cada08fc8a70 17 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbedAustin 11:cada08fc8a70 18 * See the License for the specific language governing permissions and
mbedAustin 11:cada08fc8a70 19 * limitations under the License.
mbedAustin 11:cada08fc8a70 20 *
mbedAustin 11:cada08fc8a70 21 * This file is part of mbed TLS (https://tls.mbed.org)
mbedAustin 11:cada08fc8a70 22 */
mbedAustin 11:cada08fc8a70 23 #ifndef MBEDTLS_DHM_H
mbedAustin 11:cada08fc8a70 24 #define MBEDTLS_DHM_H
mbedAustin 11:cada08fc8a70 25
mbedAustin 11:cada08fc8a70 26 #include "bignum.h"
mbedAustin 11:cada08fc8a70 27
mbedAustin 11:cada08fc8a70 28 /*
mbedAustin 11:cada08fc8a70 29 * DHM Error codes
mbedAustin 11:cada08fc8a70 30 */
mbedAustin 11:cada08fc8a70 31 #define MBEDTLS_ERR_DHM_BAD_INPUT_DATA -0x3080 /**< Bad input parameters to function. */
mbedAustin 11:cada08fc8a70 32 #define MBEDTLS_ERR_DHM_READ_PARAMS_FAILED -0x3100 /**< Reading of the DHM parameters failed. */
mbedAustin 11:cada08fc8a70 33 #define MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED -0x3180 /**< Making of the DHM parameters failed. */
mbedAustin 11:cada08fc8a70 34 #define MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED -0x3200 /**< Reading of the public values failed. */
mbedAustin 11:cada08fc8a70 35 #define MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED -0x3280 /**< Making of the public value failed. */
mbedAustin 11:cada08fc8a70 36 #define MBEDTLS_ERR_DHM_CALC_SECRET_FAILED -0x3300 /**< Calculation of the DHM secret failed. */
mbedAustin 11:cada08fc8a70 37 #define MBEDTLS_ERR_DHM_INVALID_FORMAT -0x3380 /**< The ASN.1 data is not formatted correctly. */
mbedAustin 11:cada08fc8a70 38 #define MBEDTLS_ERR_DHM_ALLOC_FAILED -0x3400 /**< Allocation of memory failed. */
mbedAustin 11:cada08fc8a70 39 #define MBEDTLS_ERR_DHM_FILE_IO_ERROR -0x3480 /**< Read/write of file failed. */
mbedAustin 11:cada08fc8a70 40
mbedAustin 11:cada08fc8a70 41 /**
mbedAustin 11:cada08fc8a70 42 * RFC 3526 defines a number of standardized Diffie-Hellman groups
mbedAustin 11:cada08fc8a70 43 * for IKE.
mbedAustin 11:cada08fc8a70 44 * RFC 5114 defines a number of standardized Diffie-Hellman groups
mbedAustin 11:cada08fc8a70 45 * that can be used.
mbedAustin 11:cada08fc8a70 46 *
mbedAustin 11:cada08fc8a70 47 * Some are included here for convenience.
mbedAustin 11:cada08fc8a70 48 *
mbedAustin 11:cada08fc8a70 49 * Included are:
mbedAustin 11:cada08fc8a70 50 * RFC 3526 3. 2048-bit MODP Group
mbedAustin 11:cada08fc8a70 51 * RFC 3526 4. 3072-bit MODP Group
mbedAustin 11:cada08fc8a70 52 * RFC 3526 5. 4096-bit MODP Group
mbedAustin 11:cada08fc8a70 53 * RFC 5114 2.2. 2048-bit MODP Group with 224-bit Prime Order Subgroup
mbedAustin 11:cada08fc8a70 54 */
mbedAustin 11:cada08fc8a70 55 #define MBEDTLS_DHM_RFC3526_MODP_2048_P \
mbedAustin 11:cada08fc8a70 56 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \
mbedAustin 11:cada08fc8a70 57 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \
mbedAustin 11:cada08fc8a70 58 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \
mbedAustin 11:cada08fc8a70 59 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \
mbedAustin 11:cada08fc8a70 60 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \
mbedAustin 11:cada08fc8a70 61 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \
mbedAustin 11:cada08fc8a70 62 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
mbedAustin 11:cada08fc8a70 63 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \
mbedAustin 11:cada08fc8a70 64 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \
mbedAustin 11:cada08fc8a70 65 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \
mbedAustin 11:cada08fc8a70 66 "15728E5A8AACAA68FFFFFFFFFFFFFFFF"
mbedAustin 11:cada08fc8a70 67
mbedAustin 11:cada08fc8a70 68 #define MBEDTLS_DHM_RFC3526_MODP_2048_G "02"
mbedAustin 11:cada08fc8a70 69
mbedAustin 11:cada08fc8a70 70 #define MBEDTLS_DHM_RFC3526_MODP_3072_P \
mbedAustin 11:cada08fc8a70 71 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \
mbedAustin 11:cada08fc8a70 72 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \
mbedAustin 11:cada08fc8a70 73 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \
mbedAustin 11:cada08fc8a70 74 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \
mbedAustin 11:cada08fc8a70 75 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \
mbedAustin 11:cada08fc8a70 76 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \
mbedAustin 11:cada08fc8a70 77 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
mbedAustin 11:cada08fc8a70 78 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \
mbedAustin 11:cada08fc8a70 79 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \
mbedAustin 11:cada08fc8a70 80 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \
mbedAustin 11:cada08fc8a70 81 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" \
mbedAustin 11:cada08fc8a70 82 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" \
mbedAustin 11:cada08fc8a70 83 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" \
mbedAustin 11:cada08fc8a70 84 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" \
mbedAustin 11:cada08fc8a70 85 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" \
mbedAustin 11:cada08fc8a70 86 "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"
mbedAustin 11:cada08fc8a70 87
mbedAustin 11:cada08fc8a70 88 #define MBEDTLS_DHM_RFC3526_MODP_3072_G "02"
mbedAustin 11:cada08fc8a70 89
mbedAustin 11:cada08fc8a70 90 #define MBEDTLS_DHM_RFC3526_MODP_4096_P \
mbedAustin 11:cada08fc8a70 91 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \
mbedAustin 11:cada08fc8a70 92 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \
mbedAustin 11:cada08fc8a70 93 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \
mbedAustin 11:cada08fc8a70 94 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \
mbedAustin 11:cada08fc8a70 95 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \
mbedAustin 11:cada08fc8a70 96 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \
mbedAustin 11:cada08fc8a70 97 "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
mbedAustin 11:cada08fc8a70 98 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \
mbedAustin 11:cada08fc8a70 99 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \
mbedAustin 11:cada08fc8a70 100 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \
mbedAustin 11:cada08fc8a70 101 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" \
mbedAustin 11:cada08fc8a70 102 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" \
mbedAustin 11:cada08fc8a70 103 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" \
mbedAustin 11:cada08fc8a70 104 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" \
mbedAustin 11:cada08fc8a70 105 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" \
mbedAustin 11:cada08fc8a70 106 "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" \
mbedAustin 11:cada08fc8a70 107 "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" \
mbedAustin 11:cada08fc8a70 108 "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" \
mbedAustin 11:cada08fc8a70 109 "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" \
mbedAustin 11:cada08fc8a70 110 "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" \
mbedAustin 11:cada08fc8a70 111 "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" \
mbedAustin 11:cada08fc8a70 112 "FFFFFFFFFFFFFFFF"
mbedAustin 11:cada08fc8a70 113
mbedAustin 11:cada08fc8a70 114 #define MBEDTLS_DHM_RFC3526_MODP_4096_G "02"
mbedAustin 11:cada08fc8a70 115
mbedAustin 11:cada08fc8a70 116 #define MBEDTLS_DHM_RFC5114_MODP_2048_P \
mbedAustin 11:cada08fc8a70 117 "AD107E1E9123A9D0D660FAA79559C51FA20D64E5683B9FD1" \
mbedAustin 11:cada08fc8a70 118 "B54B1597B61D0A75E6FA141DF95A56DBAF9A3C407BA1DF15" \
mbedAustin 11:cada08fc8a70 119 "EB3D688A309C180E1DE6B85A1274A0A66D3F8152AD6AC212" \
mbedAustin 11:cada08fc8a70 120 "9037C9EDEFDA4DF8D91E8FEF55B7394B7AD5B7D0B6C12207" \
mbedAustin 11:cada08fc8a70 121 "C9F98D11ED34DBF6C6BA0B2C8BBC27BE6A00E0A0B9C49708" \
mbedAustin 11:cada08fc8a70 122 "B3BF8A317091883681286130BC8985DB1602E714415D9330" \
mbedAustin 11:cada08fc8a70 123 "278273C7DE31EFDC7310F7121FD5A07415987D9ADC0A486D" \
mbedAustin 11:cada08fc8a70 124 "CDF93ACC44328387315D75E198C641A480CD86A1B9E587E8" \
mbedAustin 11:cada08fc8a70 125 "BE60E69CC928B2B9C52172E413042E9B23F10B0E16E79763" \
mbedAustin 11:cada08fc8a70 126 "C9B53DCF4BA80A29E3FB73C16B8E75B97EF363E2FFA31F71" \
mbedAustin 11:cada08fc8a70 127 "CF9DE5384E71B81C0AC4DFFE0C10E64F"
mbedAustin 11:cada08fc8a70 128
mbedAustin 11:cada08fc8a70 129 #define MBEDTLS_DHM_RFC5114_MODP_2048_G \
mbedAustin 11:cada08fc8a70 130 "AC4032EF4F2D9AE39DF30B5C8FFDAC506CDEBE7B89998CAF"\
mbedAustin 11:cada08fc8a70 131 "74866A08CFE4FFE3A6824A4E10B9A6F0DD921F01A70C4AFA"\
mbedAustin 11:cada08fc8a70 132 "AB739D7700C29F52C57DB17C620A8652BE5E9001A8D66AD7"\
mbedAustin 11:cada08fc8a70 133 "C17669101999024AF4D027275AC1348BB8A762D0521BC98A"\
mbedAustin 11:cada08fc8a70 134 "E247150422EA1ED409939D54DA7460CDB5F6C6B250717CBE"\
mbedAustin 11:cada08fc8a70 135 "F180EB34118E98D119529A45D6F834566E3025E316A330EF"\
mbedAustin 11:cada08fc8a70 136 "BB77A86F0C1AB15B051AE3D428C8F8ACB70A8137150B8EEB"\
mbedAustin 11:cada08fc8a70 137 "10E183EDD19963DDD9E263E4770589EF6AA21E7F5F2FF381"\
mbedAustin 11:cada08fc8a70 138 "B539CCE3409D13CD566AFBB48D6C019181E1BCFE94B30269"\
mbedAustin 11:cada08fc8a70 139 "EDFE72FE9B6AA4BD7B5A0F1C71CFFF4C19C418E1F6EC0179"\
mbedAustin 11:cada08fc8a70 140 "81BC087F2A7065B384B890D3191F2BFA"
mbedAustin 11:cada08fc8a70 141
mbedAustin 11:cada08fc8a70 142 #ifdef __cplusplus
mbedAustin 11:cada08fc8a70 143 extern "C" {
mbedAustin 11:cada08fc8a70 144 #endif
mbedAustin 11:cada08fc8a70 145
mbedAustin 11:cada08fc8a70 146 /**
mbedAustin 11:cada08fc8a70 147 * \brief DHM context structure
mbedAustin 11:cada08fc8a70 148 */
mbedAustin 11:cada08fc8a70 149 typedef struct
mbedAustin 11:cada08fc8a70 150 {
mbedAustin 11:cada08fc8a70 151 size_t len; /*!< size(P) in chars */
mbedAustin 11:cada08fc8a70 152 mbedtls_mpi P; /*!< prime modulus */
mbedAustin 11:cada08fc8a70 153 mbedtls_mpi G; /*!< generator */
mbedAustin 11:cada08fc8a70 154 mbedtls_mpi X; /*!< secret value */
mbedAustin 11:cada08fc8a70 155 mbedtls_mpi GX; /*!< self = G^X mod P */
mbedAustin 11:cada08fc8a70 156 mbedtls_mpi GY; /*!< peer = G^Y mod P */
mbedAustin 11:cada08fc8a70 157 mbedtls_mpi K; /*!< key = GY^X mod P */
mbedAustin 11:cada08fc8a70 158 mbedtls_mpi RP; /*!< cached R^2 mod P */
mbedAustin 11:cada08fc8a70 159 mbedtls_mpi Vi; /*!< blinding value */
mbedAustin 11:cada08fc8a70 160 mbedtls_mpi Vf; /*!< un-blinding value */
mbedAustin 11:cada08fc8a70 161 mbedtls_mpi pX; /*!< previous X */
mbedAustin 11:cada08fc8a70 162 }
mbedAustin 11:cada08fc8a70 163 mbedtls_dhm_context;
mbedAustin 11:cada08fc8a70 164
mbedAustin 11:cada08fc8a70 165 /**
mbedAustin 11:cada08fc8a70 166 * \brief Initialize DHM context
mbedAustin 11:cada08fc8a70 167 *
mbedAustin 11:cada08fc8a70 168 * \param ctx DHM context to be initialized
mbedAustin 11:cada08fc8a70 169 */
mbedAustin 11:cada08fc8a70 170 void mbedtls_dhm_init( mbedtls_dhm_context *ctx );
mbedAustin 11:cada08fc8a70 171
mbedAustin 11:cada08fc8a70 172 /**
mbedAustin 11:cada08fc8a70 173 * \brief Parse the ServerKeyExchange parameters
mbedAustin 11:cada08fc8a70 174 *
mbedAustin 11:cada08fc8a70 175 * \param ctx DHM context
mbedAustin 11:cada08fc8a70 176 * \param p &(start of input buffer)
mbedAustin 11:cada08fc8a70 177 * \param end end of buffer
mbedAustin 11:cada08fc8a70 178 *
mbedAustin 11:cada08fc8a70 179 * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code
mbedAustin 11:cada08fc8a70 180 */
mbedAustin 11:cada08fc8a70 181 int mbedtls_dhm_read_params( mbedtls_dhm_context *ctx,
mbedAustin 11:cada08fc8a70 182 unsigned char **p,
mbedAustin 11:cada08fc8a70 183 const unsigned char *end );
mbedAustin 11:cada08fc8a70 184
mbedAustin 11:cada08fc8a70 185 /**
mbedAustin 11:cada08fc8a70 186 * \brief Setup and write the ServerKeyExchange parameters
mbedAustin 11:cada08fc8a70 187 *
mbedAustin 11:cada08fc8a70 188 * \param ctx DHM context
mbedAustin 11:cada08fc8a70 189 * \param x_size private value size in bytes
mbedAustin 11:cada08fc8a70 190 * \param output destination buffer
mbedAustin 11:cada08fc8a70 191 * \param olen number of chars written
mbedAustin 11:cada08fc8a70 192 * \param f_rng RNG function
mbedAustin 11:cada08fc8a70 193 * \param p_rng RNG parameter
mbedAustin 11:cada08fc8a70 194 *
mbedAustin 11:cada08fc8a70 195 * \note This function assumes that ctx->P and ctx->G
mbedAustin 11:cada08fc8a70 196 * have already been properly set (for example
mbedAustin 11:cada08fc8a70 197 * using mbedtls_mpi_read_string or mbedtls_mpi_read_binary).
mbedAustin 11:cada08fc8a70 198 *
mbedAustin 11:cada08fc8a70 199 * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code
mbedAustin 11:cada08fc8a70 200 */
mbedAustin 11:cada08fc8a70 201 int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size,
mbedAustin 11:cada08fc8a70 202 unsigned char *output, size_t *olen,
mbedAustin 11:cada08fc8a70 203 int (*f_rng)(void *, unsigned char *, size_t),
mbedAustin 11:cada08fc8a70 204 void *p_rng );
mbedAustin 11:cada08fc8a70 205
mbedAustin 11:cada08fc8a70 206 /**
mbedAustin 11:cada08fc8a70 207 * \brief Import the peer's public value G^Y
mbedAustin 11:cada08fc8a70 208 *
mbedAustin 11:cada08fc8a70 209 * \param ctx DHM context
mbedAustin 11:cada08fc8a70 210 * \param input input buffer
mbedAustin 11:cada08fc8a70 211 * \param ilen size of buffer
mbedAustin 11:cada08fc8a70 212 *
mbedAustin 11:cada08fc8a70 213 * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code
mbedAustin 11:cada08fc8a70 214 */
mbedAustin 11:cada08fc8a70 215 int mbedtls_dhm_read_public( mbedtls_dhm_context *ctx,
mbedAustin 11:cada08fc8a70 216 const unsigned char *input, size_t ilen );
mbedAustin 11:cada08fc8a70 217
mbedAustin 11:cada08fc8a70 218 /**
mbedAustin 11:cada08fc8a70 219 * \brief Create own private value X and export G^X
mbedAustin 11:cada08fc8a70 220 *
mbedAustin 11:cada08fc8a70 221 * \param ctx DHM context
mbedAustin 11:cada08fc8a70 222 * \param x_size private value size in bytes
mbedAustin 11:cada08fc8a70 223 * \param output destination buffer
mbedAustin 11:cada08fc8a70 224 * \param olen must be equal to ctx->P.len
mbedAustin 11:cada08fc8a70 225 * \param f_rng RNG function
mbedAustin 11:cada08fc8a70 226 * \param p_rng RNG parameter
mbedAustin 11:cada08fc8a70 227 *
mbedAustin 11:cada08fc8a70 228 * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code
mbedAustin 11:cada08fc8a70 229 */
mbedAustin 11:cada08fc8a70 230 int mbedtls_dhm_make_public( mbedtls_dhm_context *ctx, int x_size,
mbedAustin 11:cada08fc8a70 231 unsigned char *output, size_t olen,
mbedAustin 11:cada08fc8a70 232 int (*f_rng)(void *, unsigned char *, size_t),
mbedAustin 11:cada08fc8a70 233 void *p_rng );
mbedAustin 11:cada08fc8a70 234
mbedAustin 11:cada08fc8a70 235 /**
mbedAustin 11:cada08fc8a70 236 * \brief Derive and export the shared secret (G^Y)^X mod P
mbedAustin 11:cada08fc8a70 237 *
mbedAustin 11:cada08fc8a70 238 * \param ctx DHM context
mbedAustin 11:cada08fc8a70 239 * \param output destination buffer
mbedAustin 11:cada08fc8a70 240 * \param output_size size of the destination buffer
mbedAustin 11:cada08fc8a70 241 * \param olen on exit, holds the actual number of bytes written
mbedAustin 11:cada08fc8a70 242 * \param f_rng RNG function, for blinding purposes
mbedAustin 11:cada08fc8a70 243 * \param p_rng RNG parameter
mbedAustin 11:cada08fc8a70 244 *
mbedAustin 11:cada08fc8a70 245 * \return 0 if successful, or an MBEDTLS_ERR_DHM_XXX error code
mbedAustin 11:cada08fc8a70 246 *
mbedAustin 11:cada08fc8a70 247 * \note If non-NULL, f_rng is used to blind the input as
mbedAustin 11:cada08fc8a70 248 * countermeasure against timing attacks. Blinding is
mbedAustin 11:cada08fc8a70 249 * automatically used if and only if our secret value X is
mbedAustin 11:cada08fc8a70 250 * re-used and costs nothing otherwise, so it is recommended
mbedAustin 11:cada08fc8a70 251 * to always pass a non-NULL f_rng argument.
mbedAustin 11:cada08fc8a70 252 */
mbedAustin 11:cada08fc8a70 253 int mbedtls_dhm_calc_secret( mbedtls_dhm_context *ctx,
mbedAustin 11:cada08fc8a70 254 unsigned char *output, size_t output_size, size_t *olen,
mbedAustin 11:cada08fc8a70 255 int (*f_rng)(void *, unsigned char *, size_t),
mbedAustin 11:cada08fc8a70 256 void *p_rng );
mbedAustin 11:cada08fc8a70 257
mbedAustin 11:cada08fc8a70 258 /**
mbedAustin 11:cada08fc8a70 259 * \brief Free and clear the components of a DHM key
mbedAustin 11:cada08fc8a70 260 *
mbedAustin 11:cada08fc8a70 261 * \param ctx DHM context to free and clear
mbedAustin 11:cada08fc8a70 262 */
mbedAustin 11:cada08fc8a70 263 void mbedtls_dhm_free( mbedtls_dhm_context *ctx );
mbedAustin 11:cada08fc8a70 264
mbedAustin 11:cada08fc8a70 265 #if defined(MBEDTLS_ASN1_PARSE_C)
mbedAustin 11:cada08fc8a70 266 /** \ingroup x509_module */
mbedAustin 11:cada08fc8a70 267 /**
mbedAustin 11:cada08fc8a70 268 * \brief Parse DHM parameters in PEM or DER format
mbedAustin 11:cada08fc8a70 269 *
mbedAustin 11:cada08fc8a70 270 * \param dhm DHM context to be initialized
mbedAustin 11:cada08fc8a70 271 * \param dhmin input buffer
mbedAustin 11:cada08fc8a70 272 * \param dhminlen size of the buffer
mbedAustin 11:cada08fc8a70 273 * (including the terminating null byte for PEM data)
mbedAustin 11:cada08fc8a70 274 *
mbedAustin 11:cada08fc8a70 275 * \return 0 if successful, or a specific DHM or PEM error code
mbedAustin 11:cada08fc8a70 276 */
mbedAustin 11:cada08fc8a70 277 int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin,
mbedAustin 11:cada08fc8a70 278 size_t dhminlen );
mbedAustin 11:cada08fc8a70 279
mbedAustin 11:cada08fc8a70 280 #if defined(MBEDTLS_FS_IO)
mbedAustin 11:cada08fc8a70 281 /** \ingroup x509_module */
mbedAustin 11:cada08fc8a70 282 /**
mbedAustin 11:cada08fc8a70 283 * \brief Load and parse DHM parameters
mbedAustin 11:cada08fc8a70 284 *
mbedAustin 11:cada08fc8a70 285 * \param dhm DHM context to be initialized
mbedAustin 11:cada08fc8a70 286 * \param path filename to read the DHM Parameters from
mbedAustin 11:cada08fc8a70 287 *
mbedAustin 11:cada08fc8a70 288 * \return 0 if successful, or a specific DHM or PEM error code
mbedAustin 11:cada08fc8a70 289 */
mbedAustin 11:cada08fc8a70 290 int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path );
mbedAustin 11:cada08fc8a70 291 #endif /* MBEDTLS_FS_IO */
mbedAustin 11:cada08fc8a70 292 #endif /* MBEDTLS_ASN1_PARSE_C */
mbedAustin 11:cada08fc8a70 293
mbedAustin 11:cada08fc8a70 294 /**
mbedAustin 11:cada08fc8a70 295 * \brief Checkup routine
mbedAustin 11:cada08fc8a70 296 *
mbedAustin 11:cada08fc8a70 297 * \return 0 if successful, or 1 if the test failed
mbedAustin 11:cada08fc8a70 298 */
mbedAustin 11:cada08fc8a70 299 int mbedtls_dhm_self_test( int verbose );
mbedAustin 11:cada08fc8a70 300
mbedAustin 11:cada08fc8a70 301 #ifdef __cplusplus
mbedAustin 11:cada08fc8a70 302 }
mbedAustin 11:cada08fc8a70 303 #endif
mbedAustin 11:cada08fc8a70 304
mbedAustin 11:cada08fc8a70 305 #endif /* dhm.h */