/// <summary>
        /// Performs k many 1-out-of-2 OTs on k bits for the receiver, 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 ReceiveAsync method, where m is only bounded by the amount of secure randomness the random
        /// oracle implementation can produce.
        /// </summary>
        public async Task ExecuteReceiverBaseOTAsync()
        {
            _receiverState = new ReceiverState();
            // generating _securityParameter many pairs of random seeds of length _securityParameter
            Pair <byte[]>[] seeds = new Pair <byte[]> [SecurityParameter];
            for (int k = 0; k < SecurityParameter; ++k)
            {
                seeds[k] = new Pair <byte[]>(
                    RandomNumberGenerator.GetBits(SecurityParameter).ToBytes(),
                    RandomNumberGenerator.GetBits(SecurityParameter).ToBytes()
                    );
            }

            // base OTs as _sender_ with the seeds as inputs
            int  requiredBytes = BitArray.RequiredBytes(SecurityParameter);
            Task sendTask      = _baseOT.SendAsync(seeds, SecurityParameter, requiredBytes);

            // initializing a random oracle based on each seed
            _receiverState.SeededRandomOracles = new Pair <IEnumerable <byte> > [SecurityParameter];
            for (int k = 0; k < SecurityParameter; ++k)
            {
                _receiverState.SeededRandomOracles[k] = new Pair <IEnumerable <byte> >(
                    RandomOracleProvider.Create().Invoke(seeds[k][0]),
                    RandomOracleProvider.Create().Invoke(seeds[k][1])
                    );
            }
            ;

            await sendTask;
        }
コード例 #2
0
 public Task SendAsync(Pair <Bit>[] correlationBits, int numberOfInvocations)
 {
     return(_generalOt.SendAsync(ConvertOptionBitsToBytes(correlationBits), numberOfInvocations, 1));
 }