@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 -> { List<DRes<SBool>> input1 = BooleanHelper.known(toBoolean(in1), seq.binary()); List<List<DRes<SBool>>> inputs = new ArrayList<>(); inputs.add(input1); return () -> inputs; }).seq((seq, inputs) -> { DRes<List<SBool>> list = seq.bristol().SHA256(inputs.get(0)); return list; }).seq((seq, res) -> { List<DRes<Boolean>> outputs = new ArrayList<>(); for (SBool boo : res) { outputs.add(seq.binary().open(boo)); } return () -> outputs; }).seq( (seq, output) -> () -> output.stream().map(DRes::out).collect(Collectors.toList())); List<Boolean> res = runApplication(app); Boolean[] expected = toBoolean(out1); Boolean[] actual = new Boolean[res.size()]; for (int i = 0; i < res.size(); i++) { actual[i] = res.get(i); } if (doAsserts) { Assert.assertArrayEquals(expected, actual); } } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { List<DRes<SBool>> input1 = BooleanHelper.known(toBoolean(in1), seq.binary()); List<List<DRes<SBool>>> inputs = new ArrayList<>(); inputs.add(input1); return () -> inputs; }).seq((seq, inputs) -> { DRes<List<SBool>> list = seq.bristol().MD5(inputs.get(0)); return list; }).seq((seq, res) -> { List<DRes<Boolean>> outputs = new ArrayList<>(); for (SBool boo : res) { outputs.add(seq.binary().open(boo)); } return () -> outputs; }).seq( (seq, output) -> () -> output.stream().map(DRes::out).collect(Collectors.toList())); List<Boolean> res = runApplication(app); Boolean[] expected = toBoolean(out1); Boolean[] actual = new Boolean[res.size()]; for (int i = 0; i < res.size(); i++) { actual[i] = res.get(i); } if (doAsserts) { Assert.assertArrayEquals(expected, actual); } } };
return () -> inputs; }).seq((seq, inputs) -> { DRes<List<SBool>> l = seq.bristol().DES(inputs.get(0), inputs.get(1)); return l; }).seq((seq, res) -> {
return () -> inputs; }).seq((seq, inputs) -> { DRes<List<SBool>> list = seq.bristol().SHA1(inputs.get(0)); return list; }).seq((seq, res) -> {
return () -> inputs; }).seq((seq, inputs) -> { DRes<List<SBool>> l = seq.bristol().mult32x32(inputs.get(0), inputs.get(1)); return l; }).seq((seq, res) -> {
return () -> inputs; }).seq((seq, inputs) -> { DRes<List<SBool>> l = seq.bristol().AES(inputs.get(0), inputs.get(1)); return l; }).seq((seq, res) -> {