diff options
author | Eike Rathke <erack@redhat.com> | 2018-02-26 12:14:03 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2018-02-26 12:15:17 +0100 |
commit | 384954795c4f3c0641f4b0eb7cff6f27ebfbb5de (patch) | |
tree | f315c0b702c74f16ea4eb5d2bd084919eeb317de /comphelper | |
parent | f1a11b9ce9dda2a57bc77d3bf38167a31feff8f1 (diff) |
Move convenience abstractions to DocPasswordHelper, tdf#104250 follow-up
Change-Id: If0775ccf14b631918e51342a767412948e812c87
Diffstat (limited to 'comphelper')
-rw-r--r-- | comphelper/qa/unit/test_hash.cxx | 3 | ||||
-rw-r--r-- | comphelper/source/misc/docpasswordhelper.cxx | 48 | ||||
-rw-r--r-- | comphelper/source/misc/hash.cxx | 46 |
3 files changed, 50 insertions, 47 deletions
diff --git a/comphelper/qa/unit/test_hash.cxx b/comphelper/qa/unit/test_hash.cxx index e15b906c190f..11dcbd0bd10f 100644 --- a/comphelper/qa/unit/test_hash.cxx +++ b/comphelper/qa/unit/test_hash.cxx @@ -8,6 +8,7 @@ */ #include <comphelper/hash.hxx> +#include <comphelper/docpasswordhelper.hxx> #include <rtl/ustring.hxx> #include <sal/log.hxx> @@ -111,7 +112,7 @@ void TestHash::testSHA512_saltspin() const OUString aPass("pwd"); const OUString aAlgo("SHA-512"); const OUString aSalt("876MLoKTq42+/DLp415iZQ=="); - const OUString aHash = comphelper::Hash::calculateHashBase64( aPass, aSalt, 100000, aAlgo); + const OUString aHash = comphelper::DocPasswordHelper::GetOoxHashAsBase64( aPass, aSalt, 100000, aAlgo); const OUString aStr("5l3mgNHXpWiFaBPv5Yso1Xd/UifWvQWmlDnl/hsCYbFT2sJCzorjRmBCQ/3qeDu6Q/4+GIE8a1DsdaTwYh1q2g=="); CPPUNIT_ASSERT_EQUAL(aStr, aHash); } diff --git a/comphelper/source/misc/docpasswordhelper.cxx b/comphelper/source/misc/docpasswordhelper.cxx index 81e1e996816f..e6055b29cebc 100644 --- a/comphelper/source/misc/docpasswordhelper.cxx +++ b/comphelper/source/misc/docpasswordhelper.cxx @@ -23,6 +23,9 @@ #include <comphelper/docpasswordhelper.hxx> #include <comphelper/storagehelper.hxx> +#include <comphelper/hash.hxx> +#include <comphelper/base64.hxx> +#include <comphelper/sequence.hxx> #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/task/XInteractionHandler.hpp> #include <com/sun/star/lang/IllegalArgumentException.hpp> @@ -256,6 +259,51 @@ Sequence< sal_Int8 > DocPasswordHelper::GetXLHashAsSequence( } +css::uno::Sequence<sal_Int8> DocPasswordHelper::GetOoxHashAsSequence( + const rtl::OUString& rPassword, + const rtl::OUString& rSaltValue, + sal_uInt32 nSpinCount, + const rtl::OUString& rAlgorithmName) +{ + comphelper::HashType eType; + if (rAlgorithmName == "SHA-512") + eType = comphelper::HashType::SHA512; + else if (rAlgorithmName == "SHA-256") + eType = comphelper::HashType::SHA256; + else if (rAlgorithmName == "SHA-1") + eType = comphelper::HashType::SHA1; + else if (rAlgorithmName == "MD5") + eType = comphelper::HashType::MD5; + else + return css::uno::Sequence<sal_Int8>(); + + std::vector<unsigned char> aSaltVec; + if (!rSaltValue.isEmpty()) + { + css::uno::Sequence<sal_Int8> aSaltSeq; + comphelper::Base64::decode( aSaltSeq, rSaltValue); + aSaltVec = comphelper::sequenceToContainer<std::vector<unsigned char>>( aSaltSeq); + } + + std::vector<unsigned char> hash( comphelper::Hash::calculateHash( rPassword, aSaltVec, nSpinCount, eType)); + + return comphelper::containerToSequence<sal_Int8>( hash); +} + +OUString DocPasswordHelper::GetOoxHashAsBase64( + const rtl::OUString& rPassword, + const rtl::OUString& rSaltValue, + sal_uInt32 nSpinCount, + const rtl::OUString& rAlgorithmName) +{ + css::uno::Sequence<sal_Int8> aSeq( GetOoxHashAsSequence( rPassword, rSaltValue, nSpinCount, rAlgorithmName)); + + OUStringBuffer aBuf; + comphelper::Base64::encode( aBuf, aSeq); + return aBuf.makeStringAndClear(); +} + + /*static*/ uno::Sequence< sal_Int8 > DocPasswordHelper::GenerateRandomByteSequence( sal_Int32 nLength ) { uno::Sequence< sal_Int8 > aResult( nLength ); diff --git a/comphelper/source/misc/hash.cxx b/comphelper/source/misc/hash.cxx index 0a91536347b9..b629d8d17530 100644 --- a/comphelper/source/misc/hash.cxx +++ b/comphelper/source/misc/hash.cxx @@ -8,8 +8,6 @@ */ #include <comphelper/hash.hxx> -#include <comphelper/base64.hxx> -#include <comphelper/sequence.hxx> #include <rtl/ustring.hxx> #include <rtl/alloc.h> #include <osl/endian.h> @@ -231,50 +229,6 @@ std::vector<unsigned char> Hash::calculateHash( return calculateHash( pPassBytes, nPassBytesLen, rSaltValue.data(), rSaltValue.size(), nSpinCount, eType); } -css::uno::Sequence<sal_Int8> Hash::calculateHashSequence( - const rtl::OUString& rPassword, - const rtl::OUString& rSaltValue, - sal_uInt32 nSpinCount, - const rtl::OUString& rAlgorithmName) -{ - HashType eType; - if (rAlgorithmName == "SHA-512") - eType = HashType::SHA512; - else if (rAlgorithmName == "SHA-256") - eType = HashType::SHA256; - else if (rAlgorithmName == "SHA-1") - eType = HashType::SHA1; - else if (rAlgorithmName == "MD5") - eType = HashType::MD5; - else - return css::uno::Sequence<sal_Int8>(); - - std::vector<unsigned char> aSaltVec; - if (!rSaltValue.isEmpty()) - { - css::uno::Sequence<sal_Int8> aSaltSeq; - comphelper::Base64::decode( aSaltSeq, rSaltValue); - aSaltVec = comphelper::sequenceToContainer<std::vector<unsigned char>>( aSaltSeq); - } - - std::vector<unsigned char> hash( calculateHash( rPassword, aSaltVec, nSpinCount, eType)); - - return comphelper::containerToSequence<sal_Int8>( hash); -} - -OUString Hash::calculateHashBase64( - const rtl::OUString& rPassword, - const rtl::OUString& rSaltValue, - sal_uInt32 nSpinCount, - const rtl::OUString& rAlgorithmName) -{ - css::uno::Sequence<sal_Int8> aSeq( calculateHashSequence( rPassword, rSaltValue, nSpinCount, rAlgorithmName)); - - OUStringBuffer aBuf; - comphelper::Base64::encode( aBuf, aSeq); - return aBuf.makeStringAndClear(); -} - } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |