[Libreoffice-commits] online.git: Branch 'distro/collabora/co-4-2' - test/WopiProofTests.cpp wsd/ProofKey.cpp
Mike Kaganski (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jul 29 08:16:51 UTC 2020
test/WopiProofTests.cpp | 21 ++++++++++++++++-----
wsd/ProofKey.cpp | 21 +++++++++++++++++----
2 files changed, 33 insertions(+), 9 deletions(-)
New commits:
commit 1bb621594e59bcda64fa9cebc9f1d44bcd5dcec3
Author: Mike Kaganski <mike.kaganski at collabora.com>
AuthorDate: Tue Jul 28 11:12:14 2020 +0300
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Wed Jul 29 10:16:32 2020 +0200
Implement fake oldvalue/modulus/exponent and X-WOPI-ProofOld
... since these are required in proof-key element as per [MS-WOPI].
Change-Id: Ie770271ee911e3f7822375c00a83c6a32cd5f2fc
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/88743
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
(cherry picked from commit 571ef16df84f5181ed5d13297312daf31a5839fb)
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/99599
Reviewed-by: Andras Timar <andras.timar at collabora.com>
diff --git a/test/WopiProofTests.cpp b/test/WopiProofTests.cpp
index cfa1f57dc..6d73a3ab9 100644
--- a/test/WopiProofTests.cpp
+++ b/test/WopiProofTests.cpp
@@ -118,25 +118,33 @@ void WopiProofTests::testOurProof()
const VecOfStringPairs& discovery = gen.GetProofKeyAttributes();
int len = discovery.size();
- LOK_ASSERT_EQUAL(3, len);
+ LOK_ASSERT_EQUAL(6, len);
LOK_ASSERT_EQUAL(discovery[0].first, std::string("value"));
LOK_ASSERT_EQUAL(discovery[1].first, std::string("modulus"));
- std::string modulus = discovery[1].second;
+ const std::string modulus = discovery[1].second;
LOK_ASSERT_EQUAL(discovery[2].first, std::string("exponent"));
- std::string exponent = discovery[2].second;
+ const std::string exponent = discovery[2].second;
+ LOK_ASSERT_EQUAL(discovery[3].first, std::string("oldvalue"));
+ LOK_ASSERT_EQUAL(discovery[4].first, std::string("oldmodulus"));
+ const std::string oldmodulus = discovery[4].second;
+ LOK_ASSERT_EQUAL(discovery[5].first, std::string("oldexponent"));
+ const std::string oldexponent = discovery[5].second;
std::string access_token = "!££$%£^$-!---~@@{}OP";
std::string uri = "https://user@short.com:12345/blah?query_string=foo";
VecOfStringPairs pairs = gen.GetProofHeaders(access_token, uri);
len = pairs.size();
- LOK_ASSERT_EQUAL(2, len);
+ LOK_ASSERT_EQUAL(3, len);
LOK_ASSERT_EQUAL(pairs[0].first, std::string("X-WOPI-TimeStamp"));
std::string timestamp = pairs[0].second;
LOK_ASSERT_EQUAL(pairs[1].first, std::string("X-WOPI-Proof"));
std::string proof = pairs[1].second;
+ LOK_ASSERT_EQUAL(pairs[2].first, std::string("X-WOPI-ProofOld"));
+ std::string proofOld = pairs[2].second;
int64_t ticks = std::stoll(timestamp.c_str(), nullptr, 10);
verifySignature(access_token, uri, ticks, modulus, exponent, proof);
+ verifySignature(access_token, uri, ticks, modulus, exponent, proofOld);
// tdf#134041: test another data
@@ -144,14 +152,17 @@ void WopiProofTests::testOurProof()
uri = "https://user2@short.com:12345/blah?query_string=bar";
pairs = gen.GetProofHeaders(access_token, uri);
len = pairs.size();
- LOK_ASSERT_EQUAL(2, len);
+ LOK_ASSERT_EQUAL(3, len);
LOK_ASSERT_EQUAL(pairs[0].first, std::string("X-WOPI-TimeStamp"));
timestamp = pairs[0].second;
LOK_ASSERT_EQUAL(pairs[1].first, std::string("X-WOPI-Proof"));
proof = pairs[1].second;
+ LOK_ASSERT_EQUAL(pairs[2].first, std::string("X-WOPI-ProofOld"));
+ proofOld = pairs[2].second;
ticks = std::stoll(timestamp.c_str(), nullptr, 10);
verifySignature(access_token, uri, ticks, modulus, exponent, proof);
+ verifySignature(access_token, uri, ticks, modulus, exponent, proofOld);
}
CPPUNIT_TEST_SUITE_REGISTRATION(WopiProofTests);
diff --git a/wsd/ProofKey.cpp b/wsd/ProofKey.cpp
index 3bfaf1423..c7df1afe1 100644
--- a/wsd/ProofKey.cpp
+++ b/wsd/ProofKey.cpp
@@ -115,9 +115,19 @@ void Proof::initialize()
const auto e = m_pKey->encryptionExponent();
const auto capiBlob = RSA2CapiBlob(m, e);
- m_aAttribs.emplace_back("value", BytesToBase64(capiBlob));
- m_aAttribs.emplace_back("modulus", BytesToBase64(m));
- m_aAttribs.emplace_back("exponent", BytesToBase64(e));
+ const auto sv = BytesToBase64(capiBlob);
+ const auto sm = BytesToBase64(m);
+ const auto se = BytesToBase64(e);
+
+ m_aAttribs.emplace_back("value", sv);
+ m_aAttribs.emplace_back("modulus", sm);
+ m_aAttribs.emplace_back("exponent", se);
+
+ // TODO: implement proper rotation; for now, just duplicate * to old*
+
+ m_aAttribs.emplace_back("oldvalue", sv);
+ m_aAttribs.emplace_back("oldmodulus", sm);
+ m_aAttribs.emplace_back("oldexponent", se);
}
}
@@ -255,7 +265,10 @@ VecOfStringPairs Proof::GetProofHeaders(const std::string& access_token, const s
{
int64_t ticks = DotNetTicks(std::chrono::system_clock::now());
vec.emplace_back("X-WOPI-TimeStamp", std::to_string(ticks));
- vec.emplace_back("X-WOPI-Proof", SignProof(GetProof(access_token, uri, ticks)));
+ const auto sProof = SignProof(GetProof(access_token, uri, ticks));
+ vec.emplace_back("X-WOPI-Proof", sProof);
+ // TODO: implement proper rotation; for now, just duplicate X-WOPI-Proof to X-WOPI-ProofOld
+ vec.emplace_back("X-WOPI-ProofOld", sProof);
}
return vec;
}
More information about the Libreoffice-commits
mailing list