msoffcrypto.format package#

Submodules#

msoffcrypto.format.base module#

class msoffcrypto.format.base.BaseOfficeFile[source]#

Bases: ABC

abstract decrypt()[source]#
abstract is_encrypted()[source]#
abstract load_key()[source]#

msoffcrypto.format.common module#

msoffcrypto.format.doc97 module#

class msoffcrypto.format.doc97.Doc97File(file)[source]#

Bases: BaseOfficeFile

Return a MS-DOC file object.

Examples

>>> with open("tests/inputs/rc4cryptoapi_password.doc", "rb") as f:
...     officefile = Doc97File(f)
...     officefile.load_key(password="Password1234_")
>>> with open("tests/inputs/rc4cryptoapi_password.doc", "rb") as f:
...     officefile = Doc97File(f)
...     officefile.load_key(password="0000")
Traceback (most recent call last):
    ...
msoffcrypto.exceptions.InvalidKeyError: ...
decrypt(ofile)[source]#
is_encrypted()[source]#

Test if the file is encrypted.

>>> f = open("tests/inputs/plain.doc", "rb")
>>> file = Doc97File(f)
>>> file.is_encrypted()
False
>>> f = open("tests/inputs/rc4cryptoapi_password.doc", "rb")
>>> file = Doc97File(f)
>>> file.is_encrypted()
True
load_key(password=None)[source]#
class msoffcrypto.format.doc97.FibBase(wIdent, nFib, unused, lid, pnNext, fDot, fGlsy, fComplex, fHasPic, cQuickSaves, fEncrypted, fWhichTblStm, fReadOnlyRecommended, fWriteReservation, fExtChar, fLoadOverride, fFarEast, nFibBack, fObfuscation, IKey, envr, fMac, fEmptySpecial, fLoadOverridePage, reserved1, reserved2, fSpare0, reserved3, reserved4, reserved5, reserved6)#

Bases: tuple

IKey#

Alias for field number 19

cQuickSaves#

Alias for field number 9

envr#

Alias for field number 20

fComplex#

Alias for field number 7

fDot#

Alias for field number 5

fEmptySpecial#

Alias for field number 22

fEncrypted#

Alias for field number 10

fExtChar#

Alias for field number 14

fFarEast#

Alias for field number 16

fGlsy#

Alias for field number 6

fHasPic#

Alias for field number 8

fLoadOverride#

Alias for field number 15

fLoadOverridePage#

Alias for field number 23

fMac#

Alias for field number 21

fObfuscation#

Alias for field number 18

fReadOnlyRecommended#

Alias for field number 12

fSpare0#

Alias for field number 26

fWhichTblStm#

Alias for field number 11

fWriteReservation#

Alias for field number 13

lid#

Alias for field number 3

nFib#

Alias for field number 1

nFibBack#

Alias for field number 17

pnNext#

Alias for field number 4

reserved1#

Alias for field number 24

reserved2#

Alias for field number 25

reserved3#

Alias for field number 27

reserved4#

Alias for field number 28

reserved5#

Alias for field number 29

reserved6#

Alias for field number 30

unused#

Alias for field number 2

wIdent#

Alias for field number 0

msoffcrypto.format.ooxml module#

class msoffcrypto.format.ooxml.OOXMLFile(file)[source]#

Bases: BaseOfficeFile

Return an OOXML file object.

Examples

>>> with open("tests/inputs/example_password.docx", "rb") as f:
...     officefile = OOXMLFile(f)
...     officefile.load_key(password="Password1234_", verify_password=True)
>>> with open("tests/inputs/example_password.docx", "rb") as f:
...     officefile = OOXMLFile(f)
...     officefile.load_key(password="0000", verify_password=True)
Traceback (most recent call last):
    ...
msoffcrypto.exceptions.InvalidKeyError: ...
decrypt(ofile, verify_integrity=False)[source]#
>>> from msoffcrypto import exceptions
>>> from io import BytesIO; ofile = BytesIO()
>>> with open("tests/outputs/ecma376standard_password_plain.docx", "rb") as f:
...     officefile = OOXMLFile(f)
...     officefile.load_key("1234")
...     officefile.decrypt(ofile)
Traceback (most recent call last):
msoffcrypto.exceptions.DecryptionError: Unencrypted document
encrypt(password, ofile)[source]#
>>> from msoffcrypto.format.ooxml import OOXMLFile
>>> from io import BytesIO; ofile = BytesIO()
>>> with open("tests/outputs/example.docx", "rb") as f:
...     officefile = OOXMLFile(f)
...     officefile.encrypt("1234", ofile)
is_encrypted()[source]#
>>> with open("tests/inputs/example_password.docx", "rb") as f:
...     officefile = OOXMLFile(f)
...     officefile.is_encrypted()
True
>>> with open("tests/outputs/ecma376standard_password_plain.docx", "rb") as f:
...     officefile = OOXMLFile(f)
...     officefile.is_encrypted()
False
load_key(password=None, private_key=None, secret_key=None, verify_password=False)[source]#
>>> with open("tests/outputs/ecma376standard_password_plain.docx", "rb") as f:
...     officefile = OOXMLFile(f)
...     officefile.load_key("1234")

