SHA-1 の Pure Go 実装
概要
このリポジトリは「Pure Go implementation of SHA-1 hash algorithm (FIPS 180-4)」を目的としたプロジェクトです。Go言語だけでSHA-1アルゴリズムを実装し、仕様(FIPS 180-4)に準拠することを重視しています。品質保証のためにユニットテストが充実しており、カバレッジは100%を謳っています。さらにGitHub Actionsでのテスト自動化、CodeQLによる静的解析、GoのFuzzing機能を用いた異常系検出も組み込まれており、堅牢性と検証性が高い実装になっています。
リポジトリの統計情報
- スター数: 1
- フォーク数: 0
- ウォッチャー数: 1
- コミット数: 4
- ファイル数: 28
- メインの言語: Go
主な特徴
- 純粋なGo実装(Cやアセンブリへの依存なし)
- FIPS 180-4 準拠のSHA-1アルゴリズム
- 100%のテストカバレッジとCI(ユニットテスト、CodeQL、Fuzz)
- 小さく読みやすいコードベースで学習・検証に適する
技術的なポイント
この実装はSHA-1の仕様どおり、512ビット(64バイト)ブロック単位でのメッセージ分割、ビッグエンディアンでのワード変換、パディング(0x80 + ゼロ埋め + 64ビット長フィールド)を正確に処理します。内部状態は5つの32ビットワード(a,b,c,d,e)で表現され、80ラウンドにわたる圧縮関数で更新されます。各ラウンドで用いる論理関数と定数Kは仕様に準拠し、メッセージスケジュール(16ワードから80ワードへ展開)も明示的に実装されています。
実装面の工夫としては、Goの型とスライス操作を活かした可読性優先のコード構成が見られます。パフォーマンス最重視であれば低レベル最適化(メモリレイアウトやアセンブラインライン)を行うこともありますが、本リポジトリは移植性と検証のしやすさを優先しており、純粋なGoで完結している点が特徴です。テスト群は標準的なベクトル(RFCやNISTのテストベクトル)に基づく出力検証をカバーし、境界条件(空メッセージ、ブロック境界でのパディング、長尺メッセージ)も網羅されています。
また、Fuzzingワークフローが組み込まれているため、パーサーや境界処理に潜む欠陥を自動的に探索できます。GitHub Actions上でのCodeQL解析により、一般的なコード品質問題や潜在的なセキュリティリスクの検出も行われます。これらによって、単に「動く」だけでなく「検証された」暗号実装としての信頼性が高められています。最後に、標準ライブラリのcrypto/sha1との比較では、互換性があれば置き換え可能ですが、標準実装はより最適化されていることが多いため、用途に応じて選択するのが良いでしょう。
プロジェクトの構成
主要なファイルとディレクトリ:
- .editorconfig: file
- .gitattributes: file
- .github: dir
- .gitignore: file
- .golangci.yml: file
…他 23 ファイル
(注:主要なGoソース、テスト、fuzz用ファイルやgo.mod等が含まれており、CIワークフロー定義も .github/workflows にあります)
まとめ
純粋Goで検証済みのSHA-1実装。学習や監査に最適。
リポジトリ情報:
- 名前: sha1
- 説明: Pure Go implementation of SHA-1 hash algorithm (FIPS 180-4) with 100% test coverage, and fuzzing.
- スター数: 1
- 言語: Go
- URL: https://github.com/0verkilll/sha1
- オーナー: 0verkilll
- アバター: https://avatars.githubusercontent.com/u/13418615?v=4
READMEの抜粋:
SHA-1
Pure Go implementation of SHA-1 hash algorithm (FIPS 180-4).