// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COBALT_SRC_ALGORITHMS_PRIVACY_RAPPOR_H_
#define COBALT_SRC_ALGORITHMS_PRIVACY_RAPPOR_H_

#include <random>
#include <vector>

#include "src/algorithms/random/random.h"

namespace cobalt {

// Given a representation of a bitvector, ApplyRapporNoise flips each bit of the vector
// independently with some probability and returns the result.
//
// The input bitvector should be represented as a list |indices| of the positions of the "1" bits,
// together with the |max_index| of the vector (i.e., the total length of the vector, minus 1).
//
// For example, the bit vector 01000110 is represented as the list |indices| = {1, 5, 6} together
// with |max_index| = 7.
//
// The argument |p| is the probability that an individual bit is flipped. Randomness is obtained
// from |gen|, which must be implemented by a cryptographically secure random number generator.
//
// The output is a list of the indices of the the "1" bits in the modified bitvector. Each element
// of this list is less than or equal to |max_index|.
std::vector<uint64_t> ApplyRapporNoise(const std::vector<uint64_t>& indices, uint64_t max_index,
                                       double p, SecureBitGeneratorInterface<uint32_t>* gen);

// Given a |raw_count| of set bits from a population of |num_contributions| total contributed bits,
// encoded with a RAPPOR noise parameter of |p|, estimate the true count. (See Erlingsson, Pihur,
// Korolova, "RAPPOR: Randomized Aggregatable Privacy-Preserving Ordinal Response" section 4, taking
// f = 1.) The estimated true count is not clipped to the valid range. The returned value can be
// negative or in excess of num_contributions.
double DebiasRapporCount(uint64_t raw_count, uint64_t num_contributions, double p);

}  // namespace cobalt

#endif  // COBALT_SRC_ALGORITHMS_PRIVACY_RAPPOR_H_
