Created
November 10, 2019 19:36
-
-
Save Laksen/a9cc0a81b4f2943f7df49233f26ee530 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void bm64_baseisa(const uint64_t in[64], uint64_t out[64]) | |
{ | |
for (int i2 = 0; i2 < 64; i2 += 8) // in[] rows, word index | |
for (int j = 0; j < 8; j++) // in[] columns, bit index | |
{ | |
int j_shift = j*8; | |
uint64_t res = 0; | |
for (int i=0; i<8; i++) | |
res |= ((in[i2+i] >> j_shift) & 0xFF) << (i*8); | |
out[j + i2] = res; | |
} | |
} | |
void bm64_baseisa2(const uint64_t in[64], uint64_t out[64]) | |
{ | |
for (int i2 = 0; i2 < 64; i2 += 8) // in[] rows, word index | |
for (int j = 0; j < 8; j++) // in[] columns, bit index | |
{ | |
int j_shift = j*8; | |
uint64_t res = 0; | |
res |= ((in[i2+0] >> j_shift) & 0xFF); | |
res |= ((in[i2+1] >> j_shift) & 0xFF) << 8; | |
res |= ((in[i2+2] >> j_shift) & 0xFF) << 16; | |
res |= ((in[i2+3] >> j_shift) & 0xFF) << 24; | |
res |= ((in[i2+4] >> j_shift) & 0xFF) << 32; | |
res |= ((in[i2+5] >> j_shift) & 0xFF) << 40; | |
res |= ((in[i2+6] >> j_shift) & 0xFF) << 48; | |
res |= ((in[i2+7] >> j_shift) & 0xFF) << 56; | |
out[j + i2] = res; | |
} | |
} | |
void bm64t_baseisa(const uint64_t in[64], uint64_t out[64]) | |
{ | |
for (int j = 0; j < 64; j++) | |
{ | |
uint64_t res = 0; | |
for (int i = 0; i < 64; i++) | |
res |= ((in[i] >> j) & 1) << i; | |
out[j] = res; | |
} | |
} | |
void bm64t_baseisa2(const uint64_t in[64], uint64_t out[64]) | |
{ | |
for (int j = 0; j < 64; j+=8) | |
{ | |
uint64_t res0 = 0; | |
uint64_t res1 = 0; | |
uint64_t res2 = 0; | |
uint64_t res3 = 0; | |
uint64_t res4 = 0; | |
uint64_t res5 = 0; | |
uint64_t res6 = 0; | |
uint64_t res7 = 0; | |
for (int i = 0; i < 64; i++) | |
{ | |
uint64_t in_tmp = in[i]; | |
res0 |= ((in_tmp >> (j+0)) & 1) << i; | |
res1 |= ((in_tmp >> (j+1)) & 1) << i; | |
res2 |= ((in_tmp >> (j+2)) & 1) << i; | |
res3 |= ((in_tmp >> (j+3)) & 1) << i; | |
res4 |= ((in_tmp >> (j+4)) & 1) << i; | |
res5 |= ((in_tmp >> (j+5)) & 1) << i; | |
res6 |= ((in_tmp >> (j+6)) & 1) << i; | |
res7 |= ((in_tmp >> (j+7)) & 1) << i; | |
} | |
out[j+0] = res0; | |
out[j+1] = res1; | |
out[j+2] = res2; | |
out[j+3] = res3; | |
out[j+4] = res4; | |
out[j+5] = res5; | |
out[j+6] = res6; | |
out[j+7] = res7; | |
} | |
} | |
static uint64_t hxor(uint64_t inp) | |
{ | |
inp ^= (inp>>32); | |
inp ^= (inp>>16); | |
inp ^= (inp>>8); | |
inp ^= (inp>>4); | |
inp ^= (inp>>2); | |
inp ^= (inp>>1); | |
return inp; | |
} | |
void bm64m_baseisa(const uint64_t in1[64], const uint64_t in2[8], uint64_t out[8]) | |
{ | |
for (int j = 0; j < 8; j++) // in2[] columns, word index | |
{ | |
uint64_t res = 0; | |
uint64_t in_j = in2[j]; | |
for (int i = 0; i < 64; i++) // in1[] rows, word index | |
res |= (hxor(in1[i] & in_j) & 1) << i; | |
out[j] = res; | |
} | |
} | |
void bm64m_baseisa2(const uint64_t in1[64], const uint64_t in2[8], uint64_t out[8]) | |
{ | |
uint64_t res0 = 0; | |
uint64_t res1 = 0; | |
uint64_t res2 = 0; | |
uint64_t res3 = 0; | |
uint64_t res4 = 0; | |
uint64_t res5 = 0; | |
uint64_t res6 = 0; | |
uint64_t res7 = 0; | |
uint64_t in20 = in2[0]; | |
uint64_t in21 = in2[1]; | |
uint64_t in22 = in2[2]; | |
uint64_t in23 = in2[3]; | |
uint64_t in24 = in2[4]; | |
uint64_t in25 = in2[5]; | |
uint64_t in26 = in2[6]; | |
uint64_t in27 = in2[7]; | |
for (int i = 0; i < 64; i++) // in1[] rows, word index | |
{ | |
uint64_t in_i = in1[i]; | |
res0 |= (hxor(in_i & in20) & 1) << i; | |
res1 |= (hxor(in_i & in21) & 1) << i; | |
res2 |= (hxor(in_i & in22) & 1) << i; | |
res3 |= (hxor(in_i & in23) & 1) << i; | |
res4 |= (hxor(in_i & in24) & 1) << i; | |
res5 |= (hxor(in_i & in25) & 1) << i; | |
res6 |= (hxor(in_i & in26) & 1) << i; | |
res7 |= (hxor(in_i & in27) & 1) << i; | |
} | |
out[0] = res0; | |
out[1] = res1; | |
out[2] = res2; | |
out[3] = res3; | |
out[4] = res4; | |
out[5] = res5; | |
out[6] = res6; | |
out[7] = res7; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment