---
title: "SecKeyGeneratePairAsync(_:_:_:)"
framework: security
role: symbol
role_heading: Function
path: "security/seckeygeneratepairasync(_:_:_:)"
---

# SecKeyGeneratePairAsync(_:_:_:)

Generates a public/private key pair.

## Declaration

```swift
func SecKeyGeneratePairAsync(_ parameters: CFDictionary, _ deliveryQueue: dispatch_queue_t, _ result: @escaping SecKeyGeneratePairBlock)
```

## Parameters

- `parameters`: A key generation parameter dictionary. At minimum, this must contain doc://com.apple.security/documentation/Security/kSecAttrKeyType and doc://com.apple.security/documentation/Security/kSecAttrKeySizeInBits. In addition, this function assumes default values for the following keys: doc://com.apple.security/documentation/Security/kSecAttrLabel defaults to NULL. doc://com.apple.security/documentation/Security/kSecAttrIsPermanent if this key is present and has a value of doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue, the key or key pair will be added to the default keychain. doc://com.apple.security/documentation/Security/kSecAttrApplicationTag defaults to NULL. doc://com.apple.security/documentation/Security/kSecAttrEffectiveKeySize defaults to NULL, which means the effective key size is the same as the key size (doc://com.apple.security/documentation/Security/kSecAttrKeySizeInBits). doc://com.apple.security/documentation/Security/kSecAttrCanEncrypt defaults to doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanFalse for private keys, doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue for public keys. doc://com.apple.security/documentation/Security/kSecAttrCanDecrypt defaults to doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue for private keys, doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanFalse for public keys. doc://com.apple.security/documentation/Security/kSecAttrCanDerive defaults to doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue. doc://com.apple.security/documentation/Security/kSecAttrCanSign defaults to doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue for private keys, doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanFalse for public keys. doc://com.apple.security/documentation/Security/kSecAttrCanVerify defaults to doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanFalse for private keys, doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue for public keys. doc://com.apple.security/documentation/Security/kSecAttrCanWrap defaults to doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanFalse for private keys, doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue for public keys. doc://com.apple.security/documentation/Security/kSecAttrCanUnwrap defaults to doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanTrue for private keys, doc://com.apple.documentation/documentation/CoreFoundation/kCFBooleanFalse for public keys. These default values can be overridden by adding a value for the associated key in the parameter dictionary.
- `deliveryQueue`: The dispatch queue on which the result block should be scheduled.
- `result`: A block of type doc://com.apple.security/documentation/Security/SecKeyGeneratePairBlock that gets called with the result upon completion.
