/** * Send the serialized message from the current 1-out-of-2 OT. * * @param messageZero The message to send for choice zero * @param messageOne The message to send for choice one */ public void send(byte[] messageZero, byte[] messageOne) { // Check if there is still an unused random OT stored, if not, execute a // random OT extension if (offset < 0 || offset >= batchSize) { randomMessages = sender.extend(batchSize); offset = 0; } doActualSend(messageZero, messageOne); offset++; }
@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()); }