Я сделал частные и публичные ключи файлы как(Erlang) Got ошибка при разборе ECSDA открытого ключа PEM файл
openssl ecparam -name secp256k1 -genkey -out gen.pem
openssl ec -in gen.pem -pubout -out gen.pub
Затем я проверил .pub файл
openssl pkey -in gen.pub -pubin -text -noout
Public-Key: (256 bit)
pub:
04:fc:de:4f:2a:77:bd:c4:f2:74:2b:ba:b5:fc:85:
e4:aa:96:a7:8e:86:14:bc:0d:fa:8e:d2:dd:50:3c:
5d:fa:f4:07:f4:17:80:49:06:19:0c:72:03:63:4e:
07:37:e9:10:64:c8:33:a4:a3:7e:26:d8:df:79:21:
d7:2d:a6:01:80
ASN1 OID: secp256k1
После этого старта Эрл
erl
Erlang/OTP 18 [erts-7.2] [source-e6dd627] [64-bit] [smp:3:3] [async-threads:10] [hipe] [kernel-poll:false]
После выполнения команд
1>rr(public_key),
{ok,RawData} = file:read_file("gen.pub"),
Decoded = public_key:pem_decode(RawData),
[public_key:pem_entry_decode(X) || X <- Decoded ].
я получил исключение
** exception error: no match of right hand side value
{error,{asn1,{invalid_length,1}}}
in function public_key:der_decode/2 (public_key.erl, line 229)
Я знаю, что существуют обходные пути, но мне интересно, если я делаю что-то неправильно или есть ошибки в открытых ключей модулей?
UPD 1.
Когда мы смотрим на результат
{ok,#'SubjectPublicKeyInfo'{algorithm = #'AlgorithmIdentifier'{algorithm = {1,2,840,10045,2,1},
parameters = <<6,5,43,129,4,0,10>>},
subjectPublicKey = <<4,241,200,19,168,25,25,81,43,216,
89,201,37,62,66,39,166,231,161,98,
223,133,119,12,...>>}}
мы можем увидеть в следующем:
{1,2,840,10045,2,1} является подъязычная из ecPublicKey http://oid-info.com/get/1.2.840.10045.2.1
parameters = < < 6,5,43,129,4,0,10 >>
'OTP-PUB-KEY':decode('EcpkParameters',<<6,5,43,129,4,0,10>>).
дает нам
{ok,{namedCurve,{1,3,132,0,10}}}
и
pubkey_cert_records:namedCurves({1,3,132,0,10}).
дает нам источник кривой - secp256k1 и
subjectPublicKey = <<4,241,200,19,168,25,25,81,43,216,
89,201,37,62,66,39,166,231,161,98,
223,133,119,12,...>>
сам открытый ключ. Но это обходное решение, как я уже говорил.
Вы пропустили последний шаг, показанный на OP, который для случая вы можете запускать через 'public_key: pem_entry_decode (hd (Dec)).' Если вы запустите это в своем gen.pub, вы получите ту же ошибку, что и OP. –
Правильно, спасибо, что указали это. Я добавлю изменения. – Amiramix
Так как я думал, что это не особенность, это ошибка – DimaSUN