[インデックス 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