BA / SerialCom

Fork of OmniWheels by Gustav Atmel

Committer:
gustavatmel
Date:
Tue May 01 15:55:34 2018 +0000
Revision:
2:798925c9e4a8
Parent:
1:9c5af431a1f1
bluetooth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gustavatmel 1:9c5af431a1f1 1 /*
gustavatmel 1:9c5af431a1f1 2 * RIPE MD-160 implementation
gustavatmel 1:9c5af431a1f1 3 *
gustavatmel 1:9c5af431a1f1 4 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
gustavatmel 1:9c5af431a1f1 5 * SPDX-License-Identifier: Apache-2.0
gustavatmel 1:9c5af431a1f1 6 *
gustavatmel 1:9c5af431a1f1 7 * Licensed under the Apache License, Version 2.0 (the "License"); you may
gustavatmel 1:9c5af431a1f1 8 * not use this file except in compliance with the License.
gustavatmel 1:9c5af431a1f1 9 * You may obtain a copy of the License at
gustavatmel 1:9c5af431a1f1 10 *
gustavatmel 1:9c5af431a1f1 11 * http://www.apache.org/licenses/LICENSE-2.0
gustavatmel 1:9c5af431a1f1 12 *
gustavatmel 1:9c5af431a1f1 13 * Unless required by applicable law or agreed to in writing, software
gustavatmel 1:9c5af431a1f1 14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
gustavatmel 1:9c5af431a1f1 15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
gustavatmel 1:9c5af431a1f1 16 * See the License for the specific language governing permissions and
gustavatmel 1:9c5af431a1f1 17 * limitations under the License.
gustavatmel 1:9c5af431a1f1 18 *
gustavatmel 1:9c5af431a1f1 19 * This file is part of mbed TLS (https://tls.mbed.org)
gustavatmel 1:9c5af431a1f1 20 */
gustavatmel 1:9c5af431a1f1 21
gustavatmel 1:9c5af431a1f1 22 /*
gustavatmel 1:9c5af431a1f1 23 * The RIPEMD-160 algorithm was designed by RIPE in 1996
gustavatmel 1:9c5af431a1f1 24 * http://homes.esat.kuleuven.be/~bosselae/mbedtls_ripemd160.html
gustavatmel 1:9c5af431a1f1 25 * http://ehash.iaik.tugraz.at/wiki/RIPEMD-160
gustavatmel 1:9c5af431a1f1 26 */
gustavatmel 1:9c5af431a1f1 27
gustavatmel 1:9c5af431a1f1 28 #if !defined(MBEDTLS_CONFIG_FILE)
gustavatmel 1:9c5af431a1f1 29 #include "mbedtls/config.h"
gustavatmel 1:9c5af431a1f1 30 #else
gustavatmel 1:9c5af431a1f1 31 #include MBEDTLS_CONFIG_FILE
gustavatmel 1:9c5af431a1f1 32 #endif
gustavatmel 1:9c5af431a1f1 33
gustavatmel 1:9c5af431a1f1 34 #if defined(MBEDTLS_RIPEMD160_C)
gustavatmel 1:9c5af431a1f1 35
gustavatmel 1:9c5af431a1f1 36 #include "mbedtls/ripemd160.h"
gustavatmel 1:9c5af431a1f1 37
gustavatmel 1:9c5af431a1f1 38 #include <string.h>
gustavatmel 1:9c5af431a1f1 39
gustavatmel 1:9c5af431a1f1 40 #if defined(MBEDTLS_SELF_TEST)
gustavatmel 1:9c5af431a1f1 41 #if defined(MBEDTLS_PLATFORM_C)
gustavatmel 1:9c5af431a1f1 42 #include "mbedtls/platform.h"
gustavatmel 1:9c5af431a1f1 43 #else
gustavatmel 1:9c5af431a1f1 44 #include <stdio.h>
gustavatmel 1:9c5af431a1f1 45 #define mbedtls_printf printf
gustavatmel 1:9c5af431a1f1 46 #endif /* MBEDTLS_PLATFORM_C */
gustavatmel 1:9c5af431a1f1 47 #endif /* MBEDTLS_SELF_TEST */
gustavatmel 1:9c5af431a1f1 48
gustavatmel 1:9c5af431a1f1 49 #if !defined(MBEDTLS_RIPEMD160_ALT)
gustavatmel 1:9c5af431a1f1 50
gustavatmel 1:9c5af431a1f1 51 /*
gustavatmel 1:9c5af431a1f1 52 * 32-bit integer manipulation macros (little endian)
gustavatmel 1:9c5af431a1f1 53 */
gustavatmel 1:9c5af431a1f1 54 #ifndef GET_UINT32_LE
gustavatmel 1:9c5af431a1f1 55 #define GET_UINT32_LE(n,b,i) \
gustavatmel 1:9c5af431a1f1 56 { \
gustavatmel 1:9c5af431a1f1 57 (n) = ( (uint32_t) (b)[(i) ] ) \
gustavatmel 1:9c5af431a1f1 58 | ( (uint32_t) (b)[(i) + 1] << 8 ) \
gustavatmel 1:9c5af431a1f1 59 | ( (uint32_t) (b)[(i) + 2] << 16 ) \
gustavatmel 1:9c5af431a1f1 60 | ( (uint32_t) (b)[(i) + 3] << 24 ); \
gustavatmel 1:9c5af431a1f1 61 }
gustavatmel 1:9c5af431a1f1 62 #endif
gustavatmel 1:9c5af431a1f1 63
gustavatmel 1:9c5af431a1f1 64 #ifndef PUT_UINT32_LE
gustavatmel 1:9c5af431a1f1 65 #define PUT_UINT32_LE(n,b,i) \
gustavatmel 1:9c5af431a1f1 66 { \
gustavatmel 1:9c5af431a1f1 67 (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \
gustavatmel 1:9c5af431a1f1 68 (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \
gustavatmel 1:9c5af431a1f1 69 (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \
gustavatmel 1:9c5af431a1f1 70 (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \
gustavatmel 1:9c5af431a1f1 71 }
gustavatmel 1:9c5af431a1f1 72 #endif
gustavatmel 1:9c5af431a1f1 73
gustavatmel 1:9c5af431a1f1 74 /* Implementation that should never be optimized out by the compiler */
gustavatmel 1:9c5af431a1f1 75 static void mbedtls_zeroize( void *v, size_t n ) {
gustavatmel 1:9c5af431a1f1 76 volatile unsigned char *p = v; while( n-- ) *p++ = 0;
gustavatmel 1:9c5af431a1f1 77 }
gustavatmel 1:9c5af431a1f1 78
gustavatmel 1:9c5af431a1f1 79 void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx )
gustavatmel 1:9c5af431a1f1 80 {
gustavatmel 1:9c5af431a1f1 81 memset( ctx, 0, sizeof( mbedtls_ripemd160_context ) );
gustavatmel 1:9c5af431a1f1 82 }
gustavatmel 1:9c5af431a1f1 83
gustavatmel 1:9c5af431a1f1 84 void mbedtls_ripemd160_free( mbedtls_ripemd160_context *ctx )
gustavatmel 1:9c5af431a1f1 85 {
gustavatmel 1:9c5af431a1f1 86 if( ctx == NULL )
gustavatmel 1:9c5af431a1f1 87 return;
gustavatmel 1:9c5af431a1f1 88
gustavatmel 1:9c5af431a1f1 89 mbedtls_zeroize( ctx, sizeof( mbedtls_ripemd160_context ) );
gustavatmel 1:9c5af431a1f1 90 }
gustavatmel 1:9c5af431a1f1 91
gustavatmel 1:9c5af431a1f1 92 void mbedtls_ripemd160_clone( mbedtls_ripemd160_context *dst,
gustavatmel 1:9c5af431a1f1 93 const mbedtls_ripemd160_context *src )
gustavatmel 1:9c5af431a1f1 94 {
gustavatmel 1:9c5af431a1f1 95 *dst = *src;
gustavatmel 1:9c5af431a1f1 96 }
gustavatmel 1:9c5af431a1f1 97
gustavatmel 1:9c5af431a1f1 98 /*
gustavatmel 1:9c5af431a1f1 99 * RIPEMD-160 context setup
gustavatmel 1:9c5af431a1f1 100 */
gustavatmel 1:9c5af431a1f1 101 int mbedtls_ripemd160_starts_ret( mbedtls_ripemd160_context *ctx )
gustavatmel 1:9c5af431a1f1 102 {
gustavatmel 1:9c5af431a1f1 103 ctx->total[0] = 0;
gustavatmel 1:9c5af431a1f1 104 ctx->total[1] = 0;
gustavatmel 1:9c5af431a1f1 105
gustavatmel 1:9c5af431a1f1 106 ctx->state[0] = 0x67452301;
gustavatmel 1:9c5af431a1f1 107 ctx->state[1] = 0xEFCDAB89;
gustavatmel 1:9c5af431a1f1 108 ctx->state[2] = 0x98BADCFE;
gustavatmel 1:9c5af431a1f1 109 ctx->state[3] = 0x10325476;
gustavatmel 1:9c5af431a1f1 110 ctx->state[4] = 0xC3D2E1F0;
gustavatmel 1:9c5af431a1f1 111
gustavatmel 1:9c5af431a1f1 112 return( 0 );
gustavatmel 1:9c5af431a1f1 113 }
gustavatmel 1:9c5af431a1f1 114
gustavatmel 1:9c5af431a1f1 115 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
gustavatmel 1:9c5af431a1f1 116 void mbedtls_ripemd160_starts( mbedtls_ripemd160_context *ctx )
gustavatmel 1:9c5af431a1f1 117 {
gustavatmel 1:9c5af431a1f1 118 mbedtls_ripemd160_starts_ret( ctx );
gustavatmel 1:9c5af431a1f1 119 }
gustavatmel 1:9c5af431a1f1 120 #endif
gustavatmel 1:9c5af431a1f1 121
gustavatmel 1:9c5af431a1f1 122 #if !defined(MBEDTLS_RIPEMD160_PROCESS_ALT)
gustavatmel 1:9c5af431a1f1 123 /*
gustavatmel 1:9c5af431a1f1 124 * Process one block
gustavatmel 1:9c5af431a1f1 125 */
gustavatmel 1:9c5af431a1f1 126 int mbedtls_internal_ripemd160_process( mbedtls_ripemd160_context *ctx,
gustavatmel 1:9c5af431a1f1 127 const unsigned char data[64] )
gustavatmel 1:9c5af431a1f1 128 {
gustavatmel 1:9c5af431a1f1 129 uint32_t A, B, C, D, E, Ap, Bp, Cp, Dp, Ep, X[16];
gustavatmel 1:9c5af431a1f1 130
gustavatmel 1:9c5af431a1f1 131 GET_UINT32_LE( X[ 0], data, 0 );
gustavatmel 1:9c5af431a1f1 132 GET_UINT32_LE( X[ 1], data, 4 );
gustavatmel 1:9c5af431a1f1 133 GET_UINT32_LE( X[ 2], data, 8 );
gustavatmel 1:9c5af431a1f1 134 GET_UINT32_LE( X[ 3], data, 12 );
gustavatmel 1:9c5af431a1f1 135 GET_UINT32_LE( X[ 4], data, 16 );
gustavatmel 1:9c5af431a1f1 136 GET_UINT32_LE( X[ 5], data, 20 );
gustavatmel 1:9c5af431a1f1 137 GET_UINT32_LE( X[ 6], data, 24 );
gustavatmel 1:9c5af431a1f1 138 GET_UINT32_LE( X[ 7], data, 28 );
gustavatmel 1:9c5af431a1f1 139 GET_UINT32_LE( X[ 8], data, 32 );
gustavatmel 1:9c5af431a1f1 140 GET_UINT32_LE( X[ 9], data, 36 );
gustavatmel 1:9c5af431a1f1 141 GET_UINT32_LE( X[10], data, 40 );
gustavatmel 1:9c5af431a1f1 142 GET_UINT32_LE( X[11], data, 44 );
gustavatmel 1:9c5af431a1f1 143 GET_UINT32_LE( X[12], data, 48 );
gustavatmel 1:9c5af431a1f1 144 GET_UINT32_LE( X[13], data, 52 );
gustavatmel 1:9c5af431a1f1 145 GET_UINT32_LE( X[14], data, 56 );
gustavatmel 1:9c5af431a1f1 146 GET_UINT32_LE( X[15], data, 60 );
gustavatmel 1:9c5af431a1f1 147
gustavatmel 1:9c5af431a1f1 148 A = Ap = ctx->state[0];
gustavatmel 1:9c5af431a1f1 149 B = Bp = ctx->state[1];
gustavatmel 1:9c5af431a1f1 150 C = Cp = ctx->state[2];
gustavatmel 1:9c5af431a1f1 151 D = Dp = ctx->state[3];
gustavatmel 1:9c5af431a1f1 152 E = Ep = ctx->state[4];
gustavatmel 1:9c5af431a1f1 153
gustavatmel 1:9c5af431a1f1 154 #define F1( x, y, z ) ( x ^ y ^ z )
gustavatmel 1:9c5af431a1f1 155 #define F2( x, y, z ) ( ( x & y ) | ( ~x & z ) )
gustavatmel 1:9c5af431a1f1 156 #define F3( x, y, z ) ( ( x | ~y ) ^ z )
gustavatmel 1:9c5af431a1f1 157 #define F4( x, y, z ) ( ( x & z ) | ( y & ~z ) )
gustavatmel 1:9c5af431a1f1 158 #define F5( x, y, z ) ( x ^ ( y | ~z ) )
gustavatmel 1:9c5af431a1f1 159
gustavatmel 1:9c5af431a1f1 160 #define S( x, n ) ( ( x << n ) | ( x >> (32 - n) ) )
gustavatmel 1:9c5af431a1f1 161
gustavatmel 1:9c5af431a1f1 162 #define P( a, b, c, d, e, r, s, f, k ) \
gustavatmel 1:9c5af431a1f1 163 a += f( b, c, d ) + X[r] + k; \
gustavatmel 1:9c5af431a1f1 164 a = S( a, s ) + e; \
gustavatmel 1:9c5af431a1f1 165 c = S( c, 10 );
gustavatmel 1:9c5af431a1f1 166
gustavatmel 1:9c5af431a1f1 167 #define P2( a, b, c, d, e, r, s, rp, sp ) \
gustavatmel 1:9c5af431a1f1 168 P( a, b, c, d, e, r, s, F, K ); \
gustavatmel 1:9c5af431a1f1 169 P( a ## p, b ## p, c ## p, d ## p, e ## p, rp, sp, Fp, Kp );
gustavatmel 1:9c5af431a1f1 170
gustavatmel 1:9c5af431a1f1 171 #define F F1
gustavatmel 1:9c5af431a1f1 172 #define K 0x00000000
gustavatmel 1:9c5af431a1f1 173 #define Fp F5
gustavatmel 1:9c5af431a1f1 174 #define Kp 0x50A28BE6
gustavatmel 1:9c5af431a1f1 175 P2( A, B, C, D, E, 0, 11, 5, 8 );
gustavatmel 1:9c5af431a1f1 176 P2( E, A, B, C, D, 1, 14, 14, 9 );
gustavatmel 1:9c5af431a1f1 177 P2( D, E, A, B, C, 2, 15, 7, 9 );
gustavatmel 1:9c5af431a1f1 178 P2( C, D, E, A, B, 3, 12, 0, 11 );
gustavatmel 1:9c5af431a1f1 179 P2( B, C, D, E, A, 4, 5, 9, 13 );
gustavatmel 1:9c5af431a1f1 180 P2( A, B, C, D, E, 5, 8, 2, 15 );
gustavatmel 1:9c5af431a1f1 181 P2( E, A, B, C, D, 6, 7, 11, 15 );
gustavatmel 1:9c5af431a1f1 182 P2( D, E, A, B, C, 7, 9, 4, 5 );
gustavatmel 1:9c5af431a1f1 183 P2( C, D, E, A, B, 8, 11, 13, 7 );
gustavatmel 1:9c5af431a1f1 184 P2( B, C, D, E, A, 9, 13, 6, 7 );
gustavatmel 1:9c5af431a1f1 185 P2( A, B, C, D, E, 10, 14, 15, 8 );
gustavatmel 1:9c5af431a1f1 186 P2( E, A, B, C, D, 11, 15, 8, 11 );
gustavatmel 1:9c5af431a1f1 187 P2( D, E, A, B, C, 12, 6, 1, 14 );
gustavatmel 1:9c5af431a1f1 188 P2( C, D, E, A, B, 13, 7, 10, 14 );
gustavatmel 1:9c5af431a1f1 189 P2( B, C, D, E, A, 14, 9, 3, 12 );
gustavatmel 1:9c5af431a1f1 190 P2( A, B, C, D, E, 15, 8, 12, 6 );
gustavatmel 1:9c5af431a1f1 191 #undef F
gustavatmel 1:9c5af431a1f1 192 #undef K
gustavatmel 1:9c5af431a1f1 193 #undef Fp
gustavatmel 1:9c5af431a1f1 194 #undef Kp
gustavatmel 1:9c5af431a1f1 195
gustavatmel 1:9c5af431a1f1 196 #define F F2
gustavatmel 1:9c5af431a1f1 197 #define K 0x5A827999
gustavatmel 1:9c5af431a1f1 198 #define Fp F4
gustavatmel 1:9c5af431a1f1 199 #define Kp 0x5C4DD124
gustavatmel 1:9c5af431a1f1 200 P2( E, A, B, C, D, 7, 7, 6, 9 );
gustavatmel 1:9c5af431a1f1 201 P2( D, E, A, B, C, 4, 6, 11, 13 );
gustavatmel 1:9c5af431a1f1 202 P2( C, D, E, A, B, 13, 8, 3, 15 );
gustavatmel 1:9c5af431a1f1 203 P2( B, C, D, E, A, 1, 13, 7, 7 );
gustavatmel 1:9c5af431a1f1 204 P2( A, B, C, D, E, 10, 11, 0, 12 );
gustavatmel 1:9c5af431a1f1 205 P2( E, A, B, C, D, 6, 9, 13, 8 );
gustavatmel 1:9c5af431a1f1 206 P2( D, E, A, B, C, 15, 7, 5, 9 );
gustavatmel 1:9c5af431a1f1 207 P2( C, D, E, A, B, 3, 15, 10, 11 );
gustavatmel 1:9c5af431a1f1 208 P2( B, C, D, E, A, 12, 7, 14, 7 );
gustavatmel 1:9c5af431a1f1 209 P2( A, B, C, D, E, 0, 12, 15, 7 );
gustavatmel 1:9c5af431a1f1 210 P2( E, A, B, C, D, 9, 15, 8, 12 );
gustavatmel 1:9c5af431a1f1 211 P2( D, E, A, B, C, 5, 9, 12, 7 );
gustavatmel 1:9c5af431a1f1 212 P2( C, D, E, A, B, 2, 11, 4, 6 );
gustavatmel 1:9c5af431a1f1 213 P2( B, C, D, E, A, 14, 7, 9, 15 );
gustavatmel 1:9c5af431a1f1 214 P2( A, B, C, D, E, 11, 13, 1, 13 );
gustavatmel 1:9c5af431a1f1 215 P2( E, A, B, C, D, 8, 12, 2, 11 );
gustavatmel 1:9c5af431a1f1 216 #undef F
gustavatmel 1:9c5af431a1f1 217 #undef K
gustavatmel 1:9c5af431a1f1 218 #undef Fp
gustavatmel 1:9c5af431a1f1 219 #undef Kp
gustavatmel 1:9c5af431a1f1 220
gustavatmel 1:9c5af431a1f1 221 #define F F3
gustavatmel 1:9c5af431a1f1 222 #define K 0x6ED9EBA1
gustavatmel 1:9c5af431a1f1 223 #define Fp F3
gustavatmel 1:9c5af431a1f1 224 #define Kp 0x6D703EF3
gustavatmel 1:9c5af431a1f1 225 P2( D, E, A, B, C, 3, 11, 15, 9 );
gustavatmel 1:9c5af431a1f1 226 P2( C, D, E, A, B, 10, 13, 5, 7 );
gustavatmel 1:9c5af431a1f1 227 P2( B, C, D, E, A, 14, 6, 1, 15 );
gustavatmel 1:9c5af431a1f1 228 P2( A, B, C, D, E, 4, 7, 3, 11 );
gustavatmel 1:9c5af431a1f1 229 P2( E, A, B, C, D, 9, 14, 7, 8 );
gustavatmel 1:9c5af431a1f1 230 P2( D, E, A, B, C, 15, 9, 14, 6 );
gustavatmel 1:9c5af431a1f1 231 P2( C, D, E, A, B, 8, 13, 6, 6 );
gustavatmel 1:9c5af431a1f1 232 P2( B, C, D, E, A, 1, 15, 9, 14 );
gustavatmel 1:9c5af431a1f1 233 P2( A, B, C, D, E, 2, 14, 11, 12 );
gustavatmel 1:9c5af431a1f1 234 P2( E, A, B, C, D, 7, 8, 8, 13 );
gustavatmel 1:9c5af431a1f1 235 P2( D, E, A, B, C, 0, 13, 12, 5 );
gustavatmel 1:9c5af431a1f1 236 P2( C, D, E, A, B, 6, 6, 2, 14 );
gustavatmel 1:9c5af431a1f1 237 P2( B, C, D, E, A, 13, 5, 10, 13 );
gustavatmel 1:9c5af431a1f1 238 P2( A, B, C, D, E, 11, 12, 0, 13 );
gustavatmel 1:9c5af431a1f1 239 P2( E, A, B, C, D, 5, 7, 4, 7 );
gustavatmel 1:9c5af431a1f1 240 P2( D, E, A, B, C, 12, 5, 13, 5 );
gustavatmel 1:9c5af431a1f1 241 #undef F
gustavatmel 1:9c5af431a1f1 242 #undef K
gustavatmel 1:9c5af431a1f1 243 #undef Fp
gustavatmel 1:9c5af431a1f1 244 #undef Kp
gustavatmel 1:9c5af431a1f1 245
gustavatmel 1:9c5af431a1f1 246 #define F F4
gustavatmel 1:9c5af431a1f1 247 #define K 0x8F1BBCDC
gustavatmel 1:9c5af431a1f1 248 #define Fp F2
gustavatmel 1:9c5af431a1f1 249 #define Kp 0x7A6D76E9
gustavatmel 1:9c5af431a1f1 250 P2( C, D, E, A, B, 1, 11, 8, 15 );
gustavatmel 1:9c5af431a1f1 251 P2( B, C, D, E, A, 9, 12, 6, 5 );
gustavatmel 1:9c5af431a1f1 252 P2( A, B, C, D, E, 11, 14, 4, 8 );
gustavatmel 1:9c5af431a1f1 253 P2( E, A, B, C, D, 10, 15, 1, 11 );
gustavatmel 1:9c5af431a1f1 254 P2( D, E, A, B, C, 0, 14, 3, 14 );
gustavatmel 1:9c5af431a1f1 255 P2( C, D, E, A, B, 8, 15, 11, 14 );
gustavatmel 1:9c5af431a1f1 256 P2( B, C, D, E, A, 12, 9, 15, 6 );
gustavatmel 1:9c5af431a1f1 257 P2( A, B, C, D, E, 4, 8, 0, 14 );
gustavatmel 1:9c5af431a1f1 258 P2( E, A, B, C, D, 13, 9, 5, 6 );
gustavatmel 1:9c5af431a1f1 259 P2( D, E, A, B, C, 3, 14, 12, 9 );
gustavatmel 1:9c5af431a1f1 260 P2( C, D, E, A, B, 7, 5, 2, 12 );
gustavatmel 1:9c5af431a1f1 261 P2( B, C, D, E, A, 15, 6, 13, 9 );
gustavatmel 1:9c5af431a1f1 262 P2( A, B, C, D, E, 14, 8, 9, 12 );
gustavatmel 1:9c5af431a1f1 263 P2( E, A, B, C, D, 5, 6, 7, 5 );
gustavatmel 1:9c5af431a1f1 264 P2( D, E, A, B, C, 6, 5, 10, 15 );
gustavatmel 1:9c5af431a1f1 265 P2( C, D, E, A, B, 2, 12, 14, 8 );
gustavatmel 1:9c5af431a1f1 266 #undef F
gustavatmel 1:9c5af431a1f1 267 #undef K
gustavatmel 1:9c5af431a1f1 268 #undef Fp
gustavatmel 1:9c5af431a1f1 269 #undef Kp
gustavatmel 1:9c5af431a1f1 270
gustavatmel 1:9c5af431a1f1 271 #define F F5
gustavatmel 1:9c5af431a1f1 272 #define K 0xA953FD4E
gustavatmel 1:9c5af431a1f1 273 #define Fp F1
gustavatmel 1:9c5af431a1f1 274 #define Kp 0x00000000
gustavatmel 1:9c5af431a1f1 275 P2( B, C, D, E, A, 4, 9, 12, 8 );
gustavatmel 1:9c5af431a1f1 276 P2( A, B, C, D, E, 0, 15, 15, 5 );
gustavatmel 1:9c5af431a1f1 277 P2( E, A, B, C, D, 5, 5, 10, 12 );
gustavatmel 1:9c5af431a1f1 278 P2( D, E, A, B, C, 9, 11, 4, 9 );
gustavatmel 1:9c5af431a1f1 279 P2( C, D, E, A, B, 7, 6, 1, 12 );
gustavatmel 1:9c5af431a1f1 280 P2( B, C, D, E, A, 12, 8, 5, 5 );
gustavatmel 1:9c5af431a1f1 281 P2( A, B, C, D, E, 2, 13, 8, 14 );
gustavatmel 1:9c5af431a1f1 282 P2( E, A, B, C, D, 10, 12, 7, 6 );
gustavatmel 1:9c5af431a1f1 283 P2( D, E, A, B, C, 14, 5, 6, 8 );
gustavatmel 1:9c5af431a1f1 284 P2( C, D, E, A, B, 1, 12, 2, 13 );
gustavatmel 1:9c5af431a1f1 285 P2( B, C, D, E, A, 3, 13, 13, 6 );
gustavatmel 1:9c5af431a1f1 286 P2( A, B, C, D, E, 8, 14, 14, 5 );
gustavatmel 1:9c5af431a1f1 287 P2( E, A, B, C, D, 11, 11, 0, 15 );
gustavatmel 1:9c5af431a1f1 288 P2( D, E, A, B, C, 6, 8, 3, 13 );
gustavatmel 1:9c5af431a1f1 289 P2( C, D, E, A, B, 15, 5, 9, 11 );
gustavatmel 1:9c5af431a1f1 290 P2( B, C, D, E, A, 13, 6, 11, 11 );
gustavatmel 1:9c5af431a1f1 291 #undef F
gustavatmel 1:9c5af431a1f1 292 #undef K
gustavatmel 1:9c5af431a1f1 293 #undef Fp
gustavatmel 1:9c5af431a1f1 294 #undef Kp
gustavatmel 1:9c5af431a1f1 295
gustavatmel 1:9c5af431a1f1 296 C = ctx->state[1] + C + Dp;
gustavatmel 1:9c5af431a1f1 297 ctx->state[1] = ctx->state[2] + D + Ep;
gustavatmel 1:9c5af431a1f1 298 ctx->state[2] = ctx->state[3] + E + Ap;
gustavatmel 1:9c5af431a1f1 299 ctx->state[3] = ctx->state[4] + A + Bp;
gustavatmel 1:9c5af431a1f1 300 ctx->state[4] = ctx->state[0] + B + Cp;
gustavatmel 1:9c5af431a1f1 301 ctx->state[0] = C;
gustavatmel 1:9c5af431a1f1 302
gustavatmel 1:9c5af431a1f1 303 return( 0 );
gustavatmel 1:9c5af431a1f1 304 }
gustavatmel 1:9c5af431a1f1 305
gustavatmel 1:9c5af431a1f1 306 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
gustavatmel 1:9c5af431a1f1 307 void mbedtls_ripemd160_process( mbedtls_ripemd160_context *ctx,
gustavatmel 1:9c5af431a1f1 308 const unsigned char data[64] )
gustavatmel 1:9c5af431a1f1 309 {
gustavatmel 1:9c5af431a1f1 310 mbedtls_internal_ripemd160_process( ctx, data );
gustavatmel 1:9c5af431a1f1 311 }
gustavatmel 1:9c5af431a1f1 312 #endif
gustavatmel 1:9c5af431a1f1 313 #endif /* !MBEDTLS_RIPEMD160_PROCESS_ALT */
gustavatmel 1:9c5af431a1f1 314
gustavatmel 1:9c5af431a1f1 315 /*
gustavatmel 1:9c5af431a1f1 316 * RIPEMD-160 process buffer
gustavatmel 1:9c5af431a1f1 317 */
gustavatmel 1:9c5af431a1f1 318 int mbedtls_ripemd160_update_ret( mbedtls_ripemd160_context *ctx,
gustavatmel 1:9c5af431a1f1 319 const unsigned char *input,
gustavatmel 1:9c5af431a1f1 320 size_t ilen )
gustavatmel 1:9c5af431a1f1 321 {
gustavatmel 1:9c5af431a1f1 322 int ret;
gustavatmel 1:9c5af431a1f1 323 size_t fill;
gustavatmel 1:9c5af431a1f1 324 uint32_t left;
gustavatmel 1:9c5af431a1f1 325
gustavatmel 1:9c5af431a1f1 326 if( ilen == 0 )
gustavatmel 1:9c5af431a1f1 327 return( 0 );
gustavatmel 1:9c5af431a1f1 328
gustavatmel 1:9c5af431a1f1 329 left = ctx->total[0] & 0x3F;
gustavatmel 1:9c5af431a1f1 330 fill = 64 - left;
gustavatmel 1:9c5af431a1f1 331
gustavatmel 1:9c5af431a1f1 332 ctx->total[0] += (uint32_t) ilen;
gustavatmel 1:9c5af431a1f1 333 ctx->total[0] &= 0xFFFFFFFF;
gustavatmel 1:9c5af431a1f1 334
gustavatmel 1:9c5af431a1f1 335 if( ctx->total[0] < (uint32_t) ilen )
gustavatmel 1:9c5af431a1f1 336 ctx->total[1]++;
gustavatmel 1:9c5af431a1f1 337
gustavatmel 1:9c5af431a1f1 338 if( left && ilen >= fill )
gustavatmel 1:9c5af431a1f1 339 {
gustavatmel 1:9c5af431a1f1 340 memcpy( (void *) (ctx->buffer + left), input, fill );
gustavatmel 1:9c5af431a1f1 341
gustavatmel 1:9c5af431a1f1 342 if( ( ret = mbedtls_internal_ripemd160_process( ctx, ctx->buffer ) ) != 0 )
gustavatmel 1:9c5af431a1f1 343 return( ret );
gustavatmel 1:9c5af431a1f1 344
gustavatmel 1:9c5af431a1f1 345 input += fill;
gustavatmel 1:9c5af431a1f1 346 ilen -= fill;
gustavatmel 1:9c5af431a1f1 347 left = 0;
gustavatmel 1:9c5af431a1f1 348 }
gustavatmel 1:9c5af431a1f1 349
gustavatmel 1:9c5af431a1f1 350 while( ilen >= 64 )
gustavatmel 1:9c5af431a1f1 351 {
gustavatmel 1:9c5af431a1f1 352 if( ( ret = mbedtls_internal_ripemd160_process( ctx, input ) ) != 0 )
gustavatmel 1:9c5af431a1f1 353 return( ret );
gustavatmel 1:9c5af431a1f1 354
gustavatmel 1:9c5af431a1f1 355 input += 64;
gustavatmel 1:9c5af431a1f1 356 ilen -= 64;
gustavatmel 1:9c5af431a1f1 357 }
gustavatmel 1:9c5af431a1f1 358
gustavatmel 1:9c5af431a1f1 359 if( ilen > 0 )
gustavatmel 1:9c5af431a1f1 360 {
gustavatmel 1:9c5af431a1f1 361 memcpy( (void *) (ctx->buffer + left), input, ilen );
gustavatmel 1:9c5af431a1f1 362 }
gustavatmel 1:9c5af431a1f1 363
gustavatmel 1:9c5af431a1f1 364 return( 0 );
gustavatmel 1:9c5af431a1f1 365 }
gustavatmel 1:9c5af431a1f1 366
gustavatmel 1:9c5af431a1f1 367 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
gustavatmel 1:9c5af431a1f1 368 void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx,
gustavatmel 1:9c5af431a1f1 369 const unsigned char *input,
gustavatmel 1:9c5af431a1f1 370 size_t ilen )
gustavatmel 1:9c5af431a1f1 371 {
gustavatmel 1:9c5af431a1f1 372 mbedtls_ripemd160_update_ret( ctx, input, ilen );
gustavatmel 1:9c5af431a1f1 373 }
gustavatmel 1:9c5af431a1f1 374 #endif
gustavatmel 1:9c5af431a1f1 375
gustavatmel 1:9c5af431a1f1 376 static const unsigned char ripemd160_padding[64] =
gustavatmel 1:9c5af431a1f1 377 {
gustavatmel 1:9c5af431a1f1 378 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
gustavatmel 1:9c5af431a1f1 379 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
gustavatmel 1:9c5af431a1f1 380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
gustavatmel 1:9c5af431a1f1 381 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
gustavatmel 1:9c5af431a1f1 382 };
gustavatmel 1:9c5af431a1f1 383
gustavatmel 1:9c5af431a1f1 384 /*
gustavatmel 1:9c5af431a1f1 385 * RIPEMD-160 final digest
gustavatmel 1:9c5af431a1f1 386 */
gustavatmel 1:9c5af431a1f1 387 int mbedtls_ripemd160_finish_ret( mbedtls_ripemd160_context *ctx,
gustavatmel 1:9c5af431a1f1 388 unsigned char output[20] )
gustavatmel 1:9c5af431a1f1 389 {
gustavatmel 1:9c5af431a1f1 390 int ret;
gustavatmel 1:9c5af431a1f1 391 uint32_t last, padn;
gustavatmel 1:9c5af431a1f1 392 uint32_t high, low;
gustavatmel 1:9c5af431a1f1 393 unsigned char msglen[8];
gustavatmel 1:9c5af431a1f1 394
gustavatmel 1:9c5af431a1f1 395 high = ( ctx->total[0] >> 29 )
gustavatmel 1:9c5af431a1f1 396 | ( ctx->total[1] << 3 );
gustavatmel 1:9c5af431a1f1 397 low = ( ctx->total[0] << 3 );
gustavatmel 1:9c5af431a1f1 398
gustavatmel 1:9c5af431a1f1 399 PUT_UINT32_LE( low, msglen, 0 );
gustavatmel 1:9c5af431a1f1 400 PUT_UINT32_LE( high, msglen, 4 );
gustavatmel 1:9c5af431a1f1 401
gustavatmel 1:9c5af431a1f1 402 last = ctx->total[0] & 0x3F;
gustavatmel 1:9c5af431a1f1 403 padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
gustavatmel 1:9c5af431a1f1 404
gustavatmel 1:9c5af431a1f1 405 ret = mbedtls_ripemd160_update_ret( ctx, ripemd160_padding, padn );
gustavatmel 1:9c5af431a1f1 406 if( ret != 0 )
gustavatmel 1:9c5af431a1f1 407 return( ret );
gustavatmel 1:9c5af431a1f1 408
gustavatmel 1:9c5af431a1f1 409 ret = mbedtls_ripemd160_update_ret( ctx, msglen, 8 );
gustavatmel 1:9c5af431a1f1 410 if( ret != 0 )
gustavatmel 1:9c5af431a1f1 411 return( ret );
gustavatmel 1:9c5af431a1f1 412
gustavatmel 1:9c5af431a1f1 413 PUT_UINT32_LE( ctx->state[0], output, 0 );
gustavatmel 1:9c5af431a1f1 414 PUT_UINT32_LE( ctx->state[1], output, 4 );
gustavatmel 1:9c5af431a1f1 415 PUT_UINT32_LE( ctx->state[2], output, 8 );
gustavatmel 1:9c5af431a1f1 416 PUT_UINT32_LE( ctx->state[3], output, 12 );
gustavatmel 1:9c5af431a1f1 417 PUT_UINT32_LE( ctx->state[4], output, 16 );
gustavatmel 1:9c5af431a1f1 418
gustavatmel 1:9c5af431a1f1 419 return( 0 );
gustavatmel 1:9c5af431a1f1 420 }
gustavatmel 1:9c5af431a1f1 421
gustavatmel 1:9c5af431a1f1 422 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
gustavatmel 1:9c5af431a1f1 423 void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx,
gustavatmel 1:9c5af431a1f1 424 unsigned char output[20] )
gustavatmel 1:9c5af431a1f1 425 {
gustavatmel 1:9c5af431a1f1 426 mbedtls_ripemd160_finish_ret( ctx, output );
gustavatmel 1:9c5af431a1f1 427 }
gustavatmel 1:9c5af431a1f1 428 #endif
gustavatmel 1:9c5af431a1f1 429
gustavatmel 1:9c5af431a1f1 430 #endif /* ! MBEDTLS_RIPEMD160_ALT */
gustavatmel 1:9c5af431a1f1 431
gustavatmel 1:9c5af431a1f1 432 /*
gustavatmel 1:9c5af431a1f1 433 * output = RIPEMD-160( input buffer )
gustavatmel 1:9c5af431a1f1 434 */
gustavatmel 1:9c5af431a1f1 435 int mbedtls_ripemd160_ret( const unsigned char *input,
gustavatmel 1:9c5af431a1f1 436 size_t ilen,
gustavatmel 1:9c5af431a1f1 437 unsigned char output[20] )
gustavatmel 1:9c5af431a1f1 438 {
gustavatmel 1:9c5af431a1f1 439 int ret;
gustavatmel 1:9c5af431a1f1 440 mbedtls_ripemd160_context ctx;
gustavatmel 1:9c5af431a1f1 441
gustavatmel 1:9c5af431a1f1 442 mbedtls_ripemd160_init( &ctx );
gustavatmel 1:9c5af431a1f1 443
gustavatmel 1:9c5af431a1f1 444 if( ( ret = mbedtls_ripemd160_starts_ret( &ctx ) ) != 0 )
gustavatmel 1:9c5af431a1f1 445 goto exit;
gustavatmel 1:9c5af431a1f1 446
gustavatmel 1:9c5af431a1f1 447 if( ( ret = mbedtls_ripemd160_update_ret( &ctx, input, ilen ) ) != 0 )
gustavatmel 1:9c5af431a1f1 448 goto exit;
gustavatmel 1:9c5af431a1f1 449
gustavatmel 1:9c5af431a1f1 450 if( ( ret = mbedtls_ripemd160_finish_ret( &ctx, output ) ) != 0 )
gustavatmel 1:9c5af431a1f1 451 goto exit;
gustavatmel 1:9c5af431a1f1 452
gustavatmel 1:9c5af431a1f1 453 exit:
gustavatmel 1:9c5af431a1f1 454 mbedtls_ripemd160_free( &ctx );
gustavatmel 1:9c5af431a1f1 455
gustavatmel 1:9c5af431a1f1 456 return( ret );
gustavatmel 1:9c5af431a1f1 457 }
gustavatmel 1:9c5af431a1f1 458
gustavatmel 1:9c5af431a1f1 459 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
gustavatmel 1:9c5af431a1f1 460 void mbedtls_ripemd160( const unsigned char *input,
gustavatmel 1:9c5af431a1f1 461 size_t ilen,
gustavatmel 1:9c5af431a1f1 462 unsigned char output[20] )
gustavatmel 1:9c5af431a1f1 463 {
gustavatmel 1:9c5af431a1f1 464 mbedtls_ripemd160_ret( input, ilen, output );
gustavatmel 1:9c5af431a1f1 465 }
gustavatmel 1:9c5af431a1f1 466 #endif
gustavatmel 1:9c5af431a1f1 467
gustavatmel 1:9c5af431a1f1 468 #if defined(MBEDTLS_SELF_TEST)
gustavatmel 1:9c5af431a1f1 469 /*
gustavatmel 1:9c5af431a1f1 470 * Test vectors from the RIPEMD-160 paper and
gustavatmel 1:9c5af431a1f1 471 * http://homes.esat.kuleuven.be/~bosselae/mbedtls_ripemd160.html#HMAC
gustavatmel 1:9c5af431a1f1 472 */
gustavatmel 1:9c5af431a1f1 473 #define TESTS 8
gustavatmel 1:9c5af431a1f1 474 static const unsigned char ripemd160_test_str[TESTS][81] =
gustavatmel 1:9c5af431a1f1 475 {
gustavatmel 1:9c5af431a1f1 476 { "" },
gustavatmel 1:9c5af431a1f1 477 { "a" },
gustavatmel 1:9c5af431a1f1 478 { "abc" },
gustavatmel 1:9c5af431a1f1 479 { "message digest" },
gustavatmel 1:9c5af431a1f1 480 { "abcdefghijklmnopqrstuvwxyz" },
gustavatmel 1:9c5af431a1f1 481 { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
gustavatmel 1:9c5af431a1f1 482 { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" },
gustavatmel 1:9c5af431a1f1 483 { "12345678901234567890123456789012345678901234567890123456789012"
gustavatmel 1:9c5af431a1f1 484 "345678901234567890" },
gustavatmel 1:9c5af431a1f1 485 };
gustavatmel 1:9c5af431a1f1 486
gustavatmel 1:9c5af431a1f1 487 static const size_t ripemd160_test_strlen[TESTS] =
gustavatmel 1:9c5af431a1f1 488 {
gustavatmel 1:9c5af431a1f1 489 0, 1, 3, 14, 26, 56, 62, 80
gustavatmel 1:9c5af431a1f1 490 };
gustavatmel 1:9c5af431a1f1 491
gustavatmel 1:9c5af431a1f1 492 static const unsigned char ripemd160_test_md[TESTS][20] =
gustavatmel 1:9c5af431a1f1 493 {
gustavatmel 1:9c5af431a1f1 494 { 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28,
gustavatmel 1:9c5af431a1f1 495 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 },
gustavatmel 1:9c5af431a1f1 496 { 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae,
gustavatmel 1:9c5af431a1f1 497 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe },
gustavatmel 1:9c5af431a1f1 498 { 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04,
gustavatmel 1:9c5af431a1f1 499 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc },
gustavatmel 1:9c5af431a1f1 500 { 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8,
gustavatmel 1:9c5af431a1f1 501 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 },
gustavatmel 1:9c5af431a1f1 502 { 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb,
gustavatmel 1:9c5af431a1f1 503 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc },
gustavatmel 1:9c5af431a1f1 504 { 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05,
gustavatmel 1:9c5af431a1f1 505 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b },
gustavatmel 1:9c5af431a1f1 506 { 0xb0, 0xe2, 0x0b, 0x6e, 0x31, 0x16, 0x64, 0x02, 0x86, 0xed,
gustavatmel 1:9c5af431a1f1 507 0x3a, 0x87, 0xa5, 0x71, 0x30, 0x79, 0xb2, 0x1f, 0x51, 0x89 },
gustavatmel 1:9c5af431a1f1 508 { 0x9b, 0x75, 0x2e, 0x45, 0x57, 0x3d, 0x4b, 0x39, 0xf4, 0xdb,
gustavatmel 1:9c5af431a1f1 509 0xd3, 0x32, 0x3c, 0xab, 0x82, 0xbf, 0x63, 0x32, 0x6b, 0xfb },
gustavatmel 1:9c5af431a1f1 510 };
gustavatmel 1:9c5af431a1f1 511
gustavatmel 1:9c5af431a1f1 512 /*
gustavatmel 1:9c5af431a1f1 513 * Checkup routine
gustavatmel 1:9c5af431a1f1 514 */
gustavatmel 1:9c5af431a1f1 515 int mbedtls_ripemd160_self_test( int verbose )
gustavatmel 1:9c5af431a1f1 516 {
gustavatmel 1:9c5af431a1f1 517 int i, ret = 0;
gustavatmel 1:9c5af431a1f1 518 unsigned char output[20];
gustavatmel 1:9c5af431a1f1 519
gustavatmel 1:9c5af431a1f1 520 memset( output, 0, sizeof output );
gustavatmel 1:9c5af431a1f1 521
gustavatmel 1:9c5af431a1f1 522 for( i = 0; i < TESTS; i++ )
gustavatmel 1:9c5af431a1f1 523 {
gustavatmel 1:9c5af431a1f1 524 if( verbose != 0 )
gustavatmel 1:9c5af431a1f1 525 mbedtls_printf( " RIPEMD-160 test #%d: ", i + 1 );
gustavatmel 1:9c5af431a1f1 526
gustavatmel 1:9c5af431a1f1 527 ret = mbedtls_ripemd160_ret( ripemd160_test_str[i],
gustavatmel 1:9c5af431a1f1 528 ripemd160_test_strlen[i], output );
gustavatmel 1:9c5af431a1f1 529 if( ret != 0 )
gustavatmel 1:9c5af431a1f1 530 goto fail;
gustavatmel 1:9c5af431a1f1 531
gustavatmel 1:9c5af431a1f1 532 if( memcmp( output, ripemd160_test_md[i], 20 ) != 0 )
gustavatmel 1:9c5af431a1f1 533 {
gustavatmel 1:9c5af431a1f1 534 ret = 1;
gustavatmel 1:9c5af431a1f1 535 goto fail;
gustavatmel 1:9c5af431a1f1 536 }
gustavatmel 1:9c5af431a1f1 537
gustavatmel 1:9c5af431a1f1 538 if( verbose != 0 )
gustavatmel 1:9c5af431a1f1 539 mbedtls_printf( "passed\n" );
gustavatmel 1:9c5af431a1f1 540 }
gustavatmel 1:9c5af431a1f1 541
gustavatmel 1:9c5af431a1f1 542 if( verbose != 0 )
gustavatmel 1:9c5af431a1f1 543 mbedtls_printf( "\n" );
gustavatmel 1:9c5af431a1f1 544
gustavatmel 1:9c5af431a1f1 545 return( 0 );
gustavatmel 1:9c5af431a1f1 546
gustavatmel 1:9c5af431a1f1 547 fail:
gustavatmel 1:9c5af431a1f1 548 if( verbose != 0 )
gustavatmel 1:9c5af431a1f1 549 mbedtls_printf( "failed\n" );
gustavatmel 1:9c5af431a1f1 550
gustavatmel 1:9c5af431a1f1 551 return( ret );
gustavatmel 1:9c5af431a1f1 552 }
gustavatmel 1:9c5af431a1f1 553
gustavatmel 1:9c5af431a1f1 554 #endif /* MBEDTLS_SELF_TEST */
gustavatmel 1:9c5af431a1f1 555
gustavatmel 1:9c5af431a1f1 556 #endif /* MBEDTLS_RIPEMD160_C */