diff options
Diffstat (limited to 'comphelper/source/misc')
-rw-r--r-- | comphelper/source/misc/hash.cxx | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/comphelper/source/misc/hash.cxx b/comphelper/source/misc/hash.cxx index 7a8c3fecd7e9..0a91536347b9 100644 --- a/comphelper/source/misc/hash.cxx +++ b/comphelper/source/misc/hash.cxx @@ -168,7 +168,6 @@ std::vector<unsigned char> Hash::calculateHash( return calculateHash( pInput, nLength, eType); Hash aHash(eType); - std::vector<unsigned char> hash; if (nSaltLen) { std::vector<unsigned char> initialData( nSaltLen + nLength); @@ -181,7 +180,7 @@ std::vector<unsigned char> Hash::calculateHash( { aHash.update( pInput, nLength); } - hash = aHash.finalize(); + std::vector<unsigned char> hash( aHash.finalize()); if (nSpinCount) { @@ -232,7 +231,7 @@ std::vector<unsigned char> Hash::calculateHash( return calculateHash( pPassBytes, nPassBytesLen, rSaltValue.data(), rSaltValue.size(), nSpinCount, eType); } -OUString Hash::calculateHash( +css::uno::Sequence<sal_Int8> Hash::calculateHashSequence( const rtl::OUString& rPassword, const rtl::OUString& rSaltValue, sal_uInt32 nSpinCount, @@ -248,17 +247,31 @@ OUString Hash::calculateHash( else if (rAlgorithmName == "MD5") eType = HashType::MD5; else - return OUString(); + return css::uno::Sequence<sal_Int8>(); - css::uno::Sequence<sal_Int8> aSaltSeq; - comphelper::Base64::decode( aSaltSeq, rSaltValue); + 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); +} - std::vector<unsigned char> hash = calculateHash( rPassword, - comphelper::sequenceToContainer<std::vector<unsigned char>>( aSaltSeq), - nSpinCount, eType); +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, comphelper::containerToSequence<sal_Int8>( hash)); + comphelper::Base64::encode( aBuf, aSeq); return aBuf.makeStringAndClear(); } |