diff options
author | pavook <pavook@yandex-team.com> | 2024-12-26 17:46:21 +0300 |
---|---|---|
committer | pavook <pavook@yandex-team.com> | 2024-12-26 18:02:44 +0300 |
commit | ef8dcad43d7feb65ecc8a8c753a59bdbde58f042 (patch) | |
tree | a50d3dc32064866cfe5e408ccdbd932c25ae44a2 | |
parent | 45198a41510fa00077aa145b8ac5f976855a0951 (diff) | |
download | ydb-ef8dcad43d7feb65ecc8a8c753a59bdbde58f042.tar.gz |
Add signature generator and validator interfaces to client
* This is needed to support passing around generator pointers
commit_hash:e115e34da02f8d8b7ad95660fe61db3bbd579324
-rw-r--r-- | yt/yt/client/signature/generator.cpp | 21 | ||||
-rw-r--r-- | yt/yt/client/signature/generator.h | 31 | ||||
-rw-r--r-- | yt/yt/client/signature/public.h | 11 | ||||
-rw-r--r-- | yt/yt/client/signature/signature.h | 4 | ||||
-rw-r--r-- | yt/yt/client/signature/validator.cpp | 22 | ||||
-rw-r--r-- | yt/yt/client/signature/validator.h | 30 | ||||
-rw-r--r-- | yt/yt/client/ya.make | 2 |
7 files changed, 119 insertions, 2 deletions
diff --git a/yt/yt/client/signature/generator.cpp b/yt/yt/client/signature/generator.cpp new file mode 100644 index 0000000000..75b6962106 --- /dev/null +++ b/yt/yt/client/signature/generator.cpp @@ -0,0 +1,21 @@ +#include "generator.h" + +#include "signature.h" + +namespace NYT::NSignature { + +//////////////////////////////////////////////////////////////////////////////// + +NYson::TYsonString& ISignatureGenerator::GetHeader(const TSignaturePtr& signature) +{ + return signature->Header_; +} + +std::vector<std::byte>& ISignatureGenerator::GetSignature(const TSignaturePtr& signature) +{ + return signature->Signature_; +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NSignature diff --git a/yt/yt/client/signature/generator.h b/yt/yt/client/signature/generator.h new file mode 100644 index 0000000000..523f35d4c3 --- /dev/null +++ b/yt/yt/client/signature/generator.h @@ -0,0 +1,31 @@ +#pragma once + +#include "public.h" + +#include <yt/yt/core/yson/public.h> + +namespace NYT::NSignature { + +//////////////////////////////////////////////////////////////////////////////// + +class ISignatureGenerator + : public TRefCounted +{ +public: + //! Fills out the Signature_ and Header_ fields in a given TSignature + //! based on its payload. + virtual void Sign(const TSignaturePtr& signature) = 0; + + virtual ~ISignatureGenerator() = default; + +protected: + NYson::TYsonString& GetHeader(const TSignaturePtr& signature); + + std::vector<std::byte>& GetSignature(const TSignaturePtr& signature); +}; + +DEFINE_REFCOUNTED_TYPE(ISignatureGenerator) + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NSignature diff --git a/yt/yt/client/signature/public.h b/yt/yt/client/signature/public.h index 012d19cfda..845445d9e9 100644 --- a/yt/yt/client/signature/public.h +++ b/yt/yt/client/signature/public.h @@ -1,3 +1,5 @@ +#pragma once + #include <library/cpp/yt/memory/ref_counted.h> namespace NYT::NSignature { @@ -8,4 +10,13 @@ DECLARE_REFCOUNTED_CLASS(TSignature) /////////////////////////////////////////////////////////////////////////////// +DECLARE_REFCOUNTED_CLASS(ISignatureGenerator) +DECLARE_REFCOUNTED_CLASS(ISignatureValidator) + +/////////////////////////////////////////////////////////////////////////////// + +DECLARE_REFCOUNTED_CLASS(TKeyInfo) + +/////////////////////////////////////////////////////////////////////////////// + } // namespace NYT::NSignature diff --git a/yt/yt/client/signature/signature.h b/yt/yt/client/signature/signature.h index f6602994ce..b163ecc0e9 100644 --- a/yt/yt/client/signature/signature.h +++ b/yt/yt/client/signature/signature.h @@ -30,8 +30,8 @@ private: NYson::TYsonString Payload_; std::vector<std::byte> Signature_; - friend class TSignatureGenerator; - friend class TSignatureValidator; + friend class ISignatureGenerator; + friend class ISignatureValidator; friend void Serialize(const TSignature& signature, NYson::IYsonConsumer* consumer); friend void Deserialize(TSignature& signature, NYTree::INodePtr node); diff --git a/yt/yt/client/signature/validator.cpp b/yt/yt/client/signature/validator.cpp new file mode 100644 index 0000000000..710303bf85 --- /dev/null +++ b/yt/yt/client/signature/validator.cpp @@ -0,0 +1,22 @@ +#include "validator.h" + +#include "signature.h" + +namespace NYT::NSignature { + +//////////////////////////////////////////////////////////////////////////////// + +const NYson::TYsonString& ISignatureValidator::GetHeader(const TSignaturePtr& signature) +{ + return signature->Header_; +} + +const std::vector<std::byte>& ISignatureValidator::GetSignature(const TSignaturePtr& signature) +{ + return signature->Signature_; +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NSignature + diff --git a/yt/yt/client/signature/validator.h b/yt/yt/client/signature/validator.h new file mode 100644 index 0000000000..d3f3e76a69 --- /dev/null +++ b/yt/yt/client/signature/validator.h @@ -0,0 +1,30 @@ +#pragma once + +#include "public.h" + +#include <yt/yt/core/yson/public.h> +#include <yt/yt/core/actions/public.h> + +namespace NYT::NSignature { + +//////////////////////////////////////////////////////////////////////////////// + +class ISignatureValidator + : public TRefCounted +{ +public: + virtual TFuture<bool> Validate(const TSignaturePtr& signature) = 0; + + virtual ~ISignatureValidator() = default; + +protected: + const NYson::TYsonString& GetHeader(const TSignaturePtr& signature); + + const std::vector<std::byte>& GetSignature(const TSignaturePtr& signature); +}; + +DEFINE_REFCOUNTED_TYPE(ISignatureValidator) + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NSignature diff --git a/yt/yt/client/ya.make b/yt/yt/client/ya.make index 9d54b9ab4c..cc55baf1a4 100644 --- a/yt/yt/client/ya.make +++ b/yt/yt/client/ya.make @@ -102,6 +102,8 @@ SRCS( security_client/helpers.cpp signature/signature.cpp + signature/validator.cpp + signature/generator.cpp table_client/public.cpp table_client/adapters.cpp |