У меня есть сертификат x509 в виде массива файлов/байтов, который я хотел бы использовать для проверки подписи, предоставленной в сообщении CertificateVerify
TLS. Я думаю, что могу использовать SecKeyVerifySignature
после того, как я определил алгоритм ключа сертификата ( SecKeyAlgorithm
) и инициализировал signedData
из стенограммы hash (связанный со строкой контекста и т. д.).
openssl x509
сообщает о ключе сертификата, например
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:44:58:8c:d0:95:90:14:45:82:db:4f:56:41:7d:
57:0e:f5:b4:d8:65:04:6c:21:5a:cd:1e:0e:87:10:
f9:31:c6:fa:b9:ad:b3:a5:e1:df:9f:32:25:4b:a9:
40:5c:d4:56:0d:bb:55:fd:f4:68:f9:4e:89:70:56:
b9:1c:4a:ef:93
ASN1 OID: prime256v1
NIST CURVE: P-256
Я считаю, что могу разобрать сертификат с помощью механизма, описанного здесь, например.
CFDataRef certData = CFDataCreate(NULL, (const UInt8*) rawCert, len);
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, certData);
И я думаю, что могу использовать SecCertificateCopyKey
для извлечения ключа, например.
SecKeyRef key = SecCertificateCopyKey(certificate);
Однако я не могу найти способ извлечь алгоритм подписи ключа (алгоритм открытого ключа). Я нашел SecKeyIsAlgorithmSupported
. Нужно ли перебирать все возможные константы SecKeyAlgorithm
, чтобы найти ту, которую использует ключ (например, SecKeyAlgorithm
вместо id-ecPublicKey
)?