From 6881b38c3abfc0b784fb49c04004c1cf7828e1eb Mon Sep 17 00:00:00 2001 From: paulavidas <paulavidas@google.com> Date: Fri, 23 Aug 2019 04:27:57 -0700 Subject: [PATCH] Simple output stream. PiperOrigin-RevId: 265029049 --- python/cc/BUILD.bazel | 9 +++++ python/cc/clif/simple_output_stream.clif | 25 ++++++++++++++ python/cc/simple_output_stream.h | 43 ++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 python/cc/clif/simple_output_stream.clif create mode 100644 python/cc/simple_output_stream.h diff --git a/python/cc/BUILD.bazel b/python/cc/BUILD.bazel index b33c5524a..95fe24b6a 100644 --- a/python/cc/BUILD.bazel +++ b/python/cc/BUILD.bazel @@ -14,3 +14,12 @@ cc_library( "//proto:tink_cc_proto", ], ) + +cc_library( + name = "simple_output_stream", + hdrs = ["simple_output_stream.h"], + deps = [ + "//cc/util:status", + "@com_google_absl//absl/strings", + ], +) diff --git a/python/cc/clif/simple_output_stream.clif b/python/cc/clif/simple_output_stream.clif new file mode 100644 index 000000000..211a20581 --- /dev/null +++ b/python/cc/clif/simple_output_stream.clif @@ -0,0 +1,25 @@ +# 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. + +from "tink/python/util/clif.h" import * # Status + +from "tink/python/cc/simple_output_stream.h": + namespace `crypto::tink`: + class SimpleOutputStream: + @virtual + def `Write` as write(self, data: bytes) -> Status + + @virtual + def `Close` as close(self) -> Status + + @virtual + def `Position` as position(self) -> int diff --git a/python/cc/simple_output_stream.h b/python/cc/simple_output_stream.h new file mode 100644 index 000000000..05c81246b --- /dev/null +++ b/python/cc/simple_output_stream.h @@ -0,0 +1,43 @@ +// 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_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_ +#define TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_ + +#include "absl/strings/string_view.h" +#include "tink/util/status.h" + +namespace crypto { +namespace tink { + +// A simple interface for an output stream like object which can be used to go +// from Python to C++ via CLIF and vice versa. +class SimpleOutputStream { + public: + // Writes 'data' to the underlying stream. + virtual util::Status Write(absl::string_view data) = 0; + + // Closes the underlying stream. + virtual util::Status Close() = 0; + + // Returns the total number of bytes written. + virtual int64_t Position() const = 0; + + virtual ~SimpleOutputStream() {} +}; + +} // namespace tink +} // namespace crypto + +#endif // TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_ -- GitLab