~bibledit/bibledit/client

« back to all changes in this revision

Viewing changes to mbedtls2/md_wrap.c

  • Committer: Teus Benschop
  • Date: 2024-08-17 17:08:44 UTC
  • Revision ID: teusjannette@gmail.com-20240817170844-0qf789ywtms3hyz7
new upstream version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#pragma clang diagnostic ignored "-Wunknown-warning-option"
 
2
#pragma clang diagnostic ignored "-Wimplicit-int-conversion"
 
3
#pragma clang diagnostic ignored "-Wsign-conversion"
 
4
 
 
5
#pragma GCC diagnostic ignored "-Wconversion"
 
6
 
 
7
#pragma clang diagnostic ignored "-Wimplicit-int-conversion"
 
8
#pragma clang diagnostic ignored "-Wsign-conversion"
 
9
 
 
10
#pragma GCC diagnostic ignored "-Wconversion"
 
11
 
 
12
#pragma clang diagnostic ignored "-Wimplicit-int-conversion"
 
13
#pragma clang diagnostic ignored "-Wsign-conversion"
 
14
/**
 
15
 * \file md_wrap.c
 
16
 *
 
17
 * \brief Generic message digest wrapper for mbed TLS
 
18
 *
 
19
 * \author Adriaan de Jong <dejong@fox-it.com>
 
20
 *
 
21
 *  Copyright The Mbed TLS Contributors
 
22
 *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 
23
 *
 
24
 *  This file is provided under the Apache License 2.0, or the
 
25
 *  GNU General Public License v2.0 or later.
 
26
 *
 
27
 *  **********
 
28
 *  Apache License 2.0:
 
29
 *
 
30
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may
 
31
 *  not use this file except in compliance with the License.
 
32
 *  You may obtain a copy of the License at
 
33
 *
 
34
 *  http://www.apache.org/licenses/LICENSE-2.0
 
35
 *
 
36
 *  Unless required by applicable law or agreed to in writing, software
 
37
 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
38
 *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
39
 *  See the License for the specific language governing permissions and
 
40
 *  limitations under the License.
 
41
 *
 
42
 *  **********
 
43
 *
 
44
 *  **********
 
45
 *  GNU General Public License v2.0 or later:
 
46
 *
 
47
 *  This program is free software; you can redistribute it and/or modify
 
48
 *  it under the terms of the GNU General Public License as published by
 
49
 *  the Free Software Foundation; either version 2 of the License, or
 
50
 *  (at your option) any later version.
 
51
 *
 
52
 *  This program is distributed in the hope that it will be useful,
 
53
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
54
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
55
 *  GNU General Public License for more details.
 
56
 *
 
57
 *  You should have received a copy of the GNU General Public License along
 
58
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 
59
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
60
 *
 
61
 *  **********
 
62
 */
 
63
 
 
64
#if !defined(MBEDTLS_CONFIG_FILE)
 
65
#include "mbedtls/config.h"
 
66
#else
 
67
#include MBEDTLS_CONFIG_FILE
 
68
#endif
 
69
 
 
70
#if defined(MBEDTLS_MD_C)
 
71
 
 
72
#include "mbedtls/md_internal.h"
 
73
 
 
74
#if defined(MBEDTLS_MD2_C)
 
75
#include "mbedtls/md2.h"
 
76
#endif
 
77
 
 
78
#if defined(MBEDTLS_MD4_C)
 
79
#include "mbedtls/md4.h"
 
80
#endif
 
81
 
 
82
#if defined(MBEDTLS_MD5_C)
 
83
#include "mbedtls/md5.h"
 
84
#endif
 
85
 
 
86
#if defined(MBEDTLS_RIPEMD160_C)
 
87
#include "mbedtls/ripemd160.h"
 
88
#endif
 
89
 
 
90
#if defined(MBEDTLS_SHA1_C)
 
91
#include "mbedtls/sha1.h"
 
92
#endif
 
93
 
 
94
#if defined(MBEDTLS_SHA256_C)
 
95
#include "mbedtls/sha256.h"
 
96
#endif
 
97
 
 
98
#if defined(MBEDTLS_SHA512_C)
 
99
#include "mbedtls/sha512.h"
 
100
#endif
 
