Como não há "Como Fazer" na Internet para verificação manual do pacote FreeBSD, eis o que eu descobri.
O truque é que a sequência de octetos na openssl rsautl
saída é de fato um hash da sequência que é o hash SHA256 de um arquivo.
Por exemplo, faça o download atual http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
, extraia-o e faça o seguinte:
Método 1 (usando uma linha openssl dgst
)
É importante fazer aqui o tr -d '\n'
descarte de uma nova linha da entrada padrão, para que não seja incluída na entrada de string para openssl dgst
.
sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig
Este comando deve ser exibido Verified OK
.
Método 2 (comparação visual da cadeia de octetos do arquivo .sig com hash gerado manualmente)
Use o utilitário OpenSSL para despejar o conteúdo de digests.sig
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
0:d=0 hl=2 l= 49 cons: SEQUENCE
2:d=1 hl=2 l= 13 cons: SEQUENCE
4:d=2 hl=2 l= 9 prim: OBJECT :sha256
15:d=2 hl=2 l= 0 prim: NULL
17:d=1 hl=2 l= 32 prim: OCTET STRING
0000 - ac c6 ac be cd 5e 61 63-62 82 62 4b ba 77 37 6e .....^acb.bK.w7n
0010 - 0b fa ea ef 6e 10 21 01-62 64 06 2f d0 f1 60 22 ....n.!.bd./..`"
Aqui você pode ver que o objeto incorporado é um hash SHA256 e seu valor é acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.
Agora calcule o SHA256 do arquivo digests
:
sha256 -q digests
8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
- E, finalmente, calcule o SHA256 dessa sequência usando o
echo
comando e compare com o valor retornado por openssl rsautl
:
echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
Observe como o valor da etapa 3. corresponde ao valor da etapa 1., portanto, o arquivo digests
é válido.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
também não parece corresponder.