/// <summary>
        /// Performs k many 1-out-of-2 OTs on k bits for the sender, where k is the security parameter, using the base OT implementation.
        ///
        /// These are subsequently expanded into m many 1oo2 OTs on arbitrarily long messages
        /// by the SendAsync method, where m is only bounded by the amount of secure randomness the random
        /// oracle implementation can produce.
        /// </summary>
        public async Task ExecuteSenderBaseOTAsync()
        {
            _senderState = new SenderState();
            _senderState.RandomChoices = RandomNumberGenerator.GetBits(SecurityParameter);

            // retrieve seeds for OT extension via _securityParameter many base OTs
            int requiredBytes = BitArray.RequiredBytes(SecurityParameter);

            byte[][] seeds = await _baseOT.ReceiveAsync(_senderState.RandomChoices, SecurityParameter, requiredBytes);

            Debug.Assert(seeds.Length == SecurityParameter);

            // initializing a random oracle based on each seed
            _senderState.SeededRandomOracles = new IEnumerable <byte> [SecurityParameter];
            for (int k = 0; k < SecurityParameter; ++k)
            {
                Debug.Assert(seeds[k].Length == requiredBytes);
                _senderState.SeededRandomOracles[k] = RandomOracleProvider.Create().Invoke(seeds[k]);
            }
        }
Пример #2
0
 public Task <BitArray> ReceiveAsync(BitArray selectionIndices, int numberOfInvocations)
 {
     return(_generalOt.ReceiveAsync(selectionIndices, numberOfInvocations, 1).ContinueWith(
                task => ConvertOutputByteToBit(task.Result)
                ));
 }