101
 
 
102
#if defined(MBEDTLS_PLATFORM_C)
 
103
#include "mbedtls/platform.h"
 
104
#else
 
105
#include <stdlib.h>
 
106
#define mbedtls_calloc    calloc
 
107
#define mbedtls_free       free
 
108
#endif
 
109
 
 
110
#if defined(MBEDTLS_MD2_C)
 
111
 
 
112
static int md2_starts_wrap( void *ctx )
 
113
{
 
114
    return( mbedtls_md2_starts_ret( (mbedtls_md2_context *) ctx ) );
 
115
}
 
116
 
 
117
static int md2_update_wrap( void *ctx, const unsigned char *input,
 
118
                             size_t ilen )
 
119
{
 
120
    return( mbedtls_md2_update_ret( (mbedtls_md2_context *) ctx, input, ilen ) );
 
121
}
 
122
 
 
123
static int md2_finish_wrap( void *ctx, unsigned char *output )
 
124
{
 
125
    return( mbedtls_md2_finish_ret( (mbedtls_md2_context *) ctx, output ) );
 
126
}
 
127
 
 
128
static void *md2_ctx_alloc( void )
 
129
{
 
130
    void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md2_context ) );
 
131
 
 
132
    if( ctx != NULL )
 
133
        mbedtls_md2_init( (mbedtls_md2_context *) ctx );
 
134
 
 
135
    return( ctx );
 
136
}
 
137
 
 
138
static void md2_ctx_free( void *ctx )
 
139
{
 
140
    mbedtls_md2_free( (mbedtls_md2_context *) ctx );
 
141
    mbedtls_free( ctx );
 
142
}
 
143
 
 
144
static void md2_clone_wrap( void *dst, const void *src )
 
145
{
 
146
    mbedtls_md2_clone( (mbedtls_md2_context *) dst,
 
147
                 (const mbedtls_md2_context *) src );
 
148
}
 
149
 
 
150
static int md2_process_wrap( void *ctx, const unsigned char *data )
 
151
{
 
152
    ((void) data);
 
153
 
 
154
    return( mbedtls_internal_md2_process( (mbedtls_md2_context *) ctx ) );
 
155
}
 
156
 
 
157
const mbedtls_md_info_t mbedtls_md2_info = {
 
158
    MBEDTLS_MD_MD2,
 
159
    "MD2",
 
160
    16,
 
161
    16,
 
162
    md2_starts_wrap,
 
163
    md2_update_wrap,
 
164
    md2_finish_wrap,
 
165
    mbedtls_md2_ret,
 
166
    md2_ctx_alloc,
 
167
    md2_ctx_free,
 
168
    md2_clone_wrap,
 
169
    md2_process_wrap,
 
170
};
 
171
 
 
172
#endif /* MBEDTLS_MD2_C */
 
173
 
 
174
#if defined(MBEDTLS_MD4_C)
 
175
 
 
176
static int md4_starts_wrap( void *ctx )
 
177
{
 
178
    return( mbedtls_md4_starts_ret( (mbedtls_md4_context *) ctx ) );
 
179
}
 
180
 
 
181
static int md4_update_wrap( void *ctx, const unsigned char *input,
 
182
                             size_t ilen )
 
183
{
 
184
    return( mbedtls_md4_update_ret( (mbedtls_md4_context *) ctx, input, ilen ) );
 
185
}
 
186
 
 
187
static int md4_finish_wrap( void *ctx, unsigned char *output )
 
188
{
 
189
    return( mbedtls_md4_finish_ret( (mbedtls_md4_context *) ctx, output ) );
 
190
}
 
191
 
 
192
static void *md4_ctx_alloc( void )
 
193
{
 
194
    void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md4_context ) );
 
195
 
 
196
    if( ctx != NULL )
 
197
        mbedtls_md4_init( (mbedtls_md4_context *) ctx );
 
198
 
 
199
    return( ctx );
 
200
}
 
201
 
 
202
static void md4_ctx_free( void *ctx )
 
203
{
 
204
    mbedtls_md4_free( (mbedtls_md4_context *) ctx );
 
205
    mbedtls_free( ctx );
 
206
}
 
207
 
 
208
static void md4_clone_wrap( void *dst, const void *src )
 
