| 
    
       /*
 
     | 
  
  
     | 
    
        Copyright (c) 2003, Dominik Reichl <dominik.reichl@t-online.de>
 
     | 
  
  
     | 
    
        All rights reserved.
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
        LICENSE TERMS
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
        Redistribution and use in source and binary forms, with or without
 
     | 
  
  
     | 
    
        modification, are permitted provided that the following conditions are met:
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
        * Redistributions of source code must retain the above copyright notice, this
 
     | 
  
  
     | 
    
          list of conditions and the following disclaimer.
 
     | 
  
  
     | 
    
        * Redistributions in binary form must reproduce the above copyright notice,
 
     | 
  
  
     | 
    
          this list of conditions and the following disclaimer in the documentation
 
     | 
  
  
     | 
    
          and/or other materials provided with the distribution.
 
     | 
  
  
     | 
    
        * Neither the name of ReichlSoft nor the names of its contributors may be used
 
     | 
  
  
     | 
    
          to endorse or promote products derived from this software without specific
 
     | 
  
  
     | 
    
          prior written permission.
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
        DISCLAIMER
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 
     | 
  
  
     | 
    
        AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
     | 
  
  
     | 
    
        IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
     | 
  
  
     | 
    
        DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
 
     | 
  
  
     | 
    
        FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
     | 
  
  
     | 
    
        DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
     | 
  
  
     | 
    
        SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
     | 
  
  
     | 
    
        CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
     | 
  
  
     | 
    
        OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
     | 
  
  
     | 
    
        OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
     | 
  
  
     | 
    
       */
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       // This free implementation is based on Tom St Denis free implementation, which
 
     | 
  
  
     | 
    
       // is based on the free implementation of Antoon Bosselaers, ESAT-COSIC.
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #include "ripemd.h"
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_F(x, y, z) ((x) ^ (y) ^ (z))
 
     | 
  
  
     | 
    
       #define RMD128_G(x, y, z) (((x) & (y)) | (~(x) & (z)))
 
     | 
  
  
     | 
    
       #define RMD128_H(x, y, z) (((x) | ~(y)) ^ (z))
 
     | 
  
  
     | 
    
       #define RMD128_I(x, y, z) (((x) & (z)) | ((y) & ~(z)))
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_FF(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_F((b), (c), (d)) + (x); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_GG(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_G((b), (c), (d)) + (x) + CONST32(0x5a827999); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_HH(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_H((b), (c), (d)) + (x) + CONST32(0x6ed9eba1); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_II(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_I((b), (c), (d)) + (x) + CONST32(0x8f1bbcdc); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_FFF(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_F((b), (c), (d)) + (x); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_GGG(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_G((b), (c), (d)) + (x) + CONST32(0x6d703ef3); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_HHH(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_H((b), (c), (d)) + (x) + CONST32(0x5c4dd124); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD128_III(a, b, c, d, x, s) \
 
     | 
  
  
     | 
    
       	(a) += RMD128_I((b), (c), (d)) + (x) + CONST32(0x50a28be6); \
 
     | 
  
  
     | 
    
       	(a) = ROL32((a), (s));
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       /////////////////////////////////////////////////////////////////////////////
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_F(x, y, z) ((x) ^ (y) ^ (z))
 
     | 
  
  
     | 
    
       #define RMD160_G(x, y, z) (((x) & (y)) | (~(x) & (z)))
 
     | 
  
  
     | 
    
       #define RMD160_H(x, y, z) (((x) | ~(y)) ^ (z))
 
     | 
  
  
     | 
    
       #define RMD160_I(x, y, z) (((x) & (z)) | ((y) & ~(z)))
 
     | 
  
  
     | 
    
       #define RMD160_J(x, y, z) ((x) ^ ((y) | ~(z)))
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_FF(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_F((b), (c), (d)) + (x);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_GG(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_G((b), (c), (d)) + (x) + CONST32(0x5a827999);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_HH(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_H((b), (c), (d)) + (x) + CONST32(0x6ed9eba1);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_II(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_I((b), (c), (d)) + (x) + CONST32(0x8f1bbcdc);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_JJ(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_J((b), (c), (d)) + (x) + CONST32(0xa953fd4e);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_FFF(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_F((b), (c), (d)) + (x);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_GGG(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_G((b), (c), (d)) + (x) + CONST32(0x7a6d76e9);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_HHH(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_H((b), (c), (d)) + (x) + CONST32(0x6d703ef3);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_III(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_I((b), (c), (d)) + (x) + CONST32(0x5c4dd124);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       #define RMD160_JJJ(a, b, c, d, e, x, s) \
 
     | 
  
  
     | 
    
             (a) += RMD160_J((b), (c), (d)) + (x) + CONST32(0x50a28be6);\
 
     | 
  
  
     | 
    
             (a) = ROL32((a), (s)) + (e); \
 
     | 
  
  
     | 
    
             (c) = ROL32((c), 10);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       /////////////////////////////////////////////////////////////////////////////
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       CRMD128Hash::CRMD128Hash()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       CRMD128Hash::~CRMD128Hash()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD128Hash::_Compress()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	UWORD32 aa, bb, cc, dd, aaa, bbb, ccc, ddd, X[16];
 
     | 
  
  
     | 
    
       	INTPREF i;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	for(i = 0; i < 16; i++)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		LOAD32L(X[i], m_buf + (i << 2));
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	aa = aaa = m_state[0];
 
     | 
  
  
     | 
    
       	bb = bbb = m_state[1];
 
     | 
  
  
     | 
    
       	cc = ccc = m_state[2];
 
     | 
  
  
     | 
    
       	dd = ddd = m_state[3];
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_FF(aa, bb, cc, dd, X[ 0], 11);
 
     | 
  
  
     | 
    
       	RMD128_FF(dd, aa, bb, cc, X[ 1], 14);
 
     | 
  
  
     | 
    
       	RMD128_FF(cc, dd, aa, bb, X[ 2], 15);
 
     | 
  
  
     | 
    
       	RMD128_FF(bb, cc, dd, aa, X[ 3], 12);
 
     | 
  
  
     | 
    
       	RMD128_FF(aa, bb, cc, dd, X[ 4],  5);
 
     | 
  
  
     | 
    
       	RMD128_FF(dd, aa, bb, cc, X[ 5],  8);
 
     | 
  
  
     | 
    
       	RMD128_FF(cc, dd, aa, bb, X[ 6],  7);
 
     | 
  
  
     | 
    
       	RMD128_FF(bb, cc, dd, aa, X[ 7],  9);
 
     | 
  
  
     | 
    
       	RMD128_FF(aa, bb, cc, dd, X[ 8], 11);
 
     | 
  
  
     | 
    
       	RMD128_FF(dd, aa, bb, cc, X[ 9], 13);
 
     | 
  
  
     | 
    
       	RMD128_FF(cc, dd, aa, bb, X[10], 14);
 
     | 
  
  
     | 
    
       	RMD128_FF(bb, cc, dd, aa, X[11], 15);
 
     | 
  
  
     | 
    
       	RMD128_FF(aa, bb, cc, dd, X[12],  6);
 
     | 
  
  
     | 
    
       	RMD128_FF(dd, aa, bb, cc, X[13],  7);
 
     | 
  
  
     | 
    
       	RMD128_FF(cc, dd, aa, bb, X[14],  9);
 
     | 
  
  
     | 
    
       	RMD128_FF(bb, cc, dd, aa, X[15],  8);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_GG(aa, bb, cc, dd, X[ 7],  7);
 
     | 
  
  
     | 
    
       	RMD128_GG(dd, aa, bb, cc, X[ 4],  6);
 
     | 
  
  
     | 
    
       	RMD128_GG(cc, dd, aa, bb, X[13],  8);
 
     | 
  
  
     | 
    
       	RMD128_GG(bb, cc, dd, aa, X[ 1], 13);
 
     | 
  
  
     | 
    
       	RMD128_GG(aa, bb, cc, dd, X[10], 11);
 
     | 
  
  
     | 
    
       	RMD128_GG(dd, aa, bb, cc, X[ 6],  9);
 
     | 
  
  
     | 
    
       	RMD128_GG(cc, dd, aa, bb, X[15],  7);
 
     | 
  
  
     | 
    
       	RMD128_GG(bb, cc, dd, aa, X[ 3], 15);
 
     | 
  
  
     | 
    
       	RMD128_GG(aa, bb, cc, dd, X[12],  7);
 
     | 
  
  
     | 
    
       	RMD128_GG(dd, aa, bb, cc, X[ 0], 12);
 
     | 
  
  
     | 
    
       	RMD128_GG(cc, dd, aa, bb, X[ 9], 15);
 
     | 
  
  
     | 
    
       	RMD128_GG(bb, cc, dd, aa, X[ 5],  9);
 
     | 
  
  
     | 
    
       	RMD128_GG(aa, bb, cc, dd, X[ 2], 11);
 
     | 
  
  
     | 
    
       	RMD128_GG(dd, aa, bb, cc, X[14],  7);
 
     | 
  
  
     | 
    
       	RMD128_GG(cc, dd, aa, bb, X[11], 13);
 
     | 
  
  
     | 
    
       	RMD128_GG(bb, cc, dd, aa, X[ 8], 12);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_HH(aa, bb, cc, dd, X[ 3], 11);
 
     | 
  
  
     | 
    
       	RMD128_HH(dd, aa, bb, cc, X[10], 13);
 
     | 
  
  
     | 
    
       	RMD128_HH(cc, dd, aa, bb, X[14],  6);
 
     | 
  
  
     | 
    
       	RMD128_HH(bb, cc, dd, aa, X[ 4],  7);
 
     | 
  
  
     | 
    
       	RMD128_HH(aa, bb, cc, dd, X[ 9], 14);
 
     | 
  
  
     | 
    
       	RMD128_HH(dd, aa, bb, cc, X[15],  9);
 
     | 
  
  
     | 
    
       	RMD128_HH(cc, dd, aa, bb, X[ 8], 13);
 
     | 
  
  
     | 
    
       	RMD128_HH(bb, cc, dd, aa, X[ 1], 15);
 
     | 
  
  
     | 
    
       	RMD128_HH(aa, bb, cc, dd, X[ 2], 14);
 
     | 
  
  
     | 
    
       	RMD128_HH(dd, aa, bb, cc, X[ 7],  8);
 
     | 
  
  
     | 
    
       	RMD128_HH(cc, dd, aa, bb, X[ 0], 13);
 
     | 
  
  
     | 
    
       	RMD128_HH(bb, cc, dd, aa, X[ 6],  6);
 
     | 
  
  
     | 
    
       	RMD128_HH(aa, bb, cc, dd, X[13],  5);
 
     | 
  
  
     | 
    
       	RMD128_HH(dd, aa, bb, cc, X[11], 12);
 
     | 
  
  
     | 
    
       	RMD128_HH(cc, dd, aa, bb, X[ 5],  7);
 
     | 
  
  
     | 
    
       	RMD128_HH(bb, cc, dd, aa, X[12],  5);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_II(aa, bb, cc, dd, X[ 1], 11);
 
     | 
  
  
     | 
    
       	RMD128_II(dd, aa, bb, cc, X[ 9], 12);
 
     | 
  
  
     | 
    
       	RMD128_II(cc, dd, aa, bb, X[11], 14);
 
     | 
  
  
     | 
    
       	RMD128_II(bb, cc, dd, aa, X[10], 15);
 
     | 
  
  
     | 
    
       	RMD128_II(aa, bb, cc, dd, X[ 0], 14);
 
     | 
  
  
     | 
    
       	RMD128_II(dd, aa, bb, cc, X[ 8], 15);
 
     | 
  
  
     | 
    
       	RMD128_II(cc, dd, aa, bb, X[12],  9);
 
     | 
  
  
     | 
    
       	RMD128_II(bb, cc, dd, aa, X[ 4],  8);
 
     | 
  
  
     | 
    
       	RMD128_II(aa, bb, cc, dd, X[13],  9);
 
     | 
  
  
     | 
    
       	RMD128_II(dd, aa, bb, cc, X[ 3], 14);
 
     | 
  
  
     | 
    
       	RMD128_II(cc, dd, aa, bb, X[ 7],  5);
 
     | 
  
  
     | 
    
       	RMD128_II(bb, cc, dd, aa, X[15],  6);
 
     | 
  
  
     | 
    
       	RMD128_II(aa, bb, cc, dd, X[14],  8);
 
     | 
  
  
     | 
    
       	RMD128_II(dd, aa, bb, cc, X[ 5],  6);
 
     | 
  
  
     | 
    
       	RMD128_II(cc, dd, aa, bb, X[ 6],  5);
 
     | 
  
  
     | 
    
       	RMD128_II(bb, cc, dd, aa, X[ 2], 12);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_III(aaa, bbb, ccc, ddd, X[ 5],  8);
 
     | 
  
  
     | 
    
       	RMD128_III(ddd, aaa, bbb, ccc, X[14],  9);
 
     | 
  
  
     | 
    
       	RMD128_III(ccc, ddd, aaa, bbb, X[ 7],  9);
 
     | 
  
  
     | 
    
       	RMD128_III(bbb, ccc, ddd, aaa, X[ 0], 11);
 
     | 
  
  
     | 
    
       	RMD128_III(aaa, bbb, ccc, ddd, X[ 9], 13);
 
     | 
  
  
     | 
    
       	RMD128_III(ddd, aaa, bbb, ccc, X[ 2], 15);
 
     | 
  
  
     | 
    
       	RMD128_III(ccc, ddd, aaa, bbb, X[11], 15);
 
     | 
  
  
     | 
    
       	RMD128_III(bbb, ccc, ddd, aaa, X[ 4],  5);
 
     | 
  
  
     | 
    
       	RMD128_III(aaa, bbb, ccc, ddd, X[13],  7);
 
     | 
  
  
     | 
    
       	RMD128_III(ddd, aaa, bbb, ccc, X[ 6],  7);
 
     | 
  
  
     | 
    
       	RMD128_III(ccc, ddd, aaa, bbb, X[15],  8);
 
     | 
  
  
     | 
    
       	RMD128_III(bbb, ccc, ddd, aaa, X[ 8], 11);
 
     | 
  
  
     | 
    
       	RMD128_III(aaa, bbb, ccc, ddd, X[ 1], 14);
 
     | 
  
  
     | 
    
       	RMD128_III(ddd, aaa, bbb, ccc, X[10], 14);
 
     | 
  
  
     | 
    
       	RMD128_III(ccc, ddd, aaa, bbb, X[ 3], 12);
 
     | 
  
  
     | 
    
       	RMD128_III(bbb, ccc, ddd, aaa, X[12],  6);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_HHH(aaa, bbb, ccc, ddd, X[ 6],  9);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ddd, aaa, bbb, ccc, X[11], 13);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ccc, ddd, aaa, bbb, X[ 3], 15);
 
     | 
  
  
     | 
    
       	RMD128_HHH(bbb, ccc, ddd, aaa, X[ 7],  7);
 
     | 
  
  
     | 
    
       	RMD128_HHH(aaa, bbb, ccc, ddd, X[ 0], 12);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ddd, aaa, bbb, ccc, X[13],  8);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ccc, ddd, aaa, bbb, X[ 5],  9);
 
     | 
  
  
     | 
    
       	RMD128_HHH(bbb, ccc, ddd, aaa, X[10], 11);
 
     | 
  
  
     | 
    
       	RMD128_HHH(aaa, bbb, ccc, ddd, X[14],  7);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ddd, aaa, bbb, ccc, X[15],  7);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ccc, ddd, aaa, bbb, X[ 8], 12);
 
     | 
  
  
     | 
    
       	RMD128_HHH(bbb, ccc, ddd, aaa, X[12],  7);
 
     | 
  
  
     | 
    
       	RMD128_HHH(aaa, bbb, ccc, ddd, X[ 4],  6);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ddd, aaa, bbb, ccc, X[ 9], 15);
 
     | 
  
  
     | 
    
       	RMD128_HHH(ccc, ddd, aaa, bbb, X[ 1], 13);
 
     | 
  
  
     | 
    
       	RMD128_HHH(bbb, ccc, ddd, aaa, X[ 2], 11);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_GGG(aaa, bbb, ccc, ddd, X[15],  9);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ddd, aaa, bbb, ccc, X[ 5],  7);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ccc, ddd, aaa, bbb, X[ 1], 15);
 
     | 
  
  
     | 
    
       	RMD128_GGG(bbb, ccc, ddd, aaa, X[ 3], 11);
 
     | 
  
  
     | 
    
       	RMD128_GGG(aaa, bbb, ccc, ddd, X[ 7],  8);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ddd, aaa, bbb, ccc, X[14],  6);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ccc, ddd, aaa, bbb, X[ 6],  6);
 
     | 
  
  
     | 
    
       	RMD128_GGG(bbb, ccc, ddd, aaa, X[ 9], 14);
 
     | 
  
  
     | 
    
       	RMD128_GGG(aaa, bbb, ccc, ddd, X[11], 12);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ddd, aaa, bbb, ccc, X[ 8], 13);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ccc, ddd, aaa, bbb, X[12],  5);
 
     | 
  
  
     | 
    
       	RMD128_GGG(bbb, ccc, ddd, aaa, X[ 2], 14);
 
     | 
  
  
     | 
    
       	RMD128_GGG(aaa, bbb, ccc, ddd, X[10], 13);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ddd, aaa, bbb, ccc, X[ 0], 13);
 
     | 
  
  
     | 
    
       	RMD128_GGG(ccc, ddd, aaa, bbb, X[ 4],  7);
 
     | 
  
  
     | 
    
       	RMD128_GGG(bbb, ccc, ddd, aaa, X[13],  5);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD128_FFF(aaa, bbb, ccc, ddd, X[ 8], 15);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ddd, aaa, bbb, ccc, X[ 6],  5);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ccc, ddd, aaa, bbb, X[ 4],  8);
 
     | 
  
  
     | 
    
       	RMD128_FFF(bbb, ccc, ddd, aaa, X[ 1], 11);
 
     | 
  
  
     | 
    
       	RMD128_FFF(aaa, bbb, ccc, ddd, X[ 3], 14);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ddd, aaa, bbb, ccc, X[11], 14);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ccc, ddd, aaa, bbb, X[15],  6);
 
     | 
  
  
     | 
    
       	RMD128_FFF(bbb, ccc, ddd, aaa, X[ 0], 14);
 
     | 
  
  
     | 
    
       	RMD128_FFF(aaa, bbb, ccc, ddd, X[ 5],  6);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ddd, aaa, bbb, ccc, X[12],  9);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ccc, ddd, aaa, bbb, X[ 2], 12);
 
     | 
  
  
     | 
    
       	RMD128_FFF(bbb, ccc, ddd, aaa, X[13],  9);
 
     | 
  
  
     | 
    
       	RMD128_FFF(aaa, bbb, ccc, ddd, X[ 9], 12);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ddd, aaa, bbb, ccc, X[ 7],  5);
 
     | 
  
  
     | 
    
       	RMD128_FFF(ccc, ddd, aaa, bbb, X[10], 15);
 
     | 
  
  
     | 
    
       	RMD128_FFF(bbb, ccc, ddd, aaa, X[14],  8);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	ddd += cc + m_state[1];
 
     | 
  
  
     | 
    
       	m_state[1] = m_state[2] + dd + aaa;
 
     | 
  
  
     | 
    
       	m_state[2] = m_state[3] + aa + bbb;
 
     | 
  
  
     | 
    
       	m_state[3] = m_state[0] + bb + ccc;
 
     | 
  
  
     | 
    
       	m_state[0] = ddd;
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD128Hash::Init(RH_DATA_INFO *pInfo)
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	m_state[0] = CONST32(0x67452301);
 
     | 
  
  
     | 
    
       	m_state[1] = CONST32(0xefcdab89);
 
     | 
  
  
     | 
    
       	m_state[2] = CONST32(0x98badcfe);
 
     | 
  
  
     | 
    
       	m_state[3] = CONST32(0x10325476);
 
     | 
  
  
     | 
    
       	m_curlen = 0;
 
     | 
  
  
     | 
    
       	m_length = 0;
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD128Hash::Update(const UWORD8 *pBuf, UINTPREF uLen)
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	UINTPREF n;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	while(uLen > 0)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		n = min(uLen, (64 - m_curlen));
 
     | 
  
  
     | 
    
       		memcpy(m_buf + m_curlen, pBuf, n);
 
     | 
  
  
     | 
    
       		m_curlen += n;
 
     | 
  
  
     | 
    
       		pBuf += n;
 
     | 
  
  
     | 
    
       		uLen -= n;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       		if(m_curlen == 64)
 
     | 
  
  
     | 
    
       		{
 
     | 
  
  
     | 
    
       			_Compress();
 
     | 
  
  
     | 
    
       			m_length += 512;
 
     | 
  
  
     | 
    
       			m_curlen = 0;
 
     | 
  
  
     | 
    
       		}
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD128Hash::Final()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	INTPREF i;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	m_length += m_curlen * 8;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	m_buf[m_curlen++] = 0x80;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	if(m_curlen > 56)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		while(m_curlen < 64)
 
     | 
  
  
     | 
    
       		{
 
     | 
  
  
     | 
    
       			m_buf[m_curlen++] = 0;
 
     | 
  
  
     | 
    
       		}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       		_Compress();
 
     | 
  
  
     | 
    
       		m_curlen = 0;
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	while(m_curlen < 56)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		m_buf[m_curlen++] = 0;
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	STORE64L(m_length, m_buf + 56);
 
     | 
  
  
     | 
    
       	_Compress();
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	for(i = 0; i < 4; i++)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		STORE32L(m_state[i], m_final + (i << 2));
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       /////////////////////////////////////////////////////////////////////////////
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       CRMD160Hash::CRMD160Hash()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       CRMD160Hash::~CRMD160Hash()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD160Hash::_Compress()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	UWORD32 aa, bb, cc, dd, ee, aaa, bbb, ccc, ddd, eee, X[16];
 
     | 
  
  
     | 
    
       	INTPREF i;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	for(i = 0; i < 16; i++)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		LOAD32L(X[i], m_buf + (i << 2));
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	aa = aaa = m_state[0];
 
     | 
  
  
     | 
    
       	bb = bbb = m_state[1];
 
     | 
  
  
     | 
    
       	cc = ccc = m_state[2];
 
     | 
  
  
     | 
    
       	dd = ddd = m_state[3];
 
     | 
  
  
     | 
    
       	ee = eee = m_state[4];
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_FF(aa, bb, cc, dd, ee, X[ 0], 11);
 
     | 
  
  
     | 
    
       	RMD160_FF(ee, aa, bb, cc, dd, X[ 1], 14);
 
     | 
  
  
     | 
    
       	RMD160_FF(dd, ee, aa, bb, cc, X[ 2], 15);
 
     | 
  
  
     | 
    
       	RMD160_FF(cc, dd, ee, aa, bb, X[ 3], 12);
 
     | 
  
  
     | 
    
       	RMD160_FF(bb, cc, dd, ee, aa, X[ 4],  5);
 
     | 
  
  
     | 
    
       	RMD160_FF(aa, bb, cc, dd, ee, X[ 5],  8);
 
     | 
  
  
     | 
    
       	RMD160_FF(ee, aa, bb, cc, dd, X[ 6],  7);
 
     | 
  
  
     | 
    
       	RMD160_FF(dd, ee, aa, bb, cc, X[ 7],  9);
 
     | 
  
  
     | 
    
       	RMD160_FF(cc, dd, ee, aa, bb, X[ 8], 11);
 
     | 
  
  
     | 
    
       	RMD160_FF(bb, cc, dd, ee, aa, X[ 9], 13);
 
     | 
  
  
     | 
    
       	RMD160_FF(aa, bb, cc, dd, ee, X[10], 14);
 
     | 
  
  
     | 
    
       	RMD160_FF(ee, aa, bb, cc, dd, X[11], 15);
 
     | 
  
  
     | 
    
       	RMD160_FF(dd, ee, aa, bb, cc, X[12],  6);
 
     | 
  
  
     | 
    
       	RMD160_FF(cc, dd, ee, aa, bb, X[13],  7);
 
     | 
  
  
     | 
    
       	RMD160_FF(bb, cc, dd, ee, aa, X[14],  9);
 
     | 
  
  
     | 
    
       	RMD160_FF(aa, bb, cc, dd, ee, X[15],  8);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_GG(ee, aa, bb, cc, dd, X[ 7],  7);
 
     | 
  
  
     | 
    
       	RMD160_GG(dd, ee, aa, bb, cc, X[ 4],  6);
 
     | 
  
  
     | 
    
       	RMD160_GG(cc, dd, ee, aa, bb, X[13],  8);
 
     | 
  
  
     | 
    
       	RMD160_GG(bb, cc, dd, ee, aa, X[ 1], 13);
 
     | 
  
  
     | 
    
       	RMD160_GG(aa, bb, cc, dd, ee, X[10], 11);
 
     | 
  
  
     | 
    
       	RMD160_GG(ee, aa, bb, cc, dd, X[ 6],  9);
 
     | 
  
  
     | 
    
       	RMD160_GG(dd, ee, aa, bb, cc, X[15],  7);
 
     | 
  
  
     | 
    
       	RMD160_GG(cc, dd, ee, aa, bb, X[ 3], 15);
 
     | 
  
  
     | 
    
       	RMD160_GG(bb, cc, dd, ee, aa, X[12],  7);
 
     | 
  
  
     | 
    
       	RMD160_GG(aa, bb, cc, dd, ee, X[ 0], 12);
 
     | 
  
  
     | 
    
       	RMD160_GG(ee, aa, bb, cc, dd, X[ 9], 15);
 
     | 
  
  
     | 
    
       	RMD160_GG(dd, ee, aa, bb, cc, X[ 5],  9);
 
     | 
  
  
     | 
    
       	RMD160_GG(cc, dd, ee, aa, bb, X[ 2], 11);
 
     | 
  
  
     | 
    
       	RMD160_GG(bb, cc, dd, ee, aa, X[14],  7);
 
     | 
  
  
     | 
    
       	RMD160_GG(aa, bb, cc, dd, ee, X[11], 13);
 
     | 
  
  
     | 
    
       	RMD160_GG(ee, aa, bb, cc, dd, X[ 8], 12);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_HH(dd, ee, aa, bb, cc, X[ 3], 11);
 
     | 
  
  
     | 
    
       	RMD160_HH(cc, dd, ee, aa, bb, X[10], 13);
 
     | 
  
  
     | 
    
       	RMD160_HH(bb, cc, dd, ee, aa, X[14],  6);
 
     | 
  
  
     | 
    
       	RMD160_HH(aa, bb, cc, dd, ee, X[ 4],  7);
 
     | 
  
  
     | 
    
       	RMD160_HH(ee, aa, bb, cc, dd, X[ 9], 14);
 
     | 
  
  
     | 
    
       	RMD160_HH(dd, ee, aa, bb, cc, X[15],  9);
 
     | 
  
  
     | 
    
       	RMD160_HH(cc, dd, ee, aa, bb, X[ 8], 13);
 
     | 
  
  
     | 
    
       	RMD160_HH(bb, cc, dd, ee, aa, X[ 1], 15);
 
     | 
  
  
     | 
    
       	RMD160_HH(aa, bb, cc, dd, ee, X[ 2], 14);
 
     | 
  
  
     | 
    
       	RMD160_HH(ee, aa, bb, cc, dd, X[ 7],  8);
 
     | 
  
  
     | 
    
       	RMD160_HH(dd, ee, aa, bb, cc, X[ 0], 13);
 
     | 
  
  
     | 
    
       	RMD160_HH(cc, dd, ee, aa, bb, X[ 6],  6);
 
     | 
  
  
     | 
    
       	RMD160_HH(bb, cc, dd, ee, aa, X[13],  5);
 
     | 
  
  
     | 
    
       	RMD160_HH(aa, bb, cc, dd, ee, X[11], 12);
 
     | 
  
  
     | 
    
       	RMD160_HH(ee, aa, bb, cc, dd, X[ 5],  7);
 
     | 
  
  
     | 
    
       	RMD160_HH(dd, ee, aa, bb, cc, X[12],  5);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_II(cc, dd, ee, aa, bb, X[ 1], 11);
 
     | 
  
  
     | 
    
       	RMD160_II(bb, cc, dd, ee, aa, X[ 9], 12);
 
     | 
  
  
     | 
    
       	RMD160_II(aa, bb, cc, dd, ee, X[11], 14);
 
     | 
  
  
     | 
    
       	RMD160_II(ee, aa, bb, cc, dd, X[10], 15);
 
     | 
  
  
     | 
    
       	RMD160_II(dd, ee, aa, bb, cc, X[ 0], 14);
 
     | 
  
  
     | 
    
       	RMD160_II(cc, dd, ee, aa, bb, X[ 8], 15);
 
     | 
  
  
     | 
    
       	RMD160_II(bb, cc, dd, ee, aa, X[12],  9);
 
     | 
  
  
     | 
    
       	RMD160_II(aa, bb, cc, dd, ee, X[ 4],  8);
 
     | 
  
  
     | 
    
       	RMD160_II(ee, aa, bb, cc, dd, X[13],  9);
 
     | 
  
  
     | 
    
       	RMD160_II(dd, ee, aa, bb, cc, X[ 3], 14);
 
     | 
  
  
     | 
    
       	RMD160_II(cc, dd, ee, aa, bb, X[ 7],  5);
 
     | 
  
  
     | 
    
       	RMD160_II(bb, cc, dd, ee, aa, X[15],  6);
 
     | 
  
  
     | 
    
       	RMD160_II(aa, bb, cc, dd, ee, X[14],  8);
 
     | 
  
  
     | 
    
       	RMD160_II(ee, aa, bb, cc, dd, X[ 5],  6);
 
     | 
  
  
     | 
    
       	RMD160_II(dd, ee, aa, bb, cc, X[ 6],  5);
 
     | 
  
  
     | 
    
       	RMD160_II(cc, dd, ee, aa, bb, X[ 2], 12);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_JJ(bb, cc, dd, ee, aa, X[ 4],  9);
 
     | 
  
  
     | 
    
       	RMD160_JJ(aa, bb, cc, dd, ee, X[ 0], 15);
 
     | 
  
  
     | 
    
       	RMD160_JJ(ee, aa, bb, cc, dd, X[ 5],  5);
 
     | 
  
  
     | 
    
       	RMD160_JJ(dd, ee, aa, bb, cc, X[ 9], 11);
 
     | 
  
  
     | 
    
       	RMD160_JJ(cc, dd, ee, aa, bb, X[ 7],  6);
 
     | 
  
  
     | 
    
       	RMD160_JJ(bb, cc, dd, ee, aa, X[12],  8);
 
     | 
  
  
     | 
    
       	RMD160_JJ(aa, bb, cc, dd, ee, X[ 2], 13);
 
     | 
  
  
     | 
    
       	RMD160_JJ(ee, aa, bb, cc, dd, X[10], 12);
 
     | 
  
  
     | 
    
       	RMD160_JJ(dd, ee, aa, bb, cc, X[14],  5);
 
     | 
  
  
     | 
    
       	RMD160_JJ(cc, dd, ee, aa, bb, X[ 1], 12);
 
     | 
  
  
     | 
    
       	RMD160_JJ(bb, cc, dd, ee, aa, X[ 3], 13);
 
     | 
  
  
     | 
    
       	RMD160_JJ(aa, bb, cc, dd, ee, X[ 8], 14);
 
     | 
  
  
     | 
    
       	RMD160_JJ(ee, aa, bb, cc, dd, X[11], 11);
 
     | 
  
  
     | 
    
       	RMD160_JJ(dd, ee, aa, bb, cc, X[ 6],  8);
 
     | 
  
  
     | 
    
       	RMD160_JJ(cc, dd, ee, aa, bb, X[15],  5);
 
     | 
  
  
     | 
    
       	RMD160_JJ(bb, cc, dd, ee, aa, X[13],  6);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_JJJ(aaa, bbb, ccc, ddd, eee, X[ 5],  8);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(eee, aaa, bbb, ccc, ddd, X[14],  9);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(ddd, eee, aaa, bbb, ccc, X[ 7],  9);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(ccc, ddd, eee, aaa, bbb, X[ 0], 11);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(bbb, ccc, ddd, eee, aaa, X[ 9], 13);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(aaa, bbb, ccc, ddd, eee, X[ 2], 15);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(ddd, eee, aaa, bbb, ccc, X[ 4],  5);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(ccc, ddd, eee, aaa, bbb, X[13],  7);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(bbb, ccc, ddd, eee, aaa, X[ 6],  7);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(aaa, bbb, ccc, ddd, eee, X[15],  8);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(eee, aaa, bbb, ccc, ddd, X[ 8], 11);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(ddd, eee, aaa, bbb, ccc, X[ 1], 14);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(bbb, ccc, ddd, eee, aaa, X[ 3], 12);
 
     | 
  
  
     | 
    
       	RMD160_JJJ(aaa, bbb, ccc, ddd, eee, X[12],  6);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_III(eee, aaa, bbb, ccc, ddd, X[ 6],  9);
 
     | 
  
  
     | 
    
       	RMD160_III(ddd, eee, aaa, bbb, ccc, X[11], 13);
 
     | 
  
  
     | 
    
       	RMD160_III(ccc, ddd, eee, aaa, bbb, X[ 3], 15);
 
     | 
  
  
     | 
    
       	RMD160_III(bbb, ccc, ddd, eee, aaa, X[ 7],  7);
 
     | 
  
  
     | 
    
       	RMD160_III(aaa, bbb, ccc, ddd, eee, X[ 0], 12);
 
     | 
  
  
     | 
    
       	RMD160_III(eee, aaa, bbb, ccc, ddd, X[13],  8);
 
     | 
  
  
     | 
    
       	RMD160_III(ddd, eee, aaa, bbb, ccc, X[ 5],  9);
 
     | 
  
  
     | 
    
       	RMD160_III(ccc, ddd, eee, aaa, bbb, X[10], 11);
 
     | 
  
  
     | 
    
       	RMD160_III(bbb, ccc, ddd, eee, aaa, X[14],  7);
 
     | 
  
  
     | 
    
       	RMD160_III(aaa, bbb, ccc, ddd, eee, X[15],  7);
 
     | 
  
  
     | 
    
       	RMD160_III(eee, aaa, bbb, ccc, ddd, X[ 8], 12);
 
     | 
  
  
     | 
    
       	RMD160_III(ddd, eee, aaa, bbb, ccc, X[12],  7);
 
     | 
  
  
     | 
    
       	RMD160_III(ccc, ddd, eee, aaa, bbb, X[ 4],  6);
 
     | 
  
  
     | 
    
       	RMD160_III(bbb, ccc, ddd, eee, aaa, X[ 9], 15);
 
     | 
  
  
     | 
    
       	RMD160_III(aaa, bbb, ccc, ddd, eee, X[ 1], 13);
 
     | 
  
  
     | 
    
       	RMD160_III(eee, aaa, bbb, ccc, ddd, X[ 2], 11);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_HHH(ddd, eee, aaa, bbb, ccc, X[15],  9);
 
     | 
  
  
     | 
    
       	RMD160_HHH(ccc, ddd, eee, aaa, bbb, X[ 5],  7);
 
     | 
  
  
     | 
    
       	RMD160_HHH(bbb, ccc, ddd, eee, aaa, X[ 1], 15);
 
     | 
  
  
     | 
    
       	RMD160_HHH(aaa, bbb, ccc, ddd, eee, X[ 3], 11);
 
     | 
  
  
     | 
    
       	RMD160_HHH(eee, aaa, bbb, ccc, ddd, X[ 7],  8);
 
     | 
  
  
     | 
    
       	RMD160_HHH(ddd, eee, aaa, bbb, ccc, X[14],  6);
 
     | 
  
  
     | 
    
       	RMD160_HHH(ccc, ddd, eee, aaa, bbb, X[ 6],  6);
 
     | 
  
  
     | 
    
       	RMD160_HHH(bbb, ccc, ddd, eee, aaa, X[ 9], 14);
 
     | 
  
  
     | 
    
       	RMD160_HHH(aaa, bbb, ccc, ddd, eee, X[11], 12);
 
     | 
  
  
     | 
    
       	RMD160_HHH(eee, aaa, bbb, ccc, ddd, X[ 8], 13);
 
     | 
  
  
     | 
    
       	RMD160_HHH(ddd, eee, aaa, bbb, ccc, X[12],  5);
 
     | 
  
  
     | 
    
       	RMD160_HHH(ccc, ddd, eee, aaa, bbb, X[ 2], 14);
 
     | 
  
  
     | 
    
       	RMD160_HHH(bbb, ccc, ddd, eee, aaa, X[10], 13);
 
     | 
  
  
     | 
    
       	RMD160_HHH(aaa, bbb, ccc, ddd, eee, X[ 0], 13);
 
     | 
  
  
     | 
    
       	RMD160_HHH(eee, aaa, bbb, ccc, ddd, X[ 4],  7);
 
     | 
  
  
     | 
    
       	RMD160_HHH(ddd, eee, aaa, bbb, ccc, X[13],  5);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_GGG(ccc, ddd, eee, aaa, bbb, X[ 8], 15);
 
     | 
  
  
     | 
    
       	RMD160_GGG(bbb, ccc, ddd, eee, aaa, X[ 6],  5);
 
     | 
  
  
     | 
    
       	RMD160_GGG(aaa, bbb, ccc, ddd, eee, X[ 4],  8);
 
     | 
  
  
     | 
    
       	RMD160_GGG(eee, aaa, bbb, ccc, ddd, X[ 1], 11);
 
     | 
  
  
     | 
    
       	RMD160_GGG(ddd, eee, aaa, bbb, ccc, X[ 3], 14);
 
     | 
  
  
     | 
    
       	RMD160_GGG(ccc, ddd, eee, aaa, bbb, X[11], 14);
 
     | 
  
  
     | 
    
       	RMD160_GGG(bbb, ccc, ddd, eee, aaa, X[15],  6);
 
     | 
  
  
     | 
    
       	RMD160_GGG(aaa, bbb, ccc, ddd, eee, X[ 0], 14);
 
     | 
  
  
     | 
    
       	RMD160_GGG(eee, aaa, bbb, ccc, ddd, X[ 5],  6);
 
     | 
  
  
     | 
    
       	RMD160_GGG(ddd, eee, aaa, bbb, ccc, X[12],  9);
 
     | 
  
  
     | 
    
       	RMD160_GGG(ccc, ddd, eee, aaa, bbb, X[ 2], 12);
 
     | 
  
  
     | 
    
       	RMD160_GGG(bbb, ccc, ddd, eee, aaa, X[13],  9);
 
     | 
  
  
     | 
    
       	RMD160_GGG(aaa, bbb, ccc, ddd, eee, X[ 9], 12);
 
     | 
  
  
     | 
    
       	RMD160_GGG(eee, aaa, bbb, ccc, ddd, X[ 7],  5);
 
     | 
  
  
     | 
    
       	RMD160_GGG(ddd, eee, aaa, bbb, ccc, X[10], 15);
 
     | 
  
  
     | 
    
       	RMD160_GGG(ccc, ddd, eee, aaa, bbb, X[14],  8);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	RMD160_FFF(bbb, ccc, ddd, eee, aaa, X[12],  8);
 
     | 
  
  
     | 
    
       	RMD160_FFF(aaa, bbb, ccc, ddd, eee, X[15],  5);
 
     | 
  
  
     | 
    
       	RMD160_FFF(eee, aaa, bbb, ccc, ddd, X[10], 12);
 
     | 
  
  
     | 
    
       	RMD160_FFF(ddd, eee, aaa, bbb, ccc, X[ 4],  9);
 
     | 
  
  
     | 
    
       	RMD160_FFF(ccc, ddd, eee, aaa, bbb, X[ 1], 12);
 
     | 
  
  
     | 
    
       	RMD160_FFF(bbb, ccc, ddd, eee, aaa, X[ 5],  5);
 
     | 
  
  
     | 
    
       	RMD160_FFF(aaa, bbb, ccc, ddd, eee, X[ 8], 14);
 
     | 
  
  
     | 
    
       	RMD160_FFF(eee, aaa, bbb, ccc, ddd, X[ 7],  6);
 
     | 
  
  
     | 
    
       	RMD160_FFF(ddd, eee, aaa, bbb, ccc, X[ 6],  8);
 
     | 
  
  
     | 
    
       	RMD160_FFF(ccc, ddd, eee, aaa, bbb, X[ 2], 13);
 
     | 
  
  
     | 
    
       	RMD160_FFF(bbb, ccc, ddd, eee, aaa, X[13],  6);
 
     | 
  
  
     | 
    
       	RMD160_FFF(aaa, bbb, ccc, ddd, eee, X[14],  5);
 
     | 
  
  
     | 
    
       	RMD160_FFF(eee, aaa, bbb, ccc, ddd, X[ 0], 15);
 
     | 
  
  
     | 
    
       	RMD160_FFF(ddd, eee, aaa, bbb, ccc, X[ 3], 13);
 
     | 
  
  
     | 
    
       	RMD160_FFF(ccc, ddd, eee, aaa, bbb, X[ 9], 11);
 
     | 
  
  
     | 
    
       	RMD160_FFF(bbb, ccc, ddd, eee, aaa, X[11], 11);
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	ddd += cc + m_state[1];
 
     | 
  
  
     | 
    
       	m_state[1] = m_state[2] + dd + eee;
 
     | 
  
  
     | 
    
       	m_state[2] = m_state[3] + ee + aaa;
 
     | 
  
  
     | 
    
       	m_state[3] = m_state[4] + aa + bbb;
 
     | 
  
  
     | 
    
       	m_state[4] = m_state[0] + bb + ccc;
 
     | 
  
  
     | 
    
       	m_state[0] = ddd;
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD160Hash::Init(RH_DATA_INFO *pInfo)
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	m_state[0] = 0x67452301UL;
 
     | 
  
  
     | 
    
       	m_state[1] = 0xefcdab89UL;
 
     | 
  
  
     | 
    
       	m_state[2] = 0x98badcfeUL;
 
     | 
  
  
     | 
    
       	m_state[3] = 0x10325476UL;
 
     | 
  
  
     | 
    
       	m_state[4] = 0xc3d2e1f0UL;
 
     | 
  
  
     | 
    
       	m_curlen   = 0;
 
     | 
  
  
     | 
    
       	m_length   = 0;
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD160Hash::Update(const UWORD8 *pBuf, UINTPREF uLen)
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	UINTPREF n;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	while(uLen > 0)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		n = min(uLen, (64 - m_curlen));
 
     | 
  
  
     | 
    
       		memcpy(m_buf + m_curlen, pBuf, n);
 
     | 
  
  
     | 
    
       		m_curlen += n;
 
     | 
  
  
     | 
    
       		pBuf += n;
 
     | 
  
  
     | 
    
       		uLen -= n;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       		if(m_curlen == 64)
 
     | 
  
  
     | 
    
       		{
 
     | 
  
  
     | 
    
       			_Compress();
 
     | 
  
  
     | 
    
       			m_length += 512;
 
     | 
  
  
     | 
    
       			m_curlen = 0;
 
     | 
  
  
     | 
    
       		}
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       }
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       void CRMD160Hash::Final()
 
     | 
  
  
     | 
    
       {
 
     | 
  
  
     | 
    
       	INTPREF i;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	m_length += m_curlen * 8;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	m_buf[m_curlen++] = 0x80;
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	if(m_curlen > 56)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		while(m_curlen < 64)
 
     | 
  
  
     | 
    
       		{
 
     | 
  
  
     | 
    
       			m_buf[m_curlen++] = 0;
 
     | 
  
  
     | 
    
       		}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       		_Compress();
 
     | 
  
  
     | 
    
       		m_curlen = 0;
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	while(m_curlen < 56)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		m_buf[m_curlen++] = 0;
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	STORE64L(m_length, m_buf+56);
 
     | 
  
  
     | 
    
       	_Compress();
 
     | 
  
  
     | 
    
       
     | 
  
  
     | 
    
       	for(i = 0; i < 5; i++)
 
     | 
  
  
     | 
    
       	{
 
     | 
  
  
     | 
    
       		STORE32L(m_state[i], m_final + (i << 2));
 
     | 
  
  
     | 
    
       	}
 
     | 
  
  
     | 
    
       }
 
     |