/// <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; }
public Task SendAsync(Pair <Bit>[] correlationBits, int numberOfInvocations) { return(_generalOt.SendAsync(ConvertOptionBitsToBytes(correlationBits), numberOfInvocations, 1)); }