When the image data 402 is transmitted from the blob store to the receiving client, it may be transmitted as part of an encrypted data stream. Such data streams may be transmitted in chunks, where each chunk's size may be a multiple of the AES block size (e.g., 16 bytes). However, there is no guarantee that the dividers 408-i between the different qualities 404-i will correspond to the dividing points between chunks. In the example depicted in
The HMACs for the encrypted data stream are generally calculated over each chunk. Accordingly, the sending client may determine and perform the scans of the image, and may also determine where the dividing points between the various chunks will be located. The sending client may calculate the HMACs over these chunks. The sending client may upload the image data to the blob store, and may transmit an image message containing information about the image to the receiving client. An example of such an image message 450 is depicted in
The image message 450 may identify the recipient or recipients 452 for the message. This information may be used by the server to route the message to the appropriate receiving client devices.