LibreOffice Module comphelper (master)  1
Static Public Member Functions | Private Member Functions | List of all members
comphelper::DocPasswordHelper Class Reference

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 (const OUString &aPassword)
 This helper function generates the information related to "Password to modify" provided by user. More...
 
static bool IsModifyPasswordCorrect (const OUString &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 (const OUString &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 (const OUString &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_Int8GetXLHashAsSequence (const OUString &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_Int8GetOoxHashAsSequence (const OUString &rPassword, const OUString &rSaltValue, sal_uInt32 nSpinCount, comphelper::Hash::IterCount eIterCount, const OUString &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, const OUString &rSaltValue, sal_uInt32 nSpinCount, comphelper::Hash::IterCount eIterCount, const OUString &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, const OUString &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_Int8GenerateRandomByteSequence (sal_Int32 nLength)
 This helper function generates a random sequence of bytes of requested length. More...
 
static css::uno::Sequence< sal_Int8GenerateStd97Key (const OUString &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_Int8GenerateStd97Key (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_Int8GenerateStd97Key (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 ()
 

Detailed Description

Helper that asks for a document password and checks its validity.

Definition at line 95 of file docpasswordhelper.hxx.

Constructor & Destructor Documentation

comphelper::DocPasswordHelper::~DocPasswordHelper ( )
private

Member Function Documentation

uno::Sequence< css::beans::NamedValue > comphelper::DocPasswordHelper::decryptGpgSession ( const css::uno::Sequence< css::uno::Sequence< css::beans::NamedValue > > &  rGpgProperties)
static

Definition at line 491 of file docpasswordhelper.cxx.

References ctx, err, i, nLength, PACKAGE_ENCRYPTIONDATA_SHA256UTF8, result, SAL_INFO, Value, and void().

uno::Sequence< beans::PropertyValue > comphelper::DocPasswordHelper::GenerateNewModifyPasswordInfo ( const OUString &  aPassword)
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.

Parameters
aStringThe string for which the info should be generated
Returns
The sequence containing the hash and the algorithm-related info

Definition at line 87 of file docpasswordhelper.cxx.

References comphelper::GeneratePBKDF2Hash(), and GenerateRandomByteSequence().

uno::Sequence< sal_Int8 > comphelper::DocPasswordHelper::GenerateRandomByteSequence ( sal_Int32  nLength)
static

This helper function generates a random sequence of bytes of requested length.

Definition at line 317 of file docpasswordhelper.cxx.

Referenced by GenerateNewModifyPasswordInfo().

static css::uno::Sequence< sal_Int8 > comphelper::DocPasswordHelper::GenerateStd97Key ( const OUString &  aPassword,
const css::uno::Sequence< sal_Int8 > &  aDocId 
)
static

This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec.

static css::uno::Sequence< sal_Int8 > comphelper::DocPasswordHelper::GenerateStd97Key ( const sal_uInt16  pPassData[16],
const css::uno::Sequence< sal_Int8 > &  aDocId 
)
static

This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec.

uno::Sequence< sal_Int8 > comphelper::DocPasswordHelper::GenerateStd97Key ( const sal_uInt16  pPassData[16],
const sal_uInt8  pDocId[16] 
)
static

This helper function generates a byte sequence representing the key digest value used by MSCodec_Std97 codec.

Definition at line 357 of file docpasswordhelper.cxx.

References void().

OUString comphelper::DocPasswordHelper::GetOoxHashAsBase64 ( const OUString &  rPassword,
const OUString &  rSaltValue,
sal_uInt32  nSpinCount,
comphelper::Hash::IterCount  eIterCount,
const OUString &  rAlgorithmName 
)
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.

Parameters
rPasswordUTF-16 encoded string without leading BOM character
rSaltValueBase64 encoded salt that will be decoded and prepended to password data.
nSpinCountIf >0 the number of repeated iterations.
eIterCountIf 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.
rAlgorithmNameOne 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.
Returns
the base64 encoded string of the hash value, that can be compared against a stored base64 encoded hash value.

Definition at line 301 of file docpasswordhelper.cxx.

References aBuf, comphelper::Base64::encode(), and GetOoxHashAsSequence().

css::uno::Sequence< sal_Int8 > comphelper::DocPasswordHelper::GetOoxHashAsSequence ( const OUString &  rPassword,
const OUString &  rSaltValue,
sal_uInt32  nSpinCount,
comphelper::Hash::IterCount  eIterCount,
const OUString &  rAlgorithmName 
)
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.

Parameters
rPasswordUTF-16 encoded string without leading BOM character
rSaltValueBase64 encoded salt that will be decoded and prepended to password data.
nSpinCountIf >0 the number of repeated iterations.
eIterCountIf 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.
rAlgorithmNameOne 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.
Returns
the raw hash value as sal_Int8 sequence.

Definition at line 281 of file docpasswordhelper.cxx.

References comphelper::Base64::decode(), and GetOoxHashAsVector().

Referenced by GetOoxHashAsBase64().

std::vector< unsigned char > comphelper::DocPasswordHelper::GetOoxHashAsVector ( const OUString &  rPassword,
const std::vector< unsigned char > &  rSaltValue,
sal_uInt32  nSpinCount,
comphelper::Hash::IterCount  eIterCount,
const OUString &  rAlgorithmName 
)
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.

Parameters
rPasswordUTF-16 encoded string without leading BOM character
rSaltValueA raw salt that will be prepended to password data.
nSpinCountIf >0 the number of repeated iterations.
eIterCountIf 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.
rAlgorithmNameOne 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.
Returns
the raw the hash value.

Definition at line 258 of file docpasswordhelper.cxx.

References comphelper::Hash::calculateHash(), eType, comphelper::MD5, comphelper::SHA1, comphelper::SHA256, and comphelper::SHA512.

Referenced by GetOoxHashAsSequence().

sal_uInt32 comphelper::DocPasswordHelper::GetWordHashAsUINT32 ( const OUString &  aString)
static

This helper function generates the hash code based on the algorithm specified by MS for "Password to modify" feature of Word.

Parameters
aStringThe string for which the hash should be calculated
Returns
The hash represented by sal_uInt32

Definition at line 149 of file docpasswordhelper.cxx.

Sequence< sal_Int8 > comphelper::DocPasswordHelper::GetXLHashAsSequence ( const OUString &  aString)
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.

Parameters
aStringThe string for which the hash should be calculated
Returns
The hash represented by sequence of bytes in BigEndian form

Definition at line 250 of file docpasswordhelper.cxx.

References GetXLHashAsUINT16().

sal_uInt16 comphelper::DocPasswordHelper::GetXLHashAsUINT16 ( const OUString &  aString,
rtl_TextEncoding  nEnc = RTL_TEXTENCODING_UTF8 
)
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.

Parameters
aStringThe string for which the hash should be calculated
nEncThe encoding that should be used to generate the 8-bit string before the hash is generated
Returns
The hash represented by sal_uInt16

Definition at line 225 of file docpasswordhelper.cxx.

References OUStringToOString(), and SAL_MAX_UINT16.

Referenced by GetXLHashAsSequence().

bool comphelper::DocPasswordHelper::IsModifyPasswordCorrect ( const OUString &  aPassword,
const css::uno::Sequence< css::beans::PropertyValue > &  aInfo 
)
static

This helper function allows to check whether the "Password to modify" provided by user is the correct one.

Parameters
aStringThe string containing the provided password
aInfoThe sequence containing the hash and the algorithm-info
Returns
<TRUE> if the password is correct one <FALSE> otherwise

Definition at line 112 of file docpasswordhelper.cxx.

References comphelper::GeneratePBKDF2Hash(), and Name.

css::uno::Sequence< css::beans::NamedValue > comphelper::DocPasswordHelper::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 
)
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.

Parameters
rVerifierThe password verifier used to check every processed password.
rMediaPasswordIf 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.
rxInteractHandlerThe interaction handler that will be used to request a password from the user, e.g. by showing a password input dialog.
rDocumentUrlThe URL of the related document that will be shown in the password input dialog.
eRequestTypeThe password request type that will be passed to the DocPasswordRequest object created internally. See docpasswordrequest.hxx for more details.
pDefaultPasswordsIf 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.
Returns
If not empty, contains the password that has been validated by the passed password verifier. If empty, no valid password has been found, or the user has chosen to cancel password input.

Definition at line 412 of file docpasswordhelper.cxx.

References comphelper::Abort, Exception, comphelper::DocPasswordRequest::getPassword(), comphelper::DocPasswordRequest::isPassword(), comphelper::OK, comphelper::IDocPasswordVerifier::verifyEncryptionData(), comphelper::IDocPasswordVerifier::verifyPassword(), and comphelper::WrongPassword.


The documentation for this class was generated from the following files: