продолжайте получать ошибки при попытке проверить подпись с openssl ECDSA_verify на c - PullRequest
0 голосов
/ 07 марта 2019

У меня в памяти есть сертификат, который выглядит так:

MIICnDCCAkKgAwIBAgINAewcjX0ynuzHzwJwazAKBggqhkjOPQQDAjBTMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRklETyBBbGxpYW5jZTEdMBsGA1UECxMUTWV0YWRhdGEgVE9DIFNpZ25pbmcxDTALBgNVBAMTBENBLTEwHhcNMTgwNDE4MDAwMDAwWhcNMjEwNDE4MDAwMDAwWjBkMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRklETyBBbGxpYW5jZTEdMBsGA1UECxMUTWV0YWRhdGEgVE9DIFNpZ25pbmcxHjAcBgNVBAMTFU1ldGFkYXRhIFRPQyBTaWduZXIgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIpf6ndbaPUZXiVDCfsdc2PiWH17bABron20EhCFtBOSoy81kacfE6fvJNnc2lg7lkZWCv9cLrqqWLsFYDyOBN + jgekwgeYwDgYDVR0PAQH / BAQDAgbAMAwGA1UdEwEB / wQCMAAwHQYDVR0OBBYEFFyQ0X7PPEy4u + b6pGMt4lB / QPDLMB8GA1UdIwQYMBaAFGkRXi1pZIWdlrjW / 1zNvzx1z0wYMDUGA1UdHwQuMCwwKqAooCaGJGh0dHA6Ly9tZHMuZmlkb2FsbGlhbmNlLm9yZy9DQS0xLmNybDBPBgNVHSAESDBGMEQGCysGAQQBguUcAQMBMDUwMwYIKwYBBQUHAgEWJ2h0dHBzOi8vbWRzLmZpZG9hbGxpYW5jZS5vcmcvcmVwb3NpdG9yeTAKBggqhkjOPQQDAgNIADBFAiEAlG26qOOLu3pkyCThAExxJpL6l / В / UYQy + GDcQ2Mtcq0CIGRYGaFVm8Enga8a9Le3CiLp + tc2N3OcGmPBOUy7pI6t

Похоже на формат pem, поэтому я добавляю начальный и конечный сертификат для создания действительного сертификата:

----- BEGIN CERTIFICATE ----- MIICnDCCAkKgAwIBAgINAewcjX0ynuzHzwJwazAKBggqhkjOPQQDAjBTMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRklETyBBbGxpYW5jZTEdMBsGA1UECxMUTWV0YWRhdGEgVE9DIFNpZ25pbmcxDTALBgNVBAMTBENBLTEwHhcNMTgwNDE4MDAwMDAwWhcNMjEwNDE4MDAwMDAwWjBkMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRklETyBBbGxpYW5jZTEdMBsGA1UECxMUTWV0YWRhdGEgVE9DIFNpZ25pbmcxHjAcBgNVBAMTFU1ldGFkYXRhIFRPQyBTaWduZXIgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIpf6ndbaPUZXiVDCfsdc2PiWH17bABron20EhCFtBOSoy81kacfE6fvJNnc2lg7lkZWCv9cLrqqWLsFYDyOBN + jgekwgeYwDgYDVR0PAQH / BAQDAgbAMAwGA1UdEwEB / wQCMAAwHQYDVR0OBBYEFFyQ0X7PPEy4u + b6pGMt4lB / QPDLMB8GA1UdIwQYMBaAFGkRXi1pZIWdlrjW / 1zNvzx1z0wYMDUGA1UdHwQuMCwwKqAooCaGJGh0dHA6Ly9tZHMuZmlkb2FsbGlhbmNlLm9yZy9DQS0xLmNybDBPBgNVHSAESDBGMEQGCysGAQQBguUcAQMBMDUwMwYIKwYBBQUHAgEWJ2h0dHBzOi8vbWRzLmZpZG9hbGxpYW5jZS5vcmcvcmVwb3NpdG9yeTAKBggqhkjOPQQDAgNIADBFAiEAlG26qOOLu3pkyCThAExxJpL6l / В / UYQy + GDcQ2Mtcq0CIGRYGaFVm8Enga8a9Le3CiLp + tc2N3OcGmPBOUy7pI6t ----- КОНЕЦ СЕРТИФИКАТА -----

И я загружаю его по:

certbio = BIO_new_mem_buf(certificate, strlen(certificate));
cert = PEM_read_bio_X509(certbio, NULL, 0, NULL);

Я могу проверить сертификат с корневым сертификатом, вызвав X509_verify_cert, и, похоже, все в порядке.

Я получаю открытый ключ по:

pkey = X509_get_pubkey(cert);
ec = EVP_PKEY_get0_EC_KEY(pkey);

Теперь у меня также есть подпись, которую я хочу проверить. Я беру данные, вычисляю дайджест с помощью sha256 и звоню:

ECDSA_verify(0, hash_val, digest_length, sig, siglen, ec)

где digest_length - 32, а siglen - 64. Я получаю следующие ошибки:

0: ошибка: 0D0680A8: процедуры кодирования asn1: asn1_check_tlen: неверно тег: .... \ OpenSSL-1.1.0f \ Crypto \ ASN1 \ tasn_dec.c: 1112: 0: ошибка: 0D07803A: процедуры кодирования asn1: asn1_item_embed_d2i: вложенный ASN1 ошибка: .... \ OpenSSL-1.1.0f \ Crypto \ ASN1 \ tasn_dec.c: 274: Тип = ECDSA_SIG

Может кто-нибудь помочь, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...