21 __m128i v = _mm_load_si128((__m128i*)&key[0]);
25 AES_set_encrypt_key(v, aes);
32 AES_ecb_encrypt_blks(data+i, AES_BATCH_SIZE, aes);
34 AES_ecb_encrypt_blks(data+i, (AES_BATCH_SIZE > nblocks-i) ? nblocks-i:AES_BATCH_SIZE, aes);
39 if (nbytes % 16 != 0) {
42 memcpy(extra, (nbytes/16*16)+(
char *) data, nbytes%16);
44 memcpy((nbytes/16*16)+(
char *) data, &extra, nbytes%16);
49 in = double_block(in);
50 __m128i k_128 = _mm_loadl_epi64( (__m128i
const *) (&
id));
60 for(
int i = 0; i < n; ++i) {
61 out[i] = scratch[i] =
xorBlocks(double_block(in[i]), _mm_loadl_epi64( (__m128i
const *) (&
id)));
70 if(scratch ==
nullptr) {
72 scratch =
new block[length];
74 for(
int i = 0; i < length; ++i){
75 out[i] = scratch[i] =
xorBlocks(double_block(in[i]), _mm_loadl_epi64( (__m128i
const *) (&
id)));
void permute_data(uint8_t *data, int nbytes)
Definition: prp.h:37
#define AES_BATCH_SIZE
Definition: config.h:4
__m128i block
Definition: block.h:8
block xorBlocks(block x, block y)
Definition: block.h:35
void aes_set_key(const block &v)
Definition: prp.h:24
void Hn(block *out, block *in, uint64_t id, int length, block *scratch=nullptr)
Definition: prp.h:68
const char fix_key[]
Definition: block.h:130
block H(block in, uint64_t id)
Definition: prp.h:48
AES_KEY * aes
Definition: prp.h:12
~PRP()
Definition: prp.h:17
void aes_set_key(const char *key)
Definition: prp.h:20
PRP(const char *seed=fix_key)
Definition: prp.h:13
void H(block out[n], block in[n], uint64_t id)
Definition: prp.h:58
void xorBlocks_arr(block *res, const block *x, const block *y, int nblocks)
Definition: block.h:37
void permute_block(block *data, int nblocks)
Definition: prp.h:29