public Task <PreprocessedSenderBatch> PreprocessSenderAsync(IMessageChannel channel, int numberOfInvocations) { byte[] randomOptionsBuffer = _randomNumberGenerator.GetBytes(BitQuadrupleArray.RequiredBytes(numberOfInvocations)); BitQuadrupleArray randomOptions = BitQuadrupleArray.FromBytes(randomOptionsBuffer, numberOfInvocations); return(_obliviousTransfer.SendAsync(channel, randomOptions, numberOfInvocations) .ContinueWith(task => new PreprocessedSenderBatch(randomOptions))); }
private async Task <BitArray> ComputeSenderSharesAsync(IMessageChannel channel, BitArray leftShares, BitArray rightShares, int numberOfInvocations) { BitArray randomShares = _randomNumberGenerator.GetBits(numberOfInvocations); BitQuadrupleArray options = new BitQuadrupleArray(numberOfInvocations); for (int i = 0; i < numberOfInvocations; ++i) { options[i] = new BitQuadruple( randomShares[i], // 00 randomShares[i] ^ leftShares[i], // 01 randomShares[i] ^ rightShares[i], // 10 randomShares[i] ^ leftShares[i] ^ rightShares[i] // 11 ); } await _obliviousTransfer.SendAsync(channel, options, numberOfInvocations); return(randomShares); }