1 /**
2  * \file ripemd160.h
3  *
4  * \brief RIPE MD-160 message digest
5  */
6 /*
7  *  Copyright The Mbed TLS Contributors
8  *  SPDX-License-Identifier: Apache-2.0
9  *
10  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
11  *  not use this file except in compliance with the License.
12  *  You may obtain a copy of the License at
13  *
14  *  http://www.apache.org/licenses/LICENSE-2.0
15  *
16  *  Unless required by applicable law or agreed to in writing, software
17  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
18  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  *  See the License for the specific language governing permissions and
20  *  limitations under the License.
21  */
22 #ifndef MBEDTLS_RIPEMD160_H
23 #define MBEDTLS_RIPEMD160_H
24 
25 #if !defined(MBEDTLS_CONFIG_FILE)
26 #include "mbedtls/config.h"
27 #else
28 #include MBEDTLS_CONFIG_FILE
29 #endif
30 
31 #include <stddef.h>
32 #include <stdint.h>
33 
34 /* MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED is deprecated and should not be used.
35  */
36 /** RIPEMD160 hardware accelerator failed */
37 #define MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED             -0x0031
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 #if !defined(MBEDTLS_RIPEMD160_ALT)
44 // Regular implementation
45 //
46 
47 /**
48  * \brief          RIPEMD-160 context structure
49  */
50 typedef struct mbedtls_ripemd160_context
51 {
52     uint32_t total[2];          /*!< number of bytes processed  */
53     uint32_t state[5];          /*!< intermediate digest state  */
54     unsigned char buffer[64];   /*!< data block being processed */
55 }
56 mbedtls_ripemd160_context;
57 
58 #else  /* MBEDTLS_RIPEMD160_ALT */
59 #include "ripemd160_alt.h"
60 #endif /* MBEDTLS_RIPEMD160_ALT */
61 
62 /**
63  * \brief          Initialize RIPEMD-160 context
64  *
65  * \param ctx      RIPEMD-160 context to be initialized
66  */
67 void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx );
68 
69 /**
70  * \brief          Clear RIPEMD-160 context
71  *
72  * \param ctx      RIPEMD-160 context to be cleared
73  */
74 void mbedtls_ripemd160_free( mbedtls_ripemd160_context *ctx );
75 
76 /**
77  * \brief          Clone (the state of) an RIPEMD-160 context
78  *
79  * \param dst      The destination context
80  * \param src      The context to be cloned
81  */
82 void mbedtls_ripemd160_clone( mbedtls_ripemd160_context *dst,
83                         const mbedtls_ripemd160_context *src );
84 
85 /**
86  * \brief          RIPEMD-160 context setup
87  *
88  * \param ctx      context to be initialized
89  *
90  * \return         0 if successful
91  */
92 int mbedtls_ripemd160_starts_ret( mbedtls_ripemd160_context *ctx );
93 
94 /**
95  * \brief          RIPEMD-160 process buffer
96  *
97  * \param ctx      RIPEMD-160 context
98  * \param input    buffer holding the data
99  * \param ilen     length of the input data
100  *
101  * \return         0 if successful
102  */
103 int mbedtls_ripemd160_update_ret( mbedtls_ripemd160_context *ctx,
104                                   const unsigned char *input,
105                                   size_t ilen );
106 
107 /**
108  * \brief          RIPEMD-160 final digest
109  *
110  * \param ctx      RIPEMD-160 context
111  * \param output   RIPEMD-160 checksum result
112  *
113  * \return         0 if successful
114  */
115 int mbedtls_ripemd160_finish_ret( mbedtls_ripemd160_context *ctx,
116                                   unsigned char output[20] );
117 
118 /**
119  * \brief          RIPEMD-160 process data block (internal use only)
120  *
121  * \param ctx      RIPEMD-160 context
122  * \param data     buffer holding one block of data
123  *
124  * \return         0 if successful
125  */
126 int mbedtls_internal_ripemd160_process( mbedtls_ripemd160_context *ctx,
127                                         const unsigned char data[64] );
128 
129 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
130 #if defined(MBEDTLS_DEPRECATED_WARNING)
131 #define MBEDTLS_DEPRECATED      __attribute__((deprecated))
132 #else
133 #define MBEDTLS_DEPRECATED
134 #endif
135 /**
136  * \brief          RIPEMD-160 context setup
137  *
138  * \deprecated     Superseded by mbedtls_ripemd160_starts_ret() in 2.7.0
139  *
140  * \param ctx      context to be initialized
141  */
142 MBEDTLS_DEPRECATED void mbedtls_ripemd160_starts(
143                                             mbedtls_ripemd160_context *ctx );
144 
145 /**
146  * \brief          RIPEMD-160 process buffer
147  *
148  * \deprecated     Superseded by mbedtls_ripemd160_update_ret() in 2.7.0
149  *
150  * \param ctx      RIPEMD-160 context
151  * \param input    buffer holding the data
152  * \param ilen     length of the input data
153  */
154 MBEDTLS_DEPRECATED void mbedtls_ripemd160_update(
155                                                 mbedtls_ripemd160_context *ctx,
156                                                 const unsigned char *input,
157                                                 size_t ilen );
158 
159 /**
160  * \brief          RIPEMD-160 final digest
161  *
162  * \deprecated     Superseded by mbedtls_ripemd160_finish_ret() in 2.7.0
163  *
164  * \param ctx      RIPEMD-160 context
165  * \param output   RIPEMD-160 checksum result
166  */
167 MBEDTLS_DEPRECATED void mbedtls_ripemd160_finish(
168                                                 mbedtls_ripemd160_context *ctx,
169                                                 unsigned char output[20] );
170 
171 /**
172  * \brief          RIPEMD-160 process data block (internal use only)
173  *
174  * \deprecated     Superseded by mbedtls_internal_ripemd160_process() in 2.7.0
175  *
176  * \param ctx      RIPEMD-160 context
177  * \param data     buffer holding one block of data
178  */
179 MBEDTLS_DEPRECATED void mbedtls_ripemd160_process(
180                                             mbedtls_ripemd160_context *ctx,
181                                             const unsigned char data[64] );
182 
183 #undef MBEDTLS_DEPRECATED
184 #endif /* !MBEDTLS_DEPRECATED_REMOVED */
185 
186 /**
187  * \brief          Output = RIPEMD-160( input buffer )
188  *
189  * \param input    buffer holding the data
190  * \param ilen     length of the input data
191  * \param output   RIPEMD-160 checksum result
192  *
193  * \return         0 if successful
194  */
195 int mbedtls_ripemd160_ret( const unsigned char *input,
196                            size_t ilen,
197                            unsigned char output[20] );
198 
199 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
200 #if defined(MBEDTLS_DEPRECATED_WARNING)
201 #define MBEDTLS_DEPRECATED      __attribute__((deprecated))
202 #else
203 #define MBEDTLS_DEPRECATED
204 #endif
205 /**
206  * \brief          Output = RIPEMD-160( input buffer )
207  *
208  * \deprecated     Superseded by mbedtls_ripemd160_ret() in 2.7.0
209  *
210  * \param input    buffer holding the data
211  * \param ilen     length of the input data
212  * \param output   RIPEMD-160 checksum result
213  */
214 MBEDTLS_DEPRECATED void mbedtls_ripemd160( const unsigned char *input,
215                                            size_t ilen,
216                                            unsigned char output[20] );
217 
218 #undef MBEDTLS_DEPRECATED
219 #endif /* !MBEDTLS_DEPRECATED_REMOVED */
220 
221 #if defined(MBEDTLS_SELF_TEST)
222 
223 /**
224  * \brief          Checkup routine
225  *
226  * \return         0 if successful, or 1 if the test failed
227  */
228 int mbedtls_ripemd160_self_test( int verbose );
229 
230 #endif /* MBEDTLS_SELF_TEST */
231 
232 #ifdef __cplusplus
233 }
234 #endif
235 
236 #endif /* mbedtls_ripemd160.h */
237