kmsp11/operation/crypter_interfaces.h (92 lines of code) (raw):

/* * Copyright 2021 Google LLC * * 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 KMSP11_OPERATION_CRYPTER_INTERFACES_H_ #define KMSP11_OPERATION_CRYPTER_INTERFACES_H_ #include "absl/status/statusor.h" #include "common/kms_client.h" #include "kmsp11/object.h" #include "kmsp11/util/errors.h" namespace cloud_kms::kmsp11 { class EncrypterInterface { public: virtual absl::StatusOr<absl::Span<const uint8_t>> Encrypt( KmsClient* client, absl::Span<const uint8_t> plaintext) = 0; virtual absl::Status EncryptUpdate(KmsClient* client, absl::Span<const uint8_t> plaintext_part) { return FailedPreconditionError( "provided mechanism does not support multi-part encryption", CKR_FUNCTION_FAILED, SOURCE_LOCATION); } virtual absl::StatusOr<absl::Span<const uint8_t>> EncryptFinal( KmsClient* client) { return FailedPreconditionError( "provided mechanism does not support multi-part encryption", CKR_FUNCTION_FAILED, SOURCE_LOCATION); } virtual ~EncrypterInterface() {} }; class DecrypterInterface { public: virtual absl::StatusOr<absl::Span<const uint8_t>> Decrypt( KmsClient* client, absl::Span<const uint8_t> ciphertext) = 0; virtual absl::Status DecryptUpdate(KmsClient* client, absl::Span<const uint8_t> ciphertext) { return FailedPreconditionError( "provided mechanism does not support multi-part decryption", CKR_FUNCTION_FAILED, SOURCE_LOCATION); } virtual absl::StatusOr<absl::Span<const uint8_t>> DecryptFinal( KmsClient* client) { return FailedPreconditionError( "provided mechanism does not support multi-part decryption", CKR_FUNCTION_FAILED, SOURCE_LOCATION); } virtual ~DecrypterInterface() {} }; class SignerInterface { public: virtual size_t signature_length() = 0; virtual Object* object() = 0; virtual absl::Status Sign(KmsClient* client, absl::Span<const uint8_t> data, absl::Span<uint8_t> signature) = 0; virtual absl::Status SignUpdate(KmsClient* client, absl::Span<const uint8_t> data) { return FailedPreconditionError( absl::StrFormat( "provided mechanism %#x does not support multi-part signing", object()->algorithm().algorithm), CKR_FUNCTION_FAILED, SOURCE_LOCATION); } virtual absl::Status SignFinal(KmsClient* client, absl::Span<uint8_t> signature) { return FailedPreconditionError( absl::StrFormat( "provided mechanism %#x does not support multi-part signing", object()->algorithm().algorithm), CKR_FUNCTION_FAILED, SOURCE_LOCATION); }; virtual ~SignerInterface() {} }; class VerifierInterface { public: virtual Object* object() = 0; virtual absl::Status Verify(KmsClient* client, absl::Span<const uint8_t> data, absl::Span<const uint8_t> signature) = 0; virtual absl::Status VerifyUpdate(KmsClient* client, absl::Span<const uint8_t> data) { return FailedPreconditionError( absl::StrFormat( "provided mechanism %#x does not support multi-part verify", object()->algorithm().algorithm), CKR_FUNCTION_FAILED, SOURCE_LOCATION); }; virtual absl::Status VerifyFinal(KmsClient* client, absl::Span<const uint8_t> signature) { return FailedPreconditionError( absl::StrFormat( "provided mechanism %#x does not support multi-part verify", object()->algorithm().algorithm), CKR_FUNCTION_FAILED, SOURCE_LOCATION); }; virtual ~VerifierInterface() {} }; } // namespace cloud_kms::kmsp11 #endif // KMSP11_OPERATION_CRYPTER_INTERFACES_H_