2.1.1 File

Every document that conforms to the data spaces structure (section 2.1) MUST be an OLE compound File structure as specified in [MS-CFB]. The File structure MUST contain the following storages and streams (1):

  • \0x06DataSpaces storage: A storage that contains all of the necessary information to understand the transforms applied to original document content in a given OLE compound file.

  • \0x06DataSpaces\Version stream: A stream (1) containing the DataSpaceVersionInfo structure, as specified in section 2.1.5. This stream (1) specifies the version of the data spaces structure used in the file.

  • \0x06DataSpaces\DataSpaceMap stream: A stream (1) containing a DataSpaceMap structure as specified in section 2.1.6. This stream (1) associates protected content with the data space definition used to transform it.

  • \0x06DataSpaces\DataSpaceInfo storage: A storage containing the data space definitions used in the file. This storage MUST contain one or more streams (1), each of which contains a DataSpaceDefinition structure as specified in section 2.1.7. The storage MUST contain exactly one stream (1) for each DataSpaceMapEntry structure (section 2.1.6.1) in the \0x06DataSpaces\DataSpaceMap stream (1) (section 2.2.1). The name of each stream (1) MUST be equal to the DataSpaceName field of exactly one DataSpaceMapEntry structure contained in the \0x06DataSpaces\DataSpaceMap stream (1).

  • Transformed content streams and storages: One or more storages or streams (1) containing protected content. The transformed content is associated with a data space definition by an entry in the \0x06DataSpaces\DataSpaceMap stream (1).

  • \0x06DataSpaces\TransformInfo storage: A storage containing definitions for the transforms used in the data space definitions stored in the \0x06DataSpaces\DataSpaceInfo storage as specified in section 2.2.2. The stream (1) contains zero or more definitions for the possible transforms that can be applied to the data in content streams (1).

Every transform referenced from a data space MUST be defined in a child storage of the \0x06DataSpaces\TransformInfo storage (section 2.2.3), each of which is called a transform storage. Transform storages MUST have a valid storage name.

Each transform storage identifies an algorithm used to transform data and any parameters needed by that algorithm. Transform storages do not contain actual implementations of transform algorithms but merely definitions and parameters. It is presumed that all software components that interact with the protected content have access to an existing implementation of the transform algorithm.

Every transform storage MUST contain a stream (1) named "0x06Primary". The 0x06Primary stream (1) MUST begin with a TransformInfoHeader structure (section 2.1.8). Transform storages can contain other streams (1) or storages if needed by a particular transform.