@Override public List<StrictBitVector> receive(StrictBitVector choiceBits, int sizeOfEachMessage) { if (this.receiver == null) { this.receiver = rot.createReceiver(); } int amountToPreprocess = computeExtensionSize(choiceBits.getSize(), comSecParam, statSecParam); byte[] extraByteChoices = Arrays.copyOf(choiceBits.toByteArray(), amountToPreprocess / Byte.SIZE); List<StrictBitVector> messages = receiver.extend(new StrictBitVector(extraByteChoices)); return messages.parallelStream().limit(choiceBits.getSize()) .map(m -> LengthAdjustment.adjust(m.toByteArray(), sizeOfEachMessage / Byte.SIZE)) .map(StrictBitVector::new) .collect(Collectors.toList()); }
@Override public List<Pair<StrictBitVector, StrictBitVector>> send(int numMessages, int sizeOfEachMessage) { if (this.sender == null) { this.sender = rot.createSender(); } int amountToPreprocess = computeExtensionSize(numMessages, comSecParam, statSecParam); Pair<List<StrictBitVector>, List<StrictBitVector>> messages = sender.extend(amountToPreprocess); List<StrictBitVector> zeroMessages = messages.getFirst().parallelStream().limit(numMessages) .map(m -> LengthAdjustment.adjust(m.toByteArray(), sizeOfEachMessage / Byte.SIZE)) .map(StrictBitVector::new) .collect(Collectors.toList()); List<StrictBitVector> oneMessages = messages.getSecond().parallelStream().limit(numMessages) .map(m -> LengthAdjustment.adjust(m.toByteArray(), sizeOfEachMessage / Byte.SIZE)) .map(StrictBitVector::new) .collect(Collectors.toList()); return IntStream.range(0, numMessages).parallel() .mapToObj(i -> new Pair<>(zeroMessages.get(i), oneMessages.get(i))) .collect(Collectors.toList()); }
@Override public RotBatch createRot(int otherId, Network network) { if (getMyId() == otherId) { throw new IllegalArgumentException("Cannot initialize with self"); } CoinTossing ct = new CoinTossing(getMyId(), otherId, getRandomGenerator()); ct.initialize(network); OtExtensionResourcePool otResources = new OtExtensionResourcePoolImpl(getMyId(), otherId, getPrgSeedLength(), getLambdaSecurityParam(), getInstanceId(), getRandomGenerator(), ct, seedOts.get(otherId)); return new BristolRotBatch(new RotFactory(otResources, network), getPrgSeedLength(), getLambdaSecurityParam()); }
RotFactory rotFactory = new RotFactory(otExtRes, network.get()); BristolOtFactory otFactory = new BristolOtFactory(rotFactory, otExtRes, network.get(), otBatchSize);
/** * Act as receiver in a 1-out-of-2 OT. * * @param choiceBit * The bit representing choice of message. False represents 0 and * true represents 1. */ @Override public StrictBitVector receive(boolean choiceBit) { if (this.receiver == null) { RotReceiver receiver = rot.createReceiver(); this.receiver = new BristolOtReceiver(receiver, resources, network, batchSize); } byte[] res = receiver.receive(choiceBit); return new StrictBitVector(res); } }
/** * Act as sender in a 1-out-of-2 OT. * * @param messageZero * The zero-choice message * @param messageOne * the one-choice message */ @Override public void send(StrictBitVector messageZero, StrictBitVector messageOne) { if (this.sender == null) { RotSender sender = rot.createSender(); this.sender = new BristolOtSender(sender, resources, network, batchSize); } this.sender.send(messageZero.toByteArray(), messageOne.toByteArray()); }