[Libreoffice-commits] core.git: include/oox oox/source

Markus Mohrhard markus.mohrhard at googlemail.com
Sat Apr 29 05:57:04 UTC 2017


 include/oox/crypto/CryptTools.hxx        |   34 --------
 oox/source/crypto/AgileEngine.cxx        |   14 ++-
 oox/source/crypto/CryptTools.cxx         |  131 -------------------------------
 oox/source/crypto/Standard2007Engine.cxx |   18 +---
 4 files changed, 20 insertions(+), 177 deletions(-)

New commits:
commit 0a3ded1def24194b01c9f2849ed91af4954fbb5f
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Apr 21 06:28:14 2017 +0200

    replace oox internal hashing code with new comphelper code
    
    Change-Id: I0e9363f6aa6f9d1011bc917645122408f9728ca2
    Reviewed-on: https://gerrit.libreoffice.org/36794
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/include/oox/crypto/CryptTools.hxx b/include/oox/crypto/CryptTools.hxx
index 84e4c485cb9d..d5bc5b95bda3 100644
--- a/include/oox/crypto/CryptTools.hxx
+++ b/include/oox/crypto/CryptTools.hxx
@@ -113,40 +113,6 @@ public:
                     sal_uInt32 inputLength = 0) override;
 };
 
-class Digest final
-{
-public:
-    enum DigestType
-    {
-        UNKNOWN,
-        SHA1,
-        SHA512
-    };
-
-private:
-    DigestType meType;
-
-#if USE_TLS_OPENSSL
-    EVP_MD_CTX* mpContext;
-#endif
-
-#if USE_TLS_NSS
-    HASHContext* mpContext;
-#endif
-
-public:
-    Digest(DigestType eType);
-    ~Digest();
-
-    void update(std::vector<sal_uInt8>& input);
-    void finalize(std::vector<sal_uInt8>& digest);
-
-    sal_uInt32 getLength();
-
-    static bool sha1(  std::vector<sal_uInt8>& digest, std::vector<sal_uInt8>& input);
-    static bool sha512(std::vector<sal_uInt8>& digest, std::vector<sal_uInt8>& input);
-};
-
 } // namespace core
 } // namespace oox
 
diff --git a/oox/source/crypto/AgileEngine.cxx b/oox/source/crypto/AgileEngine.cxx
index 9c1095a01f4d..72539509c965 100644
--- a/oox/source/crypto/AgileEngine.cxx
+++ b/oox/source/crypto/AgileEngine.cxx
@@ -13,6 +13,8 @@
 #include <oox/helper/binaryinputstream.hxx>
 #include <oox/helper/binaryoutputstream.hxx>
 
