iOS - swift - Генерация пары ключей для кривой secp224k1 (ECDH) - PullRequest
0 голосов
/ 27 сентября 2019

Я пытался сгенерировать открытый и закрытый ключи для кривой 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

Любые предложения или помощь будут отличными, Спасибо.

...