23#include <osl/diagnose.h>
24#include <com/sun/star/xml/sax/XAttributeList.hpp>
25#include <com/sun/star/xml/crypto/DigestID.hpp>
26#include <com/sun/star/xml/crypto/CipherID.hpp>
27#include <com/sun/star/beans/PropertyValue.hpp>
49 : bIgnoreEncryptData ( false )
50 , bPgpEncryption ( false )
51 , nDerivedKeySize( 0 )
52 , rManVector ( rNewManVector )
79 if ( sVersion.getLength() ) {
85 if ( sSize.getLength() ) {
86 sal_Int64 nSize = sSize.toInt64();
99 const OUString& rAlgoAttrName)
101 OUString aString = rConvertedAttribs[rAlgoAttrName];
103 || aString !=
"http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" )
114 uno::Sequence < sal_Int8 > aDecodeBuffer;
128 uno::Sequence < sal_Int8 > aDecodeBuffer;
142 uno::Sequence < sal_Int8 > aDecodeBuffer;
171 uno::Sequence < sal_Int8 > aDecodeBuffer;
207 uno::Sequence < sal_Int8 > aDecodeBuffer;
222 uno::Sequence < sal_Int8 > aDecodeBuffer;
232 if ( aString.getLength() ) {
233 sal_Int32 nKey = aString.toInt32();
239 OSL_ENSURE(
false,
"Default derived key length differs from the expected one!" );
244 if ( aString !=
"PGP" )
268 size_t nLevel =
aStack.size();
275 aStack.back().m_bValid =
false;
286 aStack.back().m_bValid =
false;
290 ManifestStack::reverse_iterator aIter =
aStack.rbegin();
293 if (!aIter->m_bValid)
294 aStack.back().m_bValid =
false;
306 aStack.back().m_bValid =
false;
310 ManifestStack::reverse_iterator aIter =
aStack.rbegin();
313 if (!aIter->m_bValid)
314 aStack.back().m_bValid =
false;
333 aStack.back().m_bValid =
false;
337 ManifestStack::reverse_iterator aIter =
aStack.rbegin();
340 if (!aIter->m_bValid)
341 aStack.back().m_bValid =
false;
354 aStack.back().m_bValid =
false;
358 ManifestStack::reverse_iterator aIter =
aStack.rbegin();
361 if (!aIter->m_bValid)
362 aStack.back().m_bValid =
false;
370 aStack.back().m_bValid =
false;
374 aStack.back().m_bValid =
false;
381bool isEmpty(
const css::beans::PropertyValue &rProp)
383 return rProp.Name.isEmpty();
389 size_t nLevel =
aStack.size();
394 if (
aStack.empty() ||
aStack.rbegin()->m_aConvertedName != aConvertedName )
414 &&
aStack.back().m_bValid ) {
429 aStack.back().m_bValid =
false;
440 aStack.back().m_bValid =
false;
449 aStack.back().m_bValid =
false;
477 ::std::vector< ::std::pair< OUString, OUString > > aAttribsStrs;
479 if ( xAttribs.is() ) {
480 sal_Int16 nAttrCount = xAttribs.is() ? xAttribs->getLength() : 0;
481 aAttribsStrs.reserve( nAttrCount );
483 for( sal_Int16 nInd = 0; nInd < nAttrCount; nInd++ ) {
484 OUString aAttrName = xAttribs->getNameByIndex( nInd );
485 OUString aAttrValue = xAttribs->getValueByIndex( nInd );
486 if ( aAttrName.getLength() >= 5
487 && aAttrName.startsWith(
"xmlns")
488 && ( aAttrName.getLength() == 5 || aAttrName[5] ==
':' ) ) {
490 OUString aNsName( ( aAttrName.getLength() == 5 ) ? OUString() : aAttrName.copy( 6 ) );
491 aNamespaces[aNsName] = aAttrValue;
494 aAttribsStrs.emplace_back( aAttrName, aAttrValue );
500 if ( !aConvertedName.getLength() )
503 aStack.emplace_back( aConvertedName, std::move(aNamespaces) );
505 for (
const std::pair<OUString,OUString> & rAttribsStr : aAttribsStrs) {
507 o_aConvertedAttribs[
ConvertName( rAttribsStr.first )] = rAttribsStr.second;
510 return aConvertedName;
516 OUString aPureName =
aName;
518 sal_Int32 nInd =
aName.indexOf(
':' );
519 if ( nInd != -1 && nInd <
aName.getLength() ) {
520 aNsAlias =
aName.copy( 0, nInd );
521 aPureName =
aName.copy( nInd + 1 );
526 StringHashMap::const_iterator aIter = aNamespaces.find( aNsAlias );
527 if ( aIter != aNamespaces.end()
538 OUString aConvertedName;
539 for ( ManifestStack::reverse_iterator aIter =
aStack.rbegin(); !aConvertedName.getLength() && aIter !=
aStack.rend(); ++aIter ) {
540 if ( !aIter->m_aNamespaces.empty() )
544 if ( !aConvertedName.getLength() )
545 aConvertedName =
aName;
547 return aConvertedName;
constexpr OUStringLiteral MANIFEST_OASIS_NAMESPACE
constexpr OUStringLiteral SHA1_URL
constexpr OUStringLiteral ELEMENT_ENCRYPTIONMETHOD
constexpr OUStringLiteral SHA256_1K_URL
constexpr OUStringLiteral ATTRIBUTE_MEDIA_TYPE
constexpr OUStringLiteral ATTRIBUTE_INITIALISATION_VECTOR
constexpr OUStringLiteral ELEMENT_PGPDATA
constexpr OUStringLiteral SHA1_1K_NAME
constexpr OUStringLiteral ELEMENT_MANIFEST_KEYINFO
constexpr OUStringLiteral ATTRIBUTE_ALGORITHM_NAME
constexpr OUStringLiteral SHA1_NAME
constexpr OUStringLiteral ATTRIBUTE_VERSION
constexpr OUStringLiteral ELEMENT_MANIFEST13_KEYINFO
constexpr OUStringLiteral ELEMENT_PGPKEYPACKET13
constexpr OUStringLiteral SHA1_1K_URL
constexpr OUStringLiteral ELEMENT_FILE_ENTRY
constexpr OUStringLiteral ATTRIBUTE_CHECKSUM_TYPE
constexpr OUStringLiteral ELEMENT_ENCRYPTEDKEY13
constexpr OUStringLiteral ATTRIBUTE_KEY_DERIVATION_NAME
constexpr OUStringLiteral ELEMENT_ENCRYPTION_DATA
constexpr OUStringLiteral SHA256_URL
constexpr OUStringLiteral ELEMENT_CIPHERDATA
constexpr OUStringLiteral BLOWFISH_NAME
constexpr OUStringLiteral ATTRIBUTE_ITERATION_COUNT
constexpr OUStringLiteral ATTRIBUTE_FULL_PATH
constexpr OUStringLiteral ATTRIBUTE_SIZE
constexpr OUStringLiteral ELEMENT_ENCRYPTIONMETHOD13
constexpr OUStringLiteral ELEMENT_PGPDATA13
constexpr OUStringLiteral PBKDF2_NAME
constexpr OUStringLiteral ELEMENT_KEY_DERIVATION
constexpr OUStringLiteral ELEMENT_PGPKEYPACKET
constexpr OUStringLiteral ELEMENT_START_KEY_GENERATION
constexpr OUStringLiteral AES256_URL
constexpr OUStringLiteral ELEMENT_ENCRYPTED_KEYINFO
constexpr OUStringLiteral BLOWFISH_URL
constexpr OUStringLiteral SHA256_URL_ODF12
OFFICE-3708: wrong URL cited in ODF 1.2 and used since OOo 3.4 beta.
constexpr OUStringLiteral ATTRIBUTE_SALT
constexpr OUStringLiteral ATTRIBUTE_ALGORITHM
constexpr OUStringLiteral ELEMENT_ENCRYPTEDKEY
constexpr OUStringLiteral MANIFEST_NAMESPACE
constexpr OUStringLiteral AES128_URL
constexpr OUStringLiteral ATTRIBUTE_CHECKSUM
constexpr OUStringLiteral ELEMENT_CIPHERVALUE13
constexpr OUStringLiteral AES192_URL
constexpr OUStringLiteral ATTRIBUTE_ALGORITHM13
constexpr OUStringLiteral MANIFEST_NSPREFIX
constexpr OUStringLiteral ATTRIBUTE_START_KEY_GENERATION_NAME
constexpr OUStringLiteral ELEMENT_PGPKEYID13
constexpr OUStringLiteral PBKDF2_URL
constexpr OUStringLiteral ATTRIBUTE_KEY_SIZE
constexpr OUStringLiteral ELEMENT_CIPHERDATA13
constexpr OUStringLiteral ELEMENT_MANIFEST
constexpr OUStringLiteral ELEMENT_ALGORITHM
constexpr OUStringLiteral ELEMENT_PGPKEYID
constexpr OUStringLiteral ELEMENT_CIPHERVALUE
constexpr OUStringLiteral gsMediaTypeProperty(u"MediaType")
constexpr OUStringLiteral gsVersionProperty(u"Version")
constexpr OUStringLiteral gsInitialisationVectorProperty(u"InitialisationVector")
constexpr OUStringLiteral gsFullPathProperty(u"FullPath")
constexpr OUStringLiteral gsSaltProperty(u"Salt")
constexpr OUStringLiteral gsDigestProperty(u"Digest")
constexpr OUStringLiteral gsDerivedKeySizeProperty(u"DerivedKeySize")
constexpr OUStringLiteral gsStartKeyAlgProperty(u"StartKeyAlgorithm")
constexpr OUStringLiteral gsSizeProperty(u"Size")
constexpr OUStringLiteral gsIterationCountProperty(u"IterationCount")
constexpr OUStringLiteral gsDigestAlgProperty(u"DigestAlgorithm")
constexpr OUStringLiteral gsEncryptionAlgProperty(u"EncryptionAlgorithm")
#define PKG_MNFST_DERKEYSIZE
#define PKG_MNFST_DIGESTALG
#define PKG_MNFST_UCOMPSIZE
#define PKG_SIZE_NOENCR_MNFST
#define PKG_MNFST_ITERATION
#define PKG_MNFST_MEDIATYPE
#define PKG_MNFST_STARTALG
#define PKG_MNFST_VERSION
#define PKG_SIZE_ENCR_MNFST
#define PKG_MNFST_FULLPATH
#define PKG_MNFST_INIVECTOR
virtual void SAL_CALL startElement(const OUString &aName, const css::uno::Reference< css::xml::sax::XAttributeList > &xAttribs) override
virtual ~ManifestImport() override
void doStartKeyAlg(StringHashMap &rConvertedAttribs)
void doFileEntry(StringHashMap &rConvertedAttribs)
std::vector< css::beans::PropertyValue > aSequence
OUString ConvertName(const OUString &aName)
virtual void SAL_CALL ignorableWhitespace(const OUString &aWhitespaces) override
sal_Int32 nDerivedKeySize
std::vector< css::beans::NamedValue > aKeyInfoSequence
virtual void SAL_CALL endElement(const OUString &aName) override
void doEncryptedKeyPacket()
void doEncryptionData(StringHashMap &rConvertedAttribs)
virtual void SAL_CALL processingInstruction(const OUString &aTarget, const OUString &aData) override
virtual void SAL_CALL characters(const OUString &aChars) override
ManifestImport(std::vector< css::uno::Sequence< css::beans::PropertyValue > > &rNewVector)
OUStringBuffer aCurrentCharacters
void doKeyDerivation(StringHashMap &rConvertedAttribs)
static OUString ConvertNameWithNamespace(const OUString &aName, const StringHashMap &aNamespaces)
virtual void SAL_CALL startDocument() override
::std::vector< css::uno::Sequence< css::beans::PropertyValue > > & rManVector
void doEncryptionMethod(StringHashMap &, const OUString &)
virtual void SAL_CALL endDocument() override
void doAlgorithm(StringHashMap &rConvertedAttribs)
virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< css::xml::sax::XLocator > &xLocator) override
OUString PushNameAndNamespaces(const OUString &aName, const css::uno::Reference< css::xml::sax::XAttributeList > &xAttribs, StringHashMap &o_aConvertedAttribs)
std::vector< css::uno::Sequence< css::beans::NamedValue > > aKeys
void doEncryptedKey(StringHashMap &)
void doEncryptedCipherValue()
static void decode(css::uno::Sequence< sal_Int8 > &aPass, std::u16string_view sBuffer)
std::unordered_map< OUString, OUString > StringHashMap
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)