I'm create message with derRepresentation and send to serve to verify message by P256.Signing.PrivateKey However It's only support IOS above 14. And I want to support with below 14. How can I do ?
func IOSAbove14() { let keyData = privateKeyHexaString.hexadecimal! print("keyData (keyData)") let privateKey = try! P256.Signing.PrivateKey(derRepresentation: keyData)
print("privateKey \(privateKey.derRepresentation)")
let signData = getStringHash("Hello").data(using: .utf8)
print("signData \(signData)")
let sig = try! privateKey.signature(for: "Hello".data(using: .utf8)!)
print("sig \(sig)")
print("sig \(sig.derRepresentation)")
}
I'm try but when verify false
func IOSBelow14() -> String?{
// let privateKeyData = privateKeyHexaString.hexaData
let privateKeyData = self.privateKeyHexaString.hexadecimal!
print("privateKeyData \(privateKeyData)")
let secKeyByPrivateKey = SecKeyCreateWithData(privateKeyData as! CFData, [
kSecAttrKeyTypeEC: kSecAttrKeyTypeECSECPrimeRandom,
kSecAttrTokenID: kSecAttrTokenIDSecureEnclave,
kSecAttrKeyClass: kSecAttrKeyClassPrivate,
// kSecPrivateKeyAttrs as String: [ // kSecAttrIsPermanent as String: false // ], // kSecAttrKeySizeInBits: 256, // SecKeyKeyExchangeParameter.requestedSize.rawValue as String: 32 ] as CFDictionary, nil) guard let secKeyByPrivateKey: SecKey = secKeyByPrivateKey else { return nil } print("secKeyByPrivateKey (secKeyByPrivateKey)")
let message = "Hello".data(using: .utf8)!
var error: Unmanaged<CFError>?
let verify = SecKeyIsAlgorithmSupported(secKeyByPrivateKey, .sign, SecKeyAlgorithm.ecdsaSignatureMessageX962SHA256)
print("verify \(verify)")
guard let signedData = SecKeyCreateSignature(secKeyByPrivateKey,
SecKeyAlgorithm.ecdsaSignatureMessageX962SHA256,
message as CFData,
&error) as Data? else
{
return nil
}
return signedData.base64EncodedString()
}
Backend use X509 and PKCS8