Rpmsg

An rpmsg file is a file format containing a restricted-permission message. It is used to implement IRM for Outlook messages with the aim of controlling access to content via encryption and access controls, and restricting certain actions such as the ability to forward or copy.

Messages in this format are normally created by users of Azure Information Protection, Azure Rights Management or Active Directory Rights Management Services.

Implementation
The rpmsg file is created by writing body, attachments and images to a compound file and then compressing and encrypting it to create a BLOB: the rpmsg file. This resulting file is named message.rpmsg and is included as an attachment to a normal Outlook message.

Applications that support this format, such as Microsoft Outlook, transparently extract and render the message contained in the attachment as a protected message, ignoring the MIME wrapper message that hosts it. This can be implemented by parsing the file structure in-code, as currently the MSIPC SDK, normally used by applications to protect and decrypt content protected with Azure Information Protection, does not provide native functionality to encode and decode the RPMSG format.

Other applications such as mobile mail clients rely on Exchange ActiveSync to perform decryption on their behalf and deliver a version of the message they can render directly.

Rights control
When a rights managed mail is created the author specifies what rights they wish to grant to the recipient and these rights are specified in the form of an XrML certificate called a 'Publishing License'. This certificate is included within the encrypted rpmsg file. When the rpmsg attachment is decrypted the enclosed 'Publishing License' is sent to the information protection service pointed to by its header in order to obtain a Use License. The service, after analyzing the policy in the certificate and matching it to the identity of the requestor, will build the Use License, another XrML encoded document, which will then be delivered to the client and used by Outlook to determine what the recipient can and cannot do with the message (rights to forward, copy etc.).

File format
An rpmsg file consists of a magic number followed by one or more data chunks.

The magic number is the eight-byte sequence.

Each data chunk consists of a 12-byte header followed by a variable amount of data bytes. The chunk header consists of 3 DWORDS in little-endian byte order:
 * Magic number
 * Uncompressed chunk length
 * Compressed chunk length.

The chunk body consists of X bytes of compressed data.

The concatenated data chunks form a single data stream compressed using the DEFLATE algorithm. The format of the uncompressed data is a Compound File Binary document. More specifically, the uncompressed data conforms to the Office Document Cryptography Structure format.