Daiki Kato / mbed-os-lychee

Dependents:   mbed-os-example-blinky-gr-lychee GR-Boads_Camera_sample GR-Boards_Audio_Recoder GR-Boads_Camera_DisplayApp ... more

Committer:
dkato
Date:
Fri Feb 02 05:42:23 2018 +0000
Revision:
0:f782d9c66c49
mbed-os for GR-LYCHEE

Who changed what in which revision?

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