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 OR GPL-2.0-or-later 9 */ 10 #ifndef MBEDTLS_RIPEMD160_H 11 #define MBEDTLS_RIPEMD160_H 12 #include "mbedtls/private_access.h" 13 14 #include "mbedtls/build_info.h" 15 16 #include <stddef.h> 17 #include <stdint.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 #if !defined(MBEDTLS_RIPEMD160_ALT) 24 // Regular implementation 25 // 26 27 /** 28 * \brief RIPEMD-160 context structure 29 */ 30 typedef struct mbedtls_ripemd160_context { 31 uint32_t MBEDTLS_PRIVATE(total)[2]; /*!< number of bytes processed */ 32 uint32_t MBEDTLS_PRIVATE(state)[5]; /*!< intermediate digest state */ 33 unsigned char MBEDTLS_PRIVATE(buffer)[64]; /*!< data block being processed */ 34 } 35 mbedtls_ripemd160_context; 36 37 #else /* MBEDTLS_RIPEMD160_ALT */ 38 #include "ripemd160_alt.h" 39 #endif /* MBEDTLS_RIPEMD160_ALT */ 40 41 /** 42 * \brief Initialize RIPEMD-160 context 43 * 44 * \param ctx RIPEMD-160 context to be initialized 45 */ 46 void mbedtls_ripemd160_init(mbedtls_ripemd160_context *ctx); 47 48 /** 49 * \brief Clear RIPEMD-160 context 50 * 51 * \param ctx RIPEMD-160 context to be cleared 52 */ 53 void mbedtls_ripemd160_free(mbedtls_ripemd160_context *ctx); 54 55 /** 56 * \brief Clone (the state of) a RIPEMD-160 context 57 * 58 * \param dst The destination context 59 * \param src The context to be cloned 60 */ 61 void mbedtls_ripemd160_clone(mbedtls_ripemd160_context *dst, 62 const mbedtls_ripemd160_context *src); 63 64 /** 65 * \brief RIPEMD-160 context setup 66 * 67 * \param ctx context to be initialized 68 * 69 * \return 0 if successful 70 */ 71 int mbedtls_ripemd160_starts(mbedtls_ripemd160_context *ctx); 72 73 /** 74 * \brief RIPEMD-160 process buffer 75 * 76 * \param ctx RIPEMD-160 context 77 * \param input buffer holding the data 78 * \param ilen length of the input data 79 * 80 * \return 0 if successful 81 */ 82 int mbedtls_ripemd160_update(mbedtls_ripemd160_context *ctx, 83 const unsigned char *input, 84 size_t ilen); 85 86 /** 87 * \brief RIPEMD-160 final digest 88 * 89 * \param ctx RIPEMD-160 context 90 * \param output RIPEMD-160 checksum result 91 * 92 * \return 0 if successful 93 */ 94 int mbedtls_ripemd160_finish(mbedtls_ripemd160_context *ctx, 95 unsigned char output[20]); 96 97 /** 98 * \brief RIPEMD-160 process data block (internal use only) 99 * 100 * \param ctx RIPEMD-160 context 101 * \param data buffer holding one block of data 102 * 103 * \return 0 if successful 104 */ 105 int mbedtls_internal_ripemd160_process(mbedtls_ripemd160_context *ctx, 106 const unsigned char data[64]); 107 108 /** 109 * \brief Output = RIPEMD-160( input buffer ) 110 * 111 * \param input buffer holding the data 112 * \param ilen length of the input data 113 * \param output RIPEMD-160 checksum result 114 * 115 * \return 0 if successful 116 */ 117 int mbedtls_ripemd160(const unsigned char *input, 118 size_t ilen, 119 unsigned char output[20]); 120 121 #if defined(MBEDTLS_SELF_TEST) 122 123 /** 124 * \brief Checkup routine 125 * 126 * \return 0 if successful, or 1 if the test failed 127 */ 128 int mbedtls_ripemd160_self_test(int verbose); 129 130 #endif /* MBEDTLS_SELF_TEST */ 131 132 #ifdef __cplusplus 133 } 134 #endif 135 136 #endif /* mbedtls_ripemd160.h */ 137