OpenSSL предоставляет libcrypto и libssl для C, а через привязки — для Node.js, Python, PHP и Ruby, а также команду openssl, с которой большинство знакомится в первую очередь. Факты на этой странице проверены на пакете дистрибутива Alpine 3.24.2 с OpenSSL 3.5.9 (ветка 3.5 с долгосрочной поддержкой); новейшими релизами проекта на тот момент были 3.6.5 и 4.0.3, поэтому в них поведение может отличаться.
EVP_DigestSign и openssl dgst -sign выдают подписи ECDSA в ASN.1 DER — от 70 до 72 байт на P-256. Nonce случайны, если не задать параметр nonce-type равным 1 (OpenSSL 3.2+); с этим значением воспроизвёлся тестовый вектор RFC 6979 для P-256. В командной строке этот параметр доступен только через pkeyutl, как показывает пример. Значение s не нормализуется, а проверка принимает high-S. EVP_PKEY_sign подписывает дайджест, который вы вычислили сами.
Некорректные входные данные дают ошибку, а не отрицательный результат: EVP_DigestVerify вернула -1 для 64-байтовой подписи raw r‖s, и CLI тоже сообщает об ошибке. Команда openssl dgst -verify вывела Verified OK для правильной подписи, Verification failure для верной подписи других данных и Error verifying data для 64 байт не в формате DER, поэтому в 3.5.9 проблему с форматом можно отличить от подделки по тексту сообщения. Преобразуйте подписи raw конвертером DER ⇄ raw или поручите конструктору команд OpenSSL собрать правильный вызов.
Поддерживаются кривые от P-224 до P-521, secp256k1 и кривые Brainpool r1, а также Ed25519 и Ed448. Начиная с 3.5 провайдер по умолчанию реализует также ML-KEM, ML-DSA и SLH-DSA и гибридную группу TLS X25519MLKEM768. Закрытые ключи бывают в форматах PKCS#8 (обычном или зашифрованном) и SEC1, открытые ключи — в SPKI или в сертификате: genpkey записывает -----BEGIN PRIVATE KEY-----, устаревшая команда openssl ec — -----BEGIN EC PRIVATE KEY-----; файл с меткой EC всегда содержит закрытый ключ.
Большинство сообщений об ошибках, которые ищут разработчики, возникают при загрузке ключей — no start line, header too long, unsupported от декодера — и разобраны на страницах ошибок по ссылкам.