Browse Source

Add signature generator and validator interfaces to client

* This is needed to support passing around generator pointers
commit_hash:e115e34da02f8d8b7ad95660fe61db3bbd579324
pavook 2 months ago
parent
commit
ef8dcad43d

+ 21 - 0
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

+ 31 - 0
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

+ 11 - 0
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

+ 2 - 2
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);

+ 22 - 0
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
+

+ 30 - 0
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

+ 2 - 0
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