GoでBLAKE3のmd5sumみたいなものを作った
GoでBLAKE3向けのMD5のmd5sumやSHA-256のsha256sumに相当するコマンドの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のmd5sumやsha256sumなどの代替品として利用できます。
チェックサムを計算するときはファイル名を指定して実行するだけです。
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を使っていただけると幸いです。
Discussion