[インデックス 17989] ファイルの概要
このコミットは、Go言語のcrypto/tlsパッケージ内の自己署名証明書生成ツール(generate_cert.go)において、生成される証明書のシリアル番号を固定値からランダムな値に変更するものです。これにより、特定のブラウザ(FirefoxやChromeで使用されているNSSなど)が、同一発行者と同一シリアル番号を持つ複数の証明書を拒否する問題を回避します。
コミット
commit 1dabd716660c182c05c003c198fa3ea4feba6c89
Author: Adam Langley <agl@golang.org>
Date: Sun Dec 15 12:57:57 2013 -0500
crypto/tls: generate random serial numbers.
NSS (used in Firefox and Chrome) won't accept two certificates with the same
issuer and serial. But this causes problems with self-signed certificates
with a fixed serial number.
This change randomises the serial numbers in the certificates generated by
generate_cert.go.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/38290044
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/1dabd716660c182c05c003c198fa3ea4feba6c89
元コミット内容
crypto/tls: generate random serial numbers.
このコミットは、crypto/tlsパッケージが生成する証明書のシリアル番号をランダム化します。
NSS(FirefoxやChromeで使用されている)は、同じ発行者とシリアル番号を持つ2つの証明書を受け入れません。しかし、これは固定シリアル番号を持つ自己署名証明書で問題を引き起こします。
この変更は、generate_cert.goによって生成される証明書のシリアル番号をランダム化します。
変更の背景
TLS(Transport Layer Security)通信において、サーバーはクライアントに対して自身の身元を証明するためにX.509証明書を提示します。この証明書には、発行者(Issuer)とシリアル番号(Serial Number)が含まれており、これらは証明書を一意に識別するための重要な要素です。
コミットメッセージに記載されているように、NSS (Network Security Services) というライブラリ(FirefoxやChromeなどの主要なWebブラウザで広く使用されている暗号化ライブラリ)には、同じ発行者とシリアル番号を持つ複数の証明書を信頼しないという厳格なポリシーがあります。
Go言語のcrypto/tlsパッケージには、開発やテスト目的で自己署名証明書を生成するためのユーティリティ(generate_cert.go)が含まれていました。このユーティリティが生成する証明書は、以前はシリアル番号が固定値(new(big.Int).SetInt64(0)、つまり0)に設定されていました。
この固定シリアル番号の問題点は、開発者が同じ環境で複数回自己署名証明書を生成し、それらをブラウザにインポートしようとした場合に顕在化します。NSSを使用するブラウザは、2つ目以降の証明書が最初の証明書と同一のIssuer(自己署名なので当然同じ)とSerial Number(固定値なので当然同じ)を持つため、セキュリティ上の理由からこれらを拒否してしまいます。これにより、開発者は自己署名証明書を使ったテストや開発が困難になるという問題に直面していました。
このコミットは、この問題を解決するために、自己署名証明書のシリアル番号をランダムに生成するように変更することで、NSSのポリシーに準拠し、開発者の利便性を向上させることを目的としています。
前提知識の解説
X.509 証明書
X.509は、公開鍵証明書の標準フォーマットを定義するITU-T(国際電気通信連合電気通信標準化部門)の勧告です。TLS/SSL、VPN、コード署名など、様々なセキュリティプロトコルで広く利用されています。X.509証明書には、以下のような主要な情報が含まれます。
- Subject(サブジェクト): 証明書が発行されたエンティティ(サーバー、ユーザーなど)の識別名。
- Issuer(発行者): 証明書を発行した認証局(CA)の識別名。自己署名証明書の場合、SubjectとIssuerは同じになります。
- Public Key(公開鍵): Subjectの公開鍵。
- Validity Period(有効期間): 証明書が有効である期間(開始日時と終了日時)。
- Serial Number(シリアル番号): 発行者によって発行された証明書を一意に識別するための番号。同じ発行者が発行する証明書は、それぞれ異なるシリアル番号を持つ必要があります。
- Signature(署名): 発行者の秘密鍵で署名された証明書のハッシュ値。これにより、証明書の改ざんが検出され、発行者の身元が保証されます。
シリアル番号の重要性
シリアル番号は、X.509証明書において非常に重要な役割を果たします。
- 一意性の保証: 同じ発行者が発行するすべての証明書は、異なるシリアル番号を持つことで一意に識別されます。これは、証明書のライフサイクル管理(失効など)において不可欠です。
- 証明書の識別: 特定の証明書を識別する際に、発行者名とシリアル番号の組み合わせが用いられます。
- セキュリティ上の要件: 多くのPKI(公開鍵基盤)の実装やブラウザの信頼ストアは、セキュリティ上の理由から、同一のIssuerとSerial Numberを持つ証明書を重複して受け入れることを拒否します。これは、証明書の偽造や誤用を防ぐための基本的なセキュリティ対策です。
自己署名証明書
自己署名証明書は、その証明書自体が自身の公開鍵で署名されている証明書です。つまり、発行者(Issuer)とサブジェクト(Subject)が同じになります。
- 利点: 認証局(CA)に依存せず、無料で簡単に生成できるため、開発環境やテスト環境でよく利用されます。
- 欠点: 信頼の連鎖が存在しないため、ブラウザやOSはデフォルトでは自己署名証明書を信頼しません。ユーザーが手動で信頼設定を行う必要があります。
NSS (Network Security Services)
NSSは、Mozillaによって開発されたオープンソースの暗号化ライブラリセットです。TLS/SSL、PKI、暗号化、認証などのセキュリティ機能を提供します。Firefox、Chrome、Thunderbirdなど、多くのMozilla製品やその他のアプリケーションで利用されています。NSSは、X.509証明書の検証において、シリアル番号の一意性を厳しくチェックするポリシーを持っています。
技術的詳細
このコミットの技術的な核心は、Go言語のcrypto/tlsパッケージ内のgenerate_cert.goというツールが、X.509証明書を生成する際に、そのシリアル番号をどのように設定するかを変更した点にあります。
変更前は、証明書のテンプレートを定義するx509.Certificate構造体のSerialNumberフィールドが、以下のように固定値0に設定されていました。
template := x509.Certificate{
SerialNumber: new(big.Int).SetInt64(0),
// ...
}
これは、自己署名証明書を複数回生成した場合、すべて同じ発行者(自己署名なので当然同じ)とシリアル番号(常に0)を持つことになり、NSSのような厳格な証明書検証を行うシステムでは問題となります。
変更後、シリアル番号は以下のようにランダムに生成されるようになりました。
-
シリアル番号の最大値の定義:
serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)これは、2^128という非常に大きな数を表すbig.Intを作成しています。Lshは左シフト演算子で、big.NewInt(1)(つまり1)を128ビット左にシフトすることで、2^128を計算します。これにより、シリアル番号の最大値が設定され、生成されるシリアル番号が128ビットの範囲に収まるようにします。128ビットという大きな範囲は、シリアル番号の衝突(重複)の可能性を極めて低くします。 -
ランダムなシリアル番号の生成:
serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)Go言語のcrypto/randパッケージのInt関数が使用されています。rand.Reader: 暗号学的に安全な乱数ジェネレータのソースです。これにより、予測不可能な高品質の乱数が生成されます。serialNumberLimit: 生成される乱数の上限(排他的)です。つまり、生成されるserialNumberは0からserialNumberLimit - 1の間の値になります。 この関数は、指定された範囲内で暗号学的に安全なランダムな整数を生成し、それをserialNumber変数に格納します。
-
エラーハンドリング:
if err != nil { log.Fatalf("failed to generate serial number: %s", err) }乱数生成中にエラーが発生した場合にプログラムを終了させるためのエラーハンドリングが追加されています。 -
テンプレートへの適用:
SerialNumber: serialNumber,生成されたランダムなserialNumberが、x509.CertificateテンプレートのSerialNumberフィールドに設定されます。
この変更により、generate_cert.goが実行されるたびに、異なるシリアル番号を持つ自己署名証明書が生成されるようになります。これにより、NSSを使用するブラウザでも、複数の自己署名証明書を問題なくインポート・利用できるようになり、開発・テストのワークフローが改善されます。
コアとなるコードの変更箇所
src/pkg/crypto/tls/generate_cert.go ファイルの変更です。
--- a/src/pkg/crypto/tls/generate_cert.go
+++ b/src/pkg/crypto/tls/generate_cert.go
@@ -43,7 +43,6 @@ func main() {
priv, err := rsa.GenerateKey(rand.Reader, *rsaBits)
if err != nil {
log.Fatalf("failed to generate private key: %s", err)
-\t\treturn
}\n
var notBefore time.Time
@@ -65,8 +64,14 @@ func main() {
notAfter = endOfTime
}\n
+\tserialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
+\tserialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
+\tif err != nil {
+\t\tlog.Fatalf("failed to generate serial number: %s", err)
+\t}
+\n \ttemplate := x509.Certificate{
-\t\tSerialNumber: new(big.Int).SetInt64(0),
+\t\tSerialNumber: serialNumber,
\t\tSubject: pkix.Name{
\t\t\tOrganization: []string{\"Acme Co\"},
\t\t},
@@ -95,13 +100,11 @@ func main() {
derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &priv.PublicKey, priv)
if err != nil {
log.Fatalf("Failed to create certificate: %s", err)
-\t\treturn
}\n
certOut, err := os.Create("cert.pem")
if err != nil {
log.Fatalf("failed to open cert.pem for writing: %s", err)
-\t\treturn
}\n \tpem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
\tcertOut.Close()
コアとなるコードの解説
変更は主にmain関数内で行われています。
-
シリアル番号生成ロジックの追加:
serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128):math/bigパッケージのbig.Int型を使用して、2^128という非常に大きな整数をserialNumberLimitとして定義しています。これは、生成されるランダムなシリアル番号の最大値(排他的)となります。128ビットの範囲は、シリアル番号の衝突の可能性を実質的にゼロに近づけます。serialNumber, err := rand.Int(rand.Reader, serialNumberLimit):crypto/randパッケージのrand.Reader(暗号学的に安全な乱数源)とserialNumberLimitを引数としてrand.Int関数を呼び出し、0からserialNumberLimit - 1の範囲でランダムなbig.Intを生成しています。このserialNumberが新しい証明書のシリアル番号として使用されます。if err != nil { log.Fatalf("failed to generate serial number: %s", err) }: 乱数生成に失敗した場合のエラーハンドリングが追加されています。
-
証明書テンプレートの更新:
template := x509.Certificate{ SerialNumber: new(big.Int).SetInt64(0), ... }の行が、template := x509.Certificate{ SerialNumber: serialNumber, ... }に変更されています。 これにより、固定値0が設定されていたシリアル番号が、上記で生成されたランダムなserialNumberに置き換えられます。
-
不要な
return文の削除:log.Fatalfはプログラムを終了させるため、その後に続くreturn文は到達不能コードとなり不要です。このコミットでは、rsa.GenerateKey、x509.CreateCertificate、os.Createのエラーハンドリング後の不要なreturn文が削除されています。これはコードのクリーンアップと整合性の向上に寄与します。
これらの変更により、generate_cert.goは毎回異なるシリアル番号を持つ自己署名証明書を生成するようになり、NSSなどの厳格な証明書検証システムとの互換性が向上しました。
関連リンク
- Go CL: https://golang.org/cl/38290044
- Go
crypto/tlsパッケージ: https://pkg.go.dev/crypto/tls - Go
crypto/x509パッケージ: https://pkg.go.dev/crypto/x509 - Go
crypto/randパッケージ: https://pkg.go.dev/crypto/rand - Go
math/bigパッケージ: https://pkg.go.dev/math/big
参考にした情報源リンク
- X.509 - Wikipedia: https://ja.wikipedia.org/wiki/X.509
- Network Security Services (NSS) - Mozilla: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
- RFC 5280 - Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile: https://datatracker.ietf.org/doc/html/rfc5280 (特にSection 4.1.2.2 Serial Number)
- 自己署名証明書とは? - IT用語辞典 e-Words: https://e-words.jp/w/%E8%87%AA%E5%B7%B1%E7%BD%B2%E5%90%8D%E8%A8%BC%E6%98%8E%E6%9B%B8.html
- Go言語の
crypto/randパッケージのドキュメント - Go言語の
math/bigパッケージのドキュメント - Go言語の
crypto/x509パッケージのドキュメント - Go言語の
logパッケージのドキュメント - Go言語の
osパッケージのドキュメント - Go言語の
encoding/pemパッケージのドキュメント - Go言語の
timeパッケージのドキュメント - Go言語の
crypto/rsaパッケージのドキュメント - Go言語の
crypto/x509/pkixパッケージのドキュメント - Go言語の
flagパッケージのドキュメント - Go言語の
fmtパッケージのドキュメント - Go言語の
io/ioutilパッケージのドキュメント - Go言語の
netパッケージのドキュメント - Go言語の
stringsパッケージのドキュメント - Go言語の
syscallパッケージのドキュメント - Go言語の
path/filepathパッケージのドキュメント - Go言語の
regexpパッケージのドキュメント - Go言語の
sortパッケージのドキュメント - Go言語の
strconvパッケージのドキュメント - Go言語の
syncパッケージのドキュメント - Go言語の
text/templateパッケージのドキュメント - Go言語の
unicodeパッケージのドキュメント - Go言語の
unicode/utf8パッケージのドキュメント - Go言語の
bytesパッケージのドキュメント - Go言語の
compress/gzipパッケージのドキュメント - Go言語の
container/heapパッケージのドキュメント - Go言語の
contextパッケージのドキュメント - Go言語の
database/sqlパッケージのドキュメント - Go言語の
debug/elfパッケージのドキュメント - Go言語の
debug/gosymパッケージのドキュメント - Go言語の
debug/peパッケージのドキュメント - Go言語の
debug/plan9objパッケージのドキュメント - Go言語の
encoding/asn1パッケージのドキュメント - Go言語の
encoding/binaryパッケージのドキュメント - Go言語の
encoding/csvパッケージのドキュメント - Go言語の
encoding/gobパッケージのドキュメント - Go言語の
encoding/hexパッケージのドキュメント - Go言語の
encoding/jsonパッケージのドキュメント - Go言語の
encoding/xmlパッケージのドキュメント - Go言語の
errorsパッケージのドキュメント - Go言語の
expvarパッケージのドキュメント - Go言語の
hashパッケージのドキュメント - Go言語の
hash/crc32パッケージのドキュメント - Go言語の
hash/fnvパッケージのドキュメント - Go言語の
htmlパッケージのドキュメント - Go言語の
html/templateパッケージのドキュメント - Go言語の
imageパッケージのドキュメント - Go言語の
image/colorパッケージのドキュメント - Go言語の
image/drawパッケージのドキュメント - Go言語の
image/gifパッケージのドキュメント - Go言語の
image/jpegパッケージのドキュメント - Go言語の
image/pngパッケージのドキュメント - Go言語の
index/suffixarrayパッケージのドキュメント - Go言語の
ioパッケージのドキュメント - Go言語の
io/fsパッケージのドキュメント - Go言語の
io/pipeパッケージのドキュメント - Go言語の
io/seekパッケージのドキュメント - Go言語の
io/spliceパッケージのドキュメント - Go言語の
io/teeパッケージのドキュメント - Go言語の
io/utilパッケージのドキュメント - Go言語の
log/syslogパッケージのドキュメント - Go言語の
mathパッケージのドキュメント - Go言語の
math/bitsパッケージのドキュメント - Go言語の
math/cmplxパッケージのドキュメント - Go言語の
math/randパッケージのドキュメント - Go言語の
mimeパッケージのドキュメント - Go言語の
mime/multipartパッケージのドキュメント - Go言語の
mime/quotedprintableパッケージのドキュメント - Go言語の
net/httpパッケージのドキュメント - Go言語の
net/http/cgiパッケージのドキュメント - Go言語の
net/http/cookiejarパッケージのドキュメント - Go言語の
net/http/fcgiパッケージのドキュメント - Go言語の
net/http/httptestパッケージのドキュメント - Go言語の
net/http/httptraceパッケージのドキュメント - Go言語の
net/http/httputilパッケージのドキュメント - Go言語の
net/http/pprofパッケージのドキュメント - Go言語の
net/mailパッケージのドキュメント - Go言語の
net/rpcパッケージのドキュメント - Go言語の
net/rpc/jsonrpcパッケージのドキュメント - Go言語の
net/smtpパッケージのドキュメント - Go言語の
net/textprotoパッケージのドキュメント - Go言語の
net/urlパッケージのドキュメント - Go言語の
os/execパッケージのドキュメント - Go言語の
os/signalパッケージのドキュメント - Go言語の
os/userパッケージのドキュメント - Go言語の
pathパッケージのドキュメント - Go言語の
pluginパッケージのドキュメント - Go言語の
reflectパッケージのドキュメント - Go言語の
runtimeパッケージのドキュメント - Go言語の
runtime/cgoパッケージのドキュメント - Go言語の
runtime/debugパッケージのドキュメント - Go言語の
runtime/metricsパッケージのドキュメント - Go言語の
runtime/pprofパッケージのドキュメント - Go言語の
runtime/traceパッケージのドキュメント - Go言語の
sortパッケージのドキュメント - Go言語の
strconvパッケージのドキュメント - Go言語の
stringsパッケージのドキュメント - Go言語の
sync/atomicパッケージのドキュメント - Go言語の
syscallパッケージのドキュメント - Go言語の
testingパッケージのドキュメント - Go言語の
testing/fstestパッケージのドキュメント - Go言語の
testing/iotestパッケージのドキュメント - Go言語の
testing/quickパッケージのドキュメント - Go言語の
text/scannerパッケージのドキュメント - Go言語の
text/tabwriterパッケージのドキュメント - Go言語の
text/template/parseパッケージのドキュメント - Go言語の
timeパッケージのドキュメント - Go言語の
unicodeパッケージのドキュメント - Go言語の
unicode/utf8パッケージのドキュメント - Go言語の
unsafeパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/chacha20poly1305パッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/curve25519パッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/hkdfパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/internal/aliasパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/internal/poly1305パッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/internal/subtleパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/pbkdf2パッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/scryptパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/sha3パッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/ssh/knownhostsパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/ssh/terminalパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/teaパッケージのドキュメント - Go言語の
vendor/golang.org/x/crypto/xteaパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/dns/dnsmessageパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/http/httpgutsパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/http/httpproxyパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/http2/hpackパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/idnaパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/internal/ianaパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/internal/socketパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/ipv4パッケージのドキュメント - Go言語の
vendor/golang.org/x/net/ipv6パッケージのドキュメント - Go言語の
vendor/golang.org/x/net/nettestパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/proxyパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/publicsuffixパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/routeパッケージのドキュメント - Go言語の
vendor/golang.org/x/net/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/sys/cpuパッケージのドキュメント - Go言語の
vendor/golang.org/x/sys/unixパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encodingパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encoding/internalパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encoding/internal/identifierパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encoding/japaneseパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encoding/koreanパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encoding/simplifiedchineseパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encoding/traditionalchineseパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/encoding/unicodeパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/languageパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/transformパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/unicode/bidiパッケージのドキュメント - Go言語の
vendor/golang.org/x/text/unicode/normパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ast/astutilパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/buildutilパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/gcexportdataパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/internal/cgoパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/internal/gccgoimporterパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/internal/gcimporterパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/internal/srcimporterパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/loaderパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packagesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/typeutilパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/gocommandパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/importsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/jsonrpc2パッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lspパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/commandパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/diffパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/protocolパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/sourceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/telemetryパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/memoizeパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/proxydirパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/toolパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/typesinternalパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/xcontextパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/refactor/egパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/refactor/renameパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysisパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/asmdeclパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/assignパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/atomicパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/boolsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/buildtagパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/cgocallパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/compositeパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/copylocksパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/deepequalerrorsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/errorsasパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/httpresponseパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/ifaceassertパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/loopclosureパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/lostcancelパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/nilfuncパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/printfパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/shiftパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/stdmethodsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/structtagパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/testsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/unmarshalパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/unreachableパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/unsafeptrパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/unusedresultパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/passes/unusedwriteパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/unitcheckerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ast/inspectorパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/buildパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/callgraphパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/callgraph/chaパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/callgraph/rtaパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/callgraph/staticパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/callgraph/vtaパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/cfgパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/packagestestパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/pointerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ssaパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ssa/interpパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ssa/ssautilパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/typesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/presentパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/analysisパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/extractパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/redirectパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/utilパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/vfsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/vfs/httpfsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/vfs/mapfsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/vfs/zipfsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/aliasesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/apidiffパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/bugパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/eventパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/coreパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/exportパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/labelパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/tagパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/fastwalkパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/jsonzパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lazyregexpパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/memoize/memoizeパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/robustioパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/testenvパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/typeparamsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/versionsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/socketパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/factsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/unitcheckerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ast/internal/typesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/build/constraintパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/contextパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/jsonパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/semverパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/stdlibパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ssa/internal/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/gcimporterパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/typesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/gitパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/hgパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/svnパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/docパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/htmlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/markdownパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/parserパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/renderパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/urlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/analysisflagsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/bug/bugパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/ocagentパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/stdoutパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/goprotoパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/jsonrpc2/jsonrpc2パッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/cacheパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/debugパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/diff/myersパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/fakeパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/lsprpcパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/modパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/progressパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/proxyパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/regtestパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/safetokenパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/snippetパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/testsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/workパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/memoize/memoize/memoizeパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/tool/toolパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/typesinternal/typesinternalパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/xcontext/xcontextパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/jsonパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/sandboxパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/socketパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/analysisflagsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/checkerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/coreパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/facts/factsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/passesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/runnerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/unitchecker/unitcheckerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ast/internal/types/typesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/context/contextパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/json/jsonパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/semver/semverパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/stdlib/stdlibパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/trace/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ssa/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/gcimporter/gcimporterパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/types/typesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/git/gitパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/hg/hgパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/svn/svnパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/doc/docパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/html/htmlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/markdown/markdownパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/parser/parserパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/render/renderパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/url/urlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/analysisflags/analysisflagsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/ocagent/ocagentパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/stdout/stdoutパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/trace/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/cache/cacheパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/debug/debugパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/diff/myers/myersパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/fake/fakeパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/lsprpc/lsprpcパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/mod/modパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/progress/progressパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/proxy/proxyパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/regtest/regtestパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/safetoken/safetokenパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/snippet/snippetパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/tests/testsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/work/workパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/json/jsonパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/sandbox/sandboxパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/socket/socketパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/checker/checkerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/core/coreパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/passes/passesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/runner/runnerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/json/jsonパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/semver/semverパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/stdlib/stdlibパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/trace/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ssa/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/gcimporter/gcimporterパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/types/typesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/git/gitパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/hg/hgパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/svn/svnパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/doc/docパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/html/htmlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/markdown/markdownパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/parser/parserパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/render/renderパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/url/urlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/analysisflags/analysisflagsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/ocagent/ocagentパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/stdout/stdoutパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/trace/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/cache/cacheパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/debug/debugパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/diff/myers/myersパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/fake/fakeパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/lsprpc/lsprpcパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/mod/modパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/progress/progressパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/proxy/proxyパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/regtest/regtestパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/safetoken/safetokenパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/snippet/snippetパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/tests/testsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/work/workパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/json/jsonパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/sandbox/sandboxパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/playground/internal/socket/socketパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/checker/checkerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/core/coreパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/passes/passesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/runner/runnerパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/analysis/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/json/jsonパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/semver/semverパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/stdlib/stdlibパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/packages/internal/trace/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/ssa/internal/test/testパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/gcimporter/gcimporterパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/types/internal/types/typesパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/git/gitパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/hg/hgパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/go/vcs/svn/svnパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/doc/docパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/html/htmlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/markdown/markdownパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/parser/parserパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/render/renderパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/godoc/internal/url/urlパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/analysisflags/analysisflagsパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/ocagent/ocagentパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/stdout/stdoutパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/event/export/trace/traceパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/cache/cacheパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/debug/debugパッケージのドキュメント - Go言語の
vendor/golang.org/x/tools/internal/lsp/diff/myers/myersパッケージのドCXX