blob: aa23d67f99aa3d77fde35a1f6651b1f23999033b [file] [log] [blame]
Manuel Pégourié-Gonnard2aea1412013-01-26 16:33:44 +01001/**
2 * \file ecdsa.h
3 *
Rose Zadikbff87d92018-01-25 21:58:53 +00004 * \brief The Elliptic Curve Digital Signature Algorithm (ECDSA).
5 *
6 * ECDSA is defined in <em>Standards for Efficient Cryptography Group (SECG):
7 * SEC1 Elliptic Curve Cryptography</em>.
8 * The use of ECDSA for TLS is defined in <em>RFC-4492: Elliptic Curve
9 * Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)</em>.
10 *
Darryl Greena40a1012018-01-05 15:33:17 +000011 */
12/*
Rose Zadikbff87d92018-01-25 21:58:53 +000013 * Copyright (C) 2006-2018, Arm Limited (or its affiliates), All Rights Reserved
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +020014 * SPDX-License-Identifier: Apache-2.0
15 *
16 * Licensed under the Apache License, Version 2.0 (the "License"); you may
17 * not use this file except in compliance with the License.
18 * You may obtain a copy of the License at
19 *
20 * http://www.apache.org/licenses/LICENSE-2.0
21 *
22 * Unless required by applicable law or agreed to in writing, software
23 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
24 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 * See the License for the specific language governing permissions and
26 * limitations under the License.
Manuel Pégourié-Gonnard2aea1412013-01-26 16:33:44 +010027 *
Rose Zadikbff87d92018-01-25 21:58:53 +000028 * This file is part of Mbed TLS (https://tls.mbed.org)
Manuel Pégourié-Gonnard2aea1412013-01-26 16:33:44 +010029 */
Rose Zadikbff87d92018-01-25 21:58:53 +000030
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020031#ifndef MBEDTLS_ECDSA_H
32#define MBEDTLS_ECDSA_H
Manuel Pégourié-Gonnard2aea1412013-01-26 16:33:44 +010033
Manuel Pégourié-Gonnardbdc96762013-10-03 11:50:39 +020034#include "ecp.h"
Manuel Pégourié-Gonnard887aa5b2014-04-04 13:57:20 +020035#include "md.h"
Manuel Pégourié-Gonnard4daaef72014-01-06 14:25:56 +010036
Manuel Pégourié-Gonnard63e93192015-03-31 11:15:48 +020037/*
Rose Zadikbff87d92018-01-25 21:58:53 +000038 * RFC-4492 page 20:
Manuel Pégourié-Gonnard63e93192015-03-31 11:15:48 +020039 *
40 * Ecdsa-Sig-Value ::= SEQUENCE {
41 * r INTEGER,
42 * s INTEGER
43 * }
44 *
45 * Size is at most
46 * 1 (tag) + 1 (len) + 1 (initial 0) + ECP_MAX_BYTES for each of r and s,
47 * twice that + 1 (tag) + 2 (len) for the sequence
48 * (assuming ECP_MAX_BYTES is less than 126 for r and s,
49 * and less than 124 (total len <= 255) for the sequence)
50 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020051#if MBEDTLS_ECP_MAX_BYTES > 124
52#error "MBEDTLS_ECP_MAX_BYTES bigger than expected, please fix MBEDTLS_ECDSA_MAX_LEN"
Manuel Pégourié-Gonnard63e93192015-03-31 11:15:48 +020053#endif
Rose Zadikbff87d92018-01-25 21:58:53 +000054/** The maximal size of an ECDSA signature in Bytes. */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020055#define MBEDTLS_ECDSA_MAX_LEN ( 3 + 2 * ( 3 + MBEDTLS_ECP_MAX_BYTES ) )
Manuel Pégourié-Gonnard63e93192015-03-31 11:15:48 +020056
Manuel Pégourié-Gonnardbec2f452013-06-27 10:17:07 +020057/**
Rose Zadikbff87d92018-01-25 21:58:53 +000058 * \brief The ECDSA context structure.
Manuel Pégourié-Gonnardbec2f452013-06-27 10:17:07 +020059 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020060typedef mbedtls_ecp_keypair mbedtls_ecdsa_context;
Manuel Pégourié-Gonnardbec2f452013-06-27 10:17:07 +020061
Manuel Pégourié-Gonnard2aea1412013-01-26 16:33:44 +010062#ifdef __cplusplus
63extern "C" {
64#endif
65
66/**
Rose Zadikbff87d92018-01-25 21:58:53 +000067 * \brief This function computes the ECDSA signature of a
68 * previously-hashed message.
Manuel Pégourié-Gonnardb309ab22013-01-26 17:24:59 +010069 *
Rose Zadikbff87d92018-01-25 21:58:53 +000070 * \note The deterministic version is usually preferred.
Manuel Pégourié-Gonnardb8cfe3f2015-03-31 11:04:45 +020071 *
Rose Zadikbff87d92018-01-25 21:58:53 +000072 * \param grp The ECP group.
73 * \param r The first output integer.
74 * \param s The second output integer.
75 * \param d The private signing key.
76 * \param buf The message hash.
77 * \param blen The length of \p buf.
78 * \param f_rng The RNG function.
79 * \param p_rng The RNG parameter.
Manuel Pégourié-Gonnardb309ab22013-01-26 17:24:59 +010080 *
Janos Follath0a5154b2017-03-10 11:31:41 +000081 * \note If the bitlength of the message hash is larger than the
Rose Zadikbff87d92018-01-25 21:58:53 +000082 * bitlength of the group order, then the hash is truncated
83 * as defined in <em>Standards for Efficient Cryptography Group
84 * (SECG): SEC1 Elliptic Curve Cryptography</em>, section
85 * 4.1.3, step 5.
Janos Follath0a5154b2017-03-10 11:31:41 +000086 *
Rose Zadikbff87d92018-01-25 21:58:53 +000087 * \return \c 0 on success, or an \c MBEDTLS_ERR_ECP_XXX
88 * or \c MBEDTLS_MPI_XXX error code on failure.
89 *
90 * \see ecp.h
Manuel Pégourié-Gonnardb309ab22013-01-26 17:24:59 +010091 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020092int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s,
93 const mbedtls_mpi *d, const unsigned char *buf, size_t blen,
Manuel Pégourié-Gonnardb309ab22013-01-26 17:24:59 +010094 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
95
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020096#if defined(MBEDTLS_ECDSA_DETERMINISTIC)
Manuel Pégourié-Gonnard4daaef72014-01-06 14:25:56 +010097/**
Rose Zadikbff87d92018-01-25 21:58:53 +000098 * \brief This function computes the ECDSA signature of a
99 * previously-hashed message, deterministic version.
100 * For more information, see <em>RFC-6979: Deterministic
101 * Usage of the Digital Signature Algorithm (DSA) and Elliptic
102 * Curve Digital Signature Algorithm (ECDSA)</em>.
Manuel Pégourié-Gonnard4daaef72014-01-06 14:25:56 +0100103 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000104 * \param grp The ECP group.
105 * \param r The first output integer.
106 * \param s The second output integer.
107 * \param d The private signing key.
108 * \param buf The message hash.
109 * \param blen The length of \p buf.
110 * \param md_alg The MD algorithm used to hash the message.
Manuel Pégourié-Gonnard4daaef72014-01-06 14:25:56 +0100111 *
Janos Follath0a5154b2017-03-10 11:31:41 +0000112 * \note If the bitlength of the message hash is larger than the
113 * bitlength of the group order, then the hash is truncated as
Rose Zadikbff87d92018-01-25 21:58:53 +0000114 * defined in <em>Standards for Efficient Cryptography Group
115 * (SECG): SEC1 Elliptic Curve Cryptography</em>, section
116 * 4.1.3, step 5.
Janos Follath0a5154b2017-03-10 11:31:41 +0000117 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000118 * \return \c 0 on success,
119 * or an \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX
120 * error code on failure.
121 *
122 * \see ecp.h
Manuel Pégourié-Gonnard4daaef72014-01-06 14:25:56 +0100123 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200124int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s,
125 const mbedtls_mpi *d, const unsigned char *buf, size_t blen,
126 mbedtls_md_type_t md_alg );
127#endif /* MBEDTLS_ECDSA_DETERMINISTIC */
Manuel Pégourié-Gonnard4daaef72014-01-06 14:25:56 +0100128
Manuel Pégourié-Gonnardb309ab22013-01-26 17:24:59 +0100129/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000130 * \brief This function verifies the ECDSA signature of a
131 * previously-hashed message.
Manuel Pégourié-Gonnard3aeb5a72013-01-26 18:05:50 +0100132 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000133 * \param grp The ECP group.
134 * \param buf The message hash.
135 * \param blen The length of \p buf.
136 * \param Q The public key to use for verification.
137 * \param r The first integer of the signature.
138 * \param s The second integer of the signature.
Manuel Pégourié-Gonnard3aeb5a72013-01-26 18:05:50 +0100139 *
Janos Follath0a5154b2017-03-10 11:31:41 +0000140 * \note If the bitlength of the message hash is larger than the
141 * bitlength of the group order, then the hash is truncated as
Rose Zadikbff87d92018-01-25 21:58:53 +0000142 * defined in <em>Standards for Efficient Cryptography Group
143 * (SECG): SEC1 Elliptic Curve Cryptography</em>, section
144 * 4.1.4, step 3.
Janos Follath0a5154b2017-03-10 11:31:41 +0000145 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000146 * \return \c 0 on success,
147 * #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if signature is invalid,
148 * or an \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX
149 * error code on failure for any other reason.
150 *
151 * \see ecp.h
Manuel Pégourié-Gonnard3aeb5a72013-01-26 18:05:50 +0100152 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200153int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp,
Manuel Pégourié-Gonnard3aeb5a72013-01-26 18:05:50 +0100154 const unsigned char *buf, size_t blen,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200155 const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s);
Manuel Pégourié-Gonnard3aeb5a72013-01-26 18:05:50 +0100156
157/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000158 * \brief This function computes the ECDSA signature and writes it
159 * to a buffer, serialized as defined in <em>RFC-4492:
160 * Elliptic Curve Cryptography (ECC) Cipher Suites for
161 * Transport Layer Security (TLS)</em>.
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200162 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000163 * \warning It is not thread-safe to use the same context in
164 * multiple threads.
Manuel Pégourié-Gonnarddfdcac92015-03-31 11:41:42 +0200165 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000166 * \note The deterministic version is used if
167 * #MBEDTLS_ECDSA_DETERMINISTIC is defined. For more
168 * information, see <em>RFC-6979: Deterministic Usage
169 * of the Digital Signature Algorithm (DSA) and Elliptic
170 * Curve Digital Signature Algorithm (ECDSA)</em>.
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200171 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000172 * \param ctx The ECDSA context.
173 * \param md_alg The message digest that was used to hash the message.
174 * \param hash The message hash.
175 * \param hlen The length of the hash.
176 * \param sig The buffer that holds the signature.
177 * \param slen The length of the signature written.
178 * \param f_rng The RNG function.
179 * \param p_rng The RNG parameter.
180 *
181 * \note The \p sig buffer must be at least twice as large as the
182 * size of the curve used, plus 9. For example, 73 Bytes if
183 * a 256-bit curve is used. A buffer length of
184 * #MBEDTLS_ECDSA_MAX_LEN is always safe.
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200185 *
Janos Follath0a5154b2017-03-10 11:31:41 +0000186 * \note If the bitlength of the message hash is larger than the
187 * bitlength of the group order, then the hash is truncated as
Rose Zadikbff87d92018-01-25 21:58:53 +0000188 * defined in <em>Standards for Efficient Cryptography Group
189 * (SECG): SEC1 Elliptic Curve Cryptography</em>, section
190 * 4.1.3, step 5.
Janos Follath0a5154b2017-03-10 11:31:41 +0000191 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000192 * \return \c 0 on success,
193 * or an \c MBEDTLS_ERR_ECP_XXX, \c MBEDTLS_ERR_MPI_XXX or
194 * \c MBEDTLS_ERR_ASN1_XXX error code on failure.
195 *
196 * \see ecp.h
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200197 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200198int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg,
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200199 const unsigned char *hash, size_t hlen,
200 unsigned char *sig, size_t *slen,
201 int (*f_rng)(void *, unsigned char *, size_t),
202 void *p_rng );
203
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200204#if defined(MBEDTLS_ECDSA_DETERMINISTIC)
205#if ! defined(MBEDTLS_DEPRECATED_REMOVED)
206#if defined(MBEDTLS_DEPRECATED_WARNING)
207#define MBEDTLS_DEPRECATED __attribute__((deprecated))
Manuel Pégourié-Gonnarddfdcac92015-03-31 11:41:42 +0200208#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200209#define MBEDTLS_DEPRECATED
Manuel Pégourié-Gonnarddfdcac92015-03-31 11:41:42 +0200210#endif
Manuel Pégourié-Gonnard937340b2014-01-06 10:27:16 +0100211/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000212 * \brief This function computes an ECDSA signature and writes it to a buffer,
213 * serialized as defined in <em>RFC-4492: Elliptic Curve Cryptography
214 * (ECC) Cipher Suites for Transport Layer Security (TLS)</em>.
215 *
216 * The deterministic version is defined in <em>RFC-6979:
217 * Deterministic Usage of the Digital Signature Algorithm (DSA) and
218 * Elliptic Curve Digital Signature Algorithm (ECDSA)</em>.
219 *
220 * \warning It is not thread-safe to use the same context in
221 * multiple threads.
222
Manuel Pégourié-Gonnard937340b2014-01-06 10:27:16 +0100223 *
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200224 * \deprecated Superseded by mbedtls_ecdsa_write_signature() in 2.0.0
Manuel Pégourié-Gonnarddfdcac92015-03-31 11:41:42 +0200225 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000226 * \param ctx The ECDSA context.
227 * \param hash The Message hash.
228 * \param hlen The length of the hash.
229 * \param sig The buffer that holds the signature.
230 * \param slen The length of the signature written.
231 * \param md_alg The MD algorithm used to hash the message.
Manuel Pégourié-Gonnard937340b2014-01-06 10:27:16 +0100232 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000233 * \note The \p sig buffer must be at least twice as large as the
234 * size of the curve used, plus 9. For example, 73 Bytes if a
235 * 256-bit curve is used. A buffer length of
236 * #MBEDTLS_ECDSA_MAX_LEN is always safe.
Manuel Pégourié-Gonnard937340b2014-01-06 10:27:16 +0100237 *
Janos Follath0a5154b2017-03-10 11:31:41 +0000238 * \note If the bitlength of the message hash is larger than the
239 * bitlength of the group order, then the hash is truncated as
Rose Zadikbff87d92018-01-25 21:58:53 +0000240 * defined in <em>Standards for Efficient Cryptography Group
241 * (SECG): SEC1 Elliptic Curve Cryptography</em>, section
242 * 4.1.3, step 5.
Janos Follath0a5154b2017-03-10 11:31:41 +0000243 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000244 * \return \c 0 on success,
245 * or an \c MBEDTLS_ERR_ECP_XXX, \c MBEDTLS_ERR_MPI_XXX or
246 * \c MBEDTLS_ERR_ASN1_XXX error code on failure.
247 *
248 * \see ecp.h
Manuel Pégourié-Gonnard937340b2014-01-06 10:27:16 +0100249 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200250int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx,
Manuel Pégourié-Gonnard937340b2014-01-06 10:27:16 +0100251 const unsigned char *hash, size_t hlen,
252 unsigned char *sig, size_t *slen,
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200253 mbedtls_md_type_t md_alg ) MBEDTLS_DEPRECATED;
254#undef MBEDTLS_DEPRECATED
255#endif /* MBEDTLS_DEPRECATED_REMOVED */
256#endif /* MBEDTLS_ECDSA_DETERMINISTIC */
Manuel Pégourié-Gonnard937340b2014-01-06 10:27:16 +0100257
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200258/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000259 * \brief This function reads and verifies an ECDSA signature.
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200260 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000261 * \param ctx The ECDSA context.
262 * \param hash The message hash.
263 * \param hlen The size of the hash.
264 * \param sig The signature to read and verify.
265 * \param slen The size of \p sig.
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200266 *
Janos Follath0a5154b2017-03-10 11:31:41 +0000267 * \note If the bitlength of the message hash is larger than the
268 * bitlength of the group order, then the hash is truncated as
Rose Zadikbff87d92018-01-25 21:58:53 +0000269 * defined in <em>Standards for Efficient Cryptography Group
270 * (SECG): SEC1 Elliptic Curve Cryptography</em>, section
271 * 4.1.4, step 3.
Janos Follath0a5154b2017-03-10 11:31:41 +0000272 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000273 * \return \c 0 on success,
274 * #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if signature is invalid,
275 * #MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH if the signature is
276 * valid but its actual length is less than \p siglen,
277 * or an \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_ERR_MPI_XXX
278 * error code on failure for any other reason.
279 *
280 * \see ecp.h
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200281 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200282int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx,
Manuel Pégourié-Gonnardb694b482013-08-08 13:30:57 +0200283 const unsigned char *hash, size_t hlen,
284 const unsigned char *sig, size_t slen );
285
286/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000287 * \brief This function generates an ECDSA keypair on the given curve.
Manuel Pégourié-Gonnard8eebd012013-08-09 16:21:34 +0200288 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000289 * \param ctx The ECDSA context to store the keypair in.
290 * \param gid The elliptic curve to use. One of the various
291 * \c MBEDTLS_ECP_DP_XXX macros depending on configuration.
292 * \param f_rng The RNG function.
293 * \param p_rng The RNG parameter.
Manuel Pégourié-Gonnard8eebd012013-08-09 16:21:34 +0200294 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000295 * \return \c 0 on success, or an \c MBEDTLS_ERR_ECP_XXX code on
296 * failure.
297 *
298 * \see ecp.h
Manuel Pégourié-Gonnard8eebd012013-08-09 16:21:34 +0200299 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200300int mbedtls_ecdsa_genkey( mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid,
Manuel Pégourié-Gonnard8eebd012013-08-09 16:21:34 +0200301 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
302
303/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000304 * \brief This function sets an ECDSA context from an EC key pair.
Manuel Pégourié-Gonnardf4999932013-08-12 17:02:59 +0200305 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000306 * \param ctx The ECDSA context to set.
307 * \param key The EC key to use.
Manuel Pégourié-Gonnardf4999932013-08-12 17:02:59 +0200308 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000309 * \return \c 0 on success, or an \c MBEDTLS_ERR_ECP_XXX code on
310 * failure.
311 *
312 * \see ecp.h
Manuel Pégourié-Gonnardf4999932013-08-12 17:02:59 +0200313 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200314int mbedtls_ecdsa_from_keypair( mbedtls_ecdsa_context *ctx, const mbedtls_ecp_keypair *key );
Manuel Pégourié-Gonnardf4999932013-08-12 17:02:59 +0200315
316/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000317 * \brief This function initializes an ECDSA context.
Manuel Pégourié-Gonnard7c8934e2013-06-27 12:54:02 +0200318 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000319 * \param ctx The ECDSA context to initialize.
Manuel Pégourié-Gonnard7c8934e2013-06-27 12:54:02 +0200320 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200321void mbedtls_ecdsa_init( mbedtls_ecdsa_context *ctx );
Manuel Pégourié-Gonnard7c8934e2013-06-27 12:54:02 +0200322
323/**
Rose Zadikbff87d92018-01-25 21:58:53 +0000324 * \brief This function frees an ECDSA context.
Manuel Pégourié-Gonnard7c8934e2013-06-27 12:54:02 +0200325 *
Rose Zadikbff87d92018-01-25 21:58:53 +0000326 * \param ctx The ECDSA context to free.
Manuel Pégourié-Gonnard7c8934e2013-06-27 12:54:02 +0200327 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200328void mbedtls_ecdsa_free( mbedtls_ecdsa_context *ctx );
Manuel Pégourié-Gonnard7c8934e2013-06-27 12:54:02 +0200329
Manuel Pégourié-Gonnard2aea1412013-01-26 16:33:44 +0100330#ifdef __cplusplus
331}
332#endif
333
Paul Bakker9af723c2014-05-01 13:03:14 +0200334#endif /* ecdsa.h */