@Override public DRes<List<Boolean>> buildComputation(ProtocolBuilderBinary producer) { return producer.seq(seq -> { Binary bin = seq.binary(); List<DRes<SBool>> keyInputs = new ArrayList<>(); List<DRes<SBool>> plainInputs = new ArrayList<>(); if (this.id == 1) { for (boolean b : in) { keyInputs.add(bin.input(b, 1)); plainInputs.add(bin.input(false, 2)); } } else { // Receive inputs for (boolean b : in) { keyInputs.add(bin.input(false, 1)); plainInputs.add(bin.input(b, 2)); } } DRes<List<SBool>> res = seq.bristol().AES(plainInputs, keyInputs); return res; }).seq((seq, aesRes) -> { List<DRes<Boolean>> outs = new ArrayList<>(); for (SBool toOpen : aesRes) { outs.add(seq.binary().open(toOpen)); } return () -> outs; }).seq((seq, opened) -> () -> opened.stream().map(DRes::out).collect(Collectors.toList())); }
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { AdvancedBinary prov = seq.advancedBinary(); DRes<SBool> increment = seq.binary().known(true); List<DRes<SBool>> large = rawLarge.stream().map(seq.binary()::known).collect(Collectors.toList()); DRes<List<DRes<SBool>>> adder = prov.bitIncrement(large, increment); return adder; }).seq((seq, dat) -> { List<DRes<Boolean>> out = new ArrayList<>(); for (DRes<SBool> o : dat) { out.add(seq.binary().open(o)); } return () -> out.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outputs = runApplication(app); Assert.assertThat(ByteAndBitConverter.toHex(outputs), Is.is(expected)); Assert.assertThat(outputs.size(), Is.is(rawLarge.size() + 1)); } };
@Override public DRes<Boolean> open(DRes<SBool> toOpen) { return this.delegate.open(toOpen); }
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> list = new ArrayList<>(); list.add(builder .open(builder.not(builder.and(builder.xor(falseBool, falseBool), falseBool)))); list.add(builder .open(builder.not(builder.and(builder.xor(falseBool, trueBool), falseBool)))); list.add( builder.open(builder.not(builder.and(builder.xor(trueBool, falseBool), trueBool)))); list.add( builder.open(builder.not(builder.and(builder.xor(trueBool, trueBool), trueBool)))); return () -> list; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(true, outs.get(0)); Assert.assertEquals(true, outs.get(1)); Assert.assertEquals(false, outs.get(2)); Assert.assertEquals(true, outs.get(3)); } } };
if (this.id == 1) { for (boolean b : inKey) { key1Inputs.add(bin.input(b, 1)); key2Inputs.add(bin.input(false, 2)); key1Inputs.add(bin.input(false, 1)); key2Inputs.add(bin.input(b, 2)); commonKey.add(bin.xor(key1Inputs.get(i), key2Inputs.get(i))); for (int j = 0; j < BLOCK_SIZE; j++) { if (this.id == 1) { set1.get(i).add(bin.input(bits.get(BLOCK_SIZE - 1 - j), 1)); set2.get(i).add(bin.input(false, 2)); } else { set1.get(i).add(bin.input(false, 1)); set2.get(i).add(bin.input(bits.get(BLOCK_SIZE - 1 - j), 2)); output.add(innerOut); for (SBool b : bs) { innerOut.add(seq.binary().open(b));
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> list = new ArrayList<>(); list.add(builder.open(builder.and(falseBool, falseBool))); list.add(builder.open(builder.and(trueBool, falseBool))); list.add(builder.open(builder.and(falseBool, trueBool))); list.add(builder.open(builder.and(trueBool, trueBool))); return () -> list; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(false, outs.get(0)); Assert.assertEquals(false, outs.get(1)); Assert.assertEquals(false, outs.get(2)); Assert.assertEquals(true, outs.get(3)); } } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> xors = new ArrayList<>(); xors.add(builder.open(builder.xor(falseBool, falseBool))); xors.add(builder.open(builder.xor(trueBool, falseBool))); xors.add(builder.open(builder.xor(falseBool, trueBool))); xors.add(builder.open(builder.xor(trueBool, trueBool))); return () -> xors; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(false, outs.get(0)); Assert.assertEquals(true, outs.get(1)); Assert.assertEquals(true, outs.get(2)); Assert.assertEquals(false, outs.get(3)); } } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> list = new ArrayList<>(); list.add(builder.open(builder.not(falseBool))); list.add(builder.open(builder.not(trueBool))); return () -> list; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(true, outs.get(0)); Assert.assertEquals(false, outs.get(1)); } } };
}).seq((seq, ors) -> { List<DRes<SBool>> xors = new ArrayList<>(); xors.add(seq.binary().xor(ors.get(0), seq.binary().known(false))); xors.add(seq.binary().xor(ors.get(i - 1), ors.get(i))); xors.add(seq.binary().known(false)); return () -> xors; }).seq((seq, xors) -> { List<DRes<SBool>> res = new ArrayList<>(); for (int j = 0; j < log2(number.size()) + 1; j++) { res.add(seq.binary().known(false)); DRes<SBool> tmp = seq.binary().and(xors.get(i), seq.binary().known(ithBit)); res.add(j, seq.binary().xor(tmp, res.remove(j)));
outWireXor = builder.binary().xor(leftInWireXor, rightInWireXor); this.wires.put(out[0], outWireXor); outWireAnd = builder.binary().and(leftInWireAnd, rightInWireAnd); this.wires.put(out[0], outWireAnd); } else if ("INV".equals(type)) { throw new IllegalArgumentException("NOT input " + in[0] + " was not set"); outWireNot = builder.binary().not(inWireNot); this.wires.put(out[0], outWireNot); } else {
@Override public void test() throws Exception { Application<Boolean, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { DRes<SBool> in = seq.binary().randomBit(); DRes<Boolean> open = seq.binary().open(in); return open; }).seq((seq, out) -> { return () -> out; }); boolean output = runApplication(app); if (doAsserts) { Assert.assertEquals(true, output); } } };
@Override public DRes<SBool> input(boolean in, int inputter) { return this.delegate.input(in, inputter); }
List<DRes<SBool>> res = new ArrayList<>(); for (DRes<SBool> right : rights) { res.add(seq.binary().and(lefts.get(idx), right)); res.add(seq.binary().and(lefts.get(idx), right)); res.add(seq.binary().known(false)); tmp.add(0, seq.binary().known(false)); seq.advancedBinary().fullAdder(state.value.out(), res, seq.binary().known(false))); return is;
@Override public DRes<SBool> xor(DRes<SBool> left, DRes<SBool> right) { this.xorCount++; return this.delegate.xor(left, right); }
@Override public DRes<SBool> known(boolean known) { return this.delegate.known(known); }
@Override public DRes<SBool> not(DRes<SBool> in) { return this.delegate.not(in); }