🐭

GoでBLAKE3のmd5sumみたいなものを作った

2024/05/07に公開

GoBLAKE3向けのMD5のmd5sumやSHA-256のsha256sumに相当するコマンドのgb3sumを作りました。

https://github.com/sorairolake/gb3sum

この記事ではgb3sumのインストールや使い方、同じような目的のコマンドとの違いについて紹介します。

インストール

Homebrewを使っている場合はbrew installでインストールできます。

brew install sorairolake/tap/gb3sum

また、gb3sumはGoで書かれているのでgo installでインストールすることもできます。

go install github.com/sorairolake/gb3sum@latest

使い方

基本的な使い方

coreutilsのcksumの共通オプションとなるべく互換性があるようにしているので、基本的にはLinuxやFreeBSDのmd5sumsha256sumなどの代替品として利用できます。

チェックサムを計算するときはファイル名を指定して実行するだけです。

echo "Hello, world!" > foo.txt
gb3sum foo.txt | tee b3sums.txt

出力:

94f1675bac4f8bc3c593c63dbf5fe78a0bfda01082af85d5b41a65096db56bff  foo.txt

チェックサムの検証は-cオプションと所定の形式のチェックサムが書かれたファイルを指定します。

gb3sum -c b3sums.txt

出力:

foo.txt: OK

比較

coreutils

gb3sumはcoreutilsのcksumの共通オプションとなるべく互換性があるようにはしていますが、いくつか欠けているオプションや独自のオプションがあります。

  • ファイルをバイナリモードで読み込むオプション(-b)とテキストモードで読み込むオプション(-t)はありません。gb3sumは常にファイルをバイナリファイルとして扱います。
  • 出力行の区切りとしてNULを使用するオプション(-z)はありません。gb3sumでは区切りには常に改行文字を使います。
  • BLAKE3は任意の長さのハッシュ値を出力できるのでバイト単位でそれを指定するオプション(-l)があります。デフォルトでは32バイト(256ビット)のハッシュ値を出力します。

b3sum

BLAKE3のリファレンス実装はb3sumというコマンドを提供しています。
BLAKE3は通常のハッシュ以外にもメッセージ認証符号(MAC)や鍵導出関数(KDF)としても使えるので、b3sumは通常のハッシュに加えてそれらも計算できますが、gb3sumは通常のハッシュだけに対応しています。
現時点でgb3sumだけが対応している機能としては、BSD形式のチェックサムの出力(--tag)や、--ignore-missing--statusなどのオプションが実装済みであることがあります。
目的が同様なオプションは同じ名前になっているので、単純にチェックサムの計算と検証をするだけなら互換品として利用できると思います。

終わりに

gb3sumを紹介しました。
機能的にはb3sumのGo実装というよりはcoreutilsのb2sumに近いものになっていると思います。
BSD形式のチェックサムを出力したい場合やチェックサムを検証するときに--ignore-missingなどのオプションを使いたい場合にgb3sumを使っていただけると幸いです。

GitHubで編集を提案

Discussion