- Source: Rpmsg
- Source: 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 76 e8 04 60 c4 11 e3 86.
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 a0 0f 00 00
Uncompressed chunk length YY YY YY YY
Compressed chunk length XX XX XX XX.
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.
References
External links
Official page for Azure Information Protection
Compound File Binary File Format
RPMsg (Remote Processor Messaging) is a protocol enabling inter-processor communication inside multi-core processors.
Background
Modern SoCs usually employ heterogeneous processors in Asymmetric multiprocessing (AMP) configurations, each of which may be running a different instance of an Operating system. Typically, SoCs have a central multi-core processor running a high-level OS, such as Linux, in a Symmetric multiprocessing (SMP) configuration, and additional remote processors running various flavors of a Real-time operating system. These remote processors are often used to offload CPU-intensive tasks from the main application processor, or to access hardware blocks otherwise inaccessible by the central processor. RPMsg facilitates communication between the various processors in the system, by providing means of sending inter-processor messages back and forth.
Implementations
RPMsg is present in the Linux kernel, has been demonstrated in Zephyr (operating system), FreeRTOS, Cadence XOS, ThreadX, QNX and is also available as a stand-alone component for microcontroller-based systems. Most of the RPMsg implementations are developed as open-source.
History
RPMsg was developed for the Linux kernel by Ohad Ben-Cohen of Wizery and was merged to Linux 3.4 on 20 May 2012. It was first used by Google, in Android Ice Cream Sandwich, on the Galaxy Nexus phone, to enable offloading of cpu-intensive multimedia tasks on the OMAP4: from the ARM Cortex-A9 cores, running the Linux Kernel, to the ARM Cortex-M3 cores, running the TI-RTOS OS. Several semiconductor companies have since added support for RPMsg, including Texas Instruments, STMicroelectronics, Xilinx, NXP Semiconductors, Renesas Electronics and Nordic Semiconductor.
User-space access
RPMsg provides a basic framework for sending framed messages between heterogenous processors, but a higher level driver is required to expose RPMsg functionality to user space in a useful way. Some of these drivers are mainlined in the Linux kernel, others are provided in a SoC vendor's kernel fork, and yet others are available out of tree.