1 #ifndef OT_M_EXTENSION_ALSZ_H__     2 #define OT_M_EXTENSION_ALSZ_H__    26         this->base_ot = 
new OTCO(io);
    27         this->s = 
new bool[
l];
    30         block_s = 
new uint8_t[l/8];
    40         if(data_open != 
nullptr) {
    45     void xor_arr (uint8_t * a, uint8_t * b, uint8_t * c, 
int n) {
    49             uint8_t* end_a = a + n;
    51                 *(a++) = *(b++) ^ *(c++);
    55     block H(uint8_t* in, 
long id, 
int len) {
    57         for(
int i = 0; i < len/16; ++i) {
    65         for(
int i = 0; i < len/8; ++i)
    67         for(
int i = 0; i < len; ++i)
    74             memcpy(k0, in_k0, l*
sizeof(
block));
    80         base_ot->
recv(k0, s, l);
    86             memcpy(k0, in_k0, l*
sizeof(
block));
    87             memcpy(k1, in_k1, l*
sizeof(
block));
    92         base_ot->
send(k0, k1, l);
    98         if (length%128 !=0) length = (length/128 + 1)*128;
   100         q = 
new uint8_t[length/8*
l];
   108         qT = 
new uint8_t[length/8*
l];
   109         uint8_t * q2 = 
new uint8_t[length/8*
l];
   110         uint8_t*tmp = 
new uint8_t[length/8];
   112         for(
int i = 0; i < 
l; ++i) {
   117                 xor_arr(q2+(i*length/8), q+(i*length/8), tmp, length/8);
   119                 memcpy(q2+(i*length/8), q+(i*length/8), length/8);
   127         int old_length = length;
   128         if (length%128 !=0) length = (length/128 + 1)*128;
   134         uint8_t *block_r = 
new uint8_t[length/8];
   138         t[0] = 
new uint8_t[length/8*
l];
   139         t[1] = 
new uint8_t[length/8*
l];
   140         tT = 
new uint8_t[length/8*
l];
   141         uint8_t* tmp = 
new uint8_t[length/8];
   143         for(
int i = 0; i < 
l; ++i) {
   148             xor_arr(tmp, 
t[0]+(i*length/8), 
t[1]+(i*length/8), length/8);
   149             xor_arr(tmp, block_r, tmp, length/8);
   160         int old_length = length;
   161         if (length%128 !=0) length = (length/128 + 1)*128;
   163         uint8_t *pad1 = 
new uint8_t[l/8];
   165         for(
int i = 0; i < old_length; ++i) {
   166             xor_arr(pad1, qT+i*l/8, block_s, l/8);
   167             pad[0] = 
xorBlocks( 
H(qT+i*l/8, i, l/8), data0[i]);
   168             pad[1] = 
xorBlocks( 
H(pad1, i, l/8), data1[i]);
   176         if (length%128 !=0) length = (length/128 + 1)*128;
   178         uint8_t * tmp = 
new uint8_t[length/8];
   180         for(
int i = 0; i < 
u; ++i) {
   183             for(
int j = 0; j < 
l; ++j) {
   185                 beta = beta>0?beta:-1*beta;
   187                 for(
int k = 0; k < 2; ++k)
   188                     for(
int l = 0; l < 2; ++
l) {
   189                         xor_arr(tmp, 
t[k]+(j*length/8), 
t[l]+(beta*length/8), length/8);
   199         int old_length = length;
   200         data_open = 
new block[length];
   201         if (length%128 !=0) length = (length/128 + 1)*128;
   203         for(
int i = 0; i < old_length; ++i) {
   205             block tmp = 
H(tT+i*l/8, i, l/8);
   208                 data_open[i] = res[0];
   211                 data_open[i] = res[1];
   220         if (length%128 !=0) length = (length/128 + 1)*128;
   223         char dgst[2][2][20]; 
char dgstchk[20];
   224         uint8_t * tmp = 
new uint8_t[length/8];
   225         for(
int i = 0; i < 
u; ++i) {
   229             for(
int j = 0; j < 
l; ++j) {
   231                 beta = beta>0?beta:-1*beta;
   238                 int ind1 = s[j]? 1:0;
   239                 int ind2 = s[beta]? 1:0;
   240                 xor_arr(tmp, q+(j*length/8), q+(beta*length/8), length/8);
   242                 if (strncmp(dgstchk, dgst[ind1][ind2], 20)!=0)
   253         delete[] 
q; q = 
nullptr;
   274         if (strncmp(com_recv, com, 10)!= 0)     
   277         for(
int i = 0; i < length; ++i) {       
   278             xor_arr(tT+i*l/8, tT+i*l/8, block_s, l/8);      
   279             block tmp = 
H(tT+i*l/8, i, l/8);        
   289 #endif// OT_M_EXTENSION_ALSZ_H__ void bool_to_uint8(uint8_t *out, const bool *in, int len)
Definition: mextension_alsz.h:64
 
void send_data(const void *data, int nbyte)
Definition: io_channel.h:14
 
void recv_data(void *data, int nbyte)
Definition: io_channel.h:17
 
void open(block *data, const bool *r, int length)
Definition: mextension_alsz.h:270
 
void random_bool(bool *data, int length)
Definition: prg.h:57
 
void setup_recv(block *in_k0=nullptr, block *in_k1=nullptr)
Definition: mextension_alsz.h:83
 
__m128i block
Definition: block.h:8
 
void ot_extension_send_post(const block *data0, const block *data1, int length)
Definition: mextension_alsz.h:159
 
uint8_t * tT
Definition: mextension_alsz.h:18
 
void send(const block *data0, const block *data1, int length)
Definition: ot.h:10
 
void ot_extension_recv_post(block *data, const bool *r, int length)
Definition: mextension_alsz.h:198
 
void open()
Definition: mextension_alsz.h:266
 
OTCO * base_ot
Definition: mextension_alsz.h:10
 
bool committing
Definition: mextension_alsz.h:21
 
bool * s
Definition: mextension_alsz.h:16
 
block xorBlocks(block x, block y)
Definition: block.h:35
 
Definition: net_io_channel.h:22
 
void sse_trans(uint8_t *out, uint8_t const *inp, int nrows, int ncols)
Definition: block.h:85
 
PRP pi
Definition: mextension_alsz.h:12
 
bool setup
Definition: mextension_alsz.h:20
 
#define zero_block()
Definition: block.h:66
 
int ssp
Definition: mextension_alsz.h:13
 
void xor_arr(uint8_t *a, uint8_t *b, uint8_t *c, int n)
Definition: mextension_alsz.h:45
 
MOTExtension_ALSZ(NetIO *io, bool committing=false, int ssp=40)
Definition: mextension_alsz.h:23
 
block * data_open
Definition: mextension_alsz.h:15
 
char com[Hash::DIGEST_SIZE]
Definition: mextension_alsz.h:22
 
void random_block(block *data, int nblocks=1)
Definition: prg.h:75
 
block H(block in, uint64_t id)
Definition: prp.h:48
 
void reseed(const void *key, uint64_t id=0)
Definition: prg.h:41
 
void ot_extension_recv_pre(block *data, const bool *r, int length)
Definition: mextension_alsz.h:126
 
NetIO * io
Definition: ot.h:9
 
int l
Definition: mextension_alsz.h:13
 
uint8_t * q
Definition: mextension_alsz.h:18
 
uint8_t * qT
Definition: mextension_alsz.h:18
 
int u
Definition: mextension_alsz.h:19
 
void recv(block *data, const bool *b, int length)
Definition: ot.h:13
 
PRG prg
Definition: mextension_alsz.h:11
 
uint8_t * block_s
Definition: mextension_alsz.h:18
 
void recv_impl(block *data, const bool *b, int length)
Definition: mextension_alsz.h:257
 
void random_data(void *data, int nbytes)
Definition: prg.h:49
 
void send_impl(const block *data0, const block *data1, int length)
Definition: mextension_alsz.h:250
 
void ot_extension_recv_check(int length)
Definition: mextension_alsz.h:175
 
block * k0
Definition: mextension_alsz.h:15
 
block * k1
Definition: mextension_alsz.h:15
 
void send_block(const block *data, int nblock)
Definition: io_channel.h:132
 
~MOTExtension_ALSZ()
Definition: mextension_alsz.h:34
 
void ot_extension_send_pre(int length)
Definition: mextension_alsz.h:96
 
void recv_block(block *data, int nblock)
Definition: io_channel.h:136
 
Definition: mextension_alsz.h:9
 
void setup_send(block *in_k0=nullptr, bool *in_s=nullptr)
Definition: mextension_alsz.h:71
 
block H(uint8_t *in, long id, int len)
Definition: mextension_alsz.h:55
 
static const int DIGEST_SIZE
Definition: hash.h:17
 
void xorBlocks_arr(block *res, const block *x, const block *y, int nblocks)
Definition: block.h:37
 
uint8_t ** t
Definition: mextension_alsz.h:18
 
bool ot_extension_send_check(int length)
Definition: mextension_alsz.h:219
 
static void hash_once(void *digest, const void *data, int nbyte)
Definition: hash.h:49