209
{
 
210
    mbedtls_md4_clone( (mbedtls_md4_context *) dst,
 
211
                       (const mbedtls_md4_context *) src );
 
212
}
 
213
 
 
214
static int md4_process_wrap( void *ctx, const unsigned char *data )
 
215
{
 
216
    return( mbedtls_internal_md4_process( (mbedtls_md4_context *) ctx, data ) );
 
217
}
 
218
 
 
219
const mbedtls_md_info_t mbedtls_md4_info = {
 
220
    MBEDTLS_MD_MD4,
 
221
    "MD4",
 
222
    16,
 
223
    64,
 
224
    md4_starts_wrap,
 
225
    md4_update_wrap,
 
226
    md4_finish_wrap,
 
227
    mbedtls_md4_ret,
 
228
    md4_ctx_alloc,
 
229
    md4_ctx_free,
 
230
    md4_clone_wrap,
 
231
    md4_process_wrap,
 
232
};
 
233
 
 
234
#endif /* MBEDTLS_MD4_C */
 
235
 
 
236
#if defined(MBEDTLS_MD5_C)
 
237
 
 
238
static int md5_starts_wrap( void *ctx )
 
239
{
 
240
    return( mbedtls_md5_starts_ret( (mbedtls_md5_context *) ctx ) );
 
241
}
 
242
 
 
243
static int md5_update_wrap( void *ctx, const unsigned char *input,
 
244
                             size_t ilen )
 
245
{
 
246
    return( mbedtls_md5_update_ret( (mbedtls_md5_context *) ctx, input, ilen ) );
 
247
}
 
248
 
 
249
static int md5_finish_wrap( void *ctx, unsigned char *output )
 
250
{
 
251
    return( mbedtls_md5_finish_ret( (mbedtls_md5_context *) ctx, output ) );
 
252
}
 
253
 
 
254
static void *md5_ctx_alloc( void )
 
255
{
 
256
    void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md5_context ) );
 
257
 
 
258
    if( ctx != NULL )
 
259
        mbedtls_md5_init( (mbedtls_md5_context *) ctx );
 
260
 
 
261
    return( ctx );
 
262
}
 
263
 
 
264
static void md5_ctx_free( void *ctx )
 
265
{
 
266
    mbedtls_md5_free( (mbedtls_md5_context *) ctx );
 
267
    mbedtls_free( ctx );
 
268
}
 
269
 
 
270
static void md5_clone_wrap( void *dst, const void *src )
 
271
{
 
272
    mbedtls_md5_clone( (mbedtls_md5_context *) dst,
 
273
                       (const mbedtls_md5_context *) src );
 
274
}
 
275
 
 
276
static int md5_process_wrap( void *ctx, const unsigned char *data )
 
277
{
 
278
    return( mbedtls_internal_md5_process( (mbedtls_md5_context *) ctx, data ) );
 
279
}
 
280
 
 
281
const mbedtls_md_info_t mbedtls_md5_info = {
 
282
    MBEDTLS_MD_MD5,
 
283
    "MD5",
 
284
    16,
 
285
    64,
 
286
    md5_starts_wrap,
 
287
    md5_update_wrap,
 
288
    md5_finish_wrap,
 
289
    mbedtls_md5_ret,
 
290
    md5_ctx_alloc,
 
291
    md5_ctx_free,
 
292
    md5_clone_wrap,
 
293
    md5_process_wrap,
 
294
};
 
295
 
 
296
#endif /* MBEDTLS_MD5_C */
 
297
 
 
298
#if defined(MBEDTLS_RIPEMD160_C)
 
299
 
 
300
static int ripemd160_starts_wrap( void *ctx )
 
301
{
 
302
    return( mbedtls_ripemd160_starts_ret( (mbedtls_ripemd160_context *) ctx ) );
 
303
}
 
304
 
 
305
static int ripemd160_update_wrap( void *ctx, const unsigned char *input,
 
306
                                   size_t ilen )
 
307
{
 
308
    return( mbedtls_ripemd160_update_ret( (mbedtls_ripemd160_context *) ctx,
 
309
                                          input, ilen ) );
 
310
}
 
311
 
 
312
static int ripemd160_finish_wrap( void *ctx, unsigned char *output )
 
