If you haven't done "dmake clean" yet like me, try to "git pull" my latest
commit, and then in main/instsetoo_native "build --from oox -P2 -- -P2".

This commit fixes at least one more issue:

commit 244f2bcc921bc5dc45e6c1970e27ac2409c44e17 (HEAD -> trunk,
origin/trunk, origin/HEAD)
Author: Damjan Jovanovic <dam...@apache.org>
Date:   Sun Mar 17 15:56:38 2024 +0200

    Don't allow calls to OpenSSLCipher::blockSize() before the cipher
    is initialized.

On Sun, Mar 17, 2024 at 1:24 PM Matthias Seidel <matthias.sei...@hamburg.de>
wrote:

> WTH, shortly after I sent this mail I could open the files...
>
> Matthias
>
> Am 17.03.24 um 14:22 schrieb Matthias Seidel:
> > Hi Damjan,
> >
> > That was fast! ;-)
> >
> > I can confirm that it builds now on Windows.
> >
> > When I try to open password protected MS Office 2020+ files (xlsx,
> > docx) I now get the password dialog
> >
> > But when I enter the correct password AOO crashes.
> >
> > Regards,
> >
> >    Matthias
> >
> > P.S.: This was a partial build, I will try a complete build now.
> >
> > Am 17.03.24 um 12:23 schrieb Damjan Jovanovic:
> >> I've fixed this now and it seems to build on Windows too. The fixes
> >> are in
> >> these commits, and if they work, should be cherry-picked in the given
> >> order:
> >>
> >> f65b4e326d91bfe900dc1dd22ece69e3ddd8444a
> >> f3025b08c40161265442c34e2b50bc05aa5388c6
> >> 42c0a318a970f6f7f43d26a8397448d5d5b8bd36
> >>
> >> There were several problems on Windows. The Visual Studio 2008 compiler
> >> doesn't have the ::std::vector::data() method (even though it should, it
> >> was part of the C++98/03 standard), I had to use &vector[0] instead.
> >> Also
> >> that ancient OpenSSL version we use internally, 1.0.x, uses
> >> EVP_MD_CTX_create()/destroy() instead of EVP_MD_CTX_new()/free().
> >> Finally
> >> some template function was unhappy about parameter type ambiguity (even
> >> though superior compilers like Clang are perfectly happy), and I had
> >> to add
> >> casts.
> >>
> >>
> >> On Sun, Mar 17, 2024 at 11:15 AM Matthias Seidel
> >> <matthias.sei...@hamburg.de>
> >> wrote:
> >>
> >>> Hi Damjan,
> >>>
> >>> You are right, the interesting part is at the beginning:
> >>>
> >>> ---
> >>>
> >>> =============
> >>> Building module oox
> >>> =============
> >>>
> >>> Entering /cygdrive/c/Source/openoffice/main/oox/prj
> >>>
> >>> cd .. && make -s -r -j1   && make -s -r deliverlog
> >>> [ build CXX ] oox/source/core/encryption
> >>> encryption.cxx
> >>> c:/Source/openoffice/main/oox/inc\oox/helper/openssl_wrapper.hxx(44) :
> >>> error C3861: 'EVP_MD_CTX_new': identifier not found
> >>> c:/Source/openoffice/main/oox/inc\oox/helper/openssl_wrapper.hxx(51) :
> >>> error C3861: 'EVP_MD_CTX_free': identifier not found
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(100) : error
> >>> C2782: 'bool oox::getFlag(Type,Type)' : template parameter 'Type' is
> >>> ambiguous
> >>> c:/Source/openoffice/main/oox/inc\oox/helper/helper.hxx(141) : see
> >>> declaration of 'oox::getFlag'
> >>>           could be 'unsigned int'
> >>>           or       'sal_uInt32'
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(133) : error
> >>> C2782: 'bool oox::getFlag(Type,Type)' : template parameter 'Type' is
> >>> ambiguous
> >>> c:/Source/openoffice/main/oox/inc\oox/helper/helper.hxx(141) : see
> >>> declaration of 'oox::getFlag'
> >>>           could be 'unsigned int'
> >>>           or       'sal_uInt32'
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(134) : error
> >>> C2782: 'bool oox::getFlag(Type,Type)' : template parameter 'Type' is
> >>> ambiguous
> >>> c:/Source/openoffice/main/oox/inc\oox/helper/helper.hxx(141) : see
> >>> declaration of 'oox::getFlag'
> >>>           could be 'unsigned int'
> >>>           or       'sal_uInt32'
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(210) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(214) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(217) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(299) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(362) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(700) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(701) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(702) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(710) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(711) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(753) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(754) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(756) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(780) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(781) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(783) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(809) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(852) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(854) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(930) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(932) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(932) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(938) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(946) : error
> >>> C2039: 'data' : is not a member of 'std::vector<_Ty>'
> >>>           with
> >>>           [
> >>>               _Ty=sal_uInt8
> >>>           ]
> >>> make: *** No rule to make target
> >>> '/cygdrive/c/Source/openoffice/main/solver/450/
> >>> wntmsci12.pro/workdir/CxxObject/oox/source/core/encryption.o',
> >>> needed by
> >>> '/cygdrive/c/Source/openoffice/main/solver/450/
> >>> wntmsci12.pro/workdir/LinkTarget/Library/ioox.lib'.
> >>> Stop.
> >>> dmake:  Error code 2, while making 'all'
> >>>
> >>> 1 module(s):
> >>>           oox
> >>> need(s) to be rebuilt
> >>>
> >>> Reason(s):
> >>>
> >>> ERROR: error 65280 occurred while making
> >>> /cygdrive/c/Source/openoffice/main/oox/prj
> >>>
> >>> When you have fixed the errors in that module you can resume the build
> >>> by running:
> >>>
> >>>           build --from oox
> >>>
> >>> ---
> >>>
> >>> Regards,
> >>>
> >>>      Matthias
> >>>
> >>> Am 17.03.24 um 01:55 schrieb Damjan Jovanovic:
> >>>> Please check further up in the log, or run "build" in main/oox again.
> >>>>
> >>>> That "No rule to make target" happens after other errors break
> >>> compilation.
> >>>> On Sat, Mar 16, 2024 at 8:38 PM Matthias Seidel <
> >>> matthias.sei...@hamburg.de>
> >>>> wrote:
> >>>>
> >>>>> Hi Damjan,
> >>>>>
> >>>>> Tried to build trunk on Windows but it stops here:
> >>>>>
> >>>>> make: *** No rule to make target
> >>>>> '/cygdrive/c/Source/openoffice/main/solver/450/
> >>>>> wntmsci12.pro/workdir/CxxObject/oox/source/core/encryption.o',
> >>>>> needed by
> >>>>> '/cygdrive/c/Source/openoffice/main/solver/450/
> >>>>> wntmsci12.pro/workdir/LinkTarget/Library/ioox.lib'.
> >>>>> Stop.
> >>>>> dmake:  Error code 2, while making 'all'
> >>>>>
> >>>>> 1 module(s):
> >>>>>            oox
> >>>>> need(s) to be rebuilt
> >>>>>
> >>>>> Reason(s):
> >>>>>
> >>>>> ERROR: error 65280 occurred while making
> >>>>> /cygdrive/c/Source/openoffice/main/oox/prj
> >>>>>
> >>>>> When you have fixed the errors in that module you can resume the
> >>>>> build
> >>>>> by running:
> >>>>>
> >>>>>            build --from oox
> >>>>>
> >>>>> Am 16.03.24 um 04:49 schrieb Damjan Jovanovic:
> >>>>>> Hi
> >>>>>>
> >>>>>> Bug 118236 with 7 votes, the inability to open password-protected
> >>>>>> (encrypted) OOXML files from MS Office 2010+, is now fixed in
> >>>>>> trunk :-)
> >>>>>>
> >>>>>> ---snip---
> >>>>>> commit 506fa58b1970084a0caacb50b3a805e469be4756 (HEAD -> trunk,
> >>>>>> origin/trunk, origin/HEAD)
> >>>>>> Author: Damjan Jovanovic <dam...@apache.org>
> >>>>>> Date:   Sat Mar 2 18:47:05 2024 +0200
> >>>>>>
> >>>>>>        Implement the (MS Office 2010+) OOXML "Agile encryption"
> >>> support, so
> >>>>>> that we
> >>>>>>        can open such password-protected OOXML files.
> >>>>>>
> >>>>>>        Adds all the Agile encryption XML tokens and namespaces, and
> >>> parses
> >>>>> the
> >>>>>> XML
> >>>>>>        from EncryptionInfo stream, gets OpenOffice to recognize the
> >>> file is
> >>>>>> encrypted
> >>>>>>        and ask for a password, and successfully decrypts the file if
> >>>>> password
> >>>>>> is
> >>>>>>        correct.
> >>>>>>
> >>>>>>        Also a number of other fixes and improvements:
> >>>>>>        - Sorted main/oox/source/token/tokens.txt so it's in
> >>>>>> alphabetical
> >>>>> order
> >>>>>>          (wrong order might have broken certain tokens?).
> >>>>>>        - Refactored how OOXML encryption is generally handled.
> >>>>>> It's now
> >>> in
> >>>>> its
> >>>>>>          own file.
> >>>>>>        - Added logging to the FilterDetect class. It logs to the
> >>>>> office-wide
> >>>>>> default
> >>>>>>          logger.
> >>>>>>        - Added a flush() method to the BinaryXOutputStream class.
> >>>>>>        - Changed FilterDetect to use XMultiComponentFactory and
> >>>>>> XComponentContext
> >>>>>>          instead of the deprecated XMultiServiceFactory.
> >>>>>>        - Error handling was generally improved.
> >>>>>>        - Exception safety and some memory safety (::std::vector
> >>>>>> instead
> >>> of
> >>>>>> new[])
> >>>>>>          in all the new code. Memory leaks should not be possible.
> >>>>>>
> >>>>>>        Much of the code involved in the decryption was ported
> >>>>>> from the
> >>>>>> excellent
> >>>>>>        Apache POI project, so it's been credited in our NOTICE file.
> >>>>>>
> >>>>>>        Patch by: me
> >>>>>> ---snip---
> >>>>>>
> >>>>>>
> >>>>>> It took much longer than I expected:
> >>>>>>
> >>>>>> The MS-OFFCRYPTO specification was unclear, and plain wrong in some
> >>>>> parts,
> >>>>>> eg. "SHA-1" in the spec but "SHA1" in actual OOXML documents;
> >>>>>> I've made
> >>>>> our
> >>>>>> code support both.
> >>>>>>
> >>>>>> The "Standard" encryption from MS Office 2007 that we already
> >>>>>> supported
> >>>>> was
> >>>>>> itself a mess, and much work was needed to refactor and clean up
> >>>>>> that
> >>>>> code
> >>>>>> before the "Agile" encryption could also be added.
> >>>>>>
> >>>>>> Then XML parsing had to be added, since Agile encryption specifies
> >>>>> settings
> >>>>>> in XML instead of binary like Standard encryption did. XML
> >>>>>> handling in
> >>>>>> OpenOffice is pretty outdated, with no support for namespaces,
> >>>>>> but at
> >>>>> least
> >>>>>> the newer "FastParser" does support namespaces and is in fact
> >>>>>> very fast
> >>>>>> because it converts strings to unique integers, and packs namespaces
> >>> into
> >>>>>> bit fields, for faster comparisons. I ended up updating the main/oox
> >>>>>> FastParser to support the new Agile encryption namespaces and
> >>>>>> elements.
> >>>>>>
> >>>>>> MS-OFFCRYPTO also only describes encryption, not decryption, and
> >>>>>> since
> >>> we
> >>>>>> can only read OOXML, only decryption matters.
> >>>>>>
> >>>>>> Apache POI code was tremendously helpful in figuring out the
> >>>>>> decryption
> >>>>>> process. Most of the decryption code I added was just ported
> >>>>>> directly
> >>>>> from
> >>>>>> theirs, and thus I've added Apache POI to our NOTICE file (please
> >>>>>> check
> >>>>>> that I've done it correctly). Also several bugs were figured out by
> >>>>>> simultaneously stepping through our code in gdb and their code in
> >>>>> NetBeans,
> >>>>>> and comparing respective values. A big thank you to the Apache POI
> >>>>>> developers, whose OOXML support is still better than ours in many
> >>>>>> ways!
> >>>>>>
> >>>>>> I used OpenSSL for all the message digest and encryption stuff, both
> >>>>>> because our MD5 and SHA1 algorithms are broken (bug 127661), and
> >>> because
> >>>>>> Agile encryption requires many digests and ciphers that OpenSSL
> >>> supports
> >>>>>> but we don't.
> >>>>>>
> >>>>>> Anyway, it works now. All encrypted OOXML files should work, eg.
> >>>>>> text
> >>>>>> documents, spreadsheets, presentations, etc.
> >>>>>>
> >>>>>> Other issues I am aware of:
> >>>>>> - We only support password encrypted documents. Certificate
> >>>>>> encrypted
> >>>>>> documents: not yet. ODF 1.3 also added certificate encryption, so
> >>>>>> maybe
> >>>>>> that's something we should develop together.
> >>>>>> - There are other variations of encryption we still don't
> >>>>>> support, eg.
> >>>>> the
> >>>>>> "Extensible" encryption, the "RC4 CryptoAPI" encryption, "XOR
> >>>>> obfuscation",
> >>>>>> etc. Apache POI would be a good source for those too. It's
> >>>>>> unclear to
> >>> me
> >>>>>> how widely those are used, and whether they are worth implementing.
> >>>>>> - It may need to be rearchitected when we add OOXML writing.
> >>>>>> - A lot of other required cleanups to our code were discovered, will
> >>>>>> discuss those separately.
> >>>>>>
> >>>>>> I've squashed all my work into a single commit, so it can be easily
> >>>>>> cherry-picked to AOO42X and maybe even AOO41X when people are happy
> >>> with
> >>>>> it.
> >>>>>> Regards
> >>>>>> Damjan
> >>>>>>
>

Reply via email to