Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ripemd.c
00001 /* ripemd.c 00002 * 00003 * Copyright (C) 2006-2017 wolfSSL Inc. 00004 * 00005 * This file is part of wolfSSL. 00006 * 00007 * wolfSSL is free software; you can redistribute it and/or modify 00008 * it under the terms of the GNU General Public License as published by 00009 * the Free Software Foundation; either version 2 of the License, or 00010 * (at your option) any later version. 00011 * 00012 * wolfSSL is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 00020 */ 00021 00022 00023 00024 #ifdef HAVE_CONFIG_H 00025 #include <config.h> 00026 #endif 00027 00028 #include <wolfcrypt/settings.h> 00029 00030 #ifdef WOLFSSL_RIPEMD 00031 00032 #include <wolfcrypt/ripemd.h> 00033 #ifdef NO_INLINE 00034 #include <wolfcrypt/misc.h> 00035 #else 00036 #define WOLFSSL_MISC_INCLUDED 00037 #include <wolfcrypt/src/misc.c> 00038 #endif 00039 00040 #include <wolfcrypt/error-crypt.h> 00041 00042 int wc_InitRipeMd(RipeMd* ripemd) 00043 { 00044 if (ripemd == NULL) { 00045 return BAD_FUNC_ARG; 00046 } 00047 00048 ripemd->digest[0] = 0x67452301L; 00049 ripemd->digest[1] = 0xEFCDAB89L; 00050 ripemd->digest[2] = 0x98BADCFEL; 00051 ripemd->digest[3] = 0x10325476L; 00052 ripemd->digest[4] = 0xC3D2E1F0L; 00053 00054 ripemd->buffLen = 0; 00055 ripemd->loLen = 0; 00056 ripemd->hiLen = 0; 00057 00058 return 0; 00059 } 00060 00061 00062 /* for all */ 00063 #define F(x, y, z) (x ^ y ^ z) 00064 #define G(x, y, z) (z ^ (x & (y^z))) 00065 #define H(x, y, z) (z ^ (x | ~y)) 00066 #define I(x, y, z) (y ^ (z & (x^y))) 00067 #define J(x, y, z) (x ^ (y | ~z)) 00068 00069 #define k0 0 00070 #define k1 0x5a827999 00071 #define k2 0x6ed9eba1 00072 #define k3 0x8f1bbcdc 00073 #define k4 0xa953fd4e 00074 #define k5 0x50a28be6 00075 #define k6 0x5c4dd124 00076 #define k7 0x6d703ef3 00077 #define k8 0x7a6d76e9 00078 #define k9 0 00079 00080 /* for 160 and 320 */ 00081 #define Subround(f, a, b, c, d, e, x, s, k) \ 00082 a += f(b, c, d) + x + k;\ 00083 a = rotlFixed((word32)a, s) + e;\ 00084 c = rotlFixed((word32)c, 10U) 00085 00086 static void Transform(RipeMd* ripemd) 00087 { 00088 word32 a1, b1, c1, d1, e1, a2, b2, c2, d2, e2; 00089 a1 = a2 = ripemd->digest[0]; 00090 b1 = b2 = ripemd->digest[1]; 00091 c1 = c2 = ripemd->digest[2]; 00092 d1 = d2 = ripemd->digest[3]; 00093 e1 = e2 = ripemd->digest[4]; 00094 00095 Subround(F, a1, b1, c1, d1, e1, ripemd->buffer[ 0], 11, k0); 00096 Subround(F, e1, a1, b1, c1, d1, ripemd->buffer[ 1], 14, k0); 00097 Subround(F, d1, e1, a1, b1, c1, ripemd->buffer[ 2], 15, k0); 00098 Subround(F, c1, d1, e1, a1, b1, ripemd->buffer[ 3], 12, k0); 00099 Subround(F, b1, c1, d1, e1, a1, ripemd->buffer[ 4], 5, k0); 00100 Subround(F, a1, b1, c1, d1, e1, ripemd->buffer[ 5], 8, k0); 00101 Subround(F, e1, a1, b1, c1, d1, ripemd->buffer[ 6], 7, k0); 00102 Subround(F, d1, e1, a1, b1, c1, ripemd->buffer[ 7], 9, k0); 00103 Subround(F, c1, d1, e1, a1, b1, ripemd->buffer[ 8], 11, k0); 00104 Subround(F, b1, c1, d1, e1, a1, ripemd->buffer[ 9], 13, k0); 00105 Subround(F, a1, b1, c1, d1, e1, ripemd->buffer[10], 14, k0); 00106 Subround(F, e1, a1, b1, c1, d1, ripemd->buffer[11], 15, k0); 00107 Subround(F, d1, e1, a1, b1, c1, ripemd->buffer[12], 6, k0); 00108 Subround(F, c1, d1, e1, a1, b1, ripemd->buffer[13], 7, k0); 00109 Subround(F, b1, c1, d1, e1, a1, ripemd->buffer[14], 9, k0); 00110 Subround(F, a1, b1, c1, d1, e1, ripemd->buffer[15], 8, k0); 00111 00112 Subround(G, e1, a1, b1, c1, d1, ripemd->buffer[ 7], 7, k1); 00113 Subround(G, d1, e1, a1, b1, c1, ripemd->buffer[ 4], 6, k1); 00114 Subround(G, c1, d1, e1, a1, b1, ripemd->buffer[13], 8, k1); 00115 Subround(G, b1, c1, d1, e1, a1, ripemd->buffer[ 1], 13, k1); 00116 Subround(G, a1, b1, c1, d1, e1, ripemd->buffer[10], 11, k1); 00117 Subround(G, e1, a1, b1, c1, d1, ripemd->buffer[ 6], 9, k1); 00118 Subround(G, d1, e1, a1, b1, c1, ripemd->buffer[15], 7, k1); 00119 Subround(G, c1, d1, e1, a1, b1, ripemd->buffer[ 3], 15, k1); 00120 Subround(G, b1, c1, d1, e1, a1, ripemd->buffer[12], 7, k1); 00121 Subround(G, a1, b1, c1, d1, e1, ripemd->buffer[ 0], 12, k1); 00122 Subround(G, e1, a1, b1, c1, d1, ripemd->buffer[ 9], 15, k1); 00123 Subround(G, d1, e1, a1, b1, c1, ripemd->buffer[ 5], 9, k1); 00124 Subround(G, c1, d1, e1, a1, b1, ripemd->buffer[ 2], 11, k1); 00125 Subround(G, b1, c1, d1, e1, a1, ripemd->buffer[14], 7, k1); 00126 Subround(G, a1, b1, c1, d1, e1, ripemd->buffer[11], 13, k1); 00127 Subround(G, e1, a1, b1, c1, d1, ripemd->buffer[ 8], 12, k1); 00128 00129 Subround(H, d1, e1, a1, b1, c1, ripemd->buffer[ 3], 11, k2); 00130 Subround(H, c1, d1, e1, a1, b1, ripemd->buffer[10], 13, k2); 00131 Subround(H, b1, c1, d1, e1, a1, ripemd->buffer[14], 6, k2); 00132 Subround(H, a1, b1, c1, d1, e1, ripemd->buffer[ 4], 7, k2); 00133 Subround(H, e1, a1, b1, c1, d1, ripemd->buffer[ 9], 14, k2); 00134 Subround(H, d1, e1, a1, b1, c1, ripemd->buffer[15], 9, k2); 00135 Subround(H, c1, d1, e1, a1, b1, ripemd->buffer[ 8], 13, k2); 00136 Subround(H, b1, c1, d1, e1, a1, ripemd->buffer[ 1], 15, k2); 00137 Subround(H, a1, b1, c1, d1, e1, ripemd->buffer[ 2], 14, k2); 00138 Subround(H, e1, a1, b1, c1, d1, ripemd->buffer[ 7], 8, k2); 00139 Subround(H, d1, e1, a1, b1, c1, ripemd->buffer[ 0], 13, k2); 00140 Subround(H, c1, d1, e1, a1, b1, ripemd->buffer[ 6], 6, k2); 00141 Subround(H, b1, c1, d1, e1, a1, ripemd->buffer[13], 5, k2); 00142 Subround(H, a1, b1, c1, d1, e1, ripemd->buffer[11], 12, k2); 00143 Subround(H, e1, a1, b1, c1, d1, ripemd->buffer[ 5], 7, k2); 00144 Subround(H, d1, e1, a1, b1, c1, ripemd->buffer[12], 5, k2); 00145 00146 Subround(I, c1, d1, e1, a1, b1, ripemd->buffer[ 1], 11, k3); 00147 Subround(I, b1, c1, d1, e1, a1, ripemd->buffer[ 9], 12, k3); 00148 Subround(I, a1, b1, c1, d1, e1, ripemd->buffer[11], 14, k3); 00149 Subround(I, e1, a1, b1, c1, d1, ripemd->buffer[10], 15, k3); 00150 Subround(I, d1, e1, a1, b1, c1, ripemd->buffer[ 0], 14, k3); 00151 Subround(I, c1, d1, e1, a1, b1, ripemd->buffer[ 8], 15, k3); 00152 Subround(I, b1, c1, d1, e1, a1, ripemd->buffer[12], 9, k3); 00153 Subround(I, a1, b1, c1, d1, e1, ripemd->buffer[ 4], 8, k3); 00154 Subround(I, e1, a1, b1, c1, d1, ripemd->buffer[13], 9, k3); 00155 Subround(I, d1, e1, a1, b1, c1, ripemd->buffer[ 3], 14, k3); 00156 Subround(I, c1, d1, e1, a1, b1, ripemd->buffer[ 7], 5, k3); 00157 Subround(I, b1, c1, d1, e1, a1, ripemd->buffer[15], 6, k3); 00158 Subround(I, a1, b1, c1, d1, e1, ripemd->buffer[14], 8, k3); 00159 Subround(I, e1, a1, b1, c1, d1, ripemd->buffer[ 5], 6, k3); 00160 Subround(I, d1, e1, a1, b1, c1, ripemd->buffer[ 6], 5, k3); 00161 Subround(I, c1, d1, e1, a1, b1, ripemd->buffer[ 2], 12, k3); 00162 00163 Subround(J, b1, c1, d1, e1, a1, ripemd->buffer[ 4], 9, k4); 00164 Subround(J, a1, b1, c1, d1, e1, ripemd->buffer[ 0], 15, k4); 00165 Subround(J, e1, a1, b1, c1, d1, ripemd->buffer[ 5], 5, k4); 00166 Subround(J, d1, e1, a1, b1, c1, ripemd->buffer[ 9], 11, k4); 00167 Subround(J, c1, d1, e1, a1, b1, ripemd->buffer[ 7], 6, k4); 00168 Subround(J, b1, c1, d1, e1, a1, ripemd->buffer[12], 8, k4); 00169 Subround(J, a1, b1, c1, d1, e1, ripemd->buffer[ 2], 13, k4); 00170 Subround(J, e1, a1, b1, c1, d1, ripemd->buffer[10], 12, k4); 00171 Subround(J, d1, e1, a1, b1, c1, ripemd->buffer[14], 5, k4); 00172 Subround(J, c1, d1, e1, a1, b1, ripemd->buffer[ 1], 12, k4); 00173 Subround(J, b1, c1, d1, e1, a1, ripemd->buffer[ 3], 13, k4); 00174 Subround(J, a1, b1, c1, d1, e1, ripemd->buffer[ 8], 14, k4); 00175 Subround(J, e1, a1, b1, c1, d1, ripemd->buffer[11], 11, k4); 00176 Subround(J, d1, e1, a1, b1, c1, ripemd->buffer[ 6], 8, k4); 00177 Subround(J, c1, d1, e1, a1, b1, ripemd->buffer[15], 5, k4); 00178 Subround(J, b1, c1, d1, e1, a1, ripemd->buffer[13], 6, k4); 00179 00180 Subround(J, a2, b2, c2, d2, e2, ripemd->buffer[ 5], 8, k5); 00181 Subround(J, e2, a2, b2, c2, d2, ripemd->buffer[14], 9, k5); 00182 Subround(J, d2, e2, a2, b2, c2, ripemd->buffer[ 7], 9, k5); 00183 Subround(J, c2, d2, e2, a2, b2, ripemd->buffer[ 0], 11, k5); 00184 Subround(J, b2, c2, d2, e2, a2, ripemd->buffer[ 9], 13, k5); 00185 Subround(J, a2, b2, c2, d2, e2, ripemd->buffer[ 2], 15, k5); 00186 Subround(J, e2, a2, b2, c2, d2, ripemd->buffer[11], 15, k5); 00187 Subround(J, d2, e2, a2, b2, c2, ripemd->buffer[ 4], 5, k5); 00188 Subround(J, c2, d2, e2, a2, b2, ripemd->buffer[13], 7, k5); 00189 Subround(J, b2, c2, d2, e2, a2, ripemd->buffer[ 6], 7, k5); 00190 Subround(J, a2, b2, c2, d2, e2, ripemd->buffer[15], 8, k5); 00191 Subround(J, e2, a2, b2, c2, d2, ripemd->buffer[ 8], 11, k5); 00192 Subround(J, d2, e2, a2, b2, c2, ripemd->buffer[ 1], 14, k5); 00193 Subround(J, c2, d2, e2, a2, b2, ripemd->buffer[10], 14, k5); 00194 Subround(J, b2, c2, d2, e2, a2, ripemd->buffer[ 3], 12, k5); 00195 Subround(J, a2, b2, c2, d2, e2, ripemd->buffer[12], 6, k5); 00196 00197 Subround(I, e2, a2, b2, c2, d2, ripemd->buffer[ 6], 9, k6); 00198 Subround(I, d2, e2, a2, b2, c2, ripemd->buffer[11], 13, k6); 00199 Subround(I, c2, d2, e2, a2, b2, ripemd->buffer[ 3], 15, k6); 00200 Subround(I, b2, c2, d2, e2, a2, ripemd->buffer[ 7], 7, k6); 00201 Subround(I, a2, b2, c2, d2, e2, ripemd->buffer[ 0], 12, k6); 00202 Subround(I, e2, a2, b2, c2, d2, ripemd->buffer[13], 8, k6); 00203 Subround(I, d2, e2, a2, b2, c2, ripemd->buffer[ 5], 9, k6); 00204 Subround(I, c2, d2, e2, a2, b2, ripemd->buffer[10], 11, k6); 00205 Subround(I, b2, c2, d2, e2, a2, ripemd->buffer[14], 7, k6); 00206 Subround(I, a2, b2, c2, d2, e2, ripemd->buffer[15], 7, k6); 00207 Subround(I, e2, a2, b2, c2, d2, ripemd->buffer[ 8], 12, k6); 00208 Subround(I, d2, e2, a2, b2, c2, ripemd->buffer[12], 7, k6); 00209 Subround(I, c2, d2, e2, a2, b2, ripemd->buffer[ 4], 6, k6); 00210 Subround(I, b2, c2, d2, e2, a2, ripemd->buffer[ 9], 15, k6); 00211 Subround(I, a2, b2, c2, d2, e2, ripemd->buffer[ 1], 13, k6); 00212 Subround(I, e2, a2, b2, c2, d2, ripemd->buffer[ 2], 11, k6); 00213 00214 Subround(H, d2, e2, a2, b2, c2, ripemd->buffer[15], 9, k7); 00215 Subround(H, c2, d2, e2, a2, b2, ripemd->buffer[ 5], 7, k7); 00216 Subround(H, b2, c2, d2, e2, a2, ripemd->buffer[ 1], 15, k7); 00217 Subround(H, a2, b2, c2, d2, e2, ripemd->buffer[ 3], 11, k7); 00218 Subround(H, e2, a2, b2, c2, d2, ripemd->buffer[ 7], 8, k7); 00219 Subround(H, d2, e2, a2, b2, c2, ripemd->buffer[14], 6, k7); 00220 Subround(H, c2, d2, e2, a2, b2, ripemd->buffer[ 6], 6, k7); 00221 Subround(H, b2, c2, d2, e2, a2, ripemd->buffer[ 9], 14, k7); 00222 Subround(H, a2, b2, c2, d2, e2, ripemd->buffer[11], 12, k7); 00223 Subround(H, e2, a2, b2, c2, d2, ripemd->buffer[ 8], 13, k7); 00224 Subround(H, d2, e2, a2, b2, c2, ripemd->buffer[12], 5, k7); 00225 Subround(H, c2, d2, e2, a2, b2, ripemd->buffer[ 2], 14, k7); 00226 Subround(H, b2, c2, d2, e2, a2, ripemd->buffer[10], 13, k7); 00227 Subround(H, a2, b2, c2, d2, e2, ripemd->buffer[ 0], 13, k7); 00228 Subround(H, e2, a2, b2, c2, d2, ripemd->buffer[ 4], 7, k7); 00229 Subround(H, d2, e2, a2, b2, c2, ripemd->buffer[13], 5, k7); 00230 00231 Subround(G, c2, d2, e2, a2, b2, ripemd->buffer[ 8], 15, k8); 00232 Subround(G, b2, c2, d2, e2, a2, ripemd->buffer[ 6], 5, k8); 00233 Subround(G, a2, b2, c2, d2, e2, ripemd->buffer[ 4], 8, k8); 00234 Subround(G, e2, a2, b2, c2, d2, ripemd->buffer[ 1], 11, k8); 00235 Subround(G, d2, e2, a2, b2, c2, ripemd->buffer[ 3], 14, k8); 00236 Subround(G, c2, d2, e2, a2, b2, ripemd->buffer[11], 14, k8); 00237 Subround(G, b2, c2, d2, e2, a2, ripemd->buffer[15], 6, k8); 00238 Subround(G, a2, b2, c2, d2, e2, ripemd->buffer[ 0], 14, k8); 00239 Subround(G, e2, a2, b2, c2, d2, ripemd->buffer[ 5], 6, k8); 00240 Subround(G, d2, e2, a2, b2, c2, ripemd->buffer[12], 9, k8); 00241 Subround(G, c2, d2, e2, a2, b2, ripemd->buffer[ 2], 12, k8); 00242 Subround(G, b2, c2, d2, e2, a2, ripemd->buffer[13], 9, k8); 00243 Subround(G, a2, b2, c2, d2, e2, ripemd->buffer[ 9], 12, k8); 00244 Subround(G, e2, a2, b2, c2, d2, ripemd->buffer[ 7], 5, k8); 00245 Subround(G, d2, e2, a2, b2, c2, ripemd->buffer[10], 15, k8); 00246 Subround(G, c2, d2, e2, a2, b2, ripemd->buffer[14], 8, k8); 00247 00248 Subround(F, b2, c2, d2, e2, a2, ripemd->buffer[12], 8, k9); 00249 Subround(F, a2, b2, c2, d2, e2, ripemd->buffer[15], 5, k9); 00250 Subround(F, e2, a2, b2, c2, d2, ripemd->buffer[10], 12, k9); 00251 Subround(F, d2, e2, a2, b2, c2, ripemd->buffer[ 4], 9, k9); 00252 Subround(F, c2, d2, e2, a2, b2, ripemd->buffer[ 1], 12, k9); 00253 Subround(F, b2, c2, d2, e2, a2, ripemd->buffer[ 5], 5, k9); 00254 Subround(F, a2, b2, c2, d2, e2, ripemd->buffer[ 8], 14, k9); 00255 Subround(F, e2, a2, b2, c2, d2, ripemd->buffer[ 7], 6, k9); 00256 Subround(F, d2, e2, a2, b2, c2, ripemd->buffer[ 6], 8, k9); 00257 Subround(F, c2, d2, e2, a2, b2, ripemd->buffer[ 2], 13, k9); 00258 Subround(F, b2, c2, d2, e2, a2, ripemd->buffer[13], 6, k9); 00259 Subround(F, a2, b2, c2, d2, e2, ripemd->buffer[14], 5, k9); 00260 Subround(F, e2, a2, b2, c2, d2, ripemd->buffer[ 0], 15, k9); 00261 Subround(F, d2, e2, a2, b2, c2, ripemd->buffer[ 3], 13, k9); 00262 Subround(F, c2, d2, e2, a2, b2, ripemd->buffer[ 9], 11, k9); 00263 Subround(F, b2, c2, d2, e2, a2, ripemd->buffer[11], 11, k9); 00264 00265 c1 = ripemd->digest[1] + c1 + d2; 00266 ripemd->digest[1] = ripemd->digest[2] + d1 + e2; 00267 ripemd->digest[2] = ripemd->digest[3] + e1 + a2; 00268 ripemd->digest[3] = ripemd->digest[4] + a1 + b2; 00269 ripemd->digest[4] = ripemd->digest[0] + b1 + c2; 00270 ripemd->digest[0] = c1; 00271 } 00272 00273 00274 static WC_INLINE void AddLength(RipeMd* ripemd, word32 len) 00275 { 00276 word32 tmp = ripemd->loLen; 00277 if ( (ripemd->loLen += len) < tmp) 00278 ripemd->hiLen++; /* carry low to high */ 00279 } 00280 00281 00282 int wc_RipeMdUpdate(RipeMd* ripemd, const byte* data, word32 len) 00283 { 00284 /* do block size increments */ 00285 byte* local; 00286 00287 if (ripemd == NULL || (data == NULL && len > 0)) { 00288 return BAD_FUNC_ARG; 00289 } 00290 00291 local = (byte*)ripemd->buffer; 00292 00293 while (len) { 00294 word32 add = min(len, RIPEMD_BLOCK_SIZE - ripemd->buffLen); 00295 XMEMCPY(&local[ripemd->buffLen], data, add); 00296 00297 ripemd->buffLen += add; 00298 data += add; 00299 len -= add; 00300 00301 if (ripemd->buffLen == RIPEMD_BLOCK_SIZE) { 00302 #ifdef BIG_ENDIAN_ORDER 00303 ByteReverseWords(ripemd->buffer, ripemd->buffer, 00304 RIPEMD_BLOCK_SIZE); 00305 #endif 00306 Transform(ripemd); 00307 AddLength(ripemd, RIPEMD_BLOCK_SIZE); 00308 ripemd->buffLen = 0; 00309 } 00310 } 00311 return 0; 00312 } 00313 00314 00315 int wc_RipeMdFinal(RipeMd* ripemd, byte* hash) 00316 { 00317 byte* local; 00318 00319 if (ripemd == NULL || hash == NULL) { 00320 return BAD_FUNC_ARG; 00321 } 00322 00323 local = (byte*)ripemd->buffer; 00324 00325 AddLength(ripemd, ripemd->buffLen); /* before adding pads */ 00326 00327 local[ripemd->buffLen++] = 0x80; /* add 1 */ 00328 00329 /* pad with zeros */ 00330 if (ripemd->buffLen > RIPEMD_PAD_SIZE) { 00331 XMEMSET(&local[ripemd->buffLen], 0, RIPEMD_BLOCK_SIZE - ripemd->buffLen); 00332 ripemd->buffLen += RIPEMD_BLOCK_SIZE - ripemd->buffLen; 00333 00334 #ifdef BIG_ENDIAN_ORDER 00335 ByteReverseWords(ripemd->buffer, ripemd->buffer, RIPEMD_BLOCK_SIZE); 00336 #endif 00337 Transform(ripemd); 00338 ripemd->buffLen = 0; 00339 } 00340 XMEMSET(&local[ripemd->buffLen], 0, RIPEMD_PAD_SIZE - ripemd->buffLen); 00341 00342 /* put lengths in bits */ 00343 ripemd->loLen = ripemd->loLen << 3; 00344 ripemd->hiLen = (ripemd->loLen >> (8*sizeof(ripemd->loLen) - 3)) + 00345 (ripemd->hiLen << 3); 00346 00347 /* store lengths */ 00348 #ifdef BIG_ENDIAN_ORDER 00349 ByteReverseWords(ripemd->buffer, ripemd->buffer, RIPEMD_BLOCK_SIZE); 00350 #endif 00351 /* ! length ordering dependent on digest endian type ! */ 00352 XMEMCPY(&local[RIPEMD_PAD_SIZE], &ripemd->loLen, sizeof(word32)); 00353 XMEMCPY(&local[RIPEMD_PAD_SIZE + sizeof(word32)], &ripemd->hiLen, 00354 sizeof(word32)); 00355 00356 Transform(ripemd); 00357 #ifdef BIG_ENDIAN_ORDER 00358 ByteReverseWords(ripemd->digest, ripemd->digest, RIPEMD_DIGEST_SIZE); 00359 #endif 00360 XMEMCPY(hash, ripemd->digest, RIPEMD_DIGEST_SIZE); 00361 00362 return wc_InitRipeMd(ripemd); /* reset state */ 00363 } 00364 00365 00366 #endif /* WOLFSSL_RIPEMD */ 00367
Generated on Tue Jul 12 2022 16:58:07 by
1.7.2