313
{
 
314
    return( mbedtls_ripemd160_finish_ret( (mbedtls_ripemd160_context *) ctx,
 
315
                                          output ) );
 
316
}
 
317
 
 
318
static void *ripemd160_ctx_alloc( void )
 
319
{
 
320
    void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ripemd160_context ) );
 
321
 
 
322
    if( ctx != NULL )
 
323
        mbedtls_ripemd160_init( (mbedtls_ripemd160_context *) ctx );
 
324
 
 
325
    return( ctx );
 
326
}
 
327
 
 
328
static void ripemd160_ctx_free( void *ctx )
 
329
{
 
330
    mbedtls_ripemd160_free( (mbedtls_ripemd160_context *) ctx );
 
331
    mbedtls_free( ctx );
 
332
}
 
333
 
 
334
static void ripemd160_clone_wrap( void *dst, const void *src )
 
335
{
 
336
    mbedtls_ripemd160_clone( (mbedtls_ripemd160_context *) dst,
 
337
                       (const mbedtls_ripemd160_context *) src );
 
338
}
 
339
 
 
340
static int ripemd160_process_wrap( void *ctx, const unsigned char *data )
 
341
{
 
342
    return( mbedtls_internal_ripemd160_process(
 
343
                                (mbedtls_ripemd160_context *) ctx, data ) );
 
344
}
 
345
 
 
346
const mbedtls_md_info_t mbedtls_ripemd160_info = {
 
347
    MBEDTLS_MD_RIPEMD160,
 
348
    "RIPEMD160",
 
349
    20,
 
350
    64,
 
351
    ripemd160_starts_wrap,
 
352
    ripemd160_update_wrap,
 
353
    ripemd160_finish_wrap,
 
354
    mbedtls_ripemd160_ret,
 
355
    ripemd160_ctx_alloc,
 
356
    ripemd160_ctx_free,
 
357
    ripemd160_clone_wrap,
 
358
    ripemd160_process_wrap,
 
359
};
 
360
 
 
361
#endif /* MBEDTLS_RIPEMD160_C */
 
362
 
 
363
#if defined(MBEDTLS_SHA1_C)
 
364
 
 
365
static int sha1_starts_wrap( void *ctx )
 
366
{
 
367
    return( mbedtls_sha1_starts_ret( (mbedtls_sha1_context *) ctx ) );
 
368
}
 
369
 
 
370
static int sha1_update_wrap( void *ctx, const unsigned char *input,
 
371
                              size_t ilen )
 
372
{
 
373
    return( mbedtls_sha1_update_ret( (mbedtls_sha1_context *) ctx,
 
374
                                     input, ilen ) );
 
375
}
 
376
 
 
377
static int sha1_finish_wrap( void *ctx, unsigned char *output )
 
378
{
 
379
    return( mbedtls_sha1_finish_ret( (mbedtls_sha1_context *) ctx, output ) );
 
380
}
 
381
 
 
382
static void *sha1_ctx_alloc( void )
 
383
{
 
384
    void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha1_context ) );
 
385
 
 
386
    if( ctx != NULL )
 
387
        mbedtls_sha1_init( (mbedtls_sha1_context *) ctx );
 
388
 
 
389
    return( ctx );
 
390
}
 
391
 
 
392
static void sha1_clone_wrap( void *dst, const void *src )
 
393
{
 
394
    mbedtls_sha1_clone( (mbedtls_sha1_context *) dst,
 
395
                  (const mbedtls_sha1_context *) src );
 
396
}
 
397
 
 
398
static void sha1_ctx_free( void *ctx )
 
399
{
 
400
    mbedtls_sha1_free( (mbedtls_sha1_context *) ctx );
 
401
    mbedtls_free( ctx );
 
402
}
 
403
 
 
404
static int sha1_process_wrap( void *ctx, const unsigned char *data )
 
405
{
 
406
    return( mbedtls_internal_sha1_process( (mbedtls_sha1_context *) ctx,
 
407
                                           data ) );
 
408
}
 
