aboutsummaryrefslogtreecommitdiff
path: root/cc/deterministic_aead.h
diff options
context:
space:
mode:
authorBartosz Przydatek <przydatek@google.com>2018-10-04 02:45:12 -0700
committerTink Team <noreply@google.com>2018-10-04 11:48:16 -0700
commit16486f27e7f14fa7bfaff6b137606f52f1d94cf9 (patch)
tree7ad90d89375e54a8e9f039e139048feaee04a00f /cc/deterministic_aead.h
parent42a021f9c5bb949f75c95779a3b1f83ae3020e40 (diff)
downloadtink-16486f27e7f14fa7bfaff6b137606f52f1d94cf9.tar.gz
Renaming C++ Daead-interface to DeterministicAead (for compatibility with Java).
PiperOrigin-RevId: 215708241 GitOrigin-RevId: b596f3df1821ab588e144bbd47790cda3fcf082a
Diffstat (limited to 'cc/deterministic_aead.h')
-rw-r--r--cc/deterministic_aead.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/cc/deterministic_aead.h b/cc/deterministic_aead.h
new file mode 100644
index 000000000..73027b6fb
--- /dev/null
+++ b/cc/deterministic_aead.h
@@ -0,0 +1,61 @@
+// Copyright 2017 Google Inc.
+//
+// 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.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef TINK_DETERMINISTIC_AEAD_H_
+#define TINK_DETERMINISTIC_AEAD_H_
+
+#include "absl/strings/string_view.h"
+#include "tink/util/statusor.h"
+
+namespace crypto {
+namespace tink {
+
+///////////////////////////////////////////////////////////////////////////////
+// The interface for deterministic authenticated encryption with associated
+// data.
+// TODO(bleichen): Copy the interface from Java.
+// Check the properties:
+// - authenticated
+// - secure in multi-user setting
+// - thread safe/copy safe
+// References:
+// https://eprint.iacr.org/2016/1124.pdf
+class DeterministicAead {
+ public:
+ // Encrypts 'plaintext' with 'associated_data' as associated data
+ // deterministically, and returns the resulting ciphertext.
+ // The ciphertext allows for checking authenticity and integrity
+ // of the associated data, but does not guarantee its secrecy.
+ virtual crypto::tink::util::StatusOr<std::string> EncryptDeterministically(
+ absl::string_view plaintext,
+ absl::string_view associated_data) const = 0;
+
+ // Decrypts 'ciphertext' with 'associated_data' as associated data,
+ // and returns the resulting plaintext.
+ // The decryption verifies the authenticity and integrity
+ // of the associated data, but there are no guarantees wrt. secrecy
+ // of that data.
+ virtual crypto::tink::util::StatusOr<std::string> DecryptDeterministically(
+ absl::string_view ciphertext,
+ absl::string_view associated_data) const = 0;
+
+ virtual ~DeterministicAead() {}
+};
+
+} // namespace tink
+} // namespace crypto
+
+#endif // TINK_DETERMINISTIC_AEAD_H_