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