LibreOffice Module comphelper (master) 1
|
Helper that asks for a document password and checks its validity. More...
#include <docpasswordhelper.hxx>
Static Public Member Functions | |
static css::uno::Sequence< css::beans::PropertyValue > | GenerateNewModifyPasswordInfo (std::u16string_view aPassword) |
This helper function generates the information related to "Password to modify" provided by user. More... | |
static css::uno::Sequence< css::beans::PropertyValue > | ConvertPasswordInfo (const css::uno::Sequence< css::beans::PropertyValue > &aInfo) |
This helper function converts a grab-bagged password, e.g. More... | |
static css::uno::Sequence< css::beans::PropertyValue > | GenerateNewModifyPasswordInfoOOXML (std::u16string_view aPassword) |
static bool | IsModifyPasswordCorrect (std::u16string_view aPassword, const css::uno::Sequence< css::beans::PropertyValue > &aInfo) |
This helper function allows to check whether the "Password to modify" provided by user is the correct one. More... | |
static sal_uInt32 | GetWordHashAsUINT32 (std::u16string_view aString) |
This helper function generates the hash code based on the algorithm specified by MS for "Password to modify" feature of Word. More... | |
static sal_uInt16 | GetXLHashAsUINT16 (std::u16string_view aString, rtl_TextEncoding nEnc=RTL_TEXTENCODING_UTF8) |
This helper function generates the hash code based on the algorithm specified by MS for "Password to modify" and passwords related to table protection of Excel. More... | |
static css::uno::Sequence< sal_Int8 > | GetXLHashAsSequence (std::u16string_view aString) |
This helper function generates the hash code based on the algorithm specified by MS for "Password to modify" and passwords related to table protection. More... | |
static css::uno::Sequence< sal_Int8 > | GetOoxHashAsSequence (const OUString &rPassword, std::u16string_view rSaltValue, sal_uInt32 nSpinCount, comphelper::Hash::IterCount eIterCount, std::u16string_view rAlgorithmName) |
Convenience function to calculate a salted hash with iterations as specified in https://msdn.microsoft.com/en-us/library/dd920692 for the OOXML sheetProtection and fileSharing elements, or https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 for Standard and Agile Encryption. More... | |
static OUString | GetOoxHashAsBase64 (const OUString &rPassword, std::u16string_view rSaltValue, sal_uInt32 nSpinCount, comphelper::Hash::IterCount eIterCount, std::u16string_view rAlgorithmName) |
Convenience function to calculate a salted hash with iterations as specified in https://msdn.microsoft.com/en-us/library/dd920692 for the OOXML sheetProtection and fileSharing elements, or https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 for Standard and Agile Encryption. More... | |
static std::vector< unsigned char > | GetOoxHashAsVector (const OUString &rPassword, const std::vector< unsigned char > &rSaltValue, sal_uInt32 nSpinCount, comphelper::Hash::IterCount eIterCount, std::u16string_view rAlgorithmName) |
Convenience function to calculate a salted hash with iterations as specified in https://msdn.microsoft.com/en-us/library/dd920692 for the OOXML sheetProtection and fileSharing elements, or https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 for Standard and Agile Encryption. More... | |
static css::uno::Sequence< sal_Int8 > | GenerateRandomByteSequence (sal_Int32 nLength) |
This helper function generates a random sequence of bytes of requested length. More... | |
static css::uno::Sequence< sal_Int8 > | GenerateStd97Key (std::u16string_view aPassword, const css::uno::Sequence< sal_Int8 > &aDocId) |
This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec. More... | |
static css::uno::Sequence< sal_Int8 > | GenerateStd97Key (const sal_uInt16 pPassData[16], const css::uno::Sequence< sal_Int8 > &aDocId) |
This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec. More... | |
static css::uno::Sequence< sal_Int8 > | GenerateStd97Key (const sal_uInt16 pPassData[16], const sal_uInt8 pDocId[16]) |
This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec. More... | |
static css::uno::Sequence< css::beans::NamedValue > | requestAndVerifyDocPassword (IDocPasswordVerifier &rVerifier, const css::uno::Sequence< css::beans::NamedValue > &rMediaEncData, const OUString &rMediaPassword, const css::uno::Reference< css::task::XInteractionHandler > &rxInteractHandler, const OUString &rDocumentUrl, DocPasswordRequestType eRequestType, const ::std::vector< OUString > *pDefaultPasswords=nullptr, bool *pbIsDefaultPassword=nullptr) |
This helper function tries to request and verify a password to load a protected document. More... | |
static css::uno::Sequence< css::beans::NamedValue > | decryptGpgSession (const css::uno::Sequence< css::uno::Sequence< css::beans::NamedValue > > &rGpgProperties) |
Private Member Functions | |
~DocPasswordHelper () | |
Helper that asks for a document password and checks its validity.
Definition at line 96 of file docpasswordhelper.hxx.
|
private |
|
static |
This helper function converts a grab-bagged password, e.g.
the trackChanges password which has no complete inner equivalent to the inner format. The result sequence contains the hash and the algorithm-related info to use e.g. in IsModifyPasswordCorrect().
aInfo | The sequence containing the hash and the algorithm-related info according to the OOXML origin, used by grab-bagging. |
Definition at line 139 of file docpasswordhelper.cxx.
References comphelper::makePropertyValue(), nCount, and sHash.
|
static |
Definition at line 656 of file docpasswordhelper.cxx.
References ctx, err, i, nLength, PACKAGE_ENCRYPTIONDATA_SHA256UTF8, pValues, result, and SAL_INFO.
|
static |
This helper function generates the information related to "Password to modify" provided by user.
The result sequence contains the hash and the algorithm-related info.
aString | The string for which the info should be generated |
Definition at line 88 of file docpasswordhelper.cxx.
References comphelper::GeneratePBKDF2Hash(), GenerateRandomByteSequence(), and comphelper::makePropertyValue().
|
static |
Definition at line 109 of file docpasswordhelper.cxx.
References aBuffer, comphelper::Hash::APPEND, comphelper::Base64::encode(), GenerateRandomByteSequence(), GetOoxHashAsBase64(), comphelper::makePropertyValue(), and sHash.
|
static |
This helper function generates a random sequence of bytes of requested length.
Definition at line 423 of file docpasswordhelper.cxx.
References nLength.
Referenced by GenerateNewModifyPasswordInfo(), GenerateNewModifyPasswordInfoOOXML(), and requestAndVerifyDocPassword().
|
static |
This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec.
|
static |
This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec.
Definition at line 463 of file docpasswordhelper.cxx.
|
static |
This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec.
Referenced by requestAndVerifyDocPassword().
|
static |
Convenience function to calculate a salted hash with iterations as specified in https://msdn.microsoft.com/en-us/library/dd920692 for the OOXML sheetProtection and fileSharing elements, or https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 for Standard and Agile Encryption.
rPassword | UTF-16 encoded string without leading BOM character |
rSaltValue | Base64 encoded salt that will be decoded and prepended to password data. |
nSpinCount | If >0 the number of repeated iterations. |
eIterCount | If Hash::IterCount::APPEND, append iteration count as per https://msdn.microsoft.com/en-us/library/dd920692 If Hash::IterCount::PREPEND, prepend iteration count as per https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 If Hash::IterCount::NONE, do not add the iteration count to hash iterations. |
rAlgorithmName | One of "SHA-512", "SHA-256", ... as listed for AlgorithmName in https://msdn.microsoft.com/en-us/library/dd920692 or "SHA512", "SHA256", ... as listed for HashAlgorithm in https://msdn.microsoft.com/en-us/library/dd925810 that have a valid match in comphelper::HashType. If not, an empty sequence is returned. Not all algorithm names are supported. |
Definition at line 407 of file docpasswordhelper.cxx.
References aBuf, aSeq, comphelper::Base64::encode(), and GetOoxHashAsSequence().
Referenced by GenerateNewModifyPasswordInfoOOXML(), and IsModifyPasswordCorrect().
|
static |
Convenience function to calculate a salted hash with iterations as specified in https://msdn.microsoft.com/en-us/library/dd920692 for the OOXML sheetProtection and fileSharing elements, or https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 for Standard and Agile Encryption.
rPassword | UTF-16 encoded string without leading BOM character |
rSaltValue | Base64 encoded salt that will be decoded and prepended to password data. |
nSpinCount | If >0 the number of repeated iterations. |
eIterCount | If Hash::IterCount::APPEND, append iteration count as per https://msdn.microsoft.com/en-us/library/dd920692 If Hash::IterCount::PREPEND, prepend iteration count as per https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 If Hash::IterCount::NONE, do not add the iteration count to hash iterations. |
rAlgorithmName | One of "SHA-512", "SHA-256", ... as listed for AlgorithmName in https://msdn.microsoft.com/en-us/library/dd920692 or "SHA512", "SHA256", ... as listed for HashAlgorithm in https://msdn.microsoft.com/en-us/library/dd925810 that have a valid match in comphelper::HashType. If not, an empty sequence is returned. Not all algorithm names are supported. |
Definition at line 387 of file docpasswordhelper.cxx.
References comphelper::Base64::decode(), and GetOoxHashAsVector().
Referenced by GetOoxHashAsBase64().
|
static |
Convenience function to calculate a salted hash with iterations as specified in https://msdn.microsoft.com/en-us/library/dd920692 for the OOXML sheetProtection and fileSharing elements, or https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 for Standard and Agile Encryption.
rPassword | UTF-16 encoded string without leading BOM character |
rSaltValue | A raw salt that will be prepended to password data. |
nSpinCount | If >0 the number of repeated iterations. |
eIterCount | If Hash::IterCount::APPEND, append iteration count as per https://msdn.microsoft.com/en-us/library/dd920692 If Hash::IterCount::PREPEND, prepend iteration count as per https://msdn.microsoft.com/en-us/library/dd924776 and https://msdn.microsoft.com/en-us/library/dd925430 If Hash::IterCount::NONE, do not add the iteration count to hash iterations. |
rAlgorithmName | One of "SHA-512", "SHA-256", ... as listed for AlgorithmName in https://msdn.microsoft.com/en-us/library/dd920692 or "SHA512", "SHA256", ... as listed for HashAlgorithm in https://msdn.microsoft.com/en-us/library/dd925810 that have a valid match in comphelper::HashType. If not, an empty sequence is returned. Not all algorithm names are supported. |
Definition at line 364 of file docpasswordhelper.cxx.
References comphelper::Hash::calculateHash(), eType, comphelper::MD5, comphelper::SHA1, comphelper::SHA256, comphelper::SHA512, and u.
Referenced by GetOoxHashAsSequence().
|
static |
This helper function generates the hash code based on the algorithm specified by MS for "Password to modify" feature of Word.
aString | The string for which the hash should be calculated |
Definition at line 255 of file docpasswordhelper.cxx.
|
static |
This helper function generates the hash code based on the algorithm specified by MS for "Password to modify" and passwords related to table protection.
aString | The string for which the hash should be calculated |
Definition at line 356 of file docpasswordhelper.cxx.
References GetXLHashAsUINT16().
|
static |
This helper function generates the hash code based on the algorithm specified by MS for "Password to modify" and passwords related to table protection of Excel.
aString | The string for which the hash should be calculated |
nEnc | The encoding that should be used to generate the 8-bit string before the hash is generated |
Definition at line 331 of file docpasswordhelper.cxx.
References OUStringToOString(), and SAL_MAX_UINT16.
Referenced by GetXLHashAsSequence().
|
static |
This helper function allows to check whether the "Password to modify" provided by user is the correct one.
aString | The string containing the provided password |
aInfo | The sequence containing the hash and the algorithm-info |
Definition at line 196 of file docpasswordhelper.cxx.
References comphelper::Hash::APPEND, comphelper::GeneratePBKDF2Hash(), GetOoxHashAsBase64(), nCount, sHash, and uno::Any::Value.
|
static |
This helper function tries to request and verify a password to load a protected document.
First, the list of default passwords will be tried if provided. This is needed by import filters for external file formats that have to check a predefined password in some cases without asking the user for a password. Every password is checked using the passed password verifier.
If not successful, the passed password of a medium is tried, that has been set e.g. by an API call to load a document. If existing, the password is checked using the passed password verifier.
If still not successful, the passed interaction handler is used to request a password from the user. This will be repeated until the passed password verifier validates the entered password, or if the user chooses to cancel password input.
rVerifier | The password verifier used to check every processed password. |
rMediaPassword | If not empty, will be passed to the password validator before requesting a password from the user. This password usually should be querried from a media descriptor. |
rxInteractHandler | The interaction handler that will be used to request a password from the user, e.g. by showing a password input dialog. |
rDocumentUrl | The URL of the related document that will be shown in the password input dialog. |
eRequestType | The password request type that will be passed to the DocPasswordRequest object created internally. See docpasswordrequest.hxx for more details. |
pDefaultPasswords | If not null, contains default passwords that will be tried before a password will be requested from the media descriptor or the user. |
pbIsDefaultPassword | (output parameter) If not null, the type of the found password will be returned. True means the password has been found in the passed list of default passwords. False means the password has been taken from the rMediaPassword parameter or has been entered by the user. |
Definition at line 518 of file docpasswordhelper.cxx.
References comphelper::Abort, comphelper::concatSequences(), comphelper::OStorageHelper::CreatePackageEncryptionData(), Exception, GenerateRandomByteSequence(), GenerateStd97Key(), comphelper::OK, PACKAGE_ENCRYPTIONDATA_SHA256UTF8, comphelper::IDocPasswordVerifier::verifyEncryptionData(), comphelper::IDocPasswordVerifier::verifyPassword(), and comphelper::WrongPassword.