[Libreoffice-commits] online.git: test/Makefile.am test/WopiProofTests.cpp wsd/ProofKey.cpp wsd/ProofKey.hpp

Michael Meeks (via logerrit) logerrit at kemper.freedesktop.org
Wed Apr 8 08:59:07 UTC 2020


 test/Makefile.am        |    1 +
 test/WopiProofTests.cpp |   36 ++++++++++++++++++++++++++++++++++++
 wsd/ProofKey.cpp        |   30 +-----------------------------
 wsd/ProofKey.hpp        |   35 +++++++++++++++++++++++++++++++++++
 4 files changed, 73 insertions(+), 29 deletions(-)

New commits:
commit a2b9fc474a1b250fdaf8510a35089d4513de9585
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Tue Apr 7 21:42:30 2020 +0100
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Wed Apr 8 10:58:49 2020 +0200

    Proof: re-factor - publicise some internals to make testing easier.
    
    Also add dummy, run-every-build test to validate wopi like proofs.
    
    Change-Id: Ic2dc647a8d61693ae87b6523aaa30632979fd5d6
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/91854
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/test/Makefile.am b/test/Makefile.am
index db5c6fb95..629b52c19 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -71,6 +71,7 @@ test_base_source = \
 	TileQueueTests.cpp \
 	WhiteBoxTests.cpp \
 	DeltaTests.cpp \
+	WopiProofTests.cpp \
 	$(wsd_sources)
 
 unittest_CPPFLAGS = -I$(top_srcdir) -DBUILDING_TESTS -DSTANDALONE_CPPUNIT
diff --git a/test/WopiProofTests.cpp b/test/WopiProofTests.cpp
new file mode 100644
index 000000000..1d2b1d5cb
--- /dev/null
+++ b/test/WopiProofTests.cpp
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <config.h>
+
+#include <test/lokassert.hpp>
+
+#include <ProofKey.hpp>
+#include <Util.hpp>
+
+/// Delta unit-tests.
+class WopiProofTests : public CPPUNIT_NS::TestFixture
+{
+    CPPUNIT_TEST_SUITE(WopiProofTests);
+
+    CPPUNIT_TEST(testProof);
+
+    CPPUNIT_TEST_SUITE_END();
+
+    void testProof();
+};
+
+void WopiProofTests::testProof()
+{
+    LOK_ASSERT(1 > 0);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(WopiProofTests);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/wsd/ProofKey.cpp b/wsd/ProofKey.cpp
index e0dba1b46..489ad89b1 100644
--- a/wsd/ProofKey.cpp
+++ b/wsd/ProofKey.cpp
@@ -14,9 +14,7 @@
 
 #include <algorithm>
 #include <cassert>
-#include <chrono>
 #include <cstdlib>
-#include <memory>
 #include <vector>
 
 #include <Poco/Base64Decoder.h>
@@ -95,31 +93,7 @@ std::string BytesToBase64(const std::vector<unsigned char>& bytes)
     return oss.str();
 }
 
-class Proof {
-public:
-    Proof();
-    VecOfStringPairs GetProofHeaders(const std::string& access_token, const std::string& uri) const;
-    const VecOfStringPairs& GetProofKeyAttributes() const { return m_aAttribs; }
-private:
-    static std::string ProofKeyPath();
-
-    // modulus and exponent are big-endian vectors
-    static std::vector<unsigned char> RSA2CapiBlob(const std::vector<unsigned char>& modulus,
-                                                   const std::vector<unsigned char>& exponent);
-
-    // Returns .Net tick (=100ns) count since 0001-01-01 00:00:00 Z
-    // See https://docs.microsoft.com/en-us/dotnet/api/system.datetime.ticks
-    static int64_t DotNetTicks(const std::chrono::system_clock::time_point& utc);
-    // Returns bytes to sign and base64-encode
-    // See http://www.wictorwilen.se/sharepoint-2013-building-your-own-wopi-client-part-2
-    static std::vector<unsigned char> GetProof(const std::string& access_token,
-                                               const std::string& uri, int64_t ticks);
-    // Signs bytes and returns base64-encoded string
-    std::string SignProof(const std::vector<unsigned char>& proof) const;
-
-    const std::unique_ptr<const Poco::Crypto::RSAKey> m_pKey;
-    VecOfStringPairs m_aAttribs;
-};
+}
 
 Proof::Proof()
     : m_pKey([]() -> Poco::Crypto::RSAKey* {
@@ -262,8 +236,6 @@ const Proof& GetProof()
     return proof;
 }
 
-}
-
 VecOfStringPairs GetProofHeaders(const std::string& access_token, const std::string& uri)
 {
     return GetProof().GetProofHeaders(access_token, uri);
diff --git a/wsd/ProofKey.hpp b/wsd/ProofKey.hpp
index f02403db1..e74942e70 100644
--- a/wsd/ProofKey.hpp
+++ b/wsd/ProofKey.hpp
@@ -14,9 +14,44 @@
 #include <string>
 #include <utility>
 #include <vector>
+#include <chrono>
+#include <memory>
 
 typedef std::vector<std::pair<std::string, std::string>> VecOfStringPairs;
 
+namespace Poco {
+    namespace Crypto {
+        class RSAKey;
+    }
+}
+
+class Proof {
+public:
+    Proof();
+    VecOfStringPairs GetProofHeaders(const std::string& access_token, const std::string& uri) const;
+    const VecOfStringPairs& GetProofKeyAttributes() const { return m_aAttribs; }
+private:
+    static std::string ProofKeyPath();
+
+    // modulus and exponent are big-endian vectors
+    static std::vector<unsigned char> RSA2CapiBlob(const std::vector<unsigned char>& modulus,
+                                                   const std::vector<unsigned char>& exponent);
+
+    // Returns .Net tick (=100ns) count since 0001-01-01 00:00:00 Z
+    // See https://docs.microsoft.com/en-us/dotnet/api/system.datetime.ticks
+    static int64_t DotNetTicks(const std::chrono::system_clock::time_point& utc);
+    // Returns bytes to sign and base64-encode
+    // See http://www.wictorwilen.se/sharepoint-2013-building-your-own-wopi-client-part-2
+    static std::vector<unsigned char> GetProof(const std::string& access_token,
+                                               const std::string& uri, int64_t ticks);
+    // Signs bytes and returns base64-encoded string
+    std::string SignProof(const std::vector<unsigned char>& proof) const;
+
+    const std::unique_ptr<const Poco::Crypto::RSAKey> m_pKey;
+    VecOfStringPairs m_aAttribs;
+};
+
+
 // Returns pairs <header_name, header_value> to add to request
 // The headers returned are X-WOPI-TimeStamp, X-WOPI-Proof
 // If no proof key, returns empty vector


More information about the Libreoffice-commits mailing list