如何从Bash验证go.sum模块哈希?

时间:2019-08-27 19:12:22

标签: go-modules

主要出于好奇心,我想验证go.sum哈希值以更好地了解该过程的工作原理。但是我无法验证哈希。我在做什么错了?

使用Trillian v1.3.0

MOD=github.com/google/trillian
REL=v1.3.0

curl --silent https://sum.golang.org/lookup/${MOD}@${REL}
55144
github.com/google/trillian v1.3.0 h1:Mr/GnBzXQvowTJVaWPox/mMcYf2L1hJKNBAOffNBLlE=
github.com/google/trillian v1.3.0/go.mod h1:qYuTstG3eXZCOnvIfE8IeoEQDrjpm1dkfydVTBiSyx8=

go.sum database tree
156802
lFayLBRYOtnUSyDaIvmpVKydST+NdNWNkfSVehq3Ty8=

— sum.golang.org Az3grsd5k3D+TW56dDtJTGqaF+x6L16iYOWvSoO/T/M/UGpCGaJgDfGKvco2qJuo1Hk/j0RUxpndYL68xfrGiWacAAk=

放在旁边:有没有办法让API返回JSON?不允许使用参数。

IIUC Mr/GnBzXQvowTJVaWPox/mMcYf2L1hJKNBAOffNBLlE=应该是压缩模块目录,进行哈希处理然后对它进行base64编码的结果,但这不是:

zip -r - "${GOPATH}/pkg/mod/${MOD}@${REL}" | \
sha256sum | \
head --bytes=64 | \
base64 --wrap=0
MzQxNjhkNTQzZTk0MjFjY2FjN2NjYTljMzczZDgwYmE0MzE1ZjY4YzY3OWYzNzZjNTc4OTFiMTRlNzA0NjAwMQ==

如果我从哈希开始倒退,它似乎是二进制编码的。因此,我尝试了openssl dgst -sha256 -binary,但这也不能为我提供正确的哈希值:

zip -r - "${GOPATH}/pkg/mod/${MOD}@${REL}" | \
openssl dgst -sha256 -binary | \
base64
NBaNVD6UIcysfMqcNz2AukMV9oxnnzdsV4kbFOcEYAE=

1 个答案:

答案 0 :(得分:0)

Golang模块的校验和具有特殊的逻辑,可以基于SHA256计算哈希,最终编码为Base64。

看看:https://github.com/vikyd/go-checksum