diff --git a/python/cc/BUILD.bazel b/python/cc/BUILD.bazel index b33c5524ad518f1890d5d8672e6a6bc4f74a702f..95fe24b6a155a5d9e48b1319b922e425ad85a8cc 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 0000000000000000000000000000000000000000..211a20581839a663393537be3e2e96f7ac989db5 --- /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 0000000000000000000000000000000000000000..05c81246be99f92c8b06e23b8cf306d681475617 --- /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_