[インデックス 10327] ファイルの概要
このコミットは、Go言語の標準ライブラリにおける暗号化関連のドキュメントとコードベースにおいて、Cipher インターフェースへの不正確な参照を Block インターフェースに修正するものです。具体的には、doc/go_spec.html 内のGo言語仕様の記述と、src/pkg/crypto/aes/cipher.go、src/pkg/crypto/blowfish/cipher.go、src/pkg/crypto/xtea/cipher.go の各暗号実装におけるコメント内の参照が修正されています。
コミット
commit 217408abf37b54aad25c2566d3e44691bc72b699
Author: Rob Pike <r@golang.org>
Date: Wed Nov 9 14:22:44 2011 -0800
crypto: update incorrect references to Cipher interface; should be Block.
R=gri, rsc, r
CC=golang-dev
https://golang.org/cl/5372050
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/217408abf37b54aad25c2566d3e44691bc72b699
元コミット内容
crypto: update incorrect references to Cipher interface; should be Block.
変更の背景
このコミットの背景には、Go言語の crypto/cipher パッケージにおけるインターフェースの設計と、それに関するドキュメントおよびコード内の記述の整合性の問題があります。
Go言語の crypto/cipher パッケージは、ブロック暗号やストリーム暗号などの暗号プリミティブを扱うための共通インターフェースを提供します。初期の設計段階やドキュメント作成時に、特定のインターフェース名(Cipher)が、実際にはより汎用的なブロック暗号の概念(Block)を指すべき箇所で誤って使用されていたと考えられます。
具体的には、crypto/cipher パッケージには Block インターフェースが定義されており、これはブロック暗号が満たすべき BlockSize()、Encrypt()、Decrypt() メソッドを規定しています。一方で、Cipher という名前は、より広範な暗号化の概念や、特定の暗号アルゴリズムの実装クラス名として使われることが一般的です。
このコミットは、ドキュメント(Go言語仕様)や各暗号アルゴリズム(AES, Blowfish, XTEA)の実装コード内のコメントにおいて、本来 Block インターフェースを指すべき箇所が誤って Cipher インターフェースと記述されていた点を修正し、コードとドキュメントの正確性を向上させることを目的としています。これにより、Go言語の暗号ライブラリを利用する開発者が、正しいインターフェースの概念を理解しやすくなります。
前提知識の解説
Go言語のインターフェース
Go言語におけるインターフェースは、メソッドのシグネチャの集合を定義する型です。インターフェースは、そのインターフェースが定義するすべてのメソッドを持つ任意の型によって「実装」されます。Goでは、明示的にインターフェースを実装すると宣言する必要はなく、必要なメソッドをすべて持っていれば、その型はそのインターフェースを満たしているとみなされます(構造的型付け)。
例:
type Reader interface {
Read(p []byte) (n int, err error)
}
type Writer interface {
Write(p []byte) (n int, err error)
}
type ReadWriter interface {
Reader
Writer
}
この例では、ReadWriter インターフェースは Reader と Writer インターフェースの両方のメソッド(Read と Write)を持つことを要求します。
暗号化におけるブロック暗号とストリーム暗号
暗号化方式は大きく分けて「ブロック暗号」と「ストリーム暗号」の2種類があります。
-
ブロック暗号 (Block Cipher): データを固定長のブロック(例: 64ビット、128ビット)に分割し、そのブロック単位で暗号化・復号化を行います。各ブロックは独立して処理されるか、前のブロックの処理結果に依存して処理されます(暗号利用モード)。AES (Advanced Encryption Standard) やBlowfish、XTEAなどが代表的なブロック暗号です。 ブロック暗号の基本的な操作は、ある固定サイズの入力ブロックを、同じサイズの出力ブロックに変換することです。
-
ストリーム暗号 (Stream Cipher): データをビットまたはバイト単位で暗号化・復号化します。鍵ストリームと呼ばれる擬似乱数列を生成し、これを平文とXORすることで暗号化を行います。RC4などが代表的です。
Go言語の crypto/cipher パッケージにおける Block インターフェース
Go言語の crypto/cipher パッケージは、ブロック暗号の共通インターフェースとして Block インターフェースを定義しています。
package cipher
// Block is an interface to a block cipher in ECB mode.
type Block interface {
// BlockSize returns the cipher's block size in bytes.
BlockSize() int
// Encrypt encrypts the first BlockSize bytes of src and writes
// the result to dst.
// Dst and src may overlap.
Encrypt(dst, src []byte)
// Decrypt decrypts the first BlockSize bytes of src and writes
// the result to dst.
// Dst and src may overlap.
Decrypt(dst, src []byte)
}
この Block インターフェースは、任意のブロック暗号アルゴリズムが実装すべき基本的な機能(ブロックサイズ、暗号化、復号化)を定義しています。crypto/aes や crypto/blowfish、crypto/xtea などのパッケージで提供される具体的な暗号アルゴリズムは、この Block インターフェースを実装しています。
このコミットのポイントは、Block インターフェースがブロック暗号の「プリミティブな操作」を定義するものであるのに対し、Cipher という言葉が、より広範な暗号化の概念や、crypto/cipher パッケージ内で NewCBCEncrypter や NewCTR など、特定の「暗号利用モード」と組み合わせて使用される構造体やインターフェースを指す場合があるため、混同を避けるために Block を明示的に使用することが重要であるという点です。
技術的詳細
このコミットは、Go言語のドキュメントと暗号ライブラリのコードベースにおける用語の正確性を高めるための修正です。主な変更点は以下の通りです。
-
doc/go_spec.htmlの修正: Go言語の仕様書(doc/go_spec.html)は、Go言語の構文やセマンティクスを定義する公式ドキュメントです。このファイル内のインターフェースの例として、Cipherという名前のインターフェースが定義されていました。しかし、これはcrypto/cipherパッケージのBlockインターフェースの概念を説明するためのものであり、名前が実態と合っていませんでした。type Cipher interface { ... }がtype Block interface { ... }に変更されました。- それに伴い、
type MyCipher Cipherがtype MyBlock Blockに変更されました。 - さらに、ドキュメントのバージョン日付が
November 1, 2011からNovember 9, 2011に更新されました。
-
src/pkg/crypto/aes/cipher.go、src/pkg/crypto/blowfish/cipher.go、src/pkg/crypto/xtea/cipher.goのコメント修正: これらのファイルは、それぞれAES、Blowfish、XTEAという具体的なブロック暗号アルゴリズムの実装を提供しています。各実装のBlockSize()メソッドのコメントには、このメソッドが「Cipherインターフェースを満たすために必要である」という記述がありました。しかし、前述の通り、これらのアルゴリズムが満たすべきはcrypto/cipherパッケージのBlockインターフェースです。// It is necessary to satisfy the Cipher interface in theが// It is necessary to satisfy the Block interface in theに修正されました。
これらの変更は、コードの機能には影響を与えませんが、ドキュメントとコードコメントの正確性を向上させ、Go言語の暗号ライブラリを使用する開発者が混乱することなく、正しいインターフェースの概念を理解できるようにすることを目的としています。特に、Block インターフェースはブロック暗号の基本的な操作を定義するものであり、Cipher という用語がより広範な意味で使われる可能性があるため、この区別は重要です。
コアとなるコードの変更箇所
doc/go_spec.html
--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -1,5 +1,5 @@
<!-- title The Go Programming Language Specification -->
-<!-- subtitle Version of November 1, 2011 -->
+<!-- subtitle Version of November 9, 2011 -->
<!--
TODO
@@ -1688,7 +1688,7 @@ type TreeNode struct {\n value *Comparable\n }\n \n-type Cipher interface {\n+type Block interface {\n \tBlockSize() int\n \tEncrypt(src, dst []byte)\n \tDecrypt(src, dst [][]byte)\n@@ -1720,8 +1720,8 @@ type PrintableMutex struct {\n Mutex\n }\n \n-// MyCipher is an interface type that has the same method set as Cipher.\n-type MyCipher Cipher\n+// MyBlock is an interface type that has the same method set as Block.\n+type MyBlock Block\n </pre>\n \n <p>\n```
### `src/pkg/crypto/aes/cipher.go`
```diff
--- a/src/pkg/crypto/aes/cipher.go
+++ b/src/pkg/crypto/aes/cipher.go
@@ -41,7 +41,7 @@ func NewCipher(key []byte) (*Cipher, error) {
}
// BlockSize returns the AES block size, 16 bytes.
-// It is necessary to satisfy the Cipher interface in the
+// It is necessary to satisfy the Block interface in the
// package "crypto/cipher".
func (c *Cipher) BlockSize() int { return BlockSize }
src/pkg/crypto/blowfish/cipher.go
--- a/src/pkg/crypto/blowfish/cipher.go
+++ b/src/pkg/crypto/blowfish/cipher.go
@@ -54,7 +54,7 @@ func NewSaltedCipher(key, salt []byte) (*Cipher, error) {
}
// BlockSize returns the Blowfish block size, 8 bytes.
-// It is necessary to satisfy the Cipher interface in the
+// It is necessary to satisfy the Block interface in the
// package "crypto/cipher".
func (c *Cipher) BlockSize() int { return BlockSize }
src/pkg/crypto/xtea/cipher.go
--- a/src/pkg/crypto/xtea/cipher.go
+++ b/src/pkg/crypto/xtea/cipher.go
@@ -44,7 +44,7 @@ func NewCipher(key []byte) (*Cipher, error) {
}
// BlockSize returns the XTEA block size, 8 bytes.
-// It is necessary to satisfy the Cipher interface in the
+// It is necessary to satisfy the Block interface in the
// package "crypto/cipher".
func (c *Cipher) BlockSize() int { return BlockSize }
コアとなるコードの解説
doc/go_spec.html の変更
-
<!-- subtitle Version of November 1, 2011 -->から<!-- subtitle Version of November 9, 2011 -->への変更: これはドキュメントの更新日を示すメタデータであり、このコミットが2011年11月9日に行われたことを反映しています。 -
type Cipher interface { ... }からtype Block interface { ... }への変更: Go言語仕様のインターフェースの例として示されていたCipherインターフェースの名前がBlockに変更されました。これは、crypto/cipherパッケージで実際にブロック暗号の基本インターフェースとしてBlockが使われていることに合わせて、ドキュメントの例もより正確な用語を使用するように修正されたものです。これにより、読者はGo言語のインターフェースの概念を学ぶ際に、実際の標準ライブラリの命名規則と一致する例を見ることができます。 -
type MyCipher Cipherからtype MyBlock Blockへの変更: 上記のインターフェース名の変更に伴い、そのインターフェースを埋め込む(またはそのメソッドセットを持つ)別のインターフェースの例MyCipherもMyBlockに変更されました。これは一貫性を保つための修正です。
src/pkg/crypto/aes/cipher.go、src/pkg/crypto/blowfish/cipher.go、src/pkg/crypto/xtea/cipher.go の変更
// It is necessary to satisfy the Cipher interface in theから// It is necessary to satisfy the Block interface in theへの変更: これらのファイルは、それぞれAES、Blowfish、XTEAの具体的なブロック暗号実装です。各実装のBlockSize()メソッドのコメントには、このメソッドがcrypto/cipherパッケージのCipherインターフェースを満たすために必要であると書かれていました。しかし、これらの暗号が実際に満たすべきインターフェースはcrypto/cipher.Blockです。この修正により、コメントがコードの意図とcrypto/cipherパッケージの実際の設計に合致するようになり、コードの可読性と正確性が向上しました。
これらの変更は、Go言語のドキュメントと標準ライブラリの整合性を高め、開発者がより正確な情報に基づいてコードを理解し、記述できるようにするための重要な改善です。
関連リンク
- Go Gerrit Code Review: https://golang.org/cl/5372050
参考にした情報源リンク
- Go言語の公式ドキュメント (Go Programming Language Specification): https://go.dev/ref/spec
- Go言語の
crypto/cipherパッケージドキュメント: https://pkg.go.dev/crypto/cipher - Go言語の
crypto/aesパッケージドキュメント: https://pkg.go.dev/crypto/aes - Go言語の
crypto/blowfishパッケージドキュメント: https://pkg.go.dev/crypto/blowfish - Go言語の
crypto/xteaパッケージドキュメント: https://pkg.go.dev/crypto/xtea - Go言語におけるインターフェースの概念 (A Tour of Go - Interfaces): https://go.dev/tour/methods/9
- ブロック暗号とストリーム暗号に関する一般的な情報 (Wikipediaなど):
[インデックス 10327] ファイルの概要
このコミットは、Go言語の標準ライブラリにおける暗号化関連のドキュメントとコードベースにおいて、Cipher インターフェースへの不正確な参照を Block インターフェースに修正するものです。具体的には、doc/go_spec.html 内のGo言語仕様の記述と、src/pkg/crypto/aes/cipher.go、src/pkg/crypto/blowfish/cipher.go、src/pkg/crypto/xtea/cipher.go の各暗号実装におけるコメント内の参照が修正されています。
コミット
commit 217408abf37b54aad25c2566d3e44691bc72b699
Author: Rob Pike <r@golang.org>
Date: Wed Nov 9 14:22:44 2011 -0800
crypto: update incorrect references to Cipher interface; should be Block.
R=gri, rsc, r
CC=golang-dev
https://golang.org/cl/5372050
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/217408abf37b54aad25c2566d3e44691bc72b699
元コミット内容
crypto: update incorrect references to Cipher interface; should be Block.
変更の背景
このコミットの背景には、Go言語の crypto/cipher パッケージにおけるインターフェースの設計と、それに関するドキュメントおよびコード内の記述の整合性の問題があります。
Go言語の crypto/cipher パッケージは、ブロック暗号やストリーム暗号などの暗号プリミティブを扱うための共通インターフェースを提供します。初期の設計段階やドキュメント作成時に、特定のインターフェース名(Cipher)が、実際にはより汎用的なブロック暗号の概念(Block)を指すべき箇所で誤って使用されていたと考えられます。
具体的には、crypto/cipher パッケージには Block インターフェースが定義されており、これはブロック暗号が満たすべき BlockSize()、Encrypt()、Decrypt() メソッドを規定しています。一方で、Cipher という名前は、より広範な暗号化の概念や、特定の暗号アルゴリズムの実装クラス名として使われることが一般的です。
このコミットは、ドキュメント(Go言語仕様)や各暗号アルゴリズム(AES, Blowfish, XTEA)の実装コード内のコメントにおいて、本来 Block インターフェースを指すべき箇所が誤って Cipher インターフェースと記述されていた点を修正し、コードとドキュメントの正確性を向上させることを目的としています。これにより、Go言語の暗号ライブラリを利用する開発者が、正しいインターフェースの概念を理解しやすくなります。
前提知識の解説
Go言語のインターフェース
Go言語におけるインターフェースは、メソッドのシグネチャの集合を定義する型です。インターフェースは、そのインターフェースが定義するすべてのメソッドを持つ任意の型によって「実装」されます。Goでは、明示的にインターフェースを実装すると宣言する必要はなく、必要なメソッドをすべて持っていれば、その型はそのインターフェースを満たしているとみなされます(構造的型付け)。
例:
type Reader interface {
Read(p []byte) (n int, err error)
}
type Writer interface {
Write(p []byte) (n int, err error)
}
type ReadWriter interface {
Reader
Writer
}
この例では、ReadWriter インターフェースは Reader と Writer インターフェースの両方のメソッド(Read と Write)を持つことを要求します。
暗号化におけるブロック暗号とストリーム暗号
暗号化方式は大きく分けて「ブロック暗号」と「ストリーム暗号」の2種類があります。
-
ブロック暗号 (Block Cipher): データを固定長のブロック(例: 64ビット、128ビット)に分割し、そのブロック単位で暗号化・復号化を行います。各ブロックは独立して処理されるか、前のブロックの処理結果に依存して処理されます(暗号利用モード)。AES (Advanced Encryption Standard) やBlowfish、XTEAなどが代表的なブロック暗号です。 ブロック暗号の基本的な操作は、ある固定サイズの入力ブロックを、同じサイズの出力ブロックに変換することです。
-
ストリーム暗号 (Stream Cipher): データをビットまたはバイト単位で暗号化・復号化します。鍵ストリームと呼ばれる擬似乱数列を生成し、これを平文とXORすることで暗号化を行います。RC4などが代表的です。
Go言語の crypto/cipher パッケージにおける Block インターフェースと BlockMode インターフェース
Go言語の crypto/cipher パッケージは、ブロック暗号の共通インターフェースとして Block インターフェースを定義しています。
package cipher
// Block is an interface to a block cipher in ECB mode.
type Block interface {
// BlockSize returns the cipher's block size in bytes.
BlockSize() int
// Encrypt encrypts the first BlockSize bytes of src and writes
// the result to dst.
// Dst and src may overlap.
Encrypt(dst, src []byte)
// Decrypt decrypts the first BlockSize bytes of src and writes
// the result to dst.
// Dst and src may overlap.
Decrypt(dst, src []byte)
}
この Block インターフェースは、任意のブロック暗号アルゴリズムが実装すべき基本的な機能(ブロックサイズ、暗号化、復号化)を定義しています。crypto/aes や crypto/blowfish、crypto/xtea などのパッケージで提供される具体的な暗号アルゴリズムは、この Block インターフェースを実装しています。
crypto/cipher パッケージには、Block インターフェースの他に BlockMode インターフェースも存在します。
-
Blockインターフェース: これは低レベルなブロック暗号アルゴリズムそのものを表し、単一のブロックの暗号化・復号化操作を定義します。BlockSize()、Encrypt(dst, src []byte)、Decrypt(dst, src []byte)メソッドを持ち、各操作は独立しています。 -
BlockModeインターフェース: これは特定の暗号利用モード(例: CBC, CTR, GCM)で動作するブロック暗号を表します。CryptBlocks(dst, src []byte)メソッドを提供し、複数のブロックを処理します。BlockModeの実装は、基盤となるBlockインスタンスを使用して構築され、内部状態を保持することがあります(例: CBCモードでの前のブロックの暗号文)。
このコミットのポイントは、Block インターフェースがブロック暗号の「プリミティブな操作」を定義するものであるのに対し、Cipher という言葉が、より広範な暗号化の概念や、crypto/cipher パッケージ内で NewCBCEncrypter や NewCTR など、特定の「暗号利用モード」と組み合わせて使用される構造体やインターフェースを指す場合があるため、混同を避けるために Block を明示的に使用することが重要であるという点です。
技術的詳細
このコミットは、Go言語のドキュメントと暗号ライブラリのコードベースにおける用語の正確性を高めるための修正です。主な変更点は以下の通りです。
-
doc/go_spec.htmlの修正: Go言語の仕様書(doc/go_spec.html)は、Go言語の構文やセマンティクスを定義する公式ドキュメントです。このファイル内のインターフェースの例として、Cipherという名前のインターフェースが定義されていました。しかし、これはcrypto/cipherパッケージのBlockインターフェースの概念を説明するためのものであり、名前が実態と合っていませんでした。type Cipher interface { ... }がtype Block interface { ... }に変更されました。- それに伴い、
type MyCipher Cipherがtype MyBlock Blockに変更されました。 - さらに、ドキュメントのバージョン日付が
November 1, 2011からNovember 9, 2011に更新されました。
-
src/pkg/crypto/aes/cipher.go、src/pkg/crypto/blowfish/cipher.go、src/pkg/crypto/xtea/cipher.goのコメント修正: これらのファイルは、それぞれAES、Blowfish、XTEAという具体的なブロック暗号アルゴリズムの実装を提供しています。各実装のBlockSize()メソッドのコメントには、このメソッドが「Cipherインターフェースを満たすために必要である」という記述がありました。しかし、前述の通り、これらのアルゴリズムが満たすべきはcrypto/cipherパッケージのBlockインターフェースです。// It is necessary to satisfy the Cipher interface in theが// It is necessary to satisfy the Block interface in theに修正されました。
これらの変更は、コードの機能には影響を与えませんが、ドキュメントとコードコメントの正確性を向上させ、Go言語の暗号ライブラリを使用する開発者が混乱することなく、正しいインターフェースの概念を理解できるようにすることを目的としています。特に、Block インターフェースはブロック暗号の基本的な操作を定義するものであり、Cipher という用語がより広範な意味で使われる可能性があるため、この区別は重要です。
コアとなるコードの変更箇所
doc/go_spec.html
--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -1,5 +1,5 @@
<!-- title The Go Programming Language Specification -->
-<!-- subtitle Version of November 1, 2011 -->
+<!-- subtitle Version of November 9, 2011 -->
<!--
TODO
@@ -1688,7 +1688,7 @@ type TreeNode struct {\n value *Comparable\n }\n \n-type Cipher interface {\n+type Block interface {\n \tBlockSize() int\n \tEncrypt(src, dst []byte)\n \tDecrypt(src, dst [][]byte)\n@@ -1720,8 +1720,8 @@ type PrintableMutex struct {\n Mutex\n }\n \n-// MyCipher is an interface type that has the same method set as Cipher.\n-type MyCipher Cipher\n+// MyBlock is an interface type that has the same method set as Block.\n+type MyBlock Block\n </pre>\n \n <p>\n```
### `src/pkg/crypto/aes/cipher.go`
```diff
--- a/src/pkg/crypto/aes/cipher.go
+++ b/src/pkg/crypto/aes/cipher.go
@@ -41,7 +41,7 @@ func NewCipher(key []byte) (*Cipher, error) {
}
// BlockSize returns the AES block size, 16 bytes.
-// It is necessary to satisfy the Cipher interface in the
+// It is necessary to satisfy the Block interface in the
// package "crypto/cipher".
func (c *Cipher) BlockSize() int { return BlockSize }
src/pkg/crypto/blowfish/cipher.go
--- a/src/pkg/crypto/blowfish/cipher.go
+++ b/src/pkg/crypto/blowfish/cipher.go
@@ -54,7 +54,7 @@ func NewSaltedCipher(key, salt []byte) (*Cipher, error) {
}
// BlockSize returns the Blowfish block size, 8 bytes.
-// It is necessary to satisfy the Cipher interface in the
+// It is necessary to satisfy the Block interface in the
// package "crypto/cipher".
func (c *Cipher) BlockSize() int { return BlockSize }
src/pkg/crypto/xtea/cipher.go
--- a/src/pkg/crypto/xtea/cipher.go
+++ b/src/pkg/crypto/xtea/cipher.go
@@ -44,7 +44,7 @@ func NewCipher(key []byte) (*Cipher, error) {
}
// BlockSize returns the XTEA block size, 8 bytes.
-// It is necessary to satisfy the Cipher interface in the
+// It is necessary to satisfy the Block interface in the
// package "crypto/cipher".
func (c *Cipher) BlockSize() int { return BlockSize }
コアとなるコードの解説
doc/go_spec.html の変更
-
<!-- subtitle Version of November 1, 2011 -->から<!-- subtitle Version of November 9, 2011 -->への変更: これはドキュメントの更新日を示すメタデータであり、このコミットが2011年11月9日に行われたことを反映しています。 -
type Cipher interface { ... }からtype Block interface { ... }への変更: Go言語仕様のインターフェースの例として示されていたCipherインターフェースの名前がBlockに変更されました。これは、crypto/cipherパッケージで実際にブロック暗号の基本インターフェースとしてBlockが使われていることに合わせて、ドキュメントの例もより正確な用語を使用するように修正されたものです。これにより、読者はGo言語のインターフェースの概念を学ぶ際に、実際の標準ライブラリの命名規則と一致する例を見ることができます。 -
type MyCipher Cipherからtype MyBlock Blockへの変更: 上記のインターフェース名の変更に伴い、そのインターフェースを埋め込む(またはそのメソッドセットを持つ)別のインターフェースの例MyCipherもMyBlockに変更されました。これは一貫性を保つための修正です。
src/pkg/crypto/aes/cipher.go、src/pkg/crypto/blowfish/cipher.go、src/pkg/crypto/xtea/cipher.go の変更
// It is necessary to satisfy the Cipher interface in theから// It is necessary to satisfy the Block interface in theへの変更: これらのファイルは、それぞれAES、Blowfish、XTEAの具体的なブロック暗号実装です。各実装のBlockSize()メソッドのコメントには、このメソッドがcrypto/cipherパッケージのCipherインターフェースを満たすために必要であると書かれていました。しかし、これらの暗号が実際に満たすべきインターフェースはcrypto/cipher.Blockです。この修正により、コメントがコードの意図とcrypto/cipherパッケージの実際の設計に合致するようになり、コードの可読性と正確性が向上しました。
これらの変更は、Go言語のドキュメントと標準ライブラリの整合性を高め、開発者がより正確な情報に基づいてコードを理解し、記述できるようにするための重要な改善です。
関連リンク
- Go Gerrit Code Review: https://golang.org/cl/5372050
参考にした情報源リンク
- Go言語の公式ドキュメント (Go Programming Language Specification): https://go.dev/ref/spec
- Go言語の
crypto/cipherパッケージドキュメント: https://pkg.go.dev/crypto/cipher - Go言語の
crypto/aesパッケージドキュメント: https://pkg.go.dev/crypto/aes - Go言語の
crypto/blowfishパッケージドキュメント: https://pkg.go.dev/crypto/blowfish - Go言語の
crypto/xteaパッケージドキュメント: https://pkg.go.dev/crypto/xtea - Go言語におけるインターフェースの概念 (A Tour of Go - Interfaces): https://go.dev/tour/methods/9
- ブロック暗号とストリーム暗号に関する一般的な情報 (Wikipediaなど):