+#include <comphelper/hash.hxx>
+
 namespace oox {
 namespace core {
 
@@ -25,9 +27,17 @@ bool hashCalc(std::vector<sal_uInt8>& output,
               const OUString& sAlgorithm )
 {
     if (sAlgorithm == "SHA1")
-        return Digest::sha1(output, input);
+    {
+        std::vector<unsigned char> out = comphelper::Hash::calculateHash(input.data(), input.size(), comphelper::HashType::SHA1);
+        output = out;
+        return true;
+    }
     else if (sAlgorithm == "SHA512")
-        return Digest::sha512(output, input);
+    {
+        std::vector<unsigned char> out = comphelper::Hash::calculateHash(input.data(), input.size(), comphelper::HashType::SHA512);
+        output = out;
+        return true;
+    }
     return false;
 }
 
diff --git a/oox/source/crypto/CryptTools.cxx b/oox/source/crypto/CryptTools.cxx
index b1e3345c5453..b23d3ebbf57b 100644
--- a/oox/source/crypto/CryptTools.cxx
+++ b/oox/source/crypto/CryptTools.cxx
@@ -193,137 +193,6 @@ sal_uInt32 Encrypt::update(std::vector<sal_uInt8>& output, std::vector<sal_uInt8
     return static_cast<sal_uInt32>(outputLength);
 }
 
-// Digest
-
-namespace
-{
-
-#if USE_TLS_OPENSSL
-const EVP_MD* lclOpenSSLgetEngine(Digest::DigestType eType)
-{
-    switch(eType)
-    {
-        case Digest::SHA1:
-            return EVP_sha1();
-        case Digest::SHA512:
-            return EVP_sha512();
-        default:
-            break;
-    }
-    return NULL;
-}
-#endif
-
-#if USE_TLS_NSS
-HASH_HashType lclNSSgetHashType(Digest::DigestType eType)
-{
-    switch(eType)
-    {
-        case Digest::SHA1:
-            return HASH_AlgSHA1;
-        case Digest::SHA512:
-            return HASH_AlgSHA512;
-        default:
-            break;
-    }
-    return HASH_AlgNULL;
-}
-#endif
-
-}
-
-Digest::Digest(DigestType eType) :
-    meType(eType)
-{
-#if USE_TLS_OPENSSL
-    mpContext = EVP_MD_CTX_create();
-    EVP_DigestInit_ex(mpContext, lclOpenSSLgetEngine(eType), NULL);
-#endif
-
-#if USE_TLS_NSS
-    NSS_NoDB_Init(nullptr);
-    mpContext = HASH_Create(lclNSSgetHashType(eType));
-    HASH_Begin(mpContext);
-#endif
-}
-
-Digest::~Digest()
-{
-#if USE_TLS_OPENSSL
-    if(mpContext)
-        EVP_MD_CTX_destroy(mpContext);
-#endif
-
-#if USE_TLS_NSS
-    if(mpContext)
-        HASH_Destroy(mpContext);
-#endif
-}
-
-sal_uInt32 Digest::getLength()
-{
-    switch(meType)
-    {
-        case SHA1:
-            return msfilter::SHA1_HASH_LENGTH;
-        case SHA512:
-            return msfilter::SHA512_HASH_LENGTH;
-        default:
-            break;
-    }
-    return 0;
-}
-
-void Digest::update(std::vector<sal_uInt8>& input)
-{
-#if USE_TLS_OPENSSL
-    EVP_DigestUpdate(mpContext, input.data(), input.size());
-#endif
-#if USE_TLS_NSS
-    HASH_Update(mpContext, input.data(), input.size());
-#endif
-}
-
-void Digest::finalize(std::vector<sal_uInt8>& digest)
-{
-    digest.clear();
-
-#if USE_TLS_OPENSSL
-    unsigned int digestWrittenLength;
-    digest.resize(getLength(), 0);
-    EVP_DigestFinal_ex(mpContext, digest.data(), &digestWrittenLength);
-#endif
-
-#if USE_TLS_NSS
-    unsigned int digestWrittenLength;
-    unsigned int digestLength = static_cast<unsigned int>(getLength());
-    digest.resize(digestLength, 0);
-    HASH_End(mpContext, digest.data(), &digestWrittenLength, digestLength);
-#endif
-}
-
-bool Digest::sha1(std::vector<sal_uInt8>& output, std::vector<sal_uInt8>& input)
-{
-    bool aResult = false;
-
-    Digest aDigest(SHA1);
-    aDigest.update(input);
-    aDigest.finalize(output);
-    aResult = true;
-    return aResult;
-}
-
-bool Digest::sha512(std::vector<sal_uInt8>& output, std::vector<sal_uInt8>& input)
-{
-    bool aResult = false;
-
-    Digest aDigest(SHA512);
-    aDigest.update(input);
-    aDigest.finalize(output);
-    aResult = true;
-    return aResult;
-}
-
 } // namespace core
 } // namespace oox
 
