The client uses a separate group for each pair of contacts. The group descriptor is a BDF list containing the unique IDs of the contacts' identities, sorted in ascending order as byte strings.
0: PRIVATE_MESSAGE - The content is a BDF list with four elements: parent_id (raw or null), content_type (string), body (raw), and attachments (dictionary or null). parent_id is the identifier of a private message to which this is a response. Each key in attachments is the name of an attachment, and the value is a list with two elements: content_type (string) and message_id (raw).
1: ATTACHMENT - The content is raw data.
A private message is valid if it is well-formed.
An attachment is always valid.
Note that a private message can be validated before its attachments have been received, and an attachment can be validated before it has been completely received.