X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gosthash2012_ref.h;h=c113e15a7be1ad79ed40186f9d47c628daf21772;hb=1907d53ddbefbc85ce3bdea8320ff7610f47f22a;hp=6d43d9e0ca906fd7ac4d011a127cef3554b3f2c7;hpb=57d07eb0dc22bee10aebb0bd37cbdf2258413564;p=openssl-gost%2Fengine.git diff --git a/gosthash2012_ref.h b/gosthash2012_ref.h index 6d43d9e..c113e15 100644 --- a/gosthash2012_ref.h +++ b/gosthash2012_ref.h @@ -12,6 +12,8 @@ # error "GOST R 34.11-2012: portable implementation disabled in config.h" #endif +# pragma message "Use regular implementation" + #define X(x, y, z) { \ z->QWORD[0] = x->QWORD[0] ^ y->QWORD[0]; \ z->QWORD[1] = x->QWORD[1] ^ y->QWORD[1]; \ @@ -23,11 +25,10 @@ z->QWORD[7] = x->QWORD[7] ^ y->QWORD[7]; \ } -#ifndef __GOST3411_BIG_ENDIAN__ # define __XLPS_FOR for (_i = 0; _i <= 7; _i++) +#ifndef __GOST3411_BIG_ENDIAN__ # define _datai _i #else -# define __XLPS_FOR for (_i = 7; _i >= 0; _i--) # define _datai 7 - _i #endif @@ -46,14 +47,22 @@ \ \ __XLPS_FOR {\ - data->QWORD[_datai] = Ax[0][(r0 >> (_i << 3)) & 0xFF]; \ - data->QWORD[_datai] ^= Ax[1][(r1 >> (_i << 3)) & 0xFF]; \ - data->QWORD[_datai] ^= Ax[2][(r2 >> (_i << 3)) & 0xFF]; \ - data->QWORD[_datai] ^= Ax[3][(r3 >> (_i << 3)) & 0xFF]; \ - data->QWORD[_datai] ^= Ax[4][(r4 >> (_i << 3)) & 0xFF]; \ - data->QWORD[_datai] ^= Ax[5][(r5 >> (_i << 3)) & 0xFF]; \ - data->QWORD[_datai] ^= Ax[6][(r6 >> (_i << 3)) & 0xFF]; \ - data->QWORD[_datai] ^= Ax[7][(r7 >> (_i << 3)) & 0xFF]; \ + data->QWORD[_datai] = Ax[0][r0 & 0xFF]; \ + data->QWORD[_datai] ^= Ax[1][r1 & 0xFF]; \ + data->QWORD[_datai] ^= Ax[2][r2 & 0xFF]; \ + data->QWORD[_datai] ^= Ax[3][r3 & 0xFF]; \ + data->QWORD[_datai] ^= Ax[4][r4 & 0xFF]; \ + data->QWORD[_datai] ^= Ax[5][r5 & 0xFF]; \ + data->QWORD[_datai] ^= Ax[6][r6 & 0xFF]; \ + data->QWORD[_datai] ^= Ax[7][r7 & 0xFF]; \ + r0 >>= 8; \ + r1 >>= 8; \ + r2 >>= 8; \ + r3 >>= 8; \ + r4 >>= 8; \ + r5 >>= 8; \ + r6 >>= 8; \ + r7 >>= 8; \ }\ }