/// <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]); } }
public Task <BitArray> ReceiveAsync(BitArray selectionIndices, int numberOfInvocations) { return(_generalOt.ReceiveAsync(selectionIndices, numberOfInvocations, 1).ContinueWith( task => ConvertOutputByteToBit(task.Result) )); }