409
 
 
410
const mbedtls_md_info_t mbedtls_sha1_info = {
 
411
    MBEDTLS_MD_SHA1,
 
412
    "SHA1",
 
413
    20,
 
414
    64,
 
415
    sha1_starts_wrap,
 
416
    sha1_update_wrap,
 
417
    sha1_finish_wrap,
 
418
    mbedtls_sha1_ret,
 
419
    sha1_ctx_alloc,
 
420
    sha1_ctx_free,
 
421
    sha1_clone_wrap,
 
422
    sha1_process_wrap,
 
423
};
 
424
 
 
425
#endif /* MBEDTLS_SHA1_C */
 
426
 
 
427
/*
 
428
 * Wrappers for generic message digests
 
429
 */
 
430
#if defined(MBEDTLS_SHA256_C)
 
431
 
 
432
static int sha224_starts_wrap( void *ctx )
 
433
{
 
434
    return( mbedtls_sha256_starts_ret( (mbedtls_sha256_context *) ctx, 1 ) );
 
435
}
 
436
 
 
437
static int sha224_update_wrap( void *ctx, const unsigned char *input,
 
438
                                size_t ilen )
 
439
{
 
440
    return( mbedtls_sha256_update_ret( (mbedtls_sha256_context *) ctx,
 
441
                                       input, ilen ) );
 
442
}
 
443
 
 
444
static int sha224_finish_wrap( void *ctx, unsigned char *output )
 
445
{
 
446
    return( mbedtls_sha256_finish_ret( (mbedtls_sha256_context *) ctx,
 
447
                                       output ) );
 
448
}
 
449
 
 
450
static int sha224_wrap( const unsigned char *input, size_t ilen,
 
451
                        unsigned char *output )
 
452
{
 
453
    return( mbedtls_sha256_ret( input, ilen, output, 1 ) );
 
454
}
 
455
 
 
456
static void *sha224_ctx_alloc( void )
 
457
{
 
458
    void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha256_context ) );
 
459
 
 
460
    if( ctx != NULL )
 
461
        mbedtls_sha256_init( (mbedtls_sha256_context *) ctx );
 
462
 
 
463
    return( ctx );
 
464
}
 
465
 
 
466
static void sha224_ctx_free( void *ctx )
 
467
{
 
468
    mbedtls_sha256_free( (mbedtls_sha256_context *) ctx );
 
469
    mbedtls_free( ctx );
 
470
}
 
471
 
 
472
static void sha224_clone_wrap( void *dst, const void *src )
 
473
{
 
474
    mbedtls_sha256_clone( (mbedtls_sha256_context *) dst,
 
475
                    (const mbedtls_sha256_context *) src );
 
476
}
 
477
 
 
478
static int sha224_process_wrap( void *ctx, const unsigned char *data )
 
479
{
 
480
    return( mbedtls_internal_sha256_process( (mbedtls_sha256_context *) ctx,
 
481
                                             data ) );
 
482
}
 
483
 
 
484
const mbedtls_md_info_t mbedtls_sha224_info = {
 
485
    MBEDTLS_MD_SHA224,
 
486
    "SHA224",
 
487
    28,
 
488
    64,
 
489
    sha224_starts_wrap,
 
490
    sha224_update_wrap,
 
491
    sha224_finish_wrap,
 
492
    sha224_wrap,
 
493
    sha224_ctx_alloc,
 
494
    sha224_ctx_free,
 
495
    sha224_clone_wrap,
 
496
    sha224_process_wrap,
 
497
};
 
498
 
 
499
static int sha256_starts_wrap( void *ctx )
 
500
{
 
501
    return( mbedtls_sha256_starts_ret( (mbedtls_sha256_context *) ctx, 0 ) );
 
502
}
 
503
 
 
504
static int sha256_wrap( const unsigned char *input, size_t ilen,
 
505
                        unsigned char *output )
 
506
{
 
507
    return( mbedtls_sha256_ret( input, ilen, output, 0 ) );
 
508
}
 
509
 
 
510
const mbedtls_md_info_t mbedtls_sha256_info = {
 
511
    MBEDTLS_MD_SHA256,
 
512
    "SHA256",
 
513
    32,
 
514
    64,
 
515
    sha256_starts_wrap,
 
516
    sha224_update_wrap,
 
517
    sha224_finish_wrap,
 
518
    sha256_wrap,
 
519
    sha224_ctx_alloc,
 
520
    sha224_ctx_free,
 
521
    sha224_clone_wrap,
 
522
    sha224_process_wrap,
 
523
};
 
