Я пытался сгенерировать открытый и закрытый ключи для кривой secp224k1 в iOS.Мы используем метод ECDH, чтобы сделать рукопожатие API между мобильным и бэкэндом.В Java это делается с использованием приведенного ниже кода.
public static KeyPair getECKeyPair() throws NoSuchProviderException, NoSuchAlgorithmException, InvalidAlgorithmParameterException {
ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp224k1");
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECDH", "SC");
kpg.initialize(ecSpec);
return kpg.generateKeyPair();
}
Есть ли способ генерировать ключи с определенным типом кривой (secp224k1) в swift?Я попытался использовать предоставленный Apple алгоритм EC, чтобы выполнить рукопожатие, используя приведенный ниже код.
//Generates public and private key with EC algorithm
public static func getKey() -> [String: SecKey]? {
let attributes: [String: Any] =
[kSecAttrKeySizeInBits as String: 256,
kSecAttrKeyType as String: kSecAttrKeyTypeEC,
kSecPrivateKeyAttrs as String:
[kSecAttrIsPermanent as String: false]
]
var error: Unmanaged<CFError>?
guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else {
let err = error!.takeRetainedValue() as Error
print(err.localizedDescription)
return nil
}
guard let publicKey = SecKeyCopyPublicKey(privateKey) else {
print("Error occured while creating public key")
return nil
}
return ["publicKey": publicKey, "privateKey": privateKey]
}
Когда я отправляю открытый ключ, сгенерированный вышеуказанным способом, я получаю сообщение об ошибке от сервера с сообщением:
"error":"java.security.InvalidKeyException: ECDH key agreement requires ECPublicKey for doPhase","exception":"InvalidAuthException"
Я попробовал VirgilCrypto для swift, который приблизился к решению проблемы.Но в библиотеке нет определенного типа кривой, который мне нужен.Поддерживается только secp256r1.Также ответы из постов ниже я пробовал и не получилось.
Эллиптическая кривая Диффи Хеллмана в ios / swift
Любые предложения или помощь будут отличными, Спасибо.