Esempio n. 1
0
 def __mul__(self, other):
     if isinstance(other, sbits):
         return self.from_vec(other * x for x in self.v)
     matrix = []
     for i, b in enumerate(util.bit_decompose(other)):
         matrix.append([x * b for x in self.v[:len(self.v) - i]])
     v = sbitint.wallace_tree_from_matrix(matrix)
     return self.from_vec(v[:len(self.v)])
Esempio n. 2
0
 def xor_int(self, other):
     if other == 0:
         return self
     self_bits = self.bit_decompose()
     other_bits = util.bit_decompose(other, max(self.n, util.int_len(other)))
     extra_bits = [self.new(b, n=1) for b in other_bits[self.n:]]
     return self.bit_compose([~x if y else x \
                              for x,y in zip(self_bits, other_bits)] \
                             + extra_bits)
Esempio n. 3
0
 def xor_int(self, other):
     if other == 0:
         return self
     self_bits = self.bit_decompose()
     other_bits = util.bit_decompose(other, max(self.n,
                                                util.int_len(other)))
     extra_bits = [self.new(b, n=1) for b in other_bits[self.n:]]
     return self.bit_compose([~x if y else x \
                              for x,y in zip(self_bits, other_bits)] \
                             + extra_bits)
Esempio n. 4
0
 def mul_int(self, other):
     if other == 0:
         return 0
     elif other == 1:
         return self
     elif self.n == 1:
         bits = util.bit_decompose(other, util.int_len(other))
         zero = sbit(0)
         mul_bits = [self if b else zero for b in bits]
         return self.bit_compose(mul_bits)
     else:
         print self.n, other
         return NotImplemented
Esempio n. 5
0
 def mul_int(self, other):
     if other == 0:
         return 0
     elif other == 1:
         return self
     elif self.n == 1:
         bits = util.bit_decompose(other, util.int_len(other))
         zero = sbit(0)
         mul_bits = [self if b else zero for b in bits]
         return self.bit_compose(mul_bits)
     else:
         print self.n, other
         return NotImplemented
Esempio n. 6
0
 def __init__(self, value, start, lengths, entries_per_block):
     oram.Block.__init__(self, value, lengths)
     length = sum(self.lengths)
     used_bits = entries_per_block * length
     self.value_bits = self.value.bit_decompose(used_bits)
     start_length = util.log2(entries_per_block)
     self.start_bits = util.bit_decompose(start, start_length)
     self.start_demux = oram.demux_list(self.start_bits)
     self.entries = [sbits.bit_compose(self.value_bits[i*length:][:length]) \
                     for i in range(entries_per_block)]
     self.mul_entries = list(map(operator.mul, self.start_demux, self.entries))
     self.bits = sum(self.mul_entries).bit_decompose()
     self.mul_value = sbits.compose(self.mul_entries, sum(self.lengths))
     self.anti_value = self.mul_value + self.value
Esempio n. 7
0
 def __init__(self, value, start, lengths, entries_per_block):
     oram.Block.__init__(self, value, lengths)
     length = sum(self.lengths)
     used_bits = entries_per_block * length
     self.value_bits = self.value.bit_decompose(used_bits)
     start_length = util.log2(entries_per_block)
     self.start_bits = util.bit_decompose(start, start_length)
     self.start_demux = oram.demux_list(self.start_bits)
     self.entries = [sbits.bit_compose(self.value_bits[i*length:][:length]) \
                     for i in range(entries_per_block)]
     self.mul_entries = map(operator.mul, self.start_demux, self.entries)
     self.bits = sum(self.mul_entries).bit_decompose()
     self.mul_value = sbits.compose(self.mul_entries, sum(self.lengths))
     self.anti_value = self.mul_value + self.value
Esempio n. 8
0
 def compose(cls, items, bit_length=1):
     return cls.bit_compose(sum([util.bit_decompose(item, bit_length) for item in items], []))
Esempio n. 9
0
 def coerce(self, other):
     if util.is_constant(other):
         return self.from_vec(util.bit_decompose(other, n))
     else:
         return super(sbitvecn, self).coerce(other)
Esempio n. 10
0
 def compose(cls, items, bit_length=1):
     return cls.bit_compose(sum([util.bit_decompose(item, bit_length) for item in items], []))