@Override public DRes<Void> buildComputation(ProtocolBuilderBinary builder) { return builder.seq(seq -> { output.println(message); return null; }); } }
@Override public DRes<SBool> greaterThan(List<DRes<SBool>> inLeft, List<DRes<SBool>> inRight) { return this.builder.seq(new BinaryGreaterThan(inLeft, inRight)); }
@Override public DRes<SBool> equal(List<DRes<SBool>> inLeft, List<DRes<SBool>> inRight) { return this.builder.seq(new BinaryEquality(inLeft, inRight)); }
@Override public DRes<Pair<SBool, SBool>> oneBitFullAdder(DRes<SBool> left, DRes<SBool> right, DRes<SBool> carry) { return builder.seq(new OneBitFullAdder(left, right, carry)); }
@Override public DRes<List<DRes<SBool>>> binaryMult(List<DRes<SBool>> lefts, List<DRes<SBool>> rights) { return builder.seq(new BinaryMultiplication(lefts, rights)); }
@Override public DRes<List<Pair<List<DRes<SBool>>, List<DRes<SBool>>>>> keyedCompareAndSwap( Pair<List<DRes<SBool>>, List<DRes<SBool>>> leftKeyAndValue, Pair<List<DRes<SBool>>, List<DRes<SBool>>> rightKeyAndValue) { return builder.seq(new KeyedCompareAndSwap(leftKeyAndValue, rightKeyAndValue)); }
@Override public DRes<Pair<SBool, SBool>> oneBitHalfAdder(DRes<SBool> left, DRes<SBool> right) { return builder.seq(new OneBitHalfAdder(left, right)); }
@Override public DRes<List<Pair<List<DRes<SBool>>, List<DRes<SBool>>>>> buildComputation( ProtocolBuilderBinary builder) { return builder.seq(seq -> { sort(0, numbers.size() - 1, seq); return () -> numbers; }); }
@Override public DRes<List<SBool>> SHA256(List<DRes<SBool>> input) { // empty list since the parser will only use input1 as inputs. List<DRes<SBool>> in2 = new ArrayList<>(); BristolCircuitParser parser = BristolCircuitParser.readCircuitDescription("circuits/sha-256.txt", input, in2); return builder.seq(parser); }
@Override public DRes<List<DRes<SBool>>> fullAdder(List<DRes<SBool>> lefts, List<DRes<SBool>> rights, DRes<SBool> inCarry) { return builder.seq(new FullAdder(lefts, rights, inCarry)); }
@Override public DRes<List<DRes<SBool>>> bitIncrement(List<DRes<SBool>> base, DRes<SBool> increment) { return builder.seq(new BitIncrementer(base, increment)); }
@Override public DRes<SBool> condSelect(DRes<SBool> condition, DRes<SBool> left, DRes<SBool> right) { return builder.seq(new ConditionalSelect(condition, left, right)); }
@Override public DRes<List<SBool>> mult32x32(List<DRes<SBool>> in1, List<DRes<SBool>> in2) { BristolCircuitParser parser = BristolCircuitParser.readCircuitDescription("circuits/mult_32x32.txt", in1, in2); return builder.seq(parser); }
@Override public DRes<List<SBool>> SHA1(List<DRes<SBool>> input) { // empty list since the parser will only use input1 as inputs. List<DRes<SBool>> in2 = new ArrayList<>(); BristolCircuitParser parser = BristolCircuitParser.readCircuitDescription("circuits/sha-1.txt", input, in2); return builder.seq(parser); }
@Override public DRes<List<SBool>> DES(List<DRes<SBool>> plainText, List<DRes<SBool>> keyMaterial) { BristolCircuitParser parser = BristolCircuitParser .readCircuitDescription("circuits/DES-non-expanded.txt", plainText, keyMaterial); return builder.seq(parser); }
@Override public DRes<List<SBool>> MD5(List<DRes<SBool>> input) { // empty list since the parser will only use input1 as inputs. List<DRes<SBool>> in2 = new ArrayList<>(); BristolCircuitParser parser = BristolCircuitParser.readCircuitDescription("circuits/md5.txt", input, in2); return builder.seq(parser); }
@Override public DRes<List<SBool>> AES(List<DRes<SBool>> plainText, List<DRes<SBool>> keyMaterial) { BristolCircuitParser parser = BristolCircuitParser .readCircuitDescription("circuits/AES-non-expanded.txt", plainText, keyMaterial); return builder.seq(parser); }
@Override public void openAndPrint(String label, List<DRes<SBool>> toPrint, PrintStream stream) { builder.seq(new BinaryOpenAndPrint(label, toPrint, stream)); }
@Override public DRes<SBool> xnor(DRes<SBool> left, DRes<SBool> right) { return builder.seq(new XnorFromXorAndNot(left, right)); }
private void compareAndSwapAtIndices(int i, int j, ProtocolBuilderBinary builder) { builder.seq(seq -> { return seq.advancedBinary().keyedCompareAndSwap(numbers.get(i), numbers.get(j)); }).seq((seq, res) -> { numbers.set(i, res.get(0)); numbers.set(j, res.get(1)); return null; }); }