emp-toolkit
privacy_free_eva.h
Go to the documentation of this file.
1 #ifndef PRIVACY_FREE_EVA_H__
2 #define PRIVACY_FREE_EVA_H__
3 #include "io_channel.h"
4 #include "net_io_channel.h"
5 #include "file_io_channel.h"
6 #include "block.h"
7 #include "utils.h"
8 #include "prp.h"
9 #include "hash.h"
11 #include <iostream>
12 
13 template<typename T>
14 bool privacy_free_eva_is_public(GarbleCircuit* gc, const block & b, int party);
15 
16 template<typename T>
18 
19 template<typename T>
20 block privacy_free_eva_and(GarbleCircuit* gc, const block&a, const block&b);
21 
22 template<typename T>
23 block privacy_free_eva_xor(GarbleCircuit*gc, const block&a, const block&b);
24 
25 template<typename T>
27 template<typename T>
28 class PrivacyFreeEva:public GarbleCircuit{ public:
30  T * io;
32  PrivacyFreeEva(T * io) :io(io) {
33  is_public_ptr = &privacy_free_eva_is_public<T>;
34  public_label_ptr = &privacy_free_eva_public_label<T>;
35  gc_and_ptr = &privacy_free_eva_and<T>;
36  gc_xor_ptr = &privacy_free_eva_xor<T>;
37  gc_not_ptr = &privacy_free_eva_not<T>;
38  PRG prg2(fix_key);prg2.random_block(constant, 2);
39  *((char *) &constant[0]) &= 0xfe;
40  *((char *) &constant[1]) |= 0x01;
41  }
42  bool is_public_impl(const block & b, int party) {
43  return false;
44  }
46  return constant[b];
47  }
48  block and_gate(const block& a, const block& b) {
49  block out[2], table[1];
50  io->recv_block(table, 1);
51  garble_gate_eval_privacy_free(GARBLE_GATE_AND, a, b, out, table, gid++, prp.aes);
52  return out[0];
53  }
54  block xor_gate(const block& a, const block& b) {
55  return xorBlocks(a,b);
56  }
57  block not_gate(const block& a) {
58  return xor_gate(a, public_label_impl(true));
59  }
60  void privacy_free_to_xor(block* new_block, const block * old_block, const bool* b, int length){
61  block h[2];
62  for(int i = 0; i < length; ++i) {
63  io->recv_block(h, 2);
64  if(!b[i]){
65  new_block[i] = xorBlocks(h[0], prp.H(old_block[i], i));
66  } else {
67  new_block[i] = xorBlocks(h[1], prp.H(old_block[i], i));
68  }
69  }
70  }
71 };
72 template<typename T>
74  return ((PrivacyFreeEva<T>*)gc)->is_public_impl(b, party);
75 }
76 template<typename T>
78  return ((PrivacyFreeEva<T>*)gc)->public_label_impl(b);
79 }
80 template<typename T>
82  return ((PrivacyFreeEva<T>*)gc)->and_gate(a, b);
83 }
84 template<typename T>
86  return ((PrivacyFreeEva<T>*)gc)->xor_gate(a, b);
87 }
88 
89 template<typename T>
91  return ((PrivacyFreeEva<T>*)gc)->not_gate(a);
92 }
93 #endif// PRIVACY_FREE_EVA_H__
block public_label_impl(bool b)
Definition: privacy_free_eva.h:45
Definition: privacy_free_eva.h:28
__m128i block
Definition: block.h:8
block and_gate(const block &a, const block &b)
Definition: privacy_free_eva.h:48
block privacy_free_eva_xor(GarbleCircuit *gc, const block &a, const block &b)
Definition: privacy_free_eva.h:85
uint64_t gid
Definition: garble_circuit.h:8
block xorBlocks(block x, block y)
Definition: block.h:35
block privacy_free_eva_not(GarbleCircuit *gc, const block &a)
Definition: privacy_free_eva.h:90
block(* gc_and_ptr)(GarbleCircuit *gc, const block &a, const block &b)
Definition: garble_circuit.h:11
block not_gate(const block &a)
Definition: privacy_free_eva.h:57
block(* public_label_ptr)(GarbleCircuit *gc, bool b)
Definition: garble_circuit.h:10
Definition: garble.h:28
void random_block(block *data, int nblocks=1)
Definition: prg.h:75
const char fix_key[]
Definition: block.h:130
block privacy_free_eva_and(GarbleCircuit *gc, const block &a, const block &b)
Definition: privacy_free_eva.h:81
bool is_public_impl(const block &b, int party)
Definition: privacy_free_eva.h:42
block H(block in, uint64_t id)
Definition: prp.h:48
Definition: prp.h:11
AES_KEY * aes
Definition: prp.h:12
block(* gc_not_ptr)(GarbleCircuit *gc, const block &a)
Definition: garble_circuit.h:13
block(* gc_xor_ptr)(GarbleCircuit *gc, const block &a, const block &b)
Definition: garble_circuit.h:12
PrivacyFreeEva(T *io)
Definition: privacy_free_eva.h:32
bool privacy_free_eva_is_public(GarbleCircuit *gc, const block &b, int party)
Definition: privacy_free_eva.h:73
PRP prp
Definition: privacy_free_eva.h:29
Definition: prg.h:16
T * io
Definition: privacy_free_eva.h:30
Definition: garble_circuit.h:7
block xor_gate(const block &a, const block &b)
Definition: privacy_free_eva.h:54
bool(* is_public_ptr)(GarbleCircuit *gc, const block &b, int party)
Definition: garble_circuit.h:9
block privacy_free_eva_public_label(GarbleCircuit *gc, bool b)
Definition: privacy_free_eva.h:77
block constant[2]
Definition: privacy_free_eva.h:31
int party
Definition: input-check-malicious.cpp:12
void privacy_free_to_xor(block *new_block, const block *old_block, const bool *b, int length)
Definition: privacy_free_eva.h:60