aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpavook <pavook@yandex-team.com>2024-12-26 17:46:21 +0300
committerpavook <pavook@yandex-team.com>2024-12-26 18:02:44 +0300
commitef8dcad43d7feb65ecc8a8c753a59bdbde58f042 (patch)
treea50d3dc32064866cfe5e408ccdbd932c25ae44a2
parent45198a41510fa00077aa145b8ac5f976855a0951 (diff)
downloadydb-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.cpp21
-rw-r--r--yt/yt/client/signature/generator.h31
-rw-r--r--yt/yt/client/signature/public.h11
-rw-r--r--yt/yt/client/signature/signature.h4
-rw-r--r--yt/yt/client/signature/validator.cpp22
-rw-r--r--yt/yt/client/signature/validator.h30
-rw-r--r--yt/yt/client/ya.make2
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