aboutsummaryrefslogtreecommitdiff
path: root/client/cpp/rappor_deps.h
diff options
context:
space:
mode:
Diffstat (limited to 'client/cpp/rappor_deps.h')
-rw-r--r--client/cpp/rappor_deps.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/client/cpp/rappor_deps.h b/client/cpp/rappor_deps.h
new file mode 100644
index 0000000..264a066
--- /dev/null
+++ b/client/cpp/rappor_deps.h
@@ -0,0 +1,75 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This header declares the dependencies that the application must provide to
+// the RAPPOR.
+
+#ifndef RAPPOR_DEPS_H_
+#define RAPPOR_DEPS_H_
+
+#include <stdint.h> // for uint32_t
+#include <string>
+#include <vector>
+
+namespace rappor {
+
+// rappor::Bits type is used for Bloom Filter, PRR, and IRR
+typedef uint32_t Bits;
+
+// rappor::Encoder needs a hash function for the bloom filter, and an HMAC
+// function for the PRR.
+
+typedef bool HashFunc(const std::string& value, std::vector<uint8_t>* output);
+typedef bool HmacFunc(const std::string& key, const std::string& value,
+ std::vector<uint8_t>* output);
+
+// Interface that the encoder use to generate randomness for the IRR.
+// Applications should implement this based on their platform and requirements.
+class IrrRandInterface {
+ public:
+ virtual ~IrrRandInterface() {}
+ // Compute a bitmask with each bit set to 1 with probability 'prob'.
+ // Returns false if there is an error.
+ virtual bool GetMask(float prob, int num_bits, Bits* mask_out) const = 0;
+};
+
+// Dependencies
+// - hash_func: hash function for the Bloom Filter client step
+// - client_secret: key for deterministic randomness in the PRR
+// - hmac_func: function for deterministic randomness in the PRR
+// - irr_rand: randomness for the IRR
+
+class Deps {
+ public:
+ Deps(HashFunc* const hash_func, const std::string& client_secret,
+ HmacFunc* const hmac_func, const IrrRandInterface& irr_rand)
+ : hash_func_(hash_func),
+ client_secret_(client_secret),
+ hmac_func_(hmac_func),
+ irr_rand_(irr_rand) {
+ }
+
+ private:
+ friend class Encoder;
+
+ HashFunc* hash_func_; // for bloom filter
+ const std::string client_secret_; // for PRR; copy of constructor param
+ HmacFunc* hmac_func_; // PRR
+ const IrrRandInterface& irr_rand_; // IRR
+};
+
+} // namespace rappor
+
+#endif // RAPPOR_DEPS_H_
+