diff --git a/oox/source/crypto/Standard2007Engine.cxx b/oox/source/crypto/Standard2007Engine.cxx
index d95f3153f564..b9c259fa02ac 100644
--- a/oox/source/crypto/Standard2007Engine.cxx
+++ b/oox/source/crypto/Standard2007Engine.cxx
@@ -17,6 +17,8 @@
 #include <rtl/digest.h>
 #include <rtl/random.h>
 
+#include <comphelper/hash.hxx>
+
 namespace oox {
 namespace core {
 
@@ -57,9 +59,8 @@ bool Standard2007Engine::generateVerifier()
         return false;
     std::copy(encryptedVerifier.begin(), encryptedVerifier.end(), mInfo.verifier.encryptedVerifier);
 
-    std::vector<sal_uInt8> hash(msfilter::SHA1_HASH_LENGTH, 0);
     mInfo.verifier.encryptedVerifierHashSize = msfilter::SHA1_HASH_LENGTH;
-    Digest::sha1(hash, verifier);
+    std::vector<sal_uInt8> hash = comphelper::Hash::calculateHash(verifier.data(), verifier.size(), comphelper::HashType::SHA1);
     hash.resize(msfilter::SHA256_HASH_LENGTH, 0);
 
     std::vector<sal_uInt8> encryptedHash(msfilter::SHA256_HASH_LENGTH, 0);
@@ -89,10 +90,8 @@ bool Standard2007Engine::calculateEncryptionKey(const OUString& rPassword)
         initialData.begin() + saltSize);
 
     // use "hash" vector for result of sha1 hashing
-    std::vector<sal_uInt8> hash(msfilter::SHA1_HASH_LENGTH, 0);
-
     // calculate SHA1 hash of initialData
-    Digest::sha1(hash, initialData);
+    std::vector<sal_uInt8> hash = comphelper::Hash::calculateHash(initialData.data(), initialData.size(), comphelper::HashType::SHA1);
 
     // data = iterator (4bytes) + hash
     std::vector<sal_uInt8> data(msfilter::SHA1_HASH_LENGTH + 4, 0);
@@ -101,19 +100,19 @@ bool Standard2007Engine::calculateEncryptionKey(const OUString& rPassword)
     {
         ByteOrderConverter::writeLittleEndian(data.data(), i);
         std::copy(hash.begin(), hash.end(), data.begin() + 4);
-        Digest::sha1(hash, data);
+        hash = comphelper::Hash::calculateHash(data.data(), data.size(), comphelper::HashType::SHA1);
     }
     std::copy(hash.begin(), hash.end(), data.begin() );
     std::fill(data.begin() + msfilter::SHA1_HASH_LENGTH, data.end(), 0 );
 
-    Digest::sha1(hash, data);
+    hash = comphelper::Hash::calculateHash(data.data(), data.size(), comphelper::HashType::SHA1);
 
     // derive key
     std::vector<sal_uInt8> buffer(64, 0x36);
     for (size_t i = 0; i < hash.size(); ++i)
         buffer[i] ^= hash[i];
 
-    Digest::sha1(hash, buffer);
+    hash = comphelper::Hash::calculateHash(buffer.data(), buffer.size(), comphelper::HashType::SHA1);
     std::copy(hash.begin(), hash.begin() + mKey.size(), mKey.begin());
 
     return true;
@@ -144,8 +143,7 @@ bool Standard2007Engine::generateEncryptionKey(const OUString& password)
     std::vector<sal_uInt8> verifierHash(encryptedHash.size(), 0);
     Decrypt::aes128ecb(verifierHash, encryptedHash, mKey);
 
-    std::vector<sal_uInt8> hash(msfilter::SHA1_HASH_LENGTH, 0);
-    Digest::sha1(hash, verifier);
+    std::vector<sal_uInt8> hash = comphelper::Hash::calculateHash(verifier.data(), verifier.size(), comphelper::HashType::SHA1);
 
     return std::equal(hash.begin(), hash.end(), verifierHash.begin());
 }


More information about the Libreoffice-commits mailing list