1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * algorithms in a highly modular and flexible manner. 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works. 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h" 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param rmd128.c 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project RMD128 Hash function 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Implementation of RIPEMD-128 based on the source by Antoon Bosselaers, ESAT-COSIC 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * This source has been radically overhauled to be portable and work within 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * the LibTomCrypt API by Tom St Denis 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIPEMD128 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectconst struct ltc_hash_descriptor rmd128_desc = 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "rmd128", 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 8, 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 16, 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 64, 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* OID */ 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 1, 0, 10118, 3, 0, 50 }, 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 6, 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &rmd128_init, 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &rmd128_process, 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &rmd128_done, 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &rmd128_test, 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project NULL 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}; 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* the four basic functions F(), G() and H() */ 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define F(x, y, z) ((x) ^ (y) ^ (z)) 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define H(x, y, z) (((x) | ~(y)) ^ (z)) 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* the eight basic operations FF() through III() */ 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define FF(a, b, c, d, x, s) \ 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += F((b), (c), (d)) + (x);\ 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define GG(a, b, c, d, x, s) \ 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define HH(a, b, c, d, x, s) \ 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define II(a, b, c, d, x, s) \ 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define FFF(a, b, c, d, x, s) \ 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += F((b), (c), (d)) + (x);\ 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define GGG(a, b, c, d, x, s) \ 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += G((b), (c), (d)) + (x) + 0x6d703ef3UL;\ 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define HHH(a, b, c, d, x, s) \ 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += H((b), (c), (d)) + (x) + 0x5c4dd124UL;\ 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define III(a, b, c, d, x, s) \ 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) += I((b), (c), (d)) + (x) + 0x50a28be6UL;\ 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project (a) = ROLc((a), (s)); 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_CLEAN_STACK 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int _rmd128_compress(hash_state *md, unsigned char *buf) 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int rmd128_compress(hash_state *md, unsigned char *buf) 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong32 aa,bb,cc,dd,aaa,bbb,ccc,ddd,X[16]; 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int i; 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* load words X */ 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (i = 0; i < 16; i++){ 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LOAD32L(X[i], buf + (4 * i)); 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* load state */ 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project aa = aaa = md->rmd128.state[0]; 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project bb = bbb = md->rmd128.state[1]; 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cc = ccc = md->rmd128.state[2]; 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project dd = ddd = md->rmd128.state[3]; 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* round 1 */ 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(aa, bb, cc, dd, X[ 0], 11); 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(dd, aa, bb, cc, X[ 1], 14); 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(cc, dd, aa, bb, X[ 2], 15); 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(bb, cc, dd, aa, X[ 3], 12); 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(aa, bb, cc, dd, X[ 4], 5); 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(dd, aa, bb, cc, X[ 5], 8); 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(cc, dd, aa, bb, X[ 6], 7); 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(bb, cc, dd, aa, X[ 7], 9); 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(aa, bb, cc, dd, X[ 8], 11); 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(dd, aa, bb, cc, X[ 9], 13); 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(cc, dd, aa, bb, X[10], 14); 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(bb, cc, dd, aa, X[11], 15); 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(aa, bb, cc, dd, X[12], 6); 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(dd, aa, bb, cc, X[13], 7); 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(cc, dd, aa, bb, X[14], 9); 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FF(bb, cc, dd, aa, X[15], 8); 120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* round 2 */ 122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(aa, bb, cc, dd, X[ 7], 7); 123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(dd, aa, bb, cc, X[ 4], 6); 124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(cc, dd, aa, bb, X[13], 8); 125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(bb, cc, dd, aa, X[ 1], 13); 126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(aa, bb, cc, dd, X[10], 11); 127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(dd, aa, bb, cc, X[ 6], 9); 128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(cc, dd, aa, bb, X[15], 7); 129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(bb, cc, dd, aa, X[ 3], 15); 130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(aa, bb, cc, dd, X[12], 7); 131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(dd, aa, bb, cc, X[ 0], 12); 132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(cc, dd, aa, bb, X[ 9], 15); 133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(bb, cc, dd, aa, X[ 5], 9); 134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(aa, bb, cc, dd, X[ 2], 11); 135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(dd, aa, bb, cc, X[14], 7); 136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(cc, dd, aa, bb, X[11], 13); 137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GG(bb, cc, dd, aa, X[ 8], 12); 138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* round 3 */ 140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(aa, bb, cc, dd, X[ 3], 11); 141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(dd, aa, bb, cc, X[10], 13); 142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(cc, dd, aa, bb, X[14], 6); 143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(bb, cc, dd, aa, X[ 4], 7); 144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(aa, bb, cc, dd, X[ 9], 14); 145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(dd, aa, bb, cc, X[15], 9); 146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(cc, dd, aa, bb, X[ 8], 13); 147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(bb, cc, dd, aa, X[ 1], 15); 148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(aa, bb, cc, dd, X[ 2], 14); 149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(dd, aa, bb, cc, X[ 7], 8); 150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(cc, dd, aa, bb, X[ 0], 13); 151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(bb, cc, dd, aa, X[ 6], 6); 152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(aa, bb, cc, dd, X[13], 5); 153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(dd, aa, bb, cc, X[11], 12); 154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(cc, dd, aa, bb, X[ 5], 7); 155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HH(bb, cc, dd, aa, X[12], 5); 156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* round 4 */ 158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(aa, bb, cc, dd, X[ 1], 11); 159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(dd, aa, bb, cc, X[ 9], 12); 160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(cc, dd, aa, bb, X[11], 14); 161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(bb, cc, dd, aa, X[10], 15); 162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(aa, bb, cc, dd, X[ 0], 14); 163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(dd, aa, bb, cc, X[ 8], 15); 164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(cc, dd, aa, bb, X[12], 9); 165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(bb, cc, dd, aa, X[ 4], 8); 166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(aa, bb, cc, dd, X[13], 9); 167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(dd, aa, bb, cc, X[ 3], 14); 168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(cc, dd, aa, bb, X[ 7], 5); 169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(bb, cc, dd, aa, X[15], 6); 170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(aa, bb, cc, dd, X[14], 8); 171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(dd, aa, bb, cc, X[ 5], 6); 172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(cc, dd, aa, bb, X[ 6], 5); 173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project II(bb, cc, dd, aa, X[ 2], 12); 174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* parallel round 1 */ 176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(aaa, bbb, ccc, ddd, X[ 5], 8); 177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ddd, aaa, bbb, ccc, X[14], 9); 178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ccc, ddd, aaa, bbb, X[ 7], 9); 179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(bbb, ccc, ddd, aaa, X[ 0], 11); 180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(aaa, bbb, ccc, ddd, X[ 9], 13); 181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ddd, aaa, bbb, ccc, X[ 2], 15); 182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ccc, ddd, aaa, bbb, X[11], 15); 183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(bbb, ccc, ddd, aaa, X[ 4], 5); 184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(aaa, bbb, ccc, ddd, X[13], 7); 185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ddd, aaa, bbb, ccc, X[ 6], 7); 186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ccc, ddd, aaa, bbb, X[15], 8); 187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(bbb, ccc, ddd, aaa, X[ 8], 11); 188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(aaa, bbb, ccc, ddd, X[ 1], 14); 189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ddd, aaa, bbb, ccc, X[10], 14); 190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(ccc, ddd, aaa, bbb, X[ 3], 12); 191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project III(bbb, ccc, ddd, aaa, X[12], 6); 192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* parallel round 2 */ 194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(aaa, bbb, ccc, ddd, X[ 6], 9); 195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ddd, aaa, bbb, ccc, X[11], 13); 196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ccc, ddd, aaa, bbb, X[ 3], 15); 197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(bbb, ccc, ddd, aaa, X[ 7], 7); 198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(aaa, bbb, ccc, ddd, X[ 0], 12); 199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ddd, aaa, bbb, ccc, X[13], 8); 200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ccc, ddd, aaa, bbb, X[ 5], 9); 201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(bbb, ccc, ddd, aaa, X[10], 11); 202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(aaa, bbb, ccc, ddd, X[14], 7); 203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ddd, aaa, bbb, ccc, X[15], 7); 204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ccc, ddd, aaa, bbb, X[ 8], 12); 205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(bbb, ccc, ddd, aaa, X[12], 7); 206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(aaa, bbb, ccc, ddd, X[ 4], 6); 207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ddd, aaa, bbb, ccc, X[ 9], 15); 208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(ccc, ddd, aaa, bbb, X[ 1], 13); 209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project HHH(bbb, ccc, ddd, aaa, X[ 2], 11); 210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* parallel round 3 */ 212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(aaa, bbb, ccc, ddd, X[15], 9); 213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ddd, aaa, bbb, ccc, X[ 5], 7); 214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ccc, ddd, aaa, bbb, X[ 1], 15); 215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(bbb, ccc, ddd, aaa, X[ 3], 11); 216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(aaa, bbb, ccc, ddd, X[ 7], 8); 217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ddd, aaa, bbb, ccc, X[14], 6); 218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ccc, ddd, aaa, bbb, X[ 6], 6); 219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(bbb, ccc, ddd, aaa, X[ 9], 14); 220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(aaa, bbb, ccc, ddd, X[11], 12); 221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ddd, aaa, bbb, ccc, X[ 8], 13); 222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ccc, ddd, aaa, bbb, X[12], 5); 223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(bbb, ccc, ddd, aaa, X[ 2], 14); 224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(aaa, bbb, ccc, ddd, X[10], 13); 225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ddd, aaa, bbb, ccc, X[ 0], 13); 226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(ccc, ddd, aaa, bbb, X[ 4], 7); 227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project GGG(bbb, ccc, ddd, aaa, X[13], 5); 228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* parallel round 4 */ 230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(aaa, bbb, ccc, ddd, X[ 8], 15); 231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ddd, aaa, bbb, ccc, X[ 6], 5); 232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ccc, ddd, aaa, bbb, X[ 4], 8); 233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(bbb, ccc, ddd, aaa, X[ 1], 11); 234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(aaa, bbb, ccc, ddd, X[ 3], 14); 235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ddd, aaa, bbb, ccc, X[11], 14); 236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ccc, ddd, aaa, bbb, X[15], 6); 237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(bbb, ccc, ddd, aaa, X[ 0], 14); 238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(aaa, bbb, ccc, ddd, X[ 5], 6); 239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ddd, aaa, bbb, ccc, X[12], 9); 240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ccc, ddd, aaa, bbb, X[ 2], 12); 241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(bbb, ccc, ddd, aaa, X[13], 9); 242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(aaa, bbb, ccc, ddd, X[ 9], 12); 243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ddd, aaa, bbb, ccc, X[ 7], 5); 244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(ccc, ddd, aaa, bbb, X[10], 15); 245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project FFF(bbb, ccc, ddd, aaa, X[14], 8); 246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* combine results */ 248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ddd += cc + md->rmd128.state[1]; /* final result for MDbuf[0] */ 249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[1] = md->rmd128.state[2] + dd + aaa; 250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[2] = md->rmd128.state[3] + aa + bbb; 251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[3] = md->rmd128.state[0] + bb + ccc; 252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[0] = ddd; 253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_CLEAN_STACK 258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int rmd128_compress(hash_state *md, unsigned char *buf) 259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project err = _rmd128_compress(md, buf); 262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project burn_stack(sizeof(ulong32) * 24 + sizeof(int)); 263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return err; 264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project Initialize the hash state 269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param md The hash state you wish to initialize 270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @return CRYPT_OK if successful 271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint rmd128_init(hash_state * md) 273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(md != NULL); 275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[0] = 0x67452301UL; 276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[1] = 0xefcdab89UL; 277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[2] = 0x98badcfeUL; 278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.state[3] = 0x10325476UL; 279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.curlen = 0; 280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.length = 0; 281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project Process a block of memory though the hash 286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param md The hash state 287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param in The data to hash 288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param inlen The length of the data (octets) 289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @return CRYPT_OK if successful 290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source ProjectHASH_PROCESS(rmd128_process, rmd128_compress, rmd128, 64) 292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project Terminate the hash to get the digest 295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param md The hash state 296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @param out [out] The destination of the hash (16 bytes) 297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @return CRYPT_OK if successful 298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint rmd128_done(hash_state * md, unsigned char *out) 300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int i; 302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(md != NULL); 304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(out != NULL); 305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (md->rmd128.curlen >= sizeof(md->rmd128.buf)) { 307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_INVALID_ARG; 308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* increase the length of the message */ 312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.length += md->rmd128.curlen * 8; 313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* append the '1' bit */ 315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.buf[md->rmd128.curlen++] = (unsigned char)0x80; 316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* if the length is currently above 56 bytes we append zeros 318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * then compress. Then we can fall back to padding zeros and length 319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * encoding like normal. 320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (md->rmd128.curlen > 56) { 322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while (md->rmd128.curlen < 64) { 323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.buf[md->rmd128.curlen++] = (unsigned char)0; 324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rmd128_compress(md, md->rmd128.buf); 326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.curlen = 0; 327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* pad upto 56 bytes of zeroes */ 330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while (md->rmd128.curlen < 56) { 331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project md->rmd128.buf[md->rmd128.curlen++] = (unsigned char)0; 332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* store length */ 335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project STORE64L(md->rmd128.length, md->rmd128.buf+56); 336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rmd128_compress(md, md->rmd128.buf); 337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* copy output */ 339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (i = 0; i < 4; i++) { 340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project STORE32L(md->rmd128.state[i], out+(4*i)); 341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_CLEAN_STACK 343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project zeromem(md, sizeof(hash_state)); 344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** 349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project Self-test the hash 350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled 351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint rmd128_test(void) 353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef LTC_TEST 355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_NOP; 356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static const struct { 358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project char *msg; 359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char md[16]; 360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } tests[] = { 361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { "", 362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 0xcd, 0xf2, 0x62, 0x13, 0xa1, 0x50, 0xdc, 0x3e, 363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0xcb, 0x61, 0x0f, 0x18, 0xf6, 0xb3, 0x8b, 0x46 } 364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project }, 365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { "a", 366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 0x86, 0xbe, 0x7a, 0xfa, 0x33, 0x9d, 0x0f, 0xc7, 367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0xcf, 0xc7, 0x85, 0xe7, 0x2f, 0x57, 0x8d, 0x33 } 368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project }, 369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { "abc", 370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 0xc1, 0x4a, 0x12, 0x19, 0x9c, 0x66, 0xe4, 0xba, 371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x84, 0x63, 0x6b, 0x0f, 0x69, 0x14, 0x4c, 0x77 } 372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project }, 373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { "message digest", 374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 0x9e, 0x32, 0x7b, 0x3d, 0x6e, 0x52, 0x30, 0x62, 375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0xaf, 0xc1, 0x13, 0x2d, 0x7d, 0xf9, 0xd1, 0xb8 } 376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project }, 377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { "abcdefghijklmnopqrstuvwxyz", 378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 0xfd, 0x2a, 0xa6, 0x07, 0xf7, 0x1d, 0xc8, 0xf5, 379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0x10, 0x71, 0x49, 0x22, 0xb3, 0x71, 0x83, 0x4e } 380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project }, 381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 0xd1, 0xe9, 0x59, 0xeb, 0x17, 0x9c, 0x91, 0x1f, 383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 0xae, 0xa4, 0x62, 0x4c, 0x60, 0xc5, 0xc7, 0x02 } 384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project }; 386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int x; 387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char buf[16]; 388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_state md; 389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { 391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rmd128_init(&md); 392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rmd128_process(&md, (unsigned char *)tests[x].msg, strlen(tests[x].msg)); 393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rmd128_done(&md, buf); 394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (XMEMCMP(buf, tests[x].md, 16) != 0) { 395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #if 0 396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf("Failed test %d\n", x); 397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #endif 398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_FAIL_TESTVECTOR; 399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/hashes/rmd128.c,v $ */ 409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.9 $ */ 410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/11/01 09:28:17 $ */ 411