コード例 #1
0
        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)));
        }
コード例 #2
0
        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);
        }