524
 
 
525
#endif /* MBEDTLS_SHA256_C */
 
526
 
 
527
#if defined(MBEDTLS_SHA512_C)
 
528
 
 
529
static int sha384_starts_wrap( void *ctx )
 
530
{
 
531
    return( mbedtls_sha512_starts_ret( (mbedtls_sha512_context *) ctx, 1 ) );
 
532
}
 
533
 
 
534
static int sha384_update_wrap( void *ctx, const unsigned char *input,
 
535
                               size_t ilen )
 
536
{
 
537
    return( mbedtls_sha512_update_ret( (mbedtls_sha512_context *) ctx,
 
538
                                       input, ilen ) );
 
539
}
 
540
 
 
541
static int sha384_finish_wrap( void *ctx, unsigned char *output )
 
542
{
 
543
    return( mbedtls_sha512_finish_ret( (mbedtls_sha512_context *) ctx,
 
544
                                       output ) );
 
545
}
 
546
 
 
547
static int sha384_wrap( const unsigned char *input, size_t ilen,
 
548
                        unsigned char *output )
 
549
{
 
550
    return( mbedtls_sha512_ret( input, ilen, output, 1 ) );
 
551
}
 
552
 
 
553
static void *sha384_ctx_alloc( void )
 
554
{
 
555
    void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha512_context ) );
 
556
 
 
557
    if( ctx != NULL )
 
558
        mbedtls_sha512_init( (mbedtls_sha512_context *) ctx );
 
559
 
 
560
    return( ctx );
 
561
}
 
562
 
 
563
static void sha384_ctx_free( void *ctx )
 
564
{
 
565
    mbedtls_sha512_free( (mbedtls_sha512_context *) ctx );
 
566
    mbedtls_free( ctx );
 
567
}
 
568
 
 
569
static void sha384_clone_wrap( void *dst, const void *src )
 
570
{
 
571
    mbedtls_sha512_clone( (mbedtls_sha512_context *) dst,
 
572
                    (const mbedtls_sha512_context *) src );
 
573
}
 
574
 
 
575
static int sha384_process_wrap( void *ctx, const unsigned char *data )
 
576
{
 
577
    return( mbedtls_internal_sha512_process( (mbedtls_sha512_context *) ctx,
 
578
                                             data ) );
 
579
}
 
580
 
 
581
const mbedtls_md_info_t mbedtls_sha384_info = {
 
582
    MBEDTLS_MD_SHA384,
 
583
    "SHA384",
 
584
    48,
 
585
    128,
 
586
    sha384_starts_wrap,
 
587
    sha384_update_wrap,
 
588
    sha384_finish_wrap,
 
589
    sha384_wrap,
 
590
    sha384_ctx_alloc,
 
591
    sha384_ctx_free,
 
592
    sha384_clone_wrap,
 
593
    sha384_process_wrap,
 
594
};
 
595
 
 
596
static int sha512_starts_wrap( void *ctx )
 
597
{
 
598
    return( mbedtls_sha512_starts_ret( (mbedtls_sha512_context *) ctx, 0 ) );
 
599
}
 
600
 
 
601
static int sha512_wrap( const unsigned char *input, size_t ilen,
 
602
                        unsigned char *output )
 
603
{
 
604
    return( mbedtls_sha512_ret( input, ilen, output, 0 ) );
 
605
}
 
606
 
 
607
const mbedtls_md_info_t mbedtls_sha512_info = {
 
608
    MBEDTLS_MD_SHA512,
 
609
    "SHA512",
 
610
    64,
 
611
    128,
 
612
    sha512_starts_wrap,
 
613
    sha384_update_wrap,
 
614
    sha384_finish_wrap,
 
615
    sha512_wrap,
 
616
    sha384_ctx_alloc,
 
617
    sha384_ctx_free,
 
618
    sha384_clone_wrap,
 
619
    sha384_process_wrap,
 
620
};
 
621
 
 
622
#endif /* MBEDTLS_SHA512_C */
 
623
 
 
624
#endif /* MBEDTLS_MD_C */