Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php openssl签名是否支持Ed25519密钥?_Php_Openssl_Php Openssl - Fatal编程技术网

Php openssl签名是否支持Ed25519密钥?

Php openssl签名是否支持Ed25519密钥?,php,openssl,php-openssl,Php,Openssl,Php Openssl,据介绍,OpenSSL 1.1.1增加了对EdDSA(包括Ed25519)的支持。我正在用OpenSSL 1.1.1b运行PHP7.3.5,它应该支持它。我试着使用Ed25519(来自的那个)。这使我得到了以下错误(由openssl\u error\u string()返回),其中包含“没有公钥的Ed25519私钥”密钥 错误:0608D096:数字信封例程:EVP_PKEY_sign_init:此密钥类型不支持操作 “用属性和公钥编码的Ed25519私钥”密钥给我带来了另一个错误 警告:ope

据介绍,OpenSSL 1.1.1增加了对EdDSA(包括Ed25519)的支持。我正在用OpenSSL 1.1.1b运行PHP7.3.5,它应该支持它。我试着使用Ed25519(来自的那个)。这使我得到了以下错误(由
openssl\u error\u string()
返回),其中包含“没有公钥的Ed25519私钥”密钥

错误:0608D096:数字信封例程:EVP_PKEY_sign_init:此密钥类型不支持操作

“用属性和公钥编码的Ed25519私钥”密钥给我带来了另一个错误

警告:openssl_sign():无法将提供的密钥参数强制转换为第3行/path/to/test.php中的私钥错误:0D078094:asn1编码例程:asn1_item_embed_d2i:序列长度不匹配

这就是我使用的代码

$r = openssl_sign('hello, world!', $signature, '-----BEGIN PRIVATE KEY-----
MHICAQEwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC
oB8wHQYKKoZIhvcNAQkJFDEPDA1DdXJkbGUgQ2hhaXJzgSEAGb9ECWmEzf6FQbrB
Z9w7lshQhqowtrbLDFw4rXAxZuE=
-----END PRIVATE KEY-----');

echo $r ? 'good' : 'bad';

echo "\n";

echo openssl_error_string();

我猜PHP只是还不支持Ed25519。

我猜不支持,如果我们按照的话,签名/验证要求似乎与openssl库的正常使用不同

Ed25519和Ed448 EVP_PKEY实现支持密钥生成, 使用PureEdDSA和Ed25519或 Ed448(见RFC8032)

评论如下:

PureEdDSA算法不支持使用EVP_DigestUpdate()等其他签名算法的流机制。必须使用一次性EVP_DigestSign()和EVP_DigestVerify()函数传递要签名或验证的消息

调用EVP_DigestSignInit()或EVP_DigestVerifyInit()时,摘要类型参数必须设置为NULL


因此,除非您可以直接调用openssl api,或者可以添加更多openssl glue函数来支持一次性签名/验证支持,否则我猜不会。如果我们按照,签名/验证要求似乎与openssl库的正常使用不同

Ed25519和Ed448 EVP_PKEY实现支持密钥生成, 使用PureEdDSA和Ed25519或 Ed448(见RFC8032)

评论如下:

PureEdDSA算法不支持使用EVP_DigestUpdate()等其他签名算法的流机制。必须使用一次性EVP_DigestSign()和EVP_DigestVerify()函数传递要签名或验证的消息

调用EVP_DigestSignInit()或EVP_DigestVerifyInit()时,摘要类型参数必须设置为NULL

因此,除非您可以直接调用openssl api,或者可以添加更多openssl粘合函数来支持一次性签名/验证支持,否则我想不会