@startuml
Publisher -> OLE: Encrypt(EncryptionContext, PlaintextData)
OLE -> KeyCache: Get(hash(EncryptionContext+AlgorithmID))
OLE <-- KeyCache: nil
OLE -> KMS: GenerateDataKey(EncryptionContext)
OLE <-- KMS: EncryptedDataKey and PlaintextDataKey
OLE -> KeyCache: Put(hash(EncryptionContext+AlgorithmID), (EncryptedDataKey, PlaintextDataKey))
Publisher <-- OLE: (EncryptedData, EncryptedDataKey)
@enduml
