---
allOf:
  - $ref: core-event-schema/event.yaml

description: |-
  This event type is used when sending encrypted events. It can be used either
  within a room (in which case it will have all of the `Room Event fields`_), or
  as a `to-device`_ event.

properties:
  content:
    properties:
      algorithm:
        type: string
        enum:
          - m.olm.v1.curve25519-aes-sha2
          - m.megolm.v1.aes-sha2
        description: |-
          The encryption algorithm used to encrypt this event. The
          value of this field determines which other properties will be
          present.
      ciphertext:
        oneOf:
          - type: string
          - type: object
            additionalProperties:
              type: object
              title: CiphertextInfo
              properties:
                body:
                  type: string
                  description: The encrypted payload.
                type:
                  type: integer
                  description: The Olm message type.
        description: |-
          The encrypted content of the event. Either the encrypted payload
          itself, in the case of a Megolm event, or a map from the recipient
          Curve25519 identity key to ciphertext information, in the case of an
          Olm event. For more details, see `Messaging Algorithms`_.
      sender_key:
        type: string
        description: The Curve25519 key of the sender.
      device_id:
        type: string
        description: The ID of the sending device. Required with Megolm.
      session_id:
        type: string
        description: |-
          The ID of the session used to encrypt the message. Required with
          Megolm.
    required:
      - algorithm
      - sender_key
      - ciphertext
    type: object
  type:
    enum:
      - m.room.encrypted
    type: string
type: object