Подписание и проверка в iOS swift с использованием SHA256withECDSA

Нужна помощь, чтобы создать подпись и проверить ключ, используя SHA256withECDSA.

Я пробовал это решение https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/signing_and_verifying Но здесь у меня проблемы с преобразованием String publicKey/privateKey (который извлекается из API) в SecKey.

Ниже код, который я сделал до сих пор, пожалуйста, помогите мне сделать это. Кроме того, убедитесь, что я на правильном пути или мне нужны некоторые изменения в ключе подписи и проверки с использованием SHA256withECDSA.

/// Method to verify signiture
///
/// - Parameters:
///   - qrCode: qrCode string
///   - publicKey: public key fetched from isvaeVerified api
/// - Returns: boolen value
func signedQRVerification(qrCode: String, publicKey: String) -> Bool {

    let bhimReceivedURL = qrCode.components(separatedBy: "&sign = ")

    if #available(iOS 10.0, *) {
        let secKey = stringToSecKey(keyToConvert: publicKey)
        let originalData = bhimReceivedURL[0].data(using: .utf8)! as CFData
        let signData = bhimReceivedURL[1].data(using: .utf8)! as CFData
        return SecKeyVerifySignature(secKey, .ecdsaSignatureDigestX962SHA256, originalData, signData, nil)
    } else {
        // Fallback on earlier versions
    }
    return false
}

/// Method to convert string to SecKey
///
/// - Parameter keyToConvert: string need to convert in SecKey
/// - Returns: SecKey
func stringToSecKey(keyToConvert: String) -> SecKey {

    var secKey: SecKey!
    let data2 = keyToConvert.data(using: .utf8)
    let keyDict:[NSObject:NSObject] = [
        kSecAttrKeyType: kSecAttrKeyTypeEC,
        kSecAttrKeyClass: kSecAttrKeyClassPublic,
        kSecAttrKeySizeInBits: NSNumber(value: 256),
        kSecReturnPersistentRef: true as NSObject
    ]

    if #available(iOS 10.0, *) {
        if let publicKey = SecKeyCreateWithData(data2! as CFData, keyDict as CFDictionary, nil) {

            secKey = publicKey
        }
    } else {
        // Fallback on earlier versions
    }
    print("secKey: \(secKey)")
    return secKey
}

/// Method to sign qr code string.
///
/// - Parameters:
///   - qrCode: qr code string
///   - key: private key to sign qr code
/// - Returns: signed qr string
func signQrCode(qrCode: String, privateKey: String) -> String {

    let dataToSign = qrCode.data(using: .utf8)! as CFData
    var signiture = ""
    if #available(iOS 10.0, *) {
        let secKey = stringToSecKey(keyToConvert: privateKey)
        signiture = SecKeyCreateSignature(secKey, .ecdsaSignatureDigestX962SHA224, dataToSign, nil) as! String
    } else {
        // Fallback on earlier versions
    }

    return signiture
}

Привет! Вы решили свою проблему - преобразовать string в SecKey?

nastassia 10.01.2020 08:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
870
0

Другие вопросы по теме