我有一个 RSA 公钥、一些数据和该数据的签名。我需要验证签名。但是,签名不是数据的摘要,而是整个数据的签名。(数据本身只有 16 个字节,因此签名者在签名之前不会费心对数据进行哈希处理。)我可以通过在初始化上下文时指定 NULL 引擎来验证 C 中的签名:
EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(verify_key, NULL);
但是,我一直无法在 Ruby 的 OpenSSL::PKey::PKey 验证方法中找到等效项。该方法需要一个 Digest 对象,并且我找不到实际上不会散列但只是按原样返回数据的 Digest。我尝试创建自己的 Digest 子类,但我不相信它可以工作,因为底层 OpenSSL 库不知道自定义摘要类型的存在。
我被卡住了,还是有办法解决这个问题,因为我无法修改签名者运行的代码?