msoffcrypto.format.ppt97 module#

class msoffcrypto.format.ppt97.CurrentUser(currentuseratom)#

Bases: tuple

currentuseratom#

Alias for field number 0

class msoffcrypto.format.ppt97.CurrentUserAtom(rh, size, headerToken, offsetToCurrentEdit, lenUserName, docFileVersion, majorVersion, minorVersion, unused, ansiUserName, relVersion, unicodeUserName)#

Bases: tuple

ansiUserName#

Alias for field number 9

docFileVersion#

Alias for field number 5

headerToken#

Alias for field number 2

lenUserName#

Alias for field number 4

majorVersion#

Alias for field number 6

minorVersion#

Alias for field number 7

offsetToCurrentEdit#

Alias for field number 3

relVersion#

Alias for field number 10

rh#

Alias for field number 0

size#

Alias for field number 1

unicodeUserName#

Alias for field number 11

unused#

Alias for field number 8

class msoffcrypto.format.ppt97.PersistDirectoryAtom(rh, rgPersistDirEntry)#

Bases: tuple

rgPersistDirEntry#

Alias for field number 1

rh#

Alias for field number 0

class msoffcrypto.format.ppt97.PersistDirectoryEntry(persistId, cPersist, rgPersistOffset)#

Bases: tuple

cPersist#

Alias for field number 1

persistId#

Alias for field number 0

rgPersistOffset#

Alias for field number 2

class msoffcrypto.format.ppt97.Ppt97File(file)[source]#

Bases: BaseOfficeFile

Return a MS-PPT file object.

Examples

>>> with open("tests/inputs/rc4cryptoapi_password.ppt", "rb") as f:
...     officefile = Ppt97File(f)
...     officefile.load_key(password="Password1234_")
>>> with open("tests/inputs/rc4cryptoapi_password.ppt", "rb") as f:
...     officefile = Ppt97File(f)
...     officefile.load_key(password="0000")
Traceback (most recent call last):
    ...
msoffcrypto.exceptions.InvalidKeyError: ...
decrypt(ofile)[source]#
is_encrypted()[source]#

Test if the file is encrypted.

>>> f = open("tests/inputs/plain.ppt", "rb")
>>> file = Ppt97File(f)
>>> file.is_encrypted()
False
>>> f = open("tests/inputs/rc4cryptoapi_password.ppt", "rb")
>>> file = Ppt97File(f)
>>> file.is_encrypted()
True
load_key(password=None)[source]#
class msoffcrypto.format.ppt97.RecordHeader(recVer, recInstance, recType, recLen)#

Bases: tuple

recInstance#

Alias for field number 1

recLen#

Alias for field number 3

recType#

Alias for field number 2

recVer#

Alias for field number 0

class msoffcrypto.format.ppt97.UserEditAtom(rh, lastSlideIdRef, version, minorVersion, majorVersion, offsetLastEdit, offsetPersistDirectory, docPersistIdRef, persistIdSeed, lastView, unused, encryptSessionPersistIdRef)#

Bases: tuple

docPersistIdRef#

Alias for field number 7

encryptSessionPersistIdRef#

Alias for field number 11

lastSlideIdRef#

Alias for field number 1

lastView#

Alias for field number 9

majorVersion#

Alias for field number 4

minorVersion#

Alias for field number 3

offsetLastEdit#

Alias for field number 5

offsetPersistDirectory#

Alias for field number 6

persistIdSeed#

Alias for field number 8

rh#

Alias for field number 0

unused#

Alias for field number 10

version#

Alias for field number 2

msoffcrypto.format.ppt97.construct_persistobjectdirectory(data)[source]#

msoffcrypto.format.xls97 module#

class msoffcrypto.format.xls97.Xls97File(file)[source]#

Bases: BaseOfficeFile

Return a MS-XLS file object.

Examples

>>> with open("tests/inputs/rc4cryptoapi_password.xls", "rb") as f:
...     officefile = Xls97File(f)
...     officefile.load_key(password="Password1234_")
>>> with open("tests/inputs/xor_password_123456789012345.xls", "rb") as f:
...     officefile = Xls97File(f)
...     officefile.load_key(password="123456789012345")
>>> with open("tests/inputs/rc4cryptoapi_password.xls", "rb") as f:
...     officefile = Xls97File(f)
...     officefile.load_key(password="0000")
Traceback (most recent call last):
    ...
msoffcrypto.exceptions.InvalidKeyError: ...
decrypt(ofile)[source]#
is_encrypted()[source]#

Test if the file is encrypted.

>>> f = open("tests/inputs/plain.xls", "rb")
>>> file = Xls97File(f)
>>> file.is_encrypted()
False
>>> f = open("tests/inputs/rc4cryptoapi_password.xls", "rb")
>>> file = Xls97File(f)
>>> file.is_encrypted()
True
load_key(password=None)[source]#

Module contents#