blob: 6bf0754a4a688f528db192331c246c5b880f5993 [file] [log] [blame]
Antonio de Angelis8bb98512024-01-16 14:13:36 +00001/**
2 * \file md5.h
3 *
4 * \brief MD5 message digest algorithm (hash function)
5 *
6 * \warning MD5 is considered a weak message digest and its use constitutes a
7 * security risk. We recommend considering stronger message
8 * digests instead.
9 */
10/*
11 * Copyright The Mbed TLS Contributors
12 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
13 */
14#ifndef MBEDTLS_MD5_H
15#define MBEDTLS_MD5_H
16#include "mbedtls/private_access.h"
17
18#include "mbedtls/build_info.h"
19
20#include <stddef.h>
21#include <stdint.h>
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#if !defined(MBEDTLS_MD5_ALT)
28// Regular implementation
29//
30
31/**
32 * \brief MD5 context structure
33 *
34 * \warning MD5 is considered a weak message digest and its use
35 * constitutes a security risk. We recommend considering
36 * stronger message digests instead.
37 *
38 */
39typedef struct mbedtls_md5_context {
40 uint32_t MBEDTLS_PRIVATE(total)[2]; /*!< number of bytes processed */
41 uint32_t MBEDTLS_PRIVATE(state)[4]; /*!< intermediate digest state */
42 unsigned char MBEDTLS_PRIVATE(buffer)[64]; /*!< data block being processed */
43}
44mbedtls_md5_context;
45
46#else /* MBEDTLS_MD5_ALT */
47#include "md5_alt.h"
48#endif /* MBEDTLS_MD5_ALT */
49
50/**
51 * \brief Initialize MD5 context
52 *
53 * \param ctx MD5 context to be initialized
54 *
55 * \warning MD5 is considered a weak message digest and its use
56 * constitutes a security risk. We recommend considering
57 * stronger message digests instead.
58 *
59 */
60void mbedtls_md5_init(mbedtls_md5_context *ctx);
61
62/**
63 * \brief Clear MD5 context
64 *
65 * \param ctx MD5 context to be cleared
66 *
67 * \warning MD5 is considered a weak message digest and its use
68 * constitutes a security risk. We recommend considering
69 * stronger message digests instead.
70 *
71 */
72void mbedtls_md5_free(mbedtls_md5_context *ctx);
73
74/**
75 * \brief Clone (the state of) an MD5 context
76 *
77 * \param dst The destination context
78 * \param src The context to be cloned
79 *
80 * \warning MD5 is considered a weak message digest and its use
81 * constitutes a security risk. We recommend considering
82 * stronger message digests instead.
83 *
84 */
85void mbedtls_md5_clone(mbedtls_md5_context *dst,
86 const mbedtls_md5_context *src);
87
88/**
89 * \brief MD5 context setup
90 *
91 * \param ctx context to be initialized
92 *
93 * \return 0 if successful
94 *
95 * \warning MD5 is considered a weak message digest and its use
96 * constitutes a security risk. We recommend considering
97 * stronger message digests instead.
98 *
99 */
100int mbedtls_md5_starts(mbedtls_md5_context *ctx);
101
102/**
103 * \brief MD5 process buffer
104 *
105 * \param ctx MD5 context
106 * \param input buffer holding the data
107 * \param ilen length of the input data
108 *
109 * \return 0 if successful
110 *
111 * \warning MD5 is considered a weak message digest and its use
112 * constitutes a security risk. We recommend considering
113 * stronger message digests instead.
114 *
115 */
116int mbedtls_md5_update(mbedtls_md5_context *ctx,
117 const unsigned char *input,
118 size_t ilen);
119
120/**
121 * \brief MD5 final digest
122 *
123 * \param ctx MD5 context
124 * \param output MD5 checksum result
125 *
126 * \return 0 if successful
127 *
128 * \warning MD5 is considered a weak message digest and its use
129 * constitutes a security risk. We recommend considering
130 * stronger message digests instead.
131 *
132 */
133int mbedtls_md5_finish(mbedtls_md5_context *ctx,
134 unsigned char output[16]);
135
136/**
137 * \brief MD5 process data block (internal use only)
138 *
139 * \param ctx MD5 context
140 * \param data buffer holding one block of data
141 *
142 * \return 0 if successful
143 *
144 * \warning MD5 is considered a weak message digest and its use
145 * constitutes a security risk. We recommend considering
146 * stronger message digests instead.
147 *
148 */
149int mbedtls_internal_md5_process(mbedtls_md5_context *ctx,
150 const unsigned char data[64]);
151
152/**
153 * \brief Output = MD5( input buffer )
154 *
155 * \param input buffer holding the data
156 * \param ilen length of the input data
157 * \param output MD5 checksum result
158 *
159 * \return 0 if successful
160 *
161 * \warning MD5 is considered a weak message digest and its use
162 * constitutes a security risk. We recommend considering
163 * stronger message digests instead.
164 *
165 */
166int mbedtls_md5(const unsigned char *input,
167 size_t ilen,
168 unsigned char output[16]);
169
170#if defined(MBEDTLS_SELF_TEST)
171
172/**
173 * \brief Checkup routine
174 *
175 * \return 0 if successful, or 1 if the test failed
176 *
177 * \warning MD5 is considered a weak message digest and its use
178 * constitutes a security risk. We recommend considering
179 * stronger message digests instead.
180 *
181 */
182int mbedtls_md5_self_test(int verbose);
183
184#endif /* MBEDTLS_SELF_TEST */
185
186#ifdef __cplusplus
187}
188#endif
189
190#endif /* mbedtls_md5.h */