<!--
{
  "availability" : [
    "iOS: 26.5.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "AccessoryTransportExtension",
  "identifier" : "/documentation/AccessoryTransportExtension/SecurityMessage",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "Accessory Transport Extension"
    ],
    "preciseIdentifier" : "s:27AccessoryTransportExtension15SecurityMessageV"
  },
  "title" : "SecurityMessage"
}
-->

# SecurityMessage

A structure that carries key material for a secure channel between the system and an accessory.

```
struct SecurityMessage
```

## Overview

Your [`AccessoryTransportSecurity`](/documentation/AccessoryTransportExtension/AccessoryTransportSecurity) extension provides instances of this type to initiate key exchange and receives them during [`messageReceived(_:completion:)`](/documentation/AccessoryTransportExtension/AccessorySecuritySession/EventHandler/messageReceived(_:completion:)) to complete the exchange.

## Derive encryption secrets

Export HPKE secrets once during key exchange when handling [`SecurityMessage.KeyType.encapsulatedKey`](/documentation/AccessoryTransportExtension/SecurityMessage/KeyType-swift.enum/encapsulatedKey). Store the exported secrets for both `HostToAccessory` and `AccessoryToHost` directions for all subsequent message encryption and decryption.

> Important: On the accessory, use `recipient.exportSecret(context:outputByteCount:)` to derive secrets. The accessory creates an HPKE recipient; iPhone creates the sender.

## Topics

### Creating security messages

[`init(keyType: SecurityMessage.KeyType, cipherSuite: SecurityMessage.CipherSuite, version: SecurityMessage.CipherSuite.Version, key: Data, supportedTransports: [AccessoryTransport], identifier: String?)`](/documentation/AccessoryTransportExtension/SecurityMessage/init(keyType:cipherSuite:version:key:supportedTransports:identifier:))

Initializes a security message with key material and metadata.

### Accessing key material

[`let key: Data`](/documentation/AccessoryTransportExtension/SecurityMessage/key)

The key data carried by this message.

[`let keyType: SecurityMessage.KeyType`](/documentation/AccessoryTransportExtension/SecurityMessage/keyType-swift.property)

The type of key carried by this message.

[`enum KeyType`](/documentation/AccessoryTransportExtension/SecurityMessage/KeyType-swift.enum)

A type that identifies the key material a security message carries.

### Determining encryption method

[`let cipherSuite: SecurityMessage.CipherSuite`](/documentation/AccessoryTransportExtension/SecurityMessage/cipherSuite-swift.property)

The cipher suite used for key exchange.

[`let version: SecurityMessage.CipherSuite.Version`](/documentation/AccessoryTransportExtension/SecurityMessage/version)

The cipher suite version.

[`enum CipherSuite`](/documentation/AccessoryTransportExtension/SecurityMessage/CipherSuite-swift.enum)

A cryptographic cipher suite for key exchange.

### Specifying transport preferences

[`let supportedTransports: [AccessoryTransport]`](/documentation/AccessoryTransportExtension/SecurityMessage/supportedTransports)

An array of transports that the accessory supports for sending sensitive information.

### Deriving HPKE keys

[`let identifier: String?`](/documentation/AccessoryTransportExtension/SecurityMessage/identifier)

An optional Bluetooth identifier that the system uses to derive HPKE keys.

## Relationships

### Conforms To

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`Sendable`](/documentation/Swift/Sendable)

[`SendableMetatype`](/documentation/Swift/SendableMetatype)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)