秘密鍵と公開鍵のペアがあり、そのいずれかで文字列を暗号化しようとしています。コードはOSX 10.11およびXcode 7.2で実行されています
func encryptMessageWithKey(message: String, keyType: KeyType,
withCompletionBlock: (success: Bool, data: NSData?, error: AsymCryptoExceptions.Exceptions?)
-> Void) {
let uintData = [UInt8](message.utf8)
let sourceData = CFDataCreate(kCFAllocatorDefault, uintData, uintData.count)
let privKey = self.getPrivateKeyReference()!
var errorRef: Unmanaged<CFError>?
let encoder = SecEncryptTransformCreate(privKey, &errorRef)
SecTransformSetAttribute(encoder,
kSecPaddingKey,
kSecPaddingPKCS1Key,
&errorRef)
SecTransformSetAttribute(encoder,
kSecTransformInputAttributeName,
sourceData,
&errorRef)
var encryptedData = SecTransformExecute(encoder, &errorRef)
if (errorRef != nil) {
let error = errorRef!.takeRetainedValue()
print(error)
}
}
上記は惨めに失敗しており、実行時にアプリがEXEC_BAD_ACCESS
. エラーはありません。
kSecPaddingPKCS1Key
私の調査によると、パディングをデフォルトで PKCS1 に設定する NULL ではなく、明示的に指定することに関連するバグがある可能性があります。ただし、Swift がそれを nil に置き換えたため、この値を NULL に設定できませんでした。この値はこの場所では使用できません。