remove `aws_crypto`
MODIFY
tensorflow_io/core/plugins/s3/BUILD
tensorflow_io/core/plugins/s3/BUILD
@@ -10,8 +10,6 @@ load(
cc_library(
name = "s3",
srcs = [
- "aws_crypto.cc",
- "aws_crypto.h",
"aws_logging.cc",
"aws_logging.h",
"s3_filesystem.cc",

DELETE
tensorflow_io/core/plugins/s3/aws_crypto.cc
-/* Copyright 2020 The TensorFlow Authors. 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.
-==============================================================================*/
-#include "tensorflow_io/core/plugins/s3/aws_crypto.h"
-
-#include <aws/core/utils/crypto/HashResult.h>
-#include <aws/s3/S3Client.h>
-#include <openssl/hmac.h>
-#include <openssl/rand.h>
-#include <openssl/sha.h>
-
-namespace tensorflow {
-namespace io {
-namespace s3 {
-namespace tf_s3_filesystem {
-
-namespace {
-class AWSSha256HMACOpenSSLImpl : public Aws::Utils::Crypto::HMAC {
- public:
- AWSSha256HMACOpenSSLImpl() {}
-
- virtual ~AWSSha256HMACOpenSSLImpl() = default;
-
- Aws::Utils::Crypto::HashResult Calculate(
- const Aws::Utils::ByteBuffer& toSign,
- const Aws::Utils::ByteBuffer& secret) override {
- unsigned int length = SHA256_DIGEST_LENGTH;
- Aws::Utils::ByteBuffer digest(length);
- memset(digest.GetUnderlyingData(), 0, length);
-
- HMAC_CTX ctx;
- HMAC_CTX_init(&ctx);
-
- HMAC_Init_ex(&ctx, secret.GetUnderlyingData(),
- static_cast<int>(secret.GetLength()), EVP_sha256(), NULL);
- HMAC_Update(&ctx, toSign.GetUnderlyingData(), toSign.GetLength());
- HMAC_Final(&ctx, digest.GetUnderlyingData(), &length);
- HMAC_CTX_cleanup(&ctx);
-
- return Aws::Utils::Crypto::HashResult(std::move(digest));
- }
-};
-
-class AWSSha256OpenSSLImpl : public Aws::Utils::Crypto::Hash {
- public:
- AWSSha256OpenSSLImpl() {}
-
- virtual ~AWSSha256OpenSSLImpl() = default;
-
- Aws::Utils::Crypto::HashResult Calculate(const Aws::String& str) override {
- SHA256_CTX sha256;
- SHA256_Init(&sha256);
- SHA256_Update(&sha256, str.data(), str.size());
-
- Aws::Utils::ByteBuffer hash(SHA256_DIGEST_LENGTH);
- SHA256_Final(hash.GetUnderlyingData(), &sha256);
-
- return Aws::Utils::Crypto::HashResult(std::move(hash));
- }
-
- Aws::Utils::Crypto::HashResult Calculate(Aws::IStream& stream) override {
- SHA256_CTX sha256;
- SHA256_Init(&sha256);
-
- auto currentPos = stream.tellg();
- if (currentPos == std::streampos(std::streamoff(-1))) {
- currentPos = 0;
- stream.clear();
- }
-
- stream.seekg(0, stream.beg);
-
- char streamBuffer
- [Aws::Utils::Crypto::Hash::INTERNAL_HASH_STREAM_BUFFER_SIZE];
- while (stream.good()) {
- stream.read(streamBuffer,
- Aws::Utils::Crypto::Hash::INTERNAL_HASH_STREAM_BUFFER_SIZE);
- auto bytesRead = stream.gcount();
-
- if (bytesRead > 0) {
- SHA256_Update(&sha256, streamBuffer, static_cast<size_t>(bytesRead));
- }
- }
-
- stream.clear();
- stream.seekg(currentPos, stream.beg);
-
- Aws::Utils::ByteBuffer hash(SHA256_DIGEST_LENGTH);
- SHA256_Final(hash.GetUnderlyingData(), &sha256);
-
- return Aws::Utils::Crypto::HashResult(std::move(hash));
- }
-};
-
-class AWSSecureRandomBytesImpl : public Aws::Utils::Crypto::SecureRandomBytes {
- public:
- AWSSecureRandomBytesImpl() {}
- virtual ~AWSSecureRandomBytesImpl() = default;
- void GetBytes(unsigned char* buffer, size_t bufferSize) override {
- assert(buffer);
- int success = RAND_bytes(buffer, static_cast<int>(bufferSize));
- if (success != 1) {
- m_failure = true;
- }
- }
-
- private:
- bool m_failure;
-};
-
-} // namespace
-
-std::shared_ptr<Aws::Utils::Crypto::Hash>
-AWSSHA256Factory::CreateImplementation() const {
- return Aws::MakeShared<AWSSha256OpenSSLImpl>(AWSCryptoAllocationTag);
-}
-
-std::shared_ptr<Aws::Utils::Crypto::HMAC>
-AWSSHA256HmacFactory::CreateImplementation() const {
- return Aws::MakeShared<AWSSha256HMACOpenSSLImpl>(AWSCryptoAllocationTag);
-}
-
-std::shared_ptr<Aws::Utils::Crypto::SecureRandomBytes>
-AWSSecureRandomFactory::CreateImplementation() const {
- return Aws::MakeShared<AWSSecureRandomBytesImpl>(AWSCryptoAllocationTag);
-}
-
-} // namespace tf_s3_filesystem
-} // namespace s3
-} // namespace io
-} // namespace tensorflow

DELETE
tensorflow_io/core/plugins/s3/aws_crypto.h
-/* Copyright 2020 The TensorFlow Authors. 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.
-==============================================================================*/
-#ifndef TENSORFLOW_C_EXPERIMENTAL_FILESYSTEM_PLUGINS_S3_AWS_CRYPTO_H_
-#define TENSORFLOW_C_EXPERIMENTAL_FILESYSTEM_PLUGINS_S3_AWS_CRYPTO_H_
-
-#include <aws/core/Aws.h>
-#include <aws/core/utils/crypto/Factories.h>
-#include <aws/core/utils/crypto/HMAC.h>
-#include <aws/core/utils/crypto/Hash.h>
-#include <aws/core/utils/crypto/SecureRandom.h>
-
-namespace tensorflow {
-namespace io {
-namespace s3 {
-namespace tf_s3_filesystem {
-constexpr char AWSCryptoAllocationTag[] = "AWSCryptoAllocation";
-
-class AWSSHA256Factory : public Aws::Utils::Crypto::HashFactory {
- public:
- std::shared_ptr<Aws::Utils::Crypto::Hash> CreateImplementation()
- const override;
-};
-
-class AWSSHA256HmacFactory : public Aws::Utils::Crypto::HMACFactory {
- public:
- std::shared_ptr<Aws::Utils::Crypto::HMAC> CreateImplementation()
- const override;
-};
-
-class AWSSecureRandomFactory : public Aws::Utils::Crypto::SecureRandomFactory {
- public:
- std::shared_ptr<Aws::Utils::Crypto::SecureRandomBytes> CreateImplementation()
- const override;
-};
-
-} // namespace tf_s3_filesystem
-} // namespace s3
-} // namespace io
-} // namespace tensorflow
-
-#endif // TENSORFLOW_C_EXPERIMENTAL_FILESYSTEM_PLUGINS_S3_AWS_CRYPTO_H_

MODIFY
tensorflow_io/core/plugins/s3/s3_filesystem.cc
tensorflow_io/core/plugins/s3/s3_filesystem.cc
@@ -39,7 +39,6 @@ limitations under the License.
#include "tensorflow/c/logging.h"
#include "tensorflow/c/tf_status.h"
#include "tensorflow_io/core/plugins/file_system_plugins.h"
-#include "tensorflow_io/core/plugins/s3/aws_crypto.h"
#include "tensorflow_io/core/plugins/s3/aws_logging.h"
namespace tensorflow {
@@ -193,18 +192,6 @@ static void GetS3Client(tf_s3_filesystem::S3File* s3_file) {
tf_s3_filesystem::AWSLogSystem::InitializeAWSLogging();
Aws::SDKOptions options;
- options.cryptoOptions.sha256Factory_create_fn = []() {
- return Aws::MakeShared<tf_s3_filesystem::AWSSHA256Factory>(
- tf_s3_filesystem::AWSCryptoAllocationTag);
- };
- options.cryptoOptions.sha256HMACFactory_create_fn = []() {
- return Aws::MakeShared<tf_s3_filesystem::AWSSHA256HmacFactory>(
- tf_s3_filesystem::AWSCryptoAllocationTag);
- };
- options.cryptoOptions.secureRandomFactory_create_fn = []() {
- return Aws::MakeShared<tf_s3_filesystem::AWSSecureRandomFactory>(
- tf_s3_filesystem::AWSCryptoAllocationTag);
- };
Aws::InitAPI(options);
// The creation of S3Client disables virtual addressing:
@@ -218,7 +205,7 @@ static void GetS3Client(tf_s3_filesystem::S3File* s3_file) {
Aws::New<Aws::S3::S3Client>(
kS3ClientAllocationTag, GetDefaultClientConfig(),
Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false),
- [&options](Aws::S3::S3Client* s3_client) {
+ [options](Aws::S3::S3Client* s3_client) {
if (s3_client != nullptr) {
Aws::Delete(s3_client);
Aws::ShutdownAPI(options);

remove `aws_crypto` (#1385)