Add callgraphs to docs

This commit is contained in:
eyedeekay
2025-02-26 20:52:16 -05:00
parent 35eb66084b
commit f46bd95b68
85 changed files with 27081 additions and 471 deletions

3
.gitignore vendored
View File

@ -9,3 +9,6 @@ go-i2p
.idea/
router.info
log
*.gv
diff
err

View File

@ -64,11 +64,5 @@ info:
release:
github-release release -u go-i2p -r go-i2p -n "${RELEASE_VERSION}" -t "${RELEASE_TAG}" -d "${RELEASE_DESCRIPTION}" -p
callvis:
go-callvis -file index.html -format svg -group pkg,type github.com/go-i2p/go-i2p/
godoc:
find lib -type d -exec bash -c "ls {}/*.go && godocdown -o ./{}/doc.md ./{}" \;
gocallvis:
find lib -type d -exec bash -c "ls {}/*.go && go-callvis -focus github.com/go-i2p/go-i2p/{} -file ./{}/index.html -format svg -group pkg,type github.com/go-i2p/go-i2p/{}" \;
./callgraph.sh

View File

@ -12,6 +12,7 @@ for dir in $dirs; do
packageLine=$(grep -E "^package" $file)
package=$(echo $packageLine | awk '{print $2}')
echo "Generating callgraph for $package"
go-callvis -nostd -focus "$package" -group pkg,type -format svg -file $dir/$package.svg "github.com/go-i2p/go-i2p/$dir"
git add -v "$dir/$package.svg"
go-callvis -nostd -focus "$package" -group pkg,type -format svg -file $dir/$package "github.com/go-i2p/go-i2p/$dir"
godocdown -template template.md -o "$dir/doc.md" "./$dir"
git add -v "$dir/$package.svg" "$dir/doc.md"
done

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="0pt" height="0pt"
viewBox="0.00 0.00 0.00 0.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 0)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,0 0,0 0,0 0,0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 584 B

View File

@ -21,3 +21,35 @@ type Bootstrap interface {
```
interface defining a way to bootstrap into the i2p network
# bootstrap
--
import "github.com/go-i2p/go-i2p/lib/bootstrap"
provides generic interfaces for initial bootstrap into network and network
### reseeding
![bootstrap.svg](bootstrap)
## Usage
#### type Bootstrap
```go
type Bootstrap interface {
// get more peers for bootstrap
// try obtaining at most n router infos
// if n is 0 then try obtaining as many router infos as possible
// returns nil and error if we cannot fetch ANY router infos
// returns a channel that yields 1 slice of router infos containing n or fewer router infos, caller must close channel after use
GetPeers(n int) (chan []router_info.RouterInfo, error)
}
```
interface defining a way to bootstrap into the i2p network
bootstrap
github.com/go-i2p/go-i2p/lib/bootstrap

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="0pt" height="0pt"
viewBox="0.00 0.00 0.00 0.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 0)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,0 0,0 0,0 0,0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 584 B

View File

@ -31,3 +31,45 @@ DecodeString decodes base64 string to []byte I2PEncoding
func EncodeToString(data []byte) string
```
EncodeToString encodes []byte to a base32 string using I2PEncoding
# base32
--
import "github.com/go-i2p/go-i2p/lib/common/base32"
Package base32 implmenets utilities for encoding and decoding text using I2P's
### alphabet
![base32.svg](base32)
## Usage
```go
const I2PEncodeAlphabet = "abcdefghijklmnopqrstuvwxyz234567"
```
I2PEncodeAlphabet is the base32 encoding used throughout I2P. RFC 3548 using
lowercase characters.
```go
var I2PEncoding *b32.Encoding = b32.NewEncoding(I2PEncodeAlphabet)
```
I2PEncoding is the standard base32 encoding used through I2P.
#### func DecodeString
```go
func DecodeString(data string) ([]byte, error)
```
DecodeString decodes base64 string to []byte I2PEncoding
#### func EncodeToString
```go
func EncodeToString(data []byte) string
```
EncodeToString encodes []byte to a base32 string using I2PEncoding
base32
github.com/go-i2p/go-i2p/lib/common/base32

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="0pt" height="0pt"
viewBox="0.00 0.00 0.00 0.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 0)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,0 0,0 0,0 0,0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 584 B

View File

@ -31,3 +31,45 @@ DecodeString decodes base64 string to []byte I2PEncoding
func EncodeToString(data []byte) string
```
I2PEncoding is the standard base64 encoding used through I2P.
# base64
--
import "github.com/go-i2p/go-i2p/lib/common/base64"
Package base64 implmenets utilities for encoding and decoding text using I2P's
### alphabet
![base64.svg](base64)
## Usage
```go
const I2PEncodeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-~"
```
I2PEncodeAlphabet is the base64 encoding used throughout I2P. RFC 4648 with "/""
replaced with "~", and "+" replaced with "-".
```go
var I2PEncoding *b64.Encoding = b64.NewEncoding(I2PEncodeAlphabet)
```
I2PEncoding is the standard base64 encoding used through I2P.
#### func DecodeString
```go
func DecodeString(str string) ([]byte, error)
```
DecodeString decodes base64 string to []byte I2PEncoding
#### func EncodeToString
```go
func EncodeToString(data []byte) string
```
I2PEncoding is the standard base64 encoding used through I2P.
base64
github.com/go-i2p/go-i2p/lib/common/base64

View File

@ -0,0 +1,640 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="1128pt" height="955pt"
viewBox="0.00 0.00 1127.91 955.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 955)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-955 1127.912,-955 1127.912,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-947 1119.912,-947 1119.912,-8 8,-8"/>
<text text-anchor="middle" x="563.956" y="-926.8" font-family="Arial" font-size="18.00" fill="#000000">certificate</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="989.2745,-389 989.2745,-510 1082.5957,-510 1082.5957,-389 989.2745,-389"/>
<text text-anchor="middle" x="1035.9351" y="-491.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M1009.2745,-397C1009.2745,-397 1062.5957,-397 1062.5957,-397 1068.5957,-397 1074.5957,-403 1074.5957,-409 1074.5957,-409 1074.5957,-463 1074.5957,-463 1074.5957,-469 1068.5957,-475 1062.5957,-475 1062.5957,-475 1009.2745,-475 1009.2745,-475 1003.2745,-475 997.2745,-469 997.2745,-463 997.2745,-463 997.2745,-409 997.2745,-409 997.2745,-403 1003.2745,-397 1009.2745,-397"/>
<text text-anchor="middle" x="1035.9351" y="-405.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="998.8376,-815 998.8376,-894 1073.0326,-894 1073.0326,-815 998.8376,-815"/>
<text text-anchor="middle" x="1035.9351" y="-875.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="967.3404,-16 967.3404,-303 1104.5298,-303 1104.5298,-16 967.3404,-16"/>
<text text-anchor="middle" x="1035.9351" y="-284.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M996.8257,-68C996.8257,-68 1075.0445,-68 1075.0445,-68 1081.0445,-68 1087.0445,-74 1087.0445,-80 1087.0445,-80 1087.0445,-256 1087.0445,-256 1087.0445,-262 1081.0445,-268 1075.0445,-268 1075.0445,-268 996.8257,-268 996.8257,-268 990.8257,-268 984.8257,-262 984.8257,-256 984.8257,-256 984.8257,-80 984.8257,-80 984.8257,-74 990.8257,-68 996.8257,-68"/>
<text text-anchor="middle" x="1035.9351" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="959.9582,-561 959.9582,-796 1111.912,-796 1111.912,-561 959.9582,-561"/>
<text text-anchor="middle" x="1035.9351" y="-777.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M1011.9919,-569C1011.9919,-569 1059.8783,-569 1059.8783,-569 1065.8783,-569 1071.8783,-575 1071.8783,-581 1071.8783,-581 1071.8783,-696 1071.8783,-696 1071.8783,-702 1065.8783,-708 1059.8783,-708 1059.8783,-708 1011.9919,-708 1011.9919,-708 1005.9919,-708 999.9919,-702 999.9919,-696 999.9919,-696 999.9919,-581 999.9919,-581 999.9919,-575 1005.9919,-569 1011.9919,-569"/>
<text text-anchor="middle" x="1035.9351" y="-577.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Integer)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M309.045,-253C309.045,-253 839.6524,-253 839.6524,-253 845.6524,-253 851.6524,-259 851.6524,-265 851.6524,-265 851.6524,-502 851.6524,-502 851.6524,-508 845.6524,-514 839.6524,-514 839.6524,-514 309.045,-514 309.045,-514 303.045,-514 297.045,-508 297.045,-502 297.045,-502 297.045,-265 297.045,-265 297.045,-259 303.045,-253 309.045,-253"/>
<text text-anchor="middle" x="574.3487" y="-261.5" font-family="Arial" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType | defined in certificate.go:252&#10;at certificate.go:265: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at certificate.go:258: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:263: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M883.0931,-877C883.0931,-877 740.5539,-877 740.5539,-877 734.5539,-877 728.5539,-871 728.5539,-865 728.5539,-865 728.5539,-853 728.5539,-853 728.5539,-847 734.5539,-841 740.5539,-841 740.5539,-841 883.0931,-841 883.0931,-841 889.0931,-841 895.0931,-847 895.0931,-853 895.0931,-853 895.0931,-865 895.0931,-865 895.0931,-871 889.0931,-877 883.0931,-877"/>
<text text-anchor="middle" x="811.8235" y="-854.8" font-family="Verdana" font-size="14.00" fill="#000000">NewCertificateWithType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="node14" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_node14"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt | defined in integer.go:68">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1091.8889,-761C1091.8889,-761 979.9813,-761 979.9813,-761 973.9813,-761 967.9813,-755 967.9813,-749 967.9813,-749 967.9813,-737 967.9813,-737 967.9813,-731 973.9813,-725 979.9813,-725 979.9813,-725 1091.8889,-725 1091.8889,-725 1097.8889,-725 1103.8889,-731 1103.8889,-737 1103.8889,-737 1103.8889,-749 1103.8889,-749 1103.8889,-755 1097.8889,-761 1091.8889,-761"/>
<text text-anchor="middle" x="1035.9351" y="-738.8" font-family="Verdana" font-size="14.00" fill="#000000">NewIntegerFromInt</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_edge10"><a xlink:title="at certificate.go:265: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]">
<path fill="none" stroke="#8b4513" d="M846.8409,-840.875C885.9511,-820.6316 949.3286,-787.8274 991.8008,-765.8439"/>
<polygon fill="#8b4513" stroke="#8b4513" points="993.5225,-768.8939 1000.7945,-761.1888 990.3047,-762.6772 993.5225,-768.8939"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node21" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node21"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1053.1304,-859C1053.1304,-859 1018.7398,-859 1018.7398,-859 1012.7398,-859 1006.7398,-853 1006.7398,-847 1006.7398,-847 1006.7398,-835 1006.7398,-835 1006.7398,-829 1012.7398,-823 1018.7398,-823 1018.7398,-823 1053.1304,-823 1053.1304,-823 1059.1304,-823 1065.1304,-829 1065.1304,-835 1065.1304,-835 1065.1304,-847 1065.1304,-847 1065.1304,-853 1059.1304,-859 1053.1304,-859"/>
<text text-anchor="middle" x="1035.9351" y="-836.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge22" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge22"><a xlink:title="at certificate.go:258: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:263: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M894.9622,-862.7951C907.3809,-862.6638 920.018,-862.1379 931.9582,-861 953.5195,-858.9452 977.2591,-854.5452 996.6045,-850.3941"/>
<polygon fill="#8b4513" stroke="#8b4513" points="997.56,-853.7675 1006.571,-848.1951 996.0518,-846.9319 997.56,-853.7675"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate | defined in certificate.go:150&#10;at certificate.go:156: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:166: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:180: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:191: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:160: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at certificate.go:170: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at certificate.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at certificate.go:159: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:169: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:178: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:182: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:192: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:194: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at certificate.go:161: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:171: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:179: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M853.492,-558C853.492,-558 770.155,-558 770.155,-558 764.155,-558 758.155,-552 758.155,-546 758.155,-546 758.155,-534 758.155,-534 758.155,-528 764.155,-522 770.155,-522 770.155,-522 853.492,-522 853.492,-522 859.492,-522 865.492,-528 865.492,-534 865.492,-534 865.492,-546 865.492,-546 865.492,-552 859.492,-558 853.492,-558"/>
<text text-anchor="middle" x="811.8235" y="-535.8" font-family="Verdana" font-size="14.00" fill="#000000">readCertificate</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="node16" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_node16"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int | defined in integer.go:32">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1050.9351,-700C1050.9351,-700 1020.9351,-700 1020.9351,-700 1014.9351,-700 1008.9351,-694 1008.9351,-688 1008.9351,-688 1008.9351,-676 1008.9351,-676 1008.9351,-670 1014.9351,-664 1020.9351,-664 1020.9351,-664 1050.9351,-664 1050.9351,-664 1056.9351,-664 1062.9351,-670 1062.9351,-676 1062.9351,-676 1062.9351,-688 1062.9351,-688 1062.9351,-694 1056.9351,-700 1050.9351,-700"/>
<text text-anchor="middle" x="1035.9351" y="-677.8" font-family="Verdana" font-size="14.00" fill="#000000">Int</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge13"><a xlink:title="at certificate.go:159: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:169: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:178: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:182: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:192: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M828.2999,-558.343C849.8771,-581.3965 889.8214,-620.8618 930.9582,-645 952.1561,-657.4385 978.2028,-666.6504 999.0478,-672.7715"/>
<polygon fill="#8b4513" stroke="#8b4513" points="998.2442,-676.1814 1008.8189,-675.5288 1000.1453,-669.4445 998.2442,-676.1814"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node18" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1067.1542,-199C1067.1542,-199 1004.716,-199 1004.716,-199 998.716,-199 992.716,-193 992.716,-187 992.716,-187 992.716,-175 992.716,-175 992.716,-169 998.716,-163 1004.716,-163 1004.716,-163 1067.1542,-163 1067.1542,-163 1073.1542,-163 1079.1542,-169 1079.1542,-175 1079.1542,-175 1079.1542,-187 1079.1542,-187 1079.1542,-193 1073.1542,-199 1067.1542,-199"/>
<text text-anchor="middle" x="1035.9351" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge4"><a xlink:title="at certificate.go:156: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:166: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:180: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:191: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M865.7251,-534.8557C876.6304,-531.497 887.1354,-526.219 894.9582,-518 942.8854,-467.645 915.3683,-265.3327 959.9582,-212 966.1976,-204.5372 974.5137,-198.8501 983.3549,-194.5222"/>
<polygon fill="#8b4513" stroke="#8b4513" points="984.9021,-197.6665 992.6933,-190.4868 982.1253,-191.2408 984.9021,-197.6665"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node20" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node20"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1050.9351,-260C1050.9351,-260 1020.9351,-260 1020.9351,-260 1014.9351,-260 1008.9351,-254 1008.9351,-248 1008.9351,-248 1008.9351,-236 1008.9351,-236 1008.9351,-230 1014.9351,-224 1020.9351,-224 1020.9351,-224 1050.9351,-224 1050.9351,-224 1056.9351,-224 1062.9351,-230 1062.9351,-236 1062.9351,-236 1062.9351,-248 1062.9351,-248 1062.9351,-254 1056.9351,-260 1050.9351,-260"/>
<text text-anchor="middle" x="1035.9351" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge6"><a xlink:title="at certificate.go:160: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at certificate.go:170: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at certificate.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M865.5274,-532.8345C876.0687,-529.5701 886.4742,-524.8415 894.9582,-518 895.2957,-517.7278 986.6382,-338.6628 1022.0943,-269.1411"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1025.2858,-270.5868 1026.7111,-260.0883 1019.0499,-267.4065 1025.2858,-270.5868"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge40" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge40"><a xlink:title="at certificate.go:161: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:171: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:179: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M817.92,-558.2171C834.1846,-604.4278 882.7011,-727.7988 959.9582,-802 970.6282,-812.248 984.523,-820.4322 997.5078,-826.6045"/>
<polygon fill="#8b4513" stroke="#8b4513" points="996.1858,-829.8474 1006.7427,-830.7441 999.0492,-823.4598 996.1858,-829.8474"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node22" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node22"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1054.7571,-467C1054.7571,-467 1017.1131,-467 1017.1131,-467 1011.1131,-467 1005.1131,-461 1005.1131,-455 1005.1131,-455 1005.1131,-443 1005.1131,-443 1005.1131,-437 1011.1131,-431 1017.1131,-431 1017.1131,-431 1054.7571,-431 1054.7571,-431 1060.7571,-431 1066.7571,-437 1066.7571,-443 1066.7571,-443 1066.7571,-455 1066.7571,-455 1066.7571,-461 1060.7571,-467 1054.7571,-467"/>
<text text-anchor="middle" x="1035.9351" y="-444.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge28" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge28"><a xlink:title="at certificate.go:194: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M865.5297,-527.4471C875.4245,-524.6676 885.5856,-521.4951 894.9582,-518 930.1694,-504.8695 968.3562,-485.8616 996.0939,-471.1194"/>
<polygon fill="#8b4513" stroke="#8b4513" points="997.9234,-474.1098 1005.0807,-466.298 994.6141,-467.9415 997.9234,-474.1098"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux | defined in certificate.go:223&#10;at certificate.go:225: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:230: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:243: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:246: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at certificate.go:233: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M869.6512,-786C869.6512,-786 753.9958,-786 753.9958,-786 747.9958,-786 741.9958,-780 741.9958,-774 741.9958,-774 741.9958,-762 741.9958,-762 741.9958,-756 747.9958,-750 753.9958,-750 753.9958,-750 869.6512,-750 869.6512,-750 875.6512,-750 881.6512,-756 881.6512,-762 881.6512,-762 881.6512,-774 881.6512,-774 881.6512,-780 875.6512,-786 869.6512,-786"/>
<text text-anchor="middle" x="811.8235" y="-763.8" font-family="Verdana" font-size="14.00" fill="#000000">NewCertificateDeux</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="edge29" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_edge29"><a xlink:title="at certificate.go:233: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]">
<path fill="none" stroke="#8b4513" d="M881.812,-760.1927C905.8552,-757.5106 932.9212,-754.4914 957.585,-751.7401"/>
<polygon fill="#8b4513" stroke="#8b4513" points="958.0781,-755.2069 967.6284,-750.6197 957.302,-748.25 958.0781,-755.2069"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge8"><a xlink:title="at certificate.go:243: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M821.1352,-749.7607C838.2214,-715.5703 874.6831,-639.1362 894.9582,-571 900.739,-551.5731 947.1936,-227.7444 959.9582,-212 966.0843,-204.4439 974.3475,-198.7132 983.172,-194.3717"/>
<polygon fill="#8b4513" stroke="#8b4513" points="984.7183,-197.5163 992.5052,-190.332 981.9377,-191.0922 984.7183,-197.5163"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge7"><a xlink:title="at certificate.go:225: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:230: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M866.9727,-786.0937C887.1049,-792.6882 910.0575,-800.1943 930.9582,-807 952.7745,-814.1038 977.1542,-822.0024 996.9238,-828.3972"/>
<polygon fill="#8b4513" stroke="#8b4513" points="995.9229,-831.752 1006.5147,-831.4986 998.0767,-825.0915 995.9229,-831.752"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge23" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateDeux&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge23"><a xlink:title="at certificate.go:246: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M839.1636,-749.9939C856.7961,-737.3376 879.279,-719.1216 894.9582,-699 936.1357,-646.1558 926.8536,-621.2425 959.9582,-563 977.5969,-531.9674 1000.6662,-498.1405 1016.7368,-475.4609"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1019.7782,-477.2242 1022.7376,-467.051 1014.0801,-473.1583 1019.7782,-477.2242"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.init -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.init</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.init | defined in .:0&#10;at certificate.go:18: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M826.8235,-52C826.8235,-52 796.8235,-52 796.8235,-52 790.8235,-52 784.8235,-46 784.8235,-40 784.8235,-40 784.8235,-28 784.8235,-28 784.8235,-22 790.8235,-16 796.8235,-16 796.8235,-16 826.8235,-16 826.8235,-16 832.8235,-16 838.8235,-22 838.8235,-28 838.8235,-28 838.8235,-40 838.8235,-40 838.8235,-46 832.8235,-52 826.8235,-52"/>
<text text-anchor="middle" x="811.8235" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node17" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node17"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1084.6246,-60C1084.6246,-60 987.2456,-60 987.2456,-60 981.2456,-60 975.2456,-54 975.2456,-48 975.2456,-48 975.2456,-36 975.2456,-36 975.2456,-30 981.2456,-24 987.2456,-24 987.2456,-24 1084.6246,-24 1084.6246,-24 1090.6246,-24 1096.6246,-30 1096.6246,-36 1096.6246,-36 1096.6246,-48 1096.6246,-48 1096.6246,-54 1090.6246,-60 1084.6246,-60"/>
<text text-anchor="middle" x="1035.9351" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge31" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge31"><a xlink:title="at certificate.go:18: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M839.0251,-34.5003C863.3778,-34.9909 900.0587,-35.8349 931.9582,-37 942.6745,-37.3914 954.009,-37.87 965.0995,-38.3743"/>
<polygon fill="#8b4513" stroke="#8b4513" points="965.0396,-41.8752 975.1912,-38.8429 965.3644,-34.8827 965.0396,-41.8752"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.GetSignatureTypeFromCertificate -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.GetSignatureTypeFromCertificate</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.GetSignatureTypeFromCertificate | defined in certificate.go:281&#10;at certificate.go:282: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at certificate.go:283: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at certificate.go:283: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:286: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M220.0675,-870C220.0675,-870 27.9775,-870 27.9775,-870 21.9775,-870 15.9775,-864 15.9775,-858 15.9775,-858 15.9775,-846 15.9775,-846 15.9775,-840 21.9775,-834 27.9775,-834 27.9775,-834 220.0675,-834 220.0675,-834 226.0675,-834 232.0675,-840 232.0675,-846 232.0675,-846 232.0675,-858 232.0675,-858 232.0675,-864 226.0675,-870 220.0675,-870"/>
<text text-anchor="middle" x="124.0225" y="-847.8" font-family="Verdana" font-size="14.00" fill="#000000">GetSignatureTypeFromCertificate</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type | defined in certificate.go:116&#10;at certificate.go:117: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:118: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:120: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M367.4237,-506C367.4237,-506 337.4237,-506 337.4237,-506 331.4237,-506 325.4237,-500 325.4237,-494 325.4237,-494 325.4237,-482 325.4237,-482 325.4237,-476 331.4237,-470 337.4237,-470 337.4237,-470 367.4237,-470 367.4237,-470 373.4237,-470 379.4237,-476 379.4237,-482 379.4237,-482 379.4237,-494 379.4237,-494 379.4237,-500 373.4237,-506 367.4237,-506"/>
<text text-anchor="middle" x="352.4237" y="-483.8" font-family="Verdana" font-size="14.00" fill="#000000">Type</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.GetSignatureTypeFromCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.GetSignatureTypeFromCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_edge5"><a xlink:title="at certificate.go:282: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at certificate.go:283: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]">
<path fill="none" stroke="#000000" d="M128.2695,-833.993C142.3505,-778.0605 192.6532,-605.3741 297.045,-510 302.3305,-505.1711 308.8052,-501.3453 315.4399,-498.3331"/>
<polygon fill="#000000" stroke="#000000" points="317.1499,-501.4202 325.1552,-494.48 314.5693,-494.9132 317.1499,-501.4202"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.GetSignatureTypeFromCertificate&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.GetSignatureTypeFromCertificate&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge19"><a xlink:title="at certificate.go:283: calling [github.com/samber/oops.Errorf]&#10;at certificate.go:286: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M169.5875,-870.027C215.1223,-886.3976 287.508,-908 352.4237,-908 352.4237,-908 352.4237,-908 811.8235,-908 879.3567,-908 953.7216,-879.7272 997.5446,-859.9138"/>
<polygon fill="#8b4513" stroke="#8b4513" points="999.0653,-863.0668 1006.6832,-855.7034 996.1361,-856.7091 999.0653,-863.0668"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate | defined in certificate.go:201&#10;at certificate.go:207: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes]&#10;at certificate.go:204: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at certificate.go:202: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate]&#10;at certificate.go:208: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:210: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M167.867,-445C167.867,-445 80.178,-445 80.178,-445 74.178,-445 68.178,-439 68.178,-433 68.178,-433 68.178,-421 68.178,-421 68.178,-415 74.178,-409 80.178,-409 80.178,-409 167.867,-409 167.867,-409 173.867,-409 179.867,-415 179.867,-421 179.867,-421 179.867,-433 179.867,-433 179.867,-439 173.867,-445 167.867,-445"/>
<text text-anchor="middle" x="124.0225" y="-422.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate</title>
<g id="a_edge20"><a xlink:title="at certificate.go:202: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.readCertificate]">
<path fill="none" stroke="#000000" d="M145.3969,-445.2441C184.0154,-476.2738 269.163,-536 352.4237,-536 352.4237,-536 352.4237,-536 628.6888,-536 668.3429,-536 712.8153,-536.949 748.0046,-537.9225"/>
<polygon fill="#000000" stroke="#000000" points="748.0451,-541.4249 758.1405,-538.2106 748.244,-534.4278 748.0451,-541.4249"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes | defined in certificate.go:87&#10;at certificate.go:90: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:88: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:89: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:92: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at certificate.go:95: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M387.6814,-445C387.6814,-445 317.166,-445 317.166,-445 311.166,-445 305.166,-439 305.166,-433 305.166,-433 305.166,-421 305.166,-421 305.166,-415 311.166,-409 317.166,-409 317.166,-409 387.6814,-409 387.6814,-409 393.6814,-409 399.6814,-415 399.6814,-421 399.6814,-421 399.6814,-433 399.6814,-433 399.6814,-439 393.6814,-445 387.6814,-445"/>
<text text-anchor="middle" x="352.4237" y="-422.8" font-family="Verdana" font-size="14.00" fill="#000000">ExcessBytes</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes</title>
<g id="a_edge9"><a xlink:title="at certificate.go:207: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes]">
<path fill="none" stroke="#000000" d="M179.8957,-427C214.754,-427 259.5229,-427 294.7205,-427"/>
<polygon fill="#000000" stroke="#000000" points="294.8452,-430.5001 304.8452,-427 294.8452,-423.5001 294.8452,-430.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge32" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge32"><a xlink:title="at certificate.go:208: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M127.5504,-408.7653C141.8857,-340.6482 202.3251,-105 352.4237,-105 352.4237,-105 352.4237,-105 692.1888,-105 798.7863,-105 838.0316,-60.5933 931.9582,-111 951.0793,-121.2615 942.9228,-137.5572 959.9582,-151 966.9144,-156.4893 975.0012,-161.0861 983.2523,-164.8992"/>
<polygon fill="#8b4513" stroke="#8b4513" points="982.0146,-168.1763 992.5862,-168.8771 984.759,-161.7367 982.0146,-168.1763"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node19" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node19"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1051.525,-138C1051.525,-138 1020.3452,-138 1020.3452,-138 1014.3452,-138 1008.3452,-132 1008.3452,-126 1008.3452,-126 1008.3452,-114 1008.3452,-114 1008.3452,-108 1014.3452,-102 1020.3452,-102 1020.3452,-102 1051.525,-102 1051.525,-102 1057.525,-102 1063.525,-108 1063.525,-114 1063.525,-114 1063.525,-126 1063.525,-126 1063.525,-132 1057.525,-138 1051.525,-138"/>
<text text-anchor="middle" x="1035.9351" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge15"><a xlink:title="at certificate.go:204: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M126.7695,-408.7276C138.6928,-336.9183 192.7546,-78 352.4237,-78 352.4237,-78 352.4237,-78 692.1888,-78 782.3359,-78 805.7014,-70.3617 894.9582,-83 914.74,-85.801 963.7585,-99.2248 998.4178,-109.1004"/>
<polygon fill="#8b4513" stroke="#8b4513" points="997.6428,-112.5191 1008.22,-111.9076 999.5701,-105.7897 997.6428,-112.5191"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge33" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge33"><a xlink:title="at certificate.go:210: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M128.5859,-445.2659C145.7592,-509.1918 212.7612,-719 352.4237,-719 352.4237,-719 352.4237,-719 628.6888,-719 803.9992,-719 961.6602,-543.0451 1015.9203,-475.2215"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1018.8561,-477.1514 1022.3083,-467.1347 1013.3631,-472.8123 1018.8561,-477.1514"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes | defined in certificate.go:76&#10;at certificate.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at certificate.go:77: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]&#10;at certificate.go:78: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]&#10;at certificate.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M380.9692,-384C380.9692,-384 323.8782,-384 323.8782,-384 317.8782,-384 311.8782,-378 311.8782,-372 311.8782,-372 311.8782,-360 311.8782,-360 311.8782,-354 317.8782,-348 323.8782,-348 323.8782,-348 380.9692,-348 380.9692,-348 386.9692,-348 392.9692,-354 392.9692,-360 392.9692,-360 392.9692,-372 392.9692,-372 392.9692,-378 386.9692,-384 380.9692,-384"/>
<text text-anchor="middle" x="352.4237" y="-361.8" font-family="Verdana" font-size="14.00" fill="#000000">RawBytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes -->
<g id="node15" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes</title>
<g id="a_node15"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes | defined in integer.go:27">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1051.8216,-639C1051.8216,-639 1020.0486,-639 1020.0486,-639 1014.0486,-639 1008.0486,-633 1008.0486,-627 1008.0486,-627 1008.0486,-615 1008.0486,-615 1008.0486,-609 1014.0486,-603 1020.0486,-603 1020.0486,-603 1051.8216,-603 1051.8216,-603 1057.8216,-603 1063.8216,-609 1063.8216,-615 1063.8216,-615 1063.8216,-627 1063.8216,-627 1063.8216,-633 1057.8216,-639 1051.8216,-639"/>
<text text-anchor="middle" x="1035.9351" y="-616.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes -->
<g id="edge24" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes</title>
<g id="a_edge24"><a xlink:title="at certificate.go:77: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]&#10;at certificate.go:78: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]">
<path fill="none" stroke="#8b4513" d="M385.4307,-384.1476C390.6468,-387.9437 395.6728,-392.2541 399.8024,-397 468.8333,-476.3322 395.5844,-611 500.7456,-611 500.7456,-611 500.7456,-611 811.8235,-611 877.2658,-611 953.3506,-615.3081 997.9137,-618.269"/>
<polygon fill="#8b4513" stroke="#8b4513" points="997.7882,-621.7684 1008.0019,-618.9522 998.2613,-614.7844 997.7882,-621.7684"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge30" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge30"><a xlink:title="at certificate.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M388.3579,-347.9192C392.7268,-344.4675 396.725,-340.5005 399.8024,-336 446.8372,-267.2153 380.0701,-213.9477 435.8024,-152 456.0019,-129.5478 470.5442,-132 500.7456,-132 500.7456,-132 500.7456,-132 692.1888,-132 782.3359,-132 805.6291,-139.1165 894.9582,-127 911.7286,-124.7253 916.6004,-110.8897 931.9582,-118 949.413,-126.0811 944.3216,-139.7985 959.9582,-151 967.078,-156.1004 975.1843,-160.4858 983.3867,-164.2045"/>
<polygon fill="#8b4513" stroke="#8b4513" points="982.0677,-167.4467 992.641,-168.1222 984.7967,-161.0006 982.0677,-167.4467"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge16"><a xlink:title="at certificate.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M381.3205,-384.027C410.3644,-400.3976 456.9816,-422 500.7456,-422 500.7456,-422 500.7456,-422 811.8235,-422 876.3582,-422 950.6003,-433.1719 995.3583,-441.143"/>
<polygon fill="#8b4513" stroke="#8b4513" points="994.7981,-444.5984 1005.2624,-442.9407 996.0482,-437.711 994.7981,-444.5984"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge34" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge34"><a xlink:title="at certificate.go:88: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:89: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M385.5658,-445.032C390.7669,-448.841 395.7528,-453.1857 399.8024,-458 472.7113,-544.6778 387.4815,-692 500.7456,-692 500.7456,-692 500.7456,-692 628.6888,-692 763.4781,-692 797.3913,-701.7395 931.9582,-694 954.102,-692.7264 978.7678,-689.9392 998.5163,-687.3713"/>
<polygon fill="#8b4513" stroke="#8b4513" points="999.196,-690.8117 1008.6444,-686.0181 998.2689,-683.8733 999.196,-690.8117"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge21" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge21"><a xlink:title="at certificate.go:90: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M388.945,-408.6284C393.1129,-405.2519 396.8993,-401.3831 399.8024,-397 454.0284,-315.1282 371.2085,-252.9668 435.8024,-179 455.668,-156.2518 470.5442,-159 500.7456,-159 500.7456,-159 500.7456,-159 692.1888,-159 798.9345,-159 826.6915,-127.2924 931.9582,-145 949.5168,-147.9536 968.0729,-153.5287 984.5725,-159.4248"/>
<polygon fill="#8b4513" stroke="#8b4513" points="983.4333,-162.7351 994.0266,-162.916 985.8582,-156.1685 983.4333,-162.7351"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge35" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).ExcessBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge35"><a xlink:title="at certificate.go:92: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at certificate.go:95: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M399.9189,-437.6778C428.8942,-443.2831 466.7738,-449 500.7456,-449 500.7456,-449 500.7456,-449 811.8235,-449 875.76,-449 949.9566,-449 994.8974,-449"/>
<polygon fill="#8b4513" stroke="#8b4513" points="995.1215,-452.5001 1005.1215,-449 995.1215,-445.5001 995.1215,-452.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes | defined in certificate.go:100&#10;at certificate.go:103: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at certificate.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]&#10;at certificate.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]&#10;at certificate.go:106: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M516.6321,-334C516.6321,-334 484.8591,-334 484.8591,-334 478.8591,-334 472.8591,-328 472.8591,-322 472.8591,-322 472.8591,-310 472.8591,-310 472.8591,-304 478.8591,-298 484.8591,-298 484.8591,-298 516.6321,-298 516.6321,-298 522.6321,-298 528.6321,-304 528.6321,-310 528.6321,-310 528.6321,-322 528.6321,-322 528.6321,-328 522.6321,-334 516.6321,-334"/>
<text text-anchor="middle" x="500.7456" y="-311.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data | defined in certificate.go:134&#10;at certificate.go:142: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:135: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length]&#10;at certificate.go:138: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at certificate.go:144: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M643.6888,-334C643.6888,-334 613.6888,-334 613.6888,-334 607.6888,-334 601.6888,-328 601.6888,-322 601.6888,-322 601.6888,-310 601.6888,-310 601.6888,-304 607.6888,-298 613.6888,-298 613.6888,-298 643.6888,-298 643.6888,-298 649.6888,-298 655.6888,-304 655.6888,-310 655.6888,-310 655.6888,-322 655.6888,-322 655.6888,-328 649.6888,-334 643.6888,-334"/>
<text text-anchor="middle" x="628.6888" y="-311.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_edge2"><a xlink:title="at certificate.go:103: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]">
<path fill="none" stroke="#000000" d="M528.8233,-316C547.2394,-316 571.5235,-316 591.5335,-316"/>
<polygon fill="#000000" stroke="#000000" points="591.5542,-319.5001 601.5541,-316 591.5541,-312.5001 591.5542,-319.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes -->
<g id="edge36" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes</title>
<g id="a_edge36"><a xlink:title="at certificate.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]&#10;at certificate.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Bytes]">
<path fill="none" stroke="#8b4513" d="M505.1677,-334.0004C520.4479,-394.0893 573.1351,-584 628.6888,-584 628.6888,-584 628.6888,-584 811.8235,-584 878.0426,-584 953.8154,-599.9194 998.1176,-610.8739"/>
<polygon fill="#8b4513" stroke="#8b4513" points="997.326,-614.2838 1007.8781,-613.3336 999.0366,-607.496 997.326,-614.2838"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge27" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge27"><a xlink:title="at certificate.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M511.9976,-297.5857C531.675,-267.9592 575.3642,-213 628.6888,-213 628.6888,-213 628.6888,-213 692.1888,-213 795.3762,-213 915.2401,-198.5274 982.682,-189.0482"/>
<polygon fill="#8b4513" stroke="#8b4513" points="983.2374,-192.5045 992.6446,-187.6304 982.2512,-185.5743 983.2374,-192.5045"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge39" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge39"><a xlink:title="at certificate.go:106: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M516.9593,-334.3228C539.4996,-357.6602 582.7431,-395 628.6888,-395 628.6888,-395 628.6888,-395 811.8235,-395 877.4952,-395 951.0552,-417.1859 995.4099,-433.1165"/>
<polygon fill="#8b4513" stroke="#8b4513" points="994.3626,-436.4602 1004.9564,-436.6113 996.7691,-429.8868 994.3626,-436.4602"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length | defined in certificate.go:125&#10;at certificate.go:126: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at certificate.go:127: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at certificate.go:129: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M831.4822,-340C831.4822,-340 792.1648,-340 792.1648,-340 786.1648,-340 780.1648,-334 780.1648,-328 780.1648,-328 780.1648,-316 780.1648,-316 780.1648,-310 786.1648,-304 792.1648,-304 792.1648,-304 831.4822,-304 831.4822,-304 837.4822,-304 843.4822,-310 843.4822,-316 843.4822,-316 843.4822,-328 843.4822,-328 843.4822,-334 837.4822,-340 831.4822,-340"/>
<text text-anchor="middle" x="811.8235" y="-317.8" font-family="Verdana" font-size="14.00" fill="#000000">Length</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge1"><a xlink:title="at certificate.go:126: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M843.5163,-322.6115C861.0085,-324.6487 881.7921,-330.1487 894.9582,-344 991.3453,-445.4035 869.6842,-545.1181 959.9582,-652 969.7516,-663.5951 984.6353,-670.7385 998.6417,-675.1259"/>
<polygon fill="#8b4513" stroke="#8b4513" points="998.0304,-678.5874 1008.6,-677.8577 999.8823,-671.8368 998.0304,-678.5874"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge11"><a xlink:title="at certificate.go:127: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M843.6343,-305.7753C859.5639,-297.124 878.8383,-285.8373 894.9582,-274 912.9592,-260.7814 915.8365,-255.4549 931.9582,-240 944.6626,-227.8211 945.2992,-221.7387 959.9582,-212 967.1224,-207.2404 975.1333,-203.0016 983.193,-199.3027"/>
<polygon fill="#8b4513" stroke="#8b4513" points="984.8477,-202.4001 992.629,-195.2096 982.062,-195.9782 984.8477,-202.4001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge37" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge37"><a xlink:title="at certificate.go:129: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M843.5545,-328.7229C868.606,-334.8567 903.8922,-345.3697 931.9582,-361 962.1869,-377.8347 991.8254,-404.1704 1011.6746,-423.6484"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1009.2331,-426.1566 1018.7835,-430.7436 1014.1781,-421.2021 1009.2331,-426.1566"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length -->
<g id="edge25" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length</title>
<g id="a_edge25"><a xlink:title="at certificate.go:135: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length]">
<path fill="none" stroke="#000000" d="M655.711,-316.8853C685.737,-317.8691 734.6027,-319.47 769.6678,-320.6189"/>
<polygon fill="#000000" stroke="#000000" points="769.9616,-324.1303 780.0709,-320.9597 770.1909,-317.134 769.9616,-324.1303"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge12"><a xlink:title="at certificate.go:142: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M655.7668,-309.3755C718.9449,-293.863 872.4516,-255.8267 894.9582,-247 925.5038,-235.0205 930.282,-225.9953 959.9582,-212 967.3782,-208.5007 975.3045,-205.0071 983.1339,-201.6937"/>
<polygon fill="#8b4513" stroke="#8b4513" points="984.7096,-204.8289 992.5953,-197.7532 982.0182,-198.367 984.7096,-204.8289"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge26" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge26"><a xlink:title="at certificate.go:138: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M647.1271,-297.9897C665.9158,-280.9139 696.7583,-256.2497 728.6888,-245 763.6009,-232.6998 860.888,-249.4697 894.9582,-235 915.5142,-226.2698 918.1062,-218.5182 931.9582,-201 947.7555,-181.0216 940.875,-167.8678 959.9582,-151 970.8457,-141.3764 985.1188,-134.5003 998.3511,-129.71"/>
<polygon fill="#8b4513" stroke="#8b4513" points="999.8058,-132.915 1008.1937,-126.4425 997.6003,-126.2715 999.8058,-132.915"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge38" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge38"><a xlink:title="at certificate.go:144: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M655.8375,-327.5918C675.7056,-335.6917 703.4815,-346.2282 728.6888,-353 817.2212,-376.7836 845.8615,-356.5199 931.9582,-388 957.1279,-397.203 983.1328,-412.4614 1002.8399,-425.4149"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1000.8967,-428.3259 1011.1519,-430.987 1004.7945,-422.5115 1000.8967,-428.3259"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).length -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).length</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).length | defined in certificate.go:110&#10;at certificate.go:111: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M369.9195,-323C369.9195,-323 334.9279,-323 334.9279,-323 328.9279,-323 322.9279,-317 322.9279,-311 322.9279,-311 322.9279,-299 322.9279,-299 322.9279,-293 328.9279,-287 334.9279,-287 334.9279,-287 369.9195,-287 369.9195,-287 375.9195,-287 381.9195,-293 381.9195,-299 381.9195,-299 381.9195,-311 381.9195,-311 381.9195,-317 375.9195,-323 369.9195,-323"/>
<text text-anchor="middle" x="352.4237" y="-300.8" font-family="Verdana" font-size="14.00" fill="#000000">length</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).length&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).length&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge3"><a xlink:title="at certificate.go:111: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#000000" d="M382.0824,-307.1996C405.1616,-308.9112 437.3656,-311.2995 462.4021,-313.1563"/>
<polygon fill="#000000" stroke="#000000" points="462.4142,-316.6668 472.6457,-313.916 462.932,-309.6859 462.4142,-316.6668"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge14"><a xlink:title="at certificate.go:117: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M379.4947,-496.0749C386.8962,-499.3854 394.366,-503.9119 399.8024,-510 433.5027,-547.7398 405.8695,-577.2076 435.8024,-618 456.8808,-646.7256 465.1162,-665 500.7456,-665 500.7456,-665 500.7456,-665 692.1888,-665 799.2006,-665 824.9773,-689.5707 931.9582,-687 954.0115,-686.4701 978.673,-685.3088 998.4419,-684.2386"/>
<polygon fill="#8b4513" stroke="#8b4513" points="998.7928,-687.7246 1008.583,-683.6747 998.4041,-680.7354 998.7928,-687.7246"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge17" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge17"><a xlink:title="at certificate.go:118: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M379.8885,-474.7988C387.1259,-470.2826 394.4096,-464.6573 399.8024,-458 480.9667,-357.8041 371.8004,-186 500.7456,-186 500.7456,-186 500.7456,-186 692.1888,-186 794.8735,-186 914.7942,-183.7417 982.4056,-182.2605"/>
<polygon fill="#8b4513" stroke="#8b4513" points="982.8772,-185.751 992.7971,-182.0299 982.7218,-178.7527 982.8772,-185.751"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge18" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge18"><a xlink:title="at certificate.go:120: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M379.436,-484.4968C409.1233,-480.9549 458.2479,-476 500.7456,-476 500.7456,-476 500.7456,-476 811.8235,-476 876.3582,-476 950.6003,-464.8281 995.3583,-456.857"/>
<polygon fill="#8b4513" stroke="#8b4513" points="996.0482,-460.289 1005.2624,-455.0593 994.7981,-453.4016 996.0482,-460.289"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 63 KiB

View File

@ -23,6 +23,12 @@ const CERT_MIN_SIZE = 3
CERT_MIN_SIZE is the minimum size of a valid Certificate in []byte 1 byte for
type 2 bytes for payload length
#### func GetSignatureTypeFromCertificate
```go
func GetSignatureTypeFromCertificate(cert Certificate) (int, error)
```
#### type Certificate
```go
@ -37,10 +43,22 @@ https://geti2p.net/spec/common-structures#certificate
#### func NewCertificate
```go
func NewCertificate(data []byte) (certificate Certificate, err error)
func NewCertificate() *Certificate
```
NewCertificate creates a new Certficiate from []byte returns err if the
certificate is too short or if the payload doesn't match specified length.
NewCertificate creates a new Certificate with default NULL type
#### func NewCertificateDeux
```go
func NewCertificateDeux(certType int, payload []byte) (*Certificate, error)
```
#### func NewCertificateWithType
```go
func NewCertificateWithType(certType uint8, payload []byte) (*Certificate, error)
```
NewCertificateWithType creates a new Certificate with specified type and payload
#### func ReadCertificate
@ -96,3 +114,129 @@ func (c *Certificate) Type() (cert_type int)
```
Type returns the Certificate type specified in the first byte of the
Certificate,
# certificate
--
import "github.com/go-i2p/go-i2p/lib/common/certificate"
![certificate.svg](certificate)
## Usage
```go
const (
CERT_NULL = iota
CERT_HASHCASH
CERT_HIDDEN
CERT_SIGNED
CERT_MULTIPLE
CERT_KEY
)
```
Certificate Types
```go
const CERT_MIN_SIZE = 3
```
CERT_MIN_SIZE is the minimum size of a valid Certificate in []byte 1 byte for
type 2 bytes for payload length
#### func GetSignatureTypeFromCertificate
```go
func GetSignatureTypeFromCertificate(cert Certificate) (int, error)
```
#### type Certificate
```go
type Certificate struct {
}
```
Certificate is the representation of an I2P Certificate.
https://geti2p.net/spec/common-structures#certificate
#### func NewCertificate
```go
func NewCertificate() *Certificate
```
NewCertificate creates a new Certificate with default NULL type
#### func NewCertificateDeux
```go
func NewCertificateDeux(certType int, payload []byte) (*Certificate, error)
```
#### func NewCertificateWithType
```go
func NewCertificateWithType(certType uint8, payload []byte) (*Certificate, error)
```
NewCertificateWithType creates a new Certificate with specified type and payload
#### func ReadCertificate
```go
func ReadCertificate(data []byte) (certificate Certificate, remainder []byte, err error)
```
ReadCertificate creates a Certificate from []byte and returns any ExcessBytes at
the end of the input. returns err if the certificate could not be read.
#### func (*Certificate) Bytes
```go
func (c *Certificate) Bytes() []byte
```
Bytes returns the entire certificate in []byte form, trims payload to specified
length.
#### func (*Certificate) Data
```go
func (c *Certificate) Data() (data []byte)
```
Data returns the payload of a Certificate, payload is trimmed to the specified
length.
#### func (*Certificate) ExcessBytes
```go
func (c *Certificate) ExcessBytes() []byte
```
ExcessBytes returns the excess bytes in a certificate found after the specified
payload length.
#### func (*Certificate) Length
```go
func (c *Certificate) Length() (length int)
```
Length returns the payload length of a Certificate.
#### func (*Certificate) RawBytes
```go
func (c *Certificate) RawBytes() []byte
```
RawBytes returns the entire certificate in []byte form, includes excess payload
data.
#### func (*Certificate) Type
```go
func (c *Certificate) Type() (cert_type int)
```
Type returns the Certificate type specified in the first byte of the
Certificate,
certificate
github.com/go-i2p/go-i2p/lib/common/certificate

1321
lib/common/data/data.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 138 KiB

View File

@ -22,6 +22,16 @@ const STRING_MAX_SIZE = 255
STRING_MAX_SIZE is the maximum number of bytes that can be stored in an I2P
string
```go
var (
ErrZeroLength = oops.Errorf("error parsing string: zero length")
ErrDataTooShort = oops.Errorf("string parsing warning: string data is shorter than specified by length")
ErrDataTooLong = oops.Errorf("string parsing warning: string contains data beyond length")
ErrLengthMismatch = oops.Errorf("error reading I2P string, length does not match data")
ErrMappingLengthMismatch = oops.Errorf("warning parsing mapping: mapping length exceeds provided data")
)
```
#### func PrintErrors
```go
@ -207,7 +217,7 @@ Bytes returns the raw []byte content of an Integer.
```go
func (i Integer) Int() int
```
Int returns the Date as a Go integer
Int returns the Integer as a Go integer
#### type Mapping
@ -295,3 +305,319 @@ occurred during parsing.
```go
func (m MappingValues) Get(key I2PString) I2PString
```
# data
--
import "github.com/go-i2p/go-i2p/lib/common/data"
Package data implements common data structures used in higher level structures.
![data.svg](data)
## Usage
```go
const DATE_SIZE = 8
```
DATE_SIZE is the length in bytes of an I2P Date.
```go
const MAX_INTEGER_SIZE = 8
```
MAX_INTEGER_SIZE is the maximum length of an I2P integer in bytes.
```go
const STRING_MAX_SIZE = 255
```
STRING_MAX_SIZE is the maximum number of bytes that can be stored in an I2P
string
```go
var (
ErrZeroLength = oops.Errorf("error parsing string: zero length")
ErrDataTooShort = oops.Errorf("string parsing warning: string data is shorter than specified by length")
ErrDataTooLong = oops.Errorf("string parsing warning: string contains data beyond length")
ErrLengthMismatch = oops.Errorf("error reading I2P string, length does not match data")
ErrMappingLengthMismatch = oops.Errorf("warning parsing mapping: mapping length exceeds provided data")
)
```
#### func PrintErrors
```go
func PrintErrors(errs []error)
```
PrintErrors prints a formatted list of errors to the console.
#### func WrapErrors
```go
func WrapErrors(errs []error) error
```
WrapErrors compiles a slice of errors and returns them wrapped together as a
single error.
#### type Date
```go
type Date [8]byte
```
Date is the represenation of an I2P Date.
https://geti2p.net/spec/common-structures#date
#### func NewDate
```go
func NewDate(data []byte) (date *Date, remainder []byte, err error)
```
NewDate creates a new Date from []byte using ReadDate. Returns a pointer to Date
unlike ReadDate.
#### func ReadDate
```go
func ReadDate(data []byte) (date Date, remainder []byte, err error)
```
ReadDate creates a Date from []byte using the first DATE_SIZE bytes. Any data
after DATE_SIZE is returned as a remainder.
#### func (Date) Bytes
```go
func (i Date) Bytes() []byte
```
Bytes returns the raw []byte content of a Date.
#### func (Date) Int
```go
func (i Date) Int() int
```
Int returns the Date as a Go integer.
#### func (Date) Time
```go
func (date Date) Time() (date_time time.Time)
```
Time takes the value stored in date as an 8 byte big-endian integer representing
the number of milliseconds since the beginning of unix time and converts it to a
Go time.Time struct.
#### type Hash
```go
type Hash [32]byte
```
Hash is the represenation of an I2P Hash.
https://geti2p.net/spec/common-structures#hash
#### func HashData
```go
func HashData(data []byte) (h Hash)
```
HashData returns the SHA256 sum of a []byte input as Hash.
#### func HashReader
```go
func HashReader(r io.Reader) (h Hash, err error)
```
HashReader returns the SHA256 sum from all data read from an io.Reader. return
error if one occurs while reading from reader
#### func (Hash) Bytes
```go
func (h Hash) Bytes() [32]byte
```
#### type I2PString
```go
type I2PString []byte
```
I2PString is the represenation of an I2P String.
https://geti2p.net/spec/common-structures#string
#### func ReadI2PString
```go
func ReadI2PString(data []byte) (str I2PString, remainder []byte, err error)
```
ReadI2PString returns I2PString from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func ToI2PString
```go
func ToI2PString(data string) (str I2PString, err error)
```
ToI2PString converts a Go string to an I2PString. Returns error if the string
exceeds STRING_MAX_SIZE.
#### func (I2PString) Data
```go
func (str I2PString) Data() (data string, err error)
```
Data returns the I2PString content as a string trimmed to the specified length
and not including the length byte. Returns error encountered by Length.
#### func (I2PString) Length
```go
func (str I2PString) Length() (length int, err error)
```
Length returns the length specified in the first byte. Returns error if the
specified does not match the actual length or the string is otherwise invalid.
#### type Integer
```go
type Integer []byte
```
Integer is the represenation of an I2P Integer.
https://geti2p.net/spec/common-structures#integer
#### func NewInteger
```go
func NewInteger(bytes []byte, size int) (integer *Integer, remainder []byte, err error)
```
NewInteger creates a new Integer from []byte using ReadInteger. Limits the
length of the created Integer to MAX_INTEGER_SIZE. Returns a pointer to Integer
unlike ReadInteger.
#### func NewIntegerFromInt
```go
func NewIntegerFromInt(value int, size int) (integer *Integer, err error)
```
NewIntegerFromInt creates a new Integer from a Go integer of a specified []byte
length.
#### func ReadInteger
```go
func ReadInteger(bytes []byte, size int) (Integer, []byte)
```
ReadInteger returns an Integer from a []byte of specified length. The remaining
bytes after the specified length are also returned.
#### func (Integer) Bytes
```go
func (i Integer) Bytes() []byte
```
Bytes returns the raw []byte content of an Integer.
#### func (Integer) Int
```go
func (i Integer) Int() int
```
Int returns the Integer as a Go integer
#### type Mapping
```go
type Mapping struct {
}
```
Mapping is the represenation of an I2P Mapping.
https://geti2p.net/spec/common-structures#mapping
#### func GoMapToMapping
```go
func GoMapToMapping(gomap map[string]string) (mapping *Mapping, err error)
```
GoMapToMapping converts a Go map of unformatted strings to *Mapping.
#### func NewMapping
```go
func NewMapping(bytes []byte) (values *Mapping, remainder []byte, err []error)
```
NewMapping creates a new *Mapping from []byte using ReadMapping. Returns a
pointer to Mapping unlike ReadMapping.
#### func ReadMapping
```go
func ReadMapping(bytes []byte) (mapping Mapping, remainder []byte, err []error)
```
ReadMapping returns Mapping from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func ValuesToMapping
```go
func ValuesToMapping(values MappingValues) *Mapping
```
ValuesToMapping creates a *Mapping using MappingValues. The values are sorted in
the order defined in mappingOrder.
#### func (*Mapping) Data
```go
func (mapping *Mapping) Data() []byte
```
Data returns a Mapping in its []byte form.
#### func (*Mapping) HasDuplicateKeys
```go
func (mapping *Mapping) HasDuplicateKeys() bool
```
HasDuplicateKeys returns true if two keys in a mapping are identical.
#### func (Mapping) Values
```go
func (mapping Mapping) Values() MappingValues
```
Values returns the values contained in a Mapping as MappingValues.
#### type MappingValues
```go
type MappingValues [][2]I2PString
```
MappingValues represents the parsed key value pairs inside of an I2P Mapping.
#### func ReadMappingValues
```go
func ReadMappingValues(remainder []byte, map_length Integer) (values *MappingValues, remainder_bytes []byte, errs []error)
```
ReadMappingValues returns *MappingValues from a []byte. The remaining bytes
after the specified length are also returned. Returns a list of errors that
occurred during parsing.
#### func (MappingValues) Get
```go
func (m MappingValues) Get(key I2PString) I2PString
```
data
github.com/go-i2p/go-i2p/lib/common/data

View File

@ -0,0 +1,340 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="365pt" height="850pt"
viewBox="0.00 0.00 364.94 850.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 850)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-850 364.9356,-850 364.9356,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-842 356.9356,-842 356.9356,-8 8,-8"/>
<text text-anchor="middle" x="182.4678" y="-821.8" font-family="Arial" font-size="18.00" fill="#000000">destination</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="229.4047,-501 229.4047,-622 322.7259,-622 322.7259,-501 229.4047,-501"/>
<text text-anchor="middle" x="276.0653" y="-603.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M249.4047,-509C249.4047,-509 302.7259,-509 302.7259,-509 308.7259,-509 314.7259,-515 314.7259,-521 314.7259,-521 314.7259,-575 314.7259,-575 314.7259,-581 308.7259,-587 302.7259,-587 302.7259,-587 249.4047,-587 249.4047,-587 243.4047,-587 237.4047,-581 237.4047,-575 237.4047,-575 237.4047,-521 237.4047,-521 237.4047,-515 243.4047,-509 249.4047,-509"/>
<text text-anchor="middle" x="276.0653" y="-517.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="207.4706,-319 207.4706,-493 344.66,-493 344.66,-319 207.4706,-319"/>
<text text-anchor="middle" x="276.0653" y="-474.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M236.9559,-327C236.9559,-327 315.1747,-327 315.1747,-327 321.1747,-327 327.1747,-333 327.1747,-339 327.1747,-339 327.1747,-393 327.1747,-393 327.1747,-399 321.1747,-405 315.1747,-405 315.1747,-405 236.9559,-405 236.9559,-405 230.9559,-405 224.9559,-399 224.9559,-393 224.9559,-393 224.9559,-339 224.9559,-339 224.9559,-333 230.9559,-327 236.9559,-327"/>
<text text-anchor="middle" x="276.0653" y="-335.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="203.195,-630 203.195,-804 348.9356,-804 348.9356,-630 203.195,-630"/>
<text text-anchor="middle" x="276.0653" y="-785.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M230.526,-638C230.526,-638 321.6046,-638 321.6046,-638 327.6046,-638 333.6046,-644 333.6046,-650 333.6046,-650 333.6046,-704 333.6046,-704 333.6046,-710 327.6046,-716 321.6046,-716 321.6046,-716 230.526,-716 230.526,-716 224.526,-716 218.526,-710 218.526,-704 218.526,-704 218.526,-650 218.526,-650 218.526,-644 224.526,-638 230.526,-638"/>
<text text-anchor="middle" x="276.0653" y="-646.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination</title>
<g id="a_clust6"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-266C28,-266 131.0814,-266 131.0814,-266 137.0814,-266 143.0814,-272 143.0814,-278 143.0814,-278 143.0814,-393 143.0814,-393 143.0814,-399 137.0814,-405 131.0814,-405 131.0814,-405 28,-405 28,-405 22,-405 16,-399 16,-393 16,-393 16,-278 16,-278 16,-272 22,-266 28,-266"/>
<text text-anchor="middle" x="79.5407" y="-274.5" font-family="Arial" font-size="15.00" fill="#222222">(Destination)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="220.1221,-190 220.1221,-311 332.0085,-311 332.0085,-190 220.1221,-190"/>
<text text-anchor="middle" x="276.0653" y="-292.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M240.1221,-198C240.1221,-198 312.0085,-198 312.0085,-198 318.0085,-198 324.0085,-204 324.0085,-210 324.0085,-210 324.0085,-264 324.0085,-264 324.0085,-270 318.0085,-276 312.0085,-276 312.0085,-276 240.1221,-276 240.1221,-276 234.1221,-276 228.1221,-270 228.1221,-264 228.1221,-264 228.1221,-210 228.1221,-210 228.1221,-204 234.1221,-198 240.1221,-198"/>
<text text-anchor="middle" x="276.0653" y="-206.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/base64</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/base64" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/base64">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="210.1859,-103 210.1859,-182 341.9447,-182 341.9447,-103 210.1859,-103"/>
<text text-anchor="middle" x="276.0653" y="-163.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">base64</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/base32</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/base32" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/base32">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="210.1859,-16 210.1859,-95 341.9447,-95 341.9447,-16 210.1859,-16"/>
<text text-anchor="middle" x="276.0653" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">base32</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination | defined in destination.go:72&#10;at destination.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:84: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:77: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at destination.go:73: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:82: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M126.3497,-579C126.3497,-579 32.7317,-579 32.7317,-579 26.7317,-579 20.7317,-573 20.7317,-567 20.7317,-567 20.7317,-555 20.7317,-555 20.7317,-549 26.7317,-543 32.7317,-543 32.7317,-543 126.3497,-543 126.3497,-543 132.3497,-543 138.3497,-549 138.3497,-555 138.3497,-555 138.3497,-567 138.3497,-567 138.3497,-573 132.3497,-579 126.3497,-579"/>
<text text-anchor="middle" x="79.5407" y="-556.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadDestination</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M328.8062,-769C328.8062,-769 223.3244,-769 223.3244,-769 217.3244,-769 211.3244,-763 211.3244,-757 211.3244,-757 211.3244,-745 211.3244,-745 211.3244,-739 217.3244,-733 223.3244,-733 223.3244,-733 328.8062,-733 328.8062,-733 334.8062,-733 340.8062,-739 340.8062,-745 340.8062,-745 340.8062,-757 340.8062,-757 340.8062,-763 334.8062,-769 328.8062,-769"/>
<text text-anchor="middle" x="276.0653" y="-746.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_edge4"><a xlink:title="at destination.go:77: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M89.0222,-579.0163C107.093,-611.7642 149.4959,-681.4059 203.195,-722 205.9953,-724.1169 208.9706,-726.1015 212.0573,-727.9591"/>
<polygon fill="#8b4513" stroke="#8b4513" points="210.5472,-731.1227 220.9983,-732.8619 213.9129,-724.9849 210.5472,-731.1227"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M307.2844,-397C307.2844,-397 244.8462,-397 244.8462,-397 238.8462,-397 232.8462,-391 232.8462,-385 232.8462,-385 232.8462,-373 232.8462,-373 232.8462,-367 238.8462,-361 244.8462,-361 244.8462,-361 307.2844,-361 307.2844,-361 313.2844,-361 319.2844,-367 319.2844,-373 319.2844,-373 319.2844,-385 319.2844,-385 319.2844,-391 313.2844,-397 307.2844,-397"/>
<text text-anchor="middle" x="276.0653" y="-374.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge7"><a xlink:title="at destination.go:73: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:82: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M92.6277,-542.81C121.3973,-503.0116 188.7377,-410.955 203.195,-401 209.2562,-396.8264 216.1285,-393.4275 223.1724,-390.6638"/>
<polygon fill="#8b4513" stroke="#8b4513" points="224.5476,-393.8905 232.8238,-387.2758 222.2289,-387.2857 224.5476,-393.8905"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node12" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node12"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M294.8873,-579C294.8873,-579 257.2433,-579 257.2433,-579 251.2433,-579 245.2433,-573 245.2433,-567 245.2433,-567 245.2433,-555 245.2433,-555 245.2433,-549 251.2433,-543 257.2433,-543 257.2433,-543 294.8873,-543 294.8873,-543 300.8873,-543 306.8873,-549 306.8873,-555 306.8873,-555 306.8873,-567 306.8873,-567 306.8873,-573 300.8873,-579 294.8873,-579"/>
<text text-anchor="middle" x="276.0653" y="-556.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge3"><a xlink:title="at destination.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:84: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M138.2384,-561C169.429,-561 207.0043,-561 235.0381,-561"/>
<polygon fill="#8b4513" stroke="#8b4513" points="235.282,-564.5001 245.282,-561 235.2819,-557.5001 235.282,-564.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init | defined in .:0&#10;at destination.go:17: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M94.5407,-458C94.5407,-458 64.5407,-458 64.5407,-458 58.5407,-458 52.5407,-452 52.5407,-446 52.5407,-446 52.5407,-434 52.5407,-434 52.5407,-428 58.5407,-422 64.5407,-422 64.5407,-422 94.5407,-422 94.5407,-422 100.5407,-422 106.5407,-428 106.5407,-434 106.5407,-434 106.5407,-446 106.5407,-446 106.5407,-452 100.5407,-458 94.5407,-458"/>
<text text-anchor="middle" x="79.5407" y="-435.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node10" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node10"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M324.7548,-458C324.7548,-458 227.3758,-458 227.3758,-458 221.3758,-458 215.3758,-452 215.3758,-446 215.3758,-446 215.3758,-434 215.3758,-434 215.3758,-428 221.3758,-422 227.3758,-422 227.3758,-422 324.7548,-422 324.7548,-422 330.7548,-422 336.7548,-428 336.7548,-434 336.7548,-434 336.7548,-446 336.7548,-446 336.7548,-452 330.7548,-458 324.7548,-458"/>
<text text-anchor="middle" x="276.0653" y="-435.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge14"><a xlink:title="at destination.go:17: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M106.8666,-440C132.1954,-440 170.9888,-440 205.043,-440"/>
<polygon fill="#8b4513" stroke="#8b4513" points="205.4392,-443.5001 215.4392,-440 205.4392,-436.5001 205.4392,-443.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString | defined in base32.go:16">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M321.8244,-60C321.8244,-60 230.3062,-60 230.3062,-60 224.3062,-60 218.3062,-54 218.3062,-48 218.3062,-48 218.3062,-36 218.3062,-36 218.3062,-30 224.3062,-24 230.3062,-24 230.3062,-24 321.8244,-24 321.8244,-24 327.8244,-24 333.8244,-30 333.8244,-36 333.8244,-36 333.8244,-48 333.8244,-48 333.8244,-54 327.8244,-60 321.8244,-60"/>
<text text-anchor="middle" x="276.0653" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString | defined in base64.go:16">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M321.8244,-147C321.8244,-147 230.3062,-147 230.3062,-147 224.3062,-147 218.3062,-141 218.3062,-135 218.3062,-135 218.3062,-123 218.3062,-123 218.3062,-117 224.3062,-111 230.3062,-111 230.3062,-111 321.8244,-111 321.8244,-111 327.8244,-111 333.8244,-117 333.8244,-123 333.8244,-123 333.8244,-135 333.8244,-135 333.8244,-141 327.8244,-147 321.8244,-147"/>
<text text-anchor="middle" x="276.0653" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes | defined in certificate.go:100">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M291.9518,-268C291.9518,-268 260.1788,-268 260.1788,-268 254.1788,-268 248.1788,-262 248.1788,-256 248.1788,-256 248.1788,-244 248.1788,-244 248.1788,-238 254.1788,-232 260.1788,-232 260.1788,-232 291.9518,-232 291.9518,-232 297.9518,-232 303.9518,-238 303.9518,-244 303.9518,-244 303.9518,-256 303.9518,-256 303.9518,-262 297.9518,-268 291.9518,-268"/>
<text text-anchor="middle" x="276.0653" y="-245.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address -->
<g id="node6" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address | defined in destination.go:38&#10;at destination.go:41: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at destination.go:42: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at destination.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:49: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]&#10;at destination.go:47: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M123.1221,-336C123.1221,-336 35.9593,-336 35.9593,-336 29.9593,-336 23.9593,-330 23.9593,-324 23.9593,-324 23.9593,-312 23.9593,-312 23.9593,-306 29.9593,-300 35.9593,-300 35.9593,-300 123.1221,-300 123.1221,-300 129.1221,-300 135.1221,-306 135.1221,-312 135.1221,-312 135.1221,-324 135.1221,-324 135.1221,-330 129.1221,-336 123.1221,-336"/>
<text text-anchor="middle" x="79.5407" y="-313.8" font-family="Verdana" font-size="14.00" fill="#000000">Base32Address</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString -->
<g id="edge9" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString</title>
<g id="a_edge9"><a xlink:title="at destination.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M86.649,-299.8171C102.8674,-259.9055 145.6896,-162.9386 203.195,-97 213.2677,-85.4501 226.1264,-74.7792 238.2299,-65.9707"/>
<polygon fill="#8b4513" stroke="#8b4513" points="240.2865,-68.8033 246.4451,-60.1822 236.2545,-63.0811 240.2865,-68.8033"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="edge5" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge5"><a xlink:title="at destination.go:42: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M125.559,-299.8729C140.9517,-293.9769 158.249,-287.5315 174.195,-282 195.2242,-274.7052 218.9368,-267.2138 238.1896,-261.315"/>
<polygon fill="#8b4513" stroke="#8b4513" points="239.2662,-264.6459 247.8132,-258.3849 237.2273,-257.9494 239.2662,-264.6459"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M305.6439,-708C305.6439,-708 246.4867,-708 246.4867,-708 240.4867,-708 234.4867,-702 234.4867,-696 234.4867,-696 234.4867,-684 234.4867,-684 234.4867,-678 240.4867,-672 246.4867,-672 246.4867,-672 305.6439,-672 305.6439,-672 311.6439,-672 317.6439,-678 317.6439,-684 317.6439,-684 317.6439,-696 317.6439,-696 317.6439,-702 311.6439,-708 305.6439,-708"/>
<text text-anchor="middle" x="276.0653" y="-685.8" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge1" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge1"><a xlink:title="at destination.go:41: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M128.3297,-336.0159C133.8768,-339.644 138.9948,-343.9385 143.0814,-349 178.1618,-392.4496 179.2613,-542.5453 203.195,-593 215.6981,-619.3578 236.0022,-645.5881 252.0064,-664.1136"/>
<polygon fill="#8b4513" stroke="#8b4513" points="249.5509,-666.621 258.7897,-671.8072 254.8016,-661.9916 249.5509,-666.621"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge11" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge11"><a xlink:title="at destination.go:47: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M135.3311,-335.317C162.9225,-343.8812 196.0461,-354.1625 223.2253,-362.5988"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.3605,-365.995 232.9485,-365.6168 224.4356,-359.3097 222.3605,-365.995"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge8" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge8"><a xlink:title="at destination.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:49: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M127.0415,-336.1787C132.9301,-339.8055 138.4846,-344.056 143.0814,-349 191.9862,-401.5982 161.2607,-440.6925 203.195,-499 213.4754,-513.2943 227.7358,-526.3809 240.9177,-536.8092"/>
<polygon fill="#8b4513" stroke="#8b4513" points="238.8713,-539.6505 248.9407,-542.9458 243.1241,-534.0904 238.8713,-539.6505"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 -->
<g id="node7" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64</title>
<g id="a_node7"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 | defined in destination.go:55&#10;at destination.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:59: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at destination.go:58: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at destination.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M100.2514,-397C100.2514,-397 58.83,-397 58.83,-397 52.83,-397 46.83,-391 46.83,-385 46.83,-385 46.83,-373 46.83,-373 46.83,-367 52.83,-361 58.83,-361 58.83,-361 100.2514,-361 100.2514,-361 106.2514,-361 112.2514,-367 112.2514,-373 112.2514,-373 112.2514,-385 112.2514,-385 112.2514,-391 106.2514,-397 100.2514,-397"/>
<text text-anchor="middle" x="79.5407" y="-374.8" font-family="Verdana" font-size="14.00" fill="#000000">Base64</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString -->
<g id="edge13" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString</title>
<g id="a_edge13"><a xlink:title="at destination.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M112.3291,-369.1217C123.2768,-364.4796 134.7868,-357.9452 143.0814,-349 193.8848,-294.2117 160.2819,-253.1654 203.195,-192 213.4558,-177.3749 227.8424,-163.9852 241.1247,-153.3466"/>
<polygon fill="#8b4513" stroke="#8b4513" points="243.44,-155.9805 249.2053,-147.0917 239.1552,-150.4451 243.44,-155.9805"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="edge10" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge10"><a xlink:title="at destination.go:59: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M112.1859,-365.1014C122.308,-360.3936 133.3536,-354.8381 143.0814,-349 180.4938,-326.5472 220.2294,-295.9708 246.418,-274.765"/>
<polygon fill="#8b4513" stroke="#8b4513" points="248.8896,-277.2655 254.4246,-268.2314 244.464,-271.8421 248.8896,-277.2655"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge12" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge12"><a xlink:title="at destination.go:58: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M112.3418,-383.209C123.6947,-386.3145 135.4677,-391.6935 143.0814,-401 208.6771,-481.1802 116.2541,-546.125 174.195,-632 186.4226,-650.1226 206.3255,-663.2487 225.3093,-672.3805"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.9636,-675.6131 234.5172,-676.5469 226.8493,-669.2356 223.9636,-675.6131"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge6" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge6"><a xlink:title="at destination.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M112.4345,-379C142.469,-379 187.4151,-379 222.6061,-379"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.7186,-382.5001 232.7186,-379 222.7185,-375.5001 222.7186,-382.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge2" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge2"><a xlink:title="at destination.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M112.2579,-384.4732C123.1989,-387.7109 134.7228,-392.8505 143.0814,-401 171.2889,-428.5018 150.6333,-452.4269 174.195,-484 190.7856,-506.2317 215.4946,-525.126 236.4225,-538.6343"/>
<polygon fill="#8b4513" stroke="#8b4513" points="234.7932,-541.7437 245.1255,-544.0878 238.5102,-535.812 234.7932,-541.7437"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -40,3 +40,54 @@ Base32Address returns the I2P base32 address for this Destination.
func (destination Destination) Base64() string
```
Base64 returns the I2P base64 address for this Destination.
# destination
--
import "github.com/go-i2p/go-i2p/lib/common/destination"
Package destination implements the I2P Destination common data structure
![destination.svg](destination)
## Usage
#### type Destination
```go
type Destination struct {
KeysAndCert
}
```
Destination is the represenation of an I2P Destination.
https://geti2p.net/spec/common-structures#destination
#### func ReadDestination
```go
func ReadDestination(data []byte) (destination Destination, remainder []byte, err error)
```
ReadDestination returns Destination from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func (Destination) Base32Address
```go
func (destination Destination) Base32Address() (str string)
```
Base32Address returns the I2P base32 address for this Destination.
#### func (Destination) Base64
```go
func (destination Destination) Base64() string
```
Base64 returns the I2P base64 address for this Destination.
destination
github.com/go-i2p/go-i2p/lib/common/destination

View File

@ -10,3 +10,25 @@
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/certificate"
![exportable.svg](exportable)
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
exportable
github.com/go-i2p/go-i2p/lib/common/fuzz/certificate

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="279pt" height="349pt"
viewBox="0.00 0.00 278.84 349.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 349)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-349 278.8444,-349 278.8444,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-341 270.8444,-341 270.8444,-8 8,-8"/>
<text text-anchor="middle" x="139.4222" y="-320.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-16 135,-303 262.8444,-303 262.8444,-16 135,-16"/>
<text text-anchor="middle" x="198.9222" y="-284.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M163.0933,-68C163.0933,-68 235.7511,-68 235.7511,-68 241.7511,-68 247.7511,-74 247.7511,-80 247.7511,-80 247.7511,-256 247.7511,-256 247.7511,-262 241.7511,-268 235.7511,-268 235.7511,-268 163.0933,-268 163.0933,-268 157.0933,-268 151.0933,-262 151.0933,-256 151.0933,-256 151.0933,-80 151.0933,-80 151.0933,-74 157.0933,-68 163.0933,-68"/>
<text text-anchor="middle" x="199.4222" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate]&#10;at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-168C58,-168 28,-168 28,-168 22,-168 16,-162 16,-156 16,-156 16,-144 16,-144 16,-138 22,-132 28,-132 28,-132 58,-132 58,-132 64,-132 70,-138 70,-144 70,-144 70,-156 70,-156 70,-162 64,-168 58,-168"/>
<text text-anchor="middle" x="43" y="-145.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate | defined in certificate.go:201">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M242.7667,-60C242.7667,-60 155.0777,-60 155.0777,-60 149.0777,-60 143.0777,-54 143.0777,-48 143.0777,-48 143.0777,-36 143.0777,-36 143.0777,-30 149.0777,-24 155.0777,-24 155.0777,-24 242.7667,-24 242.7667,-24 248.7667,-24 254.7667,-30 254.7667,-36 254.7667,-36 254.7667,-48 254.7667,-48 254.7667,-54 248.7667,-60 242.7667,-60"/>
<text text-anchor="middle" x="198.9222" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate]">
<path fill="none" stroke="#8b4513" d="M58.2008,-131.824C73.8343,-114.0833 99.7994,-87.1203 133.9843,-65.1785"/>
<polygon fill="#8b4513" stroke="#8b4513" points="136.1723,-67.9415 142.8512,-59.7169 132.5012,-61.9814 136.1723,-67.9415"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data -->
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data | defined in certificate.go:134">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M213.9222,-138C213.9222,-138 183.9222,-138 183.9222,-138 177.9222,-138 171.9222,-132 171.9222,-126 171.9222,-126 171.9222,-114 171.9222,-114 171.9222,-108 177.9222,-102 183.9222,-102 183.9222,-102 213.9222,-102 213.9222,-102 219.9222,-102 225.9222,-108 225.9222,-114 225.9222,-114 225.9222,-126 225.9222,-126 225.9222,-132 219.9222,-138 213.9222,-138"/>
<text text-anchor="middle" x="198.9222" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]">
<path fill="none" stroke="#8b4513" d="M70.1596,-144.7744C95.5702,-139.8853 133.7344,-132.5424 161.9215,-127.1191"/>
<polygon fill="#8b4513" stroke="#8b4513" points="162.6542,-130.5424 171.8127,-125.216 161.3315,-123.6685 162.6542,-130.5424"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length | defined in certificate.go:125">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M218.5809,-199C218.5809,-199 179.2635,-199 179.2635,-199 173.2635,-199 167.2635,-193 167.2635,-187 167.2635,-187 167.2635,-175 167.2635,-175 167.2635,-169 173.2635,-163 179.2635,-163 179.2635,-163 218.5809,-163 218.5809,-163 224.5809,-163 230.5809,-169 230.5809,-175 230.5809,-175 230.5809,-187 230.5809,-187 230.5809,-193 224.5809,-199 218.5809,-199"/>
<text text-anchor="middle" x="198.9222" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Length</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length</title>
<g id="a_edge4"><a xlink:title="at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length]">
<path fill="none" stroke="#8b4513" d="M70.1596,-155.3998C94.1435,-160.1682 129.489,-167.1955 157.0834,-172.6817"/>
<polygon fill="#8b4513" stroke="#8b4513" points="156.7493,-176.1837 167.2398,-174.701 158.1143,-169.3181 156.7493,-176.1837"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type | defined in certificate.go:116">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M213.9222,-260C213.9222,-260 183.9222,-260 183.9222,-260 177.9222,-260 171.9222,-254 171.9222,-248 171.9222,-248 171.9222,-236 171.9222,-236 171.9222,-230 177.9222,-224 183.9222,-224 183.9222,-224 213.9222,-224 213.9222,-224 219.9222,-224 225.9222,-230 225.9222,-236 225.9222,-236 225.9222,-248 225.9222,-248 225.9222,-254 219.9222,-260 213.9222,-260"/>
<text text-anchor="middle" x="198.9222" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">Type</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]">
<path fill="none" stroke="#8b4513" d="M67.7151,-168.1829C85.8672,-181.155 111.3771,-198.6026 135,-212 143.7057,-216.9373 153.3599,-221.7766 162.4721,-226.0783"/>
<polygon fill="#8b4513" stroke="#8b4513" points="161.1636,-229.3292 171.7093,-230.348 164.1007,-222.9752 161.1636,-229.3292"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

@ -10,3 +10,25 @@
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/destination"
![exportable.svg](exportable)
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
exportable
github.com/go-i2p/go-i2p/lib/common/fuzz/destination

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="289pt" height="288pt"
viewBox="0.00 0.00 289.19 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 288)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-288 289.195,-288 289.195,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-280 281.195,-280 281.195,-8 8,-8"/>
<text text-anchor="middle" x="144.5975" y="-259.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/destination</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/destination" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/destination">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="130.1136,-16 130.1136,-242 273.195,-242 273.195,-16 130.1136,-16"/>
<text text-anchor="middle" x="201.6543" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">destination</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/destination" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M150.1136,-68C150.1136,-68 253.195,-68 253.195,-68 259.195,-68 265.195,-74 265.195,-80 265.195,-80 265.195,-195 265.195,-195 265.195,-201 259.195,-207 253.195,-207 253.195,-207 150.1136,-207 150.1136,-207 144.1136,-207 138.1136,-201 138.1136,-195 138.1136,-195 138.1136,-80 138.1136,-80 138.1136,-74 144.1136,-68 150.1136,-68"/>
<text text-anchor="middle" x="201.6543" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Destination)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination]&#10;at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address]&#10;at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-138C58,-138 28,-138 28,-138 22,-138 16,-132 16,-126 16,-126 16,-114 16,-114 16,-108 22,-102 28,-102 28,-102 58,-102 58,-102 64,-102 70,-108 70,-114 70,-114 70,-126 70,-126 70,-132 64,-138 58,-138"/>
<text text-anchor="middle" x="43" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination | defined in destination.go:72">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M248.4633,-60C248.4633,-60 154.8453,-60 154.8453,-60 148.8453,-60 142.8453,-54 142.8453,-48 142.8453,-48 142.8453,-36 142.8453,-36 142.8453,-30 148.8453,-24 154.8453,-24 154.8453,-24 248.4633,-24 248.4633,-24 254.4633,-24 260.4633,-30 260.4633,-36 260.4633,-36 260.4633,-48 260.4633,-48 260.4633,-54 254.4633,-60 248.4633,-60"/>
<text text-anchor="middle" x="201.6543" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadDestination</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination]">
<path fill="none" stroke="#8b4513" d="M67.12,-101.9366C84.055,-89.9084 107.6112,-74.452 130.1136,-64 131.2737,-63.4612 132.4503,-62.9312 133.6406,-62.4103"/>
<polygon fill="#8b4513" stroke="#8b4513" points="135.0473,-65.6165 142.9817,-58.5953 132.4006,-59.1361 135.0473,-65.6165"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address -->
<g id="node3" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address</title>
<g id="a_node3"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address | defined in destination.go:38">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M245.2357,-138C245.2357,-138 158.0729,-138 158.0729,-138 152.0729,-138 146.0729,-132 146.0729,-126 146.0729,-126 146.0729,-114 146.0729,-114 146.0729,-108 152.0729,-102 158.0729,-102 158.0729,-102 245.2357,-102 245.2357,-102 251.2357,-102 257.2357,-108 257.2357,-114 257.2357,-114 257.2357,-126 257.2357,-126 257.2357,-132 251.2357,-138 245.2357,-138"/>
<text text-anchor="middle" x="201.6543" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Base32Address</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address]">
<path fill="none" stroke="#8b4513" d="M70.2736,-120C88.3329,-120 112.8362,-120 135.7903,-120"/>
<polygon fill="#8b4513" stroke="#8b4513" points="135.853,-123.5001 145.853,-120 135.8529,-116.5001 135.853,-123.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 -->
<g id="node4" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64</title>
<g id="a_node4"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 | defined in destination.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M222.365,-199C222.365,-199 180.9436,-199 180.9436,-199 174.9436,-199 168.9436,-193 168.9436,-187 168.9436,-187 168.9436,-175 168.9436,-175 168.9436,-169 174.9436,-163 180.9436,-163 180.9436,-163 222.365,-163 222.365,-163 228.365,-163 234.365,-169 234.365,-175 234.365,-175 234.365,-187 234.365,-187 234.365,-193 228.365,-199 222.365,-199"/>
<text text-anchor="middle" x="201.6543" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Base64</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64]">
<path fill="none" stroke="#8b4513" d="M70.2736,-130.4863C94.7627,-139.9019 131.1015,-153.8736 159.3582,-164.7378"/>
<polygon fill="#8b4513" stroke="#8b4513" points="158.3932,-168.1165 168.9832,-168.4385 160.9054,-161.5828 158.3932,-168.1165"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@ -10,3 +10,25 @@
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/keys_and_cert"
![exportable.svg](exportable)
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
exportable
github.com/go-i2p/go-i2p/lib/common/fuzz/keys_and_cert

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="303pt" height="349pt"
viewBox="0.00 0.00 303.20 349.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 349)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-349 303.202,-349 303.202,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-341 295.202,-341 295.202,-8 8,-8"/>
<text text-anchor="middle" x="151.601" y="-320.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="128.5386,-16 128.5386,-303 287.202,-303 287.202,-16 128.5386,-16"/>
<text text-anchor="middle" x="207.8703" y="-284.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M148.5386,-68C148.5386,-68 267.202,-68 267.202,-68 273.202,-68 279.202,-74 279.202,-80 279.202,-80 279.202,-256 279.202,-256 279.202,-262 273.202,-268 267.202,-268 267.202,-268 148.5386,-268 148.5386,-268 142.5386,-268 136.5386,-262 136.5386,-256 136.5386,-256 136.5386,-80 136.5386,-80 136.5386,-74 142.5386,-68 148.5386,-68"/>
<text text-anchor="middle" x="207.8703" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey]&#10;at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-168C58,-168 28,-168 28,-168 22,-168 16,-162 16,-156 16,-156 16,-144 16,-144 16,-138 22,-132 28,-132 28,-132 58,-132 58,-132 64,-132 70,-138 70,-144 70,-144 70,-156 70,-156 70,-162 64,-168 58,-168"/>
<text text-anchor="middle" x="43" y="-145.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M260.6112,-60C260.6112,-60 155.1294,-60 155.1294,-60 149.1294,-60 143.1294,-54 143.1294,-48 143.1294,-48 143.1294,-36 143.1294,-36 143.1294,-30 149.1294,-24 155.1294,-24 155.1294,-24 260.6112,-24 260.6112,-24 266.6112,-24 272.6112,-30 272.6112,-36 272.6112,-36 272.6112,-48 272.6112,-48 272.6112,-54 266.6112,-60 260.6112,-60"/>
<text text-anchor="middle" x="207.8703" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M56.3722,-131.7759C71.6819,-112.1993 98.5469,-81.5446 128.5386,-64 130.2503,-62.9987 132.0096,-62.0412 133.8061,-61.1259"/>
<polygon fill="#8b4513" stroke="#8b4513" points="135.4178,-64.2375 143.0527,-56.8917 132.5034,-57.873 135.4178,-64.2375"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M237.4489,-138C237.4489,-138 178.2917,-138 178.2917,-138 172.2917,-138 166.2917,-132 166.2917,-126 166.2917,-126 166.2917,-114 166.2917,-114 166.2917,-108 172.2917,-102 178.2917,-102 178.2917,-102 237.4489,-102 237.4489,-102 243.4489,-102 249.4489,-108 249.4489,-114 249.4489,-114 249.4489,-126 249.4489,-126 249.4489,-132 243.4489,-138 237.4489,-138"/>
<text text-anchor="middle" x="207.8703" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M70.225,-145.0461C93.4402,-140.8218 127.4671,-134.6303 155.88,-129.4602"/>
<polygon fill="#8b4513" stroke="#8b4513" points="156.8516,-132.841 166.0634,-127.6072 155.5984,-125.9541 156.8516,-132.841"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey | defined in keys_and_cert.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M237.47,-199C237.47,-199 178.2706,-199 178.2706,-199 172.2706,-199 166.2706,-193 166.2706,-187 166.2706,-187 166.2706,-175 166.2706,-175 166.2706,-169 172.2706,-163 178.2706,-163 178.2706,-163 237.47,-163 237.47,-163 243.47,-163 249.47,-169 249.47,-175 249.47,-175 249.47,-187 249.47,-187 249.47,-193 243.47,-199 237.47,-199"/>
<text text-anchor="middle" x="207.8703" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">PublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey]">
<path fill="none" stroke="#8b4513" d="M70.225,-155.119C93.4402,-159.4841 127.4671,-165.8821 155.88,-171.2244"/>
<polygon fill="#8b4513" stroke="#8b4513" points="155.5889,-174.731 166.0634,-173.1392 156.8824,-167.8515 155.5889,-174.731"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey | defined in keys_and_cert.go:131">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M259.0341,-260C259.0341,-260 156.7065,-260 156.7065,-260 150.7065,-260 144.7065,-254 144.7065,-248 144.7065,-248 144.7065,-236 144.7065,-236 144.7065,-230 150.7065,-224 156.7065,-224 156.7065,-224 259.0341,-224 259.0341,-224 265.0341,-224 271.0341,-230 271.0341,-236 271.0341,-236 271.0341,-248 271.0341,-248 271.0341,-254 265.0341,-260 259.0341,-260"/>
<text text-anchor="middle" x="207.8703" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey</title>
<g id="a_edge4"><a xlink:title="at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey]">
<path fill="none" stroke="#8b4513" d="M64.4418,-168.022C81.1307,-181.4179 105.2896,-199.4686 128.5386,-212 133.6869,-214.7749 139.1473,-217.411 144.699,-219.8844"/>
<polygon fill="#8b4513" stroke="#8b4513" points="143.5181,-223.1857 154.0895,-223.8893 146.2642,-216.7468 143.5181,-223.1857"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -10,3 +10,25 @@
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/router_address"
![exportable.svg](exportable)
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
exportable
github.com/go-i2p/go-i2p/lib/common/fuzz/router_address

View File

@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="304pt" height="410pt"
viewBox="0.00 0.00 303.74 410.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 410)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-410 303.7392,-410 303.7392,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-402 295.7392,-402 295.7392,-8 8,-8"/>
<text text-anchor="middle" x="151.8696" y="-381.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_address" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-16 135,-364 287.7392,-364 287.7392,-16 135,-16"/>
<text text-anchor="middle" x="211.3696" y="-345.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_address</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_address" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M161.7686,-68C161.7686,-68 260.9706,-68 260.9706,-68 266.9706,-68 272.9706,-74 272.9706,-80 272.9706,-80 272.9706,-317 272.9706,-317 272.9706,-323 266.9706,-329 260.9706,-329 260.9706,-329 161.7686,-329 161.7686,-329 155.7686,-329 149.7686,-323 149.7686,-317 149.7686,-317 149.7686,-80 149.7686,-80 149.7686,-74 155.7686,-68 161.7686,-68"/>
<text text-anchor="middle" x="211.3696" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(RouterAddress)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress]&#10;at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost]&#10;at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration]&#10;at fuzz.go:9: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options]&#10;at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-199C58,-199 28,-199 28,-199 22,-199 16,-193 16,-187 16,-187 16,-175 16,-175 16,-169 22,-163 28,-163 28,-163 58,-163 58,-163 64,-163 70,-169 70,-175 70,-175 70,-187 70,-187 70,-193 64,-199 58,-199"/>
<text text-anchor="middle" x="43" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress | defined in router_address.go:317">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M267.609,-60C267.609,-60 155.1302,-60 155.1302,-60 149.1302,-60 143.1302,-54 143.1302,-48 143.1302,-48 143.1302,-36 143.1302,-36 143.1302,-30 149.1302,-24 155.1302,-24 155.1302,-24 267.609,-24 267.609,-24 273.609,-24 279.609,-30 279.609,-36 279.609,-36 279.609,-48 279.609,-48 279.609,-54 273.609,-60 267.609,-60"/>
<text text-anchor="middle" x="211.3696" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterAddress</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress]">
<path fill="none" stroke="#8b4513" d="M52.5485,-162.6228C66.067,-138.3067 93.0901,-95.432 134.6832,-65.0103"/>
<polygon fill="#8b4513" stroke="#8b4513" points="136.6949,-67.8744 142.9069,-59.2918 132.6986,-62.1273 136.6949,-67.8744"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost -->
<g id="node3" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost</title>
<g id="a_node3"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost | defined in router_address.go:163">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M226.3696,-138C226.3696,-138 196.3696,-138 196.3696,-138 190.3696,-138 184.3696,-132 184.3696,-126 184.3696,-126 184.3696,-114 184.3696,-114 184.3696,-108 190.3696,-102 196.3696,-102 196.3696,-102 226.3696,-102 226.3696,-102 232.3696,-102 238.3696,-108 238.3696,-114 238.3696,-114 238.3696,-126 238.3696,-126 238.3696,-132 232.3696,-138 226.3696,-138"/>
<text text-anchor="middle" x="211.3696" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Cost</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost]">
<path fill="none" stroke="#8b4513" d="M70.0515,-171.1993C98.3189,-160.9581 142.8584,-144.8215 174.37,-133.4049"/>
<polygon fill="#8b4513" stroke="#8b4513" points="175.8964,-136.5746 184.1061,-129.8775 173.5119,-129.9932 175.8964,-136.5746"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration -->
<g id="node4" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration</title>
<g id="a_node4"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration | defined in router_address.go:168">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M240.9693,-199C240.9693,-199 181.7699,-199 181.7699,-199 175.7699,-199 169.7699,-193 169.7699,-187 169.7699,-187 169.7699,-175 169.7699,-175 169.7699,-169 175.7699,-163 181.7699,-163 181.7699,-163 240.9693,-163 240.9693,-163 246.9693,-163 252.9693,-169 252.9693,-175 252.9693,-175 252.9693,-187 252.9693,-187 252.9693,-193 246.9693,-199 240.9693,-199"/>
<text text-anchor="middle" x="211.3696" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Expiration</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration]">
<path fill="none" stroke="#8b4513" d="M70.0515,-181C94.0828,-181 129.8746,-181 159.4241,-181"/>
<polygon fill="#8b4513" stroke="#8b4513" points="159.5863,-184.5001 169.5862,-181 159.5862,-177.5001 159.5863,-184.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options -->
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options | defined in router_address.go:305">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M233.7028,-260C233.7028,-260 189.0364,-260 189.0364,-260 183.0364,-260 177.0364,-254 177.0364,-248 177.0364,-248 177.0364,-236 177.0364,-236 177.0364,-230 183.0364,-224 189.0364,-224 189.0364,-224 233.7028,-224 233.7028,-224 239.7028,-224 245.7028,-230 245.7028,-236 245.7028,-236 245.7028,-248 245.7028,-248 245.7028,-254 239.7028,-260 233.7028,-260"/>
<text text-anchor="middle" x="211.3696" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">Options</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options</title>
<g id="a_edge4"><a xlink:title="at fuzz.go:9: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options]">
<path fill="none" stroke="#8b4513" d="M70.0515,-190.8007C96.3058,-200.3126 136.5971,-214.91 167.4499,-226.088"/>
<polygon fill="#8b4513" stroke="#8b4513" points="166.5115,-229.4705 177.1057,-229.5862 168.8959,-222.8892 166.5115,-229.4705"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="node6" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle | defined in router_address.go:173">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M253.0718,-321C253.0718,-321 169.6674,-321 169.6674,-321 163.6674,-321 157.6674,-315 157.6674,-309 157.6674,-309 157.6674,-297 157.6674,-297 157.6674,-291 163.6674,-285 169.6674,-285 169.6674,-285 253.0718,-285 253.0718,-285 259.0718,-285 265.0718,-291 265.0718,-297 265.0718,-297 265.0718,-309 265.0718,-309 265.0718,-315 259.0718,-321 253.0718,-321"/>
<text text-anchor="middle" x="211.3696" y="-298.8" font-family="Verdana" font-size="14.00" fill="#000000">TransportStyle</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_edge5"><a xlink:title="at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="none" stroke="#8b4513" d="M57.185,-199.133C73.9077,-219.4785 103.4438,-252.332 135,-273 139.2117,-275.7585 143.7162,-278.3272 148.3523,-280.7058"/>
<polygon fill="#8b4513" stroke="#8b4513" points="146.8581,-283.8709 157.3876,-285.0458 149.889,-277.561 146.8581,-283.8709"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -10,3 +10,25 @@
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/router_identity"
![exportable.svg](exportable)
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
exportable
github.com/go-i2p/go-i2p/lib/common/fuzz/router_identity

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="301pt" height="270pt"
viewBox="0.00 0.00 301.42 270.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 270)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-270 301.4152,-270 301.4152,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-262 293.4152,-262 293.4152,-8 8,-8"/>
<text text-anchor="middle" x="150.7076" y="-241.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_identity" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-145 135,-224 285.4152,-224 285.4152,-145 135,-145"/>
<text text-anchor="middle" x="210.2076" y="-205.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_identity</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="144.6683,-16 144.6683,-137 275.7469,-137 275.7469,-16 144.6683,-16"/>
<text text-anchor="middle" x="210.2076" y="-118.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M164.6683,-24C164.6683,-24 255.7469,-24 255.7469,-24 261.7469,-24 267.7469,-30 267.7469,-36 267.7469,-36 267.7469,-90 267.7469,-90 267.7469,-96 261.7469,-102 255.7469,-102 255.7469,-102 164.6683,-102 164.6683,-102 158.6683,-102 152.6683,-96 152.6683,-90 152.6683,-90 152.6683,-36 152.6683,-36 152.6683,-30 158.6683,-24 164.6683,-24"/>
<text text-anchor="middle" x="210.2076" y="-32.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity]&#10;at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-124C58,-124 28,-124 28,-124 22,-124 16,-118 16,-112 16,-112 16,-100 16,-100 16,-94 22,-88 28,-88 28,-88 58,-88 58,-88 64,-88 70,-94 70,-100 70,-100 70,-112 70,-112 70,-118 64,-124 58,-124"/>
<text text-anchor="middle" x="43" y="-101.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="node2" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_node2"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M239.7862,-94C239.7862,-94 180.629,-94 180.629,-94 174.629,-94 168.629,-88 168.629,-82 168.629,-82 168.629,-70 168.629,-70 168.629,-64 174.629,-58 180.629,-58 180.629,-58 239.7862,-58 239.7862,-58 245.7862,-58 251.7862,-64 251.7862,-70 251.7862,-70 251.7862,-82 251.7862,-82 251.7862,-88 245.7862,-94 239.7862,-94"/>
<text text-anchor="middle" x="210.2076" y="-71.8" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M70.2369,-101.1132C94.0774,-96.8358 129.3644,-90.5047 158.5427,-85.2696"/>
<polygon fill="#8b4513" stroke="#8b4513" points="159.3552,-88.6798 168.5799,-83.4687 158.1189,-81.7898 159.3552,-88.6798"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity | defined in router_identity.go:37">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M265.6234,-189C265.6234,-189 154.7918,-189 154.7918,-189 148.7918,-189 142.7918,-183 142.7918,-177 142.7918,-177 142.7918,-165 142.7918,-165 142.7918,-159 148.7918,-153 154.7918,-153 154.7918,-153 265.6234,-153 265.6234,-153 271.6234,-153 277.6234,-159 277.6234,-165 277.6234,-165 277.6234,-177 277.6234,-177 277.6234,-183 271.6234,-189 265.6234,-189"/>
<text text-anchor="middle" x="210.2076" y="-166.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterIdentity</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity]">
<path fill="none" stroke="#8b4513" d="M70.2369,-116.588C92.9344,-125.4114 126.0071,-138.2681 154.3058,-149.2688"/>
<polygon fill="#8b4513" stroke="#8b4513" points="153.1091,-152.5587 163.6978,-152.9199 155.6454,-146.0344 153.1091,-152.5587"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -10,3 +10,25 @@
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/string"
![exportable.svg](exportable)
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
exportable
github.com/go-i2p/go-i2p/lib/common/fuzz/string

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="262pt" height="288pt"
viewBox="0.00 0.00 262.22 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 288)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-288 262.2202,-288 262.2202,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-280 254.2202,-280 254.2202,-8 8,-8"/>
<text text-anchor="middle" x="131.1101" y="-259.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="137,-16 137,-242 246.2202,-242 246.2202,-16 137,-16"/>
<text text-anchor="middle" x="191.6101" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M162.7812,-68C162.7812,-68 221.439,-68 221.439,-68 227.439,-68 233.439,-74 233.439,-80 233.439,-80 233.439,-195 233.439,-195 233.439,-201 227.439,-207 221.439,-207 221.439,-207 162.7812,-207 162.7812,-207 156.7812,-207 150.7812,-201 150.7812,-195 150.7812,-195 150.7812,-80 150.7812,-80 150.7812,-74 156.7812,-68 162.7812,-68"/>
<text text-anchor="middle" x="192.1101" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(I2PString)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]&#10;at fuzz.go:11: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]&#10;at fuzz.go:9: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-138C58,-138 28,-138 28,-138 22,-138 16,-132 16,-126 16,-126 16,-114 16,-114 16,-108 22,-102 28,-102 28,-102 58,-102 58,-102 64,-102 70,-108 70,-114 70,-114 70,-126 70,-126 70,-132 64,-138 58,-138"/>
<text text-anchor="middle" x="43" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString | defined in string.go:114">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M226.3306,-60C226.3306,-60 156.8896,-60 156.8896,-60 150.8896,-60 144.8896,-54 144.8896,-48 144.8896,-48 144.8896,-36 144.8896,-36 144.8896,-30 150.8896,-24 156.8896,-24 156.8896,-24 226.3306,-24 226.3306,-24 232.3306,-24 238.3306,-30 238.3306,-36 238.3306,-36 238.3306,-48 238.3306,-48 238.3306,-54 232.3306,-60 226.3306,-60"/>
<text text-anchor="middle" x="191.6101" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ToI2PString</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:9: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString]">
<path fill="none" stroke="#8b4513" d="M70.341,-102.1837C86.9701,-91.6949 109.0169,-78.3859 136.2019,-64.6014"/>
<polygon fill="#8b4513" stroke="#8b4513" points="137.8199,-67.7056 145.2084,-60.1122 134.6972,-61.4407 137.8199,-67.7056"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="node3" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_node3"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data | defined in string.go:73">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M206.6101,-138C206.6101,-138 176.6101,-138 176.6101,-138 170.6101,-138 164.6101,-132 164.6101,-126 164.6101,-126 164.6101,-114 164.6101,-114 164.6101,-108 170.6101,-102 176.6101,-102 176.6101,-102 206.6101,-102 206.6101,-102 212.6101,-102 218.6101,-108 218.6101,-114 218.6101,-114 218.6101,-126 218.6101,-126 218.6101,-132 212.6101,-138 206.6101,-138"/>
<text text-anchor="middle" x="191.6101" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="none" stroke="#8b4513" d="M70.2574,-120C93.8244,-120 128.1179,-120 154.2422,-120"/>
<polygon fill="#8b4513" stroke="#8b4513" points="154.5256,-123.5001 164.5255,-120 154.5255,-116.5001 154.5256,-123.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length -->
<g id="node4" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length</title>
<g id="a_node4"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length | defined in string.go:31">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M211.2688,-199C211.2688,-199 171.9514,-199 171.9514,-199 165.9514,-199 159.9514,-193 159.9514,-187 159.9514,-187 159.9514,-175 159.9514,-175 159.9514,-169 165.9514,-163 171.9514,-163 171.9514,-163 211.2688,-163 211.2688,-163 217.2688,-163 223.2688,-169 223.2688,-175 223.2688,-175 223.2688,-187 223.2688,-187 223.2688,-193 217.2688,-199 211.2688,-199"/>
<text text-anchor="middle" x="191.6101" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Length</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]&#10;at fuzz.go:11: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]">
<path fill="none" stroke="#8b4513" d="M70.2574,-131.1883C92.6965,-140.3989 124.8599,-153.601 150.4371,-164.0997"/>
<polygon fill="#8b4513" stroke="#8b4513" points="149.3033,-167.4176 159.8833,-167.9771 151.9614,-160.9419 149.3033,-167.4176"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -8,26 +8,26 @@ Package key_certificate implements the I2P Destination common data structure
```go
const (
KEYCERT_SIGN_DSA_SHA1 = iota
KEYCERT_SIGN_P256
KEYCERT_SIGN_P384
KEYCERT_SIGN_P521
KEYCERT_SIGN_RSA2048
KEYCERT_SIGN_RSA3072
KEYCERT_SIGN_RSA4096
KEYCERT_SIGN_ED25519
KEYCERT_SIGN_ED25519PH
KEYCERT_SIGN_DSA_SHA1 = 0
KEYCERT_SIGN_P256 = 1
KEYCERT_SIGN_P384 = 2
KEYCERT_SIGN_P521 = 3
KEYCERT_SIGN_RSA2048 = 4
KEYCERT_SIGN_RSA3072 = 5
KEYCERT_SIGN_RSA4096 = 6
KEYCERT_SIGN_ED25519 = 7
KEYCERT_SIGN_ED25519PH = 8
)
```
Key Certificate Signing Key Types
```go
const (
KEYCERT_CRYPTO_ELG = iota
KEYCERT_CRYPTO_P256
KEYCERT_CRYPTO_P384
KEYCERT_CRYPTO_P521
KEYCERT_CRYPTO_X25519
KEYCERT_CRYPTO_ELG = 0
KEYCERT_CRYPTO_P256 = 1
KEYCERT_CRYPTO_P384 = 2
KEYCERT_CRYPTO_P521 = 3
KEYCERT_CRYPTO_X25519 = 4
)
```
Key Certificate Public Key Types
@ -45,7 +45,7 @@ const (
KEYCERT_SIGN_ED25519PH_SIZE = 32
)
```
SigningPublicKey sizes for Signing Key Types
signingPublicKey sizes for Signing Key Types
```go
const (
@ -56,7 +56,7 @@ const (
KEYCERT_CRYPTO_X25519_SIZE = 32
)
```
PublicKey sizes for Public Key Types
publicKey sizes for Public Key Types
```go
const (
@ -66,17 +66,42 @@ const (
```
Sizes of structures in KeyCertificates
```go
const (
CRYPTO_KEY_TYPE_ELGAMAL = 0 // ElGamal
// Signature Types
SIGNATURE_TYPE_DSA_SHA1 = 0 // DSA-SHA1
SIGNATURE_TYPE_ED25519_SHA512 = 7 // Ed25519
)
```
```go
const (
KEYCERT_MIN_SIZE = 7
)
```
```go
var CryptoPublicKeySizes = map[uint16]int{
CRYPTO_KEY_TYPE_ELGAMAL: 256,
}
```
```go
var SignaturePublicKeySizes = map[uint16]int{
SIGNATURE_TYPE_DSA_SHA1: 128,
SIGNATURE_TYPE_ED25519_SHA512: 32,
}
```
#### type KeyCertificate
```go
type KeyCertificate struct {
Certificate
SpkType Integer
CpkType Integer
}
```
@ -85,9 +110,8 @@ type KeyCertificate []byte
#### func KeyCertificateFromCertificate
```go
func KeyCertificateFromCertificate(certificate Certificate) *KeyCertificate
func KeyCertificateFromCertificate(cert Certificate) (*KeyCertificate, error)
```
KeyCertificateFromCertificate returns a *KeyCertificate from a *Certificate.
#### func NewKeyCertificate
@ -101,54 +125,265 @@ returned. Returns a list of errors that occurred during parsing.
#### func (KeyCertificate) ConstructPublicKey
```go
func (key_certificate KeyCertificate) ConstructPublicKey(data []byte) (public_key crypto.PublicKey, err error)
func (keyCertificate KeyCertificate) ConstructPublicKey(data []byte) (public_key crypto.RecievingPublicKey, err error)
```
ConstructPublicKey returns a PublicKey constructed using any excess data that
ConstructPublicKey returns a publicKey constructed using any excess data that
may be stored in the KeyCertififcate. Returns enr errors encountered while
parsing.
#### func (KeyCertificate) ConstructSigningPublicKey
```go
func (key_certificate KeyCertificate) ConstructSigningPublicKey(data []byte) (signing_public_key crypto.SigningPublicKey, err error)
func (keyCertificate KeyCertificate) ConstructSigningPublicKey(data []byte) (signing_public_key crypto.SigningPublicKey, err error)
```
ConstructSigningPublicKey returns a SingingPublicKey constructed using any
excess data that may be stored in the KeyCertificate. Returns any errors
encountered while parsing.
#### func (*KeyCertificate) CryptoPublicKeySize
```go
func (keyCertificate *KeyCertificate) CryptoPublicKeySize() (int, error)
```
#### func (KeyCertificate) CryptoSize
```go
func (key_certificate KeyCertificate) CryptoSize() (size int)
func (keyCertificate KeyCertificate) CryptoSize() (size int)
```
CryptoSize return the size of a Public Key corresponding to the Key
Certificate's PublicKey type.
Certificate's publicKey type.
#### func (KeyCertificate) Data
```go
func (key_certificate KeyCertificate) Data() ([]byte, error)
func (keyCertificate KeyCertificate) Data() ([]byte, error)
```
Data returns the raw []byte contained in the Certificate.
#### func (KeyCertificate) PublicKeyType
```go
func (key_certificate KeyCertificate) PublicKeyType() (pubkey_type int)
func (keyCertificate KeyCertificate) PublicKeyType() (pubkey_type int)
```
PublicKeyType returns the PublicKey type as a Go integer.
PublicKeyType returns the publicKey type as a Go integer.
#### func (KeyCertificate) SignatureSize
```go
func (key_certificate KeyCertificate) SignatureSize() (size int)
func (keyCertificate KeyCertificate) SignatureSize() (size int)
```
SignatureSize return the size of a Signature corresponding to the Key
Certificate's SigningPublicKey type.
Certificate's signingPublicKey type.
#### func (*KeyCertificate) SigningPublicKeySize
```go
func (keyCertificate *KeyCertificate) SigningPublicKeySize() int
```
#### func (KeyCertificate) SigningPublicKeyType
```go
func (key_certificate KeyCertificate) SigningPublicKeyType() (signing_pubkey_type int)
func (keyCertificate KeyCertificate) SigningPublicKeyType() (signing_pubkey_type int)
```
SigningPublicKeyType returns the SigningPublicKey type as a Go integer.
SigningPublicKeyType returns the signingPublicKey type as a Go integer.
# key_certificate
--
import "github.com/go-i2p/go-i2p/lib/common/key_certificate"
Package key_certificate implements the I2P Destination common data structure
![key_certificate.svg](key_certificate)
## Usage
```go
const (
KEYCERT_SIGN_DSA_SHA1 = 0
KEYCERT_SIGN_P256 = 1
KEYCERT_SIGN_P384 = 2
KEYCERT_SIGN_P521 = 3
KEYCERT_SIGN_RSA2048 = 4
KEYCERT_SIGN_RSA3072 = 5
KEYCERT_SIGN_RSA4096 = 6
KEYCERT_SIGN_ED25519 = 7
KEYCERT_SIGN_ED25519PH = 8
)
```
Key Certificate Signing Key Types
```go
const (
KEYCERT_CRYPTO_ELG = 0
KEYCERT_CRYPTO_P256 = 1
KEYCERT_CRYPTO_P384 = 2
KEYCERT_CRYPTO_P521 = 3
KEYCERT_CRYPTO_X25519 = 4
)
```
Key Certificate Public Key Types
```go
const (
KEYCERT_SIGN_DSA_SHA1_SIZE = 128
KEYCERT_SIGN_P256_SIZE = 64
KEYCERT_SIGN_P384_SIZE = 96
KEYCERT_SIGN_P521_SIZE = 132
KEYCERT_SIGN_RSA2048_SIZE = 256
KEYCERT_SIGN_RSA3072_SIZE = 384
KEYCERT_SIGN_RSA4096_SIZE = 512
KEYCERT_SIGN_ED25519_SIZE = 32
KEYCERT_SIGN_ED25519PH_SIZE = 32
)
```
signingPublicKey sizes for Signing Key Types
```go
const (
KEYCERT_CRYPTO_ELG_SIZE = 256
KEYCERT_CRYPTO_P256_SIZE = 64
KEYCERT_CRYPTO_P384_SIZE = 96
KEYCERT_CRYPTO_P521_SIZE = 132
KEYCERT_CRYPTO_X25519_SIZE = 32
)
```
publicKey sizes for Public Key Types
```go
const (
KEYCERT_PUBKEY_SIZE = 256
KEYCERT_SPK_SIZE = 128
)
```
Sizes of structures in KeyCertificates
```go
const (
CRYPTO_KEY_TYPE_ELGAMAL = 0 // ElGamal
// Signature Types
SIGNATURE_TYPE_DSA_SHA1 = 0 // DSA-SHA1
SIGNATURE_TYPE_ED25519_SHA512 = 7 // Ed25519
)
```
```go
const (
KEYCERT_MIN_SIZE = 7
)
```
```go
var CryptoPublicKeySizes = map[uint16]int{
CRYPTO_KEY_TYPE_ELGAMAL: 256,
}
```
```go
var SignaturePublicKeySizes = map[uint16]int{
SIGNATURE_TYPE_DSA_SHA1: 128,
SIGNATURE_TYPE_ED25519_SHA512: 32,
}
```
#### type KeyCertificate
```go
type KeyCertificate struct {
Certificate
SpkType Integer
CpkType Integer
}
```
type KeyCertificate []byte
#### func KeyCertificateFromCertificate
```go
func KeyCertificateFromCertificate(cert Certificate) (*KeyCertificate, error)
```
#### func NewKeyCertificate
```go
func NewKeyCertificate(bytes []byte) (key_certificate *KeyCertificate, remainder []byte, err error)
```
NewKeyCertificate creates a new *KeyCertificate from []byte using
ReadCertificate. The remaining bytes after the specified length are also
returned. Returns a list of errors that occurred during parsing.
#### func (KeyCertificate) ConstructPublicKey
```go
func (keyCertificate KeyCertificate) ConstructPublicKey(data []byte) (public_key crypto.RecievingPublicKey, err error)
```
ConstructPublicKey returns a publicKey constructed using any excess data that
may be stored in the KeyCertififcate. Returns enr errors encountered while
parsing.
#### func (KeyCertificate) ConstructSigningPublicKey
```go
func (keyCertificate KeyCertificate) ConstructSigningPublicKey(data []byte) (signing_public_key crypto.SigningPublicKey, err error)
```
ConstructSigningPublicKey returns a SingingPublicKey constructed using any
excess data that may be stored in the KeyCertificate. Returns any errors
encountered while parsing.
#### func (*KeyCertificate) CryptoPublicKeySize
```go
func (keyCertificate *KeyCertificate) CryptoPublicKeySize() (int, error)
```
#### func (KeyCertificate) CryptoSize
```go
func (keyCertificate KeyCertificate) CryptoSize() (size int)
```
CryptoSize return the size of a Public Key corresponding to the Key
Certificate's publicKey type.
#### func (KeyCertificate) Data
```go
func (keyCertificate KeyCertificate) Data() ([]byte, error)
```
Data returns the raw []byte contained in the Certificate.
#### func (KeyCertificate) PublicKeyType
```go
func (keyCertificate KeyCertificate) PublicKeyType() (pubkey_type int)
```
PublicKeyType returns the publicKey type as a Go integer.
#### func (KeyCertificate) SignatureSize
```go
func (keyCertificate KeyCertificate) SignatureSize() (size int)
```
SignatureSize return the size of a Signature corresponding to the Key
Certificate's signingPublicKey type.
#### func (*KeyCertificate) SigningPublicKeySize
```go
func (keyCertificate *KeyCertificate) SigningPublicKeySize() int
```
#### func (KeyCertificate) SigningPublicKeyType
```go
func (keyCertificate KeyCertificate) SigningPublicKeyType() (signing_pubkey_type int)
```
SigningPublicKeyType returns the signingPublicKey type as a Go integer.
key_certificate
github.com/go-i2p/go-i2p/lib/common/key_certificate

View File

@ -0,0 +1,790 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="867pt" height="1225pt"
viewBox="0.00 0.00 866.86 1225.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1225)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1225 866.8586,-1225 866.8586,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1217 858.8586,-1217 858.8586,-8 8,-8"/>
<text text-anchor="middle" x="433.4293" y="-1196.8" font-family="Arial" font-size="18.00" fill="#000000">key_certificate</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="735.2064,-589 735.2064,-771 829.3214,-771 829.3214,-589 735.2064,-589"/>
<text text-anchor="middle" x="782.2639" y="-752.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M755.2064,-597C755.2064,-597 809.3214,-597 809.3214,-597 815.3214,-597 821.3214,-603 821.3214,-609 821.3214,-609 821.3214,-724 821.3214,-724 821.3214,-730 815.3214,-736 809.3214,-736 809.3214,-736 755.2064,-736 755.2064,-736 749.2064,-736 743.2064,-730 743.2064,-724 743.2064,-724 743.2064,-609 743.2064,-609 743.2064,-603 749.2064,-597 755.2064,-597"/>
<text text-anchor="middle" x="782.2639" y="-605.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="745.1664,-16 745.1664,-95 819.3614,-95 819.3614,-16 745.1664,-16"/>
<text text-anchor="middle" x="782.2639" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="713.6692,-810 713.6692,-1158 850.8586,-1158 850.8586,-810 713.6692,-810"/>
<text text-anchor="middle" x="782.2639" y="-1139.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M743.1545,-862C743.1545,-862 821.3733,-862 821.3733,-862 827.3733,-862 833.3733,-868 833.3733,-874 833.3733,-874 833.3733,-1111 833.3733,-1111 833.3733,-1117 827.3733,-1123 821.3733,-1123 821.3733,-1123 743.1545,-1123 743.1545,-1123 737.1545,-1123 731.1545,-1117 731.1545,-1111 731.1545,-1111 731.1545,-874 731.1545,-874 731.1545,-868 737.1545,-862 743.1545,-862"/>
<text text-anchor="middle" x="782.2639" y="-870.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust7"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-657C28,-657 624.4784,-657 624.4784,-657 630.4784,-657 636.4784,-663 636.4784,-669 636.4784,-669 636.4784,-845 636.4784,-845 636.4784,-851 630.4784,-857 624.4784,-857 624.4784,-857 28,-857 28,-857 22,-857 16,-851 16,-845 16,-845 16,-669 16,-669 16,-663 22,-657 28,-657"/>
<text text-anchor="middle" x="326.2392" y="-665.5" font-family="Arial" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="728.0605,-407 728.0605,-581 836.4673,-581 836.4673,-407 728.0605,-407"/>
<text text-anchor="middle" x="782.2639" y="-562.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M759.2639,-415C759.2639,-415 805.2639,-415 805.2639,-415 811.2639,-415 817.2639,-421 817.2639,-427 817.2639,-427 817.2639,-481 817.2639,-481 817.2639,-487 811.2639,-493 805.2639,-493 805.2639,-493 759.2639,-493 759.2639,-493 753.2639,-493 747.2639,-487 747.2639,-481 747.2639,-481 747.2639,-427 747.2639,-427 747.2639,-421 753.2639,-415 759.2639,-415"/>
<text text-anchor="middle" x="782.2639" y="-423.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Integer)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="718.3417,-103 718.3417,-399 846.1861,-399 846.1861,-103 718.3417,-103"/>
<text text-anchor="middle" x="782.2639" y="-380.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M745.4918,-111C745.4918,-111 819.036,-111 819.036,-111 825.036,-111 831.036,-117 831.036,-123 831.036,-123 831.036,-299 831.036,-299 831.036,-305 825.036,-311 819.036,-311 819.036,-311 745.4918,-311 745.4918,-311 739.4918,-311 733.4918,-305 733.4918,-299 733.4918,-299 733.4918,-123 733.4918,-123 733.4918,-117 739.4918,-111 745.4918,-111"/>
<text text-anchor="middle" x="782.2639" y="-119.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M479.3802,-222C479.3802,-222 622.146,-222 622.146,-222 628.146,-222 634.146,-228 634.146,-234 634.146,-234 634.146,-349 634.146,-349 634.146,-355 628.146,-361 622.146,-361 622.146,-361 479.3802,-361 479.3802,-361 473.3802,-361 467.3802,-355 467.3802,-349 467.3802,-349 467.3802,-234 467.3802,-234 467.3802,-228 473.3802,-222 479.3802,-222"/>
<text text-anchor="middle" x="550.7631" y="-230.5" font-family="Arial" font-size="15.00" fill="#222222">(*KeyCertificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate | defined in key_certificate.go:395&#10;at key_certificate.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:396: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at key_certificate.go:397: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at key_certificate.go:417: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:418: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:397: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:405: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M636.5754,-203C636.5754,-203 464.9508,-203 464.9508,-203 458.9508,-203 452.9508,-197 452.9508,-191 452.9508,-191 452.9508,-179 452.9508,-179 452.9508,-173 458.9508,-167 464.9508,-167 464.9508,-167 636.5754,-167 636.5754,-167 642.5754,-167 648.5754,-173 648.5754,-179 648.5754,-179 648.5754,-191 648.5754,-191 648.5754,-197 642.5754,-203 636.5754,-203"/>
<text text-anchor="middle" x="550.7631" y="-180.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyCertificateFromCertificate</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type | defined in certificate.go:116">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M797.2639,-303C797.2639,-303 767.2639,-303 767.2639,-303 761.2639,-303 755.2639,-297 755.2639,-291 755.2639,-291 755.2639,-279 755.2639,-279 755.2639,-273 761.2639,-267 767.2639,-267 767.2639,-267 797.2639,-267 797.2639,-267 803.2639,-267 809.2639,-273 809.2639,-279 809.2639,-279 809.2639,-291 809.2639,-291 809.2639,-297 803.2639,-303 797.2639,-303"/>
<text text-anchor="middle" x="782.2639" y="-280.8" font-family="Verdana" font-size="14.00" fill="#000000">Type</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_edge10"><a xlink:title="at key_certificate.go:396: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at key_certificate.go:397: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]">
<path fill="none" stroke="#8b4513" d="M633.3958,-203.1134C651.343,-208.9307 669.7145,-216.4315 685.6692,-226 700.7621,-235.0517 699.1932,-243.9913 713.6692,-254 723.4797,-260.7829 735.0133,-266.6695 745.7946,-271.4368"/>
<polygon fill="#8b4513" stroke="#8b4513" points="744.4395,-274.6638 755.0132,-275.3325 747.1644,-268.2159 744.4395,-274.6638"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data | defined in certificate.go:134">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M797.2639,-242C797.2639,-242 767.2639,-242 767.2639,-242 761.2639,-242 755.2639,-236 755.2639,-230 755.2639,-230 755.2639,-218 755.2639,-218 755.2639,-212 761.2639,-206 767.2639,-206 767.2639,-206 797.2639,-206 797.2639,-206 803.2639,-206 809.2639,-212 809.2639,-218 809.2639,-218 809.2639,-230 809.2639,-230 809.2639,-236 803.2639,-242 797.2639,-242"/>
<text text-anchor="middle" x="782.2639" y="-219.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_edge6"><a xlink:title="at key_certificate.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]">
<path fill="none" stroke="#8b4513" d="M648.6399,-193.4102C661.1425,-194.9967 673.7348,-196.8489 685.6692,-199 705.5705,-202.5871 727.4077,-208.1013 745.277,-213.0392"/>
<polygon fill="#8b4513" stroke="#8b4513" points="744.4517,-216.4428 755.026,-215.7838 746.3487,-209.7047 744.4517,-216.4428"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="node11" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_node11"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int | defined in integer.go:32">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M797.2639,-485C797.2639,-485 767.2639,-485 767.2639,-485 761.2639,-485 755.2639,-479 755.2639,-473 755.2639,-473 755.2639,-461 755.2639,-461 755.2639,-455 761.2639,-449 767.2639,-449 767.2639,-449 797.2639,-449 797.2639,-449 803.2639,-449 809.2639,-455 809.2639,-461 809.2639,-461 809.2639,-473 809.2639,-473 809.2639,-479 803.2639,-485 797.2639,-485"/>
<text text-anchor="middle" x="782.2639" y="-462.8" font-family="Verdana" font-size="14.00" fill="#000000">Int</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge22" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge22"><a xlink:title="at key_certificate.go:417: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:418: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M630.8684,-203.067C637.3695,-206.6301 643.4371,-210.895 648.6692,-216 712.2485,-278.0341 664.7255,-330.8712 713.6692,-405 722.9561,-419.0658 736.1645,-432.0234 748.5151,-442.4156"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.4869,-445.2771 756.4575,-448.8601 750.8975,-439.8414 746.4869,-445.2771"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node24" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node24"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M799.4592,-60C799.4592,-60 765.0686,-60 765.0686,-60 759.0686,-60 753.0686,-54 753.0686,-48 753.0686,-48 753.0686,-36 753.0686,-36 753.0686,-30 759.0686,-24 765.0686,-24 765.0686,-24 799.4592,-24 799.4592,-24 805.4592,-24 811.4592,-30 811.4592,-36 811.4592,-36 811.4592,-48 811.4592,-48 811.4592,-54 805.4592,-60 799.4592,-60"/>
<text text-anchor="middle" x="782.2639" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge46" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge46"><a xlink:title="at key_certificate.go:397: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:405: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M574.2444,-166.9252C600.4413,-147.1423 644.4399,-115.0426 684.6692,-91 703.6555,-79.6531 725.6054,-68.4718 743.8747,-59.6618"/>
<polygon fill="#8b4513" stroke="#8b4513" points="745.5381,-62.7463 753.0577,-55.2826 742.5249,-56.4279 745.5381,-62.7463"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.init -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.init | defined in .:0&#10;at key_certificate.go:44: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M565.7631,-903C565.7631,-903 535.7631,-903 535.7631,-903 529.7631,-903 523.7631,-897 523.7631,-891 523.7631,-891 523.7631,-879 523.7631,-879 523.7631,-873 529.7631,-867 535.7631,-867 535.7631,-867 565.7631,-867 565.7631,-867 571.7631,-867 577.7631,-873 577.7631,-879 577.7631,-879 577.7631,-891 577.7631,-891 577.7631,-897 571.7631,-903 565.7631,-903"/>
<text text-anchor="middle" x="550.7631" y="-880.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node19" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node19"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M830.9534,-854C830.9534,-854 733.5744,-854 733.5744,-854 727.5744,-854 721.5744,-848 721.5744,-842 721.5744,-842 721.5744,-830 721.5744,-830 721.5744,-824 727.5744,-818 733.5744,-818 733.5744,-818 830.9534,-818 830.9534,-818 836.9534,-818 842.9534,-824 842.9534,-830 842.9534,-830 842.9534,-842 842.9534,-842 842.9534,-848 836.9534,-854 830.9534,-854"/>
<text text-anchor="middle" x="782.2639" y="-831.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge33" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge33"><a xlink:title="at key_certificate.go:44: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M577.7723,-879.2832C610.2618,-872.4064 666.0628,-860.5954 711.1743,-851.047"/>
<polygon fill="#8b4513" stroke="#8b4513" points="712.1531,-854.4174 721.2115,-848.9225 710.7035,-847.5692 712.1531,-854.4174"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate | defined in key_certificate.go:356&#10;at key_certificate.go:359: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:390: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:384: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:384: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:387: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:388: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:364: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at key_certificate.go:377: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger]&#10;at key_certificate.go:378: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger]&#10;at key_certificate.go:357: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:386: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:368: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at key_certificate.go:369: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at key_certificate.go:369: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:373: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:375: calling [(*github.com/sirupsen/logrus.Logger).Println]&#10;at key_certificate.go:384: calling [(*github.com/sirupsen/logrus.Logger).Println]&#10;at key_certificate.go:362: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate]&#10;at key_certificate.go:364: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at key_certificate.go:372: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:375: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:375: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:377: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:378: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M605.0908,-467C605.0908,-467 496.4354,-467 496.4354,-467 490.4354,-467 484.4354,-461 484.4354,-455 484.4354,-455 484.4354,-443 484.4354,-443 484.4354,-437 490.4354,-431 496.4354,-431 496.4354,-431 605.0908,-431 605.0908,-431 611.0908,-431 617.0908,-437 617.0908,-443 617.0908,-443 617.0908,-455 617.0908,-455 617.0908,-461 611.0908,-467 605.0908,-467"/>
<text text-anchor="middle" x="550.7631" y="-444.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeyCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate | defined in certificate.go:201">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M826.1084,-364C826.1084,-364 738.4194,-364 738.4194,-364 732.4194,-364 726.4194,-358 726.4194,-352 726.4194,-352 726.4194,-340 726.4194,-340 726.4194,-334 732.4194,-328 738.4194,-328 738.4194,-328 826.1084,-328 826.1084,-328 832.1084,-328 838.1084,-334 838.1084,-340 838.1084,-340 838.1084,-352 838.1084,-352 838.1084,-358 832.1084,-364 826.1084,-364"/>
<text text-anchor="middle" x="782.2639" y="-341.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate -->
<g id="edge47" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate</title>
<g id="a_edge47"><a xlink:title="at key_certificate.go:362: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate]">
<path fill="none" stroke="#8b4513" d="M591.3524,-430.9409C630.6539,-413.4547 690.3226,-386.9068 732.4744,-368.1525"/>
<polygon fill="#8b4513" stroke="#8b4513" points="734.0075,-371.3012 741.7212,-364.0384 731.162,-364.9057 734.0075,-371.3012"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_edge19"><a xlink:title="at key_certificate.go:368: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at key_certificate.go:369: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]">
<path fill="none" stroke="#8b4513" d="M573.1857,-430.7382C593.1994,-414.3162 623.1954,-389.4017 648.6692,-367 678.1924,-341.0373 679.706,-326.8035 713.6692,-307 723.3302,-301.3668 734.6114,-296.9847 745.2022,-293.667"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.4395,-296.9525 755.0692,-290.8062 744.4901,-290.2294 746.4395,-296.9525"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data -->
<g id="edge49" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_edge49"><a xlink:title="at key_certificate.go:372: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:375: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:375: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:377: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at key_certificate.go:378: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]">
<path fill="none" stroke="#8b4513" d="M577.0787,-430.9566C598.1566,-415.6222 627.5852,-392.1443 648.6692,-367 685.8961,-322.6041 670.516,-292.6606 713.6692,-254 722.7293,-245.8831 734.3323,-239.6916 745.4082,-235.1024"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.8308,-238.3059 754.9286,-231.4739 744.3378,-231.7649 746.8308,-238.3059"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger -->
<g id="node10" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger</title>
<g id="a_node10"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger | defined in integer.go:51">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M816.6716,-546C816.6716,-546 747.8562,-546 747.8562,-546 741.8562,-546 735.8562,-540 735.8562,-534 735.8562,-534 735.8562,-522 735.8562,-522 735.8562,-516 741.8562,-510 747.8562,-510 747.8562,-510 816.6716,-510 816.6716,-510 822.6716,-510 828.6716,-516 828.6716,-522 828.6716,-522 828.6716,-534 828.6716,-534 828.6716,-540 822.6716,-546 816.6716,-546"/>
<text text-anchor="middle" x="782.2639" y="-523.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadInteger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger</title>
<g id="a_edge14"><a xlink:title="at key_certificate.go:377: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger]&#10;at key_certificate.go:378: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ReadInteger]">
<path fill="none" stroke="#8b4513" d="M617.3307,-450.0442C640.0386,-452.6425 664.9159,-458.1025 685.6692,-469 701.8169,-477.4791 698.7193,-488.5529 713.6692,-499 717.8024,-501.8883 722.2683,-504.5697 726.8696,-507.0401"/>
<polygon fill="#8b4513" stroke="#8b4513" points="725.3244,-510.1806 735.833,-511.5297 728.4594,-503.9218 725.3244,-510.1806"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge8"><a xlink:title="at key_certificate.go:384: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:384: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:387: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:388: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M617.1545,-440.8602C639.0358,-439.4274 663.4512,-439.1714 685.6692,-442 705.6359,-444.542 727.3772,-449.9267 745.1688,-455.05"/>
<polygon fill="#8b4513" stroke="#8b4513" points="744.5618,-458.5208 755.1445,-458.0129 746.5548,-451.8105 744.5618,-458.5208"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node20" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node20"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M813.483,-993C813.483,-993 751.0448,-993 751.0448,-993 745.0448,-993 739.0448,-987 739.0448,-981 739.0448,-981 739.0448,-969 739.0448,-969 739.0448,-963 745.0448,-957 751.0448,-957 751.0448,-957 813.483,-957 813.483,-957 819.483,-957 825.483,-963 825.483,-969 825.483,-969 825.483,-981 825.483,-981 825.483,-987 819.483,-993 813.483,-993"/>
<text text-anchor="middle" x="782.2639" y="-970.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge18"><a xlink:title="at key_certificate.go:357: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:386: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M560.0025,-467.2277C577.769,-502.4566 617.6793,-582.4658 648.6692,-651 666.1501,-689.659 674.4934,-698.0708 685.6692,-739 710.0075,-828.1343 657.987,-871.2655 713.6692,-945 717.9321,-950.6449 723.4825,-955.2456 729.5803,-958.9908"/>
<polygon fill="#8b4513" stroke="#8b4513" points="728.3452,-962.2974 738.8199,-963.888 731.6234,-956.1124 728.3452,-962.2974"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node22" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node22"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M797.2639,-1115C797.2639,-1115 767.2639,-1115 767.2639,-1115 761.2639,-1115 755.2639,-1109 755.2639,-1103 755.2639,-1103 755.2639,-1091 755.2639,-1091 755.2639,-1085 761.2639,-1079 767.2639,-1079 767.2639,-1079 797.2639,-1079 797.2639,-1079 803.2639,-1079 809.2639,-1085 809.2639,-1091 809.2639,-1091 809.2639,-1103 809.2639,-1103 809.2639,-1109 803.2639,-1115 797.2639,-1115"/>
<text text-anchor="middle" x="782.2639" y="-1092.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge48" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge48"><a xlink:title="at key_certificate.go:364: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M561.8725,-467.1725C582.428,-501.6684 626.3311,-579.5867 648.6692,-651 704.5349,-829.5987 599.4158,-918.7953 713.6692,-1067 721.5431,-1077.2137 733.6174,-1084.0166 745.4534,-1088.5185"/>
<polygon fill="#8b4513" stroke="#8b4513" points="744.6484,-1091.9395 755.2421,-1091.7831 746.8632,-1085.2991 744.6484,-1091.9395"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node23" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node23"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M810.7954,-932C810.7954,-932 753.7324,-932 753.7324,-932 747.7324,-932 741.7324,-926 741.7324,-920 741.7324,-920 741.7324,-908 741.7324,-908 741.7324,-902 747.7324,-896 753.7324,-896 753.7324,-896 810.7954,-896 810.7954,-896 816.7954,-896 822.7954,-902 822.7954,-908 822.7954,-908 822.7954,-920 822.7954,-920 822.7954,-926 816.7954,-932 810.7954,-932"/>
<text text-anchor="middle" x="782.2639" y="-909.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge11"><a xlink:title="at key_certificate.go:364: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M562.7527,-467.2366C589.4546,-508.7731 653.9562,-614.3899 685.6692,-712 710.6861,-789.0001 661.0566,-830.4632 713.6692,-892 718.5861,-897.7509 725.0101,-902.0124 731.9542,-905.1671"/>
<polygon fill="#8b4513" stroke="#8b4513" points="731.0612,-908.5707 741.6532,-908.8191 733.5279,-902.0197 731.0612,-908.5707"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge40" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge40"><a xlink:title="at key_certificate.go:369: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:373: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M581.3317,-430.8917C603.2903,-416.325 631.8711,-393.8899 648.6692,-367 712.2334,-265.248 652.4461,-208.1776 713.6692,-105 722.333,-90.3991 735.4293,-77.1772 747.8647,-66.6592"/>
<polygon fill="#8b4513" stroke="#8b4513" points="750.3268,-69.1688 755.8877,-60.1506 745.9168,-63.7326 750.3268,-69.1688"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node25" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node25"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M801.0859,-728C801.0859,-728 763.4419,-728 763.4419,-728 757.4419,-728 751.4419,-722 751.4419,-716 751.4419,-716 751.4419,-704 751.4419,-704 751.4419,-698 757.4419,-692 763.4419,-692 763.4419,-692 801.0859,-692 801.0859,-692 807.0859,-692 813.0859,-698 813.0859,-704 813.0859,-704 813.0859,-716 813.0859,-716 813.0859,-722 807.0859,-728 801.0859,-728"/>
<text text-anchor="middle" x="782.2639" y="-705.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge7"><a xlink:title="at key_certificate.go:359: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:390: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M608.0144,-467.1285C635.6455,-478.7776 666.8151,-496.7453 685.6692,-523 727.0128,-580.5718 669.7935,-624.3338 713.6692,-680 720.8151,-689.0662 731.2586,-695.4525 741.8517,-699.9272"/>
<polygon fill="#8b4513" stroke="#8b4513" points="740.9387,-703.3216 751.5317,-703.5212 743.3753,-696.7593 740.9387,-703.3216"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Println -->
<g id="node26" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Println</title>
<g id="a_node26"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Println | defined in logger.go:315">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M801.379,-667C801.379,-667 763.1488,-667 763.1488,-667 757.1488,-667 751.1488,-661 751.1488,-655 751.1488,-655 751.1488,-643 751.1488,-643 751.1488,-637 757.1488,-631 763.1488,-631 763.1488,-631 801.379,-631 801.379,-631 807.379,-631 813.379,-637 813.379,-643 813.379,-643 813.379,-655 813.379,-655 813.379,-661 807.379,-667 801.379,-667"/>
<text text-anchor="middle" x="782.2639" y="-644.8" font-family="Verdana" font-size="14.00" fill="#000000">Println</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Println -->
<g id="edge41" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate&#45;&gt;(*github.com/sirupsen/logrus.Logger).Println</title>
<g id="a_edge41"><a xlink:title="at key_certificate.go:375: calling [(*github.com/sirupsen/logrus.Logger).Println]&#10;at key_certificate.go:384: calling [(*github.com/sirupsen/logrus.Logger).Println]">
<path fill="none" stroke="#8b4513" d="M617.3375,-459.196C641.6536,-465.9746 667.5961,-477.2504 685.6692,-496 715.0362,-526.4663 690.935,-551.31 713.6692,-587 722.7246,-601.2159 735.8913,-614.2005 748.2734,-624.5723"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.2634,-627.4475 756.2458,-630.9974 750.6559,-621.9972 746.2634,-627.4475"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeySize -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeySize</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeySize | defined in key_certificate.go:200&#10;at key_certificate.go:204: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:207: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:202: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M614.0291,-353C614.0291,-353 487.4971,-353 487.4971,-353 481.4971,-353 475.4971,-347 475.4971,-341 475.4971,-341 475.4971,-329 475.4971,-329 475.4971,-323 481.4971,-317 487.4971,-317 487.4971,-317 614.0291,-317 614.0291,-317 620.0291,-317 626.0291,-323 626.0291,-329 626.0291,-329 626.0291,-341 626.0291,-341 626.0291,-347 620.0291,-353 614.0291,-353"/>
<text text-anchor="middle" x="550.7631" y="-330.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeySize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeySize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge30" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeySize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge30"><a xlink:title="at key_certificate.go:202: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M626.1223,-327.7603C646.9134,-329.1617 668.4617,-334.113 685.6692,-346 709.5504,-362.4972 696.3476,-381.7099 713.6692,-405 723.8851,-418.736 737.4928,-431.7867 749.8938,-442.3396"/>
<polygon fill="#8b4513" stroke="#8b4513" points="747.8843,-445.2196 757.821,-448.8957 752.3456,-439.8254 747.8843,-445.2196"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeySize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeySize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge1"><a xlink:title="at key_certificate.go:204: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:207: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M626.4778,-344.9103C634.4325,-347.9727 642.0263,-351.9207 648.6692,-357 676.6236,-378.3746 675.3293,-393.3636 685.6692,-427 702.2899,-481.0685 680.1447,-634.4395 713.6692,-680 720.6402,-689.4738 731.254,-695.9984 742.0641,-700.4751"/>
<polygon fill="#8b4513" stroke="#8b4513" points="740.9336,-703.7881 751.5278,-703.9046 743.3186,-697.2069 740.9336,-703.7881"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoPublicKeySize -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoPublicKeySize</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoPublicKeySize | defined in key_certificate.go:192&#10;at key_certificate.go:195: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:195: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M611.8529,-292C611.8529,-292 489.6733,-292 489.6733,-292 483.6733,-292 477.6733,-286 477.6733,-280 477.6733,-280 477.6733,-268 477.6733,-268 477.6733,-262 483.6733,-256 489.6733,-256 489.6733,-256 611.8529,-256 611.8529,-256 617.8529,-256 623.8529,-262 623.8529,-268 623.8529,-268 623.8529,-280 623.8529,-280 623.8529,-286 617.8529,-292 611.8529,-292"/>
<text text-anchor="middle" x="550.7631" y="-269.8" font-family="Verdana" font-size="14.00" fill="#000000">CryptoPublicKeySize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoPublicKeySize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge44" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoPublicKeySize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge44"><a xlink:title="at key_certificate.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:195: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M623.5513,-292.0171C632.2882,-295.4121 640.8673,-299.3812 648.6692,-304 668.4127,-315.6882 672.6589,-321.1016 685.6692,-340 703.5059,-365.9091 695.3593,-379.423 713.6692,-405 723.5571,-418.8123 736.991,-431.7994 749.3499,-442.2835"/>
<polygon fill="#8b4513" stroke="#8b4513" points="747.3212,-445.1467 757.2681,-448.7951 751.7674,-439.7401 747.3212,-445.1467"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoPublicKeySize&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge25" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoPublicKeySize&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge25"><a xlink:title="at key_certificate.go:195: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M623.9315,-267.2276C633.1192,-263.7449 641.7156,-258.843 648.6692,-252 697.2274,-204.2142 644.8289,-158.2642 684.6692,-103 699.463,-82.4789 723.4952,-67.3355 744.0091,-57.2699"/>
<polygon fill="#8b4513" stroke="#8b4513" points="745.5639,-60.4067 753.1411,-53.0015 742.5998,-54.0653 745.5639,-60.4067"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes | defined in certificate.go:76">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M810.8094,-181C810.8094,-181 753.7184,-181 753.7184,-181 747.7184,-181 741.7184,-175 741.7184,-169 741.7184,-169 741.7184,-157 741.7184,-157 741.7184,-151 747.7184,-145 753.7184,-145 753.7184,-145 810.8094,-145 810.8094,-145 816.8094,-145 822.8094,-151 822.8094,-157 822.8094,-157 822.8094,-169 822.8094,-169 822.8094,-175 816.8094,-181 810.8094,-181"/>
<text text-anchor="middle" x="782.2639" y="-158.8" font-family="Verdana" font-size="14.00" fill="#000000">RawBytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="node12" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_node12"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType | defined in key_certificate.go:126&#10;at key_certificate.go:130: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:127: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:131: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:128: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M594.63,-754C594.63,-754 506.8962,-754 506.8962,-754 500.8962,-754 494.8962,-748 494.8962,-742 494.8962,-742 494.8962,-730 494.8962,-730 494.8962,-724 500.8962,-718 506.8962,-718 506.8962,-718 594.63,-718 594.63,-718 600.63,-718 606.63,-724 606.63,-730 606.63,-730 606.63,-742 606.63,-742 606.63,-748 600.63,-754 594.63,-754"/>
<text text-anchor="middle" x="550.7631" y="-731.8" font-family="Verdana" font-size="14.00" fill="#000000">PublicKeyType</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge34" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge34"><a xlink:title="at key_certificate.go:127: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:131: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M606.7302,-733.7508C621.9358,-730.5924 637.3171,-724.6885 648.6692,-714 667.6152,-696.1615 695.5386,-507.6666 713.6692,-489 722.0261,-480.3961 733.7487,-475.1511 745.1423,-471.9559"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.0444,-475.3393 754.9774,-469.6427 744.4417,-468.5253 746.0444,-475.3393"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge35" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge35"><a xlink:title="at key_certificate.go:128: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M606.7643,-744.3549C621.8819,-748.9358 637.2075,-756.0262 648.6692,-767 679.086,-796.1222 684.8324,-914.3125 713.6692,-945 718.3338,-949.964 723.9632,-954.1528 729.9669,-957.6758"/>
<polygon fill="#8b4513" stroke="#8b4513" points="728.4779,-960.8467 738.9621,-962.3737 731.7185,-954.6419 728.4779,-960.8467"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge3" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge3"><a xlink:title="at key_certificate.go:130: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M606.803,-729.7061C648.3902,-725.0354 704.1382,-718.7743 741.5335,-714.5745"/>
<polygon fill="#8b4513" stroke="#8b4513" points="742.0203,-718.0419 751.5672,-713.4476 741.239,-711.0856 742.0203,-718.0419"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="node13" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_node13"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize | defined in key_certificate.go:336&#10;at key_certificate.go:346: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:344: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at key_certificate.go:349: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M360.4692,-761C360.4692,-761 297.4888,-761 297.4888,-761 291.4888,-761 285.4888,-755 285.4888,-749 285.4888,-749 285.4888,-737 285.4888,-737 285.4888,-731 291.4888,-725 297.4888,-725 297.4888,-725 360.4692,-725 360.4692,-725 366.4692,-725 372.4692,-731 372.4692,-737 372.4692,-737 372.4692,-749 372.4692,-749 372.4692,-755 366.4692,-761 360.4692,-761"/>
<text text-anchor="middle" x="328.979" y="-738.8" font-family="Verdana" font-size="14.00" fill="#000000">CryptoSize</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge26" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge26"><a xlink:title="at key_certificate.go:344: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#000000" d="M372.5318,-741.6254C404.4727,-740.6173 448.4095,-739.2305 484.6665,-738.0862"/>
<polygon fill="#000000" stroke="#000000" points="484.7882,-741.5842 494.6728,-737.7703 484.5673,-734.5876 484.7882,-741.5842"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge12" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge12"><a xlink:title="at key_certificate.go:346: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M346.4945,-761.0027C356.8121,-772.0681 369.7746,-786.8029 379.857,-801 418.0007,-854.7105 397.529,-894.243 452.857,-930 489.5571,-953.7183 605.4339,-941.6626 648.6692,-948 675.4196,-951.921 704.9037,-957.7204 729.3527,-962.9404"/>
<polygon fill="#8b4513" stroke="#8b4513" points="728.6374,-966.3666 739.1512,-965.0586 730.1165,-959.5246 728.6374,-966.3666"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge36" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge36"><a xlink:title="at key_certificate.go:349: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M347.5885,-761.255C370.2541,-782.0829 410.7552,-814.9446 452.857,-828 494.4185,-840.8878 607.9716,-843.3999 648.6692,-828 696.8757,-809.7587 738.9054,-765.3036 762.3897,-736.4668"/>
<polygon fill="#8b4513" stroke="#8b4513" points="765.302,-738.4281 768.7903,-728.4239 759.8247,-734.0692 765.302,-738.4281"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey -->
<g id="node14" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey</title>
<g id="a_node14"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey | defined in key_certificate.go:228&#10;at key_certificate.go:229: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:238: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:298: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:244: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:301: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:232: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]&#10;at key_certificate.go:243: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at key_certificate.go:231: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:252: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:257: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:262: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:291: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:296: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:300: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at key_certificate.go:237: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M193.1515,-849C193.1515,-849 35.9495,-849 35.9495,-849 29.9495,-849 23.9495,-843 23.9495,-837 23.9495,-837 23.9495,-825 23.9495,-825 23.9495,-819 29.9495,-813 35.9495,-813 35.9495,-813 193.1515,-813 193.1515,-813 199.1515,-813 205.1515,-819 205.1515,-825 205.1515,-825 205.1515,-837 205.1515,-837 205.1515,-843 199.1515,-849 193.1515,-849"/>
<text text-anchor="middle" x="114.5505" y="-826.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructSigningPublicKey</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="node15" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_node15"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType | defined in key_certificate.go:117&#10;at key_certificate.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:118: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:122: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M616.6943,-815C616.6943,-815 484.8319,-815 484.8319,-815 478.8319,-815 472.8319,-809 472.8319,-803 472.8319,-803 472.8319,-791 472.8319,-791 472.8319,-785 478.8319,-779 484.8319,-779 484.8319,-779 616.6943,-779 616.6943,-779 622.6943,-779 628.6943,-785 628.6943,-791 628.6943,-791 628.6943,-803 628.6943,-803 628.6943,-809 622.6943,-815 616.6943,-815"/>
<text text-anchor="middle" x="550.7631" y="-792.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeyType</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge20" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge20"><a xlink:title="at key_certificate.go:232: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#000000" d="M197.7932,-812.9606C223.4241,-808.1553 251.8137,-803.5855 278.101,-801 339.6255,-794.9487 409.329,-794.03 462.8589,-794.5823"/>
<polygon fill="#000000" stroke="#000000" points="462.9586,-798.0837 473.0007,-794.7065 463.0443,-791.0843 462.9586,-798.0837"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="node16" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_node16"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize | defined in key_certificate.go:308&#10;at key_certificate.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:328: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:331: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:325: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at key_certificate.go:320: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M367.7353,-849C367.7353,-849 290.2227,-849 290.2227,-849 284.2227,-849 278.2227,-843 278.2227,-837 278.2227,-837 278.2227,-825 278.2227,-825 278.2227,-819 284.2227,-813 290.2227,-813 290.2227,-813 367.7353,-813 367.7353,-813 373.7353,-813 379.7353,-819 379.7353,-825 379.7353,-825 379.7353,-837 379.7353,-837 379.7353,-843 373.7353,-849 367.7353,-849"/>
<text text-anchor="middle" x="328.979" y="-826.8" font-family="Verdana" font-size="14.00" fill="#000000">SignatureSize</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge45" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge45"><a xlink:title="at key_certificate.go:237: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#000000" d="M205.1767,-831C226.2984,-831 248.3003,-831 267.7957,-831"/>
<polygon fill="#000000" stroke="#000000" points="268.0446,-834.5001 278.0446,-831 268.0445,-827.5001 268.0446,-834.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge15" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge15"><a xlink:title="at key_certificate.go:229: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:238: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:298: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M118.5692,-849.2182C129.3884,-893.2937 163.7032,-1005.3339 241.101,-1050 293.2596,-1080.1006 575.9932,-1039.4441 648.6692,-1023 676.4682,-1016.71 706.4147,-1006.3072 730.8952,-996.7912"/>
<polygon fill="#8b4513" stroke="#8b4513" points="732.3232,-999.9904 740.3373,-993.0603 729.7507,-993.4802 732.3232,-999.9904"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node21" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node21"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M797.8538,-1054C797.8538,-1054 766.674,-1054 766.674,-1054 760.674,-1054 754.674,-1048 754.674,-1042 754.674,-1042 754.674,-1030 754.674,-1030 754.674,-1024 760.674,-1018 766.674,-1018 766.674,-1018 797.8538,-1018 797.8538,-1018 803.8538,-1018 809.8538,-1024 809.8538,-1030 809.8538,-1030 809.8538,-1042 809.8538,-1042 809.8538,-1048 803.8538,-1054 797.8538,-1054"/>
<text text-anchor="middle" x="782.2639" y="-1031.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge39" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge39"><a xlink:title="at key_certificate.go:300: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M118.4401,-849.3285C133.2306,-913.4733 192.1929,-1124 328.979,-1124 328.979,-1124 328.979,-1124 550.7631,-1124 611.3767,-1124 633.5278,-1134.9076 685.6692,-1104 703.4092,-1093.4844 697.5527,-1079.8663 713.6692,-1067 722.9902,-1059.5587 734.3834,-1053.4832 745.1866,-1048.7454"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.5479,-1051.97 754.4615,-1044.9254 743.8821,-1045.4974 746.5479,-1051.97"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge28" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge28"><a xlink:title="at key_certificate.go:243: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M116.7688,-849.1677C126.5897,-920.5655 172.8269,-1178 328.979,-1178 328.979,-1178 328.979,-1178 550.7631,-1178 611.3767,-1178 628.8398,-1179.0813 685.6692,-1158 709.1608,-1149.2856 732.9896,-1134.3176 751.1023,-1121.3899"/>
<polygon fill="#8b4513" stroke="#8b4513" points="753.5016,-1123.9714 759.5083,-1115.2438 749.37,-1118.3207 753.5016,-1123.9714"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge16" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge16"><a xlink:title="at key_certificate.go:244: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:301: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M188.4864,-812.9849C194.5303,-809.6463 200.1905,-805.6894 205.101,-801 244.3417,-763.5259 363.1872,-396.6358 379.857,-345 418.8388,-224.2516 355.7402,-150.6583 452.857,-69 495.7465,-32.9374 664.9335,-36.186 742.7371,-39.7528"/>
<polygon fill="#8b4513" stroke="#8b4513" points="742.9287,-43.2661 753.0863,-40.2541 743.2674,-36.2743 742.9287,-43.2661"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge37" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge37"><a xlink:title="at key_certificate.go:231: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:252: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:257: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:262: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:291: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:296: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M183.2738,-812.8523C190.9459,-809.4994 198.3995,-805.576 205.101,-801 272.6219,-754.8945 247.2184,-665 328.979,-665 328.979,-665 328.979,-665 550.7631,-665 618.7083,-665 695.8439,-683.9096 741.7032,-697.213"/>
<polygon fill="#8b4513" stroke="#8b4513" points="740.9721,-700.6465 751.5541,-700.1246 742.9563,-693.9336 740.9721,-700.6465"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge38" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge38"><a xlink:title="at key_certificate.go:118: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]&#10;at key_certificate.go:122: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M628.5731,-781.8689C636.0538,-777.9789 642.9641,-773.1046 648.6692,-767 670.3287,-743.8235 692.1612,-512.3171 713.6692,-489 721.8671,-480.1125 733.6563,-474.8001 745.155,-471.6301"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.1189,-475.0001 755.0875,-469.3598 744.559,-468.1761 746.1189,-475.0001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge13" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge13"><a xlink:title="at key_certificate.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M628.5066,-807.6321C635.7301,-810.5883 642.6032,-814.3136 648.6692,-819 698.5341,-857.5235 667.7104,-901.8914 713.6692,-945 718.3974,-949.435 723.8869,-953.2806 729.6616,-956.5982"/>
<polygon fill="#8b4513" stroke="#8b4513" points="728.4132,-959.8932 738.9024,-961.3856 731.6333,-953.6777 728.4132,-959.8932"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge27" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge27"><a xlink:title="at key_certificate.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M613.2444,-778.9379C625.0842,-775.2101 637.3146,-771.1487 648.6692,-767 680.6272,-755.3233 716.0099,-740.1208 742.3292,-728.3529"/>
<polygon fill="#8b4513" stroke="#8b4513" points="743.9088,-731.4802 751.5926,-724.1857 741.037,-725.0964 743.9088,-731.4802"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge21" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge21"><a xlink:title="at key_certificate.go:320: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#000000" d="M379.8608,-823.1997C404.3492,-819.4456 434.4248,-814.8349 462.4833,-810.5335"/>
<polygon fill="#000000" stroke="#000000" points="463.3612,-813.9399 472.7153,-808.9649 462.3004,-807.0207 463.3612,-813.9399"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge4" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge4"><a xlink:title="at key_certificate.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:328: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M337.3869,-849.4037C350.2347,-875.1382 377.3787,-921.066 415.857,-942 468.4752,-970.6268 640.6954,-975.0199 729.0023,-975.3231"/>
<polygon fill="#8b4513" stroke="#8b4513" points="729.078,-978.8231 739.0842,-975.3411 729.0906,-971.8231 729.078,-978.8231"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge9" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge9"><a xlink:title="at key_certificate.go:325: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M337.6858,-849.207C354.502,-881.8135 394.9664,-948.837 452.857,-971 553.9783,-1009.7135 681.7839,-1026.4682 744.3094,-1032.7482"/>
<polygon fill="#8b4513" stroke="#8b4513" points="744.1966,-1036.2536 754.4877,-1033.7352 744.8722,-1029.2863 744.1966,-1036.2536"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge5" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge5"><a xlink:title="at key_certificate.go:331: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M345.9179,-812.7799C376.7302,-779.8089 439.9661,-712.9929 452.857,-706 545.7216,-655.6239 585.824,-623.4672 685.6692,-658 700.6261,-663.173 700.0878,-671.875 713.6692,-680 722.5368,-685.305 732.5121,-690.2083 742.0518,-694.4478"/>
<polygon fill="#8b4513" stroke="#8b4513" points="740.8194,-697.7275 751.3892,-698.4562 743.5808,-691.2952 740.8194,-697.7275"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data -->
<g id="node17" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data</title>
<g id="a_node17"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data | defined in key_certificate.go:108&#10;at key_certificate.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes]&#10;at key_certificate.go:113: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M129.5505,-727C129.5505,-727 99.5505,-727 99.5505,-727 93.5505,-727 87.5505,-721 87.5505,-715 87.5505,-715 87.5505,-703 87.5505,-703 87.5505,-697 93.5505,-691 99.5505,-691 99.5505,-691 129.5505,-691 129.5505,-691 135.5505,-691 141.5505,-697 141.5505,-703 141.5505,-703 141.5505,-715 141.5505,-715 141.5505,-721 135.5505,-727 129.5505,-727"/>
<text text-anchor="middle" x="114.5505" y="-704.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes -->
<g id="edge32" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes</title>
<g id="a_edge32"><a xlink:title="at key_certificate.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes]&#10;at key_certificate.go:113: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).RawBytes]">
<path fill="none" stroke="#8b4513" d="M117.0761,-690.8816C131.31,-592.3087 205.3107,-125 328.979,-125 328.979,-125 328.979,-125 550.7631,-125 610.7625,-125 626.673,-119.074 685.6692,-130 701.1069,-132.859 717.4281,-137.6914 732.1725,-142.7889"/>
<polygon fill="#8b4513" stroke="#8b4513" points="731.0142,-146.0917 741.6088,-146.1589 733.3685,-139.4995 731.0142,-146.0917"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge29" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge29"><a xlink:title="at key_certificate.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M141.8093,-698.389C227.1967,-667.1 493.0496,-584.742 648.6692,-706 692.0855,-739.8298 677.7075,-903.3324 713.6692,-945 718.1768,-950.2229 723.7641,-954.5696 729.7894,-958.179"/>
<polygon fill="#8b4513" stroke="#8b4513" points="728.3774,-961.391 738.856,-962.9557 731.6402,-955.198 728.3774,-961.391"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge17" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).Data&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge17"><a xlink:title="at key_certificate.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M117.8274,-690.8317C127.6076,-642.8423 161.0928,-516.779 242.101,-523 320.4611,-529.0177 353.1014,-504.0462 416.857,-550 445.2374,-570.4561 424.5638,-599.4234 452.857,-620 537.6464,-681.6642 589.68,-615.8363 685.6692,-658 700.1592,-664.3648 700.0878,-671.875 713.6692,-680 722.5368,-685.305 732.5121,-690.2083 742.0518,-694.4478"/>
<polygon fill="#8b4513" stroke="#8b4513" points="740.8194,-697.7275 751.3892,-698.4562 743.5808,-691.2952 740.8194,-697.7275"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey -->
<g id="node18" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey</title>
<g id="a_node18"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey | defined in key_certificate.go:136&#10;at key_certificate.go:145: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]&#10;at key_certificate.go:140: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at key_certificate.go:152: calling [github.com/samber/oops.Errorf]&#10;at key_certificate.go:139: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:160: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:165: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:137: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:167: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:169: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at key_certificate.go:151: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M171.0885,-788C171.0885,-788 58.0125,-788 58.0125,-788 52.0125,-788 46.0125,-782 46.0125,-776 46.0125,-776 46.0125,-764 46.0125,-764 46.0125,-758 52.0125,-752 58.0125,-752 58.0125,-752 171.0885,-752 171.0885,-752 177.0885,-752 183.0885,-758 183.0885,-764 183.0885,-764 183.0885,-776 183.0885,-776 183.0885,-782 177.0885,-788 171.0885,-788"/>
<text text-anchor="middle" x="114.5505" y="-765.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructPublicKey</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge23" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge23"><a xlink:title="at key_certificate.go:140: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#000000" d="M170.2024,-751.8963C181.7625,-748.0422 193.8482,-743.9437 205.101,-740 237.7467,-728.5587 244.0497,-719.0954 278.101,-713 347.986,-700.4902 429.1994,-710.4248 484.6977,-720.8619"/>
<polygon fill="#000000" stroke="#000000" points="484.2693,-724.344 494.7527,-722.8113 485.6017,-717.4719 484.2693,-724.344"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge2" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge2"><a xlink:title="at key_certificate.go:145: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#000000" d="M183.2818,-761.3456C213.0663,-757.5953 247.4193,-753.2697 275.285,-749.7609"/>
<polygon fill="#000000" stroke="#000000" points="275.7529,-753.2298 285.2373,-748.5078 274.8783,-746.2846 275.7529,-753.2298"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge42" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge42"><a xlink:title="at key_certificate.go:137: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at key_certificate.go:167: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M183.1676,-787.4351C191.0308,-791.1414 198.5596,-795.6126 205.101,-801 290.2285,-871.1102 218.697,-1016 328.979,-1016 328.979,-1016 328.979,-1016 416.357,-1016 528.1574,-1016 657.9844,-996.8629 729.0229,-984.7375"/>
<polygon fill="#8b4513" stroke="#8b4513" points="729.8099,-988.1535 739.0682,-983.0025 728.6184,-981.2557 729.8099,-988.1535"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge43" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge43"><a xlink:title="at key_certificate.go:169: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M183.307,-785.8274C191.335,-789.8041 198.8682,-794.7783 205.101,-801 290.6154,-886.3624 208.1508,-1043 328.979,-1043 328.979,-1043 328.979,-1043 416.357,-1043 536.0736,-1043 677.7823,-1039.208 744.2573,-1037.2059"/>
<polygon fill="#8b4513" stroke="#8b4513" points="744.3766,-1040.704 754.2653,-1036.9008 744.1632,-1033.7072 744.3766,-1040.704"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge50" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge50"><a xlink:title="at key_certificate.go:151: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M183.536,-785.6024C191.5276,-789.6149 198.9896,-794.659 205.101,-801 283.0612,-881.8891 191.6193,-971.294 278.101,-1043 416.2685,-1157.5612 654.1578,-1123.8913 745.2764,-1105.4381"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.0678,-1108.8485 755.1433,-1103.3818 744.6395,-1101.9957 746.0678,-1108.8485"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge24" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge24"><a xlink:title="at key_certificate.go:152: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M183.4608,-755.1362C191.4643,-751.2157 198.9497,-746.2612 205.101,-740 232.6701,-711.9383 386.4848,-90.1684 415.857,-64 507.6548,17.7849 669.1882,-11.2044 743.214,-30.4542"/>
<polygon fill="#8b4513" stroke="#8b4513" points="742.4971,-33.8855 753.0622,-33.0932 744.309,-27.124 742.4971,-33.8855"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge31" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge31"><a xlink:title="at key_certificate.go:139: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:160: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at key_certificate.go:165: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M183.2792,-754.2546C191.2158,-750.4772 198.7329,-745.7973 205.101,-740 234.5333,-713.2056 216.1718,-689.028 241.101,-658 301.5132,-582.8082 319.9027,-530 416.357,-530 416.357,-530 416.357,-530 550.7631,-530 631.6027,-530 627.0905,-596.2902 685.6692,-652 698.422,-664.1282 699.1325,-670.0796 713.6692,-680 722.285,-685.8797 732.2397,-691.0212 741.8472,-695.3094"/>
<polygon fill="#8b4513" stroke="#8b4513" points="740.7038,-698.6262 751.2766,-699.309 743.4373,-692.1819 740.7038,-698.6262"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 83 KiB

View File

@ -20,7 +20,10 @@ Sizes of various KeysAndCert structures and requirements
```go
type KeysAndCert struct {
KeyCertificate *KeyCertificate
KeyCertificate *KeyCertificate
ReceivingPublic crypto.RecievingPublicKey
Padding []byte
SigningPublic crypto.SigningPublicKey
}
```
@ -28,6 +31,20 @@ KeysAndCert is the represenation of an I2P KeysAndCert.
https://geti2p.net/spec/common-structures#keysandcert
#### func NewKeysAndCert
```go
func NewKeysAndCert(
keyCertificate *KeyCertificate,
publicKey crypto.RecievingPublicKey,
padding []byte,
signingPublicKey crypto.SigningPublicKey,
) (*KeysAndCert, error)
```
NewKeysAndCert creates a new KeysAndCert instance with the provided parameters.
It validates the sizes of the provided keys and padding before assembling the
struct.
#### func ReadKeysAndCert
```go
@ -36,12 +53,18 @@ func ReadKeysAndCert(data []byte) (keys_and_cert KeysAndCert, remainder []byte,
ReadKeysAndCert creates a new *KeysAndCert from []byte using ReadKeysAndCert.
Returns a pointer to KeysAndCert unlike ReadKeysAndCert.
#### func ReadKeysAndCertElgAndEd25519
```go
func ReadKeysAndCertElgAndEd25519(data []byte) (keysAndCert *KeysAndCert, remainder []byte, err error)
```
#### func (KeysAndCert) Bytes
```go
func (keys_and_cert KeysAndCert) Bytes() []byte
```
Bytes returns the entire KeyCertificate in []byte form, trims payload to
Bytes returns the entire keyCertificate in []byte form, trims payload to
specified length.
#### func (*KeysAndCert) Certificate
@ -54,13 +77,149 @@ Certfificate returns the certificate.
#### func (*KeysAndCert) PublicKey
```go
func (keys_and_cert *KeysAndCert) PublicKey() (key crypto.PublicKey)
func (keys_and_cert *KeysAndCert) PublicKey() (key crypto.RecievingPublicKey)
```
PublicKey returns the public key as a crypto.PublicKey.
publicKey returns the public key as a crypto.publicKey.
#### func (*KeysAndCert) SigningPublicKey
```go
func (keys_and_cert *KeysAndCert) SigningPublicKey() (signing_public_key crypto.SigningPublicKey)
```
SigningPublicKey returns the signing public key.
signingPublicKey returns the signing public key.
#### type PrivateKeysAndCert
```go
type PrivateKeysAndCert struct {
KeysAndCert
PK_KEY crypto.PrivateKey
SPK_KEY crypto.PrivateKey
}
```
PrivateKeysAndCert contains a KeysAndCert along with the corresponding private
keys for the Public Key and the Signing Public Key
#### func NewPrivateKeysAndCert
```go
func NewPrivateKeysAndCert() (*PrivateKeysAndCert, error)
```
# keys_and_cert
--
import "github.com/go-i2p/go-i2p/lib/common/keys_and_cert"
Package keys_and_cert implements the I2P KeysAndCert common data structure
![keys_and_cert.svg](keys_and_cert)
## Usage
```go
const (
KEYS_AND_CERT_PUBKEY_SIZE = 256
KEYS_AND_CERT_SPK_SIZE = 128
KEYS_AND_CERT_MIN_SIZE = 387
KEYS_AND_CERT_DATA_SIZE = 384
)
```
Sizes of various KeysAndCert structures and requirements
#### type KeysAndCert
```go
type KeysAndCert struct {
KeyCertificate *KeyCertificate
ReceivingPublic crypto.RecievingPublicKey
Padding []byte
SigningPublic crypto.SigningPublicKey
}
```
KeysAndCert is the represenation of an I2P KeysAndCert.
https://geti2p.net/spec/common-structures#keysandcert
#### func NewKeysAndCert
```go
func NewKeysAndCert(
keyCertificate *KeyCertificate,
publicKey crypto.RecievingPublicKey,
padding []byte,
signingPublicKey crypto.SigningPublicKey,
) (*KeysAndCert, error)
```
NewKeysAndCert creates a new KeysAndCert instance with the provided parameters.
It validates the sizes of the provided keys and padding before assembling the
struct.
#### func ReadKeysAndCert
```go
func ReadKeysAndCert(data []byte) (keys_and_cert KeysAndCert, remainder []byte, err error)
```
ReadKeysAndCert creates a new *KeysAndCert from []byte using ReadKeysAndCert.
Returns a pointer to KeysAndCert unlike ReadKeysAndCert.
#### func ReadKeysAndCertElgAndEd25519
```go
func ReadKeysAndCertElgAndEd25519(data []byte) (keysAndCert *KeysAndCert, remainder []byte, err error)
```
#### func (KeysAndCert) Bytes
```go
func (keys_and_cert KeysAndCert) Bytes() []byte
```
Bytes returns the entire keyCertificate in []byte form, trims payload to
specified length.
#### func (*KeysAndCert) Certificate
```go
func (keys_and_cert *KeysAndCert) Certificate() (cert Certificate)
```
Certfificate returns the certificate.
#### func (*KeysAndCert) PublicKey
```go
func (keys_and_cert *KeysAndCert) PublicKey() (key crypto.RecievingPublicKey)
```
publicKey returns the public key as a crypto.publicKey.
#### func (*KeysAndCert) SigningPublicKey
```go
func (keys_and_cert *KeysAndCert) SigningPublicKey() (signing_public_key crypto.SigningPublicKey)
```
signingPublicKey returns the signing public key.
#### type PrivateKeysAndCert
```go
type PrivateKeysAndCert struct {
KeysAndCert
PK_KEY crypto.PrivateKey
SPK_KEY crypto.PrivateKey
}
```
PrivateKeysAndCert contains a KeysAndCert along with the corresponding private
keys for the Public Key and the Signing Public Key
#### func NewPrivateKeysAndCert
```go
func NewPrivateKeysAndCert() (*PrivateKeysAndCert, error)
```
keys_and_cert
github.com/go-i2p/go-i2p/lib/common/keys_and_cert

View File

@ -0,0 +1,557 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="526pt" height="1172pt"
viewBox="0.00 0.00 525.94 1172.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1172)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1172 525.944,-1172 525.944,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1164 517.944,-1164 517.944,-8 8,-8"/>
<text text-anchor="middle" x="262.972" y="-1143.8" font-family="Arial" font-size="18.00" fill="#000000">keys_and_cert</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="356.7329,-398 356.7329,-519 450.0541,-519 450.0541,-398 356.7329,-398"/>
<text text-anchor="middle" x="403.3935" y="-500.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M376.7329,-406C376.7329,-406 430.0541,-406 430.0541,-406 436.0541,-406 442.0541,-412 442.0541,-418 442.0541,-418 442.0541,-472 442.0541,-472 442.0541,-478 436.0541,-484 430.0541,-484 430.0541,-484 376.7329,-484 376.7329,-484 370.7329,-484 364.7329,-478 364.7329,-472 364.7329,-472 364.7329,-418 364.7329,-418 364.7329,-412 370.7329,-406 376.7329,-406"/>
<text text-anchor="middle" x="403.3935" y="-414.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="366.296,-16 366.296,-95 440.491,-95 440.491,-16 366.296,-16"/>
<text text-anchor="middle" x="403.3935" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="334.7988,-103 334.7988,-390 471.9882,-390 471.9882,-103 334.7988,-103"/>
<text text-anchor="middle" x="403.3935" y="-371.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M364.2841,-155C364.2841,-155 442.5029,-155 442.5029,-155 448.5029,-155 454.5029,-161 454.5029,-167 454.5029,-167 454.5029,-343 454.5029,-343 454.5029,-349 448.5029,-355 442.5029,-355 442.5029,-355 364.2841,-355 364.2841,-355 358.2841,-355 352.2841,-349 352.2841,-343 352.2841,-343 352.2841,-167 352.2841,-167 352.2841,-161 358.2841,-155 364.2841,-155"/>
<text text-anchor="middle" x="403.3935" y="-163.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust6"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M82.9783,-593C82.9783,-593 172.8647,-593 172.8647,-593 178.8647,-593 184.8647,-599 184.8647,-605 184.8647,-605 184.8647,-659 184.8647,-659 184.8647,-665 178.8647,-671 172.8647,-671 172.8647,-671 82.9783,-671 82.9783,-671 76.9783,-671 70.9783,-665 70.9783,-659 70.9783,-659 70.9783,-605 70.9783,-605 70.9783,-599 76.9783,-593 82.9783,-593"/>
<text text-anchor="middle" x="127.9215" y="-601.5" font-family="Arial" font-size="15.00" fill="#222222">(KeysAndCert)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="296.843,-527 296.843,-997 509.944,-997 509.944,-527 296.843,-527"/>
<text text-anchor="middle" x="403.3935" y="-978.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">key_certificate</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M316.843,-579C316.843,-579 489.944,-579 489.944,-579 495.944,-579 501.944,-585 501.944,-591 501.944,-591 501.944,-950 501.944,-950 501.944,-956 495.944,-962 489.944,-962 489.944,-962 316.843,-962 316.843,-962 310.843,-962 304.843,-956 304.843,-950 304.843,-950 304.843,-591 304.843,-591 304.843,-585 310.843,-579 316.843,-579"/>
<text text-anchor="middle" x="403.3935" y="-587.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="347.4503,-1005 347.4503,-1126 459.3367,-1126 459.3367,-1005 347.4503,-1005"/>
<text text-anchor="middle" x="403.3935" y="-1107.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M367.4503,-1013C367.4503,-1013 439.3367,-1013 439.3367,-1013 445.3367,-1013 451.3367,-1019 451.3367,-1025 451.3367,-1025 451.3367,-1079 451.3367,-1079 451.3367,-1085 445.3367,-1091 439.3367,-1091 439.3367,-1091 367.4503,-1091 367.4503,-1091 361.4503,-1091 355.4503,-1085 355.4503,-1079 355.4503,-1079 355.4503,-1025 355.4503,-1025 355.4503,-1019 361.4503,-1013 367.4503,-1013"/>
<text text-anchor="middle" x="403.3935" y="-1021.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142&#10;at keys_and_cert.go:155: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:167: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at keys_and_cert.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:149: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:192: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at keys_and_cert.go:159: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:154: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:184: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey]&#10;at keys_and_cert.go:194: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]&#10;at keys_and_cert.go:170: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey]&#10;at keys_and_cert.go:145: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:197: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:166: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M180.6624,-585C180.6624,-585 75.1806,-585 75.1806,-585 69.1806,-585 63.1806,-579 63.1806,-573 63.1806,-573 63.1806,-561 63.1806,-561 63.1806,-555 69.1806,-549 75.1806,-549 75.1806,-549 180.6624,-549 180.6624,-549 186.6624,-549 192.6624,-555 192.6624,-561 192.6624,-561 192.6624,-573 192.6624,-573 192.6624,-579 186.6624,-585 180.6624,-585"/>
<text text-anchor="middle" x="127.9215" y="-562.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate | defined in key_certificate.go:356">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M457.7212,-571C457.7212,-571 349.0658,-571 349.0658,-571 343.0658,-571 337.0658,-565 337.0658,-559 337.0658,-559 337.0658,-547 337.0658,-547 337.0658,-541 343.0658,-535 349.0658,-535 349.0658,-535 457.7212,-535 457.7212,-535 463.7212,-535 469.7212,-541 469.7212,-547 469.7212,-547 469.7212,-559 469.7212,-559 469.7212,-565 463.7212,-571 457.7212,-571"/>
<text text-anchor="middle" x="403.3935" y="-548.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeyCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_edge15"><a xlink:title="at keys_and_cert.go:159: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]">
<path fill="none" stroke="#8b4513" d="M192.8557,-563.6999C232.9728,-561.6611 284.653,-559.0346 326.7705,-556.8941"/>
<polygon fill="#8b4513" stroke="#8b4513" points="327.1723,-560.3783 336.9817,-556.3752 326.8169,-553.3873 327.1723,-560.3783"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="node9" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_node9"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize | defined in key_certificate.go:336">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M434.8837,-649C434.8837,-649 371.9033,-649 371.9033,-649 365.9033,-649 359.9033,-643 359.9033,-637 359.9033,-637 359.9033,-625 359.9033,-625 359.9033,-619 365.9033,-613 371.9033,-613 371.9033,-613 434.8837,-613 434.8837,-613 440.8837,-613 446.8837,-619 446.8837,-625 446.8837,-625 446.8837,-637 446.8837,-637 446.8837,-643 440.8837,-649 434.8837,-649"/>
<text text-anchor="middle" x="403.3935" y="-626.8" font-family="Verdana" font-size="14.00" fill="#000000">CryptoSize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge30" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge30"><a xlink:title="at keys_and_cert.go:166: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M192.8387,-576.9411C208.427,-580.0984 224.8874,-584.0831 239.843,-589 256.6521,-594.5263 259.0324,-600.4783 275.843,-606 299.5603,-613.7903 326.5989,-619.5163 349.6591,-623.5072"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.1721,-626.9743 359.6115,-625.1661 350.3231,-620.0695 349.1721,-626.9743"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="node10" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_node10"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize | defined in key_certificate.go:308">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M442.1498,-710C442.1498,-710 364.6372,-710 364.6372,-710 358.6372,-710 352.6372,-704 352.6372,-698 352.6372,-698 352.6372,-686 352.6372,-686 352.6372,-680 358.6372,-674 364.6372,-674 364.6372,-674 442.1498,-674 442.1498,-674 448.1498,-674 454.1498,-680 454.1498,-686 454.1498,-686 454.1498,-698 454.1498,-698 454.1498,-704 448.1498,-710 442.1498,-710"/>
<text text-anchor="middle" x="403.3935" y="-687.8" font-family="Verdana" font-size="14.00" fill="#000000">SignatureSize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge5"><a xlink:title="at keys_and_cert.go:167: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M192.7586,-569.2527C209.4646,-572.4954 226.4801,-578.4424 239.843,-589 270.1189,-612.9199 245.4704,-644.203 275.843,-668 294.6154,-682.7083 319.6671,-689.357 342.5974,-692.0964"/>
<polygon fill="#8b4513" stroke="#8b4513" points="342.319,-695.5858 352.6106,-693.0691 342.9959,-688.6185 342.319,-695.5858"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey -->
<g id="node11" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey</title>
<g id="a_node11"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey | defined in key_certificate.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M459.9315,-771C459.9315,-771 346.8555,-771 346.8555,-771 340.8555,-771 334.8555,-765 334.8555,-759 334.8555,-759 334.8555,-747 334.8555,-747 334.8555,-741 340.8555,-735 346.8555,-735 346.8555,-735 459.9315,-735 459.9315,-735 465.9315,-735 471.9315,-741 471.9315,-747 471.9315,-747 471.9315,-759 471.9315,-759 471.9315,-765 465.9315,-771 459.9315,-771"/>
<text text-anchor="middle" x="403.3935" y="-748.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey -->
<g id="edge27" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey</title>
<g id="a_edge27"><a xlink:title="at keys_and_cert.go:170: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey]">
<path fill="none" stroke="#8b4513" d="M192.6869,-568.9229C209.4877,-572.151 226.5693,-578.1731 239.843,-589 289.995,-629.9075 248.0338,-680.4993 296.843,-723 305.0543,-730.15 314.8499,-735.6046 325.1263,-739.764"/>
<polygon fill="#8b4513" stroke="#8b4513" points="324.0732,-743.1052 334.6673,-743.2313 326.4641,-736.5262 324.0732,-743.1052"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey -->
<g id="node12" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey</title>
<g id="a_node12"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey | defined in key_certificate.go:228">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.9945,-832C481.9945,-832 324.7925,-832 324.7925,-832 318.7925,-832 312.7925,-826 312.7925,-820 312.7925,-820 312.7925,-808 312.7925,-808 312.7925,-802 318.7925,-796 324.7925,-796 324.7925,-796 481.9945,-796 481.9945,-796 487.9945,-796 493.9945,-802 493.9945,-808 493.9945,-808 493.9945,-820 493.9945,-820 493.9945,-826 487.9945,-832 481.9945,-832"/>
<text text-anchor="middle" x="403.3935" y="-809.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructSigningPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey -->
<g id="edge23" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey</title>
<g id="a_edge23"><a xlink:title="at keys_and_cert.go:184: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey]">
<path fill="none" stroke="#8b4513" d="M192.9288,-567.8572C209.9273,-571.0452 227.0503,-577.3132 239.843,-589 306.5065,-649.9005 232.6796,-720.4708 296.843,-784 299.0515,-786.1866 301.4061,-788.2167 303.8797,-790.1013"/>
<polygon fill="#8b4513" stroke="#8b4513" points="302.4415,-793.3477 312.7081,-795.9644 306.3141,-787.5165 302.4415,-793.3477"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="node13" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_node13"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType | defined in key_certificate.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M447.2604,-893C447.2604,-893 359.5266,-893 359.5266,-893 353.5266,-893 347.5266,-887 347.5266,-881 347.5266,-881 347.5266,-869 347.5266,-869 347.5266,-863 353.5266,-857 359.5266,-857 359.5266,-857 447.2604,-857 447.2604,-857 453.2604,-857 459.2604,-863 459.2604,-869 459.2604,-869 459.2604,-881 459.2604,-881 459.2604,-887 453.2604,-893 447.2604,-893"/>
<text text-anchor="middle" x="403.3935" y="-870.8" font-family="Verdana" font-size="14.00" fill="#000000">PublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge11"><a xlink:title="at keys_and_cert.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#8b4513" d="M192.9511,-567.1122C210.1518,-570.2538 227.3752,-576.6837 239.843,-589 322.7687,-670.9175 215.6434,-761.3712 296.843,-845 307.7148,-856.1971 322.4116,-863.3091 337.4125,-867.8011"/>
<polygon fill="#8b4513" stroke="#8b4513" points="336.716,-871.2368 347.277,-870.3912 338.4938,-864.4663 336.716,-871.2368"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="node14" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_node14"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType | defined in key_certificate.go:117">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M469.3247,-954C469.3247,-954 337.4623,-954 337.4623,-954 331.4623,-954 325.4623,-948 325.4623,-942 325.4623,-942 325.4623,-930 325.4623,-930 325.4623,-924 331.4623,-918 337.4623,-918 337.4623,-918 469.3247,-918 469.3247,-918 475.3247,-918 481.3247,-924 481.3247,-930 481.3247,-930 481.3247,-942 481.3247,-942 481.3247,-948 475.3247,-954 469.3247,-954"/>
<text text-anchor="middle" x="403.3935" y="-931.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge25"><a xlink:title="at keys_and_cert.go:194: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#8b4513" d="M192.8031,-566.5783C210.208,-569.6698 227.5771,-576.2068 239.843,-589 289.3776,-640.6642 246.8368,-854.7922 296.843,-906 302.4602,-911.7521 309.087,-916.4254 316.2435,-920.2188"/>
<polygon fill="#8b4513" stroke="#8b4513" points="315.0139,-923.5074 325.5555,-924.5683 317.9763,-917.1652 315.0139,-923.5074"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node17" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node17"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M434.6126,-347C434.6126,-347 372.1744,-347 372.1744,-347 366.1744,-347 360.1744,-341 360.1744,-335 360.1744,-335 360.1744,-323 360.1744,-323 360.1744,-317 366.1744,-311 372.1744,-311 372.1744,-311 434.6126,-311 434.6126,-311 440.6126,-311 446.6126,-317 446.6126,-323 446.6126,-323 446.6126,-335 446.6126,-335 446.6126,-341 440.6126,-347 434.6126,-347"/>
<text text-anchor="middle" x="403.3935" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge10"><a xlink:title="at keys_and_cert.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:149: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:192: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M143.0925,-548.9493C177.6643,-507.9211 260.4941,-410.2566 275.843,-398 299.045,-379.4725 327.939,-363.3719 352.3566,-351.3942"/>
<polygon fill="#8b4513" stroke="#8b4513" points="353.9796,-354.4975 361.4746,-347.0091 350.9456,-348.1892 353.9796,-354.4975"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node18" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M418.3935,-225C418.3935,-225 388.3935,-225 388.3935,-225 382.3935,-225 376.3935,-219 376.3935,-213 376.3935,-213 376.3935,-201 376.3935,-201 376.3935,-195 382.3935,-189 388.3935,-189 388.3935,-189 418.3935,-189 418.3935,-189 424.3935,-189 430.3935,-195 430.3935,-201 430.3935,-201 430.3935,-213 430.3935,-213 430.3935,-219 424.3935,-225 418.3935,-225"/>
<text text-anchor="middle" x="403.3935" y="-202.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge22" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge22"><a xlink:title="at keys_and_cert.go:154: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M147.8545,-548.989C172.8298,-525.3752 215.3212,-481.5712 239.843,-436 283.2355,-355.3596 232.1821,-302.844 296.843,-238 315.0099,-219.7817 343.219,-212.1349 366.049,-208.9879"/>
<polygon fill="#8b4513" stroke="#8b4513" points="366.5675,-212.4515 376.1045,-207.8368 365.7713,-205.4969 366.5675,-212.4515"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node19" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node19"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M431.925,-286C431.925,-286 374.862,-286 374.862,-286 368.862,-286 362.862,-280 362.862,-274 362.862,-274 362.862,-262 362.862,-262 362.862,-256 368.862,-250 374.862,-250 374.862,-250 431.925,-250 431.925,-250 437.925,-250 443.925,-256 443.925,-262 443.925,-262 443.925,-274 443.925,-274 443.925,-280 437.925,-286 431.925,-286"/>
<text text-anchor="middle" x="403.3935" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge16"><a xlink:title="at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M146.6319,-548.9412C170.6912,-524.934 212.6089,-480.3555 239.843,-436 274.3499,-379.7994 247.692,-342.9706 296.843,-299 312.1879,-285.2724 333.2902,-277.6038 352.6686,-273.3278"/>
<polygon fill="#8b4513" stroke="#8b4513" points="353.462,-276.7391 362.6055,-271.3868 352.12,-269.8689 353.462,-276.7391"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node20" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node20"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M420.5888,-60C420.5888,-60 386.1982,-60 386.1982,-60 380.1982,-60 374.1982,-54 374.1982,-48 374.1982,-48 374.1982,-36 374.1982,-36 374.1982,-30 380.1982,-24 386.1982,-24 386.1982,-24 420.5888,-24 420.5888,-24 426.5888,-24 432.5888,-30 432.5888,-36 432.5888,-36 432.5888,-48 432.5888,-48 432.5888,-54 426.5888,-60 420.5888,-60"/>
<text text-anchor="middle" x="403.3935" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge3"><a xlink:title="at keys_and_cert.go:155: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M149.5872,-548.5934C175.5357,-525.2285 218.2036,-482.349 239.843,-436 304.4764,-297.5632 206.779,-220.4127 296.843,-97 313.1644,-74.6351 341.2862,-60.6635 364.5417,-52.4006"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.7774,-55.6782 374.1618,-49.2011 363.5682,-49.036 365.7774,-55.6782"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node21" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node21"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M422.2155,-476C422.2155,-476 384.5715,-476 384.5715,-476 378.5715,-476 372.5715,-470 372.5715,-464 372.5715,-464 372.5715,-452 372.5715,-452 372.5715,-446 378.5715,-440 384.5715,-440 384.5715,-440 422.2155,-440 422.2155,-440 428.2155,-440 434.2155,-446 434.2155,-452 434.2155,-452 434.2155,-464 434.2155,-464 434.2155,-470 428.2155,-476 422.2155,-476"/>
<text text-anchor="middle" x="403.3935" y="-453.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge29" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge29"><a xlink:title="at keys_and_cert.go:145: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:197: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M170.8221,-548.8943C200.2729,-536.5669 240.309,-520.0089 275.843,-506 304.8938,-494.547 337.8921,-482.1452 363.0463,-472.817"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.4572,-476.0269 372.6211,-469.2742 362.028,-469.462 364.4572,-476.0269"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init | defined in .:0&#10;at keys_and_cert.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M142.9215,-180C142.9215,-180 112.9215,-180 112.9215,-180 106.9215,-180 100.9215,-174 100.9215,-168 100.9215,-168 100.9215,-156 100.9215,-156 100.9215,-150 106.9215,-144 112.9215,-144 112.9215,-144 142.9215,-144 142.9215,-144 148.9215,-144 154.9215,-150 154.9215,-156 154.9215,-156 154.9215,-168 154.9215,-168 154.9215,-174 148.9215,-180 142.9215,-180"/>
<text text-anchor="middle" x="127.9215" y="-157.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node16" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node16"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M452.083,-147C452.083,-147 354.704,-147 354.704,-147 348.704,-147 342.704,-141 342.704,-135 342.704,-135 342.704,-123 342.704,-123 342.704,-117 348.704,-111 354.704,-111 354.704,-111 452.083,-111 452.083,-111 458.083,-111 464.083,-117 464.083,-123 464.083,-123 464.083,-135 464.083,-135 464.083,-141 458.083,-147 452.083,-147"/>
<text text-anchor="middle" x="403.3935" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge4"><a xlink:title="at keys_and_cert.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M155.0887,-158.7455C195.9363,-153.8522 274.546,-144.4352 332.4167,-137.5026"/>
<polygon fill="#8b4513" stroke="#8b4513" points="333.091,-140.947 342.6036,-136.2823 332.2583,-133.9967 333.091,-140.947"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert | defined in keys_and_cert.go:300&#10;at keys_and_cert.go:306: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:310: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:324: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:335: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:346: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:315: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at keys_and_cert.go:320: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:331: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:342: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:309: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:334: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:345: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:314: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M179.8247,-423C179.8247,-423 76.0183,-423 76.0183,-423 70.0183,-423 64.0183,-417 64.0183,-411 64.0183,-411 64.0183,-399 64.0183,-399 64.0183,-393 70.0183,-387 76.0183,-387 76.0183,-387 179.8247,-387 179.8247,-387 185.8247,-387 191.8247,-393 191.8247,-399 191.8247,-399 191.8247,-411 191.8247,-411 191.8247,-417 185.8247,-423 179.8247,-423"/>
<text text-anchor="middle" x="127.9215" y="-400.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge26" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge26"><a xlink:title="at keys_and_cert.go:314: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M143.6888,-423.201C165.537,-448.5103 206.1373,-495.865 239.843,-537 265.7108,-568.5695 262.0991,-587.5841 296.843,-609 312.5022,-618.6522 331.667,-624.1444 349.4041,-627.2449"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.2316,-630.759 359.6451,-628.8074 350.2874,-623.8391 349.2316,-630.759"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge8"><a xlink:title="at keys_and_cert.go:315: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M146.3914,-423.3675C170.1907,-447.7428 211.8276,-492.8611 239.843,-537 272.5633,-588.5517 250.4868,-622.2596 296.843,-662 309.6503,-672.9795 326.2024,-679.9567 342.4253,-684.3854"/>
<polygon fill="#8b4513" stroke="#8b4513" points="341.9032,-687.8605 352.4474,-686.8265 343.5598,-681.0593 341.9032,-687.8605"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge9"><a xlink:title="at keys_and_cert.go:320: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:331: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:342: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M191.8127,-387.373C239.8362,-374.1239 304.8637,-356.1834 350.1015,-343.7027"/>
<polygon fill="#8b4513" stroke="#8b4513" points="351.301,-347.0026 360.01,-340.9691 349.4393,-340.2547 351.301,-347.0026"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge12"><a xlink:title="at keys_and_cert.go:309: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:334: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:345: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M164.9733,-386.964C189.1215,-373.5871 219.7631,-353.3149 239.843,-328 267.1293,-293.6 242.5645,-264.6434 275.843,-236 300.72,-214.5879 338.1647,-208.1098 366.056,-206.5279"/>
<polygon fill="#8b4513" stroke="#8b4513" points="366.3722,-210.0185 376.2317,-206.1404 366.1058,-203.0236 366.3722,-210.0185"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge7"><a xlink:title="at keys_and_cert.go:310: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:324: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:335: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:346: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M169.1007,-386.8617C193.5103,-373.9609 222.8968,-354.2567 239.843,-328 297.186,-239.1518 217.7588,-167.1991 296.843,-97 316.5544,-79.5031 342.8306,-65.8602 364.3566,-56.5388"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.9953,-59.6474 373.8721,-52.5618 363.2958,-53.1888 365.9953,-59.6474"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge1"><a xlink:title="at keys_and_cert.go:306: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M191.7652,-420.8217C217.7523,-426.9617 248.139,-433.761 275.843,-439 304.7484,-444.4662 337.5838,-449.3266 362.6999,-452.763"/>
<polygon fill="#8b4513" stroke="#8b4513" points="362.233,-456.2317 372.6112,-454.1002 363.1689,-449.2945 362.233,-456.2317"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey | defined in keys_and_cert.go:285&#10;at keys_and_cert.go:294: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:289: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M204.9005,-113C204.9005,-113 50.9425,-113 50.9425,-113 44.9425,-113 38.9425,-107 38.9425,-101 38.9425,-101 38.9425,-89 38.9425,-89 38.9425,-83 44.9425,-77 50.9425,-77 50.9425,-77 204.9005,-77 204.9005,-77 210.9005,-77 216.9005,-83 216.9005,-89 216.9005,-89 216.9005,-101 216.9005,-101 216.9005,-107 210.9005,-113 204.9005,-113"/>
<text text-anchor="middle" x="127.9215" y="-90.8" font-family="Verdana" font-size="14.00" fill="#000000">constructSigningPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge18"><a xlink:title="at keys_and_cert.go:294: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:289: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M216.9789,-77.8656C266.5502,-68.3283 325.7755,-56.9335 363.9573,-49.5874"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.9843,-52.9541 374.1429,-47.6277 363.6618,-46.0802 364.9843,-52.9541"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey | defined in keys_and_cert.go:270&#10;at keys_and_cert.go:281: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:274: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M183.3373,-52C183.3373,-52 72.5057,-52 72.5057,-52 66.5057,-52 60.5057,-46 60.5057,-40 60.5057,-40 60.5057,-28 60.5057,-28 60.5057,-22 66.5057,-16 72.5057,-16 72.5057,-16 183.3373,-16 183.3373,-16 189.3373,-16 195.3373,-22 195.3373,-28 195.3373,-28 195.3373,-40 195.3373,-40 195.3373,-46 189.3373,-52 183.3373,-52"/>
<text text-anchor="middle" x="127.9215" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">constructPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge19"><a xlink:title="at keys_and_cert.go:281: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:274: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M195.3095,-35.957C248.2482,-37.4944 320.1393,-39.5822 364.0707,-40.858"/>
<polygon fill="#8b4513" stroke="#8b4513" points="363.9758,-44.3566 374.0732,-41.1485 364.1791,-37.3596 363.9758,-44.3566"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519 -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519 | defined in keys_and_cert.go:202&#10;at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:260: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:218: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:229: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:245: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:254: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]&#10;at keys_and_cert.go:205: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:265: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M227.7646,-315C227.7646,-315 28.0784,-315 28.0784,-315 22.0784,-315 16.0784,-309 16.0784,-303 16.0784,-303 16.0784,-291 16.0784,-291 16.0784,-285 22.0784,-279 28.0784,-279 28.0784,-279 227.7646,-279 227.7646,-279 233.7646,-279 239.7646,-285 239.7646,-291 239.7646,-291 239.7646,-303 239.7646,-303 239.7646,-309 233.7646,-315 227.7646,-315"/>
<text text-anchor="middle" x="127.9215" y="-292.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCertElgAndEd25519</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_edge20"><a xlink:title="at keys_and_cert.go:254: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]">
<path fill="none" stroke="#8b4513" d="M162.7049,-315.0583C186.7571,-328.9069 218.2008,-349.8794 239.843,-375 277.0767,-418.2178 258.0219,-448.2023 296.843,-490 312.1826,-506.5158 332.8391,-520.0738 351.8805,-530.3251"/>
<polygon fill="#8b4513" stroke="#8b4513" points="350.2905,-533.4432 360.7782,-534.9455 353.5164,-527.2308 350.2905,-533.4432"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge13"><a xlink:title="at keys_and_cert.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:260: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M239.9665,-310.0156C277.9738,-314.4307 318.6869,-319.1601 349.9697,-322.7941"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.8625,-326.3051 360.1996,-323.9824 350.6703,-319.3518 349.8625,-326.3051"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge2"><a xlink:title="at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M149.7556,-278.946C177.1968,-257.5165 226.6816,-222.9331 275.843,-209 305.2451,-200.667 340.0091,-200.7362 365.8123,-202.5707"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.6742,-206.0713 375.9299,-203.4122 366.2544,-199.0953 365.6742,-206.0713"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge6"><a xlink:title="at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M239.9665,-285.2046C278.9106,-281.1048 320.6956,-276.7059 352.2655,-273.3824"/>
<polygon fill="#8b4513" stroke="#8b4513" points="352.9828,-276.8264 362.5613,-272.2986 352.2498,-269.8648 352.9828,-276.8264"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge17"><a xlink:title="at keys_and_cert.go:218: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:229: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:245: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M153.2241,-278.6507C178.1502,-259.4571 215.8783,-227.2553 239.843,-192 264.294,-156.0292 245.9695,-132.6121 275.843,-101 299.6482,-75.8093 336.3091,-60.4083 364.2284,-51.689"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.4836,-54.9676 374.0789,-48.7731 363.4968,-48.2555 365.4836,-54.9676"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge28" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge28"><a xlink:title="at keys_and_cert.go:205: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:265: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M158.7198,-315.0001C208.8584,-344.3037 308.0885,-402.2989 363.535,-434.7047"/>
<polygon fill="#8b4513" stroke="#8b4513" points="361.9724,-437.8453 372.3721,-439.8695 365.5046,-431.8018 361.9724,-437.8453"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes | defined in certificate.go:100">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M419.28,-1083C419.28,-1083 387.507,-1083 387.507,-1083 381.507,-1083 375.507,-1077 375.507,-1071 375.507,-1071 375.507,-1059 375.507,-1059 375.507,-1053 381.507,-1047 387.507,-1047 387.507,-1047 419.28,-1047 419.28,-1047 425.28,-1047 431.28,-1053 431.28,-1059 431.28,-1059 431.28,-1071 431.28,-1071 431.28,-1077 425.28,-1083 419.28,-1083"/>
<text text-anchor="middle" x="403.3935" y="-1060.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes -->
<g id="node15" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes</title>
<g id="a_node15"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes | defined in keys_and_cert.go:87&#10;at keys_and_cert.go:113: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M143.808,-663C143.808,-663 112.035,-663 112.035,-663 106.035,-663 100.035,-657 100.035,-651 100.035,-651 100.035,-639 100.035,-639 100.035,-633 106.035,-627 112.035,-627 112.035,-627 143.808,-627 143.808,-627 149.808,-627 155.808,-633 155.808,-639 155.808,-639 155.808,-651 155.808,-651 155.808,-657 149.808,-663 143.808,-663"/>
<text text-anchor="middle" x="127.9215" y="-640.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="edge21" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge21"><a xlink:title="at keys_and_cert.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M131.3089,-663.1111C142.5169,-718.676 183.093,-889.2366 275.843,-993 300.325,-1020.3891 337.7953,-1039.7947 365.7982,-1051.5051"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.6882,-1054.8313 375.2715,-1055.3267 367.3071,-1048.3397 364.6882,-1054.8313"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge14" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge14"><a xlink:title="at keys_and_cert.go:113: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M156.023,-647.2753C181.2136,-647.7033 217.5382,-644.0861 239.843,-623 314.1805,-552.724 237.6854,-483.4576 296.843,-400 311.1761,-379.7793 333.2365,-363.704 353.5739,-351.9989"/>
<polygon fill="#8b4513" stroke="#8b4513" points="355.3983,-354.9896 362.4589,-347.0903 352.0133,-348.8625 355.3983,-354.9896"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge24" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge24"><a xlink:title="at keys_and_cert.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M156.265,-645.8092C180.5911,-645.1176 215.4797,-640.676 239.843,-623 281.877,-592.5036 260.5722,-558.1661 296.843,-521 315.6703,-501.708 341.629,-486.196 363.2102,-475.3916"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.9927,-478.4172 372.4662,-470.9073 361.9407,-472.1176 364.9927,-478.4172"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -21,17 +21,21 @@ Sizes in bytes of various components of a Lease
type Lease [LEASE_SIZE]byte
```
Lease is the represenation of an I2P Lease.
https://geti2p.net/spec/common-structures#lease
#### func NewLease
```go
func NewLease(data []byte) (lease *Lease, remainder []byte, err error)
func NewLease(tunnelGateway Hash, tunnelID uint32, expirationTime time.Time) (*Lease, error)
```
NewLease creates a new *NewLease from []byte using ReadLease. Returns a pointer
to KeysAndCert unlike ReadLease.
NewLease creates a new Lease with the provided parameters.
#### func NewLeaseFromBytes
```go
func NewLeaseFromBytes(data []byte) (lease *Lease, remainder []byte, err error)
```
NewLeaseFromBytes creates a new *Lease from []byte using ReadLease. Returns a
pointer to Lease unlike ReadLease.
#### func ReadLease
@ -61,3 +65,79 @@ TunnelGateway returns the tunnel gateway as a Hash.
func (lease Lease) TunnelID() uint32
```
TunnelID returns the tunnel id as a uint23.
# lease
--
import "github.com/go-i2p/go-i2p/lib/common/lease"
Package lease implements the I2P lease common data structure
![lease.svg](lease)
## Usage
```go
const (
LEASE_SIZE = 44
LEASE_TUNNEL_GW_SIZE = 32
LEASE_TUNNEL_ID_SIZE = 4
)
```
Sizes in bytes of various components of a Lease
#### type Lease
```go
type Lease [LEASE_SIZE]byte
```
#### func NewLease
```go
func NewLease(tunnelGateway Hash, tunnelID uint32, expirationTime time.Time) (*Lease, error)
```
NewLease creates a new Lease with the provided parameters.
#### func NewLeaseFromBytes
```go
func NewLeaseFromBytes(data []byte) (lease *Lease, remainder []byte, err error)
```
NewLeaseFromBytes creates a new *Lease from []byte using ReadLease. Returns a
pointer to Lease unlike ReadLease.
#### func ReadLease
```go
func ReadLease(data []byte) (lease Lease, remainder []byte, err error)
```
ReadLease returns Lease from a []byte. The remaining bytes after the specified
length are also returned. Returns a list of errors that occurred during parsing.
#### func (Lease) Date
```go
func (lease Lease) Date() (date Date)
```
Date returns the date as an I2P Date.
#### func (Lease) TunnelGateway
```go
func (lease Lease) TunnelGateway() (hash Hash)
```
TunnelGateway returns the tunnel gateway as a Hash.
#### func (Lease) TunnelID
```go
func (lease Lease) TunnelID() uint32
```
TunnelID returns the tunnel id as a uint23.
lease
github.com/go-i2p/go-i2p/lib/common/lease

414
lib/common/lease/lease.svg Normal file
View File

@ -0,0 +1,414 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="673pt" height="820pt"
viewBox="0.00 0.00 672.89 820.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 820)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-820 672.8852,-820 672.8852,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-812 664.8852,-812 664.8852,-8 8,-8"/>
<text text-anchor="middle" x="336.4426" y="-791.8" font-family="Arial" font-size="18.00" fill="#000000">lease</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="406.6299,-653 406.6299,-774 499.9511,-774 499.9511,-653 406.6299,-653"/>
<text text-anchor="middle" x="453.2905" y="-755.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M426.6299,-661C426.6299,-661 479.9511,-661 479.9511,-661 485.9511,-661 491.9511,-667 491.9511,-673 491.9511,-673 491.9511,-727 491.9511,-727 491.9511,-733 485.9511,-739 479.9511,-739 479.9511,-739 426.6299,-739 426.6299,-739 420.6299,-739 414.6299,-733 414.6299,-727 414.6299,-727 414.6299,-673 414.6299,-673 414.6299,-667 420.6299,-661 426.6299,-661"/>
<text text-anchor="middle" x="453.2905" y="-669.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="416.193,-164 416.193,-243 490.388,-243 490.388,-164 416.193,-164"/>
<text text-anchor="middle" x="453.2905" y="-224.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="384.6958,-297 384.6958,-645 521.8852,-645 521.8852,-297 384.6958,-297"/>
<text text-anchor="middle" x="453.2905" y="-626.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M414.1811,-349C414.1811,-349 492.3999,-349 492.3999,-349 498.3999,-349 504.3999,-355 504.3999,-361 504.3999,-361 504.3999,-598 504.3999,-598 504.3999,-604 498.3999,-610 492.3999,-610 492.3999,-610 414.1811,-610 414.1811,-610 408.1811,-610 402.1811,-604 402.1811,-598 402.1811,-598 402.1811,-361 402.1811,-361 402.1811,-355 408.1811,-349 414.1811,-349"/>
<text text-anchor="middle" x="453.2905" y="-357.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease</title>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M418.078,-16C418.078,-16 488.503,-16 488.503,-16 494.503,-16 500.503,-22 500.503,-28 500.503,-28 500.503,-143 500.503,-143 500.503,-149 494.503,-155 488.503,-155 488.503,-155 418.078,-155 418.078,-155 412.078,-155 406.078,-149 406.078,-143 406.078,-143 406.078,-28 406.078,-28 406.078,-22 412.078,-16 418.078,-16"/>
<text text-anchor="middle" x="453.2905" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(Lease)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="570.8852,-106 570.8852,-313 656.8852,-313 656.8852,-106 570.8852,-106"/>
<text text-anchor="middle" x="613.8852" y="-294.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M590.8852,-114C590.8852,-114 636.8852,-114 636.8852,-114 642.8852,-114 648.8852,-120 648.8852,-126 648.8852,-126 648.8852,-180 648.8852,-180 648.8852,-186 642.8852,-192 636.8852,-192 636.8852,-192 590.8852,-192 590.8852,-192 584.8852,-192 578.8852,-186 578.8852,-180 578.8852,-180 578.8852,-126 578.8852,-126 578.8852,-120 584.8852,-114 590.8852,-114"/>
<text text-anchor="middle" x="613.8852" y="-122.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Integer)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M590.8852,-200C590.8852,-200 636.8852,-200 636.8852,-200 642.8852,-200 648.8852,-206 648.8852,-212 648.8852,-212 648.8852,-266 648.8852,-266 648.8852,-272 642.8852,-278 636.8852,-278 636.8852,-278 590.8852,-278 590.8852,-278 584.8852,-278 578.8852,-272 578.8852,-266 578.8852,-266 578.8852,-212 578.8852,-212 578.8852,-206 584.8852,-200 590.8852,-200"/>
<text text-anchor="middle" x="613.8852" y="-208.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Date)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init | defined in .:0&#10;at lease.go:59: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M291.9924,-388C291.9924,-388 261.9924,-388 261.9924,-388 255.9924,-388 249.9924,-382 249.9924,-376 249.9924,-376 249.9924,-364 249.9924,-364 249.9924,-358 255.9924,-352 261.9924,-352 261.9924,-352 291.9924,-352 291.9924,-352 297.9924,-352 303.9924,-358 303.9924,-364 303.9924,-364 303.9924,-376 303.9924,-376 303.9924,-382 297.9924,-388 291.9924,-388"/>
<text text-anchor="middle" x="276.9924" y="-365.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M501.98,-341C501.98,-341 404.601,-341 404.601,-341 398.601,-341 392.601,-335 392.601,-329 392.601,-329 392.601,-317 392.601,-317 392.601,-311 398.601,-305 404.601,-305 404.601,-305 501.98,-305 501.98,-305 507.98,-305 513.98,-311 513.98,-317 513.98,-317 513.98,-329 513.98,-329 513.98,-335 507.98,-341 501.98,-341"/>
<text text-anchor="middle" x="453.2905" y="-318.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge13"><a xlink:title="at lease.go:59: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M304.1526,-362.7593C325.0564,-357.1864 354.9352,-349.2209 382.4667,-341.8812"/>
<polygon fill="#8b4513" stroke="#8b4513" points="383.7218,-345.1689 392.4828,-339.211 381.9186,-338.4051 383.7218,-345.1689"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease | defined in lease.go:111&#10;at lease.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:133: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:130: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M306.5612,-669C306.5612,-669 247.4236,-669 247.4236,-669 241.4236,-669 235.4236,-663 235.4236,-657 235.4236,-657 235.4236,-645 235.4236,-645 235.4236,-639 241.4236,-633 247.4236,-633 247.4236,-633 306.5612,-633 306.5612,-633 312.5612,-633 318.5612,-639 318.5612,-645 318.5612,-645 318.5612,-657 318.5612,-657 318.5612,-663 312.5612,-669 306.5612,-669"/>
<text text-anchor="middle" x="276.9924" y="-646.8" font-family="Verdana" font-size="14.00" fill="#000000">NewLease</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M484.5096,-541C484.5096,-541 422.0714,-541 422.0714,-541 416.0714,-541 410.0714,-535 410.0714,-529 410.0714,-529 410.0714,-517 410.0714,-517 410.0714,-511 416.0714,-505 422.0714,-505 422.0714,-505 484.5096,-505 484.5096,-505 490.5096,-505 496.5096,-511 496.5096,-517 496.5096,-517 496.5096,-529 496.5096,-529 496.5096,-535 490.5096,-541 484.5096,-541"/>
<text text-anchor="middle" x="453.2905" y="-518.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge17"><a xlink:title="at lease.go:130: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M293.8775,-632.6923C313.9815,-611.6735 349.3063,-577.1259 384.6958,-554 389.8649,-550.6222 395.4626,-547.4352 401.1546,-544.4837"/>
<polygon fill="#8b4513" stroke="#8b4513" points="402.7165,-547.616 410.1288,-540.0458 399.6135,-541.3413 402.7165,-547.616"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node15" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node15"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M472.1125,-731C472.1125,-731 434.4685,-731 434.4685,-731 428.4685,-731 422.4685,-725 422.4685,-719 422.4685,-719 422.4685,-707 422.4685,-707 422.4685,-701 428.4685,-695 434.4685,-695 434.4685,-695 472.1125,-695 472.1125,-695 478.1125,-695 484.1125,-701 484.1125,-707 484.1125,-707 484.1125,-719 484.1125,-719 484.1125,-725 478.1125,-731 472.1125,-731"/>
<text text-anchor="middle" x="453.2905" y="-708.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge16"><a xlink:title="at lease.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:133: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M318.7726,-665.6931C347.282,-675.7193 384.8378,-688.9267 413.0202,-698.8379"/>
<polygon fill="#8b4513" stroke="#8b4513" points="411.9727,-702.1796 422.5675,-702.1954 414.2951,-695.576 411.9727,-702.1796"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes | defined in lease.go:140&#10;at lease.go:144: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease]&#10;at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at lease.go:141: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:156: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:153: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]&#10;at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]&#10;at lease.go:141: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]&#10;at lease.go:152: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M149.4338,-432C149.4338,-432 27.8552,-432 27.8552,-432 21.8552,-432 15.8552,-426 15.8552,-420 15.8552,-420 15.8552,-408 15.8552,-408 15.8552,-402 21.8552,-396 27.8552,-396 27.8552,-396 149.4338,-396 149.4338,-396 155.4338,-396 161.4338,-402 161.4338,-408 161.4338,-408 161.4338,-420 161.4338,-420 161.4338,-426 155.4338,-432 149.4338,-432"/>
<text text-anchor="middle" x="88.6445" y="-409.8" font-family="Verdana" font-size="14.00" fill="#000000">NewLeaseFromBytes</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease | defined in lease.go:86&#10;at lease.go:90: calling [github.com/samber/oops.Errorf]&#10;at lease.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]&#10;at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]&#10;at lease.go:87: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at lease.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at lease.go:87: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:105: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M307.9002,-324C307.9002,-324 246.0846,-324 246.0846,-324 240.0846,-324 234.0846,-318 234.0846,-312 234.0846,-312 234.0846,-300 234.0846,-300 234.0846,-294 240.0846,-288 246.0846,-288 246.0846,-288 307.9002,-288 307.9002,-288 313.9002,-288 319.9002,-294 319.9002,-300 319.9002,-300 319.9002,-312 319.9002,-312 319.9002,-318 313.9002,-324 307.9002,-324"/>
<text text-anchor="middle" x="276.9924" y="-301.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadLease</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease</title>
<g id="a_edge5"><a xlink:title="at lease.go:144: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease]">
<path fill="none" stroke="#000000" d="M120.1697,-395.9232C152.0856,-377.6224 201.5709,-349.2472 236.401,-329.2754"/>
<polygon fill="#000000" stroke="#000000" points="238.4303,-332.1464 245.3643,-324.1357 234.9483,-326.0739 238.4303,-332.1464"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time | defined in date.go:47">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M628.8852,-270C628.8852,-270 598.8852,-270 598.8852,-270 592.8852,-270 586.8852,-264 586.8852,-258 586.8852,-258 586.8852,-246 586.8852,-246 586.8852,-240 592.8852,-234 598.8852,-234 598.8852,-234 628.8852,-234 628.8852,-234 634.8852,-234 640.8852,-240 640.8852,-246 640.8852,-246 640.8852,-258 640.8852,-258 640.8852,-264 634.8852,-270 628.8852,-270"/>
<text text-anchor="middle" x="613.8852" y="-247.8" font-family="Verdana" font-size="14.00" fill="#000000">Time</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_edge18"><a xlink:title="at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]">
<path fill="none" stroke="#8b4513" d="M98.4407,-395.7314C122.6368,-353.3643 189.6527,-252 276.9924,-252 276.9924,-252 276.9924,-252 453.2905,-252 495.3734,-252 543.6594,-252 576.2045,-252"/>
<polygon fill="#8b4513" stroke="#8b4513" points="576.6065,-255.5001 586.6064,-252 576.6064,-248.5001 576.6065,-255.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="node7" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_node7"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID | defined in lease.go:70&#10;at lease.go:73: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M480.7167,-86C480.7167,-86 425.8643,-86 425.8643,-86 419.8643,-86 413.8643,-80 413.8643,-74 413.8643,-74 413.8643,-62 413.8643,-62 413.8643,-56 419.8643,-50 425.8643,-50 425.8643,-50 480.7167,-50 480.7167,-50 486.7167,-50 492.7167,-56 492.7167,-62 492.7167,-62 492.7167,-74 492.7167,-74 492.7167,-80 486.7167,-86 480.7167,-86"/>
<text text-anchor="middle" x="453.2905" y="-63.8" font-family="Verdana" font-size="14.00" fill="#000000">TunnelID</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_edge9"><a xlink:title="at lease.go:153: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="none" stroke="#000000" d="M94.838,-395.8702C110.9751,-351.0863 158.4041,-233.948 234.289,-166 283.6852,-121.7702 356.3239,-94.6547 404.2037,-80.4708"/>
<polygon fill="#000000" stroke="#000000" points="405.3884,-83.7718 414.0277,-77.6388 403.4494,-77.0457 405.3884,-83.7718"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="node8" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_node8"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date | defined in lease.go:78">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M468.2905,-147C468.2905,-147 438.2905,-147 438.2905,-147 432.2905,-147 426.2905,-141 426.2905,-135 426.2905,-135 426.2905,-123 426.2905,-123 426.2905,-117 432.2905,-111 438.2905,-111 438.2905,-111 468.2905,-111 468.2905,-111 474.2905,-111 480.2905,-117 480.2905,-123 480.2905,-123 480.2905,-135 480.2905,-135 480.2905,-141 474.2905,-147 468.2905,-147"/>
<text text-anchor="middle" x="453.2905" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">Date</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_edge12"><a xlink:title="at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]">
<path fill="none" stroke="#000000" d="M96.1554,-395.8455C110.937,-362.0673 146.8101,-289.0096 197.289,-245 263.4566,-187.3123 363.055,-153.417 416.4191,-138.3635"/>
<polygon fill="#000000" stroke="#000000" points="417.4278,-141.7161 426.1395,-135.6864 415.5691,-134.9673 417.4278,-141.7161"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge19"><a xlink:title="at lease.go:152: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M149.2677,-432.1215C219.2881,-453.052 333.3811,-487.1567 400.0918,-507.0978"/>
<polygon fill="#8b4513" stroke="#8b4513" points="399.395,-510.5425 409.9785,-510.0532 401.3998,-503.8357 399.395,-510.5425"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.565,-419C481.565,-419 425.016,-419 425.016,-419 419.016,-419 413.016,-413 413.016,-407 413.016,-407 413.016,-395 413.016,-395 413.016,-389 419.016,-383 425.016,-383 425.016,-383 481.565,-383 481.565,-383 487.565,-383 493.565,-389 493.565,-395 493.565,-395 493.565,-407 493.565,-407 493.565,-413 487.565,-419 481.565,-419"/>
<text text-anchor="middle" x="453.2905" y="-396.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge15"><a xlink:title="at lease.go:141: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M161.5597,-411.4005C233.1247,-408.8491 340.3772,-405.0255 402.9482,-402.7948"/>
<polygon fill="#8b4513" stroke="#8b4513" points="403.1,-406.2917 412.9689,-402.4375 402.8506,-399.2961 403.1,-406.2917"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M468.2905,-480C468.2905,-480 438.2905,-480 438.2905,-480 432.2905,-480 426.2905,-474 426.2905,-468 426.2905,-468 426.2905,-456 426.2905,-456 426.2905,-450 432.2905,-444 438.2905,-444 438.2905,-444 468.2905,-444 468.2905,-444 474.2905,-444 480.2905,-450 480.2905,-456 480.2905,-456 480.2905,-468 480.2905,-468 480.2905,-474 474.2905,-480 468.2905,-480"/>
<text text-anchor="middle" x="453.2905" y="-457.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge6"><a xlink:title="at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M161.5597,-423.5982C238.4175,-433.7153 356.4367,-449.2507 416.0653,-457.0999"/>
<polygon fill="#8b4513" stroke="#8b4513" points="415.7815,-460.5926 426.1528,-458.4277 416.6952,-453.6525 415.7815,-460.5926"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.822,-602C481.822,-602 424.759,-602 424.759,-602 418.759,-602 412.759,-596 412.759,-590 412.759,-590 412.759,-578 412.759,-578 412.759,-572 418.759,-566 424.759,-566 424.759,-566 481.822,-566 481.822,-566 487.822,-566 493.822,-572 493.822,-578 493.822,-578 493.822,-590 493.822,-590 493.822,-596 487.822,-602 481.822,-602"/>
<text text-anchor="middle" x="453.2905" y="-579.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge11"><a xlink:title="at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M125.8679,-432.0341C181.8185,-459.0429 291.0283,-511.3811 384.6958,-554 390.7369,-556.7487 397.0972,-559.5945 403.4089,-562.3892"/>
<polygon fill="#8b4513" stroke="#8b4513" points="402.0164,-565.6003 412.5787,-566.43 404.8391,-559.1946 402.0164,-565.6003"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge7"><a xlink:title="at lease.go:141: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:156: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M92.5423,-432.1079C104.2103,-481.5243 143.8074,-619.1898 234.289,-682 287.3703,-718.8478 365.2923,-720.6482 412.4639,-717.5551"/>
<polygon fill="#8b4513" stroke="#8b4513" points="412.9095,-721.0314 422.615,-716.7824 412.3781,-714.0516 412.9095,-721.0314"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_edge4"><a xlink:title="at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]">
<path fill="none" stroke="#8b4513" d="M320.0023,-299.106C386.7112,-288.4133 513.972,-268.0149 576.8449,-257.9371"/>
<polygon fill="#8b4513" stroke="#8b4513" points="577.4051,-261.3921 586.7251,-256.3534 576.2972,-254.4803 577.4051,-261.3921"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="edge21" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_edge21"><a xlink:title="at lease.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="none" stroke="#000000" d="M282.0117,-287.7268C293.7015,-248.282 326.284,-154.2676 384.6958,-99 390.5027,-93.5057 397.4511,-88.8671 404.6639,-84.9889"/>
<polygon fill="#000000" stroke="#000000" points="406.435,-88.0188 413.8755,-80.4762 403.3554,-81.7326 406.435,-88.0188"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_edge3"><a xlink:title="at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]">
<path fill="none" stroke="#000000" d="M286.103,-287.5916C302.135,-256.8842 338.1485,-194.9412 384.6958,-158 394.0954,-150.5402 405.6956,-144.6777 416.6652,-140.2348"/>
<polygon fill="#000000" stroke="#000000" points="417.9474,-143.4919 426.0717,-136.6914 415.4798,-136.9413 417.9474,-143.4919"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge2"><a xlink:title="at lease.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M304.1744,-324.286C309.8022,-328.9409 315.3368,-334.2667 319.6958,-340 364.4116,-398.8138 332.7297,-440.4825 384.6958,-493 389.4255,-497.7799 395.045,-501.8531 401.0014,-505.3099"/>
<polygon fill="#8b4513" stroke="#8b4513" points="399.4186,-508.4318 409.9049,-509.9442 402.6505,-502.2225 399.4186,-508.4318"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge8"><a xlink:title="at lease.go:87: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M320.087,-310.0381C332.8848,-312.9308 346.2577,-317.8098 356.6958,-326 377.6548,-342.4454 364.2781,-361.8873 384.6958,-379 390.1053,-383.5339 396.4635,-387.1379 403.0892,-390.0018"/>
<polygon fill="#8b4513" stroke="#8b4513" points="402.3166,-393.4503 412.9087,-393.6901 404.778,-386.8973 402.3166,-393.4503"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge10"><a xlink:title="at lease.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M319.9833,-324.1829C333.2274,-331.5149 346.8877,-341.0994 356.6958,-353 380.3876,-381.7463 359.3158,-404.7326 384.6958,-432 393.2748,-441.217 405.1837,-447.7542 416.6737,-452.32"/>
<polygon fill="#8b4513" stroke="#8b4513" points="415.55,-455.6351 426.1446,-455.7071 417.9073,-449.044 415.55,-455.6351"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node14" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node14"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M470.4858,-208C470.4858,-208 436.0952,-208 436.0952,-208 430.0952,-208 424.0952,-202 424.0952,-196 424.0952,-196 424.0952,-184 424.0952,-184 424.0952,-178 430.0952,-172 436.0952,-172 436.0952,-172 470.4858,-172 470.4858,-172 476.4858,-172 482.4858,-178 482.4858,-184 482.4858,-184 482.4858,-196 482.4858,-196 482.4858,-202 476.4858,-208 470.4858,-208"/>
<text text-anchor="middle" x="453.2905" y="-185.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge1"><a xlink:title="at lease.go:90: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M293.1999,-287.9544C312.9328,-266.9814 348.1714,-232.6206 384.6958,-212 393.8439,-206.8353 404.3738,-202.6912 414.3939,-199.4541"/>
<polygon fill="#8b4513" stroke="#8b4513" points="415.6043,-202.7451 424.1739,-196.5151 413.5897,-196.0413 415.6043,-202.7451"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge14"><a xlink:title="at lease.go:87: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:105: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M305.3623,-324.1378C310.7902,-328.7366 315.942,-334.0765 319.6958,-340 353.4244,-393.2241 358.8066,-558.5529 384.6958,-616 396.4331,-642.0446 415.5486,-668.3006 430.6229,-686.9157"/>
<polygon fill="#8b4513" stroke="#8b4513" points="427.946,-689.1708 437.0126,-694.6523 433.3432,-684.7132 427.946,-689.1708"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="node6" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int | defined in integer.go:32">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M628.8852,-184C628.8852,-184 598.8852,-184 598.8852,-184 592.8852,-184 586.8852,-178 586.8852,-172 586.8852,-172 586.8852,-160 586.8852,-160 586.8852,-154 592.8852,-148 598.8852,-148 598.8852,-148 628.8852,-148 628.8852,-148 634.8852,-148 640.8852,-154 640.8852,-160 640.8852,-160 640.8852,-172 640.8852,-172 640.8852,-178 634.8852,-184 628.8852,-184"/>
<text text-anchor="middle" x="613.8852" y="-161.8" font-family="Verdana" font-size="14.00" fill="#000000">Int</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge20" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge20"><a xlink:title="at lease.go:73: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M492.8025,-84.1905C502.5089,-88.6184 512.7357,-93.6766 521.8852,-99 543.4602,-111.5529 566.145,-128.0322 583.5907,-141.5059"/>
<polygon fill="#8b4513" stroke="#8b4513" points="581.6718,-144.4483 591.7062,-147.8485 585.9823,-138.9329 581.6718,-144.4483"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -15,6 +15,12 @@ const (
```
Sizes of various structures in an I2P LeaseSet
#### func ReadDestinationFromLeaseSet
```go
func ReadDestinationFromLeaseSet(data []byte) (destination Destination, remainder []byte, err error)
```
#### type LeaseSet
```go
@ -25,6 +31,18 @@ LeaseSet is the represenation of an I2P LeaseSet.
https://geti2p.net/spec/common-structures#leaseset
#### func NewLeaseSet
```go
func NewLeaseSet(
destination Destination,
encryptionKey crypto.RecievingPublicKey,
signingKey crypto.SigningPublicKey,
leases []Lease,
signingPrivateKey crypto.SigningPrivateKey,
) (LeaseSet, error)
```
#### func (LeaseSet) Destination
```go
@ -32,6 +50,12 @@ func (lease_set LeaseSet) Destination() (destination Destination, err error)
```
Destination returns the Destination as []byte.
#### func (LeaseSet) DestinationDeux
```go
func (lease_set LeaseSet) DestinationDeux() (destination Destination, err error)
```
#### func (LeaseSet) LeaseCount
```go
@ -74,7 +98,7 @@ encountered during parsing.
#### func (LeaseSet) Signature
```go
func (lease_set LeaseSet) Signature() (signature Signature, err error)
func (lease_set LeaseSet) Signature() (signature signature.Signature, err error)
```
Signature returns the signature as Signature. returns errors encountered during
parsing.
@ -93,3 +117,131 @@ errors encountered during parsing.
func (lease_set LeaseSet) Verify() error
```
Verify returns nil
# lease_set
--
import "github.com/go-i2p/go-i2p/lib/common/lease_set"
Package lease_set implements the I2P LeastSet common data structure
![lease_set.svg](lease_set)
## Usage
```go
const (
LEASE_SET_PUBKEY_SIZE = 256
LEASE_SET_SPK_SIZE = 128
LEASE_SET_SIG_SIZE = 40
)
```
Sizes of various structures in an I2P LeaseSet
#### func ReadDestinationFromLeaseSet
```go
func ReadDestinationFromLeaseSet(data []byte) (destination Destination, remainder []byte, err error)
```
#### type LeaseSet
```go
type LeaseSet []byte
```
LeaseSet is the represenation of an I2P LeaseSet.
https://geti2p.net/spec/common-structures#leaseset
#### func NewLeaseSet
```go
func NewLeaseSet(
destination Destination,
encryptionKey crypto.RecievingPublicKey,
signingKey crypto.SigningPublicKey,
leases []Lease,
signingPrivateKey crypto.SigningPrivateKey,
) (LeaseSet, error)
```
#### func (LeaseSet) Destination
```go
func (lease_set LeaseSet) Destination() (destination Destination, err error)
```
Destination returns the Destination as []byte.
#### func (LeaseSet) DestinationDeux
```go
func (lease_set LeaseSet) DestinationDeux() (destination Destination, err error)
```
#### func (LeaseSet) LeaseCount
```go
func (lease_set LeaseSet) LeaseCount() (count int, err error)
```
LeaseCount returns the numbert of leases specified by the LeaseCount value as
int. returns errors encountered during parsing.
#### func (LeaseSet) Leases
```go
func (lease_set LeaseSet) Leases() (leases []Lease, err error)
```
Leases returns the leases as []Lease. returns errors encountered during parsing.
#### func (LeaseSet) NewestExpiration
```go
func (lease_set LeaseSet) NewestExpiration() (newest Date, err error)
```
NewestExpiration returns the newest lease expiration as an I2P Date. Returns
errors encountered during parsing.
#### func (LeaseSet) OldestExpiration
```go
func (lease_set LeaseSet) OldestExpiration() (earliest Date, err error)
```
OldestExpiration returns the oldest lease expiration as an I2P Date. Returns
errors encountered during parsing.
#### func (LeaseSet) PublicKey
```go
func (lease_set LeaseSet) PublicKey() (public_key crypto.ElgPublicKey, err error)
```
PublicKey returns the public key as crypto.ElgPublicKey. Returns errors
encountered during parsing.
#### func (LeaseSet) Signature
```go
func (lease_set LeaseSet) Signature() (signature signature.Signature, err error)
```
Signature returns the signature as Signature. returns errors encountered during
parsing.
#### func (LeaseSet) SigningKey
```go
func (lease_set LeaseSet) SigningKey() (signing_public_key crypto.SigningPublicKey, err error)
```
SigningKey returns the signing public key as crypto.SigningPublicKey. returns
errors encountered during parsing.
#### func (LeaseSet) Verify
```go
func (lease_set LeaseSet) Verify() error
```
Verify returns nil
lease_set
github.com/go-i2p/go-i2p/lib/common/lease_set

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 135 KiB

View File

@ -28,6 +28,14 @@ RouterAddress is the represenation of an I2P RouterAddress.
https://geti2p.net/spec/common-structures#routeraddress
#### func NewRouterAddress
```go
func NewRouterAddress(cost uint8, expiration time.Time, transportType string, options map[string]string) (*RouterAddress, error)
```
NewRouterAddress creates a new RouterAddress with the provided parameters.
Returns a pointer to RouterAddress.
#### func ReadRouterAddress
```go
@ -44,6 +52,12 @@ func (router_address RouterAddress) Bytes() []byte
```
Bytes returns the router address as a []byte.
#### func (RouterAddress) CapsString
```go
func (router_address RouterAddress) CapsString() I2PString
```
#### func (RouterAddress) Cost
```go
@ -77,10 +91,17 @@ func (router_address RouterAddress) Host() (net.Addr, error)
func (router_address RouterAddress) HostString() I2PString
```
#### func (*RouterAddress) IPVersion
```go
func (router_address *RouterAddress) IPVersion() string
```
IPVersion returns a string "4" for IPv4 or 6 for IPv6
#### func (RouterAddress) InitializationVector
```go
func (router_address RouterAddress) InitializationVector() ([32]byte, error)
func (router_address RouterAddress) InitializationVector() ([16]byte, error)
```
#### func (RouterAddress) InitializationVectorString
@ -112,7 +133,7 @@ func (router_address RouterAddress) IntroducerTagString(num int) I2PString
```go
func (router_address *RouterAddress) Network() string
```
Network implements net.Addr. It returns the transport type
Network implements net.Addr. It returns the transport type plus 4 or 6
#### func (RouterAddress) Options
@ -177,3 +198,212 @@ I2PString.
```go
func (router_address *RouterAddress) UDP() bool
```
# router_address
--
import "github.com/go-i2p/go-i2p/lib/common/router_address"
Package router_address implements the I2P RouterAddress common data structure
![router_address.svg](router_address)
## Usage
```go
const (
ROUTER_ADDRESS_MIN_SIZE = 9
)
```
Minimum number of bytes in a valid RouterAddress
#### type RouterAddress
```go
type RouterAddress struct {
TransportCost *Integer
ExpirationDate *Date
TransportType I2PString
TransportOptions *Mapping
}
```
RouterAddress is the represenation of an I2P RouterAddress.
https://geti2p.net/spec/common-structures#routeraddress
#### func NewRouterAddress
```go
func NewRouterAddress(cost uint8, expiration time.Time, transportType string, options map[string]string) (*RouterAddress, error)
```
NewRouterAddress creates a new RouterAddress with the provided parameters.
Returns a pointer to RouterAddress.
#### func ReadRouterAddress
```go
func ReadRouterAddress(data []byte) (router_address RouterAddress, remainder []byte, err error)
```
ReadRouterAddress returns RouterAddress from a []byte. The remaining bytes after
the specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func (RouterAddress) Bytes
```go
func (router_address RouterAddress) Bytes() []byte
```
Bytes returns the router address as a []byte.
#### func (RouterAddress) CapsString
```go
func (router_address RouterAddress) CapsString() I2PString
```
#### func (RouterAddress) Cost
```go
func (router_address RouterAddress) Cost() int
```
Cost returns the cost for this RouterAddress as a Go integer.
#### func (RouterAddress) Expiration
```go
func (router_address RouterAddress) Expiration() Date
```
Expiration returns the expiration for this RouterAddress as an I2P Date.
#### func (RouterAddress) GetOption
```go
func (router_address RouterAddress) GetOption(key I2PString) I2PString
```
GetOption returns the value of the option specified by the key
#### func (RouterAddress) Host
```go
func (router_address RouterAddress) Host() (net.Addr, error)
```
#### func (RouterAddress) HostString
```go
func (router_address RouterAddress) HostString() I2PString
```
#### func (*RouterAddress) IPVersion
```go
func (router_address *RouterAddress) IPVersion() string
```
IPVersion returns a string "4" for IPv4 or 6 for IPv6
#### func (RouterAddress) InitializationVector
```go
func (router_address RouterAddress) InitializationVector() ([16]byte, error)
```
#### func (RouterAddress) InitializationVectorString
```go
func (router_address RouterAddress) InitializationVectorString() I2PString
```
#### func (RouterAddress) IntroducerExpirationString
```go
func (router_address RouterAddress) IntroducerExpirationString(num int) I2PString
```
#### func (RouterAddress) IntroducerHashString
```go
func (router_address RouterAddress) IntroducerHashString(num int) I2PString
```
#### func (RouterAddress) IntroducerTagString
```go
func (router_address RouterAddress) IntroducerTagString(num int) I2PString
```
#### func (*RouterAddress) Network
```go
func (router_address *RouterAddress) Network() string
```
Network implements net.Addr. It returns the transport type plus 4 or 6
#### func (RouterAddress) Options
```go
func (router_address RouterAddress) Options() Mapping
```
Options returns the options for this RouterAddress as an I2P Mapping.
#### func (RouterAddress) Port
```go
func (router_address RouterAddress) Port() (string, error)
```
#### func (RouterAddress) PortString
```go
func (router_address RouterAddress) PortString() I2PString
```
#### func (RouterAddress) ProtocolVersion
```go
func (router_address RouterAddress) ProtocolVersion() (string, error)
```
#### func (RouterAddress) ProtocolVersionString
```go
func (router_address RouterAddress) ProtocolVersionString() I2PString
```
#### func (RouterAddress) StaticKey
```go
func (router_address RouterAddress) StaticKey() ([32]byte, error)
```
#### func (RouterAddress) StaticKeyString
```go
func (router_address RouterAddress) StaticKeyString() I2PString
```
#### func (*RouterAddress) String
```go
func (router_address *RouterAddress) String() string
```
String implements net.Addr. It returns the IP address, followed by the options
#### func (RouterAddress) TransportStyle
```go
func (router_address RouterAddress) TransportStyle() I2PString
```
TransportStyle returns the transport style for this RouterAddress as an
I2PString.
#### func (*RouterAddress) UDP
```go
func (router_address *RouterAddress) UDP() bool
```
router_address
github.com/go-i2p/go-i2p/lib/common/router_address

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 149 KiB

View File

@ -18,6 +18,12 @@ RouterIdentity is the represenation of an I2P RouterIdentity.
https://geti2p.net/spec/common-structures#routeridentity
#### func NewRouterIdentity
```go
func NewRouterIdentity(publicKey crypto.RecievingPublicKey, signingPublicKey crypto.SigningPublicKey, cert certificate.Certificate, padding []byte) (*RouterIdentity, error)
```
#### func ReadRouterIdentity
```go
@ -26,3 +32,58 @@ func ReadRouterIdentity(data []byte) (router_identity RouterIdentity, remainder
ReadRouterIdentity returns RouterIdentity from a []byte. The remaining bytes
after the specified length are also returned. Returns a list of errors that
occurred during parsing.
#### func (*RouterIdentity) AsDestination
```go
func (router_identity *RouterIdentity) AsDestination() destination.Destination
```
# router_identity
--
import "github.com/go-i2p/go-i2p/lib/common/router_identity"
Package router_identity implements the I2P RouterIdentity common data structure
![router_identity.svg](router_identity)
## Usage
#### type RouterIdentity
```go
type RouterIdentity struct {
KeysAndCert
}
```
RouterIdentity is the represenation of an I2P RouterIdentity.
https://geti2p.net/spec/common-structures#routeridentity
#### func NewRouterIdentity
```go
func NewRouterIdentity(publicKey crypto.RecievingPublicKey, signingPublicKey crypto.SigningPublicKey, cert certificate.Certificate, padding []byte) (*RouterIdentity, error)
```
#### func ReadRouterIdentity
```go
func ReadRouterIdentity(data []byte) (router_identity RouterIdentity, remainder []byte, err error)
```
ReadRouterIdentity returns RouterIdentity from a []byte. The remaining bytes
after the specified length are also returned. Returns a list of errors that
occurred during parsing.
#### func (*RouterIdentity) AsDestination
```go
func (router_identity *RouterIdentity) AsDestination() destination.Destination
```
router_identity
github.com/go-i2p/go-i2p/lib/common/router_identity

View File

@ -0,0 +1,317 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="443pt" height="869pt"
viewBox="0.00 0.00 443.23 869.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 869)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-869 443.2274,-869 443.2274,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-861 435.2274,-861 435.2274,-8 8,-8"/>
<text text-anchor="middle" x="221.6137" y="-840.8" font-family="Arial" font-size="18.00" fill="#000000">router_identity</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="274.6607,-250 274.6607,-371 367.9819,-371 367.9819,-250 274.6607,-250"/>
<text text-anchor="middle" x="321.3213" y="-352.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M294.6607,-258C294.6607,-258 347.9819,-258 347.9819,-258 353.9819,-258 359.9819,-264 359.9819,-270 359.9819,-270 359.9819,-324 359.9819,-324 359.9819,-330 353.9819,-336 347.9819,-336 347.9819,-336 294.6607,-336 294.6607,-336 288.6607,-336 282.6607,-330 282.6607,-324 282.6607,-324 282.6607,-270 282.6607,-270 282.6607,-264 288.6607,-258 294.6607,-258"/>
<text text-anchor="middle" x="321.3213" y="-266.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="252.7266,-527 252.7266,-823 389.916,-823 389.916,-527 252.7266,-527"/>
<text text-anchor="middle" x="321.3213" y="-804.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M282.2119,-535C282.2119,-535 360.4307,-535 360.4307,-535 366.4307,-535 372.4307,-541 372.4307,-547 372.4307,-547 372.4307,-723 372.4307,-723 372.4307,-729 366.4307,-735 360.4307,-735 360.4307,-735 282.2119,-735 282.2119,-735 276.2119,-735 270.2119,-729 270.2119,-723 270.2119,-723 270.2119,-547 270.2119,-547 270.2119,-541 276.2119,-535 282.2119,-535"/>
<text text-anchor="middle" x="321.3213" y="-543.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="248.451,-379 248.451,-519 394.1916,-519 394.1916,-379 248.451,-379"/>
<text text-anchor="middle" x="321.3213" y="-500.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="215.4152,-16 215.4152,-242 427.2274,-242 427.2274,-16 215.4152,-16"/>
<text text-anchor="middle" x="321.3213" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">key_certificate</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M247.606,-68C247.606,-68 395.0366,-68 395.0366,-68 401.0366,-68 407.0366,-74 407.0366,-80 407.0366,-80 407.0366,-195 407.0366,-195 407.0366,-201 401.0366,-207 395.0366,-207 395.0366,-207 247.606,-207 247.606,-207 241.606,-207 235.606,-201 235.606,-195 235.606,-195 235.606,-80 235.606,-80 235.606,-74 241.606,-68 247.606,-68"/>
<text text-anchor="middle" x="321.3213" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init | defined in .:0&#10;at router_identity.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M98.2076,-788C98.2076,-788 68.2076,-788 68.2076,-788 62.2076,-788 56.2076,-782 56.2076,-776 56.2076,-776 56.2076,-764 56.2076,-764 56.2076,-758 62.2076,-752 68.2076,-752 68.2076,-752 98.2076,-752 98.2076,-752 104.2076,-752 110.2076,-758 110.2076,-764 110.2076,-764 110.2076,-776 110.2076,-776 110.2076,-782 104.2076,-788 98.2076,-788"/>
<text text-anchor="middle" x="83.2076" y="-765.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M370.0108,-788C370.0108,-788 272.6318,-788 272.6318,-788 266.6318,-788 260.6318,-782 260.6318,-776 260.6318,-776 260.6318,-764 260.6318,-764 260.6318,-758 266.6318,-752 272.6318,-752 272.6318,-752 370.0108,-752 370.0108,-752 376.0108,-752 382.0108,-758 382.0108,-764 382.0108,-764 382.0108,-776 382.0108,-776 382.0108,-782 376.0108,-788 370.0108,-788"/>
<text text-anchor="middle" x="321.3213" y="-765.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge1"><a xlink:title="at router_identity.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M110.5223,-770C144.4368,-770 203.5523,-770 250.5669,-770"/>
<polygon fill="#8b4513" stroke="#8b4513" points="250.7058,-773.5001 260.7058,-770 250.7058,-766.5001 250.7058,-773.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity | defined in router_identity.go:37&#10;at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at router_identity.go:38: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M138.6234,-605C138.6234,-605 27.7918,-605 27.7918,-605 21.7918,-605 15.7918,-599 15.7918,-593 15.7918,-593 15.7918,-581 15.7918,-581 15.7918,-575 21.7918,-569 27.7918,-569 27.7918,-569 138.6234,-569 138.6234,-569 144.6234,-569 150.6234,-575 150.6234,-581 150.6234,-581 150.6234,-593 150.6234,-593 150.6234,-599 144.6234,-605 138.6234,-605"/>
<text text-anchor="middle" x="83.2076" y="-582.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterIdentity</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node7" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M374.0622,-484C374.0622,-484 268.5804,-484 268.5804,-484 262.5804,-484 256.5804,-478 256.5804,-472 256.5804,-472 256.5804,-460 256.5804,-460 256.5804,-454 262.5804,-448 268.5804,-448 268.5804,-448 374.0622,-448 374.0622,-448 380.0622,-448 386.0622,-454 386.0622,-460 386.0622,-460 386.0622,-472 386.0622,-472 386.0622,-478 380.0622,-484 374.0622,-484"/>
<text text-anchor="middle" x="321.3213" y="-461.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_edge4"><a xlink:title="at router_identity.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M119.918,-568.8261C139.9067,-558.894 165.0546,-546.3395 187.4152,-535 217.5646,-519.7107 251.4066,-502.2699 277.5258,-488.7483"/>
<polygon fill="#8b4513" stroke="#8b4513" points="279.1543,-491.8465 286.4237,-484.1389 275.9344,-485.631 279.1543,-491.8465"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M352.5404,-605C352.5404,-605 290.1022,-605 290.1022,-605 284.1022,-605 278.1022,-599 278.1022,-593 278.1022,-593 278.1022,-581 278.1022,-581 278.1022,-575 284.1022,-569 290.1022,-569 290.1022,-569 352.5404,-569 352.5404,-569 358.5404,-569 364.5404,-575 364.5404,-581 364.5404,-581 364.5404,-593 364.5404,-593 364.5404,-599 358.5404,-605 352.5404,-605"/>
<text text-anchor="middle" x="321.3213" y="-582.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge7"><a xlink:title="at router_identity.go:38: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M150.4867,-587C187.5024,-587 232.8113,-587 267.4645,-587"/>
<polygon fill="#8b4513" stroke="#8b4513" points="267.8559,-590.5001 277.8558,-587 267.8558,-583.5001 267.8559,-590.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M349.8528,-666C349.8528,-666 292.7898,-666 292.7898,-666 286.7898,-666 280.7898,-660 280.7898,-654 280.7898,-654 280.7898,-642 280.7898,-642 280.7898,-636 286.7898,-630 292.7898,-630 292.7898,-630 349.8528,-630 349.8528,-630 355.8528,-630 361.8528,-636 361.8528,-642 361.8528,-642 361.8528,-654 361.8528,-654 361.8528,-660 355.8528,-666 349.8528,-666"/>
<text text-anchor="middle" x="321.3213" y="-643.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge2"><a xlink:title="at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M150.4867,-604.2356C188.6633,-614.0157 235.6615,-626.0557 270.6929,-635.03"/>
<polygon fill="#8b4513" stroke="#8b4513" points="270.1414,-638.5017 280.6972,-637.5929 271.8786,-631.7207 270.1414,-638.5017"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M336.3213,-727C336.3213,-727 306.3213,-727 306.3213,-727 300.3213,-727 294.3213,-721 294.3213,-715 294.3213,-715 294.3213,-703 294.3213,-703 294.3213,-697 300.3213,-691 306.3213,-691 306.3213,-691 336.3213,-691 336.3213,-691 342.3213,-691 348.3213,-697 348.3213,-703 348.3213,-703 348.3213,-715 348.3213,-715 348.3213,-721 342.3213,-727 336.3213,-727"/>
<text text-anchor="middle" x="321.3213" y="-704.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge12"><a xlink:title="at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M104.2809,-605.016C129.2845,-625.5639 172.9517,-658.9054 215.4152,-679 237.1373,-689.2793 263.0739,-696.6988 283.8429,-701.5876"/>
<polygon fill="#8b4513" stroke="#8b4513" points="283.357,-705.0659 293.8819,-703.8504 284.8963,-698.2372 283.357,-705.0659"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node13" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node13"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M340.1433,-328C340.1433,-328 302.4993,-328 302.4993,-328 296.4993,-328 290.4993,-322 290.4993,-316 290.4993,-316 290.4993,-304 290.4993,-304 290.4993,-298 296.4993,-292 302.4993,-292 302.4993,-292 340.1433,-292 340.1433,-292 346.1433,-292 352.1433,-298 352.1433,-304 352.1433,-304 352.1433,-316 352.1433,-316 352.1433,-322 346.1433,-328 340.1433,-328"/>
<text text-anchor="middle" x="321.3213" y="-305.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge11"><a xlink:title="at router_identity.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M90.736,-568.9593C107.9336,-529.4471 153.451,-433.9341 215.4152,-373 234.4164,-354.3146 260.0013,-338.8971 281.2638,-327.9912"/>
<polygon fill="#8b4513" stroke="#8b4513" points="282.9923,-331.0405 290.3839,-323.45 279.8722,-324.7743 282.9923,-331.0405"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity | defined in router_identity.go:55&#10;at router_identity.go:78: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert]&#10;at router_identity.go:80: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]&#10;at router_identity.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]&#10;at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:79: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at router_identity.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M137.2848,-367C137.2848,-367 29.1304,-367 29.1304,-367 23.1304,-367 17.1304,-361 17.1304,-355 17.1304,-355 17.1304,-343 17.1304,-343 17.1304,-337 23.1304,-331 29.1304,-331 29.1304,-331 137.2848,-331 137.2848,-331 143.2848,-331 149.2848,-337 149.2848,-343 149.2848,-343 149.2848,-355 149.2848,-355 149.2848,-361 143.2848,-367 137.2848,-367"/>
<text text-anchor="middle" x="83.2076" y="-344.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterIdentity</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate | defined in key_certificate.go:395">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M407.1336,-60C407.1336,-60 235.509,-60 235.509,-60 229.509,-60 223.509,-54 223.509,-48 223.509,-48 223.509,-36 223.509,-36 223.509,-30 229.509,-24 235.509,-24 235.509,-24 407.1336,-24 407.1336,-24 413.1336,-24 419.1336,-30 419.1336,-36 419.1336,-36 419.1336,-48 419.1336,-48 419.1336,-54 413.1336,-60 407.1336,-60"/>
<text text-anchor="middle" x="321.3213" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyCertificateFromCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_edge8"><a xlink:title="at router_identity.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]">
<path fill="none" stroke="#8b4513" d="M85.9093,-330.8722C94.2686,-281.3639 124.3964,-142.7131 215.4678,-64.945"/>
<polygon fill="#8b4513" stroke="#8b4513" points="217.7761,-67.5786 223.2939,-58.534 213.3402,-62.1635 217.7761,-67.5786"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType | defined in key_certificate.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M365.1882,-138C365.1882,-138 277.4544,-138 277.4544,-138 271.4544,-138 265.4544,-132 265.4544,-126 265.4544,-126 265.4544,-114 265.4544,-114 265.4544,-108 271.4544,-102 277.4544,-102 277.4544,-102 365.1882,-102 365.1882,-102 371.1882,-102 377.1882,-108 377.1882,-114 377.1882,-114 377.1882,-126 377.1882,-126 377.1882,-132 371.1882,-138 365.1882,-138"/>
<text text-anchor="middle" x="321.3213" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">PublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge10"><a xlink:title="at router_identity.go:79: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#8b4513" d="M90.212,-330.8703C106.2206,-291.8594 149.2841,-199.5637 215.4152,-151 227.2087,-142.3394 241.3916,-136.0872 255.4885,-131.5772"/>
<polygon fill="#8b4513" stroke="#8b4513" points="256.5946,-134.9003 265.2037,-128.725 254.6227,-128.1837 256.5946,-134.9003"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="node6" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType | defined in key_certificate.go:117">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M387.2525,-199C387.2525,-199 255.3901,-199 255.3901,-199 249.3901,-199 243.3901,-193 243.3901,-187 243.3901,-187 243.3901,-175 243.3901,-175 243.3901,-169 249.3901,-163 255.3901,-163 255.3901,-163 387.2525,-163 387.2525,-163 393.2525,-163 399.2525,-169 399.2525,-175 399.2525,-175 399.2525,-187 399.2525,-187 399.2525,-193 393.2525,-199 387.2525,-199"/>
<text text-anchor="middle" x="321.3213" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge6"><a xlink:title="at router_identity.go:80: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#8b4513" d="M107.351,-330.8105C133.687,-311.0814 177.1958,-278.8139 215.4152,-252 238.4063,-235.8699 264.6215,-218.2888 285.2179,-204.6569"/>
<polygon fill="#8b4513" stroke="#8b4513" points="287.2591,-207.5033 293.6751,-199.0721 283.4017,-201.662 287.2591,-207.5033"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert | defined in keys_and_cert.go:300">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M373.2245,-423C373.2245,-423 269.4181,-423 269.4181,-423 263.4181,-423 257.4181,-417 257.4181,-411 257.4181,-411 257.4181,-399 257.4181,-399 257.4181,-393 263.4181,-387 269.4181,-387 269.4181,-387 373.2245,-387 373.2245,-387 379.2245,-387 385.2245,-393 385.2245,-399 385.2245,-399 385.2245,-411 385.2245,-411 385.2245,-417 379.2245,-423 373.2245,-423"/>
<text text-anchor="middle" x="321.3213" y="-400.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert</title>
<g id="a_edge5"><a xlink:title="at router_identity.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M149.5355,-364.5991C179.9574,-371.7538 216.1353,-380.2622 247.4268,-387.6214"/>
<polygon fill="#8b4513" stroke="#8b4513" points="246.8654,-391.0848 257.4011,-389.9671 248.468,-384.2707 246.8654,-391.0848"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge3"><a xlink:title="at router_identity.go:78: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M108.315,-367.0035C131.6852,-384.9216 166.0352,-414.3934 187.4152,-447 207.6117,-477.8017 191.8874,-496.6612 215.4152,-525 229.6253,-542.1159 249.8619,-555.5838 268.8449,-565.5322"/>
<polygon fill="#8b4513" stroke="#8b4513" points="267.5227,-568.7844 278.0313,-570.1338 270.6578,-562.5257 267.5227,-568.7844"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge9"><a xlink:title="at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M101.3445,-367.3526C124.8994,-392.274 165.577,-439.2156 187.4152,-487 212.1627,-541.1503 174.7163,-574.5455 215.4152,-618 229.5986,-633.1437 250.8011,-640.8382 270.5176,-644.6783"/>
<polygon fill="#8b4513" stroke="#8b4513" points="270.2103,-648.1749 280.6475,-646.3541 271.3529,-641.2688 270.2103,-648.1749"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge14"><a xlink:title="at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M89.4293,-367.1672C112.1218,-433.0169 190.4151,-656.4964 215.4152,-679 234.1752,-695.8867 261.7691,-703.3341 284.0874,-706.5874"/>
<polygon fill="#8b4513" stroke="#8b4513" points="283.885,-710.0888 294.2381,-707.8383 284.7413,-703.1414 283.885,-710.0888"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge13"><a xlink:title="at router_identity.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M149.5355,-338.1363C191.4929,-331.2642 244.3993,-322.5989 280.3345,-316.7131"/>
<polygon fill="#8b4513" stroke="#8b4513" points="281.1506,-320.1262 290.4533,-315.0558 280.0191,-313.2182 281.1506,-320.1262"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -28,6 +28,25 @@ RouterInfo is the represenation of an I2P RouterInfo.
https://geti2p.net/spec/common-structures#routerinfo
#### func NewRouterInfo
```go
func NewRouterInfo(
routerIdentity *RouterIdentity,
publishedTime time.Time,
addresses []*RouterAddress,
options map[string]string,
signingPrivateKey crypto.SigningPrivateKey,
sigType int,
) (*RouterInfo, error)
```
#### func OwnedRouterInfo
```go
func OwnedRouterInfo(keyCertificate key_certificate.KeyCertificate) *RouterInfo
```
#### func ReadRouterInfo
```go
@ -37,6 +56,12 @@ ReadRouterInfo returns RouterInfo from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func (*RouterInfo) AddAddress
```go
func (router_info *RouterInfo) AddAddress(address *RouterAddress)
```
#### func (RouterInfo) Bytes
```go
@ -57,6 +82,13 @@ func (router_info *RouterInfo) IdentHash() Hash
```
IndentHash returns the identity hash (sha256 sum) for this RouterInfo.
#### func (RouterInfo) Network
```go
func (router_info RouterInfo) Network() string
```
Network implements net.Addr
#### func (RouterInfo) Options
```go
@ -137,3 +169,183 @@ func (router_info RouterInfo) String() string
```go
func (router_info *RouterInfo) UnCongested() bool
```
# router_info
--
import "github.com/go-i2p/go-i2p/lib/common/router_info"
Package router_info implements the I2P RouterInfo common data structure
![router_info.svg](router_info)
## Usage
```go
const (
MIN_GOOD_VERSION = 58
MAX_GOOD_VERSION = 99
)
```
```go
const ROUTER_INFO_MIN_SIZE = 439
```
#### type RouterInfo
```go
type RouterInfo struct {
}
```
RouterInfo is the represenation of an I2P RouterInfo.
https://geti2p.net/spec/common-structures#routerinfo
#### func NewRouterInfo
```go
func NewRouterInfo(
routerIdentity *RouterIdentity,
publishedTime time.Time,
addresses []*RouterAddress,
options map[string]string,
signingPrivateKey crypto.SigningPrivateKey,
sigType int,
) (*RouterInfo, error)
```
#### func OwnedRouterInfo
```go
func OwnedRouterInfo(keyCertificate key_certificate.KeyCertificate) *RouterInfo
```
#### func ReadRouterInfo
```go
func ReadRouterInfo(bytes []byte) (info RouterInfo, remainder []byte, err error)
```
ReadRouterInfo returns RouterInfo from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func (*RouterInfo) AddAddress
```go
func (router_info *RouterInfo) AddAddress(address *RouterAddress)
```
#### func (RouterInfo) Bytes
```go
func (router_info RouterInfo) Bytes() (bytes []byte, err error)
```
Bytes returns the RouterInfo as a []byte suitable for writing to a stream.
#### func (*RouterInfo) GoodVersion
```go
func (router_info *RouterInfo) GoodVersion() bool
```
#### func (*RouterInfo) IdentHash
```go
func (router_info *RouterInfo) IdentHash() Hash
```
IndentHash returns the identity hash (sha256 sum) for this RouterInfo.
#### func (RouterInfo) Network
```go
func (router_info RouterInfo) Network() string
```
Network implements net.Addr
#### func (RouterInfo) Options
```go
func (router_info RouterInfo) Options() (mapping Mapping)
```
Options returns the options for this RouterInfo as an I2P Mapping.
#### func (*RouterInfo) PeerSize
```go
func (router_info *RouterInfo) PeerSize() int
```
PeerSize returns the peer size as a Go integer.
#### func (*RouterInfo) Published
```go
func (router_info *RouterInfo) Published() *Date
```
Published returns the date this RouterInfo was published as an I2P Date.
#### func (*RouterInfo) Reachable
```go
func (router_info *RouterInfo) Reachable() bool
```
#### func (*RouterInfo) RouterAddressCount
```go
func (router_info *RouterInfo) RouterAddressCount() int
```
RouterAddressCount returns the count of RouterAddress in this RouterInfo as a Go
integer.
#### func (*RouterInfo) RouterAddresses
```go
func (router_info *RouterInfo) RouterAddresses() []*RouterAddress
```
RouterAddresses returns all RouterAddresses for this RouterInfo as
[]*RouterAddress.
#### func (*RouterInfo) RouterCapabilities
```go
func (router_info *RouterInfo) RouterCapabilities() string
```
#### func (*RouterInfo) RouterIdentity
```go
func (router_info *RouterInfo) RouterIdentity() *RouterIdentity
```
RouterIdentity returns the router identity as *RouterIdentity.
#### func (*RouterInfo) RouterVersion
```go
func (router_info *RouterInfo) RouterVersion() string
```
#### func (RouterInfo) Signature
```go
func (router_info RouterInfo) Signature() (signature Signature)
```
Signature returns the signature for this RouterInfo as an I2P Signature.
#### func (RouterInfo) String
```go
func (router_info RouterInfo) String() string
```
#### func (*RouterInfo) UnCongested
```go
func (router_info *RouterInfo) UnCongested() bool
```
router_info
github.com/go-i2p/go-i2p/lib/common/router_info

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -32,3 +32,46 @@ func ReadSessionKey(bytes []byte) (info SessionKey, remainder []byte, err error)
ReadSessionKey returns SessionKey from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
# session_key
--
import "github.com/go-i2p/go-i2p/lib/common/session_key"
Package session_key implements the I2P SessionKey common data structure
![session_key.svg](session_key)
## Usage
#### type SessionKey
```go
type SessionKey [32]byte
```
SessionKey is the represenation of an I2P SessionKey.
https://geti2p.net/spec/common-structures#sessionkey
#### func NewSessionKey
```go
func NewSessionKey(data []byte) (session_key *SessionKey, remainder []byte, err error)
```
NewSessionKey creates a new *SessionKey from []byte using ReadSessionKey.
Returns a pointer to SessionKey unlike ReadSessionKey.
#### func ReadSessionKey
```go
func ReadSessionKey(bytes []byte) (info SessionKey, remainder []byte, err error)
```
ReadSessionKey returns SessionKey from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
session_key
github.com/go-i2p/go-i2p/lib/common/session_key

View File

@ -0,0 +1,169 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="503pt" height="471pt"
viewBox="0.00 0.00 502.92 471.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 471)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-471 502.9202,-471 502.9202,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-463 494.9202,-463 494.9202,-8 8,-8"/>
<text text-anchor="middle" x="251.4601" y="-442.8" font-family="Arial" font-size="18.00" fill="#000000">session_key</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="389.39,-16 389.39,-425 486.9202,-425 486.9202,-16 389.39,-16"/>
<text text-anchor="middle" x="438.1551" y="-406.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Entry</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Entry">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M411.4945,-251C411.4945,-251 464.8157,-251 464.8157,-251 470.8157,-251 476.8157,-257 476.8157,-263 476.8157,-263 476.8157,-378 476.8157,-378 476.8157,-384 470.8157,-390 464.8157,-390 464.8157,-390 411.4945,-390 411.4945,-390 405.4945,-390 399.4945,-384 399.4945,-378 399.4945,-378 399.4945,-263 399.4945,-263 399.4945,-257 405.4945,-251 411.4945,-251"/>
<text text-anchor="middle" x="438.1551" y="-259.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Entry)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey | defined in session_key.go:25&#10;at session_key.go:27: calling [github.com/sirupsen/logrus.Warn]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M312.3221,-89C312.3221,-89 217.5939,-89 217.5939,-89 211.5939,-89 205.5939,-83 205.5939,-77 205.5939,-77 205.5939,-65 205.5939,-65 205.5939,-59 211.5939,-53 217.5939,-53 217.5939,-53 312.3221,-53 312.3221,-53 318.3221,-53 324.3221,-59 324.3221,-65 324.3221,-65 324.3221,-77 324.3221,-77 324.3221,-83 318.3221,-89 312.3221,-89"/>
<text text-anchor="middle" x="264.958" y="-66.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSessionKey</text>
</a>
</g>
</g>
<!-- github.com/sirupsen/logrus.Warn -->
<g id="node3" class="node">
<title>github.com/sirupsen/logrus.Warn</title>
<g id="a_node3"><a xlink:title="github.com/sirupsen/logrus.Warn | defined in exported.go:113">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M453.745,-60C453.745,-60 422.5652,-60 422.5652,-60 416.5652,-60 410.5652,-54 410.5652,-48 410.5652,-48 410.5652,-36 410.5652,-36 410.5652,-30 416.5652,-24 422.5652,-24 422.5652,-24 453.745,-24 453.745,-24 459.745,-24 465.745,-30 465.745,-36 465.745,-36 465.745,-48 465.745,-48 465.745,-54 459.745,-60 453.745,-60"/>
<text text-anchor="middle" x="438.1551" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey&#45;&gt;github.com/sirupsen/logrus.Warn -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey&#45;&gt;github.com/sirupsen/logrus.Warn</title>
<g id="a_edge7"><a xlink:title="at session_key.go:27: calling [github.com/sirupsen/logrus.Warn]">
<path fill="none" stroke="#8b4513" d="M324.5626,-61.0198C349.7356,-56.8049 378.2897,-52.0238 400.4721,-48.3096"/>
<polygon fill="#8b4513" stroke="#8b4513" points="401.2083,-51.7352 410.493,-46.6317 400.0523,-44.8313 401.2083,-51.7352"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey | defined in session_key.go:33&#10;at session_key.go:34: calling [github.com/sirupsen/logrus.WithField]&#10;at session_key.go:34: calling [(*github.com/sirupsen/logrus.Entry).Debug]&#10;at session_key.go:35: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey]&#10;at session_key.go:37: calling [github.com/sirupsen/logrus.WithError]&#10;at session_key.go:37: calling [(*github.com/sirupsen/logrus.Entry).Error]&#10;at session_key.go:41: calling [github.com/sirupsen/logrus.Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M120.29,-212C120.29,-212 28.236,-212 28.236,-212 22.236,-212 16.236,-206 16.236,-200 16.236,-200 16.236,-188 16.236,-188 16.236,-182 22.236,-176 28.236,-176 28.236,-176 120.29,-176 120.29,-176 126.29,-176 132.29,-182 132.29,-188 132.29,-188 132.29,-200 132.29,-200 132.29,-206 126.29,-212 120.29,-212"/>
<text text-anchor="middle" x="74.263" y="-189.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSessionKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey</title>
<g id="a_edge3"><a xlink:title="at session_key.go:35: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey]">
<path fill="none" stroke="#000000" d="M95.5362,-175.7261C114.1263,-160.2042 142.1895,-137.8306 168.526,-121 183.8021,-111.2377 201.2035,-101.7565 216.98,-93.722"/>
<polygon fill="#000000" stroke="#000000" points="218.686,-96.7819 226.0528,-89.1673 215.5454,-90.5259 218.686,-96.7819"/>
</a>
</g>
</g>
<!-- github.com/sirupsen/logrus.WithField -->
<g id="node4" class="node">
<title>github.com/sirupsen/logrus.WithField</title>
<g id="a_node4"><a xlink:title="github.com/sirupsen/logrus.WithField | defined in exported.go:69">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M466.4296,-121C466.4296,-121 409.8806,-121 409.8806,-121 403.8806,-121 397.8806,-115 397.8806,-109 397.8806,-109 397.8806,-97 397.8806,-97 397.8806,-91 403.8806,-85 409.8806,-85 409.8806,-85 466.4296,-85 466.4296,-85 472.4296,-85 478.4296,-91 478.4296,-97 478.4296,-97 478.4296,-109 478.4296,-109 478.4296,-115 472.4296,-121 466.4296,-121"/>
<text text-anchor="middle" x="438.1551" y="-98.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithField -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithField</title>
<g id="a_edge1"><a xlink:title="at session_key.go:34: calling [github.com/sirupsen/logrus.WithField]">
<path fill="none" stroke="#8b4513" d="M132.3252,-179.4802C202.9433,-161.8204 320.9777,-132.303 387.8778,-115.5731"/>
<polygon fill="#8b4513" stroke="#8b4513" points="388.911,-118.9225 397.7631,-113.101 387.2127,-112.1317 388.911,-118.9225"/>
</a>
</g>
</g>
<!-- github.com/sirupsen/logrus.WithError -->
<g id="node5" class="node">
<title>github.com/sirupsen/logrus.WithError</title>
<g id="a_node5"><a xlink:title="github.com/sirupsen/logrus.WithError | defined in exported.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M466.6866,-182C466.6866,-182 409.6236,-182 409.6236,-182 403.6236,-182 397.6236,-176 397.6236,-170 397.6236,-170 397.6236,-158 397.6236,-158 397.6236,-152 403.6236,-146 409.6236,-146 409.6236,-146 466.6866,-146 466.6866,-146 472.6866,-146 478.6866,-152 478.6866,-158 478.6866,-158 478.6866,-170 478.6866,-170 478.6866,-176 472.6866,-182 466.6866,-182"/>
<text text-anchor="middle" x="438.1551" y="-159.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithError -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithError</title>
<g id="a_edge4"><a xlink:title="at session_key.go:37: calling [github.com/sirupsen/logrus.WithError]">
<path fill="none" stroke="#8b4513" d="M132.3252,-189.2132C202.703,-183.4111 320.1752,-173.7265 387.1933,-168.2014"/>
<polygon fill="#8b4513" stroke="#8b4513" points="387.8225,-171.6615 397.5011,-167.3516 387.2473,-164.6852 387.8225,-171.6615"/>
</a>
</g>
</g>
<!-- github.com/sirupsen/logrus.Debug -->
<g id="node6" class="node">
<title>github.com/sirupsen/logrus.Debug</title>
<g id="a_node6"><a xlink:title="github.com/sirupsen/logrus.Debug | defined in exported.go:98">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M456.9771,-243C456.9771,-243 419.3331,-243 419.3331,-243 413.3331,-243 407.3331,-237 407.3331,-231 407.3331,-231 407.3331,-219 407.3331,-219 407.3331,-213 413.3331,-207 419.3331,-207 419.3331,-207 456.9771,-207 456.9771,-207 462.9771,-207 468.9771,-213 468.9771,-219 468.9771,-219 468.9771,-231 468.9771,-231 468.9771,-237 462.9771,-243 456.9771,-243"/>
<text text-anchor="middle" x="438.1551" y="-220.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.Debug -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.Debug</title>
<g id="a_edge6"><a xlink:title="at session_key.go:41: calling [github.com/sirupsen/logrus.Debug]">
<path fill="none" stroke="#8b4513" d="M132.3252,-198.9463C206.2647,-205.2452 332.1858,-215.9725 396.9679,-221.4913"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.9382,-225.0013 407.1992,-222.3629 397.5324,-218.0266 396.9382,-225.0013"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Entry).Debug -->
<g id="node7" class="node">
<title>(*github.com/sirupsen/logrus.Entry).Debug</title>
<g id="a_node7"><a xlink:title="(*github.com/sirupsen/logrus.Entry).Debug | defined in entry.go:312">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M456.9771,-321C456.9771,-321 419.3331,-321 419.3331,-321 413.3331,-321 407.3331,-315 407.3331,-309 407.3331,-309 407.3331,-297 407.3331,-297 407.3331,-291 413.3331,-285 419.3331,-285 419.3331,-285 456.9771,-285 456.9771,-285 462.9771,-285 468.9771,-291 468.9771,-297 468.9771,-297 468.9771,-309 468.9771,-309 468.9771,-315 462.9771,-321 456.9771,-321"/>
<text text-anchor="middle" x="438.1551" y="-298.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Debug -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Debug</title>
<g id="a_edge2"><a xlink:title="at session_key.go:34: calling [(*github.com/sirupsen/logrus.Entry).Debug]">
<path fill="none" stroke="#8b4513" d="M132.3252,-211.3919C206.4172,-233.5854 332.7053,-271.4136 397.3678,-290.7826"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.6154,-294.2108 407.1992,-293.7275 398.624,-287.5052 396.6154,-294.2108"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Entry).Error -->
<g id="node8" class="node">
<title>(*github.com/sirupsen/logrus.Entry).Error</title>
<g id="a_node8"><a xlink:title="(*github.com/sirupsen/logrus.Entry).Error | defined in entry.go:332">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M453.1551,-382C453.1551,-382 423.1551,-382 423.1551,-382 417.1551,-382 411.1551,-376 411.1551,-370 411.1551,-370 411.1551,-358 411.1551,-358 411.1551,-352 417.1551,-346 423.1551,-346 423.1551,-346 453.1551,-346 453.1551,-346 459.1551,-346 465.1551,-352 465.1551,-358 465.1551,-358 465.1551,-370 465.1551,-370 465.1551,-376 459.1551,-382 453.1551,-382"/>
<text text-anchor="middle" x="438.1551" y="-359.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Error -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Error</title>
<g id="a_edge5"><a xlink:title="at session_key.go:37: calling [(*github.com/sirupsen/logrus.Entry).Error]">
<path fill="none" stroke="#8b4513" d="M110.6359,-212.0502C136.9152,-225.0141 173.3068,-242.8081 205.526,-258 274.4848,-290.5153 355.6436,-327.1222 401.5796,-347.689"/>
<polygon fill="#8b4513" stroke="#8b4513" points="400.2726,-350.9385 410.8301,-351.827 403.131,-344.5487 400.2726,-350.9385"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -32,3 +32,46 @@ func ReadSessionTag(bytes []byte) (info SessionTag, remainder []byte, err error)
ReadSessionTag returns SessionTag from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
# session_tag
--
import "github.com/go-i2p/go-i2p/lib/common/session_tag"
Package session_tag implements the I2P SessionTag common data structure
![session_tag.svg](session_tag)
## Usage
#### type SessionTag
```go
type SessionTag [32]byte
```
SessionTag is the represenation of an I2P SessionTag.
https://geti2p.net/spec/common-structures#session-tag
#### func NewSessionTag
```go
func NewSessionTag(data []byte) (session_tag *SessionTag, remainder []byte, err error)
```
NewSessionTag creates a new *SessionTag from []byte using ReadSessionTag.
Returns a pointer to SessionTag unlike ReadSessionTag.
#### func ReadSessionTag
```go
func ReadSessionTag(bytes []byte) (info SessionTag, remainder []byte, err error)
```
ReadSessionTag returns SessionTag from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
session_tag
github.com/go-i2p/go-i2p/lib/common/session_tag

View File

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="539pt" height="471pt"
viewBox="0.00 0.00 539.47 471.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 471)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-471 539.4714,-471 539.4714,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-463 531.4714,-463 531.4714,-8 8,-8"/>
<text text-anchor="middle" x="269.7357" y="-442.8" font-family="Arial" font-size="18.00" fill="#000000">session_tag</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="215.9664,-304 215.9664,-425 309.2876,-425 309.2876,-304 215.9664,-304"/>
<text text-anchor="middle" x="262.627" y="-406.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M235.9664,-312C235.9664,-312 289.2876,-312 289.2876,-312 295.2876,-312 301.2876,-318 301.2876,-324 301.2876,-324 301.2876,-378 301.2876,-378 301.2876,-384 295.2876,-390 289.2876,-390 289.2876,-390 235.9664,-390 235.9664,-390 229.9664,-390 223.9664,-384 223.9664,-378 223.9664,-378 223.9664,-324 223.9664,-324 223.9664,-318 229.9664,-312 235.9664,-312"/>
<text text-anchor="middle" x="262.627" y="-320.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="386.282,-16 386.282,-425 523.4714,-425 523.4714,-16 386.282,-16"/>
<text text-anchor="middle" x="454.8767" y="-406.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M415.7673,-68C415.7673,-68 493.9861,-68 493.9861,-68 499.9861,-68 505.9861,-74 505.9861,-80 505.9861,-80 505.9861,-378 505.9861,-378 505.9861,-384 499.9861,-390 493.9861,-390 493.9861,-390 415.7673,-390 415.7673,-390 409.7673,-390 403.7673,-384 403.7673,-378 403.7673,-378 403.7673,-80 403.7673,-80 403.7673,-74 409.7673,-68 415.7673,-68"/>
<text text-anchor="middle" x="454.8767" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag | defined in session_tag.go:38&#10;at session_tag.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:48: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag]&#10;at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at session_tag.go:46: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at session_tag.go:39: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M118.958,-272C118.958,-272 28.014,-272 28.014,-272 22.014,-272 16.014,-266 16.014,-260 16.014,-260 16.014,-248 16.014,-248 16.014,-242 22.014,-236 28.014,-236 28.014,-236 118.958,-236 118.958,-236 124.958,-236 130.958,-242 130.958,-248 130.958,-248 130.958,-260 130.958,-260 130.958,-266 124.958,-272 118.958,-272"/>
<text text-anchor="middle" x="73.486" y="-249.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSessionTag</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag | defined in session_tag.go:30&#10;at session_tag.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M309.4374,-158C309.4374,-158 215.8166,-158 215.8166,-158 209.8166,-158 203.8166,-152 203.8166,-146 203.8166,-146 203.8166,-134 203.8166,-134 203.8166,-128 209.8166,-122 215.8166,-122 215.8166,-122 309.4374,-122 309.4374,-122 315.4374,-122 321.4374,-128 321.4374,-134 321.4374,-134 321.4374,-146 321.4374,-146 321.4374,-152 315.4374,-158 309.4374,-158"/>
<text text-anchor="middle" x="262.627" y="-135.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSessionTag</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag</title>
<g id="a_edge3"><a xlink:title="at session_tag.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag]">
<path fill="none" stroke="#000000" d="M98.3475,-235.7859C116.8851,-222.5017 143.0301,-204.3834 166.972,-190 182.6822,-180.5619 200.3502,-171.0373 216.187,-162.87"/>
<polygon fill="#000000" stroke="#000000" points="217.9585,-165.8953 225.2712,-158.2289 214.7737,-159.6617 217.9585,-165.8953"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M483.1512,-199C483.1512,-199 426.6022,-199 426.6022,-199 420.6022,-199 414.6022,-193 414.6022,-187 414.6022,-187 414.6022,-175 414.6022,-175 414.6022,-169 420.6022,-163 426.6022,-163 426.6022,-163 483.1512,-163 483.1512,-163 489.1512,-163 495.1512,-169 495.1512,-175 495.1512,-175 495.1512,-187 495.1512,-187 495.1512,-193 489.1512,-199 483.1512,-199"/>
<text text-anchor="middle" x="454.8767" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge8"><a xlink:title="at session_tag.go:39: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M130.997,-242.9921C205.3749,-228.7558 333.7439,-204.1854 404.4763,-190.6469"/>
<polygon fill="#8b4513" stroke="#8b4513" points="405.317,-194.0496 414.4807,-188.732 404.001,-187.1744 405.317,-194.0496"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M483.4082,-260C483.4082,-260 426.3452,-260 426.3452,-260 420.3452,-260 414.3452,-254 414.3452,-248 414.3452,-248 414.3452,-236 414.3452,-236 414.3452,-230 420.3452,-224 426.3452,-224 426.3452,-224 483.4082,-224 483.4082,-224 489.4082,-224 495.4082,-230 495.4082,-236 495.4082,-236 495.4082,-248 495.4082,-248 495.4082,-254 489.4082,-260 483.4082,-260"/>
<text text-anchor="middle" x="454.8767" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge4"><a xlink:title="at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M130.997,-252.1905C205.2757,-249.8534 333.4017,-245.8221 404.193,-243.5947"/>
<polygon fill="#8b4513" stroke="#8b4513" points="404.3235,-247.0924 414.2084,-243.2796 404.1033,-240.0959 404.3235,-247.0924"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M469.8767,-321C469.8767,-321 439.8767,-321 439.8767,-321 433.8767,-321 427.8767,-315 427.8767,-309 427.8767,-309 427.8767,-297 427.8767,-297 427.8767,-291 433.8767,-285 439.8767,-285 439.8767,-285 469.8767,-285 469.8767,-285 475.8767,-285 481.8767,-291 481.8767,-297 481.8767,-297 481.8767,-309 481.8767,-309 481.8767,-315 475.8767,-321 469.8767,-321"/>
<text text-anchor="middle" x="454.8767" y="-298.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge5"><a xlink:title="at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M131.1094,-260.2764C188.6927,-266.6904 279.7207,-277.2141 358.282,-288 377.9587,-290.7015 399.8321,-294.0678 417.7815,-296.9265"/>
<polygon fill="#8b4513" stroke="#8b4513" points="417.4219,-300.4135 427.8502,-298.5422 418.531,-293.5019 417.4219,-300.4135"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M486.0958,-382C486.0958,-382 423.6576,-382 423.6576,-382 417.6576,-382 411.6576,-376 411.6576,-370 411.6576,-370 411.6576,-358 411.6576,-358 411.6576,-352 417.6576,-346 423.6576,-346 423.6576,-346 486.0958,-346 486.0958,-346 492.0958,-346 498.0958,-352 498.0958,-358 498.0958,-358 498.0958,-370 498.0958,-370 498.0958,-376 492.0958,-382 486.0958,-382"/>
<text text-anchor="middle" x="454.8767" y="-359.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge6"><a xlink:title="at session_tag.go:46: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M131.2724,-266.5243C153.9314,-271.4027 180.1613,-277.0098 203.972,-282 256.0581,-292.9162 270.5316,-289.9837 321.282,-306 323.5049,-306.7015 367.5162,-325.8491 404.4234,-341.9537"/>
<polygon fill="#8b4513" stroke="#8b4513" points="403.0586,-345.1769 413.6238,-345.9695 405.8589,-338.7613 403.0586,-345.1769"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node10" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node10"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M281.449,-382C281.449,-382 243.805,-382 243.805,-382 237.805,-382 231.805,-376 231.805,-370 231.805,-370 231.805,-358 231.805,-358 231.805,-352 237.805,-346 243.805,-346 243.805,-346 281.449,-346 281.449,-346 287.449,-346 293.449,-352 293.449,-358 293.449,-358 293.449,-370 293.449,-370 293.449,-376 287.449,-382 281.449,-382"/>
<text text-anchor="middle" x="262.627" y="-359.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge1"><a xlink:title="at session_tag.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:48: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M96.9635,-272.3213C122.3103,-291.4932 164.3866,-321.5879 203.972,-342 209.7447,-344.9767 216.016,-347.7618 222.2391,-350.2827"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.3108,-353.6761 231.9001,-354.0162 223.8341,-347.1467 221.3108,-353.6761"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M470.4666,-138C470.4666,-138 439.2868,-138 439.2868,-138 433.2868,-138 427.2868,-132 427.2868,-126 427.2868,-126 427.2868,-114 427.2868,-114 427.2868,-108 433.2868,-102 439.2868,-102 439.2868,-102 470.4666,-102 470.4666,-102 476.4666,-102 482.4666,-108 482.4666,-114 482.4666,-114 482.4666,-126 482.4666,-126 482.4666,-132 476.4666,-138 470.4666,-138"/>
<text text-anchor="middle" x="454.8767" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge2"><a xlink:title="at session_tag.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M321.3529,-133.8907C352.4502,-130.6556 389.7343,-126.7769 416.9911,-123.9413"/>
<polygon fill="#8b4513" stroke="#8b4513" points="417.6935,-127.3872 427.2777,-122.8712 416.9692,-120.4248 417.6935,-127.3872"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init | defined in .:0&#10;at session_tag.go:9: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M277.627,-60C277.627,-60 247.627,-60 247.627,-60 241.627,-60 235.627,-54 235.627,-48 235.627,-48 235.627,-36 235.627,-36 235.627,-30 241.627,-24 247.627,-24 247.627,-24 277.627,-24 277.627,-24 283.627,-24 289.627,-30 289.627,-36 289.627,-36 289.627,-48 289.627,-48 289.627,-54 283.627,-60 277.627,-60"/>
<text text-anchor="middle" x="262.627" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M503.5662,-60C503.5662,-60 406.1872,-60 406.1872,-60 400.1872,-60 394.1872,-54 394.1872,-48 394.1872,-48 394.1872,-36 394.1872,-36 394.1872,-30 400.1872,-24 406.1872,-24 406.1872,-24 503.5662,-24 503.5662,-24 509.5662,-24 515.5662,-30 515.5662,-36 515.5662,-36 515.5662,-48 515.5662,-48 515.5662,-54 509.5662,-60 503.5662,-60"/>
<text text-anchor="middle" x="454.8767" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge7"><a xlink:title="at session_tag.go:9: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M289.7639,-42C314.2457,-42 351.3461,-42 384.1812,-42"/>
<polygon fill="#8b4513" stroke="#8b4513" points="384.2158,-45.5001 394.2157,-42 384.2157,-38.5001 384.2158,-45.5001"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -22,6 +22,21 @@ const (
```
Lengths of signature keys
```go
const (
SIGNATURE_TYPE_DSA_SHA1 = 0
SIGNATURE_TYPE_ECDSA_SHA256_P256 = 1
SIGNATURE_TYPE_ECDSA_SHA384_P384 = 2
SIGNATURE_TYPE_ECDSA_SHA512_P521 = 3
SIGNATURE_TYPE_RSA_SHA256_2048 = 4
SIGNATURE_TYPE_RSA_SHA384_3072 = 5
SIGNATURE_TYPE_RSA_SHA512_4096 = 6
SIGNATURE_TYPE_EDDSA_SHA512_ED25519 = 7
SIGNATURE_TYPE_EDDSA_SHA512_ED25519PH = 8
SIGNATURE_TYPE_REDDSA_SHA512_ED25519 = 11
)
```
#### type Signature
```go
@ -35,7 +50,7 @@ https://geti2p.net/spec/common-structures#signature
#### func NewSignature
```go
func NewSignature(data []byte) (session_tag *Signature, remainder []byte, err error)
func NewSignature(data []byte, sigType int) (signature *Signature, remainder []byte, err error)
```
NewSignature creates a new *Signature from []byte using ReadSignature. Returns a
pointer to Signature unlike ReadSignature.
@ -43,8 +58,96 @@ pointer to Signature unlike ReadSignature.
#### func ReadSignature
```go
func ReadSignature(bytes []byte) (info Signature, remainder []byte, err error)
func ReadSignature(data []byte, sigType int) (sig Signature, remainder []byte, err error)
```
ReadSignature returns Signature from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
ReadSignature returns a Signature from a []byte. The remaining bytes after the
specified length are also returned. Returns an error if there is insufficient
data to read the signature.
Since the signature type and length are inferred from context (the type of key
used), and are not explicitly stated, this function assumes the default
signature type (DSA_SHA1) with a length of 40 bytes.
If a different signature type is expected based on context, this function should
be modified accordingly to handle the correct signature length.
# signature
--
import "github.com/go-i2p/go-i2p/lib/common/signature"
Package signature implements the I2P Signature common data structure
![signature.svg](signature)
## Usage
```go
const (
DSA_SHA1_SIZE = 40
ECDSA_SHA256_P256_SIZE = 64
ECDSA_SHA384_P384_SIZE = 96
ECDSA_SHA512_P512_SIZE = 132
RSA_SHA256_2048_SIZE = 256
RSA_SHA384_3072_SIZE = 384
RSA_SHA512_4096_SIZE = 512
EdDSA_SHA512_Ed25519_SIZE = 64
EdDSA_SHA512_Ed25519ph_SIZE = 64
RedDSA_SHA512_Ed25519_SIZE = 64
)
```
Lengths of signature keys
```go
const (
SIGNATURE_TYPE_DSA_SHA1 = 0
SIGNATURE_TYPE_ECDSA_SHA256_P256 = 1
SIGNATURE_TYPE_ECDSA_SHA384_P384 = 2
SIGNATURE_TYPE_ECDSA_SHA512_P521 = 3
SIGNATURE_TYPE_RSA_SHA256_2048 = 4
SIGNATURE_TYPE_RSA_SHA384_3072 = 5
SIGNATURE_TYPE_RSA_SHA512_4096 = 6
SIGNATURE_TYPE_EDDSA_SHA512_ED25519 = 7
SIGNATURE_TYPE_EDDSA_SHA512_ED25519PH = 8
SIGNATURE_TYPE_REDDSA_SHA512_ED25519 = 11
)
```
#### type Signature
```go
type Signature []byte
```
Signature is the represenation of an I2P Signature.
https://geti2p.net/spec/common-structures#signature
#### func NewSignature
```go
func NewSignature(data []byte, sigType int) (signature *Signature, remainder []byte, err error)
```
NewSignature creates a new *Signature from []byte using ReadSignature. Returns a
pointer to Signature unlike ReadSignature.
#### func ReadSignature
```go
func ReadSignature(data []byte, sigType int) (sig Signature, remainder []byte, err error)
```
ReadSignature returns a Signature from a []byte. The remaining bytes after the
specified length are also returned. Returns an error if there is insufficient
data to read the signature.
Since the signature type and length are inferred from context (the type of key
used), and are not explicitly stated, this function assumes the default
signature type (DSA_SHA1) with a length of 40 bytes.
If a different signature type is expected based on context, this function should
be modified accordingly to handle the correct signature length.
signature
github.com/go-i2p/go-i2p/lib/common/signature

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="518pt" height="506pt"
viewBox="0.00 0.00 517.69 506.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 506)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-506 517.6902,-506 517.6902,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-498 509.6902,-498 509.6902,-8 8,-8"/>
<text text-anchor="middle" x="258.8451" y="-477.8" font-family="Arial" font-size="18.00" fill="#000000">signature</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="199.6305,-339 199.6305,-460 292.9517,-460 292.9517,-339 199.6305,-339"/>
<text text-anchor="middle" x="246.2911" y="-441.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M219.6305,-347C219.6305,-347 272.9517,-347 272.9517,-347 278.9517,-347 284.9517,-353 284.9517,-359 284.9517,-359 284.9517,-413 284.9517,-413 284.9517,-419 278.9517,-425 272.9517,-425 272.9517,-425 219.6305,-425 219.6305,-425 213.6305,-425 207.6305,-419 207.6305,-413 207.6305,-413 207.6305,-359 207.6305,-359 207.6305,-353 213.6305,-347 219.6305,-347"/>
<text text-anchor="middle" x="246.2911" y="-355.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="395.998,-16 395.998,-95 470.193,-95 470.193,-16 395.998,-16"/>
<text text-anchor="middle" x="433.0955" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="364.5008,-103 364.5008,-460 501.6902,-460 501.6902,-103 364.5008,-103"/>
<text text-anchor="middle" x="433.0955" y="-441.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M393.9861,-111C393.9861,-111 472.2049,-111 472.2049,-111 478.2049,-111 484.2049,-117 484.2049,-123 484.2049,-123 484.2049,-360 484.2049,-360 484.2049,-366 478.2049,-372 472.2049,-372 472.2049,-372 393.9861,-372 393.9861,-372 387.9861,-372 381.9861,-366 381.9861,-360 381.9861,-360 381.9861,-123 381.9861,-123 381.9861,-117 387.9861,-111 393.9861,-111"/>
<text text-anchor="middle" x="433.0955" y="-119.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature | defined in signature.go:106&#10;at signature.go:107: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at signature.go:114: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at signature.go:107: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:117: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature]&#10;at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M108.1221,-246C108.1221,-246 27.9593,-246 27.9593,-246 21.9593,-246 15.9593,-240 15.9593,-234 15.9593,-234 15.9593,-222 15.9593,-222 15.9593,-216 21.9593,-210 27.9593,-210 27.9593,-210 108.1221,-210 108.1221,-210 114.1221,-210 120.1221,-216 120.1221,-222 120.1221,-222 120.1221,-234 120.1221,-234 120.1221,-240 114.1221,-246 108.1221,-246"/>
<text text-anchor="middle" x="68.0407" y="-223.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSignature</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature | defined in signature.go:66&#10;at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at signature.go:90: calling [github.com/samber/oops.Errorf]&#10;at signature.go:95: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M287.7113,-189C287.7113,-189 204.8709,-189 204.8709,-189 198.8709,-189 192.8709,-183 192.8709,-177 192.8709,-177 192.8709,-165 192.8709,-165 192.8709,-159 198.8709,-153 204.8709,-153 204.8709,-153 287.7113,-153 287.7113,-153 293.7113,-153 299.7113,-159 299.7113,-165 299.7113,-165 299.7113,-177 299.7113,-177 299.7113,-183 293.7113,-189 287.7113,-189"/>
<text text-anchor="middle" x="246.2911" y="-166.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSignature</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature</title>
<g id="a_edge9"><a xlink:title="at signature.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature]">
<path fill="none" stroke="#000000" d="M120.5576,-211.2064C140.2388,-204.9129 162.8027,-197.6975 183.3337,-191.1322"/>
<polygon fill="#000000" stroke="#000000" points="184.457,-194.4477 192.9158,-188.0681 182.3248,-187.7803 184.457,-194.4477"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M461.37,-303C461.37,-303 404.821,-303 404.821,-303 398.821,-303 392.821,-297 392.821,-291 392.821,-291 392.821,-279 392.821,-279 392.821,-273 398.821,-267 404.821,-267 404.821,-267 461.37,-267 461.37,-267 467.37,-267 473.37,-273 473.37,-279 473.37,-279 473.37,-291 473.37,-291 473.37,-297 467.37,-303 461.37,-303"/>
<text text-anchor="middle" x="433.0955" y="-280.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge2"><a xlink:title="at signature.go:107: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M120.2622,-232.9298C174.5464,-238.4475 261.8522,-248.4265 336.5008,-262 351.5216,-264.7313 367.71,-268.3254 382.4604,-271.8585"/>
<polygon fill="#8b4513" stroke="#8b4513" points="381.8661,-275.3161 392.4105,-274.2834 383.5236,-268.5151 381.8661,-275.3161"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M461.627,-242C461.627,-242 404.564,-242 404.564,-242 398.564,-242 392.564,-236 392.564,-230 392.564,-230 392.564,-218 392.564,-218 392.564,-212 398.564,-206 404.564,-206 404.564,-206 461.627,-206 461.627,-206 467.627,-206 473.627,-212 473.627,-218 473.627,-218 473.627,-230 473.627,-230 473.627,-236 467.627,-242 461.627,-242"/>
<text text-anchor="middle" x="433.0955" y="-219.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge10"><a xlink:title="at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M120.3442,-227.4269C190.1967,-226.6615 313.143,-225.3144 382.2484,-224.5571"/>
<polygon fill="#8b4513" stroke="#8b4513" points="382.4898,-228.0548 392.4508,-224.4454 382.4131,-221.0552 382.4898,-228.0548"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M448.0955,-181C448.0955,-181 418.0955,-181 418.0955,-181 412.0955,-181 406.0955,-175 406.0955,-169 406.0955,-169 406.0955,-157 406.0955,-157 406.0955,-151 412.0955,-145 418.0955,-145 418.0955,-145 448.0955,-145 448.0955,-145 454.0955,-145 460.0955,-151 460.0955,-157 460.0955,-157 460.0955,-169 460.0955,-169 460.0955,-175 454.0955,-181 448.0955,-181"/>
<text text-anchor="middle" x="433.0955" y="-158.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge5"><a xlink:title="at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M86.3702,-209.6972C109.1193,-188.4054 150.1838,-154.4553 193.0814,-141 262.5984,-119.1953 348.5806,-137.2279 396.4731,-150.9947"/>
<polygon fill="#8b4513" stroke="#8b4513" points="395.5125,-154.3604 406.0951,-153.8518 397.5051,-147.65 395.5125,-154.3604"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M464.3146,-364C464.3146,-364 401.8764,-364 401.8764,-364 395.8764,-364 389.8764,-358 389.8764,-352 389.8764,-352 389.8764,-340 389.8764,-340 389.8764,-334 395.8764,-328 401.8764,-328 401.8764,-328 464.3146,-328 464.3146,-328 470.3146,-328 476.3146,-334 476.3146,-340 476.3146,-340 476.3146,-352 476.3146,-352 476.3146,-358 470.3146,-364 464.3146,-364"/>
<text text-anchor="middle" x="433.0955" y="-341.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge6"><a xlink:title="at signature.go:114: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M120.2399,-239.7175C183.2108,-253.9602 282.754,-276.8577 299.5008,-283 329.9182,-294.1563 335.2023,-302.1698 364.5008,-316 369.9224,-318.5592 375.6171,-321.1702 381.3106,-323.731"/>
<polygon fill="#8b4513" stroke="#8b4513" points="380.2835,-327.105 390.8426,-327.9756 383.1311,-320.7103 380.2835,-327.105"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node10" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node10"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M265.1131,-417C265.1131,-417 227.4691,-417 227.4691,-417 221.4691,-417 215.4691,-411 215.4691,-405 215.4691,-405 215.4691,-393 215.4691,-393 215.4691,-387 221.4691,-381 227.4691,-381 227.4691,-381 265.1131,-381 265.1131,-381 271.1131,-381 277.1131,-387 277.1131,-393 277.1131,-393 277.1131,-405 277.1131,-405 277.1131,-411 271.1131,-417 265.1131,-417"/>
<text text-anchor="middle" x="246.2911" y="-394.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge7"><a xlink:title="at signature.go:107: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:117: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M78.981,-246.0114C98.4395,-276.7093 141.869,-339.4772 193.0814,-377 197.0552,-379.9116 201.4709,-382.5174 206.0111,-384.8274"/>
<polygon fill="#8b4513" stroke="#8b4513" points="204.8568,-388.1492 215.4036,-389.1564 207.7869,-381.7919 204.8568,-388.1492"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge3"><a xlink:title="at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M299.5717,-186.1167C325.6573,-193.5177 356.8978,-202.3812 382.6,-209.6735"/>
<polygon fill="#8b4513" stroke="#8b4513" points="381.942,-213.1249 392.5177,-212.4873 383.8527,-206.3906 381.942,-213.1249"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge4"><a xlink:title="at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M299.5717,-168.7182C330.3627,-167.3996 368.336,-165.7734 395.9054,-164.5927"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.0845,-168.0883 405.9255,-164.1636 395.7849,-161.0947 396.0845,-168.0883"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node9" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node9"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M450.2908,-60C450.2908,-60 415.9002,-60 415.9002,-60 409.9002,-60 403.9002,-54 403.9002,-48 403.9002,-48 403.9002,-36 403.9002,-36 403.9002,-30 409.9002,-24 415.9002,-24 415.9002,-24 450.2908,-24 450.2908,-24 456.2908,-24 462.2908,-30 462.2908,-36 462.2908,-36 462.2908,-48 462.2908,-48 462.2908,-54 456.2908,-60 450.2908,-60"/>
<text text-anchor="middle" x="433.0955" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge8"><a xlink:title="at signature.go:90: calling [github.com/samber/oops.Errorf]&#10;at signature.go:95: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M272.6594,-152.7911C305.6195,-130.0301 362.1179,-91.0144 398.5171,-65.8785"/>
<polygon fill="#8b4513" stroke="#8b4513" points="400.6215,-68.6788 406.8613,-60.1163 396.6438,-62.9187 400.6215,-68.6788"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init | defined in .:0&#10;at signature.go:10: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M261.2911,-331C261.2911,-331 231.2911,-331 231.2911,-331 225.2911,-331 219.2911,-325 219.2911,-319 219.2911,-319 219.2911,-307 219.2911,-307 219.2911,-301 225.2911,-295 231.2911,-295 231.2911,-295 261.2911,-295 261.2911,-295 267.2911,-295 273.2911,-301 273.2911,-307 273.2911,-307 273.2911,-319 273.2911,-319 273.2911,-325 267.2911,-331 261.2911,-331"/>
<text text-anchor="middle" x="246.2911" y="-308.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.785,-425C481.785,-425 384.406,-425 384.406,-425 378.406,-425 372.406,-419 372.406,-413 372.406,-413 372.406,-401 372.406,-401 372.406,-395 378.406,-389 384.406,-389 384.406,-389 481.785,-389 481.785,-389 487.785,-389 493.785,-395 493.785,-401 493.785,-401 493.785,-413 493.785,-413 493.785,-419 487.785,-425 481.785,-425"/>
<text text-anchor="middle" x="433.0955" y="-402.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge1"><a xlink:title="at signature.go:10: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M273.4527,-327.072C281.836,-331.4744 291.0772,-336.3878 299.5008,-341 328.6578,-356.9643 334.6962,-363.2802 364.5008,-378 369.0926,-380.2678 373.9055,-382.528 378.7614,-384.7288"/>
<polygon fill="#8b4513" stroke="#8b4513" points="377.5451,-388.0181 388.1053,-388.874 380.3837,-381.6195 377.5451,-388.0181"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

498
lib/config/config.svg Normal file
View File

@ -0,0 +1,498 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="673pt" height="1038pt"
viewBox="0.00 0.00 672.82 1038.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1038)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1038 672.8192,-1038 672.8192,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1030 664.8192,-1030 664.8192,-8 8,-8"/>
<text text-anchor="middle" x="336.4096" y="-1009.8" font-family="Arial" font-size="18.00" fill="#000000">config</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_gopkg.in/yaml.v3</title>
<g id="a_clust7"><a xlink:href="/?f=gopkg.in/yaml.v3" xlink:title="package: gopkg.in/yaml.v3">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="199.1031,-804 199.1031,-883 284.9727,-883 284.9727,-804 199.1031,-804"/>
<text text-anchor="middle" x="242.0379" y="-864.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">yaml</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/spf13/viper</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/spf13/viper" xlink:title="package: github.com/spf13/viper">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="392.1291,-364 392.1291,-992 522.3311,-992 522.3311,-364 392.1291,-364"/>
<text text-anchor="middle" x="457.2301" y="-973.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">viper</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="193.047,-402 193.047,-584 291.0288,-584 291.0288,-402 193.047,-402"/>
<text text-anchor="middle" x="242.0379" y="-565.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M213.047,-410C213.047,-410 271.0288,-410 271.0288,-410 277.0288,-410 283.0288,-416 283.0288,-422 283.0288,-422 283.0288,-537 283.0288,-537 283.0288,-543 277.0288,-549 271.0288,-549 271.0288,-549 213.047,-549 213.047,-549 207.047,-549 201.047,-543 201.047,-537 201.047,-537 201.047,-422 201.047,-422 201.047,-416 207.047,-410 213.047,-410"/>
<text text-anchor="middle" x="242.0379" y="-418.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="388.6354,-191 388.6354,-356 525.8248,-356 525.8248,-191 388.6354,-191"/>
<text text-anchor="middle" x="457.2301" y="-337.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M431.3549,-243C431.3549,-243 484.1053,-243 484.1053,-243 490.1053,-243 496.1053,-249 496.1053,-255 496.1053,-255 496.1053,-309 496.1053,-309 496.1053,-315 490.1053,-321 484.1053,-321 484.1053,-321 431.3549,-321 431.3549,-321 425.3549,-321 419.3549,-315 419.3549,-309 419.3549,-309 419.3549,-255 419.3549,-255 419.3549,-249 425.3549,-243 431.3549,-243"/>
<text text-anchor="middle" x="457.7301" y="-251.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig | defined in config.go:19&#10;at config.go:76: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig]&#10;at config.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:42: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:43: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:31: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:49: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:54: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:72: calling [github.com/spf13/viper.ConfigFileUsed]&#10;at config.go:25: calling [github.com/spf13/viper.SetConfigFile]&#10;at config.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults]&#10;at config.go:69: calling [github.com/spf13/viper.ReadInConfig]&#10;at config.go:61: calling [github.com/spf13/viper.AddConfigPath]&#10;at config.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:72: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:63: calling [github.com/spf13/viper.SetConfigType]&#10;at config.go:47: calling [gopkg.in/yaml.v3.Marshal]&#10;at config.go:70: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]&#10;at config.go:62: calling [github.com/spf13/viper.SetConfigName]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M86.4951,-611C86.4951,-611 27.8345,-611 27.8345,-611 21.8345,-611 15.8345,-605 15.8345,-599 15.8345,-599 15.8345,-587 15.8345,-587 15.8345,-581 21.8345,-575 27.8345,-575 27.8345,-575 86.4951,-575 86.4951,-575 92.4951,-575 98.4951,-581 98.4951,-587 98.4951,-587 98.4951,-599 98.4951,-599 98.4951,-605 92.4951,-611 86.4951,-611"/>
<text text-anchor="middle" x="57.1648" y="-588.8" font-family="Verdana" font-size="14.00" fill="#000000">InitConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults | defined in config.go:79&#10;at config.go:81: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:82: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:85: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:88: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:89: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:81: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:82: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M273.5099,-313C273.5099,-313 210.5659,-313 210.5659,-313 204.5659,-313 198.5659,-307 198.5659,-301 198.5659,-301 198.5659,-289 198.5659,-289 198.5659,-283 204.5659,-277 210.5659,-277 210.5659,-277 273.5099,-277 273.5099,-277 279.5099,-277 285.5099,-283 285.5099,-289 285.5099,-289 285.5099,-301 285.5099,-301 285.5099,-307 279.5099,-313 273.5099,-313"/>
<text text-anchor="middle" x="242.0379" y="-290.8" font-family="Verdana" font-size="14.00" fill="#000000">setDefaults</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults</title>
<g id="a_edge12"><a xlink:title="at config.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults]">
<path fill="none" stroke="#000000" d="M60.2837,-574.979C69.7884,-521.9654 99.8539,-368.0065 134.3296,-332 148.5938,-317.1024 169.1175,-308.2023 188.4309,-302.8856"/>
<polygon fill="#000000" stroke="#000000" points="189.5166,-306.2224 198.3806,-300.4191 187.8322,-299.4281 189.5166,-306.2224"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig | defined in router.go:44">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M516.6979,-174C516.6979,-174 397.7623,-174 397.7623,-174 391.7623,-174 385.7623,-168 385.7623,-162 385.7623,-162 385.7623,-150 385.7623,-150 385.7623,-144 391.7623,-138 397.7623,-138 397.7623,-138 516.6979,-138 516.6979,-138 522.6979,-138 528.6979,-144 528.6979,-150 528.6979,-150 528.6979,-162 528.6979,-162 528.6979,-168 522.6979,-174 516.6979,-174"/>
<text text-anchor="middle" x="457.2301" y="-151.8" font-family="Verdana" font-size="14.00" fill="#000000">DefaultRouterConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge5"><a xlink:title="at config.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:42: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:43: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M60.8993,-574.9681C74.2062,-512.4871 121.1951,-306.7929 171.3296,-265 230.3689,-215.7839 314.0043,-187.3812 375.5705,-171.9867"/>
<polygon fill="#000000" stroke="#000000" points="376.7513,-175.3016 385.6395,-169.5353 375.0954,-168.5002 376.7513,-175.3016"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig | defined in config.go:92&#10;at config.go:94: calling [github.com/spf13/viper.GetString]&#10;at config.go:95: calling [github.com/spf13/viper.GetString]&#10;at config.go:99: calling [github.com/spf13/viper.GetString]&#10;at config.go:110: calling [github.com/spf13/viper.GetInt]&#10;at config.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]&#10;at config.go:104: calling [github.com/spf13/viper.UnmarshalKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M300.9551,-655C300.9551,-655 183.1207,-655 183.1207,-655 177.1207,-655 171.1207,-649 171.1207,-643 171.1207,-643 171.1207,-631 171.1207,-631 171.1207,-625 177.1207,-619 183.1207,-619 183.1207,-619 300.9551,-619 300.9551,-619 306.9551,-619 312.9551,-625 312.9551,-631 312.9551,-631 312.9551,-643 312.9551,-643 312.9551,-649 306.9551,-655 300.9551,-655"/>
<text text-anchor="middle" x="242.0379" y="-632.8" font-family="Verdana" font-size="14.00" fill="#000000">UpdateRouterConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig</title>
<g id="a_edge2"><a xlink:title="at config.go:76: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig]">
<path fill="none" stroke="#000000" d="M98.6539,-602.8745C117.2101,-607.2909 139.7498,-612.6553 161.4101,-617.8105"/>
<polygon fill="#000000" stroke="#000000" points="160.7441,-621.2497 171.2828,-620.1602 162.3649,-614.4399 160.7441,-621.2497"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warnf | defined in log.go:36">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M474.981,-313C474.981,-313 439.4792,-313 439.4792,-313 433.4792,-313 427.4792,-307 427.4792,-301 427.4792,-301 427.4792,-289 427.4792,-289 427.4792,-283 433.4792,-277 439.4792,-277 439.4792,-277 474.981,-277 474.981,-277 480.981,-277 486.981,-283 486.981,-289 486.981,-289 486.981,-301 486.981,-301 486.981,-307 480.981,-313 474.981,-313"/>
<text text-anchor="middle" x="457.2301" y="-290.8" font-family="Verdana" font-size="14.00" fill="#000000">Warnf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="edge21" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_edge21"><a xlink:title="at config.go:70: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]">
<path fill="none" stroke="#8b4513" d="M60.8787,-574.9279C70.5959,-532.7388 101.0424,-427.7993 171.3296,-381 212.1617,-353.8128 348.9123,-319.8137 417.417,-303.939"/>
<polygon fill="#8b4513" stroke="#8b4513" points="418.4446,-307.2941 427.4052,-301.6409 416.875,-300.4723 418.4446,-307.2941"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Fatalf -->
<g id="node11" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Fatalf</title>
<g id="a_node11"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Fatalf | defined in logger.go:189">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M258.1926,-480C258.1926,-480 225.8832,-480 225.8832,-480 219.8832,-480 213.8832,-474 213.8832,-468 213.8832,-468 213.8832,-456 213.8832,-456 213.8832,-450 219.8832,-444 225.8832,-444 225.8832,-444 258.1926,-444 258.1926,-444 264.1926,-444 270.1926,-450 270.1926,-456 270.1926,-456 270.1926,-468 270.1926,-468 270.1926,-474 264.1926,-480 258.1926,-480"/>
<text text-anchor="middle" x="242.0379" y="-457.8" font-family="Verdana" font-size="14.00" fill="#000000">Fatalf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Fatalf -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Fatalf</title>
<g id="a_edge6"><a xlink:title="at config.go:31: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:49: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:54: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]">
<path fill="none" stroke="#8b4513" d="M74.3623,-574.8621C95.5878,-553.2435 133.5286,-517.0307 171.3296,-493 181.5656,-486.4928 193.4002,-480.7125 204.4242,-475.9583"/>
<polygon fill="#8b4513" stroke="#8b4513" points="205.9466,-479.116 213.8427,-472.052 203.2648,-472.6501 205.9466,-479.116"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debugf -->
<g id="node12" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debugf</title>
<g id="a_node12"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debugf | defined in logger.go:163">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M263.0197,-541C263.0197,-541 221.0561,-541 221.0561,-541 215.0561,-541 209.0561,-535 209.0561,-529 209.0561,-529 209.0561,-517 209.0561,-517 209.0561,-511 215.0561,-505 221.0561,-505 221.0561,-505 263.0197,-505 263.0197,-505 269.0197,-505 275.0197,-511 275.0197,-517 275.0197,-517 275.0197,-529 275.0197,-529 275.0197,-535 269.0197,-541 263.0197,-541"/>
<text text-anchor="middle" x="242.0379" y="-518.8" font-family="Verdana" font-size="14.00" fill="#000000">Debugf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debugf -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debugf</title>
<g id="a_edge15"><a xlink:title="at config.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:72: calling [(*github.com/sirupsen/logrus.Logger).Debugf]">
<path fill="none" stroke="#8b4513" d="M97.4728,-574.9339C119.1598,-565.4988 146.4853,-554.0639 171.3296,-545 180.199,-541.7642 189.7985,-538.5744 198.9793,-535.6706"/>
<polygon fill="#8b4513" stroke="#8b4513" points="200.2116,-538.9528 208.7228,-532.6432 198.1346,-532.2681 200.2116,-538.9528"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigFile -->
<g id="node13" class="node">
<title>github.com/spf13/viper.SetConfigFile</title>
<g id="a_node13"><a xlink:title="github.com/spf13/viper.SetConfigFile | defined in viper.go:509">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M496.2851,-774C496.2851,-774 418.1751,-774 418.1751,-774 412.1751,-774 406.1751,-768 406.1751,-762 406.1751,-762 406.1751,-750 406.1751,-750 406.1751,-744 412.1751,-738 418.1751,-738 418.1751,-738 496.2851,-738 496.2851,-738 502.2851,-738 508.2851,-744 508.2851,-750 508.2851,-750 508.2851,-762 508.2851,-762 508.2851,-768 502.2851,-774 496.2851,-774"/>
<text text-anchor="middle" x="457.2301" y="-751.8" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigFile</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigFile -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigFile</title>
<g id="a_edge10"><a xlink:title="at config.go:25: calling [github.com/spf13/viper.SetConfigFile]">
<path fill="none" stroke="#8b4513" d="M80.4933,-611.1796C102.7855,-627.8412 137.8571,-652.2451 171.3296,-668 191.9452,-677.7034 318.6528,-715.458 396.307,-738.2442"/>
<polygon fill="#8b4513" stroke="#8b4513" points="395.4087,-741.628 405.9895,-741.0823 397.3778,-734.9107 395.4087,-741.628"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.ReadInConfig -->
<g id="node15" class="node">
<title>github.com/spf13/viper.ReadInConfig</title>
<g id="a_node15"><a xlink:title="github.com/spf13/viper.ReadInConfig | defined in viper.go:1632">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M497.0448,-835C497.0448,-835 417.4154,-835 417.4154,-835 411.4154,-835 405.4154,-829 405.4154,-823 405.4154,-823 405.4154,-811 405.4154,-811 405.4154,-805 411.4154,-799 417.4154,-799 417.4154,-799 497.0448,-799 497.0448,-799 503.0448,-799 509.0448,-805 509.0448,-811 509.0448,-811 509.0448,-823 509.0448,-823 509.0448,-829 503.0448,-835 497.0448,-835"/>
<text text-anchor="middle" x="457.2301" y="-812.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadInConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ReadInConfig -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ReadInConfig</title>
<g id="a_edge13"><a xlink:title="at config.go:69: calling [github.com/spf13/viper.ReadInConfig]">
<path fill="none" stroke="#8b4513" d="M72.3319,-611.0539C92.6366,-634.1324 130.8196,-673.863 171.3296,-697 243.3839,-738.1534 278.3696,-709.6821 349.7462,-752 368.9415,-763.3805 367.1334,-774.6899 385.7462,-787 389.6788,-789.6009 393.8736,-792.0518 398.1854,-794.3449"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.6437,-797.4872 407.1533,-798.828 399.7737,-791.2259 396.6437,-797.4872"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.AddConfigPath -->
<g id="node16" class="node">
<title>github.com/spf13/viper.AddConfigPath</title>
<g id="a_node16"><a xlink:title="github.com/spf13/viper.AddConfigPath | defined in viper.go:574">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M501.1124,-896C501.1124,-896 413.3478,-896 413.3478,-896 407.3478,-896 401.3478,-890 401.3478,-884 401.3478,-884 401.3478,-872 401.3478,-872 401.3478,-866 407.3478,-860 413.3478,-860 413.3478,-860 501.1124,-860 501.1124,-860 507.1124,-860 513.1124,-866 513.1124,-872 513.1124,-872 513.1124,-884 513.1124,-884 513.1124,-890 507.1124,-896 501.1124,-896"/>
<text text-anchor="middle" x="457.2301" y="-873.8" font-family="Verdana" font-size="14.00" fill="#000000">AddConfigPath</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.AddConfigPath -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.AddConfigPath</title>
<g id="a_edge14"><a xlink:title="at config.go:61: calling [github.com/spf13/viper.AddConfigPath]">
<path fill="none" stroke="#8b4513" d="M68.5364,-611.1945C86.8449,-639.0334 125.484,-692.1087 171.3296,-722 241.0618,-767.4654 286.054,-725.3998 349.7462,-779 376.2114,-801.2719 360.2877,-824.584 385.7462,-848 388.3001,-850.349 391.0646,-852.5291 393.9714,-854.5506"/>
<polygon fill="#8b4513" stroke="#8b4513" points="392.1414,-857.5341 402.4833,-859.8358 395.834,-851.5873 392.1414,-857.5341"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigName -->
<g id="node17" class="node">
<title>github.com/spf13/viper.SetConfigName</title>
<g id="a_node17"><a xlink:title="github.com/spf13/viper.SetConfigName | defined in viper.go:2174">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M502.4323,-957C502.4323,-957 412.0279,-957 412.0279,-957 406.0279,-957 400.0279,-951 400.0279,-945 400.0279,-945 400.0279,-933 400.0279,-933 400.0279,-927 406.0279,-921 412.0279,-921 412.0279,-921 502.4323,-921 502.4323,-921 508.4323,-921 514.4323,-927 514.4323,-933 514.4323,-933 514.4323,-945 514.4323,-945 514.4323,-951 508.4323,-957 502.4323,-957"/>
<text text-anchor="middle" x="457.2301" y="-934.8" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigName</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigName -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigName</title>
<g id="a_edge25"><a xlink:title="at config.go:62: calling [github.com/spf13/viper.SetConfigName]">
<path fill="none" stroke="#8b4513" d="M70.0672,-611.1574C85.2269,-632.3895 111.2451,-668.5125 134.3296,-699 150.3779,-720.1948 149.8188,-730.3779 171.3296,-746 225.514,-785.3513 260.2861,-756.3777 312.7462,-798 359.0016,-834.6995 340.3279,-871.2694 385.7462,-909 388.6611,-911.4215 391.7996,-913.6733 395.0771,-915.7634"/>
<polygon fill="#8b4513" stroke="#8b4513" points="393.6092,-918.9572 404.0199,-920.9237 397.1078,-912.8942 393.6092,-918.9572"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigType -->
<g id="node18" class="node">
<title>github.com/spf13/viper.SetConfigType</title>
<g id="a_node18"><a xlink:title="github.com/spf13/viper.SetConfigType | defined in viper.go:2185">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M499.7739,-469C499.7739,-469 414.6863,-469 414.6863,-469 408.6863,-469 402.6863,-463 402.6863,-457 402.6863,-457 402.6863,-445 402.6863,-445 402.6863,-439 408.6863,-433 414.6863,-433 414.6863,-433 499.7739,-433 499.7739,-433 505.7739,-433 511.7739,-439 511.7739,-445 511.7739,-445 511.7739,-457 511.7739,-457 511.7739,-463 505.7739,-469 499.7739,-469"/>
<text text-anchor="middle" x="457.2301" y="-446.8" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigType -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigType</title>
<g id="a_edge19"><a xlink:title="at config.go:63: calling [github.com/spf13/viper.SetConfigType]">
<path fill="none" stroke="#8b4513" d="M61.6599,-574.9369C72.5967,-535.3689 104.7238,-441.581 171.3296,-404 226.0692,-373.1142 250.6699,-394.1573 312.7462,-404 343.8381,-408.9299 377.3414,-419.4778 404.2506,-429.3342"/>
<polygon fill="#8b4513" stroke="#8b4513" points="403.257,-432.6993 413.8495,-432.9225 405.7081,-426.1424 403.257,-432.6993"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.ConfigFileUsed -->
<g id="node22" class="node">
<title>github.com/spf13/viper.ConfigFileUsed</title>
<g id="a_node22"><a xlink:title="github.com/spf13/viper.ConfigFileUsed | defined in viper.go:569">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M502.1629,-530C502.1629,-530 412.2973,-530 412.2973,-530 406.2973,-530 400.2973,-524 400.2973,-518 400.2973,-518 400.2973,-506 400.2973,-506 400.2973,-500 406.2973,-494 412.2973,-494 412.2973,-494 502.1629,-494 502.1629,-494 508.1629,-494 514.1629,-500 514.1629,-506 514.1629,-506 514.1629,-518 514.1629,-518 514.1629,-524 508.1629,-530 502.1629,-530"/>
<text text-anchor="middle" x="457.2301" y="-507.8" font-family="Verdana" font-size="14.00" fill="#000000">ConfigFileUsed</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ConfigFileUsed -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ConfigFileUsed</title>
<g id="a_edge8"><a xlink:title="at config.go:72: calling [github.com/spf13/viper.ConfigFileUsed]">
<path fill="none" stroke="#8b4513" d="M98.6619,-588.6615C149.5003,-582.927 238.0781,-571.5743 312.7462,-555 339.4743,-549.0671 368.4853,-540.8025 393.4501,-533.1026"/>
<polygon fill="#8b4513" stroke="#8b4513" points="394.6589,-536.3919 403.1631,-530.0729 392.5745,-529.7094 394.6589,-536.3919"/>
</a>
</g>
</g>
<!-- gopkg.in/yaml.v3.Marshal -->
<g id="node23" class="node">
<title>gopkg.in/yaml.v3.Marshal</title>
<g id="a_node23"><a xlink:title="gopkg.in/yaml.v3.Marshal | defined in yaml.go:218">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M264.9076,-848C264.9076,-848 219.1682,-848 219.1682,-848 213.1682,-848 207.1682,-842 207.1682,-836 207.1682,-836 207.1682,-824 207.1682,-824 207.1682,-818 213.1682,-812 219.1682,-812 219.1682,-812 264.9076,-812 264.9076,-812 270.9076,-812 276.9076,-818 276.9076,-824 276.9076,-824 276.9076,-836 276.9076,-836 276.9076,-842 270.9076,-848 264.9076,-848"/>
<text text-anchor="middle" x="242.0379" y="-825.8" font-family="Verdana" font-size="14.00" fill="#000000">Marshal</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;gopkg.in/yaml.v3.Marshal -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;gopkg.in/yaml.v3.Marshal</title>
<g id="a_edge20"><a xlink:title="at config.go:47: calling [gopkg.in/yaml.v3.Marshal]">
<path fill="none" stroke="#8b4513" d="M59.297,-611.0549C64.7592,-649.5491 82.6661,-740.4543 134.3296,-793 150.9036,-809.857 175.4908,-819.0389 196.9907,-824.0379"/>
<polygon fill="#8b4513" stroke="#8b4513" points="196.425,-827.4952 206.9292,-826.1121 197.8552,-820.6429 196.425,-827.4952"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge18"><a xlink:title="at config.go:81: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:82: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M262.2172,-276.7238C288.9519,-253.1997 338.2853,-212.1336 385.7462,-185 389.712,-182.7327 393.8901,-180.5548 398.1534,-178.4827"/>
<polygon fill="#000000" stroke="#000000" points="399.9691,-181.499 407.5735,-174.1217 397.0284,-175.1467 399.9691,-181.499"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetDefault -->
<g id="node14" class="node">
<title>github.com/spf13/viper.SetDefault</title>
<g id="a_node14"><a xlink:title="github.com/spf13/viper.SetDefault | defined in viper.go:1596">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M487.0956,-408C487.0956,-408 427.3646,-408 427.3646,-408 421.3646,-408 415.3646,-402 415.3646,-396 415.3646,-396 415.3646,-384 415.3646,-384 415.3646,-378 421.3646,-372 427.3646,-372 427.3646,-372 487.0956,-372 487.0956,-372 493.0956,-372 499.0956,-378 499.0956,-384 499.0956,-384 499.0956,-396 499.0956,-396 499.0956,-402 493.0956,-408 487.0956,-408"/>
<text text-anchor="middle" x="457.2301" y="-385.8" font-family="Verdana" font-size="14.00" fill="#000000">SetDefault</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/spf13/viper.SetDefault -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/spf13/viper.SetDefault</title>
<g id="a_edge11"><a xlink:title="at config.go:81: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:82: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:85: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:88: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:89: calling [github.com/spf13/viper.SetDefault]">
<path fill="none" stroke="#8b4513" d="M283.0204,-313.0924C318.3198,-328.6759 369.3895,-351.2214 407.1143,-367.8756"/>
<polygon fill="#8b4513" stroke="#8b4513" points="405.8384,-371.1382 416.4002,-371.975 408.6655,-364.7344 405.8384,-371.1382"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_edge16"><a xlink:title="at config.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]">
<path fill="none" stroke="#8b4513" d="M260.995,-618.9556C276.601,-603.2612 298.4132,-579.2823 312.7462,-555 360.2096,-474.5896 332.8976,-434.9782 385.7462,-358 395.7483,-343.4312 409.8507,-330.0508 422.8896,-319.4039"/>
<polygon fill="#8b4513" stroke="#8b4513" points="425.1428,-322.0844 430.8245,-313.1418 420.8063,-316.5894 425.1428,-322.0844"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.GetString -->
<g id="node19" class="node">
<title>github.com/spf13/viper.GetString</title>
<g id="a_node19"><a xlink:title="github.com/spf13/viper.GetString | defined in viper.go:975">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M484.6675,-713C484.6675,-713 429.7927,-713 429.7927,-713 423.7927,-713 417.7927,-707 417.7927,-701 417.7927,-701 417.7927,-689 417.7927,-689 417.7927,-683 423.7927,-677 429.7927,-677 429.7927,-677 484.6675,-677 484.6675,-677 490.6675,-677 496.6675,-683 496.6675,-689 496.6675,-689 496.6675,-701 496.6675,-701 496.6675,-707 490.6675,-713 484.6675,-713"/>
<text text-anchor="middle" x="457.2301" y="-690.8" font-family="Verdana" font-size="14.00" fill="#000000">GetString</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.GetString -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.GetString</title>
<g id="a_edge1"><a xlink:title="at config.go:94: calling [github.com/spf13/viper.GetString]&#10;at config.go:95: calling [github.com/spf13/viper.GetString]&#10;at config.go:99: calling [github.com/spf13/viper.GetString]">
<path fill="none" stroke="#8b4513" d="M308.9465,-655.0336C340.9528,-663.6602 378.5922,-673.805 407.9401,-681.715"/>
<polygon fill="#8b4513" stroke="#8b4513" points="407.3859,-685.1905 417.9522,-684.4136 409.2076,-678.4317 407.3859,-685.1905"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.UnmarshalKey -->
<g id="node20" class="node">
<title>github.com/spf13/viper.UnmarshalKey</title>
<g id="a_node20"><a xlink:title="github.com/spf13/viper.UnmarshalKey | defined in viper.go:1103">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M499.4738,-591C499.4738,-591 414.9864,-591 414.9864,-591 408.9864,-591 402.9864,-585 402.9864,-579 402.9864,-579 402.9864,-567 402.9864,-567 402.9864,-561 408.9864,-555 414.9864,-555 414.9864,-555 499.4738,-555 499.4738,-555 505.4738,-555 511.4738,-561 511.4738,-567 511.4738,-567 511.4738,-579 511.4738,-579 511.4738,-585 505.4738,-591 499.4738,-591"/>
<text text-anchor="middle" x="457.2301" y="-568.8" font-family="Verdana" font-size="14.00" fill="#000000">UnmarshalKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.UnmarshalKey -->
<g id="edge22" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.UnmarshalKey</title>
<g id="a_edge22"><a xlink:title="at config.go:104: calling [github.com/spf13/viper.UnmarshalKey]">
<path fill="none" stroke="#8b4513" d="M302.8405,-618.9168C330.9686,-610.5513 364.3956,-600.6098 392.9411,-592.1201"/>
<polygon fill="#8b4513" stroke="#8b4513" points="394.2305,-595.3882 402.8178,-589.1827 392.2349,-588.6787 394.2305,-595.3882"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.GetInt -->
<g id="node21" class="node">
<title>github.com/spf13/viper.GetInt</title>
<g id="a_node21"><a xlink:title="github.com/spf13/viper.GetInt | defined in viper.go:989">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M474.9936,-652C474.9936,-652 439.4666,-652 439.4666,-652 433.4666,-652 427.4666,-646 427.4666,-640 427.4666,-640 427.4666,-628 427.4666,-628 427.4666,-622 433.4666,-616 439.4666,-616 439.4666,-616 474.9936,-616 474.9936,-616 480.9936,-616 486.9936,-622 486.9936,-628 486.9936,-628 486.9936,-640 486.9936,-640 486.9936,-646 480.9936,-652 474.9936,-652"/>
<text text-anchor="middle" x="457.2301" y="-629.8" font-family="Verdana" font-size="14.00" fill="#000000">GetInt</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.GetInt -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.GetInt</title>
<g id="a_edge7"><a xlink:title="at config.go:110: calling [github.com/spf13/viper.GetInt]">
<path fill="none" stroke="#8b4513" d="M312.7979,-636.0135C347.3833,-635.5314 387.7433,-634.9687 416.9933,-634.5609"/>
<polygon fill="#8b4513" stroke="#8b4513" points="417.2854,-638.0573 427.2356,-634.4182 417.1877,-631.058 417.2854,-638.0573"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig | defined in router.go:32&#10;at router.go:33: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M495.9892,-113C495.9892,-113 418.471,-113 418.471,-113 412.471,-113 406.471,-107 406.471,-101 406.471,-101 406.471,-89 406.471,-89 406.471,-83 412.471,-77 418.471,-77 418.471,-77 495.9892,-77 495.9892,-77 501.9892,-77 507.9892,-83 507.9892,-89 507.9892,-89 507.9892,-101 507.9892,-101 507.9892,-107 501.9892,-113 495.9892,-113"/>
<text text-anchor="middle" x="457.2301" y="-90.8" font-family="Verdana" font-size="14.00" fill="#000000">defaultConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.home | defined in router.go:20">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M644.8719,-73C644.8719,-73 613.6613,-73 613.6613,-73 607.6613,-73 601.6613,-67 601.6613,-61 601.6613,-61 601.6613,-49 601.6613,-49 601.6613,-43 607.6613,-37 613.6613,-37 613.6613,-37 644.8719,-37 644.8719,-37 650.8719,-37 656.8719,-43 656.8719,-49 656.8719,-49 656.8719,-61 656.8719,-61 656.8719,-67 650.8719,-73 644.8719,-73"/>
<text text-anchor="middle" x="629.2666" y="-50.8" font-family="Verdana" font-size="14.00" fill="#000000">home</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_edge9"><a xlink:title="at router.go:33: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="none" stroke="#000000" d="M508.3809,-83.107C535.0739,-76.9006 567.1591,-69.4405 591.5644,-63.7661"/>
<polygon fill="#000000" stroke="#000000" points="592.568,-67.1262 601.5155,-61.4524 590.9826,-60.3081 592.568,-67.1262"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init -->
<g id="node7" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init</title>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.init | defined in .:0&#10;at netdb.go:15: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase]&#10;at config.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]&#10;at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M257.0379,-150C257.0379,-150 227.0379,-150 227.0379,-150 221.0379,-150 215.0379,-144 215.0379,-138 215.0379,-138 215.0379,-126 215.0379,-126 215.0379,-120 221.0379,-114 227.0379,-114 227.0379,-114 257.0379,-114 257.0379,-114 263.0379,-114 269.0379,-120 269.0379,-126 269.0379,-126 269.0379,-138 269.0379,-138 269.0379,-144 263.0379,-150 257.0379,-150"/>
<text text-anchor="middle" x="242.0379" y="-127.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge24" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge24"><a xlink:title="at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M269.2921,-135.0396C295.9735,-138.0153 337.9688,-142.699 375.5004,-146.8848"/>
<polygon fill="#000000" stroke="#000000" points="375.1147,-150.3634 385.441,-147.9935 375.8906,-143.4066 375.1147,-150.3634"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig</title>
<g id="a_edge3"><a xlink:title="at netdb.go:15: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]">
<path fill="none" stroke="#000000" d="M269.2921,-127.3139C301.0545,-121.8527 354.5184,-112.6602 396.3196,-105.4729"/>
<polygon fill="#000000" stroke="#000000" points="397.1406,-108.8832 406.4029,-103.7392 395.9544,-101.9844 397.1406,-108.8832"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase | defined in router.go:28&#10;at router.go:29: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M490.3115,-52C490.3115,-52 424.1487,-52 424.1487,-52 418.1487,-52 412.1487,-46 412.1487,-40 412.1487,-40 412.1487,-28 412.1487,-28 412.1487,-22 418.1487,-16 424.1487,-16 424.1487,-16 490.3115,-16 490.3115,-16 496.3115,-16 502.3115,-22 502.3115,-28 502.3115,-28 502.3115,-40 502.3115,-40 502.3115,-46 496.3115,-52 490.3115,-52"/>
<text text-anchor="middle" x="457.2301" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">defaultBase</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase</title>
<g id="a_edge4"><a xlink:title="at router.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase]">
<path fill="none" stroke="#000000" d="M269.2195,-119.06C298.0428,-105.4012 344.9513,-83.3513 385.7462,-65 392.2768,-62.0623 399.1632,-59.0139 405.979,-56.0263"/>
<polygon fill="#000000" stroke="#000000" points="407.4247,-59.2142 415.1896,-52.006 404.6244,-52.7987 407.4247,-59.2142"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M505.9196,-235C505.9196,-235 408.5406,-235 408.5406,-235 402.5406,-235 396.5406,-229 396.5406,-223 396.5406,-223 396.5406,-211 396.5406,-211 396.5406,-205 402.5406,-199 408.5406,-199 408.5406,-199 505.9196,-199 505.9196,-199 511.9196,-199 517.9196,-205 517.9196,-211 517.9196,-211 517.9196,-223 517.9196,-223 517.9196,-229 511.9196,-235 505.9196,-235"/>
<text text-anchor="middle" x="457.2301" y="-212.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge17"><a xlink:title="at config.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M269.2042,-145.0255C297.8196,-158.4804 344.3799,-179.6249 385.7462,-195 386.1874,-195.164 386.6305,-195.3277 387.0752,-195.4912"/>
<polygon fill="#8b4513" stroke="#8b4513" points="386.0215,-198.8311 396.6162,-198.8776 388.3629,-192.2343 386.0215,-198.8311"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="edge23" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_edge23"><a xlink:title="at router.go:29: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="none" stroke="#000000" d="M502.4307,-39.5175C530.203,-42.9076 565.3654,-47.1998 591.6199,-50.4046"/>
<polygon fill="#000000" stroke="#000000" points="591.2158,-53.8811 601.5663,-51.6187 592.0641,-46.9327 591.2158,-53.8811"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -5,6 +5,16 @@
## Usage
```go
const GOI2P_BASE_DIR = ".go-i2p"
```
```go
var (
CfgFile string
)
```
```go
var DefaultBootstrapConfig = BootstrapConfig{
LowPeerThreshold: 10,
@ -25,6 +35,18 @@ default settings for netdb
var RouterConfigProperties = DefaultRouterConfig()
```
#### func InitConfig
```go
func InitConfig()
```
#### func UpdateRouterConfig
```go
func UpdateRouterConfig()
```
#### type BootstrapConfig
```go
@ -83,3 +105,120 @@ router.config options
```go
func DefaultRouterConfig() *RouterConfig
```
# config
--
import "github.com/go-i2p/go-i2p/lib/config"
![config.svg](config)
## Usage
```go
const GOI2P_BASE_DIR = ".go-i2p"
```
```go
var (
CfgFile string
)
```
```go
var DefaultBootstrapConfig = BootstrapConfig{
LowPeerThreshold: 10,
ReseedServers: []*ReseedConfig{},
}
```
default configuration for network bootstrap
```go
var DefaultNetDbConfig = NetDbConfig{
Path: filepath.Join(defaultConfig(), "netDb"),
}
```
default settings for netdb
```go
var RouterConfigProperties = DefaultRouterConfig()
```
#### func InitConfig
```go
func InitConfig()
```
#### func UpdateRouterConfig
```go
func UpdateRouterConfig()
```
#### type BootstrapConfig
```go
type BootstrapConfig struct {
// if we have less than this many peers we should reseed
LowPeerThreshold int
// reseed servers
ReseedServers []*ReseedConfig
}
```
#### type NetDbConfig
```go
type NetDbConfig struct {
// path to network database directory
Path string
}
```
local network database configuration
#### type ReseedConfig
```go
type ReseedConfig struct {
// url of reseed server
Url string
// fingerprint of reseed su3 signing key
SU3Fingerprint string
}
```
configuration for 1 reseed server
#### type RouterConfig
```go
type RouterConfig struct {
// the path to the base config directory where per-system defaults are stored
BaseDir string
// the path to the working config directory where files are changed
WorkingDir string
// netdb configuration
NetDb *NetDbConfig
// configuration for bootstrapping into the network
Bootstrap *BootstrapConfig
}
```
router.config options
#### func DefaultRouterConfig
```go
func DefaultRouterConfig() *RouterConfig
```
config
github.com/go-i2p/go-i2p/lib/config

13
lib/crypto/crypto.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="0pt" height="0pt"
viewBox="0.00 0.00 0.00 0.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 0)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,0 0,0 0,0 0,0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 584 B

File diff suppressed because it is too large Load Diff

View File

@ -23,11 +23,11 @@ const (
```
```go
var ERR_BUILD_REQUEST_RECORD_NOT_ENOUGH_DATA = errors.New("not enough i2np build request record data")
var ERR_BUILD_REQUEST_RECORD_NOT_ENOUGH_DATA = oops.Errorf("not enough i2np build request record data")
```
```go
var ERR_I2NP_NOT_ENOUGH_DATA = errors.New("not enough i2np header data")
var ERR_I2NP_NOT_ENOUGH_DATA = oops.Errorf("not enough i2np header data")
```
#### func ReadI2NPNTCPData
@ -341,3 +341,356 @@ type VariableTunnelBuildReply struct {
BuildResponseRecords []BuildResponseRecord
}
```
# i2np
--
import "github.com/go-i2p/go-i2p/lib/i2np"
![i2np.svg](i2np)
## Usage
```go
const (
I2NP_MESSAGE_TYPE_DATABASE_STORE = 1
I2NP_MESSAGE_TYPE_DATABASE_LOOKUP = 2
I2NP_MESSAGE_TYPE_DATABASE_SEARCH_REPLY = 3
I2NP_MESSAGE_TYPE_DELIVERY_STATUS = 10
I2NP_MESSAGE_TYPE_GARLIC = 11
I2NP_MESSAGE_TYPE_TUNNEL_DATA = 18
I2NP_MESSAGE_TYPE_TUNNEL_GATEWAY = 19
I2NP_MESSAGE_TYPE_DATA = 20
I2NP_MESSAGE_TYPE_TUNNEL_BUILD = 21
I2NP_MESSAGE_TYPE_TUNNEL_BUILD_REPLY = 22
I2NP_MESSAGE_TYPE_VARIABLE_TUNNEL_BUILD = 23
I2NP_MESSAGE_TYPE_VARIABLE_TUNNEL_BUILD_REPLY = 24
)
```
```go
var ERR_BUILD_REQUEST_RECORD_NOT_ENOUGH_DATA = oops.Errorf("not enough i2np build request record data")
```
```go
var ERR_I2NP_NOT_ENOUGH_DATA = oops.Errorf("not enough i2np header data")
```
#### func ReadI2NPNTCPData
```go
func ReadI2NPNTCPData(data []byte, size int) ([]byte, error)
```
#### func ReadI2NPNTCPMessageChecksum
```go
func ReadI2NPNTCPMessageChecksum(data []byte) (int, error)
```
#### func ReadI2NPNTCPMessageExpiration
```go
func ReadI2NPNTCPMessageExpiration(data []byte) (datalib.Date, error)
```
#### func ReadI2NPNTCPMessageID
```go
func ReadI2NPNTCPMessageID(data []byte) (int, error)
```
#### func ReadI2NPNTCPMessageSize
```go
func ReadI2NPNTCPMessageSize(data []byte) (int, error)
```
#### func ReadI2NPSSUMessageExpiration
```go
func ReadI2NPSSUMessageExpiration(data []byte) (datalib.Date, error)
```
#### func ReadI2NPType
```go
func ReadI2NPType(data []byte) (int, error)
```
#### type BuildRequestRecord
```go
type BuildRequestRecord struct {
ReceiveTunnel tunnel.TunnelID
OurIdent common.Hash
NextTunnel tunnel.TunnelID
NextIdent common.Hash
LayerKey session_key.SessionKey
IVKey session_key.SessionKey
ReplyKey session_key.SessionKey
ReplyIV [16]byte
Flag int
RequestTime time.Time
SendMessageID int
Padding [29]byte
}
```
#### func ReadBuildRequestRecord
```go
func ReadBuildRequestRecord(data []byte) (BuildRequestRecord, error)
```
#### type BuildRequestRecordElGamal
```go
type BuildRequestRecordElGamal [528]byte
```
#### type BuildRequestRecordElGamalAES
```go
type BuildRequestRecordElGamalAES [528]byte
```
#### type BuildResponseRecord
```go
type BuildResponseRecord struct {
Hash common.Hash
Padding [495]byte
Reply byte
}
```
#### type BuildResponseRecordELGamal
```go
type BuildResponseRecordELGamal [528]byte
```
#### type BuildResponseRecordELGamalAES
```go
type BuildResponseRecordELGamalAES [528]byte
```
#### type Data
```go
type Data struct {
Length int
Data []byte
}
```
#### type DatabaseLookup
```go
type DatabaseLookup struct {
Key common.Hash
From common.Hash
Flags byte
ReplyTunnelID [4]byte
Size int
ExcludedPeers []common.Hash
ReplyKey session_key.SessionKey
ReplyTags []session_tag.SessionTag
}
```
#### type DatabaseSearchReply
```go
type DatabaseSearchReply struct {
Key common.Hash
Count int
PeerHashes []common.Hash
From common.Hash
}
```
#### type DatabaseStore
```go
type DatabaseStore struct {
Key common.Hash
Type byte
ReplyToken [4]byte
ReplyTunnelID [4]byte
ReplyGateway common.Hash
Data []byte
}
```
#### type DeliveryStatus
```go
type DeliveryStatus struct {
MessageID int
Timestamp time.Time
}
```
#### type Garlic
```go
type Garlic struct {
Count int
Cloves []GarlicClove
Certificate certificate.Certificate
MessageID int
Expiration time.Time
}
```
#### type GarlicClove
```go
type GarlicClove struct {
DeliveryInstructions GarlicCloveDeliveryInstructions
I2NPMessage I2NPMessage
CloveID int
Expiration time.Time
Certificate certificate.Certificate
}
```
#### type GarlicCloveDeliveryInstructions
```go
type GarlicCloveDeliveryInstructions struct {
Flag byte
SessionKey session_key.SessionKey
Hash common.Hash
TunnelID tunnel.TunnelID
Delay int
}
```
#### type GarlicElGamal
```go
type GarlicElGamal []byte
```
#### type I2NPMessage
```go
type I2NPMessage []byte
```
#### type I2NPNTCPHeader
```go
type I2NPNTCPHeader struct {
Type int
MessageID int
Expiration time.Time
Size int
Checksum int
Data []byte
}
```
#### func ReadI2NPNTCPHeader
```go
func ReadI2NPNTCPHeader(data []byte) (I2NPNTCPHeader, error)
```
Read an entire I2NP message and return the parsed header with embedded encrypted
data
#### type I2NPSSUHeader
```go
type I2NPSSUHeader struct {
Type int
Expiration time.Time
}
```
#### func ReadI2NPSSUHeader
```go
func ReadI2NPSSUHeader(data []byte) (I2NPSSUHeader, error)
```
#### type TunnelBuild
```go
type TunnelBuild [8]BuildRequestRecord
```
#### type TunnelBuildReply
```go
type TunnelBuildReply [8]BuildResponseRecord
```
#### type TunnelData
```go
type TunnelData [1028]byte
```
#### type TunnelGatway
```go
type TunnelGatway struct {
TunnelID tunnel.TunnelID
Length int
Data []byte
}
```
#### type VariableTunnelBuild
```go
type VariableTunnelBuild struct {
Count int
BuildRequestRecords []BuildRequestRecord
}
```
#### type VariableTunnelBuildReply
```go
type VariableTunnelBuildReply struct {
Count int
BuildResponseRecords []BuildResponseRecord
}
```
i2np
github.com/go-i2p/go-i2p/lib/i2np

View File

@ -10,3 +10,25 @@
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/i2np/fuzz/header"
![exportable.svg](exportable)
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
exportable
github.com/go-i2p/go-i2p/lib/i2np/fuzz/header

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="326pt" height="141pt"
viewBox="0.00 0.00 325.50 141.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 141)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-141 325.505,-141 325.505,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-133 317.505,-133 317.505,-8 8,-8"/>
<text text-anchor="middle" x="162.7525" y="-112.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/i2np</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/i2np" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/i2np">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-16 135,-95 309.505,-95 309.505,-16 135,-16"/>
<text text-anchor="middle" x="222.2525" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">i2np</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-60C58,-60 28,-60 28,-60 22,-60 16,-54 16,-48 16,-48 16,-36 16,-36 16,-30 22,-24 28,-24 28,-24 58,-24 58,-24 64,-24 70,-30 70,-36 70,-36 70,-48 70,-48 70,-54 64,-60 58,-60"/>
<text text-anchor="middle" x="43" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader | defined in header.go:97">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M289.2583,-60C289.2583,-60 155.2467,-60 155.2467,-60 149.2467,-60 143.2467,-54 143.2467,-48 143.2467,-48 143.2467,-36 143.2467,-36 143.2467,-30 149.2467,-24 155.2467,-24 155.2467,-24 289.2583,-24 289.2583,-24 295.2583,-24 301.2583,-30 301.2583,-36 301.2583,-36 301.2583,-48 301.2583,-48 301.2583,-54 295.2583,-60 289.2583,-60"/>
<text text-anchor="middle" x="222.2525" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadI2NPNTCPHeader</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader]">
<path fill="none" stroke="#8b4513" d="M70.2246,-42C87.2023,-42 110.1106,-42 132.9875,-42"/>
<polygon fill="#8b4513" stroke="#8b4513" points="133.1223,-45.5001 143.1222,-42 133.1222,-38.5001 133.1223,-45.5001"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

1126
lib/i2np/i2np.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 119 KiB

202
lib/keys/doc.md Normal file
View File

@ -0,0 +1,202 @@
# keys
--
import "github.com/go-i2p/go-i2p/lib/keys"
## Usage
#### type KeyStore
```go
type KeyStore interface {
KeyID() string
// GetKeys returns the public and private keys
GetKeys() (publicKey crypto.PublicKey, privateKey crypto.PrivateKey, err error)
// StoreKeys stores the keys
StoreKeys() error
}
```
KeyStore is an interface for storing and retrieving keys
#### type KeyStoreImpl
```go
type KeyStoreImpl struct {
}
```
#### func NewKeyStoreImpl
```go
func NewKeyStoreImpl(dir, name string, privateKey crypto.PrivateKey) *KeyStoreImpl
```
#### func (*KeyStoreImpl) GetKeys
```go
func (ks *KeyStoreImpl) GetKeys() (crypto.PublicKey, crypto.PrivateKey, error)
```
#### func (*KeyStoreImpl) KeyID
```go
func (ks *KeyStoreImpl) KeyID() string
```
#### func (*KeyStoreImpl) StoreKeys
```go
func (ks *KeyStoreImpl) StoreKeys() error
```
#### type RouterInfoKeystore
```go
type RouterInfoKeystore struct {
*sntp.RouterTimestamper
}
```
RouterInfoKeystore is an implementation of KeyStore for storing and retrieving
RouterInfo private keys and exporting RouterInfos
#### func NewRouterInfoKeystore
```go
func NewRouterInfoKeystore(dir, name string) (*RouterInfoKeystore, error)
```
NewRouterInfoKeystore creates a new RouterInfoKeystore with fresh and new
private keys it accepts a directory to store the keys in and a name for the keys
then it generates new private keys for the routerInfo if none exist
#### func (*RouterInfoKeystore) ConstructRouterInfo
```go
func (ks *RouterInfoKeystore) ConstructRouterInfo(addresses []*router_address.RouterAddress) (*router_info.RouterInfo, error)
```
#### func (*RouterInfoKeystore) GetKeys
```go
func (ks *RouterInfoKeystore) GetKeys() (crypto.PublicKey, crypto.PrivateKey, error)
```
#### func (*RouterInfoKeystore) KeyID
```go
func (ks *RouterInfoKeystore) KeyID() string
```
#### func (*RouterInfoKeystore) StoreKeys
```go
func (ks *RouterInfoKeystore) StoreKeys() error
```
# keys
--
import "github.com/go-i2p/go-i2p/lib/keys"
![keys.svg](keys)
## Usage
#### type KeyStore
```go
type KeyStore interface {
KeyID() string
// GetKeys returns the public and private keys
GetKeys() (publicKey crypto.PublicKey, privateKey crypto.PrivateKey, err error)
// StoreKeys stores the keys
StoreKeys() error
}
```
KeyStore is an interface for storing and retrieving keys
#### type KeyStoreImpl
```go
type KeyStoreImpl struct {
}
```
#### func NewKeyStoreImpl
```go
func NewKeyStoreImpl(dir, name string, privateKey crypto.PrivateKey) *KeyStoreImpl
```
#### func (*KeyStoreImpl) GetKeys
```go
func (ks *KeyStoreImpl) GetKeys() (crypto.PublicKey, crypto.PrivateKey, error)
```
#### func (*KeyStoreImpl) KeyID
```go
func (ks *KeyStoreImpl) KeyID() string
```
#### func (*KeyStoreImpl) StoreKeys
```go
func (ks *KeyStoreImpl) StoreKeys() error
```
#### type RouterInfoKeystore
```go
type RouterInfoKeystore struct {
*sntp.RouterTimestamper
}
```
RouterInfoKeystore is an implementation of KeyStore for storing and retrieving
RouterInfo private keys and exporting RouterInfos
#### func NewRouterInfoKeystore
```go
func NewRouterInfoKeystore(dir, name string) (*RouterInfoKeystore, error)
```
NewRouterInfoKeystore creates a new RouterInfoKeystore with fresh and new
private keys it accepts a directory to store the keys in and a name for the keys
then it generates new private keys for the routerInfo if none exist
#### func (*RouterInfoKeystore) ConstructRouterInfo
```go
func (ks *RouterInfoKeystore) ConstructRouterInfo(addresses []*router_address.RouterAddress) (*router_info.RouterInfo, error)
```
#### func (*RouterInfoKeystore) GetKeys
```go
func (ks *RouterInfoKeystore) GetKeys() (crypto.PublicKey, crypto.PrivateKey, error)
```
#### func (*RouterInfoKeystore) KeyID
```go
func (ks *RouterInfoKeystore) KeyID() string
```
#### func (*RouterInfoKeystore) StoreKeys
```go
func (ks *RouterInfoKeystore) StoreKeys() error
```
keys
github.com/go-i2p/go-i2p/lib/keys

421
lib/keys/keys.svg Normal file
View File

@ -0,0 +1,421 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="684pt" height="1053pt"
viewBox="0.00 0.00 684.06 1053.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1053)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1053 684.0564,-1053 684.0564,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1045 676.0564,-1045 676.0564,-8 8,-8"/>
<text text-anchor="middle" x="342.0282" y="-1024.8" font-family="Arial" font-size="18.00" fill="#000000">keys</text>
</g>
<g id="clust12" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="525.0528,-189 525.0528,-268 599.2478,-268 599.2478,-189 525.0528,-189"/>
<text text-anchor="middle" x="562.1503" y="-249.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/util/time/sntp" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="472.9532,-16 472.9532,-181 651.3474,-181 651.3474,-16 472.9532,-16"/>
<text text-anchor="middle" x="562.1503" y="-162.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">sntp</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/util/time/sntp" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M497.8887,-68C497.8887,-68 626.4119,-68 626.4119,-68 632.4119,-68 638.4119,-74 638.4119,-80 638.4119,-80 638.4119,-134 638.4119,-134 638.4119,-140 632.4119,-146 626.4119,-146 626.4119,-146 497.8887,-146 497.8887,-146 491.8887,-146 485.8887,-140 485.8887,-134 485.8887,-134 485.8887,-80 485.8887,-80 485.8887,-74 491.8887,-68 497.8887,-68"/>
<text text-anchor="middle" x="562.1503" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*RouterTimestamper)</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="498.2246,-363 498.2246,-442 626.076,-442 626.076,-363 498.2246,-363"/>
<text text-anchor="middle" x="562.1503" y="-423.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_identity" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="488.1117,-276 488.1117,-355 636.1889,-355 636.1889,-276 488.1117,-276"/>
<text text-anchor="middle" x="562.1503" y="-336.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_identity</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="456.2442,-772 456.2442,-1007 668.0564,-1007 668.0564,-772 456.2442,-772"/>
<text text-anchor="middle" x="562.1503" y="-988.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">key_certificate</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M515.2723,-780C515.2723,-780 609.0283,-780 609.0283,-780 615.0283,-780 621.0283,-786 621.0283,-792 621.0283,-792 621.0283,-907 621.0283,-907 621.0283,-913 615.0283,-919 609.0283,-919 609.0283,-919 515.2723,-919 515.2723,-919 509.2723,-919 503.2723,-913 503.2723,-907 503.2723,-907 503.2723,-792 503.2723,-792 503.2723,-786 509.2723,-780 515.2723,-780"/>
<text text-anchor="middle" x="562.1503" y="-788.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="486.1734,-685 486.1734,-764 638.1272,-764 638.1272,-685 486.1734,-685"/>
<text text-anchor="middle" x="562.1503" y="-745.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="471.0156,-598 471.0156,-677 653.285,-677 653.285,-598 471.0156,-598"/>
<text text-anchor="middle" x="562.1503" y="-658.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M255.383,-450C255.383,-450 594.6391,-450 594.6391,-450 600.6391,-450 606.6391,-456 606.6391,-462 606.6391,-462 606.6391,-577 606.6391,-577 606.6391,-583 600.6391,-589 594.6391,-589 594.6391,-589 255.383,-589 255.383,-589 249.383,-589 243.383,-583 243.383,-577 243.383,-577 243.383,-462 243.383,-462 243.383,-456 249.383,-450 255.383,-450"/>
<text text-anchor="middle" x="425.0111" y="-458.5" font-family="Arial" font-size="15.00" fill="#222222">(*RouterInfoKeystore)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M60.0344,-296C60.0344,-296 348.3578,-296 348.3578,-296 354.3578,-296 360.3578,-302 360.3578,-308 360.3578,-308 360.3578,-362 360.3578,-362 360.3578,-368 354.3578,-374 348.3578,-374 348.3578,-374 60.0344,-374 60.0344,-374 54.0344,-374 48.0344,-368 48.0344,-362 48.0344,-362 48.0344,-308 48.0344,-308 48.0344,-302 54.0344,-296 60.0344,-296"/>
<text text-anchor="middle" x="204.1961" y="-304.5" font-family="Arial" font-size="15.00" fill="#222222">(*KeyStoreImpl)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey | defined in routerinfo_keystore.go:81&#10;at routerinfo_keystore.go:84: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M368.409,-133C368.409,-133 274.2182,-133 274.2182,-133 268.2182,-133 262.2182,-127 262.2182,-121 262.2182,-121 262.2182,-109 262.2182,-109 262.2182,-103 268.2182,-97 274.2182,-97 274.2182,-97 368.409,-97 368.409,-97 374.409,-97 380.409,-103 380.409,-109 380.409,-109 380.409,-121 380.409,-121 380.409,-127 374.409,-133 368.409,-133"/>
<text text-anchor="middle" x="321.3136" y="-110.8" font-family="Verdana" font-size="14.00" fill="#000000">loadExistingKey</text>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node19" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node19"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M579.3456,-233C579.3456,-233 544.955,-233 544.955,-233 538.955,-233 532.955,-227 532.955,-221 532.955,-221 532.955,-209 532.955,-209 532.955,-203 538.955,-197 544.955,-197 544.955,-197 579.3456,-197 579.3456,-197 585.3456,-197 591.3456,-203 591.3456,-209 591.3456,-209 591.3456,-221 591.3456,-221 591.3456,-227 585.3456,-233 579.3456,-233"/>
<text text-anchor="middle" x="562.1503" y="-210.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge15"><a xlink:title="at routerinfo_keystore.go:84: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M364.9273,-133.1092C410.1688,-151.8944 480.2341,-180.9868 523.5347,-198.9661"/>
<polygon fill="#8b4513" stroke="#8b4513" points="522.2999,-202.243 532.8776,-202.8454 524.9843,-195.7782 522.2999,-202.243"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore | defined in routerinfo_keystore.go:36&#10;at routerinfo_keystore.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]&#10;at routerinfo_keystore.go:55: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey]&#10;at routerinfo_keystore.go:46: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M166.575,-133C166.575,-133 27.808,-133 27.808,-133 21.808,-133 15.808,-127 15.808,-121 15.808,-121 15.808,-109 15.808,-109 15.808,-103 21.808,-97 27.808,-97 27.808,-97 166.575,-97 166.575,-97 172.575,-97 178.575,-103 178.575,-109 178.575,-109 178.575,-121 178.575,-121 178.575,-127 172.575,-133 166.575,-133"/>
<text text-anchor="middle" x="97.1915" y="-110.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterInfoKeystore</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey</title>
<g id="a_edge8"><a xlink:title="at routerinfo_keystore.go:55: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey]">
<path fill="none" stroke="#000000" d="M178.4216,-115C202.5382,-115 228.7205,-115 252.0057,-115"/>
<polygon fill="#000000" stroke="#000000" points="252.1367,-118.5001 262.1367,-115 252.1367,-111.5001 252.1367,-118.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey | defined in routerinfo_keystore.go:70">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M369.9723,-194C369.9723,-194 272.6549,-194 272.6549,-194 266.6549,-194 260.6549,-188 260.6549,-182 260.6549,-182 260.6549,-170 260.6549,-170 260.6549,-164 266.6549,-158 272.6549,-158 272.6549,-158 369.9723,-158 369.9723,-158 375.9723,-158 381.9723,-164 381.9723,-170 381.9723,-170 381.9723,-182 381.9723,-182 381.9723,-188 375.9723,-194 369.9723,-194"/>
<text text-anchor="middle" x="321.3136" y="-171.8" font-family="Verdana" font-size="14.00" fill="#000000">generateNewKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey</title>
<g id="a_edge9"><a xlink:title="at routerinfo_keystore.go:46: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey]">
<path fill="none" stroke="#000000" d="M163.5258,-133.0544C191.0064,-140.5339 222.9154,-149.2186 250.8184,-156.8131"/>
<polygon fill="#000000" stroke="#000000" points="249.9389,-160.201 260.5071,-159.4501 251.7773,-153.4467 249.9389,-160.201"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="node17" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_node17"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper | defined in router_timestamper.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M631.545,-60C631.545,-60 492.7556,-60 492.7556,-60 486.7556,-60 480.7556,-54 480.7556,-48 480.7556,-48 480.7556,-36 480.7556,-36 480.7556,-30 486.7556,-24 492.7556,-24 492.7556,-24 631.545,-24 631.545,-24 637.545,-24 643.545,-30 643.545,-36 643.545,-36 643.545,-48 643.545,-48 643.545,-54 637.545,-60 631.545,-60"/>
<text text-anchor="middle" x="562.1503" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterTimestamper</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_edge5"><a xlink:title="at routerinfo_keystore.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]">
<path fill="none" stroke="#8b4513" d="M178.582,-97.271C199.6359,-92.9673 222.3096,-88.5793 243.383,-85 319.6805,-72.041 406.7889,-60.5111 470.6433,-52.6608"/>
<polygon fill="#8b4513" stroke="#8b4513" points="471.1854,-56.1207 480.6866,-51.4328 470.3358,-49.1724 471.1854,-56.1207"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys | defined in types.go:56&#10;at types.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M126.5063,-366C126.5063,-366 67.8767,-366 67.8767,-366 61.8767,-366 55.8767,-360 55.8767,-354 55.8767,-354 55.8767,-342 55.8767,-342 55.8767,-336 61.8767,-330 67.8767,-330 67.8767,-330 126.5063,-330 126.5063,-330 132.5063,-330 138.5063,-336 138.5063,-342 138.5063,-342 138.5063,-354 138.5063,-354 138.5063,-360 132.5063,-366 126.5063,-366"/>
<text text-anchor="middle" x="97.1915" y="-343.8" font-family="Verdana" font-size="14.00" fill="#000000">StoreKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID | defined in types.go:33">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M340.4021,-366C340.4021,-366 302.2251,-366 302.2251,-366 296.2251,-366 290.2251,-360 290.2251,-354 290.2251,-354 290.2251,-342 290.2251,-342 290.2251,-336 296.2251,-330 302.2251,-330 302.2251,-330 340.4021,-330 340.4021,-330 346.4021,-330 352.4021,-336 352.4021,-342 352.4021,-342 352.4021,-354 352.4021,-354 352.4021,-360 346.4021,-366 340.4021,-366"/>
<text text-anchor="middle" x="321.3136" y="-343.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyID</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID</title>
<g id="a_edge16"><a xlink:title="at types.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID]">
<path fill="none" stroke="#000000" d="M138.5601,-348C178.8185,-348 239.6508,-348 279.9182,-348"/>
<polygon fill="#000000" stroke="#000000" points="279.9394,-351.5001 289.9393,-348 279.9393,-344.5001 279.9394,-351.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo | defined in routerinfo_keystore.go:125&#10;at routerinfo_keystore.go:127: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]&#10;at routerinfo_keystore.go:151: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]&#10;at routerinfo_keystore.go:166: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity]&#10;at routerinfo_keystore.go:185: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo]&#10;at routerinfo_keystore.go:134: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:138: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:145: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType]&#10;at routerinfo_keystore.go:129: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:136: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:140: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:147: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:153: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:162: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:173: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:194: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:156: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]&#10;at routerinfo_keystore.go:157: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at routerinfo_keystore.go:177: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M379.1749,-581C379.1749,-581 263.4523,-581 263.4523,-581 257.4523,-581 251.4523,-575 251.4523,-569 251.4523,-569 251.4523,-557 251.4523,-557 251.4523,-551 257.4523,-545 263.4523,-545 263.4523,-545 379.1749,-545 379.1749,-545 385.1749,-545 391.1749,-551 391.1749,-557 391.1749,-557 391.1749,-569 391.1749,-569 391.1749,-575 385.1749,-581 379.1749,-581"/>
<text text-anchor="middle" x="321.3136" y="-558.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructRouterInfo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys | defined in routerinfo_keystore.go:91">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M586.6279,-581C586.6279,-581 537.6727,-581 537.6727,-581 531.6727,-581 525.6727,-575 525.6727,-569 525.6727,-569 525.6727,-557 525.6727,-557 525.6727,-551 531.6727,-545 537.6727,-545 537.6727,-545 586.6279,-545 586.6279,-545 592.6279,-545 598.6279,-551 598.6279,-557 598.6279,-557 598.6279,-569 598.6279,-569 598.6279,-575 592.6279,-581 586.6279,-581"/>
<text text-anchor="middle" x="562.1503" y="-558.8" font-family="Verdana" font-size="14.00" fill="#000000">GetKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_edge1"><a xlink:title="at routerinfo_keystore.go:127: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]">
<path fill="none" stroke="#000000" d="M391.2971,-563C431.2409,-563 480.2213,-563 515.4818,-563"/>
<polygon fill="#000000" stroke="#000000" points="515.5008,-566.5001 525.5008,-563 515.5007,-559.5001 515.5008,-566.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType -->
<g id="node10" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType</title>
<g id="a_node10"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType | defined in certificate.go:252">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M633.4199,-642C633.4199,-642 490.8807,-642 490.8807,-642 484.8807,-642 478.8807,-636 478.8807,-630 478.8807,-630 478.8807,-618 478.8807,-618 478.8807,-612 484.8807,-606 490.8807,-606 490.8807,-606 633.4199,-606 633.4199,-606 639.4199,-606 645.4199,-612 645.4199,-618 645.4199,-618 645.4199,-630 645.4199,-630 645.4199,-636 639.4199,-642 633.4199,-642"/>
<text text-anchor="middle" x="562.1503" y="-619.8" font-family="Verdana" font-size="14.00" fill="#000000">NewCertificateWithType</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType -->
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType</title>
<g id="a_edge7"><a xlink:title="at routerinfo_keystore.go:145: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType]">
<path fill="none" stroke="#8b4513" d="M391.2971,-580.7257C419.3719,-587.8366 451.9109,-596.0782 481.0125,-603.4491"/>
<polygon fill="#8b4513" stroke="#8b4513" points="480.1853,-606.8501 490.7386,-605.9126 481.9041,-600.0643 480.1853,-606.8501"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="node11" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_node11"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt | defined in integer.go:68">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M618.1041,-729C618.1041,-729 506.1965,-729 506.1965,-729 500.1965,-729 494.1965,-723 494.1965,-717 494.1965,-717 494.1965,-705 494.1965,-705 494.1965,-699 500.1965,-693 506.1965,-693 506.1965,-693 618.1041,-693 618.1041,-693 624.1041,-693 630.1041,-699 630.1041,-705 630.1041,-705 630.1041,-717 630.1041,-717 630.1041,-723 624.1041,-729 618.1041,-729"/>
<text text-anchor="middle" x="562.1503" y="-706.8" font-family="Verdana" font-size="14.00" fill="#000000">NewIntegerFromInt</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_edge6"><a xlink:title="at routerinfo_keystore.go:134: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:138: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]">
<path fill="none" stroke="#8b4513" d="M336.7834,-581.3919C360.0168,-607.8264 406.5267,-656.3096 456.2442,-683 464.9784,-687.6889 474.5465,-691.6292 484.2469,-694.9313"/>
<polygon fill="#8b4513" stroke="#8b4513" points="483.3747,-698.3267 493.9652,-698.0248 485.498,-691.6565 483.3747,-698.3267"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="node12" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_node12"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate | defined in key_certificate.go:395">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M647.9626,-972C647.9626,-972 476.338,-972 476.338,-972 470.338,-972 464.338,-966 464.338,-960 464.338,-960 464.338,-948 464.338,-948 464.338,-942 470.338,-936 476.338,-936 476.338,-936 647.9626,-936 647.9626,-936 653.9626,-936 659.9626,-942 659.9626,-948 659.9626,-948 659.9626,-960 659.9626,-960 659.9626,-966 653.9626,-972 647.9626,-972"/>
<text text-anchor="middle" x="562.1503" y="-949.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyCertificateFromCertificate</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_edge2"><a xlink:title="at routerinfo_keystore.go:151: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]">
<path fill="none" stroke="#8b4513" d="M322.4636,-581.2135C327.197,-640.2585 350.3126,-828.1499 456.2442,-925 458.4206,-926.9898 460.7206,-928.845 463.1214,-930.5746"/>
<polygon fill="#8b4513" stroke="#8b4513" points="461.3213,-933.5776 471.6391,-935.9845 465.0743,-927.6686 461.3213,-933.5776"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="node13" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_node13"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize | defined in key_certificate.go:336">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M593.6405,-911C593.6405,-911 530.6601,-911 530.6601,-911 524.6601,-911 518.6601,-905 518.6601,-899 518.6601,-899 518.6601,-887 518.6601,-887 518.6601,-881 524.6601,-875 530.6601,-875 530.6601,-875 593.6405,-875 593.6405,-875 599.6405,-875 605.6405,-881 605.6405,-887 605.6405,-887 605.6405,-899 605.6405,-899 605.6405,-905 599.6405,-911 593.6405,-911"/>
<text text-anchor="middle" x="562.1503" y="-888.8" font-family="Verdana" font-size="14.00" fill="#000000">CryptoSize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge11"><a xlink:title="at routerinfo_keystore.go:156: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M324.0872,-581.3603C332.9772,-633.6863 365.6743,-784.8234 456.2442,-863 470.7692,-875.5374 490.192,-882.8551 508.4362,-887.1189"/>
<polygon fill="#8b4513" stroke="#8b4513" points="507.9098,-890.5841 518.4121,-889.1872 509.3309,-883.7299 507.9098,-890.5841"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="node14" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_node14"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize | defined in key_certificate.go:308">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M600.9066,-850C600.9066,-850 523.394,-850 523.394,-850 517.394,-850 511.394,-844 511.394,-838 511.394,-838 511.394,-826 511.394,-826 511.394,-820 517.394,-814 523.394,-814 523.394,-814 600.9066,-814 600.9066,-814 606.9066,-814 612.9066,-820 612.9066,-826 612.9066,-826 612.9066,-838 612.9066,-838 612.9066,-844 606.9066,-850 600.9066,-850"/>
<text text-anchor="middle" x="562.1503" y="-827.8" font-family="Verdana" font-size="14.00" fill="#000000">SignatureSize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge12"><a xlink:title="at routerinfo_keystore.go:157: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M329.4852,-581.0376C347.6673,-619.6179 394.7587,-711.3991 456.2442,-770 472.6871,-785.6715 493.803,-799.0432 512.8476,-809.3126"/>
<polygon fill="#8b4513" stroke="#8b4513" points="511.2307,-812.4167 521.7133,-813.9551 514.478,-806.2155 511.2307,-812.4167"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity -->
<g id="node15" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity</title>
<g id="a_node15"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity | defined in router_identity.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M616.2275,-320C616.2275,-320 508.0731,-320 508.0731,-320 502.0731,-320 496.0731,-314 496.0731,-308 496.0731,-308 496.0731,-296 496.0731,-296 496.0731,-290 502.0731,-284 508.0731,-284 508.0731,-284 616.2275,-284 616.2275,-284 622.2275,-284 628.2275,-290 628.2275,-296 628.2275,-296 628.2275,-308 628.2275,-308 628.2275,-314 622.2275,-320 616.2275,-320"/>
<text text-anchor="middle" x="562.1503" y="-297.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterIdentity</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity</title>
<g id="a_edge3"><a xlink:title="at routerinfo_keystore.go:166: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity]">
<path fill="none" stroke="#8b4513" d="M376.1419,-544.8743C381.6893,-541.5261 386.8772,-537.5978 391.2442,-533 448.6705,-472.5392 401.0856,-419.5365 456.2442,-357 468.1587,-343.4919 484.1948,-332.8154 500.179,-324.6052"/>
<polygon fill="#8b4513" stroke="#8b4513" points="502.0861,-327.5701 509.5528,-320.0534 499.0284,-321.2732 502.0861,-327.5701"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo -->
<g id="node16" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo</title>
<g id="a_node16"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo | defined in router_info.go:370">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M606.0018,-407C606.0018,-407 518.2988,-407 518.2988,-407 512.2988,-407 506.2988,-401 506.2988,-395 506.2988,-395 506.2988,-383 506.2988,-383 506.2988,-377 512.2988,-371 518.2988,-371 518.2988,-371 606.0018,-371 606.0018,-371 612.0018,-371 618.0018,-377 618.0018,-383 618.0018,-383 618.0018,-395 618.0018,-395 618.0018,-401 612.0018,-407 606.0018,-407"/>
<text text-anchor="middle" x="562.1503" y="-384.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterInfo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo -->
<g id="edge4" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo</title>
<g id="a_edge4"><a xlink:title="at routerinfo_keystore.go:185: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo]">
<path fill="none" stroke="#8b4513" d="M372.4368,-544.9314C379.0918,-541.4935 385.5609,-537.527 391.2442,-533 429.5572,-502.4824 419.0822,-475.9092 456.2442,-444 471.2309,-431.1317 489.7446,-420.2196 507.0792,-411.5916"/>
<polygon fill="#8b4513" stroke="#8b4513" points="509.0618,-414.5221 516.5584,-407.0353 506.0292,-408.213 509.0618,-414.5221"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="node18" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime | defined in router_timestamper.go:397">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M608.1745,-138C608.1745,-138 516.1261,-138 516.1261,-138 510.1261,-138 504.1261,-132 504.1261,-126 504.1261,-126 504.1261,-114 504.1261,-114 504.1261,-108 510.1261,-102 516.1261,-102 516.1261,-102 608.1745,-102 608.1745,-102 614.1745,-102 620.1745,-108 620.1745,-114 620.1745,-114 620.1745,-126 620.1745,-126 620.1745,-132 614.1745,-138 608.1745,-138"/>
<text text-anchor="middle" x="562.1503" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">GetCurrentTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_edge13"><a xlink:title="at routerinfo_keystore.go:177: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="none" stroke="#8b4513" d="M378.0275,-544.975C383.022,-541.6272 387.5671,-537.6712 391.2442,-533 440.175,-470.8405 410.2383,-247.3544 456.2442,-183 468.4284,-165.9565 486.7885,-152.7334 504.8166,-142.9019"/>
<polygon fill="#8b4513" stroke="#8b4513" points="506.8997,-145.7654 514.1793,-138.0676 503.6881,-139.5456 506.8997,-145.7654"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge10"><a xlink:title="at routerinfo_keystore.go:129: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:136: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:140: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:147: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:153: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:162: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:173: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:194: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M377.3421,-544.9096C382.5336,-541.5689 387.3111,-537.6325 391.2442,-533 469.1721,-441.2132 381.7526,-364.5969 456.2442,-270 472.9923,-248.7316 500.2338,-234.8459 522.8938,-226.3474"/>
<polygon fill="#8b4513" stroke="#8b4513" points="524.3378,-229.5494 532.6038,-222.9219 522.009,-222.9482 524.3378,-229.5494"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys | defined in routerinfo_keystore.go:99&#10;at routerinfo_keystore.go:107: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M350.6284,-520C350.6284,-520 291.9988,-520 291.9988,-520 285.9988,-520 279.9988,-514 279.9988,-508 279.9988,-508 279.9988,-496 279.9988,-496 279.9988,-490 285.9988,-484 291.9988,-484 291.9988,-484 350.6284,-484 350.6284,-484 356.6284,-484 362.6284,-490 362.6284,-496 362.6284,-496 362.6284,-508 362.6284,-508 362.6284,-514 356.6284,-520 350.6284,-520"/>
<text text-anchor="middle" x="321.3136" y="-497.8" font-family="Verdana" font-size="14.00" fill="#000000">StoreKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID | defined in routerinfo_keystore.go:111">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M581.2388,-520C581.2388,-520 543.0618,-520 543.0618,-520 537.0618,-520 531.0618,-514 531.0618,-508 531.0618,-508 531.0618,-496 531.0618,-496 531.0618,-490 537.0618,-484 543.0618,-484 543.0618,-484 581.2388,-484 581.2388,-484 587.2388,-484 593.2388,-490 593.2388,-496 593.2388,-496 593.2388,-508 593.2388,-508 593.2388,-514 587.2388,-520 581.2388,-520"/>
<text text-anchor="middle" x="562.1503" y="-497.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyID</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID</title>
<g id="a_edge14"><a xlink:title="at routerinfo_keystore.go:107: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID]">
<path fill="none" stroke="#000000" d="M362.7149,-502C406.9153,-502 476.5456,-502 520.7468,-502"/>
<polygon fill="#000000" stroke="#000000" points="520.861,-505.5001 530.861,-502 520.8609,-498.5001 520.861,-505.5001"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -180,3 +180,195 @@ return how many routers we know about in our network database
func (db *StdNetDB) SkiplistFile(hash common.Hash) (fpath string)
```
get the skiplist file that a RouterInfo with this hash would go in
# netdb
--
import "github.com/go-i2p/go-i2p/lib/netdb"
![netdb.svg](netdb)
## Usage
```go
const CacheFileName = "sizecache.txt"
```
name of file to hold precomputed size of netdb
#### type Entry
```go
type Entry struct {
*router_info.RouterInfo
*lease_set.LeaseSet
}
```
netdb entry wraps a router info and provides serialization
#### func (*Entry) ReadFrom
```go
func (e *Entry) ReadFrom(r io.Reader) (err error)
```
#### func (*Entry) WriteTo
```go
func (e *Entry) WriteTo(w io.Writer) (err error)
```
#### type NetworkDatabase
```go
type NetworkDatabase interface {
// obtain a RouterInfo by its hash locally
// return a RouterInfo if we found it locally
// return nil if the RouterInfo cannot be found locally
GetRouterInfo(hash common.Hash) router_info.RouterInfo
// store a router info locally
StoreRouterInfo(ri router_info.RouterInfo)
// try obtaining more peers with a bootstrap instance until we get minRouters number of router infos
// returns error if bootstrap.GetPeers returns an error otherwise returns nil
Reseed(b bootstrap.Bootstrap, minRouters int) error
// return how many router infos we have
Size() int
// Recaculate size of netdb from backend
RecalculateSize() error
// ensure underlying resources exist , i.e. directories, files, configs
Ensure() error
}
```
i2p network database, storage of i2p RouterInfos
#### type Resolver
```go
type Resolver interface {
// resolve a router info by hash
// return a chan that yields the found RouterInfo or nil if it could not be found after timeout
Lookup(hash common.Hash, timeout time.Duration) chan router_info.RouterInfo
}
```
resolves unknown RouterInfos given the hash of their RouterIdentity
#### func KademliaResolver
```go
func KademliaResolver(netDb NetworkDatabase, pool *tunnel.Pool) (r Resolver)
```
create a new resolver that stores result into a NetworkDatabase and uses a
tunnel pool for the lookup
#### type StdNetDB
```go
type StdNetDB struct {
DB string
RouterInfos map[common.Hash]Entry
LeaseSets map[common.Hash]Entry
}
```
standard network database implementation using local filesystem skiplist
#### func NewStdNetDB
```go
func NewStdNetDB(db string) StdNetDB
```
#### func (*StdNetDB) CheckFilePathValid
```go
func (db *StdNetDB) CheckFilePathValid(fpath string) bool
```
#### func (*StdNetDB) Create
```go
func (db *StdNetDB) Create() (err error)
```
create base network database directory
#### func (*StdNetDB) Ensure
```go
func (db *StdNetDB) Ensure() (err error)
```
ensure that the network database exists
#### func (*StdNetDB) Exists
```go
func (db *StdNetDB) Exists() bool
```
return true if the network db directory exists and is writable
#### func (*StdNetDB) GetRouterInfo
```go
func (db *StdNetDB) GetRouterInfo(hash common.Hash) (chnl chan router_info.RouterInfo)
```
#### func (*StdNetDB) Path
```go
func (db *StdNetDB) Path() string
```
get netdb path
#### func (*StdNetDB) RecalculateSize
```go
func (db *StdNetDB) RecalculateSize() (err error)
```
recalculateSize recalculates cached size of netdb
#### func (*StdNetDB) Reseed
```go
func (db *StdNetDB) Reseed(b bootstrap.Bootstrap, minRouters int) (err error)
```
reseed if we have less than minRouters known routers returns error if reseed
failed
#### func (*StdNetDB) Save
```go
func (db *StdNetDB) Save() (err error)
```
#### func (*StdNetDB) SaveEntry
```go
func (db *StdNetDB) SaveEntry(e *Entry) (err error)
```
#### func (*StdNetDB) Size
```go
func (db *StdNetDB) Size() (routers int)
```
return how many routers we know about in our network database
#### func (*StdNetDB) SkiplistFile
```go
func (db *StdNetDB) SkiplistFile(hash common.Hash) (fpath string)
```
get the skiplist file that a RouterInfo with this hash would go in
netdb
github.com/go-i2p/go-i2p/lib/netdb

845
lib/netdb/netdb.svg Normal file
View File

@ -0,0 +1,845 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="883pt" height="1348pt"
viewBox="0.00 0.00 882.68 1348.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1348)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1348 882.6804,-1348 882.6804,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1340 874.6804,-1340 874.6804,-8 8,-8"/>
<text text-anchor="middle" x="441.3402" y="-1319.8" font-family="Arial" font-size="18.00" fill="#000000">netdb</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="751.4251,-435 751.4251,-617 844.7463,-617 844.7463,-435 751.4251,-435"/>
<text text-anchor="middle" x="798.0857" y="-598.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M771.4251,-443C771.4251,-443 824.7463,-443 824.7463,-443 830.7463,-443 836.7463,-449 836.7463,-455 836.7463,-455 836.7463,-570 836.7463,-570 836.7463,-576 830.7463,-582 824.7463,-582 824.7463,-582 771.4251,-582 771.4251,-582 765.4251,-582 759.4251,-576 759.4251,-570 759.4251,-570 759.4251,-455 759.4251,-455 759.4251,-449 765.4251,-443 771.4251,-443"/>
<text text-anchor="middle" x="798.0857" y="-451.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="729.491,-801 729.491,-1219 866.6804,-1219 866.6804,-801 729.491,-801"/>
<text text-anchor="middle" x="798.0857" y="-1200.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M758.9763,-809C758.9763,-809 837.1951,-809 837.1951,-809 843.1951,-809 849.1951,-815 849.1951,-821 849.1951,-821 849.1951,-1119 849.1951,-1119 849.1951,-1125 843.1951,-1131 837.1951,-1131 837.1951,-1131 758.9763,-1131 758.9763,-1131 752.9763,-1131 746.9763,-1125 746.9763,-1119 746.9763,-1119 746.9763,-821 746.9763,-821 746.9763,-815 752.9763,-809 758.9763,-809"/>
<text text-anchor="middle" x="798.0857" y="-817.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/util</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/util" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/util">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="353.5344,-1010 353.5344,-1150 485.3016,-1150 485.3016,-1010 353.5344,-1010"/>
<text text-anchor="middle" x="419.418" y="-1131.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">util</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="542.3016,-574 542.3016,-748 672.491,-748 672.491,-574 542.3016,-574"/>
<text text-anchor="middle" x="607.3963" y="-729.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M570.6305,-582C570.6305,-582 645.1621,-582 645.1621,-582 651.1621,-582 657.1621,-588 657.1621,-594 657.1621,-594 657.1621,-648 657.1621,-648 657.1621,-654 651.1621,-660 645.1621,-660 645.1621,-660 570.6305,-660 570.6305,-660 564.6305,-660 558.6305,-654 558.6305,-648 558.6305,-648 558.6305,-594 558.6305,-594 558.6305,-588 564.6305,-582 570.6305,-582"/>
<text text-anchor="middle" x="607.8963" y="-590.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*RouterInfo)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/base64</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/base64" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/base64">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="732.2063,-332 732.2063,-411 863.9651,-411 863.9651,-332 732.2063,-332"/>
<text text-anchor="middle" x="798.0857" y="-392.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">base64</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-36C28,-36 821.0857,-36 821.0857,-36 827.0857,-36 833.0857,-42 833.0857,-48 833.0857,-48 833.0857,-312 833.0857,-312 833.0857,-318 827.0857,-324 821.0857,-324 821.0857,-324 28,-324 28,-324 22,-324 16,-318 16,-312 16,-312 16,-48 16,-48 16,-42 22,-36 28,-36"/>
<text text-anchor="middle" x="424.5429" y="-44.5" font-family="Arial" font-size="15.00" fill="#222222">(*StdNetDB)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M575.6845,-874C575.6845,-874 639.1081,-874 639.1081,-874 645.1081,-874 651.1081,-880 651.1081,-886 651.1081,-886 651.1081,-940 651.1081,-940 651.1081,-946 645.1081,-952 639.1081,-952 639.1081,-952 575.6845,-952 575.6845,-952 569.6845,-952 563.6845,-946 563.6845,-940 563.6845,-940 563.6845,-886 563.6845,-886 563.6845,-880 569.6845,-874 575.6845,-874"/>
<text text-anchor="middle" x="607.3963" y="-882.5" font-family="Arial" font-size="15.00" fill="#222222">(*Entry)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB | defined in std.go:32&#10;at std.go:33: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:33: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M649.6526,-404C649.6526,-404 565.14,-404 565.14,-404 559.14,-404 553.14,-398 553.14,-392 553.14,-392 553.14,-380 553.14,-380 553.14,-374 559.14,-368 565.14,-368 565.14,-368 649.6526,-368 649.6526,-368 655.6526,-368 661.6526,-374 661.6526,-380 661.6526,-380 661.6526,-392 661.6526,-392 661.6526,-398 655.6526,-404 649.6526,-404"/>
<text text-anchor="middle" x="607.3963" y="-381.8" font-family="Verdana" font-size="14.00" fill="#000000">NewStdNetDB</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node23" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node23"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M826.3602,-879C826.3602,-879 769.8112,-879 769.8112,-879 763.8112,-879 757.8112,-873 757.8112,-867 757.8112,-867 757.8112,-855 757.8112,-855 757.8112,-849 763.8112,-843 769.8112,-843 769.8112,-843 826.3602,-843 826.3602,-843 832.3602,-843 838.3602,-849 838.3602,-855 838.3602,-855 838.3602,-867 838.3602,-867 838.3602,-873 832.3602,-879 826.3602,-879"/>
<text text-anchor="middle" x="798.0857" y="-856.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge38" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge38"><a xlink:title="at std.go:33: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M652.232,-404.0057C660.0897,-409.0515 667.375,-415.3183 672.491,-423 729.5726,-508.7085 672.04,-554.0314 700.491,-653 720.0991,-721.208 759.5933,-795.0772 781.8603,-833.7916"/>
<polygon fill="#8b4513" stroke="#8b4513" points="779.0757,-835.9658 787.1276,-842.8519 785.1274,-832.4476 779.0757,-835.9658"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node28" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node28"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M816.9077,-513C816.9077,-513 779.2637,-513 779.2637,-513 773.2637,-513 767.2637,-507 767.2637,-501 767.2637,-501 767.2637,-489 767.2637,-489 767.2637,-483 773.2637,-477 779.2637,-477 779.2637,-477 816.9077,-477 816.9077,-477 822.9077,-477 828.9077,-483 828.9077,-489 828.9077,-489 828.9077,-501 828.9077,-501 828.9077,-507 822.9077,-513 816.9077,-513"/>
<text text-anchor="middle" x="798.0857" y="-490.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge9"><a xlink:title="at std.go:33: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M639.1941,-404.0431C649.7898,-410.0636 661.6532,-416.8134 672.491,-423 701.3596,-439.4792 733.9217,-458.1485 758.6556,-472.3465"/>
<polygon fill="#8b4513" stroke="#8b4513" points="756.9775,-475.4188 767.3925,-477.3626 760.4629,-469.3482 756.9775,-475.4188"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb.init -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/netdb.init | defined in .:0&#10;at std.go:23: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M622.3963,-1302C622.3963,-1302 592.3963,-1302 592.3963,-1302 586.3963,-1302 580.3963,-1296 580.3963,-1290 580.3963,-1290 580.3963,-1278 580.3963,-1278 580.3963,-1272 586.3963,-1266 592.3963,-1266 592.3963,-1266 622.3963,-1266 622.3963,-1266 628.3963,-1266 634.3963,-1272 634.3963,-1278 634.3963,-1278 634.3963,-1290 634.3963,-1290 634.3963,-1296 628.3963,-1302 622.3963,-1302"/>
<text text-anchor="middle" x="607.3963" y="-1279.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node22" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node22"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M846.7752,-1184C846.7752,-1184 749.3962,-1184 749.3962,-1184 743.3962,-1184 737.3962,-1178 737.3962,-1172 737.3962,-1172 737.3962,-1160 737.3962,-1160 737.3962,-1154 743.3962,-1148 749.3962,-1148 749.3962,-1148 846.7752,-1148 846.7752,-1148 852.7752,-1148 858.7752,-1154 858.7752,-1160 858.7752,-1160 858.7752,-1172 858.7752,-1172 858.7752,-1178 852.7752,-1184 846.7752,-1184"/>
<text text-anchor="middle" x="798.0857" y="-1161.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge25"><a xlink:title="at std.go:23: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M634.4203,-1275.9638C653.8309,-1269.585 680.2146,-1259.6449 701.491,-1247 727.8304,-1231.3461 754.2499,-1208.5888 772.7844,-1191.1791"/>
<polygon fill="#8b4513" stroke="#8b4513" points="775.4038,-1193.5174 780.2219,-1184.0815 770.5711,-1188.4533 775.4038,-1193.5174"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry).WriteTo -->
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry).WriteTo</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry).WriteTo | defined in entry.go:17">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M631.3212,-944C631.3212,-944 583.4714,-944 583.4714,-944 577.4714,-944 571.4714,-938 571.4714,-932 571.4714,-932 571.4714,-920 571.4714,-920 571.4714,-914 577.4714,-908 583.4714,-908 583.4714,-908 631.3212,-908 631.3212,-908 637.3212,-908 643.3212,-914 643.3212,-920 643.3212,-920 643.3212,-932 643.3212,-932 643.3212,-938 637.3212,-944 631.3212,-944"/>
<text text-anchor="middle" x="607.3963" y="-921.8" font-family="Verdana" font-size="14.00" fill="#000000">WriteTo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save | defined in std.go:250&#10;at std.go:255: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:251: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:253: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry]&#10;at std.go:255: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M276.5344,-255C276.5344,-255 246.5344,-255 246.5344,-255 240.5344,-255 234.5344,-249 234.5344,-243 234.5344,-243 234.5344,-231 234.5344,-231 234.5344,-225 240.5344,-219 246.5344,-219 246.5344,-219 276.5344,-219 276.5344,-219 282.5344,-219 288.5344,-225 288.5344,-231 288.5344,-231 288.5344,-243 288.5344,-243 288.5344,-249 282.5344,-255 276.5344,-255"/>
<text text-anchor="middle" x="261.5344" y="-232.8" font-family="Verdana" font-size="14.00" fill="#000000">Save</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry | defined in std.go:224&#10;at std.go:227: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at std.go:229: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile]&#10;at std.go:226: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).IdentHash]&#10;at std.go:231: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry).WriteTo]&#10;at std.go:227: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:234: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:239: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:236: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:239: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:236: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M448.7342,-255C448.7342,-255 390.1018,-255 390.1018,-255 384.1018,-255 378.1018,-249 378.1018,-243 378.1018,-243 378.1018,-231 378.1018,-231 378.1018,-225 384.1018,-219 390.1018,-219 390.1018,-219 448.7342,-219 448.7342,-219 454.7342,-219 460.7342,-225 460.7342,-231 460.7342,-231 460.7342,-243 460.7342,-243 460.7342,-249 454.7342,-255 448.7342,-255"/>
<text text-anchor="middle" x="419.418" y="-232.8" font-family="Verdana" font-size="14.00" fill="#000000">SaveEntry</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry -->
<g id="edge30" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry</title>
<g id="a_edge30"><a xlink:title="at std.go:253: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry]">
<path fill="none" stroke="#000000" d="M288.6756,-237C310.3914,-237 341.4705,-237 367.8788,-237"/>
<polygon fill="#000000" stroke="#000000" points="368.1156,-240.5001 378.1156,-237 368.1156,-233.5001 368.1156,-240.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node24" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node24"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M826.6172,-940C826.6172,-940 769.5542,-940 769.5542,-940 763.5542,-940 757.5542,-934 757.5542,-928 757.5542,-928 757.5542,-916 757.5542,-916 757.5542,-910 763.5542,-904 769.5542,-904 769.5542,-904 826.6172,-904 826.6172,-904 832.6172,-904 838.6172,-910 838.6172,-916 838.6172,-916 838.6172,-928 838.6172,-928 838.6172,-934 832.6172,-940 826.6172,-940"/>
<text text-anchor="middle" x="798.0857" y="-917.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge2"><a xlink:title="at std.go:255: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M280.2091,-255.1572C283.4206,-259.1153 286.4045,-263.4808 288.5344,-268 363.8247,-427.7477 294.958,-493.3964 353.5344,-660 360.6361,-680.1987 523.8224,-985.186 542.3016,-996 592.2409,-1025.2245 617.624,-1014.3744 672.491,-996 702.5819,-985.9228 702.1979,-969.1894 729.491,-953 735.3814,-949.506 741.7347,-946.1434 748.1146,-943.0049"/>
<polygon fill="#8b4513" stroke="#8b4513" points="749.9005,-946.0313 757.43,-938.5776 746.8957,-939.709 749.9005,-946.0313"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node25" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node25"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M813.0857,-1001C813.0857,-1001 783.0857,-1001 783.0857,-1001 777.0857,-1001 771.0857,-995 771.0857,-989 771.0857,-989 771.0857,-977 771.0857,-977 771.0857,-971 777.0857,-965 783.0857,-965 783.0857,-965 813.0857,-965 813.0857,-965 819.0857,-965 825.0857,-971 825.0857,-977 825.0857,-977 825.0857,-989 825.0857,-989 825.0857,-995 819.0857,-1001 813.0857,-1001"/>
<text text-anchor="middle" x="798.0857" y="-978.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge48" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge48"><a xlink:title="at std.go:255: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M280.3536,-255.0908C283.5532,-259.0544 286.4957,-263.4389 288.5344,-268 336.1452,-374.5192 306.4378,-682.2524 353.5344,-789 405.6767,-907.1838 435.6343,-937.1417 542.3016,-1010 604.1133,-1052.22 637.0712,-1103.1223 701.491,-1065 723.7444,-1051.8309 710.5108,-1031.5611 729.491,-1014 738.5424,-1005.6254 750.2405,-999.2127 761.4045,-994.4535"/>
<polygon fill="#8b4513" stroke="#8b4513" points="762.9674,-997.6001 770.9978,-990.689 760.4103,-991.0838 762.9674,-997.6001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge21" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Save&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge21"><a xlink:title="at std.go:251: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M279.2717,-255.1696C282.6358,-259.1912 285.9168,-263.578 288.5344,-268 330.1456,-338.2945 475.3087,-911.2585 542.3016,-958 589.755,-991.1086 628.9826,-996.1448 672.491,-958 745.3023,-894.1646 671.7595,-603.7401 729.491,-526 736.4814,-516.5869 746.9972,-509.9641 757.7087,-505.332"/>
<polygon fill="#8b4513" stroke="#8b4513" points="758.9928,-508.5882 767.0885,-501.7537 756.4978,-502.048 758.9928,-508.5882"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry).WriteTo -->
<g id="edge35" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry).WriteTo</title>
<g id="a_edge35"><a xlink:title="at std.go:231: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.Entry).WriteTo]">
<path fill="none" stroke="#000000" d="M460.6318,-248.2581C470.2259,-252.8354 479.3613,-259.1986 485.3016,-268 547.0614,-359.5062 481.5958,-658.2532 513.3016,-764 528.9267,-816.1137 564.306,-869.2894 586.9532,-899.8895"/>
<polygon fill="#000000" stroke="#000000" points="584.1697,-902.0116 592.9762,-907.902 589.7652,-897.8054 584.1697,-902.0116"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile | defined in std.go:77&#10;at std.go:79: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]&#10;at std.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at std.go:80: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:78: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M639.4653,-255C639.4653,-255 575.3273,-255 575.3273,-255 569.3273,-255 563.3273,-249 563.3273,-243 563.3273,-243 563.3273,-231 563.3273,-231 563.3273,-225 569.3273,-219 575.3273,-219 575.3273,-219 639.4653,-219 639.4653,-219 645.4653,-219 651.4653,-225 651.4653,-231 651.4653,-231 651.4653,-243 651.4653,-243 651.4653,-249 645.4653,-255 639.4653,-255"/>
<text text-anchor="middle" x="607.3963" y="-232.8" font-family="Verdana" font-size="14.00" fill="#000000">SkiplistFile</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile</title>
<g id="a_edge14"><a xlink:title="at std.go:229: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile]">
<path fill="none" stroke="#000000" d="M460.6706,-237C487.8368,-237 523.6935,-237 553.1599,-237"/>
<polygon fill="#000000" stroke="#000000" points="553.2913,-240.5001 563.2913,-237 553.2912,-233.5001 553.2913,-240.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).IdentHash -->
<g id="node19" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).IdentHash</title>
<g id="a_node19"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).IdentHash | defined in router_info.go:176">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M635.9292,-652C635.9292,-652 578.8634,-652 578.8634,-652 572.8634,-652 566.8634,-646 566.8634,-640 566.8634,-640 566.8634,-628 566.8634,-628 566.8634,-622 572.8634,-616 578.8634,-616 578.8634,-616 635.9292,-616 635.9292,-616 641.9292,-616 647.9292,-622 647.9292,-628 647.9292,-628 647.9292,-640 647.9292,-640 647.9292,-646 641.9292,-652 635.9292,-652"/>
<text text-anchor="middle" x="607.3963" y="-629.8" font-family="Verdana" font-size="14.00" fill="#000000">IdentHash</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).IdentHash -->
<g id="edge33" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).IdentHash</title>
<g id="a_edge33"><a xlink:title="at std.go:226: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).IdentHash]">
<path fill="none" stroke="#8b4513" d="M460.7643,-248.5667C470.2359,-253.1298 479.2788,-259.4088 485.3016,-268 563.1884,-379.1014 443.5404,-455.6245 513.3016,-572 523.6657,-589.2894 540.9304,-602.7052 557.8618,-612.5646"/>
<polygon fill="#8b4513" stroke="#8b4513" points="556.1985,-615.6442 566.6472,-617.398 559.5727,-609.5111 556.1985,-615.6442"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge10"><a xlink:title="at std.go:227: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M460.855,-249.3386C470.0914,-253.8619 479.0008,-259.929 485.3016,-268 524.8856,-318.7049 482.0174,-353.7935 513.3016,-410 521.8661,-425.3874 527.8925,-426.8757 542.3016,-437 595.5469,-474.4121 634.8772,-450.8971 672.491,-504 725.1341,-578.3211 669.179,-621.4753 700.491,-707 718.4182,-755.9658 753.6871,-805.6837 776.5549,-834.9088"/>
<polygon fill="#8b4513" stroke="#8b4513" points="773.976,-837.2895 782.9358,-842.944 779.4578,-832.9363 773.976,-837.2895"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge47" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge47"><a xlink:title="at std.go:239: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:236: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M460.9056,-249.2993C470.1407,-253.8235 479.0369,-259.9009 485.3016,-268 547.8908,-348.9159 473.7399,-415.0785 542.3016,-491 585.9159,-539.2961 635.9142,-504.1775 672.491,-558 708.1361,-610.4514 681.0286,-781.6432 700.491,-842 708.375,-866.4498 710.3264,-874.8924 729.491,-892 735.0241,-896.9392 741.4986,-901.1671 748.22,-904.7553"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.95,-908.0296 757.4733,-909.2585 750.0132,-901.7354 746.95,-908.0296"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge52" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge52"><a xlink:title="at std.go:239: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:236: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M460.7232,-249.0106C470.0775,-253.5542 479.0749,-259.713 485.3016,-268 532.8812,-331.3227 496.118,-366.6805 513.3016,-444 523.4337,-489.5903 508.5296,-512.7419 542.3016,-545 585.313,-586.0834 634.1194,-530.5527 672.491,-576 733.9803,-648.8279 630.9284,-938.8395 700.491,-1004 716.8346,-1019.3094 741.5425,-1013.8147 762.0077,-1004.6168"/>
<polygon fill="#8b4513" stroke="#8b4513" points="763.6177,-1007.7256 771.0668,-1000.1916 760.5453,-1001.4359 763.6177,-1007.7256"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge41" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SaveEntry&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge41"><a xlink:title="at std.go:227: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:234: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M460.7764,-248.5583C470.2478,-253.1214 479.2876,-259.4026 485.3016,-268 548.896,-358.9128 457.9936,-691.8783 542.3016,-764 564.286,-782.8066 650.5787,-782.8905 672.491,-764 704.4825,-736.4203 686.5358,-615.8667 700.491,-576 708.9786,-551.7531 710.4309,-543.2239 729.491,-526 737.647,-518.6297 747.8491,-512.7559 757.8721,-508.191"/>
<polygon fill="#8b4513" stroke="#8b4513" points="759.4893,-511.308 767.3543,-504.2092 756.7791,-504.854 759.4893,-511.308"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path | defined in std.go:85">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M813.0857,-211C813.0857,-211 783.0857,-211 783.0857,-211 777.0857,-211 771.0857,-205 771.0857,-199 771.0857,-199 771.0857,-187 771.0857,-187 771.0857,-181 777.0857,-175 783.0857,-175 783.0857,-175 813.0857,-175 813.0857,-175 819.0857,-175 825.0857,-181 825.0857,-187 825.0857,-187 825.0857,-199 825.0857,-199 825.0857,-205 819.0857,-211 813.0857,-211"/>
<text text-anchor="middle" x="798.0857" y="-188.8" font-family="Verdana" font-size="14.00" fill="#000000">Path</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path -->
<g id="edge29" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path</title>
<g id="a_edge29"><a xlink:title="at std.go:79: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]">
<path fill="none" stroke="#000000" d="M651.6236,-226.7949C684.7378,-219.1541 729.5317,-208.8183 760.8305,-201.5963"/>
<polygon fill="#000000" stroke="#000000" points="761.9342,-204.9337 770.8912,-199.2749 760.3603,-198.1129 761.9342,-204.9337"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString -->
<g id="node17" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString</title>
<g id="a_node17"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString | defined in base64.go:16">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M843.8448,-376C843.8448,-376 752.3266,-376 752.3266,-376 746.3266,-376 740.3266,-370 740.3266,-364 740.3266,-364 740.3266,-352 740.3266,-352 740.3266,-346 746.3266,-340 752.3266,-340 752.3266,-340 843.8448,-340 843.8448,-340 849.8448,-340 855.8448,-346 855.8448,-352 855.8448,-352 855.8448,-364 855.8448,-364 855.8448,-370 849.8448,-376 843.8448,-376"/>
<text text-anchor="middle" x="798.0857" y="-353.8" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString -->
<g id="edge46" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString</title>
<g id="a_edge46"><a xlink:title="at std.go:78: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M650.0358,-255.1381C657.7265,-259.0109 665.5115,-263.3502 672.491,-268 686.8973,-277.5975 689.6856,-281.3396 701.491,-294 715.3146,-308.8247 713.338,-317.7548 729.491,-330 731.7973,-331.7484 734.2281,-333.4057 736.7437,-334.9745"/>
<polygon fill="#8b4513" stroke="#8b4513" points="735.1392,-338.0881 745.5655,-339.9709 738.589,-331.9972 735.1392,-338.0881"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge34" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge34"><a xlink:title="at std.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M651.4726,-250.9147C659.488,-255.2446 667.0274,-260.8325 672.491,-268 716.2792,-325.4441 714.3476,-517.3749 729.491,-588 748.8201,-678.146 776.913,-783.6891 790.3556,-832.9789"/>
<polygon fill="#8b4513" stroke="#8b4513" points="787.053,-834.1707 793.0687,-842.892 793.8046,-832.3228 787.053,-834.1707"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge40" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge40"><a xlink:title="at std.go:80: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M651.7661,-252.5232C659.3773,-256.6648 666.6896,-261.7716 672.491,-268 720.8168,-319.8824 693.079,-356.1615 729.491,-417 740.9775,-436.192 757.4354,-455.0966 771.3511,-469.4872"/>
<polygon fill="#8b4513" stroke="#8b4513" points="769.2522,-472.3423 778.7728,-476.9907 774.229,-467.4197 769.2522,-472.3423"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo | defined in std.go:41&#10;at std.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at std.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:55: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:71: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:48: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile]&#10;at std.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]&#10;at std.go:42: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:55: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:71: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M460.054,-316C460.054,-316 378.782,-316 378.782,-316 372.782,-316 366.782,-310 366.782,-304 366.782,-304 366.782,-292 366.782,-292 366.782,-286 372.782,-280 378.782,-280 378.782,-280 460.054,-280 460.054,-280 466.054,-280 472.054,-286 472.054,-292 472.054,-292 472.054,-304 472.054,-304 472.054,-310 466.054,-316 460.054,-316"/>
<text text-anchor="middle" x="419.418" y="-293.8" font-family="Verdana" font-size="14.00" fill="#000000">GetRouterInfo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile</title>
<g id="a_edge6"><a xlink:title="at std.go:48: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).SkiplistFile]">
<path fill="none" stroke="#000000" d="M472.2807,-280.8458C497.7015,-272.5966 528.122,-262.7249 553.6563,-254.4389"/>
<polygon fill="#000000" stroke="#000000" points="554.7513,-257.7633 563.1827,-251.3476 552.5906,-251.1051 554.7513,-257.7633"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo -->
<g id="node18" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo</title>
<g id="a_node18"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo | defined in router_info.go:233">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M652.5859,-713C652.5859,-713 562.2067,-713 562.2067,-713 556.2067,-713 550.2067,-707 550.2067,-701 550.2067,-701 550.2067,-689 550.2067,-689 550.2067,-683 556.2067,-677 562.2067,-677 562.2067,-677 652.5859,-677 652.5859,-677 658.5859,-677 664.5859,-683 664.5859,-689 664.5859,-689 664.5859,-701 664.5859,-701 664.5859,-707 658.5859,-713 652.5859,-713"/>
<text text-anchor="middle" x="607.3963" y="-690.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterInfo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo -->
<g id="edge36" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo</title>
<g id="a_edge36"><a xlink:title="at std.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]">
<path fill="none" stroke="#8b4513" d="M420.4629,-316.2551C424.7428,-374.6874 445.6553,-559.5114 542.3016,-666 543.8554,-667.712 545.5292,-669.3287 547.2973,-670.8547"/>
<polygon fill="#8b4513" stroke="#8b4513" points="545.4527,-673.8438 555.5727,-676.98 549.6172,-668.2174 545.4527,-673.8438"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge3"><a xlink:title="at std.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M419.8319,-316.2799C421.9556,-381.6765 434.8979,-608.8885 513.3016,-774 521.967,-792.2486 524.9717,-798.6186 542.3016,-809 606.0294,-847.176 693.0286,-857.7823 747.3617,-860.4735"/>
<polygon fill="#8b4513" stroke="#8b4513" points="747.3056,-863.9742 757.4448,-860.9005 747.6019,-856.9805 747.3056,-863.9742"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge51" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge51"><a xlink:title="at std.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:55: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:71: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M420.6249,-316.2656C426.7531,-402.7581 457.5214,-769.7488 542.3016,-837 589.0669,-874.0962 615.8368,-851.2005 672.491,-870 687.1814,-874.8747 719.7914,-888.4062 748.1006,-900.4433"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.9326,-903.7501 757.5041,-904.4535 749.6786,-897.3112 746.9326,-903.7501"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge4" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge4"><a xlink:title="at std.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:55: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:71: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M420.8203,-316.0195C428.4555,-410.4648 467.4526,-848.2184 542.3016,-958 589.157,-1026.7231 620.5969,-1034.8648 700.491,-1058 722.9878,-1064.5145 711.7946,-1029.3422 729.491,-1014 738.7319,-1005.9884 750.3835,-999.6916 761.4483,-994.9264"/>
<polygon fill="#8b4513" stroke="#8b4513" points="762.96,-998.0914 770.9455,-991.1285 760.3608,-991.5919 762.96,-998.0914"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge50" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).GetRouterInfo&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge50"><a xlink:title="at std.go:42: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M420.3095,-316.056C424.9569,-400.5843 449.8545,-754.6264 542.3016,-791 596.1458,-812.1851 628.9082,-829.0597 672.491,-791 707.2888,-760.612 687.0163,-629.19 700.491,-585 709.0131,-557.0518 708.4985,-546.3234 729.491,-526 737.5423,-518.2054 747.8961,-512.1544 758.1065,-507.5534"/>
<polygon fill="#8b4513" stroke="#8b4513" points="759.4657,-510.7789 767.373,-503.7274 756.7941,-504.3088 759.4657,-510.7789"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed | defined in std.go:263&#10;at std.go:264: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at std.go:269: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at std.go:264: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:266: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:265: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M113.1936,-255C113.1936,-255 72.3408,-255 72.3408,-255 66.3408,-255 60.3408,-249 60.3408,-243 60.3408,-243 60.3408,-231 60.3408,-231 60.3408,-225 66.3408,-219 72.3408,-219 72.3408,-219 113.1936,-219 113.1936,-219 119.1936,-219 125.1936,-225 125.1936,-231 125.1936,-231 125.1936,-243 125.1936,-243 125.1936,-249 119.1936,-255 113.1936,-255"/>
<text text-anchor="middle" x="92.7672" y="-232.8" font-family="Verdana" font-size="14.00" fill="#000000">Reseed</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size | defined in std.go:90&#10;at std.go:95: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileExists]&#10;at std.go:95: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]&#10;at std.go:105: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]&#10;at std.go:95: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]&#10;at std.go:112: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:109: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:92: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:97: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:102: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:112: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:109: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:95: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileAge]&#10;at std.go:102: calling [(*github.com/sirupsen/logrus.Logger).Panic]&#10;at std.go:98: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M276.5344,-316C276.5344,-316 246.5344,-316 246.5344,-316 240.5344,-316 234.5344,-310 234.5344,-304 234.5344,-304 234.5344,-292 234.5344,-292 234.5344,-286 240.5344,-280 246.5344,-280 246.5344,-280 276.5344,-280 276.5344,-280 282.5344,-280 288.5344,-286 288.5344,-292 288.5344,-292 288.5344,-304 288.5344,-304 288.5344,-310 282.5344,-316 276.5344,-316"/>
<text text-anchor="middle" x="261.5344" y="-293.8" font-family="Verdana" font-size="14.00" fill="#000000">Size</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size -->
<g id="edge54" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size</title>
<g id="a_edge54"><a xlink:title="at std.go:265: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size]">
<path fill="none" stroke="#000000" d="M125.3072,-248.7614C153.7919,-259.0571 195.1448,-274.0038 224.8079,-284.7254"/>
<polygon fill="#000000" stroke="#000000" points="223.7896,-288.0789 234.3839,-288.1866 226.1691,-281.4957 223.7896,-288.0789"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge22" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge22"><a xlink:title="at std.go:264: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M125.0297,-244.0019C138.424,-248.5809 152.8413,-256.0243 161.5344,-268 282.0812,-434.0672 56.3276,-1186 261.5344,-1186 261.5344,-1186 261.5344,-1186 513.8016,-1186 592.1945,-1186 622.7148,-1169.5622 672.491,-1109 735.8066,-1031.9646 665.1298,-968.164 729.491,-892 734.6508,-885.8939 741.2614,-880.936 748.3348,-876.926"/>
<polygon fill="#8b4513" stroke="#8b4513" points="750.1024,-879.9549 757.4675,-872.3387 746.9604,-873.6997 750.1024,-879.9549"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node26" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node26"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M813.6756,-1062C813.6756,-1062 782.4958,-1062 782.4958,-1062 776.4958,-1062 770.4958,-1056 770.4958,-1050 770.4958,-1050 770.4958,-1038 770.4958,-1038 770.4958,-1032 776.4958,-1026 782.4958,-1026 782.4958,-1026 813.6756,-1026 813.6756,-1026 819.6756,-1026 825.6756,-1032 825.6756,-1038 825.6756,-1038 825.6756,-1050 825.6756,-1050 825.6756,-1056 819.6756,-1062 813.6756,-1062"/>
<text text-anchor="middle" x="798.0857" y="-1039.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge23" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge23"><a xlink:title="at std.go:269: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M125.1964,-243.8828C138.623,-248.4387 153.0194,-255.897 161.5344,-268 220.73,-352.1387 186.7544,-1099.8929 234.5344,-1191 241.7236,-1204.7084 246.0552,-1213 261.5344,-1213 261.5344,-1213 261.5344,-1213 607.3963,-1213 666.5088,-1213 666.3572,-1166.5384 701.491,-1119 715.2678,-1100.3591 711.9772,-1090.1839 729.491,-1075 738.5791,-1067.1209 749.999,-1060.9002 760.8991,-1056.1639"/>
<polygon fill="#8b4513" stroke="#8b4513" points="762.3102,-1059.3688 770.2726,-1052.3795 759.6895,-1052.8779 762.3102,-1059.3688"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge42" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Reseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge42"><a xlink:title="at std.go:264: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:266: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M97.1627,-218.9965C111.1758,-166.454 159.9626,-17 261.5344,-17 261.5344,-17 261.5344,-17 607.3963,-17 793.2714,-17 656.5749,-246.024 729.491,-417 738.1657,-437.3407 754.2686,-456.0915 768.6932,-470.1085"/>
<polygon fill="#8b4513" stroke="#8b4513" points="766.3455,-472.7052 776.0351,-476.9904 771.1327,-467.598 766.3455,-472.7052"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath | defined in std.go:121&#10;at std.go:122: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M646.422,-167C646.422,-167 568.3706,-167 568.3706,-167 562.3706,-167 556.3706,-161 556.3706,-155 556.3706,-155 556.3706,-143 556.3706,-143 556.3706,-137 562.3706,-131 568.3706,-131 568.3706,-131 646.422,-131 646.422,-131 652.422,-131 658.422,-137 658.422,-143 658.422,-143 658.422,-155 658.422,-155 658.422,-161 652.422,-167 646.422,-167"/>
<text text-anchor="middle" x="607.3963" y="-144.8" font-family="Verdana" font-size="14.00" fill="#000000">cacheFilePath</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath -->
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath</title>
<g id="a_edge7"><a xlink:title="at std.go:95: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]&#10;at std.go:105: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]&#10;at std.go:95: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]">
<path fill="none" stroke="#000000" d="M279.893,-279.8528C283.0541,-276.1329 286.1002,-272.0961 288.5344,-268 332.8424,-193.4414 282.7258,-134.0831 353.5344,-84 401.3467,-50.1823 428.9443,-68.0783 485.3016,-84 513.9098,-92.0822 516.0893,-104.9761 542.3016,-119 547.0333,-121.5315 552.018,-124.0614 557.0363,-126.5185"/>
<polygon fill="#000000" stroke="#000000" points="555.528,-129.6768 566.058,-130.8471 558.5561,-123.3656 555.528,-129.6768"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize | defined in std.go:137&#10;at std.go:191: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at std.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:200: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:200: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:140: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]&#10;at std.go:194: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]&#10;at std.go:138: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:191: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:198: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M464.3171,-194C464.3171,-194 374.5189,-194 374.5189,-194 368.5189,-194 362.5189,-188 362.5189,-182 362.5189,-182 362.5189,-170 362.5189,-170 362.5189,-164 368.5189,-158 374.5189,-158 374.5189,-158 464.3171,-158 464.3171,-158 470.3171,-158 476.3171,-164 476.3171,-170 476.3171,-170 476.3171,-182 476.3171,-182 476.3171,-188 470.3171,-194 464.3171,-194"/>
<text text-anchor="middle" x="419.418" y="-171.8" font-family="Verdana" font-size="14.00" fill="#000000">RecalculateSize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize -->
<g id="edge53" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize</title>
<g id="a_edge53"><a xlink:title="at std.go:98: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize]">
<path fill="none" stroke="#000000" d="M278.4975,-279.8158C300.3458,-256.6491 337.4206,-218.2589 353.5344,-207 357.5336,-204.2057 361.8243,-201.5494 366.2278,-199.053"/>
<polygon fill="#000000" stroke="#000000" points="368.2033,-201.9655 375.3677,-194.1602 364.8996,-195.7941 368.2033,-201.9655"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileExists -->
<g id="node20" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileExists</title>
<g id="a_node20"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileExists | defined in checkfile.go:10">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M465.1854,-1115C465.1854,-1115 373.6506,-1115 373.6506,-1115 367.6506,-1115 361.6506,-1109 361.6506,-1103 361.6506,-1103 361.6506,-1091 361.6506,-1091 361.6506,-1085 367.6506,-1079 373.6506,-1079 373.6506,-1079 465.1854,-1079 465.1854,-1079 471.1854,-1079 477.1854,-1085 477.1854,-1091 477.1854,-1091 477.1854,-1103 477.1854,-1103 477.1854,-1109 471.1854,-1115 465.1854,-1115"/>
<text text-anchor="middle" x="419.418" y="-1092.8" font-family="Verdana" font-size="14.00" fill="#000000">CheckFileExists</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileExists -->
<g id="edge5" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileExists</title>
<g id="a_edge5"><a xlink:title="at std.go:95: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileExists]">
<path fill="none" stroke="#8b4513" d="M262.2749,-316.0458C266.3723,-412.7166 287.4363,-869.9812 324.5344,-1006 332.4333,-1034.9611 332.1335,-1045.9491 353.5344,-1067 355.864,-1069.2915 358.4,-1071.427 361.0764,-1073.4145"/>
<polygon fill="#8b4513" stroke="#8b4513" points="359.1854,-1076.36 369.461,-1078.9412 363.0379,-1070.5154 359.1854,-1076.36"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileAge -->
<g id="node21" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileAge</title>
<g id="a_node21"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileAge | defined in checkfile.go:17">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M459.7835,-1054C459.7835,-1054 379.0525,-1054 379.0525,-1054 373.0525,-1054 367.0525,-1048 367.0525,-1042 367.0525,-1042 367.0525,-1030 367.0525,-1030 367.0525,-1024 373.0525,-1018 379.0525,-1018 379.0525,-1018 459.7835,-1018 459.7835,-1018 465.7835,-1018 471.7835,-1024 471.7835,-1030 471.7835,-1030 471.7835,-1042 471.7835,-1042 471.7835,-1048 465.7835,-1054 459.7835,-1054"/>
<text text-anchor="middle" x="419.418" y="-1031.8" font-family="Verdana" font-size="14.00" fill="#000000">CheckFileAge</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileAge -->
<g id="edge27" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileAge</title>
<g id="a_edge27"><a xlink:title="at std.go:95: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util.CheckFileAge]">
<path fill="none" stroke="#8b4513" d="M262.0361,-316.1435C265.0718,-420.6161 282.2871,-942.7646 324.5344,-999 332.8238,-1010.034 344.8791,-1017.7791 357.6333,-1023.2152"/>
<polygon fill="#8b4513" stroke="#8b4513" points="356.409,-1026.4941 367,-1026.7794 358.8985,-1019.9517 356.409,-1026.4941"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge19" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge19"><a xlink:title="at std.go:102: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:112: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:109: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M262.0311,-316.207C264.8513,-407.8012 281.3852,-817.7569 353.5344,-918 391.9136,-971.3236 434.9125,-942.8419 485.3016,-985 501.1183,-998.2331 496.4216,-1010.1531 513.3016,-1022 524.3479,-1029.7526 528.9588,-1028.9771 542.3016,-1031 599.5098,-1039.6731 620.8994,-1057.1976 672.491,-1031 710.7747,-1011.56 696.1611,-980.0679 729.491,-953 735.1402,-948.4122 741.5775,-944.3534 748.1928,-940.8106"/>
<polygon fill="#8b4513" stroke="#8b4513" points="749.8711,-943.885 757.2665,-936.2982 746.7541,-937.6172 749.8711,-943.885"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge11"><a xlink:title="at std.go:112: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:109: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M262.7103,-316.3084C269.5021,-419.396 305.1031,-924.5054 353.5344,-972 396.5626,-1014.1959 442.3599,-961.716 485.3016,-1004 520.6344,-1038.7916 474.0846,-1081.6538 513.3016,-1112 579.4501,-1163.1858 634.7173,-1162.3675 701.491,-1112 737.655,-1084.7215 699.8843,-1048.2841 729.491,-1014 737.8322,-1004.341 749.7915,-997.5401 761.3946,-992.8224"/>
<polygon fill="#8b4513" stroke="#8b4513" points="762.7732,-996.0452 770.9702,-989.3324 760.3762,-989.4684 762.7732,-996.0452"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge15"><a xlink:title="at std.go:92: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:97: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M262.3479,-316.0743C266.1728,-397.4366 283.9123,-737.7626 324.5344,-1014 333.7793,-1076.867 305.8103,-1112.046 353.5344,-1154 375.5896,-1173.3886 390.0522,-1159 419.418,-1159 419.418,-1159 419.418,-1159 513.8016,-1159 796.6345,-1159 703.1094,-561.7285 729.491,-526 736.5157,-516.4865 747.1451,-509.8252 757.9532,-505.1885"/>
<polygon fill="#8b4513" stroke="#8b4513" points="759.2941,-508.4235 767.411,-501.6142 756.8194,-501.8755 759.2941,-508.4235"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Panic -->
<g id="node29" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Panic</title>
<g id="a_node29"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Panic | defined in logger.go:252">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M813.6882,-574C813.6882,-574 782.4832,-574 782.4832,-574 776.4832,-574 770.4832,-568 770.4832,-562 770.4832,-562 770.4832,-550 770.4832,-550 770.4832,-544 776.4832,-538 782.4832,-538 782.4832,-538 813.6882,-538 813.6882,-538 819.6882,-538 825.6882,-544 825.6882,-550 825.6882,-550 825.6882,-562 825.6882,-562 825.6882,-568 819.6882,-574 813.6882,-574"/>
<text text-anchor="middle" x="798.0857" y="-551.8" font-family="Verdana" font-size="14.00" fill="#000000">Panic</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/sirupsen/logrus.Logger).Panic -->
<g id="edge49" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size&#45;&gt;(*github.com/sirupsen/logrus.Logger).Panic</title>
<g id="a_edge49"><a xlink:title="at std.go:102: calling [(*github.com/sirupsen/logrus.Logger).Panic]">
<path fill="none" stroke="#8b4513" d="M264.2746,-316.2881C272.7814,-370.4091 301.3501,-533.8701 353.5344,-660 384.952,-735.9366 470.8848,-937.3419 542.3016,-978 592.5857,-1006.6271 624.8381,-1010.8209 672.491,-978 702.2655,-957.4929 690.1738,-936.3363 701.491,-902 704.06,-894.2056 767.742,-665.1902 790.2747,-584.112"/>
<polygon fill="#8b4513" stroke="#8b4513" points="793.7463,-584.6913 793.0516,-574.1193 787.0018,-582.817 793.7463,-584.6913"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path -->
<g id="edge43" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path</title>
<g id="a_edge43"><a xlink:title="at std.go:122: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]">
<path fill="none" stroke="#000000" d="M658.4976,-160.7912C690.8665,-168.2601 731.9771,-177.746 761.1805,-184.4844"/>
<polygon fill="#000000" stroke="#000000" points="760.4488,-187.9075 770.9797,-186.7455 762.0227,-181.0867 760.4488,-187.9075"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path -->
<g id="edge26" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path</title>
<g id="a_edge26"><a xlink:title="at std.go:140: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]">
<path fill="none" stroke="#000000" d="M476.5184,-178.5635C555.1617,-182.0941 694.6002,-188.3541 760.9745,-191.3339"/>
<polygon fill="#000000" stroke="#000000" points="760.8324,-194.831 770.9793,-191.7831 761.1464,-187.838 760.8324,-194.831"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath -->
<g id="edge31" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath</title>
<g id="a_edge31"><a xlink:title="at std.go:194: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).cacheFilePath]">
<path fill="none" stroke="#000000" d="M476.3278,-167.8258C498.3493,-164.6628 523.605,-161.0352 546.0316,-157.814"/>
<polygon fill="#000000" stroke="#000000" points="546.714,-161.252 556.1148,-156.3657 545.7188,-154.3231 546.714,-161.252"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge16"><a xlink:title="at std.go:191: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M470.2474,-194.0515C475.8875,-197.6637 481.1003,-201.9445 485.3016,-207 549.3085,-284.0218 465.439,-360.802 542.3016,-425 564.5717,-443.6006 651.6618,-414.7989 672.491,-435 714.2065,-475.4574 682.2449,-639.8269 700.491,-695 718.1453,-748.3836 754.7269,-803.2729 777.7459,-834.6478"/>
<polygon fill="#8b4513" stroke="#8b4513" points="775.0739,-836.9198 783.8518,-842.8527 780.6896,-832.7408 775.0739,-836.9198"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge17" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge17"><a xlink:title="at std.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:200: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M471.413,-194.0648C476.7151,-197.6573 481.5279,-201.9296 485.3016,-207 548.1795,-291.4839 460.3275,-370.8834 542.3016,-437 590.7995,-476.1163 634.0122,-439.9948 672.491,-489 700.4196,-524.569 702.1401,-855.9849 729.491,-892 734.4103,-898.4777 741.0234,-903.5811 748.2083,-907.595"/>
<polygon fill="#8b4513" stroke="#8b4513" points="747.0056,-910.9017 757.5304,-912.1181 750.0614,-904.6038 747.0056,-910.9017"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge18" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge18"><a xlink:title="at std.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:200: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M471.4667,-194.025C476.7596,-197.6244 481.5556,-201.9092 485.3016,-207 539.019,-280.0025 487.318,-322.1682 513.3016,-409 521.9074,-437.7589 521.8007,-448.0718 542.3016,-470 587.6056,-518.4582 635.6563,-487.8289 672.491,-543 701.9382,-587.1062 692.9939,-727.4996 700.491,-780 711.5122,-857.1787 681.55,-891.5209 729.491,-953 737.3589,-963.0898 749.3183,-969.8558 761.0592,-974.3623"/>
<polygon fill="#8b4513" stroke="#8b4513" points="760.1815,-977.7599 770.7757,-977.6397 762.4189,-971.1271 760.1815,-977.7599"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge37" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).RecalculateSize&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge37"><a xlink:title="at std.go:138: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:191: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:198: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M468.0699,-194.0208C474.3383,-197.6847 480.3028,-201.9876 485.3016,-207 527.5633,-249.3766 494.1391,-293.4726 542.3016,-329 600.3073,-371.7884 649.6341,-309.9364 701.491,-360 721.797,-379.6038 713.812,-393.5306 729.491,-417 742.0003,-435.7249 758.6273,-454.7415 772.3783,-469.3098"/>
<polygon fill="#8b4513" stroke="#8b4513" points="770.228,-472.124 779.6774,-476.9156 775.2785,-467.2771 770.228,-472.124"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists | defined in std.go:209&#10;at std.go:210: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M624.6197,-106C624.6197,-106 590.1729,-106 590.1729,-106 584.1729,-106 578.1729,-100 578.1729,-94 578.1729,-94 578.1729,-82 578.1729,-82 578.1729,-76 584.1729,-70 590.1729,-70 590.1729,-70 624.6197,-70 624.6197,-70 630.6197,-70 636.6197,-76 636.6197,-82 636.6197,-82 636.6197,-94 636.6197,-94 636.6197,-100 630.6197,-106 624.6197,-106"/>
<text text-anchor="middle" x="607.3963" y="-83.8" font-family="Verdana" font-size="14.00" fill="#000000">Exists</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path -->
<g id="edge28" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path</title>
<g id="a_edge28"><a xlink:title="at std.go:210: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]">
<path fill="none" stroke="#000000" d="M636.5078,-101.1955C647.8485,-106.5093 660.8848,-112.8326 672.491,-119 703.3425,-135.3942 737.4421,-155.6256 762.3155,-170.7885"/>
<polygon fill="#000000" stroke="#000000" points="760.6828,-173.8927 771.0389,-176.1291 764.3377,-167.9227 760.6828,-173.8927"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create | defined in std.go:285&#10;at std.go:288: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:288: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at std.go:287: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]&#10;at std.go:301: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:296: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:301: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:296: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M625.4297,-316C625.4297,-316 589.3629,-316 589.3629,-316 583.3629,-316 577.3629,-310 577.3629,-304 577.3629,-304 577.3629,-292 577.3629,-292 577.3629,-286 583.3629,-280 589.3629,-280 589.3629,-280 625.4297,-280 625.4297,-280 631.4297,-280 637.4297,-286 637.4297,-292 637.4297,-292 637.4297,-304 637.4297,-304 637.4297,-310 631.4297,-316 625.4297,-316"/>
<text text-anchor="middle" x="607.3963" y="-293.8" font-family="Verdana" font-size="14.00" fill="#000000">Create</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path</title>
<g id="a_edge12"><a xlink:title="at std.go:287: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Path]">
<path fill="none" stroke="#000000" d="M637.5344,-284.9177C648.6482,-279.8831 661.2628,-273.9184 672.491,-268 703.3054,-251.7578 737.1525,-231.3912 761.9376,-215.9819"/>
<polygon fill="#000000" stroke="#000000" points="764.011,-218.8135 770.6366,-210.5459 760.3014,-212.8772 764.011,-218.8135"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge8"><a xlink:title="at std.go:288: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M637.4863,-300.9435C650.2368,-303.794 664.0667,-309.3243 672.491,-320 714.7908,-373.6045 684.0982,-559.7128 700.491,-626 719.9148,-704.5434 761.4981,-790.9835 783.5923,-833.8203"/>
<polygon fill="#8b4513" stroke="#8b4513" points="780.5295,-835.5166 788.2529,-842.7691 786.7379,-832.2831 780.5295,-835.5166"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge13"><a xlink:title="at std.go:301: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at std.go:296: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M637.4963,-300.9356C650.2489,-303.7845 664.0776,-309.3158 672.491,-320 715.6948,-374.8646 693.4941,-563.5181 700.491,-633 706.2937,-690.6238 695.1366,-845.3744 729.491,-892 734.3159,-898.5483 740.8807,-903.6878 748.0465,-907.716"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.8354,-911.019 757.3589,-912.2464 749.8977,-904.7243 746.8354,-911.019"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge24" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge24"><a xlink:title="at std.go:301: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at std.go:296: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M637.5124,-300.9229C650.2683,-303.7692 664.0951,-309.302 672.491,-320 694.8679,-348.5125 697.2366,-608.9015 700.491,-645 712.8365,-781.939 648.9103,-841.5934 729.491,-953 737.0491,-963.4495 749.0524,-970.3055 760.9199,-974.7838"/>
<polygon fill="#8b4513" stroke="#8b4513" points="760.1632,-978.2191 770.7561,-978.0131 762.3467,-971.5684 760.1632,-978.2191"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge1"><a xlink:title="at std.go:288: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M637.6015,-307.8206C658.0078,-315.8065 684.2682,-328.9064 701.491,-348 723.658,-372.575 712.0963,-388.8445 729.491,-417 741.2468,-436.0283 757.7131,-454.9278 771.5658,-469.3566"/>
<polygon fill="#8b4513" stroke="#8b4513" points="769.4465,-472.1945 778.9464,-476.8852 774.4451,-467.294 769.4465,-472.1945"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).CheckFilePathValid -->
<g id="node15" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).CheckFilePathValid</title>
<g id="a_node15"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).CheckFilePathValid | defined in std.go:125&#10;at std.go:129: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at std.go:132: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M149.3024,-316C149.3024,-316 36.232,-316 36.232,-316 30.232,-316 24.232,-310 24.232,-304 24.232,-304 24.232,-292 24.232,-292 24.232,-286 30.232,-280 36.232,-280 36.232,-280 149.3024,-280 149.3024,-280 155.3024,-280 161.3024,-286 161.3024,-292 161.3024,-292 161.3024,-304 161.3024,-304 161.3024,-310 155.3024,-316 149.3024,-316"/>
<text text-anchor="middle" x="92.7672" y="-293.8" font-family="Verdana" font-size="14.00" fill="#000000">CheckFilePathValid</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node27" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node27"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M829.3048,-1123C829.3048,-1123 766.8666,-1123 766.8666,-1123 760.8666,-1123 754.8666,-1117 754.8666,-1111 754.8666,-1111 754.8666,-1099 754.8666,-1099 754.8666,-1093 760.8666,-1087 766.8666,-1087 766.8666,-1087 829.3048,-1087 829.3048,-1087 835.3048,-1087 841.3048,-1093 841.3048,-1099 841.3048,-1099 841.3048,-1111 841.3048,-1111 841.3048,-1117 835.3048,-1123 829.3048,-1123"/>
<text text-anchor="middle" x="798.0857" y="-1100.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).CheckFilePathValid&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge32" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).CheckFilePathValid&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge32"><a xlink:title="at std.go:129: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M94.0472,-316.3944C103.4347,-447.8961 164.0277,-1240 261.5344,-1240 261.5344,-1240 261.5344,-1240 607.3963,-1240 637.662,-1240 648.5723,-1238.5449 672.491,-1220 710.8035,-1190.2952 691.3615,-1156.9393 729.491,-1127 734.2171,-1123.2891 739.5854,-1120.1962 745.1884,-1117.62"/>
<polygon fill="#8b4513" stroke="#8b4513" points="746.8038,-1120.7424 754.7674,-1113.7545 744.1842,-1114.251 746.8038,-1120.7424"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).CheckFilePathValid&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge44" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).CheckFilePathValid&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge44"><a xlink:title="at std.go:132: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M145.7055,-279.8939C151.4682,-276.5242 156.9097,-272.5855 161.5344,-268 238.9548,-191.2361 152.5086,-44 261.5344,-44 261.5344,-44 261.5344,-44 607.3963,-44 636.8986,-44 652.052,-35.7248 672.491,-57 784.7187,-173.8191 660.6121,-270.3798 729.491,-417 738.8935,-437.0147 755.027,-455.7518 769.2858,-469.8431"/>
<polygon fill="#8b4513" stroke="#8b4513" points="766.8808,-472.386 776.5258,-476.7706 771.7202,-467.3283 766.8808,-472.386"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure -->
<g id="node16" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure</title>
<g id="a_node16"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure | defined in std.go:274&#10;at std.go:276: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:279: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:277: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create]&#10;at std.go:275: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M438.7905,-133C438.7905,-133 400.0455,-133 400.0455,-133 394.0455,-133 388.0455,-127 388.0455,-121 388.0455,-121 388.0455,-109 388.0455,-109 388.0455,-103 394.0455,-97 400.0455,-97 400.0455,-97 438.7905,-97 438.7905,-97 444.7905,-97 450.7905,-103 450.7905,-109 450.7905,-109 450.7905,-121 450.7905,-121 450.7905,-127 444.7905,-133 438.7905,-133"/>
<text text-anchor="middle" x="419.418" y="-110.8" font-family="Verdana" font-size="14.00" fill="#000000">Ensure</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists -->
<g id="edge45" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists</title>
<g id="a_edge45"><a xlink:title="at std.go:275: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Exists]">
<path fill="none" stroke="#000000" d="M450.8813,-110.4808C482.991,-105.8688 532.919,-98.6974 567.7211,-93.6987"/>
<polygon fill="#000000" stroke="#000000" points="568.5989,-97.1086 577.9997,-92.2223 567.6036,-90.1797 568.5989,-97.1086"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create -->
<g id="edge39" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create</title>
<g id="a_edge39"><a xlink:title="at std.go:277: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Create]">
<path fill="none" stroke="#000000" d="M451.0234,-124.6847C462.9177,-129.5667 475.8396,-136.5123 485.3016,-146 527.5633,-188.3766 499.8721,-225.7914 542.3016,-268 549.4384,-275.0996 558.5651,-280.708 567.7113,-285.0586"/>
<polygon fill="#000000" stroke="#000000" points="566.5993,-288.3909 577.1671,-289.147 569.3773,-281.9658 566.5993,-288.3909"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge20" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge20"><a xlink:title="at std.go:276: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at std.go:279: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M451.121,-122.5192C463.7783,-127.1653 477.2359,-134.5183 485.3016,-146 524.1775,-201.3403 492.2905,-706.4722 542.3016,-752 552.9985,-761.7379 661.5237,-761.4323 672.491,-752 704.0152,-724.888 684.9559,-605.5681 700.491,-567 708.8303,-546.2966 712.2744,-540.2042 729.491,-526 737.8941,-519.0672 748.0978,-513.3625 758.0385,-508.821"/>
<polygon fill="#8b4513" stroke="#8b4513" points="759.5948,-511.9624 767.4213,-504.8213 756.8498,-505.5231 759.5948,-511.9624"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -25,3 +25,40 @@ type Reseed struct {
```go
func (r Reseed) SingleReseed(uri string) ([]router_info.RouterInfo, error)
```
# reseed
--
import "github.com/go-i2p/go-i2p/lib/netdb/reseed"
![reseed.svg](reseed)
## Usage
```go
const (
I2pUserAgent = "Wget/1.11.4"
)
```
#### type Reseed
```go
type Reseed struct {
net.Dialer
}
```
#### func (Reseed) SingleReseed
```go
func (r Reseed) SingleReseed(uri string) ([]router_info.RouterInfo, error)
```
reseed
github.com/go-i2p/go-i2p/lib/netdb/reseed

394
lib/netdb/reseed/reseed.svg Normal file
View File

@ -0,0 +1,394 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="342pt" height="1242pt"
viewBox="0.00 0.00 342.39 1242.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1242)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1242 342.3928,-1242 342.3928,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1234 334.3928,-1234 334.3928,-8 8,-8"/>
<text text-anchor="middle" x="171.1964" y="-1213.8" font-family="Arial" font-size="18.00" fill="#000000">reseed</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="210.7406,-927 210.7406,-1109 304.8556,-1109 304.8556,-927 210.7406,-927"/>
<text text-anchor="middle" x="257.7981" y="-1090.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M230.7406,-935C230.7406,-935 284.8556,-935 284.8556,-935 290.8556,-935 296.8556,-941 296.8556,-947 296.8556,-947 296.8556,-1062 296.8556,-1062 296.8556,-1068 290.8556,-1074 284.8556,-1074 284.8556,-1074 230.7406,-1074 230.7406,-1074 224.7406,-1074 218.7406,-1068 218.7406,-1062 218.7406,-1062 218.7406,-947 218.7406,-947 218.7406,-941 224.7406,-935 230.7406,-935"/>
<text text-anchor="middle" x="257.7981" y="-943.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="220.7006,-840 220.7006,-919 294.8956,-919 294.8956,-840 220.7006,-840"/>
<text text-anchor="middle" x="257.7981" y="-900.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="189.2034,-250 189.2034,-659 326.3928,-659 326.3928,-250 189.2034,-250"/>
<text text-anchor="middle" x="257.7981" y="-640.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M218.6887,-302C218.6887,-302 296.9075,-302 296.9075,-302 302.9075,-302 308.9075,-308 308.9075,-314 308.9075,-314 308.9075,-612 308.9075,-612 308.9075,-618 302.9075,-624 296.9075,-624 296.9075,-624 218.6887,-624 218.6887,-624 212.6887,-624 206.6887,-618 206.6887,-612 206.6887,-612 206.6887,-314 206.6887,-314 206.6887,-308 212.6887,-302 218.6887,-302"/>
<text text-anchor="middle" x="257.7981" y="-310.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/su3</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/su3" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/su3">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="202.9713,-16 202.9713,-242 312.6249,-242 312.6249,-16 202.9713,-16"/>
<text text-anchor="middle" x="257.7981" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">su3</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/su3" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M222.9713,-68C222.9713,-68 292.6249,-68 292.6249,-68 298.6249,-68 304.6249,-74 304.6249,-80 304.6249,-80 304.6249,-195 304.6249,-195 304.6249,-201 298.6249,-207 292.6249,-207 292.6249,-207 222.9713,-207 222.9713,-207 216.9713,-207 210.9713,-201 210.9713,-195 210.9713,-195 210.9713,-80 210.9713,-80 210.9713,-74 216.9713,-68 222.9713,-68"/>
<text text-anchor="middle" x="257.7981" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*SU3)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed</title>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-515C28,-515 120.2034,-515 120.2034,-515 126.2034,-515 132.2034,-521 132.2034,-527 132.2034,-527 132.2034,-581 132.2034,-581 132.2034,-587 126.2034,-593 120.2034,-593 120.2034,-593 28,-593 28,-593 22,-593 16,-587 16,-581 16,-581 16,-527 16,-527 16,-521 22,-515 28,-515"/>
<text text-anchor="middle" x="74.1017" y="-523.5" font-family="Arial" font-size="15.00" fill="#222222">(Reseed)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="192.7034,-1117 192.7034,-1196 322.8928,-1196 322.8928,-1117 192.7034,-1117"/>
<text text-anchor="middle" x="257.7981" y="-1177.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/eyedeekay/go&#45;unzip/pkg/unzip</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/eyedeekay/go-unzip/pkg/unzip" xlink:title="package: github.com/eyedeekay/go&#45;unzip/pkg/unzip">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="209.5863,-667 209.5863,-832 306.0099,-832 306.0099,-667 209.5863,-667"/>
<text text-anchor="middle" x="257.7981" y="-813.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">unzip</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/eyedeekay/go-unzip/pkg/unzip" xlink:title="type: github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M229.5863,-719C229.5863,-719 286.0099,-719 286.0099,-719 292.0099,-719 298.0099,-725 298.0099,-731 298.0099,-731 298.0099,-785 298.0099,-785 298.0099,-791 292.0099,-797 286.0099,-797 286.0099,-797 229.5863,-797 229.5863,-797 223.5863,-797 217.5863,-791 217.5863,-785 217.5863,-785 217.5863,-731 217.5863,-731 217.5863,-725 223.5863,-719 229.5863,-719"/>
<text text-anchor="middle" x="257.7981" y="-727.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Unzip)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init | defined in .:0&#10;at reseed.go:21: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M89.1017,-294C89.1017,-294 59.1017,-294 59.1017,-294 53.1017,-294 47.1017,-288 47.1017,-282 47.1017,-282 47.1017,-270 47.1017,-270 47.1017,-264 53.1017,-258 59.1017,-258 59.1017,-258 89.1017,-258 89.1017,-258 95.1017,-258 101.1017,-264 101.1017,-270 101.1017,-270 101.1017,-282 101.1017,-282 101.1017,-288 95.1017,-294 89.1017,-294"/>
<text text-anchor="middle" x="74.1017" y="-271.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.4876,-294C306.4876,-294 209.1086,-294 209.1086,-294 203.1086,-294 197.1086,-288 197.1086,-282 197.1086,-282 197.1086,-270 197.1086,-270 197.1086,-264 203.1086,-258 209.1086,-258 209.1086,-258 306.4876,-258 306.4876,-258 312.4876,-258 318.4876,-264 318.4876,-270 318.4876,-270 318.4876,-282 318.4876,-282 318.4876,-288 312.4876,-294 306.4876,-294"/>
<text text-anchor="middle" x="257.7981" y="-271.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge10"><a xlink:title="at reseed.go:21: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M101.2067,-276C123.8024,-276 157.0344,-276 187.0776,-276"/>
<polygon fill="#8b4513" stroke="#8b4513" points="187.124,-279.5001 197.124,-276 187.124,-272.5001 187.124,-279.5001"/>
</a>
</g>
</g>
<!-- github.com/eyedeekay/go&#45;unzip/pkg/unzip.New -->
<g id="node2" class="node">
<title>github.com/eyedeekay/go&#45;unzip/pkg/unzip.New</title>
<g id="a_node2"><a xlink:title="github.com/eyedeekay/go&#45;unzip/pkg/unzip.New | defined in unzip.go:18">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.7981,-711C272.7981,-711 242.7981,-711 242.7981,-711 236.7981,-711 230.7981,-705 230.7981,-699 230.7981,-699 230.7981,-687 230.7981,-687 230.7981,-681 236.7981,-675 242.7981,-675 242.7981,-675 272.7981,-675 272.7981,-675 278.7981,-675 284.7981,-681 284.7981,-687 284.7981,-687 284.7981,-699 284.7981,-699 284.7981,-705 278.7981,-711 272.7981,-711"/>
<text text-anchor="middle" x="257.7981" y="-688.8" font-family="Verdana" font-size="14.00" fill="#000000">New</text>
</a>
</g>
</g>
<!-- (github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract -->
<g id="node3" class="node">
<title>(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract</title>
<g id="a_node3"><a xlink:title="(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract | defined in unzip.go:22">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M278.2231,-789C278.2231,-789 237.3731,-789 237.3731,-789 231.3731,-789 225.3731,-783 225.3731,-777 225.3731,-777 225.3731,-765 225.3731,-765 225.3731,-759 231.3731,-753 237.3731,-753 237.3731,-753 278.2231,-753 278.2231,-753 284.2231,-753 290.2231,-759 290.2231,-765 290.2231,-765 290.2231,-777 290.2231,-777 290.2231,-783 284.2231,-789 278.2231,-789"/>
<text text-anchor="middle" x="257.7981" y="-766.8" font-family="Verdana" font-size="14.00" fill="#000000">Extract</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo | defined in router_info.go:233">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M302.9877,-1161C302.9877,-1161 212.6085,-1161 212.6085,-1161 206.6085,-1161 200.6085,-1155 200.6085,-1149 200.6085,-1149 200.6085,-1137 200.6085,-1137 200.6085,-1131 206.6085,-1125 212.6085,-1125 212.6085,-1125 302.9877,-1125 302.9877,-1125 308.9877,-1125 314.9877,-1131 314.9877,-1137 314.9877,-1137 314.9877,-1149 314.9877,-1149 314.9877,-1155 308.9877,-1161 302.9877,-1161"/>
<text text-anchor="middle" x="257.7981" y="-1138.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterInfo</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed -->
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed | defined in reseed.go:31&#10;at reseed.go:72: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content]&#10;at reseed.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]&#10;at reseed.go:32: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:68: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:99: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:119: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:123: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:95: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:59: calling [github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read]&#10;at reseed.go:74: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature]&#10;at reseed.go:89: calling [(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract]&#10;at reseed.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:89: calling [github.com/eyedeekay/go&#45;unzip/pkg/unzip.New]&#10;at reseed.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:99: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:65: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at reseed.go:124: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:96: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:79: calling [(*github.com/sirupsen/logrus.Logger).Println]&#10;at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M112.3053,-585C112.3053,-585 35.8981,-585 35.8981,-585 29.8981,-585 23.8981,-579 23.8981,-573 23.8981,-573 23.8981,-561 23.8981,-561 23.8981,-555 29.8981,-549 35.8981,-549 35.8981,-549 112.3053,-549 112.3053,-549 118.3053,-549 124.3053,-555 124.3053,-561 124.3053,-561 124.3053,-573 124.3053,-573 124.3053,-579 118.3053,-585 112.3053,-585"/>
<text text-anchor="middle" x="74.1017" y="-562.8" font-family="Verdana" font-size="14.00" fill="#000000">SingleReseed</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/eyedeekay/go&#45;unzip/pkg/unzip.New -->
<g id="edge9" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/eyedeekay/go&#45;unzip/pkg/unzip.New</title>
<g id="a_edge9"><a xlink:title="at reseed.go:89: calling [github.com/eyedeekay/go&#45;unzip/pkg/unzip.New]">
<path fill="none" stroke="#8b4513" d="M100.4209,-585.0527C132.6134,-607.134 187.216,-644.5867 222.8908,-669.0566"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.3014,-672.2106 231.5277,-674.9808 225.2609,-666.438 221.3014,-672.2106"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract -->
<g id="edge7" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract</title>
<g id="a_edge7"><a xlink:title="at reseed.go:89: calling [(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract]">
<path fill="none" stroke="#8b4513" d="M80.664,-585.1951C94.7563,-621.7155 131.4015,-704.2676 189.2034,-749 196.9844,-755.0217 206.4612,-759.42 215.8566,-762.624"/>
<polygon fill="#8b4513" stroke="#8b4513" points="214.9588,-766.0089 225.5436,-765.5485 216.982,-759.3076 214.9588,-766.0089"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo -->
<g id="edge2" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo</title>
<g id="a_edge2"><a xlink:title="at reseed.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]">
<path fill="none" stroke="#8b4513" d="M76.6054,-585.2128C87.9601,-666.0957 136.3556,-992.6229 189.2034,-1080 197.9899,-1094.5274 211.1083,-1107.7361 223.5269,-1118.264"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.5692,-1121.1834 231.5341,-1124.7822 225.9884,-1115.7547 221.5692,-1121.1834"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read | defined in su3.go:208">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.7981,-60C272.7981,-60 242.7981,-60 242.7981,-60 236.7981,-60 230.7981,-54 230.7981,-48 230.7981,-48 230.7981,-36 230.7981,-36 230.7981,-30 236.7981,-24 242.7981,-24 242.7981,-24 272.7981,-24 272.7981,-24 278.7981,-24 284.7981,-30 284.7981,-36 284.7981,-36 284.7981,-48 284.7981,-48 284.7981,-54 278.7981,-60 272.7981,-60"/>
<text text-anchor="middle" x="257.7981" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Read</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read -->
<g id="edge5" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read</title>
<g id="a_edge5"><a xlink:title="at reseed.go:59: calling [github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read]">
<path fill="none" stroke="#8b4513" d="M124.3063,-552.5798C127.2619,-550.3994 129.9451,-547.8894 132.2034,-545 165.3444,-502.5961 154.9794,-105.5348 189.2034,-64 197.0942,-54.4236 209.1723,-48.9656 221.0066,-45.8721"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.7395,-49.2947 230.7929,-43.7913 220.2836,-42.4477 221.7395,-49.2947"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content | defined in su3.go:197">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M280.1313,-138C280.1313,-138 235.4649,-138 235.4649,-138 229.4649,-138 223.4649,-132 223.4649,-126 223.4649,-126 223.4649,-114 223.4649,-114 223.4649,-108 229.4649,-102 235.4649,-102 235.4649,-102 280.1313,-102 280.1313,-102 286.1313,-102 292.1313,-108 292.1313,-114 292.1313,-114 292.1313,-126 292.1313,-126 292.1313,-132 286.1313,-138 280.1313,-138"/>
<text text-anchor="middle" x="257.7981" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Content</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content -->
<g id="edge1" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content</title>
<g id="a_edge1"><a xlink:title="at reseed.go:72: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content]">
<path fill="none" stroke="#8b4513" d="M124.2229,-552.5138C127.1977,-550.3487 129.9082,-547.8602 132.2034,-545 187.5727,-476.0025 136.0167,-221.6937 189.2034,-151 195.4496,-142.6978 204.4315,-136.5625 213.8477,-132.0488"/>
<polygon fill="#8b4513" stroke="#8b4513" points="215.4675,-135.1643 223.3233,-128.0555 212.749,-128.7138 215.4675,-135.1643"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature | defined in su3.go:203">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M284.4525,-199C284.4525,-199 231.1437,-199 231.1437,-199 225.1437,-199 219.1437,-193 219.1437,-187 219.1437,-187 219.1437,-175 219.1437,-175 219.1437,-169 225.1437,-163 231.1437,-163 231.1437,-163 284.4525,-163 284.4525,-163 290.4525,-163 296.4525,-169 296.4525,-175 296.4525,-175 296.4525,-187 296.4525,-187 296.4525,-193 290.4525,-199 284.4525,-199"/>
<text text-anchor="middle" x="257.7981" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Signature</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature -->
<g id="edge6" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature</title>
<g id="a_edge6"><a xlink:title="at reseed.go:74: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature]">
<path fill="none" stroke="#8b4513" d="M124.3485,-552.2102C127.2526,-550.1164 129.9159,-547.727 132.2034,-545 175.9556,-492.8434 156.1169,-303.4966 189.2034,-244 197.3904,-229.2781 210.2739,-216.105 222.6756,-205.6582"/>
<polygon fill="#8b4513" stroke="#8b4513" points="225.1061,-208.1948 230.7015,-199.198 220.7169,-202.7418 225.1061,-208.1948"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M286.0726,-616C286.0726,-616 229.5236,-616 229.5236,-616 223.5236,-616 217.5236,-610 217.5236,-604 217.5236,-604 217.5236,-592 217.5236,-592 217.5236,-586 223.5236,-580 229.5236,-580 229.5236,-580 286.0726,-580 286.0726,-580 292.0726,-580 298.0726,-586 298.0726,-592 298.0726,-592 298.0726,-604 298.0726,-604 298.0726,-610 292.0726,-616 286.0726,-616"/>
<text text-anchor="middle" x="257.7981" y="-593.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge11" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge11"><a xlink:title="at reseed.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:99: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M124.2975,-575.4709C150.0871,-579.823 181.435,-585.1132 207.2718,-589.4733"/>
<polygon fill="#8b4513" stroke="#8b4513" points="206.8005,-592.9432 217.2435,-591.1561 207.9654,-586.0408 206.8005,-592.9432"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M286.3296,-372C286.3296,-372 229.2666,-372 229.2666,-372 223.2666,-372 217.2666,-366 217.2666,-360 217.2666,-360 217.2666,-348 217.2666,-348 217.2666,-342 223.2666,-336 229.2666,-336 229.2666,-336 286.3296,-336 286.3296,-336 292.3296,-336 298.3296,-342 298.3296,-348 298.3296,-348 298.3296,-360 298.3296,-360 298.3296,-366 292.3296,-372 286.3296,-372"/>
<text text-anchor="middle" x="257.7981" y="-349.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge15" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge15"><a xlink:title="at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M124.429,-551.4226C127.2366,-549.5194 129.8625,-547.3875 132.2034,-545 185.0529,-491.0973 138.0638,-440.5275 189.2034,-385 194.4946,-379.2548 201.0538,-374.5026 208.0007,-370.5928"/>
<polygon fill="#8b4513" stroke="#8b4513" points="209.5913,-373.7106 216.9411,-366.0796 206.4368,-367.4617 209.5913,-373.7106"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.7981,-433C272.7981,-433 242.7981,-433 242.7981,-433 236.7981,-433 230.7981,-427 230.7981,-421 230.7981,-421 230.7981,-409 230.7981,-409 230.7981,-403 236.7981,-397 242.7981,-397 242.7981,-397 272.7981,-397 272.7981,-397 278.7981,-397 284.7981,-403 284.7981,-409 284.7981,-409 284.7981,-421 284.7981,-421 284.7981,-427 278.7981,-433 272.7981,-433"/>
<text text-anchor="middle" x="257.7981" y="-410.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge4" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge4"><a xlink:title="at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:123: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:95: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M124.2356,-550.7393C127.0549,-549.0053 129.7394,-547.0973 132.2034,-545 170.8659,-512.0912 151.5879,-480.1006 189.2034,-446 198.2645,-437.7856 209.8677,-431.4342 220.9435,-426.6815"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.4561,-429.847 230.4639,-422.9097 219.8778,-423.3391 222.4561,-429.847"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M289.0172,-494C289.0172,-494 226.579,-494 226.579,-494 220.579,-494 214.579,-488 214.579,-482 214.579,-482 214.579,-470 214.579,-470 214.579,-464 220.579,-458 226.579,-458 226.579,-458 289.0172,-458 289.0172,-458 295.0172,-458 301.0172,-464 301.0172,-470 301.0172,-470 301.0172,-482 301.0172,-482 301.0172,-488 295.0172,-494 289.0172,-494"/>
<text text-anchor="middle" x="257.7981" y="-471.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge12" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge12"><a xlink:title="at reseed.go:65: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M124.1838,-548.8797C126.9237,-547.6274 129.6136,-546.3318 132.2034,-545 159.2798,-531.0759 162.5752,-521.7632 189.2034,-507 194.402,-504.1178 199.9187,-501.2812 205.4763,-498.5649"/>
<polygon fill="#8b4513" stroke="#8b4513" points="207.2923,-501.5769 214.8191,-494.1205 204.2852,-495.2557 207.2923,-501.5769"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M273.388,-555C273.388,-555 242.2082,-555 242.2082,-555 236.2082,-555 230.2082,-549 230.2082,-543 230.2082,-543 230.2082,-531 230.2082,-531 230.2082,-525 236.2082,-519 242.2082,-519 242.2082,-519 273.388,-519 273.388,-519 279.388,-519 285.388,-525 285.388,-531 285.388,-531 285.388,-543 285.388,-543 285.388,-549 279.388,-555 273.388,-555"/>
<text text-anchor="middle" x="257.7981" y="-532.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge8" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge8"><a xlink:title="at reseed.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M124.2975,-558.8024C154.5341,-553.8643 192.4114,-547.6785 220.0891,-543.1584"/>
<polygon fill="#8b4513" stroke="#8b4513" points="220.8551,-546.5797 230.1602,-541.5136 219.7268,-539.6712 220.8551,-546.5797"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node15" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node15"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M274.9934,-884C274.9934,-884 240.6028,-884 240.6028,-884 234.6028,-884 228.6028,-878 228.6028,-872 228.6028,-872 228.6028,-860 228.6028,-860 228.6028,-854 234.6028,-848 240.6028,-848 240.6028,-848 274.9934,-848 274.9934,-848 280.9934,-848 286.9934,-854 286.9934,-860 286.9934,-860 286.9934,-872 286.9934,-872 286.9934,-878 280.9934,-884 274.9934,-884"/>
<text text-anchor="middle" x="257.7981" y="-861.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge13" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge13"><a xlink:title="at reseed.go:124: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:96: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M80.2807,-585.1365C94.9059,-626.4685 134.5594,-729.7346 189.2034,-803 199.5917,-816.9284 213.3454,-830.2644 225.8087,-841.051"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.861,-843.9865 233.7642,-847.7518 228.3705,-838.6326 223.861,-843.9865"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node16" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node16"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M276.6201,-1066C276.6201,-1066 238.9761,-1066 238.9761,-1066 232.9761,-1066 226.9761,-1060 226.9761,-1054 226.9761,-1054 226.9761,-1042 226.9761,-1042 226.9761,-1036 232.9761,-1030 238.9761,-1030 238.9761,-1030 276.6201,-1030 276.6201,-1030 282.6201,-1030 288.6201,-1036 288.6201,-1042 288.6201,-1042 288.6201,-1054 288.6201,-1054 288.6201,-1060 282.6201,-1066 276.6201,-1066"/>
<text text-anchor="middle" x="257.7981" y="-1043.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge3" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge3"><a xlink:title="at reseed.go:32: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:68: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:99: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:119: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M76.5803,-585.1352C87.2199,-660.6832 131.1315,-949.6388 189.2034,-1018 196.6127,-1026.7221 207.0394,-1032.9932 217.5316,-1037.4676"/>
<polygon fill="#8b4513" stroke="#8b4513" points="216.5095,-1040.823 227.1009,-1041.0904 218.9879,-1034.2765 216.5095,-1040.823"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Println -->
<g id="node17" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Println</title>
<g id="a_node17"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Println | defined in logger.go:315">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M276.9132,-1005C276.9132,-1005 238.683,-1005 238.683,-1005 232.683,-1005 226.683,-999 226.683,-993 226.683,-993 226.683,-981 226.683,-981 226.683,-975 232.683,-969 238.683,-969 238.683,-969 276.9132,-969 276.9132,-969 282.9132,-969 288.9132,-975 288.9132,-981 288.9132,-981 288.9132,-993 288.9132,-993 288.9132,-999 282.9132,-1005 276.9132,-1005"/>
<text text-anchor="middle" x="257.7981" y="-982.8" font-family="Verdana" font-size="14.00" fill="#000000">Println</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Println -->
<g id="edge14" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Println</title>
<g id="a_edge14"><a xlink:title="at reseed.go:79: calling [(*github.com/sirupsen/logrus.Logger).Println]">
<path fill="none" stroke="#8b4513" d="M76.5355,-585.177C84.595,-640.3185 114.2886,-809.0089 189.2034,-925 198.348,-939.1587 211.5308,-952.133 223.9007,-962.5126"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.8836,-965.3825 231.8616,-968.9451 226.2831,-959.9378 221.8836,-965.3825"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -9,6 +9,10 @@
```go
type Router struct {
// keystore for router info
*keys.RouterInfoKeystore
// multi-transport manager
*transport.TransportMuxer
}
```
@ -17,9 +21,9 @@ i2p router type
#### func CreateRouter
```go
func CreateRouter() (r *Router, err error)
func CreateRouter(cfg *config.RouterConfig) (*Router, error)
```
create router with default configuration
CreateRouter creates a router with the provided configuration
#### func FromConfig
@ -56,3 +60,75 @@ Stop starts stopping internal state of router
func (r *Router) Wait()
```
Wait blocks until router is fully stopped
# router
--
import "github.com/go-i2p/go-i2p/lib/router"
![router.svg](router)
## Usage
#### type Router
```go
type Router struct {
// keystore for router info
*keys.RouterInfoKeystore
// multi-transport manager
*transport.TransportMuxer
}
```
i2p router type
#### func CreateRouter
```go
func CreateRouter(cfg *config.RouterConfig) (*Router, error)
```
CreateRouter creates a router with the provided configuration
#### func FromConfig
```go
func FromConfig(c *config.RouterConfig) (r *Router, err error)
```
create router from configuration
#### func (*Router) Close
```go
func (r *Router) Close() error
```
Close closes any internal state and finallizes router resources so that nothing
can start up again
#### func (*Router) Start
```go
func (r *Router) Start()
```
Start starts router mainloop
#### func (*Router) Stop
```go
func (r *Router) Stop()
```
Stop starts stopping internal state of router
#### func (*Router) Wait
```go
func (r *Router) Wait()
```
Wait blocks until router is fully stopped
router
github.com/go-i2p/go-i2p/lib/router

680
lib/router/router.svg Normal file
View File

@ -0,0 +1,680 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="711pt" height="1220pt"
viewBox="0.00 0.00 710.53 1220.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1220)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1220 710.5276,-1220 710.5276,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1212 702.5276,-1212 702.5276,-8 8,-8"/>
<text text-anchor="middle" x="355.2638" y="-1191.8" font-family="Arial" font-size="18.00" fill="#000000">router</text>
</g>
<g id="clust15" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust15"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="601.2064,-1020 601.2064,-1141 694.5276,-1141 694.5276,-1020 601.2064,-1020"/>
<text text-anchor="middle" x="647.867" y="-1122.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust16" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust16"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M621.2064,-1028C621.2064,-1028 674.5276,-1028 674.5276,-1028 680.5276,-1028 686.5276,-1034 686.5276,-1040 686.5276,-1040 686.5276,-1094 686.5276,-1094 686.5276,-1100 680.5276,-1106 674.5276,-1106 674.5276,-1106 621.2064,-1106 621.2064,-1106 615.2064,-1106 609.2064,-1100 609.2064,-1094 609.2064,-1094 609.2064,-1040 609.2064,-1040 609.2064,-1034 615.2064,-1028 621.2064,-1028"/>
<text text-anchor="middle" x="647.867" y="-1036.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust13" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust13"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="415.017,-323 415.017,-732 552.2064,-732 552.2064,-323 415.017,-323"/>
<text text-anchor="middle" x="483.6117" y="-713.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust14" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust14"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M444.5023,-375C444.5023,-375 522.7211,-375 522.7211,-375 528.7211,-375 534.7211,-381 534.7211,-387 534.7211,-387 534.7211,-685 534.7211,-685 534.7211,-691 528.7211,-697 522.7211,-697 522.7211,-697 444.5023,-697 444.5023,-697 438.5023,-697 432.5023,-691 432.5023,-685 432.5023,-685 432.5023,-387 432.5023,-387 432.5023,-381 438.5023,-375 444.5023,-375"/>
<text text-anchor="middle" x="483.6117" y="-383.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/transport/ntcp" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="187.0106,-694 187.0106,-868 350.6404,-868 350.6404,-694 187.0106,-694"/>
<text text-anchor="middle" x="268.8255" y="-849.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">ntcp</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/transport/ntcp" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M212.89,-702C212.89,-702 325.761,-702 325.761,-702 331.761,-702 337.761,-708 337.761,-714 337.761,-714 337.761,-768 337.761,-768 337.761,-774 331.761,-780 325.761,-780 325.761,-780 212.89,-780 212.89,-780 206.89,-780 200.89,-774 200.89,-768 200.89,-768 200.89,-714 200.89,-714 200.89,-708 206.89,-702 212.89,-702"/>
<text text-anchor="middle" x="269.3255" y="-710.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*NTCP2Transport)</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/transport</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/transport" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/transport">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="232.8255,-607 232.8255,-686 304.8255,-686 304.8255,-607 232.8255,-607"/>
<text text-anchor="middle" x="268.8255" y="-667.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">transport</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/netdb</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/netdb" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/netdb">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="421.2337,-740 421.2337,-966 545.9897,-966 545.9897,-740 421.2337,-740"/>
<text text-anchor="middle" x="483.6117" y="-947.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">netdb</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/netdb" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M448.1755,-792C448.1755,-792 520.0479,-792 520.0479,-792 526.0479,-792 532.0479,-798 532.0479,-804 532.0479,-804 532.0479,-919 532.0479,-919 532.0479,-925 526.0479,-931 520.0479,-931 520.0479,-931 448.1755,-931 448.1755,-931 442.1755,-931 436.1755,-925 436.1755,-919 436.1755,-919 436.1755,-804 436.1755,-804 436.1755,-798 442.1755,-792 448.1755,-792"/>
<text text-anchor="middle" x="484.1117" y="-800.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*StdNetDB)</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/keys</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/keys" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/keys">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="179.634,-232 179.634,-519 358.017,-519 358.017,-232 179.634,-232"/>
<text text-anchor="middle" x="268.8255" y="-500.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/keys" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M202.8949,-284C202.8949,-284 334.7561,-284 334.7561,-284 340.7561,-284 346.7561,-290 346.7561,-296 346.7561,-296 346.7561,-472 346.7561,-472 346.7561,-478 340.7561,-484 334.7561,-484 334.7561,-484 202.8949,-484 202.8949,-484 196.8949,-484 190.8949,-478 190.8949,-472 190.8949,-472 190.8949,-296 190.8949,-296 190.8949,-290 196.8949,-284 202.8949,-284"/>
<text text-anchor="middle" x="268.8255" y="-292.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*RouterInfoKeystore)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="205.8367,-103 205.8367,-224 331.8143,-224 331.8143,-103 205.8367,-103"/>
<text text-anchor="middle" x="268.8255" y="-205.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M225.8367,-111C225.8367,-111 311.8143,-111 311.8143,-111 317.8143,-111 323.8143,-117 323.8143,-123 323.8143,-123 323.8143,-177 323.8143,-177 323.8143,-183 317.8143,-189 311.8143,-189 311.8143,-189 225.8367,-189 225.8367,-189 219.8367,-189 213.8367,-183 213.8367,-177 213.8367,-177 213.8367,-123 213.8367,-123 213.8367,-117 219.8367,-111 225.8367,-111"/>
<text text-anchor="middle" x="268.8255" y="-119.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*RouterInfo)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/base32</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/base32" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/base32">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="202.9461,-16 202.9461,-95 334.7049,-95 334.7049,-16 202.9461,-16"/>
<text text-anchor="middle" x="268.8255" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">base32</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/router.Router">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M41.3738,-974C41.3738,-974 506.6117,-974 506.6117,-974 512.6117,-974 518.6117,-980 518.6117,-986 518.6117,-986 518.6117,-1162 518.6117,-1162 518.6117,-1168 512.6117,-1174 506.6117,-1174 506.6117,-1174 41.3738,-1174 41.3738,-1174 35.3738,-1174 29.3738,-1168 29.3738,-1162 29.3738,-1162 29.3738,-986 29.3738,-986 29.3738,-980 35.3738,-974 41.3738,-974"/>
<text text-anchor="middle" x="273.9928" y="-982.5" font-family="Arial" font-size="15.00" fill="#222222">(*Router)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter | defined in router.go:39&#10;at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig]&#10;at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore]&#10;at router.go:55: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys]&#10;at router.go:91: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux]&#10;at router.go:73: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo]&#10;at router.go:99: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).AddAddress]&#10;at router.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:46: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:49: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:59: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:70: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:78: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:97: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:56: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:64: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:86: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:56: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:64: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:86: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:62: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]&#10;at router.go:69: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]&#10;at router.go:84: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport]&#10;at router.go:92: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M102.4517,-546C102.4517,-546 28.1823,-546 28.1823,-546 22.1823,-546 16.1823,-540 16.1823,-534 16.1823,-534 16.1823,-522 16.1823,-522 16.1823,-516 22.1823,-510 28.1823,-510 28.1823,-510 102.4517,-510 102.4517,-510 108.4517,-510 114.4517,-516 114.4517,-522 114.4517,-522 114.4517,-534 114.4517,-534 114.4517,-540 108.4517,-546 102.4517,-546"/>
<text text-anchor="middle" x="65.317" y="-523.8" font-family="Verdana" font-size="14.00" fill="#000000">CreateRouter</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig | defined in router.go:107&#10;at router.go:108: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at router.go:108: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M303.5474,-590C303.5474,-590 234.1036,-590 234.1036,-590 228.1036,-590 222.1036,-584 222.1036,-578 222.1036,-578 222.1036,-566 222.1036,-566 222.1036,-560 228.1036,-554 234.1036,-554 234.1036,-554 303.5474,-554 303.5474,-554 309.5474,-554 315.5474,-560 315.5474,-566 315.5474,-566 315.5474,-578 315.5474,-578 315.5474,-584 309.5474,-590 303.5474,-590"/>
<text text-anchor="middle" x="268.8255" y="-567.8" font-family="Verdana" font-size="14.00" fill="#000000">FromConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig</title>
<g id="a_edge1"><a xlink:title="at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig]">
<path fill="none" stroke="#000000" d="M114.5807,-538.6512C143.9618,-545.0036 181.3832,-553.0944 212.0086,-559.7158"/>
<polygon fill="#000000" stroke="#000000" points="211.5988,-563.208 222.1126,-561.9003 213.0781,-556.3661 211.5988,-563.208"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString | defined in base32.go:16">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M314.5846,-60C314.5846,-60 223.0664,-60 223.0664,-60 217.0664,-60 211.0664,-54 211.0664,-48 211.0664,-48 211.0664,-36 211.0664,-36 211.0664,-30 217.0664,-24 223.0664,-24 223.0664,-24 314.5846,-24 314.5846,-24 320.5846,-24 326.5846,-30 326.5846,-36 326.5846,-36 326.5846,-48 326.5846,-48 326.5846,-54 320.5846,-60 314.5846,-60"/>
<text text-anchor="middle" x="268.8255" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString -->
<g id="edge31" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString</title>
<g id="a_edge31"><a xlink:title="at router.go:69: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M65.9449,-509.6788C68.9166,-447.2657 85.7361,-239.3799 179.634,-105 190.8116,-89.0034 207.421,-75.6852 223.2868,-65.4778"/>
<polygon fill="#8b4513" stroke="#8b4513" points="225.2997,-68.3488 231.9853,-60.1298 221.6334,-62.3857 225.2997,-68.3488"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).AddAddress -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).AddAddress</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).AddAddress | defined in router_info.go:226">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M303.8031,-181C303.8031,-181 233.8479,-181 233.8479,-181 227.8479,-181 221.8479,-175 221.8479,-169 221.8479,-169 221.8479,-157 221.8479,-157 221.8479,-151 227.8479,-145 233.8479,-145 233.8479,-145 303.8031,-145 303.8031,-145 309.8031,-145 315.8031,-151 315.8031,-157 315.8031,-157 315.8031,-169 315.8031,-169 315.8031,-175 309.8031,-181 303.8031,-181"/>
<text text-anchor="middle" x="268.8255" y="-158.8" font-family="Verdana" font-size="14.00" fill="#000000">AddAddress</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).AddAddress -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).AddAddress</title>
<g id="a_edge12"><a xlink:title="at router.go:99: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).AddAddress]">
<path fill="none" stroke="#8b4513" d="M68.3247,-509.8442C77.3507,-459.907 108.124,-318.1063 179.634,-226 191.7978,-210.3329 208.9166,-196.949 224.9086,-186.5989"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.9979,-189.4212 233.6386,-181.1657 223.2991,-183.4781 226.9979,-189.4212"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore -->
<g id="node11" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore</title>
<g id="a_node11"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore | defined in routerinfo_keystore.go:36">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M338.209,-276C338.209,-276 199.442,-276 199.442,-276 193.442,-276 187.442,-270 187.442,-264 187.442,-264 187.442,-252 187.442,-252 187.442,-246 193.442,-240 199.442,-240 199.442,-240 338.209,-240 338.209,-240 344.209,-240 350.209,-246 350.209,-252 350.209,-252 350.209,-264 350.209,-264 350.209,-270 344.209,-276 338.209,-276"/>
<text text-anchor="middle" x="268.8255" y="-253.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterInfoKeystore</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore</title>
<g id="a_edge2"><a xlink:title="at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore]">
<path fill="none" stroke="#8b4513" d="M68.1982,-509.7628C76.1964,-465.2197 102.846,-349.8959 179.3884,-281.3332"/>
<polygon fill="#8b4513" stroke="#8b4513" points="182.1257,-283.5978 187.4524,-274.4393 177.577,-278.277 182.1257,-283.5978"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys | defined in routerinfo_keystore.go:99">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M298.1403,-354C298.1403,-354 239.5107,-354 239.5107,-354 233.5107,-354 227.5107,-348 227.5107,-342 227.5107,-342 227.5107,-330 227.5107,-330 227.5107,-324 233.5107,-318 239.5107,-318 239.5107,-318 298.1403,-318 298.1403,-318 304.1403,-318 310.1403,-324 310.1403,-330 310.1403,-330 310.1403,-342 310.1403,-342 310.1403,-348 304.1403,-354 298.1403,-354"/>
<text text-anchor="middle" x="268.8255" y="-331.8" font-family="Verdana" font-size="14.00" fill="#000000">StoreKeys</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys</title>
<g id="a_edge3"><a xlink:title="at router.go:55: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys]">
<path fill="none" stroke="#8b4513" d="M73.4325,-509.9946C89.2095,-476.951 127.1329,-406.4113 179.634,-367 190.9222,-358.5262 204.7066,-352.2457 218.0312,-347.6417"/>
<polygon fill="#8b4513" stroke="#8b4513" points="219.1514,-350.9582 227.61,-344.5782 217.019,-344.2909 219.1514,-350.9582"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys | defined in routerinfo_keystore.go:91">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M293.3031,-415C293.3031,-415 244.3479,-415 244.3479,-415 238.3479,-415 232.3479,-409 232.3479,-403 232.3479,-403 232.3479,-391 232.3479,-391 232.3479,-385 238.3479,-379 244.3479,-379 244.3479,-379 293.3031,-379 293.3031,-379 299.3031,-379 305.3031,-385 305.3031,-391 305.3031,-391 305.3031,-403 305.3031,-403 305.3031,-409 299.3031,-415 293.3031,-415"/>
<text text-anchor="middle" x="268.8255" y="-392.8" font-family="Verdana" font-size="14.00" fill="#000000">GetKeys</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="edge30" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_edge30"><a xlink:title="at router.go:62: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]">
<path fill="none" stroke="#8b4513" d="M81.864,-509.7427C102.7417,-487.6673 140.6526,-450.6622 179.634,-428 192.8763,-420.3015 208.3338,-414.093 222.6255,-409.3124"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.8278,-412.6027 232.2919,-406.2301 221.7012,-405.9336 223.8278,-412.6027"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo | defined in routerinfo_keystore.go:125">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M326.6868,-476C326.6868,-476 210.9642,-476 210.9642,-476 204.9642,-476 198.9642,-470 198.9642,-464 198.9642,-464 198.9642,-452 198.9642,-452 198.9642,-446 204.9642,-440 210.9642,-440 210.9642,-440 326.6868,-440 326.6868,-440 332.6868,-440 338.6868,-446 338.6868,-452 338.6868,-452 338.6868,-464 338.6868,-464 338.6868,-470 332.6868,-476 326.6868,-476"/>
<text text-anchor="middle" x="268.8255" y="-453.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructRouterInfo</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo</title>
<g id="a_edge11"><a xlink:title="at router.go:73: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo]">
<path fill="none" stroke="#8b4513" d="M104.157,-509.9153C126.0138,-500.1912 153.9885,-488.4896 179.634,-480 182.7378,-478.9725 185.9165,-477.9685 189.1382,-476.9908"/>
<polygon fill="#8b4513" stroke="#8b4513" points="190.2824,-480.3029 198.9,-474.1395 188.3198,-473.5837 190.2824,-480.3029"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux -->
<g id="node18" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux</title>
<g id="a_node18"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux | defined in multi.go:18">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M283.8255,-651C283.8255,-651 253.8255,-651 253.8255,-651 247.8255,-651 241.8255,-645 241.8255,-639 241.8255,-639 241.8255,-627 241.8255,-627 241.8255,-621 247.8255,-615 253.8255,-615 253.8255,-615 283.8255,-615 283.8255,-615 289.8255,-615 295.8255,-621 295.8255,-627 295.8255,-627 295.8255,-639 295.8255,-639 295.8255,-645 289.8255,-651 283.8255,-651"/>
<text text-anchor="middle" x="268.8255" y="-628.8" font-family="Verdana" font-size="14.00" fill="#000000">Mux</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux</title>
<g id="a_edge4"><a xlink:title="at router.go:91: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux]">
<path fill="none" stroke="#8b4513" d="M85.2614,-546.2339C106.9465,-565.1128 143.3781,-594.1561 179.634,-611 196.0439,-618.6237 215.4265,-623.8111 231.924,-627.2242"/>
<polygon fill="#8b4513" stroke="#8b4513" points="231.2885,-630.666 241.7708,-629.126 232.6159,-623.7931 231.2885,-630.666"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport -->
<g id="node19" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport</title>
<g id="a_node19"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport | defined in new.go:9">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M330.4558,-833C330.4558,-833 207.1952,-833 207.1952,-833 201.1952,-833 195.1952,-827 195.1952,-821 195.1952,-821 195.1952,-809 195.1952,-809 195.1952,-803 201.1952,-797 207.1952,-797 207.1952,-797 330.4558,-797 330.4558,-797 336.4558,-797 342.4558,-803 342.4558,-809 342.4558,-809 342.4558,-821 342.4558,-821 342.4558,-827 336.4558,-833 330.4558,-833"/>
<text text-anchor="middle" x="268.8255" y="-810.8" font-family="Verdana" font-size="14.00" fill="#000000">NewNTCP2Transport</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport -->
<g id="edge32" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport</title>
<g id="a_edge32"><a xlink:title="at router.go:84: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport]">
<path fill="none" stroke="#8b4513" d="M68.1809,-546.2851C76.4784,-593.1417 104.8828,-718.559 179.634,-786 181.8441,-787.994 184.1934,-789.851 186.6507,-791.5806"/>
<polygon fill="#8b4513" stroke="#8b4513" points="185.0319,-794.6948 195.3766,-796.9834 188.7169,-788.7433 185.0319,-794.6948"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address -->
<g id="node20" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address</title>
<g id="a_node20"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address | defined in address.go:11">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M291.6966,-772C291.6966,-772 245.9544,-772 245.9544,-772 239.9544,-772 233.9544,-766 233.9544,-760 233.9544,-760 233.9544,-748 233.9544,-748 233.9544,-742 239.9544,-736 245.9544,-736 245.9544,-736 291.6966,-736 291.6966,-736 297.6966,-736 303.6966,-742 303.6966,-748 303.6966,-748 303.6966,-760 303.6966,-760 303.6966,-766 297.6966,-772 291.6966,-772"/>
<text text-anchor="middle" x="268.8255" y="-749.8" font-family="Verdana" font-size="14.00" fill="#000000">Address</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address -->
<g id="edge33" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address</title>
<g id="a_edge33"><a xlink:title="at router.go:92: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address]">
<path fill="none" stroke="#8b4513" d="M75.0306,-546.0416C92.8174,-577.9911 133.098,-645.5242 179.634,-692 194.0449,-706.3923 212.1708,-719.6758 228.3123,-730.2244"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.7267,-733.3645 237.0395,-735.7931 230.4921,-727.4635 226.7267,-733.3645"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node23" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node23"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M498.6117,-506C498.6117,-506 468.6117,-506 468.6117,-506 462.6117,-506 456.6117,-500 456.6117,-494 456.6117,-494 456.6117,-482 456.6117,-482 456.6117,-476 462.6117,-470 468.6117,-470 468.6117,-470 498.6117,-470 498.6117,-470 504.6117,-470 510.6117,-476 510.6117,-482 510.6117,-482 510.6117,-494 510.6117,-494 510.6117,-500 504.6117,-506 498.6117,-506"/>
<text text-anchor="middle" x="483.6117" y="-483.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge29" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge29"><a xlink:title="at router.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:56: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:64: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:86: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M67.6574,-546.0421C77.3014,-617.2824 116.4547,-877.4461 179.634,-925 195.4699,-936.9193 343.0593,-938.0044 358.017,-925 375.2058,-910.0559 401.3617,-537.2295 415.017,-519 422.7907,-508.6223 434.8425,-501.6322 446.6884,-496.9628"/>
<polygon fill="#8b4513" stroke="#8b4513" points="448.1911,-500.1462 456.4922,-493.5628 445.8974,-493.5326 448.1911,-500.1462"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node25" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node25"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M512.1432,-567C512.1432,-567 455.0802,-567 455.0802,-567 449.0802,-567 443.0802,-561 443.0802,-555 443.0802,-555 443.0802,-543 443.0802,-543 443.0802,-537 449.0802,-531 455.0802,-531 455.0802,-531 512.1432,-531 512.1432,-531 518.1432,-531 524.1432,-537 524.1432,-543 524.1432,-543 524.1432,-555 524.1432,-555 524.1432,-561 518.1432,-567 512.1432,-567"/>
<text text-anchor="middle" x="483.6117" y="-544.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge17"><a xlink:title="at router.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:56: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:64: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:86: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M66.1177,-546.3573C69.7532,-620.1117 87.3729,-893.3715 150.634,-945 186.338,-974.1387 323.006,-974.9678 358.017,-945 389.2006,-918.3082 390.1554,-612.6614 415.017,-580 419.9146,-573.5658 426.452,-568.431 433.5502,-564.3432"/>
<polygon fill="#8b4513" stroke="#8b4513" points="435.4022,-567.3294 442.7602,-559.7063 432.2544,-561.0771 435.4022,-567.3294"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node27" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node27"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M666.689,-1098C666.689,-1098 629.045,-1098 629.045,-1098 623.045,-1098 617.045,-1092 617.045,-1086 617.045,-1086 617.045,-1074 617.045,-1074 617.045,-1068 623.045,-1062 629.045,-1062 629.045,-1062 666.689,-1062 666.689,-1062 672.689,-1062 678.689,-1068 678.689,-1074 678.689,-1074 678.689,-1086 678.689,-1086 678.689,-1092 672.689,-1098 666.689,-1098"/>
<text text-anchor="middle" x="647.867" y="-1075.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.CreateRouter&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge16"><a xlink:title="at router.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:46: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:49: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:59: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:70: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:78: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:97: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M114.5084,-528.3294C188.5962,-527.7497 323.8103,-522.1603 358.017,-490 427.5397,-424.6366 334.5069,-334.224 415.017,-283 466.4604,-250.2695 503.4561,-246.3787 552.2064,-283 615.1965,-330.3182 641.5447,-915.8858 646.8363,-1051.9064"/>
<polygon fill="#8b4513" stroke="#8b4513" points="643.3407,-1052.0896 647.2202,-1061.9486 650.3356,-1051.8221 643.3407,-1052.0896"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node24" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node24"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M511.8862,-445C511.8862,-445 455.3372,-445 455.3372,-445 449.3372,-445 443.3372,-439 443.3372,-433 443.3372,-433 443.3372,-421 443.3372,-421 443.3372,-415 449.3372,-409 455.3372,-409 455.3372,-409 511.8862,-409 511.8862,-409 517.8862,-409 523.8862,-415 523.8862,-421 523.8862,-421 523.8862,-433 523.8862,-433 523.8862,-439 517.8862,-445 511.8862,-445"/>
<text text-anchor="middle" x="483.6117" y="-422.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge20"><a xlink:title="at router.go:108: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M315.8559,-557.9601C330.2775,-552.2701 345.6009,-544.7039 358.017,-535 391.565,-508.7803 381.8825,-484.7403 415.017,-458 420.7502,-453.3731 427.2849,-449.2808 433.9899,-445.7118"/>
<polygon fill="#8b4513" stroke="#8b4513" points="435.7664,-448.738 443.1795,-441.1685 432.664,-442.463 435.7664,-448.738"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge24" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.FromConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge24"><a xlink:title="at router.go:108: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M315.5535,-561.608C330.9868,-556.0511 347.0052,-547.6403 358.017,-535 423.7995,-459.4891 335.7508,-378.2054 415.017,-317 463.2776,-279.7356 506.4888,-276.6563 552.2064,-317 608.5552,-366.7252 639.7858,-919.2667 646.4907,-1051.6307"/>
<polygon fill="#8b4513" stroke="#8b4513" points="643.0029,-1051.9645 646.998,-1061.7772 649.9942,-1051.6148 643.0029,-1051.9645"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.init -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.init</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/router.init | defined in .:0&#10;at router.go:20: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M283.8255,-912C283.8255,-912 253.8255,-912 253.8255,-912 247.8255,-912 241.8255,-906 241.8255,-900 241.8255,-900 241.8255,-888 241.8255,-888 241.8255,-882 247.8255,-876 253.8255,-876 253.8255,-876 283.8255,-876 283.8255,-876 289.8255,-876 295.8255,-882 295.8255,-888 295.8255,-888 295.8255,-900 295.8255,-900 295.8255,-906 289.8255,-912 283.8255,-912"/>
<text text-anchor="middle" x="268.8255" y="-889.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node21" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node21"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M532.3012,-367C532.3012,-367 434.9222,-367 434.9222,-367 428.9222,-367 422.9222,-361 422.9222,-355 422.9222,-355 422.9222,-343 422.9222,-343 422.9222,-337 428.9222,-331 434.9222,-331 434.9222,-331 532.3012,-331 532.3012,-331 538.3012,-331 544.3012,-337 544.3012,-343 544.3012,-343 544.3012,-355 544.3012,-355 544.3012,-361 538.3012,-367 532.3012,-367"/>
<text text-anchor="middle" x="483.6117" y="-344.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/router.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/router.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge25"><a xlink:title="at router.go:20: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M295.9777,-894.9747C316.1625,-894.12 342.7488,-889.3688 358.017,-872 395.0069,-829.9211 379.4903,-414.3214 415.017,-371 415.1607,-370.8247 415.3059,-370.6508 415.4524,-370.4783"/>
<polygon fill="#8b4513" stroke="#8b4513" points="417.9208,-372.9628 422.8832,-363.6019 413.1664,-367.8251 417.9208,-372.9628"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start | defined in router.go:138&#10;at router.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:146: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:140: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router.go:148: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M80.317,-1105C80.317,-1105 50.317,-1105 50.317,-1105 44.317,-1105 38.317,-1099 38.317,-1093 38.317,-1093 38.317,-1081 38.317,-1081 38.317,-1075 44.317,-1069 50.317,-1069 50.317,-1069 80.317,-1069 80.317,-1069 86.317,-1069 92.317,-1075 92.317,-1081 92.317,-1081 92.317,-1093 92.317,-1093 92.317,-1099 86.317,-1105 80.317,-1105"/>
<text text-anchor="middle" x="65.317" y="-1082.8" font-family="Verdana" font-size="14.00" fill="#000000">Start</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop | defined in router.go:152&#10;at router.go:154: calling [github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB]&#10;at router.go:158: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure]&#10;at router.go:181: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop]&#10;at router.go:160: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:180: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:162: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size]&#10;at router.go:169: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router.go:177: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router.go:155: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at router.go:163: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at router.go:160: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router.go:165: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at router.go:153: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:155: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:163: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:171: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:183: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M295.212,-1108C295.212,-1108 242.439,-1108 242.439,-1108 236.439,-1108 230.439,-1102 230.439,-1096 230.439,-1096 230.439,-1084 230.439,-1084 230.439,-1078 236.439,-1072 242.439,-1072 242.439,-1072 295.212,-1072 295.212,-1072 301.212,-1072 307.212,-1078 307.212,-1084 307.212,-1084 307.212,-1096 307.212,-1096 307.212,-1102 301.212,-1108 295.212,-1108"/>
<text text-anchor="middle" x="268.8255" y="-1085.8" font-family="Verdana" font-size="14.00" fill="#000000">mainloop</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop -->
<g id="edge28" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop</title>
<g id="a_edge28"><a xlink:title="at router.go:148: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop]">
<path fill="none" stroke="#000000" d="M92.3414,-1087.3984C121.4823,-1087.828 168.8475,-1088.5262 207.1753,-1089.0912"/>
<polygon fill="#000000" stroke="#000000" points="220.1497,-1092.7828 230.2002,-1089.4306 220.2529,-1085.7835 220.1497,-1092.7828"/>
<polyline fill="none" stroke="#000000" points="220.2013,-1089.2832 215.2018,-1089.2094 "/>
<ellipse fill="none" stroke="#000000" cx="211.2023" cy="-1089.1505" rx="4" ry="4"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node22" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node22"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M514.8308,-689C514.8308,-689 452.3926,-689 452.3926,-689 446.3926,-689 440.3926,-683 440.3926,-677 440.3926,-677 440.3926,-665 440.3926,-665 440.3926,-659 446.3926,-653 452.3926,-653 452.3926,-653 514.8308,-653 514.8308,-653 520.8308,-653 526.8308,-659 526.8308,-665 526.8308,-665 526.8308,-677 526.8308,-677 526.8308,-683 520.8308,-689 514.8308,-689"/>
<text text-anchor="middle" x="483.6117" y="-666.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge26" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge26"><a xlink:title="at router.go:140: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M92.4972,-1080.2281C115.612,-1074.5538 149.7178,-1066.3807 179.634,-1060 258.5672,-1043.1646 299.0623,-1081.12 358.017,-1026 395.2628,-991.1769 376.6615,-964.9266 387.017,-915 403.5489,-835.2951 376.6584,-805.7969 415.017,-734 422.9549,-719.1423 435.7921,-705.944 448.2264,-695.515"/>
<polygon fill="#8b4513" stroke="#8b4513" points="450.6596,-698.0507 456.2838,-689.0719 446.2879,-692.5837 450.6596,-698.0507"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge6"><a xlink:title="at router.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M92.4907,-1071.191C123.2819,-1053.4109 170.405,-1026.6523 179.634,-1024 198.7132,-1018.5169 343.5718,-1027.6168 358.017,-1014 378.16,-995.0122 398.7018,-541.3628 415.017,-519 422.7356,-508.4203 434.9222,-501.3733 446.8962,-496.7143"/>
<polygon fill="#8b4513" stroke="#8b4513" points="448.0398,-500.0222 456.364,-493.468 445.7694,-493.4007 448.0398,-500.0222"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge18" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Start&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge18"><a xlink:title="at router.go:146: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M92.5694,-1100.2408C130.9449,-1117.6359 203.53,-1146 268.8255,-1146 268.8255,-1146 268.8255,-1146 483.6117,-1146 514.6409,-1146 523.0226,-1143.5412 552.2064,-1133 572.8873,-1125.53 594.4342,-1113.9718 611.8311,-1103.5532"/>
<polygon fill="#8b4513" stroke="#8b4513" points="613.8191,-1106.4401 620.5236,-1098.2365 610.1666,-1100.4685 613.8191,-1106.4401"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop | defined in router.go:124&#10;at router.go:125: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:128: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M498.6117,-1120C498.6117,-1120 468.6117,-1120 468.6117,-1120 462.6117,-1120 456.6117,-1114 456.6117,-1108 456.6117,-1108 456.6117,-1096 456.6117,-1096 456.6117,-1090 462.6117,-1084 468.6117,-1084 468.6117,-1084 498.6117,-1084 498.6117,-1084 504.6117,-1084 510.6117,-1090 510.6117,-1096 510.6117,-1096 510.6117,-1108 510.6117,-1108 510.6117,-1114 504.6117,-1120 498.6117,-1120"/>
<text text-anchor="middle" x="483.6117" y="-1097.8" font-family="Verdana" font-size="14.00" fill="#000000">Stop</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop</title>
<g id="a_edge10"><a xlink:title="at router.go:181: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop]">
<path fill="none" stroke="#000000" d="M307.3274,-1093.4043C330.1795,-1095.3132 359.7316,-1097.5874 386.017,-1099 405.827,-1100.0646 427.9208,-1100.7828 446.0703,-1101.2488"/>
<polygon fill="#000000" stroke="#000000" points="446.1719,-1104.7522 456.2535,-1101.4948 446.341,-1097.7542 446.1719,-1104.7522"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB -->
<g id="node15" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB</title>
<g id="a_node15"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB | defined in std.go:32">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M525.868,-784C525.868,-784 441.3554,-784 441.3554,-784 435.3554,-784 429.3554,-778 429.3554,-772 429.3554,-772 429.3554,-760 429.3554,-760 429.3554,-754 435.3554,-748 441.3554,-748 441.3554,-748 525.868,-748 525.868,-748 531.868,-748 537.868,-754 537.868,-760 537.868,-760 537.868,-772 537.868,-772 537.868,-778 531.868,-784 525.868,-784"/>
<text text-anchor="middle" x="483.6117" y="-761.8" font-family="Verdana" font-size="14.00" fill="#000000">NewStdNetDB</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB -->
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB</title>
<g id="a_edge7"><a xlink:title="at router.go:154: calling [github.com/go&#45;i2p/go&#45;i2p/lib/netdb.NewStdNetDB]">
<path fill="none" stroke="#8b4513" d="M307.5138,-1080.82C324.673,-1075.1471 344.0864,-1066.327 358.017,-1053 379.9988,-1031.9706 378.3972,-1020.1741 387.017,-991 412.8237,-903.6563 356.431,-857.7323 415.017,-788 416.7416,-785.9473 418.6584,-784.0841 420.7231,-782.393"/>
<polygon fill="#8b4513" stroke="#8b4513" points="422.9268,-785.1313 429.3262,-776.6874 419.0579,-779.2976 422.9268,-785.1313"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure -->
<g id="node16" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure</title>
<g id="a_node16"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure | defined in std.go:274">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M502.9842,-862C502.9842,-862 464.2392,-862 464.2392,-862 458.2392,-862 452.2392,-856 452.2392,-850 452.2392,-850 452.2392,-838 452.2392,-838 452.2392,-832 458.2392,-826 464.2392,-826 464.2392,-826 502.9842,-826 502.9842,-826 508.9842,-826 514.9842,-832 514.9842,-838 514.9842,-838 514.9842,-850 514.9842,-850 514.9842,-856 508.9842,-862 502.9842,-862"/>
<text text-anchor="middle" x="483.6117" y="-839.8" font-family="Verdana" font-size="14.00" fill="#000000">Ensure</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure -->
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure</title>
<g id="a_edge8"><a xlink:title="at router.go:158: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Ensure]">
<path fill="none" stroke="#8b4513" d="M307.4022,-1078.6363C323.953,-1072.6295 342.9128,-1064.1533 358.017,-1053 374.268,-1040.9998 378.3642,-1036.2545 387.017,-1018 414.7564,-959.4791 374.8081,-925.7683 415.017,-875 422.0367,-866.1368 432.146,-859.7238 442.455,-855.117"/>
<polygon fill="#8b4513" stroke="#8b4513" points="443.8886,-858.3138 451.8956,-851.3757 441.3096,-851.8062 443.8886,-858.3138"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size -->
<g id="node17" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size</title>
<g id="a_node17"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size | defined in std.go:90">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M498.6117,-923C498.6117,-923 468.6117,-923 468.6117,-923 462.6117,-923 456.6117,-917 456.6117,-911 456.6117,-911 456.6117,-899 456.6117,-899 456.6117,-893 462.6117,-887 468.6117,-887 468.6117,-887 498.6117,-887 498.6117,-887 504.6117,-887 510.6117,-893 510.6117,-899 510.6117,-899 510.6117,-911 510.6117,-911 510.6117,-917 504.6117,-923 498.6117,-923"/>
<text text-anchor="middle" x="483.6117" y="-900.8" font-family="Verdana" font-size="14.00" fill="#000000">Size</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size</title>
<g id="a_edge14"><a xlink:title="at router.go:162: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/netdb.StdNetDB).Size]">
<path fill="none" stroke="#8b4513" d="M307.4568,-1083.8897C333.0695,-1077.9755 365.7534,-1066.5854 387.017,-1045 412.5719,-1019.0583 394.8079,-998.2922 415.017,-968 424.5864,-953.656 438.0863,-940.3302 450.5814,-929.6635"/>
<polygon fill="#8b4513" stroke="#8b4513" points="453.108,-932.1166 458.5961,-923.0539 448.6543,-926.7161 453.108,-932.1166"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge15"><a xlink:title="at router.go:169: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router.go:177: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M307.3783,-1081.858C324.9263,-1076.3671 344.7008,-1067.401 358.017,-1053 386.2614,-1022.4546 378.0165,-1004.6172 387.017,-964 409.2955,-863.4619 367.9661,-825.5995 415.017,-734 422.6531,-719.1339 435.3048,-706.0024 447.6774,-695.6281"/>
<polygon fill="#8b4513" stroke="#8b4513" points="450.0775,-698.1907 455.712,-689.2183 445.7121,-692.7186 450.0775,-698.1907"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge13"><a xlink:title="at router.go:160: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router.go:180: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M307.208,-1071.8934C325.6163,-1061.177 346.1889,-1045.7965 358.017,-1026 383.7614,-982.9119 381.3231,-851.8692 387.017,-802 394.1859,-739.212 378.1705,-570.3426 415.017,-519 422.6527,-508.3603 434.8213,-501.3002 446.804,-496.6476"/>
<polygon fill="#8b4513" stroke="#8b4513" points="447.9518,-499.9542 456.2839,-493.41 445.6894,-493.3298 447.9518,-499.9542"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge21" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge21"><a xlink:title="at router.go:155: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at router.go:163: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M307.4084,-1090.139C325.4044,-1088.073 345.5532,-1082.3128 358.017,-1068 359.2917,-1066.5362 386.8347,-791.9325 387.017,-790 393.9694,-716.2874 372.2847,-518.4635 415.017,-458 419.79,-451.2465 426.3947,-445.9376 433.6339,-441.7718"/>
<polygon fill="#8b4513" stroke="#8b4513" points="435.66,-444.673 443.0528,-437.0837 432.5408,-438.4063 435.66,-444.673"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge22" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge22"><a xlink:title="at router.go:160: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M306.4242,-1071.9577C324.8581,-1061.1757 345.6923,-1045.7163 358.017,-1026 398.6446,-961.0064 376.6986,-931.9493 387.017,-856 395.3162,-794.913 379.0108,-630.0405 415.017,-580 419.7934,-573.3618 426.3335,-568.1166 433.4896,-563.9801"/>
<polygon fill="#8b4513" stroke="#8b4513" points="435.4274,-566.9237 442.797,-559.3119 432.2891,-560.6666 435.4274,-566.9237"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node26" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node26"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M499.2016,-628C499.2016,-628 468.0218,-628 468.0218,-628 462.0218,-628 456.0218,-622 456.0218,-616 456.0218,-616 456.0218,-604 456.0218,-604 456.0218,-598 462.0218,-592 468.0218,-592 468.0218,-592 499.2016,-592 499.2016,-592 505.2016,-592 511.2016,-598 511.2016,-604 511.2016,-604 511.2016,-616 511.2016,-616 511.2016,-622 505.2016,-628 499.2016,-628"/>
<text text-anchor="middle" x="483.6117" y="-605.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge23" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge23"><a xlink:title="at router.go:165: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M305.367,-1071.8279C323.7405,-1060.9233 344.8449,-1045.3914 358.017,-1026 387.8776,-982.0405 377.7987,-962.3366 387.017,-910 397.4424,-850.8104 379.8509,-689.7385 415.017,-641 422.5441,-630.5678 434.4248,-623.5748 446.1979,-618.9186"/>
<polygon fill="#8b4513" stroke="#8b4513" points="447.6623,-622.1154 455.9642,-615.5329 445.3694,-615.5016 447.6623,-622.1154"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge27" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).mainloop&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge27"><a xlink:title="at router.go:153: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:155: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:163: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:171: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:183: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M307.4888,-1083.9282C336.8899,-1079.6302 378.3898,-1074.2464 415.017,-1072 475.8757,-1068.2674 491.2864,-1069.4571 552.2064,-1072 570.1325,-1072.7483 589.8989,-1074.282 606.7876,-1075.8082"/>
<polygon fill="#8b4513" stroke="#8b4513" points="606.6073,-1079.3065 616.8892,-1076.7504 607.2575,-1072.3367 606.6073,-1079.3065"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Stop&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge9"><a xlink:title="at router.go:125: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:128: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M510.7351,-1098.3671C536.8995,-1094.8627 576.8484,-1089.5121 606.8908,-1085.4883"/>
<polygon fill="#8b4513" stroke="#8b4513" points="607.6184,-1088.9222 617.0652,-1084.1255 606.6891,-1081.9841 607.6184,-1088.9222"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Close -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Close</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Close | defined in router.go:132&#10;at router.go:133: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M81.2035,-1044C81.2035,-1044 49.4305,-1044 49.4305,-1044 43.4305,-1044 37.4305,-1038 37.4305,-1032 37.4305,-1032 37.4305,-1020 37.4305,-1020 37.4305,-1014 43.4305,-1008 49.4305,-1008 49.4305,-1008 81.2035,-1008 81.2035,-1008 87.2035,-1008 93.2035,-1014 93.2035,-1020 93.2035,-1020 93.2035,-1032 93.2035,-1032 93.2035,-1038 87.2035,-1044 81.2035,-1044"/>
<text text-anchor="middle" x="65.317" y="-1021.8" font-family="Verdana" font-size="14.00" fill="#000000">Close</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge19" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge19"><a xlink:title="at router.go:133: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M93.2527,-1026.133C158.6939,-1025.8564 319.3083,-1021.5812 358.017,-987 416.1296,-935.084 368.8725,-703.7936 415.017,-641 422.6348,-630.6337 434.5363,-623.656 446.3009,-618.9936"/>
<polygon fill="#8b4513" stroke="#8b4513" points="447.7606,-622.1915 456.0539,-615.5982 445.4591,-615.5807 447.7606,-622.1915"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Wait -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Wait</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Wait | defined in router.go:117&#10;at router.go:118: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:120: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M80.317,-1166C80.317,-1166 50.317,-1166 50.317,-1166 44.317,-1166 38.317,-1160 38.317,-1154 38.317,-1154 38.317,-1142 38.317,-1142 38.317,-1136 44.317,-1130 50.317,-1130 50.317,-1130 80.317,-1130 80.317,-1130 86.317,-1130 92.317,-1136 92.317,-1142 92.317,-1142 92.317,-1154 92.317,-1154 92.317,-1160 86.317,-1166 80.317,-1166"/>
<text text-anchor="middle" x="65.317" y="-1143.8" font-family="Verdana" font-size="14.00" fill="#000000">Wait</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Wait&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge5" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/router.Router).Wait&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge5"><a xlink:title="at router.go:118: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router.go:120: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M92.5077,-1153.4864C131.4121,-1160.8455 205.285,-1173 268.8255,-1173 268.8255,-1173 268.8255,-1173 483.6117,-1173 538.6617,-1173 592.1926,-1132.9538 622.4933,-1105.4184"/>
<polygon fill="#8b4513" stroke="#8b4513" points="625.12,-1107.7546 630.0445,-1098.3738 620.3448,-1102.6362 625.12,-1107.7546"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -72,29 +72,29 @@ an error. For clarification, see TestReadSignatureFirst.
```go
var (
ErrMissingMagicBytes = errors.New("missing magic bytes")
ErrMissingUnusedByte6 = errors.New("missing unused byte 6")
ErrMissingFileFormatVersion = errors.New("missing or incorrect file format version")
ErrMissingSignatureType = errors.New("missing or invalid signature type")
ErrUnsupportedSignatureType = errors.New("unsupported signature type")
ErrMissingSignatureLength = errors.New("missing signature length")
ErrMissingUnusedByte12 = errors.New("missing unused byte 12")
ErrMissingVersionLength = errors.New("missing version length")
ErrVersionTooShort = errors.New("version length too short")
ErrMissingUnusedByte14 = errors.New("missing unused byte 14")
ErrMissingSignerIDLength = errors.New("missing signer ID length")
ErrMissingContentLength = errors.New("missing content length")
ErrMissingUnusedByte24 = errors.New("missing unused byte 24")
ErrMissingFileType = errors.New("missing or invalid file type")
ErrMissingUnusedByte26 = errors.New("missing unused byte 26")
ErrMissingContentType = errors.New("missing or invalid content type")
ErrMissingUnusedBytes28To39 = errors.New("missing unused bytes 28-39")
ErrMissingVersion = errors.New("missing version")
ErrMissingSignerID = errors.New("missing signer ID")
ErrMissingContent = errors.New("missing content")
ErrMissingSignature = errors.New("missing signature")
ErrInvalidPublicKey = errors.New("invalid public key")
ErrInvalidSignature = errors.New("invalid signature")
ErrMissingMagicBytes = oops.Errorf("missing magic bytes")
ErrMissingUnusedByte6 = oops.Errorf("missing unused byte 6")
ErrMissingFileFormatVersion = oops.Errorf("missing or incorrect file format version")
ErrMissingSignatureType = oops.Errorf("missing or invalid signature type")
ErrUnsupportedSignatureType = oops.Errorf("unsupported signature type")
ErrMissingSignatureLength = oops.Errorf("missing signature length")
ErrMissingUnusedByte12 = oops.Errorf("missing unused byte 12")
ErrMissingVersionLength = oops.Errorf("missing version length")
ErrVersionTooShort = oops.Errorf("version length too short")
ErrMissingUnusedByte14 = oops.Errorf("missing unused byte 14")
ErrMissingSignerIDLength = oops.Errorf("missing signer ID length")
ErrMissingContentLength = oops.Errorf("missing content length")
ErrMissingUnusedByte24 = oops.Errorf("missing unused byte 24")
ErrMissingFileType = oops.Errorf("missing or invalid file type")
ErrMissingUnusedByte26 = oops.Errorf("missing unused byte 26")
ErrMissingContentType = oops.Errorf("missing or invalid content type")
ErrMissingUnusedBytes28To39 = oops.Errorf("missing unused bytes 28-39")
ErrMissingVersion = oops.Errorf("missing version")
ErrMissingSignerID = oops.Errorf("missing signer ID")
ErrMissingContent = oops.Errorf("missing content")
ErrMissingSignature = oops.Errorf("missing signature")
ErrInvalidPublicKey = oops.Errorf("invalid public key")
ErrInvalidSignature = oops.Errorf("invalid signature")
)
```
@ -187,3 +187,201 @@ const (
EdDSA_SHA512_Ed25519ph SignatureType = "EdDSA-SHA512-Ed25519ph"
)
```
# su3
--
import "github.com/go-i2p/go-i2p/lib/su3"
Package su3 implements reading the SU3 file format.
SU3 files provide content that is signed by a known identity. They are used to
distribute many types of data, including reseed files, plugins, blocklists, and
more.
See: https://geti2p.net/spec/updates#su3-file-specification
The Read() function takes an io.Reader, and it returns a *SU3. The *SU3 contains
the SU3 file metadata, such as the type of the content and the signer ID. In
order to get the file contents, one must pass in the public key associated with
the file's signer, so that the signature can be validated. The content can still
be read without passing in the key, but after returning the full content the
error ErrInvalidSignature will be returned.
Example usage:
// Let's say we are reading an SU3 file from an HTTP body, which is an io.Reader.
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Read the content.
contentReader := su3File.Content(key)
bytes, err := ioutil.ReadAll(contentReader)
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
} else if err != nil {
// Handle error.
}
If you want to parse from a []byte, you can wrap it like this:
mySU3FileBytes := []byte{0x00, 0x01, 0x02, 0x03}
su3File, err := su3.Read(bytes.NewReader(mySU3FileBytes))
One of the advantages of this library's design is that you can avoid buffering
the file contents in memory. Here's how you would stream from an HTTP body
directly to disk:
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Stream directly to disk.
f, err := os.Create("my_file.txt")
if err != nil {
// Handle error.
}
_, err := io.Copy(f, su3File.Content(key))
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
// Don't trust the file, delete it!
} else if err != nil {
// Handle error.
}
Note: if you want to read the content, the Content() io.Reader must be read
*before* the Signature() io.Reader. If you read the signature first, the content
bytes will be thrown away. If you then attempt to read the content, you will get
an error. For clarification, see TestReadSignatureFirst.
![su3.svg](su3)
## Usage
```go
var (
ErrMissingMagicBytes = oops.Errorf("missing magic bytes")
ErrMissingUnusedByte6 = oops.Errorf("missing unused byte 6")
ErrMissingFileFormatVersion = oops.Errorf("missing or incorrect file format version")
ErrMissingSignatureType = oops.Errorf("missing or invalid signature type")
ErrUnsupportedSignatureType = oops.Errorf("unsupported signature type")
ErrMissingSignatureLength = oops.Errorf("missing signature length")
ErrMissingUnusedByte12 = oops.Errorf("missing unused byte 12")
ErrMissingVersionLength = oops.Errorf("missing version length")
ErrVersionTooShort = oops.Errorf("version length too short")
ErrMissingUnusedByte14 = oops.Errorf("missing unused byte 14")
ErrMissingSignerIDLength = oops.Errorf("missing signer ID length")
ErrMissingContentLength = oops.Errorf("missing content length")
ErrMissingUnusedByte24 = oops.Errorf("missing unused byte 24")
ErrMissingFileType = oops.Errorf("missing or invalid file type")
ErrMissingUnusedByte26 = oops.Errorf("missing unused byte 26")
ErrMissingContentType = oops.Errorf("missing or invalid content type")
ErrMissingUnusedBytes28To39 = oops.Errorf("missing unused bytes 28-39")
ErrMissingVersion = oops.Errorf("missing version")
ErrMissingSignerID = oops.Errorf("missing signer ID")
ErrMissingContent = oops.Errorf("missing content")
ErrMissingSignature = oops.Errorf("missing signature")
ErrInvalidPublicKey = oops.Errorf("invalid public key")
ErrInvalidSignature = oops.Errorf("invalid signature")
)
```
#### type ContentType
```go
type ContentType string
```
```go
const (
UNKNOWN ContentType = "unknown"
ROUTER_UPDATE ContentType = "router_update"
PLUGIN ContentType = "plugin"
RESEED ContentType = "reseed"
NEWS ContentType = "news"
BLOCKLIST ContentType = "blocklist"
)
```
#### type FileType
```go
type FileType string
```
```go
const (
ZIP FileType = "zip"
XML FileType = "xml"
HTML FileType = "html"
XML_GZIP FileType = "xml.gz"
TXT_GZIP FileType = "txt.gz"
DMG FileType = "dmg"
EXE FileType = "exe"
)
```
#### type SU3
```go
type SU3 struct {
SignatureType SignatureType
SignatureLength uint16
ContentLength uint64
FileType FileType
ContentType ContentType
Version string
SignerID string
}
```
#### func Read
```go
func Read(reader io.Reader) (su3 *SU3, err error)
```
#### func (*SU3) Content
```go
func (su3 *SU3) Content(publicKey interface{}) io.Reader
```
#### func (*SU3) Signature
```go
func (su3 *SU3) Signature() io.Reader
```
#### type SignatureType
```go
type SignatureType string
```
```go
const (
DSA_SHA1 SignatureType = "DSA-SHA1"
ECDSA_SHA256_P256 SignatureType = "ECDSA-SHA256-P256"
ECDSA_SHA384_P384 SignatureType = "ECDSA-SHA384-P384"
ECDSA_SHA512_P521 SignatureType = "ECDSA-SHA512-P521"
RSA_SHA256_2048 SignatureType = "RSA-SHA256-2048"
RSA_SHA384_3072 SignatureType = "RSA-SHA384-3072"
RSA_SHA512_4096 SignatureType = "RSA-SHA512-4096"
EdDSA_SHA512_Ed25519ph SignatureType = "EdDSA-SHA512-Ed25519ph"
)
```
su3
github.com/go-i2p/go-i2p/lib/su3

522
lib/su3/su3.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -9,7 +9,7 @@
## Usage
```go
var ErrNoTransportAvailable = errors.New("no transports available")
var ErrNoTransportAvailable = oops.Errorf("no transports available")
```
error for when we have no transports available to use
@ -27,7 +27,7 @@ type Transport interface {
// will bind if the underlying socket is not already
// if the underlying socket is already bound update the RouterIdentity
// returns any errors that happen if they do
SetIdentity(ident router_identity.RouterIdentity) error
SetIdentity(ident router_info.RouterInfo) error
// Obtain a transport session with a router given its RouterInfo.
// If a session with this router is NOT already made attempt to create one and block until made or until an error happens
@ -77,7 +77,7 @@ close every transport that this transport muxer has
```go
func (tmux *TransportMuxer) Compatible(routerInfo router_info.RouterInfo) (compat bool)
```
is there a transport that we mux that is compatible with this router info?
is there a transport that we mux that is compatable with this router info?
#### func (*TransportMuxer) GetSession
@ -97,7 +97,7 @@ the name of this transport with the names of all the ones that we mux
#### func (*TransportMuxer) SetIdentity
```go
func (tmux *TransportMuxer) SetIdentity(ident router_identity.RouterIdentity) (err error)
func (tmux *TransportMuxer) SetIdentity(ident router_info.RouterInfo) (err error)
```
set the identity for every transport
@ -120,3 +120,134 @@ type TransportSession interface {
```
a session between 2 routers for tranmitting i2np messages securly
# transport
--
import "github.com/go-i2p/go-i2p/lib/transport"
*
i2np messages transports
![transport.svg](transport)
## Usage
```go
var ErrNoTransportAvailable = oops.Errorf("no transports available")
```
error for when we have no transports available to use
#### type Transport
```go
type Transport interface {
// Accept accepts an incoming session.
Accept() (net.Conn, error)
// Addr returns an
Addr() net.Addr
// Set the router identity for this transport.
// will bind if the underlying socket is not already
// if the underlying socket is already bound update the RouterIdentity
// returns any errors that happen if they do
SetIdentity(ident router_info.RouterInfo) error
// Obtain a transport session with a router given its RouterInfo.
// If a session with this router is NOT already made attempt to create one and block until made or until an error happens
// returns an established TransportSession and nil on success
// returns nil and an error on error
GetSession(routerInfo router_info.RouterInfo) (TransportSession, error)
// return true if a routerInfo is compatible with this transport
Compatible(routerInfo router_info.RouterInfo) bool
// close the transport cleanly
// blocks until done
// returns an error if one happens
Close() error
// get the name of this tranport as a string
Name() string
}
```
#### type TransportMuxer
```go
type TransportMuxer struct {
}
```
muxes multiple transports into 1 Transport implements transport.Transport
#### func Mux
```go
func Mux(t ...Transport) (tmux *TransportMuxer)
```
mux a bunch of transports together
#### func (*TransportMuxer) Close
```go
func (tmux *TransportMuxer) Close() (err error)
```
close every transport that this transport muxer has
#### func (*TransportMuxer) Compatible
```go
func (tmux *TransportMuxer) Compatible(routerInfo router_info.RouterInfo) (compat bool)
```
is there a transport that we mux that is compatable with this router info?
#### func (*TransportMuxer) GetSession
```go
func (tmux *TransportMuxer) GetSession(routerInfo router_info.RouterInfo) (s TransportSession, err error)
```
get a transport session given a router info return session and nil if successful
return nil and ErrNoTransportAvailable if we failed to get a session
#### func (*TransportMuxer) Name
```go
func (tmux *TransportMuxer) Name() string
```
the name of this transport with the names of all the ones that we mux
#### func (*TransportMuxer) SetIdentity
```go
func (tmux *TransportMuxer) SetIdentity(ident router_info.RouterInfo) (err error)
```
set the identity for every transport
#### type TransportSession
```go
type TransportSession interface {
// queue an i2np message to be sent over the session
// will block as long as the send queue is full
// does not block if the queue is not full
QueueSendI2NP(msg i2np.I2NPMessage)
// return how many i2np messages are not completely sent yet
SendQueueSize() int
// blocking read the next fully recv'd i2np message from this session
ReadNextI2NP() (i2np.I2NPMessage, error)
// close the session cleanly
// returns any errors that happen while closing the session
Close() error
}
```
a session between 2 routers for tranmitting i2np messages securly
transport
github.com/go-i2p/go-i2p/lib/transport

View File

@ -66,3 +66,81 @@ PayloadSize returns the message payload size
func (sr *SessionRequest) Type() MessageType
```
Type returns the message type
# ntcp
--
import "github.com/go-i2p/go-i2p/lib/transport/messages"
![ntcp.svg](ntcp)
## Usage
```go
const (
MessageTypeSessionRequest = 0x00
MessageTypeSessionCreated = 0x01
MessageTypeSessionConfirmed = 0x02
MessageTypeData = 0x03
)
```
#### type Message
```go
type Message interface {
// Type returns the message type
Type() MessageType
// Payload returns the message payload
Payload() []byte
// PayloadSize returns the message payload size
PayloadSize() int
}
```
#### type MessageType
```go
type MessageType uint8
```
#### type SessionRequest
```go
type SessionRequest struct {
XContent []byte // 32-byte X value
Padding []byte // padding of message 1
}
```
#### func (*SessionRequest) Payload
```go
func (sr *SessionRequest) Payload() []byte
```
Payload returns the message payload
#### func (*SessionRequest) PayloadSize
```go
func (sr *SessionRequest) PayloadSize() int
```
PayloadSize returns the message payload size
#### func (*SessionRequest) Type
```go
func (sr *SessionRequest) Type() MessageType
```
Type returns the message type
ntcp
github.com/go-i2p/go-i2p/lib/transport/messages

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="0pt" height="0pt"
viewBox="0.00 0.00 0.00 0.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 0)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,0 0,0 0,0 0,0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 584 B

View File

@ -1,300 +1,646 @@
# noise
## Overview
The `noise` package implements the Noise Protocol to establish secure, authenticated sessions over TCP. This package includes functions for session management, handshake initiation, packet encryption, decryption, and transport abstraction.
--
import "github.com/go-i2p/go-i2p/lib/transport/noise"
- [handshake.go](#handshakego)
- [i2np.go](#i2npgo)
- [incoming_handshake.go](#incoming_handshakego)
- [outgoing_handshake.go](#outgoing_handshakego)
- [noise_constants.go](#noise_constantsgo)
- [read_session.go](#read_sessiongo)
- [session.go](#sessiongo)
- [transport.go](#transportgo)
- [write_session.go](#write_sessiongo)
---
## handshake.go
Defines the `Handshake` function, which initiates the Noise handshake process for secure, authenticated sessions.
### Package
## Usage
```go
package noise
```
const (
NOISE_DH_CURVE25519 = 1
### Imports
NOISE_CIPHER_CHACHAPOLY = 1
NOISE_CIPHER_AESGCM = 2
```go
import (
"sync"
"github.com/go-i2p/go-i2p/lib/util/logger"
"github.com/go-i2p/go-i2p/lib/common/router_info"
NOISE_HASH_SHA256 = 3
NOISE_PATTERN_XK = 11
MaxPayloadSize = 65537
)
```
### Variables
- **`log`**: Logger instance for capturing debug and error messages related to the handshake process.
### Function: `Handshake`
#### Definition
```go
func (c *NoiseTransport) Handshake(routerInfo router_info.RouterInfo) error
const NOISE_PROTOCOL_NAME = "NOISE"
```
#### Parameters
- `routerInfo`: Information about the router with which the handshake is established.
#### Returns
- `error`: Returns `nil` on success, or an error if the handshake fails.
#### Description
The `Handshake` function initiates an authenticated handshake with a router, establishing a secure session.
#### Workflow
1. **Logging Start**: Logs initiation of the handshake.
2. **Lock Mutex**: Locks `c.Mutex` to prevent concurrent access.
3. **Session Retrieval**: Calls `c.getSession(routerInfo)`.
4. **Condition Variable Setup**: Sets a `Cond` for the session.
5. **Outgoing Handshake**: Executes `RunOutgoingHandshake`.
6. **Completion Broadcast**: Broadcasts to waiting goroutines.
7. **Finalize and Unlock**: Logs success.
---
## i2np.go
Provides functions to queue and send I2NP messages using a `NoiseSession`.
### Package
```go
var ExampleNoiseListener net.Listener = exampleNoiseTransport
```
ExampleNoiseListener is not a real Noise Listener, do not use it. It is exported
so that it can be confirmed that the transport implements net.Listener
```go
package noise
var (
ExampleNoiseSession net.Conn = exampleNoiseSession.(*NoiseSession)
)
```
### Imports
#### func NewNoiseTransportSession
```go
import "github.com/go-i2p/go-i2p/lib/i2np"
func NewNoiseTransportSession(ri router_info.RouterInfo) (transport.TransportSession, error)
```
### Functions
#### type HandshakeState
#### `QueueSendI2NP`
```go
type HandshakeState struct {
*noise.HandshakeState
}
```
Queues an I2NP message for sending.
#### func NewHandshakeState
```go
func NewHandshakeState(staticKey noise.DHKey, isInitiator bool) (*HandshakeState, error)
```
#### func (*HandshakeState) GenerateEphemeral
```go
func (h *HandshakeState) GenerateEphemeral() (*noise.DHKey, error)
```
GenerateEphemeral creates the ephemeral keypair that will be used in handshake
This needs to be separate so NTCP2 can obfuscate it
#### func (*HandshakeState) ReadMessage
```go
func (h *HandshakeState) ReadMessage(message []byte) ([]byte, *noise.CipherState, *noise.CipherState, error)
```
#### func (*HandshakeState) SetEphemeral
```go
func (h *HandshakeState) SetEphemeral(key *noise.DHKey) error
```
SetEphemeral allows setting a potentially modified ephemeral key This is needed
for NTCP2's obfuscation layer
#### func (*HandshakeState) WriteMessage
```go
func (h *HandshakeState) WriteMessage(payload []byte) ([]byte, *noise.CipherState, *noise.CipherState, error)
```
#### type NoiseSession
```go
type NoiseSession struct {
router_info.RouterInfo
*noise.CipherState
*sync.Cond
*NoiseTransport // The parent transport, which "Dialed" the connection to the peer with whom we established the session
*HandshakeState
RecvQueue *cb.Queue
SendQueue *cb.Queue
VerifyCallback VerifyCallbackFunc
Conn net.Conn
}
```
#### func NewNoiseSession
```go
func NewNoiseSession(ri router_info.RouterInfo) (*NoiseSession, error)
```
#### func (*NoiseSession) Close
```go
func (s *NoiseSession) Close() error
```
#### func (*NoiseSession) ComposeInitiatorHandshakeMessage
```go
func (c *NoiseSession) ComposeInitiatorHandshakeMessage(
payload []byte,
ephemeralPrivate []byte,
) (
negotiationData,
handshakeMessage []byte,
handshakeState *noise.HandshakeState,
err error,
)
```
#### func (*NoiseSession) ComposeReceiverHandshakeMessage
```go
func (c *NoiseSession) ComposeReceiverHandshakeMessage(localStatic noise.DHKey, remoteStatic []byte, payload []byte, ephemeralPrivate []byte) (negData, msg []byte, state *noise.HandshakeState, err error)
```
#### func (*NoiseSession) LocalAddr
```go
func (s *NoiseSession) LocalAddr() net.Addr
```
#### func (*NoiseSession) QueueSendI2NP
```go
func (s *NoiseSession) QueueSendI2NP(msg i2np.I2NPMessage)
```
#### Parameters
- `msg`: The I2NP message.
---
#### `SendQueueSize`
Returns the size of the send queue.
```go
func (s *NoiseSession) SendQueueSize() int
```
---
#### `ReadNextI2NP`
Attempts to read the next I2NP message from the queue.
```go
func (s *NoiseSession) ReadNextI2NP() (i2np.I2NPMessage, error)
```
---
## incoming_handshake.go
Defines functions for the incoming (receiver) side of the handshake.
### Functions
#### `ComposeReceiverHandshakeMessage`
Creates a receiver handshake message using Noise patterns.
```go
func ComposeReceiverHandshakeMessage(s noise.DHKey, rs []byte, payload []byte, ePrivate []byte) (negData, msg []byte, state *noise.HandshakeState, err error)
```
- **`s`**: Static Diffie-Hellman key.
- **`rs`**: Remote static key.
- **`payload`**: Optional payload data.
- **`ePrivate`**: Private ephemeral key.
---
#### `RunIncomingHandshake`
Executes an incoming handshake process.
```go
func (c *NoiseSession) RunIncomingHandshake() error
```
- Initializes and sends the negotiation data and handshake message.
---
## outgoing_handshake.go
Defines functions for the outgoing (initiator) side of the handshake.
### Functions
#### `ComposeInitiatorHandshakeMessage`
Creates an initiator handshake message.
```go
func ComposeInitiatorHandshakeMessage(s noise.DHKey, rs []byte, payload []byte, ePrivate []byte) (negData, msg []byte, state *noise.HandshakeState, err error)
```
---
#### `RunOutgoingHandshake`
Executes the outgoing handshake process.
```go
func (c *NoiseSession) RunOutgoingHandshake() error
```
- Sends negotiation data and handshake message.
---
## noise_constants.go
Defines constants and utility functions for configuring Noise protocol parameters.
### Constants
```go
const (
NOISE_DH_CURVE25519 = 1
NOISE_CIPHER_CHACHAPOLY = 1
NOISE_HASH_SHA256 = 3
NOISE_PATTERN_XK = 11
uint16Size = 2
MaxPayloadSize = 65537
)
```
### Functions
#### `initNegotiationData`
Initializes negotiation data with default values.
```go
func initNegotiationData(negotiationData []byte) []byte
```
---
## read_session.go
Functions related to reading encrypted data in a Noise session.
### Functions
#### `Read`
Reads from the Noise session.
#### func (*NoiseSession) Read
```go
func (c *NoiseSession) Read(b []byte) (int, error)
```
#### `decryptPacket`
Decrypts a packet.
#### func (*NoiseSession) ReadNextI2NP
```go
func (c *NoiseSession) decryptPacket(data []byte) (int, []byte, error)
func (s *NoiseSession) ReadNextI2NP() (i2np.I2NPMessage, error)
```
---
## session.go
Defines the `NoiseSession` struct and associated methods for session management.
### Struct: `NoiseSession`
Defines session properties.
#### func (*NoiseSession) RemoteAddr
```go
type NoiseSession struct {
// Session properties here
}
func (noise_session *NoiseSession) RemoteAddr() net.Addr
```
RemoteAddr implements net.Conn
---
## transport.go
Defines the `NoiseTransport` struct and its methods for session compatibility, accepting connections, etc.
### Struct: `NoiseTransport`
#### func (*NoiseSession) RunIncomingHandshake
```go
type NoiseTransport struct {
sync.Mutex
router_identity.RouterIdentity
*noise.CipherState
Listener net.Listener
peerConnections map[data.Hash]transport.TransportSession
}
func (c *NoiseSession) RunIncomingHandshake() error
```
#### Methods
#### func (*NoiseSession) RunOutgoingHandshake
- `Compatible`: Checks compatibility.
- `Accept`: Accepts a connection.
- `Addr`: Returns the address.
- `SetIdentity`: Sets the router identity.
- `GetSession`: Obtains a session.
```go
func (c *NoiseSession) RunOutgoingHandshake() error
```
---
#### func (*NoiseSession) SendQueueSize
## write_session.go
```go
func (s *NoiseSession) SendQueueSize() int
```
Functions for writing encrypted data in a Noise session.
#### func (*NoiseSession) SetDeadline
### Functions
```go
func (noise_session *NoiseSession) SetDeadline(t time.Time) error
```
SetDeadline implements net.Conn
#### `Write`
#### func (*NoiseSession) SetReadDeadline
Writes data in a Noise session.
```go
func (noise_session *NoiseSession) SetReadDeadline(t time.Time) error
```
SetReadDeadline implements net.Conn
#### func (*NoiseSession) SetWriteDeadline
```go
func (noise_session *NoiseSession) SetWriteDeadline(t time.Time) error
```
SetWriteDeadline implements net.Conn
#### func (*NoiseSession) Write
```go
func (c *NoiseSession) Write(b []byte) (int, error)
```
#### `encryptPacket`
Encrypts a packet.
#### type NoiseTransport
```go
func (c *NoiseSession) encryptPacket(data []byte) (int, []byte, error)
```
type NoiseTransport struct {
sync.Mutex
router_info.RouterInfo
Listener net.Listener
}
```
#### func NewNoiseTransport
```go
func NewNoiseTransport(netSocket net.Listener) *NoiseTransport
```
NewNoiseTransport create a NoiseTransport using a supplied net.Listener
#### func NewNoiseTransportSocket
```go
func NewNoiseTransportSocket() (*NoiseTransport, error)
```
NewNoiseTransportSocket creates a Noise transport socket with a random host and
port.
#### func (*NoiseTransport) Accept
```go
func (noopt *NoiseTransport) Accept() (net.Conn, error)
```
Accept a connection on a listening socket.
#### func (*NoiseTransport) Addr
```go
func (noopt *NoiseTransport) Addr() net.Addr
```
Addr of the transport, for now this is returning the IP:Port the transport is
listening on, but this might actually be the router identity
#### func (*NoiseTransport) Close
```go
func (noopt *NoiseTransport) Close() error
```
close the transport cleanly blocks until done returns an error if one happens
#### func (*NoiseTransport) Compatable
```go
func (noopt *NoiseTransport) Compatable(routerInfo router_info.RouterInfo) bool
```
Compatable return true if a routerInfo is compatable with this transport
#### func (*NoiseTransport) Compatible
```go
func (noopt *NoiseTransport) Compatible(routerInfo router_info.RouterInfo) bool
```
#### func (*NoiseTransport) GetSession
```go
func (noopt *NoiseTransport) GetSession(routerInfo router_info.RouterInfo) (transport.TransportSession, error)
```
Obtain a transport session with a router given its RouterInfo. If a session with
this router is NOT already made attempt to create one and block until made or
until an error happens returns an established TransportSession and nil on
success returns nil and an error on error
#### func (*NoiseTransport) Handshake
```go
func (c *NoiseTransport) Handshake(routerInfo router_info.RouterInfo) error
```
#### func (*NoiseTransport) HandshakeKey
```go
func (h *NoiseTransport) HandshakeKey() *noise.DHKey
```
#### func (*NoiseTransport) Name
```go
func (noopt *NoiseTransport) Name() string
```
Name of the transport TYPE, in this case `noise`
#### func (*NoiseTransport) SetIdentity
```go
func (noopt *NoiseTransport) SetIdentity(ident router_info.RouterInfo) (err error)
```
SetIdentity will set the router identity for this transport. will bind if the
underlying socket is not already if the underlying socket is already bound
update the RouterIdentity returns any errors that happen if they do
#### type VerifyCallbackFunc
```go
type VerifyCallbackFunc func(publicKey []byte, data []byte) error
```
# noise
--
import "github.com/go-i2p/go-i2p/lib/transport/noise"
![noise.svg](noise)
## Usage
```go
const (
NOISE_DH_CURVE25519 = 1
NOISE_CIPHER_CHACHAPOLY = 1
NOISE_CIPHER_AESGCM = 2
NOISE_HASH_SHA256 = 3
NOISE_PATTERN_XK = 11
MaxPayloadSize = 65537
)
```
```go
const NOISE_PROTOCOL_NAME = "NOISE"
```
```go
var ExampleNoiseListener net.Listener = exampleNoiseTransport
```
ExampleNoiseListener is not a real Noise Listener, do not use it. It is exported
so that it can be confirmed that the transport implements net.Listener
```go
var (
ExampleNoiseSession net.Conn = exampleNoiseSession.(*NoiseSession)
)
```
#### func NewNoiseTransportSession
```go
func NewNoiseTransportSession(ri router_info.RouterInfo) (transport.TransportSession, error)
```
#### type HandshakeState
```go
type HandshakeState struct {
*noise.HandshakeState
}
```
#### func NewHandshakeState
```go
func NewHandshakeState(staticKey noise.DHKey, isInitiator bool) (*HandshakeState, error)
```
#### func (*HandshakeState) GenerateEphemeral
```go
func (h *HandshakeState) GenerateEphemeral() (*noise.DHKey, error)
```
GenerateEphemeral creates the ephemeral keypair that will be used in handshake
This needs to be separate so NTCP2 can obfuscate it
#### func (*HandshakeState) ReadMessage
```go
func (h *HandshakeState) ReadMessage(message []byte) ([]byte, *noise.CipherState, *noise.CipherState, error)
```
#### func (*HandshakeState) SetEphemeral
```go
func (h *HandshakeState) SetEphemeral(key *noise.DHKey) error
```
SetEphemeral allows setting a potentially modified ephemeral key This is needed
for NTCP2's obfuscation layer
#### func (*HandshakeState) WriteMessage
```go
func (h *HandshakeState) WriteMessage(payload []byte) ([]byte, *noise.CipherState, *noise.CipherState, error)
```
#### type NoiseSession
```go
type NoiseSession struct {
router_info.RouterInfo
*noise.CipherState
*sync.Cond
*NoiseTransport // The parent transport, which "Dialed" the connection to the peer with whom we established the session
*HandshakeState
RecvQueue *cb.Queue
SendQueue *cb.Queue
VerifyCallback VerifyCallbackFunc
Conn net.Conn
}
```
#### func NewNoiseSession
```go
func NewNoiseSession(ri router_info.RouterInfo) (*NoiseSession, error)
```
#### func (*NoiseSession) Close
```go
func (s *NoiseSession) Close() error
```
#### func (*NoiseSession) ComposeInitiatorHandshakeMessage
```go
func (c *NoiseSession) ComposeInitiatorHandshakeMessage(
payload []byte,
ephemeralPrivate []byte,
) (
negotiationData,
handshakeMessage []byte,
handshakeState *noise.HandshakeState,
err error,
)
```
#### func (*NoiseSession) ComposeReceiverHandshakeMessage
```go
func (c *NoiseSession) ComposeReceiverHandshakeMessage(localStatic noise.DHKey, remoteStatic []byte, payload []byte, ephemeralPrivate []byte) (negData, msg []byte, state *noise.HandshakeState, err error)
```
#### func (*NoiseSession) LocalAddr
```go
func (s *NoiseSession) LocalAddr() net.Addr
```
#### func (*NoiseSession) QueueSendI2NP
```go
func (s *NoiseSession) QueueSendI2NP(msg i2np.I2NPMessage)
```
#### func (*NoiseSession) Read
```go
func (c *NoiseSession) Read(b []byte) (int, error)
```
#### func (*NoiseSession) ReadNextI2NP
```go
func (s *NoiseSession) ReadNextI2NP() (i2np.I2NPMessage, error)
```
#### func (*NoiseSession) RemoteAddr
```go
func (noise_session *NoiseSession) RemoteAddr() net.Addr
```
RemoteAddr implements net.Conn
#### func (*NoiseSession) RunIncomingHandshake
```go
func (c *NoiseSession) RunIncomingHandshake() error
```
#### func (*NoiseSession) RunOutgoingHandshake
```go
func (c *NoiseSession) RunOutgoingHandshake() error
```
#### func (*NoiseSession) SendQueueSize
```go
func (s *NoiseSession) SendQueueSize() int
```
#### func (*NoiseSession) SetDeadline
```go
func (noise_session *NoiseSession) SetDeadline(t time.Time) error
```
SetDeadline implements net.Conn
#### func (*NoiseSession) SetReadDeadline
```go
func (noise_session *NoiseSession) SetReadDeadline(t time.Time) error
```
SetReadDeadline implements net.Conn
#### func (*NoiseSession) SetWriteDeadline
```go
func (noise_session *NoiseSession) SetWriteDeadline(t time.Time) error
```
SetWriteDeadline implements net.Conn
#### func (*NoiseSession) Write
```go
func (c *NoiseSession) Write(b []byte) (int, error)
```
#### type NoiseTransport
```go
type NoiseTransport struct {
sync.Mutex
router_info.RouterInfo
Listener net.Listener
}
```
#### func NewNoiseTransport
```go
func NewNoiseTransport(netSocket net.Listener) *NoiseTransport
```
NewNoiseTransport create a NoiseTransport using a supplied net.Listener
#### func NewNoiseTransportSocket
```go
func NewNoiseTransportSocket() (*NoiseTransport, error)
```
NewNoiseTransportSocket creates a Noise transport socket with a random host and
port.
#### func (*NoiseTransport) Accept
```go
func (noopt *NoiseTransport) Accept() (net.Conn, error)
```
Accept a connection on a listening socket.
#### func (*NoiseTransport) Addr
```go
func (noopt *NoiseTransport) Addr() net.Addr
```
Addr of the transport, for now this is returning the IP:Port the transport is
listening on, but this might actually be the router identity
#### func (*NoiseTransport) Close
```go
func (noopt *NoiseTransport) Close() error
```
close the transport cleanly blocks until done returns an error if one happens
#### func (*NoiseTransport) Compatable
```go
func (noopt *NoiseTransport) Compatable(routerInfo router_info.RouterInfo) bool
```
Compatable return true if a routerInfo is compatable with this transport
#### func (*NoiseTransport) Compatible
```go
func (noopt *NoiseTransport) Compatible(routerInfo router_info.RouterInfo) bool
```
#### func (*NoiseTransport) GetSession
```go
func (noopt *NoiseTransport) GetSession(routerInfo router_info.RouterInfo) (transport.TransportSession, error)
```
Obtain a transport session with a router given its RouterInfo. If a session with
this router is NOT already made attempt to create one and block until made or
until an error happens returns an established TransportSession and nil on
success returns nil and an error on error
#### func (*NoiseTransport) Handshake
```go
func (c *NoiseTransport) Handshake(routerInfo router_info.RouterInfo) error
```
#### func (*NoiseTransport) HandshakeKey
```go
func (h *NoiseTransport) HandshakeKey() *noise.DHKey
```
#### func (*NoiseTransport) Name
```go
func (noopt *NoiseTransport) Name() string
```
Name of the transport TYPE, in this case `noise`
#### func (*NoiseTransport) SetIdentity
```go
func (noopt *NoiseTransport) SetIdentity(ident router_info.RouterInfo) (err error)
```
SetIdentity will set the router identity for this transport. will bind if the
underlying socket is not already if the underlying socket is already bound
update the RouterIdentity returns any errors that happen if they do
#### type VerifyCallbackFunc
```go
type VerifyCallbackFunc func(publicKey []byte, data []byte) error
```
noise
github.com/go-i2p/go-i2p/lib/transport/noise

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 271 KiB

View File

@ -5,6 +5,21 @@
## Usage
```go
const (
NOISE_DH_CURVE25519 = 1
NOISE_CIPHER_CHACHAPOLY = 1
NOISE_CIPHER_AESGCM = 2
NOISE_HASH_SHA256 = 3
NOISE_PATTERN_XK = 11
MaxPayloadSize = math.MaxUint16 - 16 - uint16Size /*data len*/
)
```
```go
const (
NTCP_PROTOCOL_VERSION = 2
@ -13,18 +28,305 @@ const (
)
```
#### type Session
#### type NTCP2Session
```go
type Session struct{}
type NTCP2Session struct {
*noise.NoiseSession
*NTCP2Transport
}
```
Session implements TransportSession An established transport session
NTCP2Session extends the base noise.NoiseSession with NTCP2-specific
functionality
#### type Transport
#### func NewNTCP2Session
```go
type Transport struct{}
func NewNTCP2Session(noiseConfig router_info.RouterInfo) (*NTCP2Session, error)
```
NewNTCP2Session creates a new NTCP2 session using the existing noise
implementation
#### func (*NTCP2Session) ComposeInitiatorHandshakeMessage
```go
func (c *NTCP2Session) ComposeInitiatorHandshakeMessage(
localStatic noise.DHKey,
remoteStatic []byte,
payload []byte,
ephemeralPrivate []byte,
) (
negotiationData,
handshakeMessage []byte,
handshakeState *noise.HandshakeState,
err error,
)
```
Modify ComposeInitiatorHandshakeMessage in outgoing_handshake.go At the moment,
remoteStatic is stored in the NTCP2Session() and doesn't need to be passed as an
argument. You actually get it directly out of the remote RouterInfo, which the
NoiseSession also has access to. So maybe, the interface should change so that
we:
- A: get the localStatic out of the parent NTCP2Transport's routerInfo, which is the "local" routerInfo
- B: get the remoteStatic out of the NTCP2Session router, which is the "remote" routerInfo
#### func (*NTCP2Session) CreateSessionRequest
```go
func (s *NTCP2Session) CreateSessionRequest() (*SessionRequest, error)
```
Transport is an ntcp transport implementing transport.Transport interface
#### func (*NTCP2Session) DeobfuscateEphemeral
```go
func (s *NTCP2Session) DeobfuscateEphemeral(obfuscatedEphemeralKey []byte) ([]byte, error)
```
DeobfuscateEphemeral reverses the key obfuscation
#### func (*NTCP2Session) ObfuscateEphemeral
```go
func (s *NTCP2Session) ObfuscateEphemeral(ephemeralKey []byte) ([]byte, error)
```
ObfuscateEphemeral implements NTCP2's key obfuscation using AES-256-CBC
#### type NTCP2Transport
```go
type NTCP2Transport struct {
*noise.NoiseTransport
*sntp.RouterTimestamper
}
```
NTCP2Transport is an ntcp2 transport implementing transport.NTCP2Transport
interface
#### func NewNTCP2Transport
```go
func NewNTCP2Transport(routerInfo *router_info.RouterInfo) (*NTCP2Transport, error)
```
#### func (*NTCP2Transport) Accept
```go
func (t *NTCP2Transport) Accept() (net.Conn, error)
```
#### func (*NTCP2Transport) Address
```go
func (t *NTCP2Transport) Address() (*router_address.RouterAddress, error)
```
#### func (*NTCP2Transport) Compatible
```go
func (t *NTCP2Transport) Compatible(routerInfo router_info.RouterInfo) bool
```
#### func (*NTCP2Transport) GetSession
```go
func (t *NTCP2Transport) GetSession(routerInfo router_info.RouterInfo) (transport.TransportSession, error)
```
#### func (*NTCP2Transport) Name
```go
func (t *NTCP2Transport) Name() string
```
#### type PaddingStrategy
```go
type PaddingStrategy interface {
AddPadding(message []byte) []byte
RemovePadding(message []byte) []byte
}
```
#### type SessionRequest
```go
type SessionRequest struct {
ObfuscatedKey []byte // 32 bytes
Timestamp uint32 // 4 bytes
Padding []byte // Random padding
}
```
# ntcp
--
import "github.com/go-i2p/go-i2p/lib/transport/ntcp"
![ntcp.svg](ntcp)
## Usage
```go
const (
NOISE_DH_CURVE25519 = 1
NOISE_CIPHER_CHACHAPOLY = 1
NOISE_CIPHER_AESGCM = 2
NOISE_HASH_SHA256 = 3
NOISE_PATTERN_XK = 11
MaxPayloadSize = math.MaxUint16 - 16 - uint16Size /*data len*/
)
```
```go
const (
NTCP_PROTOCOL_VERSION = 2
NTCP_PROTOCOL_NAME = "NTCP2"
NTCP_MESSAGE_MAX_SIZE = 65537
)
```
#### type NTCP2Session
```go
type NTCP2Session struct {
*noise.NoiseSession
*NTCP2Transport
}
```
NTCP2Session extends the base noise.NoiseSession with NTCP2-specific
functionality
#### func NewNTCP2Session
```go
func NewNTCP2Session(noiseConfig router_info.RouterInfo) (*NTCP2Session, error)
```
NewNTCP2Session creates a new NTCP2 session using the existing noise
implementation
#### func (*NTCP2Session) ComposeInitiatorHandshakeMessage
```go
func (c *NTCP2Session) ComposeInitiatorHandshakeMessage(
localStatic noise.DHKey,
remoteStatic []byte,
payload []byte,
ephemeralPrivate []byte,
) (
negotiationData,
handshakeMessage []byte,
handshakeState *noise.HandshakeState,
err error,
)
```
Modify ComposeInitiatorHandshakeMessage in outgoing_handshake.go At the moment,
remoteStatic is stored in the NTCP2Session() and doesn't need to be passed as an
argument. You actually get it directly out of the remote RouterInfo, which the
NoiseSession also has access to. So maybe, the interface should change so that
we:
- A: get the localStatic out of the parent NTCP2Transport's routerInfo, which is the "local" routerInfo
- B: get the remoteStatic out of the NTCP2Session router, which is the "remote" routerInfo
#### func (*NTCP2Session) CreateSessionRequest
```go
func (s *NTCP2Session) CreateSessionRequest() (*SessionRequest, error)
```
#### func (*NTCP2Session) DeobfuscateEphemeral
```go
func (s *NTCP2Session) DeobfuscateEphemeral(obfuscatedEphemeralKey []byte) ([]byte, error)
```
DeobfuscateEphemeral reverses the key obfuscation
#### func (*NTCP2Session) ObfuscateEphemeral
```go
func (s *NTCP2Session) ObfuscateEphemeral(ephemeralKey []byte) ([]byte, error)
```
ObfuscateEphemeral implements NTCP2's key obfuscation using AES-256-CBC
#### type NTCP2Transport
```go
type NTCP2Transport struct {
*noise.NoiseTransport
*sntp.RouterTimestamper
}
```
NTCP2Transport is an ntcp2 transport implementing transport.NTCP2Transport
interface
#### func NewNTCP2Transport
```go
func NewNTCP2Transport(routerInfo *router_info.RouterInfo) (*NTCP2Transport, error)
```
#### func (*NTCP2Transport) Accept
```go
func (t *NTCP2Transport) Accept() (net.Conn, error)
```
#### func (*NTCP2Transport) Address
```go
func (t *NTCP2Transport) Address() (*router_address.RouterAddress, error)
```
#### func (*NTCP2Transport) Compatible
```go
func (t *NTCP2Transport) Compatible(routerInfo router_info.RouterInfo) bool
```
#### func (*NTCP2Transport) GetSession
```go
func (t *NTCP2Transport) GetSession(routerInfo router_info.RouterInfo) (transport.TransportSession, error)
```
#### func (*NTCP2Transport) Name
```go
func (t *NTCP2Transport) Name() string
```
#### type PaddingStrategy
```go
type PaddingStrategy interface {
AddPadding(message []byte) []byte
RemovePadding(message []byte) []byte
}
```
#### type SessionRequest
```go
type SessionRequest struct {
ObfuscatedKey []byte // 32 bytes
Timestamp uint32 // 4 bytes
Padding []byte // Random padding
}
```
ntcp
github.com/go-i2p/go-i2p/lib/transport/ntcp

918
lib/transport/ntcp/ntcp.svg Normal file
View File

@ -0,0 +1,918 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="1228pt" height="1292pt"
viewBox="0.00 0.00 1228.16 1292.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1292)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1292 1228.1562,-1292 1228.1562,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1284 1220.1562,-1284 1220.1562,-8 8,-8"/>
<text text-anchor="middle" x="614.0781" y="-1263.8" font-family="Arial" font-size="18.00" fill="#000000">ntcp</text>
</g>
<g id="clust19" class="cluster">
<title>cluster_golang.org/x/exp/rand</title>
<g id="a_clust19"><a xlink:href="/?f=golang.org/x/exp/rand" xlink:title="package: golang.org/x/exp/rand">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="598.8663,-555 598.8663,-695 668.8663,-695 668.8663,-555 598.8663,-555"/>
<text text-anchor="middle" x="633.8663" y="-676.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">rand</text>
</a>
</g>
</g>
<g id="clust18" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust18"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="1076.9163,-933 1076.9163,-1012 1151.1113,-1012 1151.1113,-933 1076.9163,-933"/>
<text text-anchor="middle" x="1114.0138" y="-993.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust17" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust17"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="337.7673,-16 337.7673,-95 474.9567,-95 474.9567,-16 337.7673,-16"/>
<text text-anchor="middle" x="406.362" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust15" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp</title>
<g id="a_clust15"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/util/time/sntp" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="778.3215,-496 778.3215,-661 956.7157,-661 956.7157,-496 778.3215,-496"/>
<text text-anchor="middle" x="867.5186" y="-642.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">sntp</text>
</a>
</g>
</g>
<g id="clust16" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper</title>
<g id="a_clust16"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/util/time/sntp" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M803.257,-548C803.257,-548 931.7802,-548 931.7802,-548 937.7802,-548 943.7802,-554 943.7802,-560 943.7802,-560 943.7802,-614 943.7802,-614 943.7802,-620 937.7802,-626 931.7802,-626 931.7802,-626 803.257,-626 803.257,-626 797.257,-626 791.257,-620 791.257,-614 791.257,-614 791.257,-560 791.257,-560 791.257,-554 797.257,-548 803.257,-548"/>
<text text-anchor="middle" x="867.5186" y="-556.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*RouterTimestamper)</text>
</a>
</g>
</g>
<g id="clust14" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs</title>
<g id="a_clust14"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/transport/obfs" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="777.1658,-259 777.1658,-338 957.8714,-338 957.8714,-259 777.1658,-259"/>
<text text-anchor="middle" x="867.5186" y="-319.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">obfs</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/transport/noise" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="1015.8714,-1020 1015.8714,-1246 1212.1562,-1246 1212.1562,-1020 1015.8714,-1020"/>
<text text-anchor="middle" x="1114.0138" y="-1227.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">noise</text>
</a>
</g>
</g>
<g id="clust13" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport</title>
<g id="a_clust13"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/transport/noise" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M1062.9163,-1072C1062.9163,-1072 1165.1113,-1072 1165.1113,-1072 1171.1113,-1072 1177.1113,-1078 1177.1113,-1084 1177.1113,-1084 1177.1113,-1199 1177.1113,-1199 1177.1113,-1205 1171.1113,-1211 1165.1113,-1211 1165.1113,-1211 1062.9163,-1211 1062.9163,-1211 1056.9163,-1211 1050.9163,-1205 1050.9163,-1199 1050.9163,-1199 1050.9163,-1084 1050.9163,-1084 1050.9163,-1078 1056.9163,-1072 1062.9163,-1072"/>
<text text-anchor="middle" x="1114.0138" y="-1080.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*NoiseTransport)</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="1038.1975,-371 1038.1975,-492 1189.8301,-492 1189.8301,-371 1038.1975,-371"/>
<text text-anchor="middle" x="1114.0138" y="-473.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M1058.1975,-379C1058.1975,-379 1169.8301,-379 1169.8301,-379 1175.8301,-379 1181.8301,-385 1181.8301,-391 1181.8301,-391 1181.8301,-445 1181.8301,-445 1181.8301,-451 1175.8301,-457 1169.8301,-457 1169.8301,-457 1058.1975,-457 1058.1975,-457 1052.1975,-457 1046.1975,-451 1046.1975,-445 1046.1975,-445 1046.1975,-391 1046.1975,-391 1046.1975,-385 1052.1975,-379 1058.1975,-379"/>
<text text-anchor="middle" x="1114.0138" y="-387.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*RouterInfo)</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_address" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="1031.201,-629 1031.201,-925 1196.8266,-925 1196.8266,-629 1031.201,-629"/>
<text text-anchor="middle" x="1114.0138" y="-906.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_address</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_address" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M1051.201,-637C1051.201,-637 1176.8266,-637 1176.8266,-637 1182.8266,-637 1188.8266,-643 1188.8266,-649 1188.8266,-649 1188.8266,-825 1188.8266,-825 1188.8266,-831 1182.8266,-837 1176.8266,-837 1176.8266,-837 1051.201,-837 1051.201,-837 1045.201,-837 1039.201,-831 1039.201,-825 1039.201,-825 1039.201,-649 1039.201,-649 1039.201,-643 1045.201,-637 1051.201,-637"/>
<text text-anchor="middle" x="1114.0138" y="-645.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(RouterAddress)</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="1065.0138,-500 1065.0138,-621 1164.0138,-621 1164.0138,-500 1065.0138,-500"/>
<text text-anchor="middle" x="1114.5138" y="-602.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M1085.0138,-508C1085.0138,-508 1144.0138,-508 1144.0138,-508 1150.0138,-508 1156.0138,-514 1156.0138,-520 1156.0138,-520 1156.0138,-574 1156.0138,-574 1156.0138,-580 1150.0138,-586 1144.0138,-586 1144.0138,-586 1085.0138,-586 1085.0138,-586 1079.0138,-586 1073.0138,-580 1073.0138,-574 1073.0138,-574 1073.0138,-520 1073.0138,-520 1073.0138,-514 1079.0138,-508 1085.0138,-508"/>
<text text-anchor="middle" x="1114.5138" y="-516.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(I2PString)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/flynn/noise</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/flynn/noise" xlink:title="package: github.com/flynn/noise">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="328.0541,-103 328.0541,-338 484.6699,-338 484.6699,-103 328.0541,-103"/>
<text text-anchor="middle" x="406.362" y="-319.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">noise</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_*github.com/flynn/noise.HandshakeState</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/flynn/noise" xlink:title="type: *github.com/flynn/noise.HandshakeState">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M353.9377,-111C353.9377,-111 459.7863,-111 459.7863,-111 465.7863,-111 471.7863,-117 471.7863,-123 471.7863,-123 471.7863,-177 471.7863,-177 471.7863,-183 465.7863,-189 459.7863,-189 459.7863,-189 353.9377,-189 353.9377,-189 347.9377,-189 341.9377,-183 341.9377,-177 341.9377,-177 341.9377,-123 341.9377,-123 341.9377,-117 347.9377,-111 353.9377,-111"/>
<text text-anchor="middle" x="406.862" y="-119.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*HandshakeState)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M584.6587,-703C584.6587,-703 908.1827,-703 908.1827,-703 914.1827,-703 920.1827,-709 920.1827,-715 920.1827,-715 920.1827,-1013 920.1827,-1013 920.1827,-1019 914.1827,-1025 908.1827,-1025 908.1827,-1025 584.6587,-1025 584.6587,-1025 578.6587,-1025 572.6587,-1019 572.6587,-1013 572.6587,-1013 572.6587,-715 572.6587,-715 572.6587,-709 578.6587,-703 584.6587,-703"/>
<text text-anchor="middle" x="746.4207" y="-711.5" font-family="Arial" font-size="15.00" fill="#222222">(*NTCP2Transport)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-346C28,-346 915.1659,-346 915.1659,-346 921.1659,-346 927.1659,-352 927.1659,-358 927.1659,-358 927.1659,-473 927.1659,-473 927.1659,-479 921.1659,-485 915.1659,-485 915.1659,-485 28,-485 28,-485 22,-485 16,-479 16,-473 16,-473 16,-358 16,-358 16,-352 22,-346 28,-346"/>
<text text-anchor="middle" x="471.583" y="-354.5" font-family="Arial" font-size="15.00" fill="#222222">(*NTCP2Session)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session | defined in session.go:74&#10;at session.go:75: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NewNoiseTransportSession]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M923.5018,-1192C923.5018,-1192 811.5354,-1192 811.5354,-1192 805.5354,-1192 799.5354,-1186 799.5354,-1180 799.5354,-1180 799.5354,-1168 799.5354,-1168 799.5354,-1162 805.5354,-1156 811.5354,-1156 811.5354,-1156 923.5018,-1156 923.5018,-1156 929.5018,-1156 935.5018,-1162 935.5018,-1168 935.5018,-1168 935.5018,-1180 935.5018,-1180 935.5018,-1186 929.5018,-1192 923.5018,-1192"/>
<text text-anchor="middle" x="867.5186" y="-1169.8" font-family="Verdana" font-size="14.00" fill="#000000">NewNTCP2Session</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NewNoiseTransportSession -->
<g id="node26" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NewNoiseTransportSession</title>
<g id="a_node26"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NewNoiseTransportSession | defined in session.go:130">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1192.2988,-1064C1192.2988,-1064 1035.7288,-1064 1035.7288,-1064 1029.7288,-1064 1023.7288,-1058 1023.7288,-1052 1023.7288,-1052 1023.7288,-1040 1023.7288,-1040 1023.7288,-1034 1029.7288,-1028 1035.7288,-1028 1035.7288,-1028 1192.2988,-1028 1192.2988,-1028 1198.2988,-1028 1204.2988,-1034 1204.2988,-1040 1204.2988,-1040 1204.2988,-1052 1204.2988,-1052 1204.2988,-1058 1198.2988,-1064 1192.2988,-1064"/>
<text text-anchor="middle" x="1114.0138" y="-1041.8" font-family="Verdana" font-size="14.00" fill="#000000">NewNoiseTransportSession</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NewNoiseTransportSession -->
<g id="edge28" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NewNoiseTransportSession</title>
<g id="a_edge28"><a xlink:title="at session.go:75: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NewNoiseTransportSession]">
<path fill="none" stroke="#8b4513" d="M935.5839,-1181.8773C954.2573,-1180.6644 973.3388,-1175.8714 987.8714,-1164 1020.0057,-1137.7501 988.2995,-1103.3518 1016.6312,-1069.1163"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1019.2367,-1071.4561 1023.6327,-1061.8163 1014.1847,-1066.6107 1019.2367,-1071.4561"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.init -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.init | defined in .:0&#10;at outgoing_handshake.go:12: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M155.5786,-60C155.5786,-60 125.5786,-60 125.5786,-60 119.5786,-60 113.5786,-54 113.5786,-48 113.5786,-48 113.5786,-36 113.5786,-36 113.5786,-30 119.5786,-24 125.5786,-24 125.5786,-24 155.5786,-24 155.5786,-24 161.5786,-24 167.5786,-30 167.5786,-36 167.5786,-36 167.5786,-48 167.5786,-48 167.5786,-54 161.5786,-60 155.5786,-60"/>
<text text-anchor="middle" x="140.5786" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node32" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node32"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M455.0515,-60C455.0515,-60 357.6725,-60 357.6725,-60 351.6725,-60 345.6725,-54 345.6725,-48 345.6725,-48 345.6725,-36 345.6725,-36 345.6725,-30 351.6725,-24 357.6725,-24 357.6725,-24 455.0515,-24 455.0515,-24 461.0515,-24 467.0515,-30 467.0515,-36 467.0515,-36 467.0515,-48 467.0515,-48 467.0515,-54 461.0515,-60 455.0515,-60"/>
<text text-anchor="middle" x="406.362" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge18"><a xlink:title="at outgoing_handshake.go:12: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M168.021,-42C207.227,-42 280.6082,-42 335.6341,-42"/>
<polygon fill="#8b4513" stroke="#8b4513" points="335.6827,-45.5001 345.6827,-42 335.6826,-38.5001 335.6827,-45.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport | defined in new.go:9&#10;at new.go:11: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M695.4966,-538C695.4966,-538 572.236,-538 572.236,-538 566.236,-538 560.236,-532 560.236,-526 560.236,-526 560.236,-514 560.236,-514 560.236,-508 566.236,-502 572.236,-502 572.236,-502 695.4966,-502 695.4966,-502 701.4966,-502 707.4966,-508 707.4966,-514 707.4966,-514 707.4966,-526 707.4966,-526 707.4966,-532 701.4966,-538 695.4966,-538"/>
<text text-anchor="middle" x="633.8663" y="-515.8" font-family="Verdana" font-size="14.00" fill="#000000">NewNTCP2Transport</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="node30" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_node30"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper | defined in router_timestamper.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M936.9133,-540C936.9133,-540 798.1239,-540 798.1239,-540 792.1239,-540 786.1239,-534 786.1239,-528 786.1239,-528 786.1239,-516 786.1239,-516 786.1239,-510 792.1239,-504 798.1239,-504 798.1239,-504 936.9133,-504 936.9133,-504 942.9133,-504 948.9133,-510 948.9133,-516 948.9133,-516 948.9133,-528 948.9133,-528 948.9133,-534 942.9133,-540 936.9133,-540"/>
<text text-anchor="middle" x="867.5186" y="-517.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterTimestamper</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Transport&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_edge14"><a xlink:title="at new.go:11: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]">
<path fill="none" stroke="#8b4513" d="M707.7953,-520.6328C729.3602,-520.8174 753.1897,-521.0214 775.7166,-521.2142"/>
<polygon fill="#8b4513" stroke="#8b4513" points="775.9328,-524.7161 785.9624,-521.3019 775.9928,-517.7163 775.9328,-524.7161"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest | defined in session.go:44&#10;at session.go:47: calling [golang.org/x/exp/rand.Read]&#10;at session.go:62: calling [golang.org/x/exp/rand.Read]&#10;at session.go:52: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral]&#10;at session.go:61: calling [golang.org/x/exp/rand.Intn]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M468.7722,-477C468.7722,-477 343.9518,-477 343.9518,-477 337.9518,-477 331.9518,-471 331.9518,-465 331.9518,-465 331.9518,-453 331.9518,-453 331.9518,-447 337.9518,-441 343.9518,-441 343.9518,-441 468.7722,-441 468.7722,-441 474.7722,-441 480.7722,-447 480.7722,-453 480.7722,-453 480.7722,-465 480.7722,-465 480.7722,-471 474.7722,-477 468.7722,-477"/>
<text text-anchor="middle" x="406.362" y="-454.8" font-family="Verdana" font-size="14.00" fill="#000000">CreateSessionRequest</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral | defined in session.go:118&#10;at session.go:130: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey]&#10;at session.go:119: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey]&#10;at session.go:123: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M692.7512,-477C692.7512,-477 574.9814,-477 574.9814,-477 568.9814,-477 562.9814,-471 562.9814,-465 562.9814,-465 562.9814,-453 562.9814,-453 562.9814,-447 568.9814,-441 574.9814,-441 574.9814,-441 692.7512,-441 692.7512,-441 698.7512,-441 704.7512,-447 704.7512,-453 704.7512,-453 704.7512,-465 704.7512,-465 704.7512,-471 698.7512,-477 692.7512,-477"/>
<text text-anchor="middle" x="633.8663" y="-454.8" font-family="Verdana" font-size="14.00" fill="#000000">ObfuscateEphemeral</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral</title>
<g id="a_edge11"><a xlink:title="at session.go:52: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral]">
<path fill="none" stroke="#000000" d="M480.8554,-459C503.8839,-459 529.3591,-459 552.8085,-459"/>
<polygon fill="#000000" stroke="#000000" points="553.0713,-462.5001 563.0713,-459 553.0712,-455.5001 553.0713,-462.5001"/>
</a>
</g>
</g>
<!-- golang.org/x/exp/rand.Read -->
<g id="node34" class="node">
<title>golang.org/x/exp/rand.Read</title>
<g id="a_node34"><a xlink:title="golang.org/x/exp/rand.Read | defined in rand.go:309">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M648.8663,-660C648.8663,-660 618.8663,-660 618.8663,-660 612.8663,-660 606.8663,-654 606.8663,-648 606.8663,-648 606.8663,-636 606.8663,-636 606.8663,-630 612.8663,-624 618.8663,-624 618.8663,-624 648.8663,-624 648.8663,-624 654.8663,-624 660.8663,-630 660.8663,-636 660.8663,-636 660.8663,-648 660.8663,-648 660.8663,-654 654.8663,-660 648.8663,-660"/>
<text text-anchor="middle" x="633.8663" y="-637.8" font-family="Verdana" font-size="14.00" fill="#000000">Read</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest&#45;&gt;golang.org/x/exp/rand.Read -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest&#45;&gt;golang.org/x/exp/rand.Read</title>
<g id="a_edge3"><a xlink:title="at session.go:47: calling [golang.org/x/exp/rand.Read]&#10;at session.go:62: calling [golang.org/x/exp/rand.Read]">
<path fill="none" stroke="#8b4513" d="M419.7688,-477.0026C443.9422,-508.3507 497.8128,-573.3034 556.5668,-612 568.8293,-620.0763 583.5916,-626.4794 596.915,-631.2605"/>
<polygon fill="#8b4513" stroke="#8b4513" points="596.1634,-634.7014 606.7577,-634.6013 598.4133,-628.0728 596.1634,-634.7014"/>
</a>
</g>
</g>
<!-- golang.org/x/exp/rand.Intn -->
<g id="node35" class="node">
<title>golang.org/x/exp/rand.Intn</title>
<g id="a_node35"><a xlink:title="golang.org/x/exp/rand.Intn | defined in rand.go:287">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M648.8663,-599C648.8663,-599 618.8663,-599 618.8663,-599 612.8663,-599 606.8663,-593 606.8663,-587 606.8663,-587 606.8663,-575 606.8663,-575 606.8663,-569 612.8663,-563 618.8663,-563 618.8663,-563 648.8663,-563 648.8663,-563 654.8663,-563 660.8663,-569 660.8663,-575 660.8663,-575 660.8663,-587 660.8663,-587 660.8663,-593 654.8663,-599 648.8663,-599"/>
<text text-anchor="middle" x="633.8663" y="-576.8" font-family="Verdana" font-size="14.00" fill="#000000">Intn</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest&#45;&gt;golang.org/x/exp/rand.Intn -->
<g id="edge37" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest&#45;&gt;golang.org/x/exp/rand.Intn</title>
<g id="a_edge37"><a xlink:title="at session.go:61: calling [golang.org/x/exp/rand.Intn]">
<path fill="none" stroke="#8b4513" d="M428.956,-477.3291C457.2469,-499.4768 507.9251,-536.5549 556.5668,-559 569.1628,-564.8123 583.634,-569.4282 596.6241,-572.9003"/>
<polygon fill="#8b4513" stroke="#8b4513" points="596.1071,-576.3798 606.6603,-575.4407 597.8249,-569.5938 596.1071,-576.3798"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey | defined in session.go:91&#10;at session.go:93: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]&#10;at session.go:101: calling [github.com/samber/oops.Errorf]&#10;at session.go:92: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]&#10;at session.go:98: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey]&#10;at session.go:93: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M907.3136,-416C907.3136,-416 827.7236,-416 827.7236,-416 821.7236,-416 815.7236,-410 815.7236,-404 815.7236,-404 815.7236,-392 815.7236,-392 815.7236,-386 821.7236,-380 827.7236,-380 827.7236,-380 907.3136,-380 907.3136,-380 913.3136,-380 919.3136,-386 919.3136,-392 919.3136,-392 919.3136,-404 919.3136,-404 919.3136,-410 913.3136,-416 907.3136,-416"/>
<text text-anchor="middle" x="867.5186" y="-393.8" font-family="Verdana" font-size="14.00" fill="#000000">peerStaticKey</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="node20" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_node20"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data | defined in string.go:73">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1129.0138,-578C1129.0138,-578 1099.0138,-578 1099.0138,-578 1093.0138,-578 1087.0138,-572 1087.0138,-566 1087.0138,-566 1087.0138,-554 1087.0138,-554 1087.0138,-548 1093.0138,-542 1099.0138,-542 1099.0138,-542 1129.0138,-542 1129.0138,-542 1135.0138,-542 1141.0138,-548 1141.0138,-554 1141.0138,-554 1141.0138,-566 1141.0138,-566 1141.0138,-572 1135.0138,-578 1129.0138,-578"/>
<text text-anchor="middle" x="1114.0138" y="-555.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="edge49" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_edge49"><a xlink:title="at session.go:93: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="none" stroke="#8b4513" d="M919.3728,-400.2704C941.923,-403.3098 967.7325,-409.7353 987.8714,-423 1005.994,-434.9367 1001.8751,-446.4163 1015.8714,-463 1037.7929,-488.9739 1065.5598,-515.9506 1085.9601,-534.8411"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1083.6582,-537.4791 1093.3905,-541.6662 1088.3935,-532.3238 1083.6582,-537.4791"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="node22" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_node22"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle | defined in router_address.go:173">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1155.716,-768C1155.716,-768 1072.3116,-768 1072.3116,-768 1066.3116,-768 1060.3116,-762 1060.3116,-756 1060.3116,-756 1060.3116,-744 1060.3116,-744 1060.3116,-738 1066.3116,-732 1072.3116,-732 1072.3116,-732 1155.716,-732 1155.716,-732 1161.716,-732 1167.716,-738 1167.716,-744 1167.716,-744 1167.716,-756 1167.716,-756 1167.716,-762 1161.716,-768 1155.716,-768"/>
<text text-anchor="middle" x="1114.0138" y="-745.8" font-family="Verdana" font-size="14.00" fill="#000000">TransportStyle</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="edge4" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_edge4"><a xlink:title="at session.go:93: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="none" stroke="#8b4513" d="M919.3572,-405.8753C933.649,-410.4384 947.9374,-417.6394 957.8714,-429 979.5739,-453.8189 993.7519,-695.552 1015.8714,-720 1025.1055,-730.2062 1037.7033,-736.9845 1050.7939,-741.4744"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1049.7876,-744.8265 1060.372,-744.3556 1051.8041,-738.1233 1049.7876,-744.8265"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey -->
<g id="node23" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey</title>
<g id="a_node23"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey | defined in router_address.go:284">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1141.7189,-707C1141.7189,-707 1086.3087,-707 1086.3087,-707 1080.3087,-707 1074.3087,-701 1074.3087,-695 1074.3087,-695 1074.3087,-683 1074.3087,-683 1074.3087,-677 1080.3087,-671 1086.3087,-671 1086.3087,-671 1141.7189,-671 1141.7189,-671 1147.7189,-671 1153.7189,-677 1153.7189,-683 1153.7189,-683 1153.7189,-695 1153.7189,-695 1153.7189,-701 1147.7189,-707 1141.7189,-707"/>
<text text-anchor="middle" x="1114.0138" y="-684.8" font-family="Verdana" font-size="14.00" fill="#000000">StaticKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey -->
<g id="edge43" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey</title>
<g id="a_edge43"><a xlink:title="at session.go:98: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey]">
<path fill="none" stroke="#8b4513" d="M919.4645,-406.7018C944.6703,-413.832 972.7143,-426.7325 987.8714,-450 1022.9826,-503.8988 985.4294,-535.3329 1015.8714,-592 1031.4534,-621.0056 1058.5927,-646.8254 1080.3881,-664.5197"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1078.4304,-667.4337 1088.4446,-670.893 1082.7734,-661.9438 1078.4304,-667.4337"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses -->
<g id="node25" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses</title>
<g id="a_node25"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses | defined in router_info.go:199">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1161.647,-449C1161.647,-449 1066.3806,-449 1066.3806,-449 1060.3806,-449 1054.3806,-443 1054.3806,-437 1054.3806,-437 1054.3806,-425 1054.3806,-425 1054.3806,-419 1060.3806,-413 1066.3806,-413 1066.3806,-413 1161.647,-413 1161.647,-413 1167.647,-413 1173.647,-419 1173.647,-425 1173.647,-425 1173.647,-437 1173.647,-437 1173.647,-443 1167.647,-449 1161.647,-449"/>
<text text-anchor="middle" x="1114.0138" y="-426.8" font-family="Verdana" font-size="14.00" fill="#000000">RouterAddresses</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses -->
<g id="edge38" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses</title>
<g id="a_edge38"><a xlink:title="at session.go:92: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]">
<path fill="none" stroke="#8b4513" d="M919.2611,-393.7144C940.5941,-392.8352 965.5085,-392.9551 987.8714,-396 1008.9656,-398.8722 1031.5117,-404.3285 1051.6229,-410.0934"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1050.7016,-413.4706 1061.283,-412.9382 1052.6791,-406.7557 1050.7016,-413.4706"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node33" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node33"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1131.2091,-977C1131.2091,-977 1096.8185,-977 1096.8185,-977 1090.8185,-977 1084.8185,-971 1084.8185,-965 1084.8185,-965 1084.8185,-953 1084.8185,-953 1084.8185,-947 1090.8185,-941 1096.8185,-941 1096.8185,-941 1131.2091,-941 1131.2091,-941 1137.2091,-941 1143.2091,-947 1143.2091,-953 1143.2091,-953 1143.2091,-965 1143.2091,-965 1143.2091,-971 1137.2091,-977 1131.2091,-977"/>
<text text-anchor="middle" x="1114.0138" y="-954.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge26" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge26"><a xlink:title="at session.go:101: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M919.4739,-405.2326C933.9462,-409.7674 948.3057,-417.114 957.8714,-429 993.0749,-472.7425 979.5298,-888.1984 1015.8714,-931 1030.1948,-947.8695 1053.9029,-954.9432 1074.4289,-957.764"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1074.1802,-961.2575 1084.4994,-958.8563 1074.9351,-954.2983 1074.1802,-961.2575"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey -->
<g id="edge35" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey</title>
<g id="a_edge35"><a xlink:title="at session.go:119: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey]">
<path fill="none" stroke="#000000" d="M703.0213,-440.9456C735.5635,-432.4498 774.0621,-422.3988 805.6308,-414.1572"/>
<polygon fill="#000000" stroke="#000000" points="806.829,-417.4617 815.6205,-411.5491 805.0607,-410.6887 806.829,-417.4617"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV | defined in session.go:104&#10;at session.go:111: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector]&#10;at session.go:105: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]&#10;at session.go:106: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]&#10;at session.go:114: calling [github.com/samber/oops.Errorf]&#10;at session.go:106: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M902.7596,-477C902.7596,-477 832.2776,-477 832.2776,-477 826.2776,-477 820.2776,-471 820.2776,-465 820.2776,-465 820.2776,-453 820.2776,-453 820.2776,-447 826.2776,-441 832.2776,-441 832.2776,-441 902.7596,-441 902.7596,-441 908.7596,-441 914.7596,-447 914.7596,-453 914.7596,-453 914.7596,-465 914.7596,-465 914.7596,-471 908.7596,-477 902.7596,-477"/>
<text text-anchor="middle" x="867.5186" y="-454.8" font-family="Verdana" font-size="14.00" fill="#000000">peerStaticIV</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV -->
<g id="edge45" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV</title>
<g id="a_edge45"><a xlink:title="at session.go:123: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV]">
<path fill="none" stroke="#000000" d="M704.6038,-459C738.2972,-459 778.0818,-459 809.9009,-459"/>
<polygon fill="#000000" stroke="#000000" points="809.9342,-462.5001 819.9341,-459 809.9341,-455.5001 809.9342,-462.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey -->
<g id="node29" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey</title>
<g id="a_node29"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey | defined in obfs.go:9">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M937.7245,-303C937.7245,-303 797.3127,-303 797.3127,-303 791.3127,-303 785.3127,-297 785.3127,-291 785.3127,-291 785.3127,-279 785.3127,-279 785.3127,-273 791.3127,-267 797.3127,-267 797.3127,-267 937.7245,-267 937.7245,-267 943.7245,-267 949.7245,-273 949.7245,-279 949.7245,-279 949.7245,-291 949.7245,-291 949.7245,-297 943.7245,-303 937.7245,-303"/>
<text text-anchor="middle" x="867.5186" y="-280.8" font-family="Verdana" font-size="14.00" fill="#000000">ObfuscateEphemeralKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ObfuscateEphemeral&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey</title>
<g id="a_edge10"><a xlink:title="at session.go:130: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey]">
<path fill="none" stroke="#8b4513" d="M691.5537,-440.8572C698.4896,-437.4716 705.2133,-433.5388 711.1658,-429 750.3256,-399.1404 740.7918,-373.1967 777.1658,-340 790.4322,-327.8924 806.7498,-317.0083 821.8508,-308.1801"/>
<polygon fill="#8b4513" stroke="#8b4513" points="823.604,-311.2096 830.5692,-303.2261 820.1457,-305.1235 823.604,-311.2096"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="edge44" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_edge44"><a xlink:title="at session.go:106: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="none" stroke="#8b4513" d="M915.1764,-474.4459C929.0393,-479.1824 944.1428,-484.5805 957.8714,-490 999.5661,-506.4594 1046.3554,-527.8347 1077.7484,-542.6127"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1076.4376,-545.8644 1086.9741,-546.9745 1079.4296,-539.536 1076.4376,-545.8644"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="edge30" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_edge30"><a xlink:title="at session.go:106: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="none" stroke="#8b4513" d="M915.174,-466.1077C930.65,-470.613 946.6946,-477.9737 957.8714,-490 993.5377,-528.3771 975.0575,-553.1995 987.8714,-604 1000.843,-655.4255 979.5072,-681.3932 1015.8714,-720 1025.168,-729.87 1037.6103,-736.523 1050.5065,-740.9993"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1049.8262,-744.4508 1060.4121,-744.0154 1051.8652,-737.7543 1049.8262,-744.4508"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector -->
<g id="node24" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector</title>
<g id="a_node24"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector | defined in router_address.go:292">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1168.6399,-829C1168.6399,-829 1059.3877,-829 1059.3877,-829 1053.3877,-829 1047.3877,-823 1047.3877,-817 1047.3877,-817 1047.3877,-805 1047.3877,-805 1047.3877,-799 1053.3877,-793 1059.3877,-793 1059.3877,-793 1168.6399,-793 1168.6399,-793 1174.6399,-793 1180.6399,-799 1180.6399,-805 1180.6399,-805 1180.6399,-817 1180.6399,-817 1180.6399,-823 1174.6399,-829 1168.6399,-829"/>
<text text-anchor="middle" x="1114.0138" y="-806.8" font-family="Verdana" font-size="14.00" fill="#000000">InitializationVector</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector -->
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector</title>
<g id="a_edge9"><a xlink:title="at session.go:111: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector]">
<path fill="none" stroke="#8b4513" d="M915.1209,-465.5973C930.7801,-470.0547 946.9549,-477.5159 957.8714,-490 1001.2763,-539.6378 971.6325,-732.104 1015.8714,-781 1022.0602,-787.8402 1029.7598,-793.1408 1038.1061,-797.2446"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1036.8072,-800.496 1047.3756,-801.2443 1039.5805,-794.0688 1036.8072,-800.496"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses -->
<g id="edge29" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses</title>
<g id="a_edge29"><a xlink:title="at session.go:105: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]">
<path fill="none" stroke="#8b4513" d="M915.0454,-453.6013C951.6212,-449.4466 1002.7234,-443.6417 1043.9798,-438.9553"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1044.4294,-442.4269 1053.9704,-437.8205 1043.6393,-435.4716 1044.4294,-442.4269"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge36" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge36"><a xlink:title="at session.go:114: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M915.1152,-465.0722C930.9669,-469.474 947.2675,-477.0343 957.8714,-490 1020.4475,-566.5138 951.3049,-856.1582 1015.8714,-931 1030.3271,-947.7563 1054.0384,-954.8272 1074.533,-957.6749"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1074.2617,-961.1661 1084.585,-958.7829 1075.0288,-954.2082 1074.2617,-961.1661"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral | defined in session.go:134&#10;at session.go:139: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV]&#10;at session.go:143: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey]&#10;at session.go:135: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M698.9658,-416C698.9658,-416 568.7668,-416 568.7668,-416 562.7668,-416 556.7668,-410 556.7668,-404 556.7668,-404 556.7668,-392 556.7668,-392 556.7668,-386 562.7668,-380 568.7668,-380 568.7668,-380 698.9658,-380 698.9658,-380 704.9658,-380 710.9658,-386 710.9658,-392 710.9658,-392 710.9658,-404 710.9658,-404 710.9658,-410 704.9658,-416 698.9658,-416"/>
<text text-anchor="middle" x="633.8663" y="-393.8" font-family="Verdana" font-size="14.00" fill="#000000">DeobfuscateEphemeral</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey -->
<g id="edge33" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey</title>
<g id="a_edge33"><a xlink:title="at session.go:135: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticKey]">
<path fill="none" stroke="#000000" d="M711.0204,-398C741.817,-398 776.7872,-398 805.8479,-398"/>
<polygon fill="#000000" stroke="#000000" points="805.864,-401.5001 815.864,-398 805.864,-394.5001 805.864,-401.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV -->
<g id="edge22" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV</title>
<g id="a_edge22"><a xlink:title="at session.go:139: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).peerStaticIV]">
<path fill="none" stroke="#000000" d="M703.0213,-416.0544C737.1678,-424.9691 777.8725,-435.5959 810.2476,-444.0482"/>
<polygon fill="#000000" stroke="#000000" points="809.4514,-447.4575 820.0112,-446.5972 811.2196,-440.6845 809.4514,-447.4575"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey -->
<g id="edge23" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).DeobfuscateEphemeral&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey</title>
<g id="a_edge23"><a xlink:title="at session.go:143: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey]">
<path fill="none" stroke="#8b4513" d="M668.3772,-379.8292C690.7211,-368.1899 720.5144,-352.9035 747.1658,-340 770.1307,-328.8814 795.8221,-317.0581 817.5519,-307.2343"/>
<polygon fill="#8b4513" stroke="#8b4513" points="819.2383,-310.3134 826.9168,-303.0132 816.3618,-303.9317 819.2383,-310.3134"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage | defined in outgoing_handshake.go:20&#10;at outgoing_handshake.go:32: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest]&#10;at outgoing_handshake.go:48: calling [github.com/flynn/noise.NewCipherSuite]&#10;at outgoing_handshake.go:55: calling [github.com/flynn/noise.NewHandshakeState]&#10;at outgoing_handshake.go:61: calling [(*github.com/flynn/noise.HandshakeState).WriteMessage]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M245.2359,-416C245.2359,-416 35.9213,-416 35.9213,-416 29.9213,-416 23.9213,-410 23.9213,-404 23.9213,-404 23.9213,-392 23.9213,-392 23.9213,-386 29.9213,-380 35.9213,-380 35.9213,-380 245.2359,-380 245.2359,-380 251.2359,-380 257.2359,-386 257.2359,-392 257.2359,-392 257.2359,-404 257.2359,-404 257.2359,-410 251.2359,-416 245.2359,-416"/>
<text text-anchor="middle" x="140.5786" y="-393.8" font-family="Verdana" font-size="14.00" fill="#000000">ComposeInitiatorHandshakeMessage</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest -->
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest</title>
<g id="a_edge15"><a xlink:title="at outgoing_handshake.go:32: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).CreateSessionRequest]">
<path fill="none" stroke="#000000" d="M219.2436,-416.0544C251.5658,-423.4727 289.0539,-432.0766 321.9493,-439.6264"/>
<polygon fill="#000000" stroke="#000000" points="321.4705,-443.1075 332,-441.9332 323.0364,-436.2848 321.4705,-443.1075"/>
</a>
</g>
</g>
<!-- github.com/flynn/noise.NewCipherSuite -->
<g id="node17" class="node">
<title>github.com/flynn/noise.NewCipherSuite</title>
<g id="a_node17"><a xlink:title="github.com/flynn/noise.NewCipherSuite | defined in cipher_suite.go:84">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M453.171,-242C453.171,-242 359.553,-242 359.553,-242 353.553,-242 347.553,-236 347.553,-230 347.553,-230 347.553,-218 347.553,-218 347.553,-212 353.553,-206 359.553,-206 359.553,-206 453.171,-206 453.171,-206 459.171,-206 465.171,-212 465.171,-218 465.171,-218 465.171,-230 465.171,-230 465.171,-236 459.171,-242 453.171,-242"/>
<text text-anchor="middle" x="406.362" y="-219.8" font-family="Verdana" font-size="14.00" fill="#000000">NewCipherSuite</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;github.com/flynn/noise.NewCipherSuite -->
<g id="edge17" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;github.com/flynn/noise.NewCipherSuite</title>
<g id="a_edge17"><a xlink:title="at outgoing_handshake.go:48: calling [github.com/flynn/noise.NewCipherSuite]">
<path fill="none" stroke="#8b4513" d="M251.1734,-379.8618C253.223,-378.6498 255.2207,-377.364 257.1572,-376 308.1142,-340.1072 280.7401,-295.5746 328.0541,-255 331.455,-252.0835 335.1636,-249.4211 339.0575,-246.9937"/>
<polygon fill="#8b4513" stroke="#8b4513" points="340.8384,-250.0076 347.8306,-242.0477 337.4007,-243.9099 340.8384,-250.0076"/>
</a>
</g>
</g>
<!-- github.com/flynn/noise.NewHandshakeState -->
<g id="node18" class="node">
<title>github.com/flynn/noise.NewHandshakeState</title>
<g id="a_node18"><a xlink:title="github.com/flynn/noise.NewHandshakeState | defined in state.go:317">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M464.4783,-303C464.4783,-303 348.2457,-303 348.2457,-303 342.2457,-303 336.2457,-297 336.2457,-291 336.2457,-291 336.2457,-279 336.2457,-279 336.2457,-273 342.2457,-267 348.2457,-267 348.2457,-267 464.4783,-267 464.4783,-267 470.4783,-267 476.4783,-273 476.4783,-279 476.4783,-279 476.4783,-291 476.4783,-291 476.4783,-297 470.4783,-303 464.4783,-303"/>
<text text-anchor="middle" x="406.362" y="-280.8" font-family="Verdana" font-size="14.00" fill="#000000">NewHandshakeState</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;github.com/flynn/noise.NewHandshakeState -->
<g id="edge47" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;github.com/flynn/noise.NewHandshakeState</title>
<g id="a_edge47"><a xlink:title="at outgoing_handshake.go:55: calling [github.com/flynn/noise.NewHandshakeState]">
<path fill="none" stroke="#8b4513" d="M245.9344,-379.9569C249.752,-378.7217 253.5046,-377.4045 257.1572,-376 280.2945,-367.1032 334.6823,-332.4899 371.001,-308.6135"/>
<polygon fill="#8b4513" stroke="#8b4513" points="372.9428,-311.5256 379.3621,-303.0969 369.0877,-305.6827 372.9428,-311.5256"/>
</a>
</g>
</g>
<!-- (*github.com/flynn/noise.HandshakeState).WriteMessage -->
<g id="node19" class="node">
<title>(*github.com/flynn/noise.HandshakeState).WriteMessage</title>
<g id="a_node19"><a xlink:title="(*github.com/flynn/noise.HandshakeState).WriteMessage | defined in state.go:391">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M446.7107,-181C446.7107,-181 366.0133,-181 366.0133,-181 360.0133,-181 354.0133,-175 354.0133,-169 354.0133,-169 354.0133,-157 354.0133,-157 354.0133,-151 360.0133,-145 366.0133,-145 366.0133,-145 446.7107,-145 446.7107,-145 452.7107,-145 458.7107,-151 458.7107,-157 458.7107,-157 458.7107,-169 458.7107,-169 458.7107,-175 452.7107,-181 446.7107,-181"/>
<text text-anchor="middle" x="406.362" y="-158.8" font-family="Verdana" font-size="14.00" fill="#000000">WriteMessage</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;(*github.com/flynn/noise.HandshakeState).WriteMessage -->
<g id="edge48" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Session).ComposeInitiatorHandshakeMessage&#45;&gt;(*github.com/flynn/noise.HandshakeState).WriteMessage</title>
<g id="a_edge48"><a xlink:title="at outgoing_handshake.go:61: calling [(*github.com/flynn/noise.HandshakeState).WriteMessage]">
<path fill="none" stroke="#8b4513" d="M252.025,-379.9561C253.7911,-378.7121 255.5044,-377.3948 257.1572,-376 326.3571,-317.6017 261.4703,-246.3643 328.0541,-185 332.8243,-180.6037 338.404,-177.0769 344.3492,-174.2489"/>
<polygon fill="#8b4513" stroke="#8b4513" points="345.9822,-177.3633 353.9285,-170.3557 343.3466,-170.8784 345.9822,-177.3633"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept | defined in transport.go:67&#10;at transport.go:81: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible]&#10;at transport.go:78: calling [github.com/samber/oops.Errorf]&#10;at transport.go:82: calling [github.com/samber/oops.Errorf]&#10;at transport.go:85: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session]&#10;at transport.go:68: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Accept]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M653.5083,-956C653.5083,-956 614.2243,-956 614.2243,-956 608.2243,-956 602.2243,-950 602.2243,-944 602.2243,-944 602.2243,-932 602.2243,-932 602.2243,-926 608.2243,-920 614.2243,-920 614.2243,-920 653.5083,-920 653.5083,-920 659.5083,-920 665.5083,-926 665.5083,-932 665.5083,-932 665.5083,-944 665.5083,-944 665.5083,-950 659.5083,-956 653.5083,-956"/>
<text text-anchor="middle" x="633.8663" y="-933.8" font-family="Verdana" font-size="14.00" fill="#000000">Accept</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session -->
<g id="edge24" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session</title>
<g id="a_edge24"><a xlink:title="at transport.go:85: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session]">
<path fill="none" stroke="#000000" d="M665.8882,-943.5016C681.71,-947.8382 699.7985,-955.511 711.1658,-969 760.3736,-1027.3926 695.5737,-1080.7028 747.1658,-1137 758.4179,-1149.2783 773.6323,-1157.5255 789.4539,-1163.0534"/>
<polygon fill="#000000" stroke="#000000" points="788.7645,-1166.5052 799.3536,-1166.1557 790.8578,-1159.8255 788.7645,-1166.5052"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible | defined in transport.go:37&#10;at transport.go:41: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]&#10;at transport.go:39: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]&#10;at transport.go:41: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M900.3474,-834C900.3474,-834 834.6898,-834 834.6898,-834 828.6898,-834 822.6898,-828 822.6898,-822 822.6898,-822 822.6898,-810 822.6898,-810 822.6898,-804 828.6898,-798 834.6898,-798 834.6898,-798 900.3474,-798 900.3474,-798 906.3474,-798 912.3474,-804 912.3474,-810 912.3474,-810 912.3474,-822 912.3474,-822 912.3474,-828 906.3474,-834 900.3474,-834"/>
<text text-anchor="middle" x="867.5186" y="-811.8" font-family="Verdana" font-size="14.00" fill="#000000">Compatible</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible</title>
<g id="a_edge2"><a xlink:title="at transport.go:81: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible]">
<path fill="none" stroke="#000000" d="M665.5746,-927.0127C679.7492,-921.7667 696.5258,-915.0905 711.1658,-908 753.7339,-887.3831 800.1644,-859.2952 831.2769,-839.5964"/>
<polygon fill="#000000" stroke="#000000" points="833.4711,-842.3485 840.0242,-834.0234 829.7098,-836.4449 833.4711,-842.3485"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Accept -->
<g id="node27" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Accept</title>
<g id="a_node27"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Accept | defined in transport.go:48">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1133.6558,-1142C1133.6558,-1142 1094.3718,-1142 1094.3718,-1142 1088.3718,-1142 1082.3718,-1136 1082.3718,-1130 1082.3718,-1130 1082.3718,-1118 1082.3718,-1118 1082.3718,-1112 1088.3718,-1106 1094.3718,-1106 1094.3718,-1106 1133.6558,-1106 1133.6558,-1106 1139.6558,-1106 1145.6558,-1112 1145.6558,-1118 1145.6558,-1118 1145.6558,-1130 1145.6558,-1130 1145.6558,-1136 1139.6558,-1142 1133.6558,-1142"/>
<text text-anchor="middle" x="1114.0138" y="-1119.8" font-family="Verdana" font-size="14.00" fill="#000000">Accept</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Accept -->
<g id="edge34" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Accept</title>
<g id="a_edge34"><a xlink:title="at transport.go:68: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Accept]">
<path fill="none" stroke="#8b4513" d="M665.8601,-943.1016C681.8757,-947.3356 700.1506,-955.0373 711.1658,-969 779.0602,-1055.0613 664.1896,-1141.3679 747.1658,-1213 787.6554,-1247.9541 942.5663,-1241.4367 987.8714,-1213 1012.1157,-1197.7825 994.229,-1173.7341 1015.8714,-1155 1031.5603,-1141.4193 1053.211,-1133.7807 1072.1861,-1129.4877"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1072.9993,-1132.8942 1082.1076,-1127.4822 1071.6123,-1126.033 1072.9993,-1132.8942"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Accept&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge16"><a xlink:title="at transport.go:78: calling [github.com/samber/oops.Errorf]&#10;at transport.go:82: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M665.6744,-943.6853C681.4377,-948.0722 699.5384,-955.7345 711.1658,-969 753.7976,-1017.6379 698.392,-1067.5239 747.1658,-1110 757.2718,-1118.8011 973.4913,-1136.2488 986.8714,-1137 1042.9486,-1140.1483 982.2435,-1058.9859 1015.8714,-1014 1030.6107,-994.2824 1054.6261,-980.6484 1075.2108,-971.8871"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1076.7051,-975.0588 1084.6823,-968.0864 1074.0981,-968.5624 1076.7051,-975.0588"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="edge27" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_edge27"><a xlink:title="at transport.go:41: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="none" stroke="#8b4513" d="M912.3456,-807.6731C927.9174,-803.1655 944.7492,-796.3192 957.8714,-786 1015.6891,-740.5326 974.3259,-691.6972 1015.8714,-631 1031.3921,-608.3246 1056.6366,-590.3 1077.6353,-578.0859"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1079.6172,-580.9876 1086.6335,-573.0489 1076.198,-574.8795 1079.6172,-580.9876"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_edge1"><a xlink:title="at transport.go:41: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="none" stroke="#8b4513" d="M912.4356,-804.6412C935.0843,-798.8602 962.9631,-791.6628 987.8714,-785 1008.3429,-779.524 1030.6361,-773.3938 1050.7081,-767.8125"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1051.6718,-771.1774 1060.3656,-765.122 1049.7931,-764.4342 1051.6718,-771.1774"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses -->
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Compatible&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses</title>
<g id="a_edge8"><a xlink:title="at transport.go:39: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]">
<path fill="none" stroke="#8b4513" d="M912.5102,-809.1988C928.4631,-804.8416 945.5048,-797.7 957.8714,-786 984.2505,-761.0428 978.7153,-745.1409 987.8714,-710 1011.3901,-619.7353 967.9808,-582.0458 1015.8714,-502 1027.8022,-482.0586 1047.7186,-466.1039 1066.5039,-454.4097"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1068.501,-457.2943 1075.3078,-449.1753 1064.9236,-451.2775 1068.501,-457.2943"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey | defined in transport.go:95&#10;at transport.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey]&#10;at transport.go:97: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]&#10;at transport.go:98: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]&#10;at transport.go:98: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at transport.go:106: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M675.2823,-834C675.2823,-834 592.4503,-834 592.4503,-834 586.4503,-834 580.4503,-828 580.4503,-822 580.4503,-822 580.4503,-810 580.4503,-810 580.4503,-804 586.4503,-798 592.4503,-798 592.4503,-798 675.2823,-798 675.2823,-798 681.2823,-798 687.2823,-804 687.2823,-810 687.2823,-810 687.2823,-822 687.2823,-822 687.2823,-828 681.2823,-834 675.2823,-834"/>
<text text-anchor="middle" x="633.8663" y="-811.8" font-family="Verdana" font-size="14.00" fill="#000000">localStaticKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="edge25" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_edge25"><a xlink:title="at transport.go:98: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="none" stroke="#8b4513" d="M687.3638,-829.4872C768.09,-848.4745 916.0641,-877.5421 957.8714,-847 975.0811,-834.4275 1012.6462,-635.8688 1015.8714,-631 1031.2159,-607.8356 1056.8639,-589.6696 1078.0925,-577.513"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1079.8068,-580.5646 1086.8769,-572.6738 1076.4292,-574.4333 1079.8068,-580.5646"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="edge19" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_edge19"><a xlink:title="at transport.go:98: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="none" stroke="#8b4513" d="M687.4699,-830.5146C696.2088,-834.7297 704.5508,-840.1218 711.1658,-847 744.1995,-881.348 708.2204,-920.5361 747.1658,-948 790.8798,-978.8266 947.0406,-982.5549 987.8714,-948 1045.3185,-899.3828 966.5033,-837.8031 1015.8714,-781 1024.9733,-770.5273 1037.5834,-763.5557 1050.736,-758.9248"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1051.8451,-762.2454 1060.3666,-755.9498 1049.779,-755.5573 1051.8451,-762.2454"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey -->
<g id="edge5" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey</title>
<g id="a_edge5"><a xlink:title="at transport.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).StaticKey]">
<path fill="none" stroke="#8b4513" d="M687.2594,-831.3244C695.9184,-835.4451 704.2873,-840.5957 711.1658,-847 737.9341,-871.9227 716.1588,-901.603 747.1658,-921 792.5137,-949.3683 947.5232,-956.1172 987.8714,-921 1055.9072,-861.7848 957.6532,-788.8909 1015.8714,-720 1027.8265,-705.8533 1046.1906,-698.0803 1063.8136,-693.8389"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1064.9629,-697.1757 1074.05,-691.7283 1063.5492,-690.3199 1064.9629,-697.1757"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses</title>
<g id="a_edge12"><a xlink:title="at transport.go:97: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]">
<path fill="none" stroke="#8b4513" d="M687.2424,-801.9985C696.0044,-797.9148 704.4131,-792.6835 711.1658,-786 741.7854,-755.6942 715.4269,-725.1314 747.1658,-696 819.2698,-629.8196 884.486,-696.7566 957.8714,-632 1005.3102,-590.1392 975.987,-551.1121 1015.8714,-502 1031.2769,-483.0302 1052.9182,-466.6529 1071.96,-454.4231"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1073.8608,-457.3627 1080.4943,-449.1015 1070.1569,-451.4228 1073.8608,-457.3627"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge39" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge39"><a xlink:title="at transport.go:106: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M687.1908,-830.2111C696.0625,-834.4648 704.523,-839.9486 711.1658,-847 745.8601,-883.8281 715.5062,-915.5327 747.1658,-955 756.8954,-967.129 762.5011,-967.8304 777.1658,-973 866.3182,-1004.428 894.6142,-1017.4582 987.8714,-1002 1018.1984,-996.973 1051.0236,-985.5816 1075.5851,-975.7861"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1076.9646,-979.0034 1084.9042,-971.9882 1074.3228,-972.5211 1076.9646,-979.0034"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV | defined in transport.go:109&#10;at transport.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]&#10;at transport.go:116: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector]&#10;at transport.go:111: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]&#10;at transport.go:111: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at transport.go:119: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M670.7276,-895C670.7276,-895 597.005,-895 597.005,-895 591.005,-895 585.005,-889 585.005,-883 585.005,-883 585.005,-871 585.005,-871 585.005,-865 591.005,-859 597.005,-859 597.005,-859 670.7276,-859 670.7276,-859 676.7276,-859 682.7276,-865 682.7276,-871 682.7276,-871 682.7276,-883 682.7276,-883 682.7276,-889 676.7276,-895 670.7276,-895"/>
<text text-anchor="middle" x="633.8663" y="-872.8" font-family="Verdana" font-size="14.00" fill="#000000">localStaticIV</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data -->
<g id="edge31" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_edge31"><a xlink:title="at transport.go:111: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="none" stroke="#8b4513" d="M683.0054,-892.0922C692.8604,-896.3554 702.7585,-901.6183 711.1658,-908 732.1242,-923.9089 723.5719,-943.3521 747.1658,-955 839.2776,-1000.4739 890.0395,-937.1446 957.8714,-860 1027.1998,-781.1535 958.5496,-718.9626 1015.8714,-631 1031.0414,-607.721 1056.695,-589.5587 1077.9699,-577.4324"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1079.6879,-580.4821 1086.7763,-572.6077 1076.3245,-574.343 1079.6879,-580.4821"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle -->
<g id="edge20" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_edge20"><a xlink:title="at transport.go:111: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="none" stroke="#8b4513" d="M682.9895,-889.0328C693.4228,-893.5328 703.5671,-899.6661 711.1658,-908 748.9689,-949.4605 702.1893,-995.4565 747.1658,-1029 790.0442,-1060.9787 947.9828,-1064.6384 987.8714,-1029 1029.2299,-992.0483 980.6266,-823.8224 1015.8714,-781 1024.7346,-770.2312 1037.3168,-763.1474 1050.5261,-758.5025"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1051.6762,-761.8108 1060.2112,-755.5335 1049.6245,-755.1182 1051.6762,-761.8108"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector</title>
<g id="a_edge13"><a xlink:title="at transport.go:116: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).InitializationVector]">
<path fill="none" stroke="#8b4513" d="M682.8977,-888.5854C693.4608,-893.1106 703.6855,-899.3674 711.1658,-908 755.4973,-959.1609 693.9406,-1014.1695 747.1658,-1056 789.222,-1089.0526 947.7612,-1091.3888 987.8714,-1056 1062.7745,-989.9137 948.695,-906.9271 1015.8714,-833 1021.8865,-826.3805 1029.4236,-821.5291 1037.6329,-818.0034"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1038.9295,-821.2564 1047.1418,-814.5625 1036.5475,-814.6742 1038.9295,-821.2564"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses</title>
<g id="a_edge6"><a xlink:title="at transport.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).RouterAddresses]">
<path fill="none" stroke="#8b4513" d="M683.0039,-863.9233C693.0791,-859.671 703.0672,-854.1397 711.1658,-847 757.4092,-806.2319 730.4181,-765.1888 777.1658,-725 841.8876,-669.3589 895.8972,-718.686 957.8714,-660 1012.1872,-608.5661 971.9255,-562.5344 1015.8714,-502 1030.0136,-482.5195 1051.1309,-466.2646 1070.1581,-454.2456"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1072.0044,-457.2192 1078.7206,-449.025 1068.3604,-451.2424 1072.0044,-457.2192"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge40" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).localStaticIV&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge40"><a xlink:title="at transport.go:119: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M682.9622,-888.5298C693.523,-893.057 703.7305,-899.3286 711.1658,-908 757.201,-961.6884 706.9123,-1004.8508 747.1658,-1063 756.2867,-1076.1757 762.1572,-1077.3846 777.1658,-1083 788.2191,-1087.1356 978.4301,-1117.0809 987.8714,-1110 1023.427,-1083.3333 988.2061,-1048.7842 1015.8714,-1014 1031.0902,-994.8651 1054.8908,-981.293 1075.2421,-972.4186"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1076.6972,-975.6044 1084.604,-968.5522 1074.0251,-969.1345 1076.6972,-975.6044"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).GetSession -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).GetSession</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).GetSession | defined in transport.go:52&#10;at transport.go:54: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session]&#10;at transport.go:60: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Handshake]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M665.3551,-1017C665.3551,-1017 602.3775,-1017 602.3775,-1017 596.3775,-1017 590.3775,-1011 590.3775,-1005 590.3775,-1005 590.3775,-993 590.3775,-993 590.3775,-987 596.3775,-981 602.3775,-981 602.3775,-981 665.3551,-981 665.3551,-981 671.3551,-981 677.3551,-987 677.3551,-993 677.3551,-993 677.3551,-1005 677.3551,-1005 677.3551,-1011 671.3551,-1017 665.3551,-1017"/>
<text text-anchor="middle" x="633.8663" y="-994.8" font-family="Verdana" font-size="14.00" fill="#000000">GetSession</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).GetSession&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session -->
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).GetSession&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session</title>
<g id="a_edge7"><a xlink:title="at transport.go:54: calling [github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NewNTCP2Session]">
<path fill="none" stroke="#000000" d="M640.2209,-1017.1173C653.6805,-1052.4509 688.7148,-1130.0668 747.1658,-1164 759.8359,-1171.3555 774.5558,-1175.4406 789.2627,-1177.4927"/>
<polygon fill="#000000" stroke="#000000" points="789.0955,-1180.9953 799.4169,-1178.6038 789.857,-1174.0368 789.0955,-1180.9953"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Handshake -->
<g id="node28" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Handshake</title>
<g id="a_node28"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Handshake | defined in handshake.go:80">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1145.209,-1203C1145.209,-1203 1082.8186,-1203 1082.8186,-1203 1076.8186,-1203 1070.8186,-1197 1070.8186,-1191 1070.8186,-1191 1070.8186,-1179 1070.8186,-1179 1070.8186,-1173 1076.8186,-1167 1082.8186,-1167 1082.8186,-1167 1145.209,-1167 1145.209,-1167 1151.209,-1167 1157.209,-1173 1157.209,-1179 1157.209,-1179 1157.209,-1191 1157.209,-1191 1157.209,-1197 1151.209,-1203 1145.209,-1203"/>
<text text-anchor="middle" x="1114.0138" y="-1180.8" font-family="Verdana" font-size="14.00" fill="#000000">Handshake</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).GetSession&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Handshake -->
<g id="edge41" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).GetSession&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Handshake</title>
<g id="a_edge41"><a xlink:title="at transport.go:60: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/noise.NoiseTransport).Handshake]">
<path fill="none" stroke="#8b4513" d="M636.6643,-1017.1137C645.7118,-1068.1102 679.4878,-1210.9447 777.1658,-1238 854.5652,-1259.4384 878.6304,-1251.082 957.8714,-1238 994.1897,-1232.0042 1033.4166,-1218.6603 1063.4676,-1206.8627"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1064.9,-1210.0595 1072.8867,-1203.0979 1062.3019,-1203.5595 1064.9,-1210.0595"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address -->
<g id="node15" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address</title>
<g id="a_node15"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address | defined in address.go:11&#10;at address.go:17: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.NewRouterAddress]&#10;at address.go:17: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Name]&#10;at address.go:19: calling [github.com/samber/oops.Errorf]&#10;at address.go:13: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M656.7374,-773C656.7374,-773 610.9952,-773 610.9952,-773 604.9952,-773 598.9952,-767 598.9952,-761 598.9952,-761 598.9952,-749 598.9952,-749 598.9952,-743 604.9952,-737 610.9952,-737 610.9952,-737 656.7374,-737 656.7374,-737 662.7374,-737 668.7374,-743 668.7374,-749 668.7374,-749 668.7374,-761 668.7374,-761 668.7374,-767 662.7374,-773 656.7374,-773"/>
<text text-anchor="middle" x="633.8663" y="-750.8" font-family="Verdana" font-size="14.00" fill="#000000">Address</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Name -->
<g id="node16" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Name</title>
<g id="a_node16"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Name | defined in transport.go:33">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M884.4466,-773C884.4466,-773 850.5906,-773 850.5906,-773 844.5906,-773 838.5906,-767 838.5906,-761 838.5906,-761 838.5906,-749 838.5906,-749 838.5906,-743 844.5906,-737 850.5906,-737 850.5906,-737 884.4466,-737 884.4466,-737 890.4466,-737 896.4466,-743 896.4466,-749 896.4466,-749 896.4466,-761 896.4466,-761 896.4466,-767 890.4466,-773 884.4466,-773"/>
<text text-anchor="middle" x="867.5186" y="-750.8" font-family="Verdana" font-size="14.00" fill="#000000">Name</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Name -->
<g id="edge32" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Name</title>
<g id="a_edge32"><a xlink:title="at address.go:17: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Name]">
<path fill="none" stroke="#000000" d="M668.8464,-755C711.629,-755 783.8405,-755 828.4173,-755"/>
<polygon fill="#000000" stroke="#000000" points="828.5761,-758.5001 838.5761,-755 828.5761,-751.5001 828.5761,-758.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.NewRouterAddress -->
<g id="node21" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.NewRouterAddress</title>
<g id="a_node21"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.NewRouterAddress | defined in router_address.go:359">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M1169.4156,-890C1169.4156,-890 1058.612,-890 1058.612,-890 1052.612,-890 1046.612,-884 1046.612,-878 1046.612,-878 1046.612,-866 1046.612,-866 1046.612,-860 1052.612,-854 1058.612,-854 1058.612,-854 1169.4156,-854 1169.4156,-854 1175.4156,-854 1181.4156,-860 1181.4156,-866 1181.4156,-866 1181.4156,-878 1181.4156,-878 1181.4156,-884 1175.4156,-890 1169.4156,-890"/>
<text text-anchor="middle" x="1114.0138" y="-867.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterAddress</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.NewRouterAddress -->
<g id="edge21" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.NewRouterAddress</title>
<g id="a_edge21"><a xlink:title="at address.go:17: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.NewRouterAddress]">
<path fill="none" stroke="#8b4513" d="M669.039,-766.0218C682.7312,-771.088 698.2107,-777.8104 711.1658,-786 744.9286,-807.3432 740.5341,-831.0759 777.1658,-847 822.0619,-866.5167 951.6784,-871.21 1036.4091,-872.1137"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1036.4793,-875.6144 1046.5108,-872.2059 1036.5432,-868.6147 1036.4793,-875.6144"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="node31" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_node31"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime | defined in router_timestamper.go:397">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M913.5428,-618C913.5428,-618 821.4944,-618 821.4944,-618 815.4944,-618 809.4944,-612 809.4944,-606 809.4944,-606 809.4944,-594 809.4944,-594 809.4944,-588 815.4944,-582 821.4944,-582 821.4944,-582 913.5428,-582 913.5428,-582 919.5428,-582 925.5428,-588 925.5428,-594 925.5428,-594 925.5428,-606 925.5428,-606 925.5428,-612 919.5428,-618 913.5428,-618"/>
<text text-anchor="middle" x="867.5186" y="-595.8" font-family="Verdana" font-size="14.00" fill="#000000">GetCurrentTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="edge46" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_edge46"><a xlink:title="at address.go:13: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="none" stroke="#8b4513" d="M661.6956,-736.8633C676.6981,-726.7648 695.329,-713.6986 711.1658,-701 728.0994,-687.422 729.6035,-680.7544 747.1658,-668 770.5658,-651.006 798.6034,-634.9437 821.7278,-622.7013"/>
<polygon fill="#8b4513" stroke="#8b4513" points="823.4139,-625.7693 830.6546,-618.0347 820.1709,-619.5658 823.4139,-625.7693"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge42" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport/ntcp.NTCP2Transport).Address&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge42"><a xlink:title="at address.go:19: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M668.93,-764.7685C682.912,-769.7183 698.6286,-776.6903 711.1658,-786 747.8979,-813.2761 738.4017,-840.6982 777.1658,-865 873.3599,-925.3056 1008.7528,-947.6652 1074.7531,-955.3376"/>
<polygon fill="#8b4513" stroke="#8b4513" points="1074.408,-958.8207 1084.7333,-956.4464 1075.181,-951.8635 1074.408,-958.8207"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -20,3 +20,35 @@ func ObfuscateEphemeralKey(message []byte, aesKey *crypto.AESSymmetricKey) ([]by
```
ObfuscateEphemeralKey encrypts the ephemeral public key in the message using
AES-256-CBC without padding
# obfs
--
import "github.com/go-i2p/go-i2p/lib/transport/obfs"
![obfs.svg](obfs)
## Usage
#### func DeobfuscateEphemeralKey
```go
func DeobfuscateEphemeralKey(message []byte, aesKey *crypto.AESSymmetricKey) ([]byte, error)
```
DeobfuscateEphemeralKey decrypts the ephemeral public key in the message using
AES-256-CBC without padding
#### func ObfuscateEphemeralKey
```go
func ObfuscateEphemeralKey(message []byte, aesKey *crypto.AESSymmetricKey) ([]byte, error)
```
ObfuscateEphemeralKey encrypts the ephemeral public key in the message using
AES-256-CBC without padding
obfs
github.com/go-i2p/go-i2p/lib/transport/obfs

131
lib/transport/obfs/obfs.svg Normal file
View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="485pt" height="356pt"
viewBox="0.00 0.00 485.00 356.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 356)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-356 485.0016,-356 485.0016,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-348 485.0016,-348 485.0016,-8 8,-8"/>
<text text-anchor="middle" x="246.5008" y="-327.8" font-family="Arial" font-size="18.00" fill="#000000">obfs</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="337.8634,-231 337.8634,-310 412.0584,-310 412.0584,-231 337.8634,-231"/>
<text text-anchor="middle" x="374.9609" y="-291.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/crypto</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/crypto" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/crypto">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="273.9202,-16 273.9202,-223 477.0016,-223 477.0016,-16 273.9202,-16"/>
<text text-anchor="middle" x="375.4609" y="-204.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">crypto</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/crypto" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M294.3045,-110C294.3045,-110 456.6173,-110 456.6173,-110 462.6173,-110 468.6173,-116 468.6173,-122 468.6173,-122 468.6173,-176 468.6173,-176 468.6173,-182 462.6173,-188 456.6173,-188 456.6173,-188 294.3045,-188 294.3045,-188 288.3045,-188 282.3045,-182 282.3045,-176 282.3045,-176 282.3045,-122 282.3045,-122 282.3045,-116 288.3045,-110 294.3045,-110"/>
<text text-anchor="middle" x="375.4609" y="-118.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*AESSymmetricEncrypter)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/crypto" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M293.9202,-24C293.9202,-24 457.0016,-24 457.0016,-24 463.0016,-24 469.0016,-30 469.0016,-36 469.0016,-36 469.0016,-90 469.0016,-90 469.0016,-96 463.0016,-102 457.0016,-102 457.0016,-102 293.9202,-102 293.9202,-102 287.9202,-102 281.9202,-96 281.9202,-90 281.9202,-90 281.9202,-36 281.9202,-36 281.9202,-30 287.9202,-24 293.9202,-24"/>
<text text-anchor="middle" x="375.4609" y="-32.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*AESSymmetricDecrypter)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey | defined in obfs.go:9&#10;at obfs.go:11: calling [github.com/samber/oops.Errorf]&#10;at obfs.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M175.166,-210C175.166,-210 34.7542,-210 34.7542,-210 28.7542,-210 22.7542,-204 22.7542,-198 22.7542,-198 22.7542,-186 22.7542,-186 22.7542,-180 28.7542,-174 34.7542,-174 34.7542,-174 175.166,-174 175.166,-174 181.166,-174 187.166,-180 187.166,-186 187.166,-186 187.166,-198 187.166,-198 187.166,-204 181.166,-210 175.166,-210"/>
<text text-anchor="middle" x="104.9601" y="-187.8" font-family="Verdana" font-size="14.00" fill="#000000">ObfuscateEphemeralKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding | defined in aes.go:144">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M428.7741,-180C428.7741,-180 321.1477,-180 321.1477,-180 315.1477,-180 309.1477,-174 309.1477,-168 309.1477,-168 309.1477,-156 309.1477,-156 309.1477,-150 315.1477,-144 321.1477,-144 321.1477,-144 428.7741,-144 428.7741,-144 434.7741,-144 440.7741,-150 440.7741,-156 440.7741,-156 440.7741,-168 440.7741,-168 440.7741,-174 434.7741,-180 428.7741,-180"/>
<text text-anchor="middle" x="374.9609" y="-157.8" font-family="Verdana" font-size="14.00" fill="#000000">EncryptNoPadding</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding</title>
<g id="a_edge3"><a xlink:title="at obfs.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding]">
<path fill="none" stroke="#8b4513" d="M187.4363,-182.836C223.006,-178.8838 264.339,-174.2913 299.1339,-170.4252"/>
<polygon fill="#8b4513" stroke="#8b4513" points="299.6827,-173.8859 309.235,-169.3029 298.9096,-166.9287 299.6827,-173.8859"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node5" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node5"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M392.1562,-275C392.1562,-275 357.7656,-275 357.7656,-275 351.7656,-275 345.7656,-269 345.7656,-263 345.7656,-263 345.7656,-251 345.7656,-251 345.7656,-245 351.7656,-239 357.7656,-239 357.7656,-239 392.1562,-239 392.1562,-239 398.1562,-239 404.1562,-245 404.1562,-251 404.1562,-251 404.1562,-263 404.1562,-263 404.1562,-269 398.1562,-275 392.1562,-275"/>
<text text-anchor="middle" x="374.9609" y="-252.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge2"><a xlink:title="at obfs.go:11: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M179.8118,-210.0198C230.4549,-222.2116 295.2931,-237.8208 335.9902,-247.6182"/>
<polygon fill="#8b4513" stroke="#8b4513" points="335.252,-251.0404 345.7935,-249.9782 336.8905,-244.2348 335.252,-251.0404"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey | defined in obfs.go:36&#10;at obfs.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding]&#10;at obfs.go:38: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M181.8803,-114C181.8803,-114 28.0399,-114 28.0399,-114 22.0399,-114 16.0399,-108 16.0399,-102 16.0399,-102 16.0399,-90 16.0399,-90 16.0399,-84 22.0399,-78 28.0399,-78 28.0399,-78 181.8803,-78 181.8803,-78 187.8803,-78 193.8803,-84 193.8803,-90 193.8803,-90 193.8803,-102 193.8803,-102 193.8803,-108 187.8803,-114 181.8803,-114"/>
<text text-anchor="middle" x="104.9601" y="-91.8" font-family="Verdana" font-size="14.00" fill="#000000">DeobfuscateEphemeralKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding -->
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding | defined in aes.go:162">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M429.0423,-94C429.0423,-94 320.8795,-94 320.8795,-94 314.8795,-94 308.8795,-88 308.8795,-82 308.8795,-82 308.8795,-70 308.8795,-70 308.8795,-64 314.8795,-58 320.8795,-58 320.8795,-58 429.0423,-58 429.0423,-58 435.0423,-58 441.0423,-64 441.0423,-70 441.0423,-70 441.0423,-82 441.0423,-82 441.0423,-88 435.0423,-94 429.0423,-94"/>
<text text-anchor="middle" x="374.9609" y="-71.8" font-family="Verdana" font-size="14.00" fill="#000000">DecryptNoPadding</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding</title>
<g id="a_edge1"><a xlink:title="at obfs.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding]">
<path fill="none" stroke="#8b4513" d="M194.1167,-89.3958C227.7974,-86.901 265.798,-84.0861 298.2411,-81.6829"/>
<polygon fill="#8b4513" stroke="#8b4513" points="298.8527,-85.1473 308.5668,-80.9181 298.3356,-78.1664 298.8527,-85.1473"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge4"><a xlink:title="at obfs.go:38: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M135.1467,-114.0001C184.6805,-143.5369 283.0997,-202.2237 337.1832,-234.4734"/>
<polygon fill="#8b4513" stroke="#8b4513" points="335.406,-237.4886 345.7875,-239.604 338.9911,-231.4763 335.406,-237.4886"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -5,3 +5,19 @@
i2p ssu transport implementation
## Usage
# ssu
--
import "github.com/go-i2p/go-i2p/lib/transport/ssu"
i2p ssu transport implementation
![ssu.svg](ssu)
## Usage
ssu
github.com/go-i2p/go-i2p/lib/transport/ssu

13
lib/transport/ssu/ssu.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="0pt" height="0pt"
viewBox="0.00 0.00 0.00 0.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 0)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,0 0,0 0,0 0,0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 584 B

424
lib/transport/transport.svg Normal file
View File

@ -0,0 +1,424 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="363pt" height="755pt"
viewBox="0.00 0.00 362.52 755.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 755)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-755 362.5176,-755 362.5176,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="0,-8 0,-747 354.5176,-747 354.5176,-8 0,-8"/>
<text text-anchor="middle" x="177.2588" y="-726.8" font-family="Arial" font-size="18.00" fill="#000000">transport</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="231.2623,-459 231.2623,-580 324.5835,-580 324.5835,-459 231.2623,-459"/>
<text text-anchor="middle" x="277.9229" y="-561.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M251.2623,-467C251.2623,-467 304.5835,-467 304.5835,-467 310.5835,-467 316.5835,-473 316.5835,-479 316.5835,-479 316.5835,-533 316.5835,-533 316.5835,-539 310.5835,-545 304.5835,-545 304.5835,-545 251.2623,-545 251.2623,-545 245.2623,-545 239.2623,-539 239.2623,-533 239.2623,-533 239.2623,-479 239.2623,-479 239.2623,-473 245.2623,-467 251.2623,-467"/>
<text text-anchor="middle" x="277.9229" y="-475.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="240.8254,-16 240.8254,-95 315.0204,-95 315.0204,-16 240.8254,-16"/>
<text text-anchor="middle" x="277.9229" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="209.3282,-103 209.3282,-451 346.5176,-451 346.5176,-103 209.3282,-103"/>
<text text-anchor="middle" x="277.9229" y="-432.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M241.1578,-155C241.1578,-155 314.688,-155 314.688,-155 320.688,-155 326.688,-161 326.688,-167 326.688,-167 326.688,-404 326.688,-404 326.688,-410 320.688,-416 314.688,-416 314.688,-416 241.1578,-416 241.1578,-416 235.1578,-416 229.1578,-410 229.1578,-404 229.1578,-404 229.1578,-167 229.1578,-167 229.1578,-161 235.1578,-155 241.1578,-155"/>
<text text-anchor="middle" x="277.9229" y="-163.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="224.8107,-588 224.8107,-709 332.0351,-709 332.0351,-588 224.8107,-588"/>
<text text-anchor="middle" x="278.4229" y="-690.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M244.8107,-596C244.8107,-596 312.0351,-596 312.0351,-596 318.0351,-596 324.0351,-602 324.0351,-608 324.0351,-608 324.0351,-662 324.0351,-662 324.0351,-668 318.0351,-674 312.0351,-674 312.0351,-674 244.8107,-674 244.8107,-674 238.8107,-674 232.8107,-668 232.8107,-662 232.8107,-662 232.8107,-608 232.8107,-608 232.8107,-602 238.8107,-596 244.8107,-596"/>
<text text-anchor="middle" x="278.4229" y="-604.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(RouterInfo)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M20,-224C20,-224 133.3282,-224 133.3282,-224 139.3282,-224 145.3282,-230 145.3282,-236 145.3282,-236 145.3282,-534 145.3282,-534 145.3282,-540 139.3282,-546 133.3282,-546 133.3282,-546 20,-546 20,-546 14,-546 8,-540 8,-534 8,-534 8,-236 8,-236 8,-230 14,-224 20,-224"/>
<text text-anchor="middle" x="76.6641" y="-232.5" font-family="Arial" font-size="15.00" fill="#222222">(*TransportMuxer)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux | defined in multi.go:18&#10;at multi.go:19: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:19: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:22: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M91.6641,-140C91.6641,-140 61.6641,-140 61.6641,-140 55.6641,-140 49.6641,-134 49.6641,-128 49.6641,-128 49.6641,-116 49.6641,-116 49.6641,-110 55.6641,-104 61.6641,-104 61.6641,-104 91.6641,-104 91.6641,-104 97.6641,-104 103.6641,-110 103.6641,-116 103.6641,-116 103.6641,-128 103.6641,-128 103.6641,-134 97.6641,-140 91.6641,-140"/>
<text text-anchor="middle" x="76.6641" y="-117.8" font-family="Verdana" font-size="14.00" fill="#000000">Mux</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.1974,-286C306.1974,-286 249.6484,-286 249.6484,-286 243.6484,-286 237.6484,-280 237.6484,-274 237.6484,-274 237.6484,-262 237.6484,-262 237.6484,-256 243.6484,-250 249.6484,-250 249.6484,-250 306.1974,-250 306.1974,-250 312.1974,-250 318.1974,-256 318.1974,-262 318.1974,-262 318.1974,-274 318.1974,-274 318.1974,-280 312.1974,-286 306.1974,-286"/>
<text text-anchor="middle" x="277.9229" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge1"><a xlink:title="at multi.go:19: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M103.881,-115.4535C127.0855,-111.5871 159.9812,-110.4029 181.3282,-128 220.2551,-160.0887 176.6793,-199.5418 209.3282,-238 214.5331,-244.1311 221.2292,-249.0509 228.3916,-252.9869"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.1103,-256.2553 237.6361,-257.4635 230.1612,-249.955 227.1103,-256.2553"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node15" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node15"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M296.7449,-537C296.7449,-537 259.1009,-537 259.1009,-537 253.1009,-537 247.1009,-531 247.1009,-525 247.1009,-525 247.1009,-513 247.1009,-513 247.1009,-507 253.1009,-501 259.1009,-501 259.1009,-501 296.7449,-501 296.7449,-501 302.7449,-501 308.7449,-507 308.7449,-513 308.7449,-513 308.7449,-525 308.7449,-525 308.7449,-531 302.7449,-537 296.7449,-537"/>
<text text-anchor="middle" x="277.9229" y="-514.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge19"><a xlink:title="at multi.go:19: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:22: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M92.5072,-140.3445C107.8253,-158.8705 130.7927,-188.8413 145.3282,-218 187.7219,-303.043 167.1631,-336.8435 209.3282,-422 222.0841,-447.7618 241.2825,-474.224 256.1275,-492.9879"/>
<polygon fill="#8b4513" stroke="#8b4513" points="253.403,-495.1851 262.3969,-500.7852 258.8583,-490.7987 253.403,-495.1851"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.init -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport.init | defined in .:0&#10;at errors.go:6: calling [github.com/samber/oops.Errorf]&#10;at multi.go:8: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M91.6641,-70C91.6641,-70 61.6641,-70 61.6641,-70 55.6641,-70 49.6641,-64 49.6641,-58 49.6641,-58 49.6641,-46 49.6641,-46 49.6641,-40 55.6641,-34 61.6641,-34 61.6641,-34 91.6641,-34 91.6641,-34 97.6641,-34 103.6641,-40 103.6641,-46 103.6641,-46 103.6641,-58 103.6641,-58 103.6641,-64 97.6641,-70 91.6641,-70"/>
<text text-anchor="middle" x="76.6641" y="-47.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M326.6124,-147C326.6124,-147 229.2334,-147 229.2334,-147 223.2334,-147 217.2334,-141 217.2334,-135 217.2334,-135 217.2334,-123 217.2334,-123 217.2334,-117 223.2334,-111 229.2334,-111 229.2334,-111 326.6124,-111 326.6124,-111 332.6124,-111 338.6124,-117 338.6124,-123 338.6124,-123 338.6124,-135 338.6124,-135 338.6124,-141 332.6124,-147 326.6124,-147"/>
<text text-anchor="middle" x="277.9229" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge18"><a xlink:title="at multi.go:8: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M103.8068,-62.3846C133.7773,-73.851 182.8699,-92.6335 221.2996,-107.3364"/>
<polygon fill="#8b4513" stroke="#8b4513" points="220.2316,-110.6751 230.822,-110.9796 222.7329,-104.1373 220.2316,-110.6751"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node14" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node14"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M295.1182,-60C295.1182,-60 260.7276,-60 260.7276,-60 254.7276,-60 248.7276,-54 248.7276,-48 248.7276,-48 248.7276,-36 248.7276,-36 248.7276,-30 254.7276,-24 260.7276,-24 260.7276,-24 295.1182,-24 295.1182,-24 301.1182,-24 307.1182,-30 307.1182,-36 307.1182,-36 307.1182,-48 307.1182,-48 307.1182,-54 301.1182,-60 295.1182,-60"/>
<text text-anchor="middle" x="277.9229" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge5"><a xlink:title="at errors.go:6: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M103.8068,-50.6514C138.4765,-48.9287 198.7348,-45.9346 238.475,-43.9601"/>
<polygon fill="#8b4513" stroke="#8b4513" points="238.7904,-47.4488 248.6043,-43.4568 238.4429,-40.4574 238.7904,-47.4488"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name -->
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name | defined in multi.go:59&#10;at multi.go:60: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M93.5921,-416C93.5921,-416 59.7361,-416 59.7361,-416 53.7361,-416 47.7361,-410 47.7361,-404 47.7361,-404 47.7361,-392 47.7361,-392 47.7361,-386 53.7361,-380 59.7361,-380 59.7361,-380 93.5921,-380 93.5921,-380 99.5921,-380 105.5921,-386 105.5921,-392 105.5921,-392 105.5921,-404 105.5921,-404 105.5921,-410 99.5921,-416 93.5921,-416"/>
<text text-anchor="middle" x="76.6641" y="-393.8" font-family="Verdana" font-size="14.00" fill="#000000">Name</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge10"><a xlink:title="at multi.go:67: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M105.445,-388.4741C118.2973,-383.4742 133.2362,-376.586 145.3282,-368 179.4326,-343.7839 175.3763,-323.4295 209.3282,-299 215.2354,-294.7495 221.8185,-290.8814 228.5039,-287.4303"/>
<polygon fill="#8b4513" stroke="#8b4513" points="230.1716,-290.5112 237.6298,-282.9862 227.1068,-284.2178 230.1716,-290.5112"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge9"><a xlink:title="at multi.go:60: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M105.602,-409.746C118.0672,-415.1402 132.659,-421.91 145.3282,-429 181.0377,-448.984 219.4831,-475.7134 245.733,-494.8405"/>
<polygon fill="#8b4513" stroke="#8b4513" points="243.6752,-497.6717 253.8083,-500.7654 247.8161,-492.0278 243.6752,-497.6717"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity | defined in multi.go:27&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at multi.go:28: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:36: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:28: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:38: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:36: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M107.6,-294C107.6,-294 45.7282,-294 45.7282,-294 39.7282,-294 33.7282,-288 33.7282,-282 33.7282,-282 33.7282,-270 33.7282,-270 33.7282,-264 39.7282,-258 45.7282,-258 45.7282,-258 107.6,-258 107.6,-258 113.6,-258 119.6,-264 119.6,-270 119.6,-270 119.6,-282 119.6,-282 119.6,-288 113.6,-294 107.6,-294"/>
<text text-anchor="middle" x="76.6641" y="-271.8" font-family="Verdana" font-size="14.00" fill="#000000">SetIdentity</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge20" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge20"><a xlink:title="at multi.go:28: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:36: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M119.56,-266.6231C128.5526,-263.4925 137.6326,-259.3776 145.3282,-254 166.0971,-239.487 157.5674,-220.1319 180.3282,-209 196.7024,-200.9917 194.3631,-227.5937 209.3282,-238 215.0641,-241.9886 221.4153,-245.6248 227.8705,-248.8808"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.8081,-252.2507 237.3431,-253.3758 229.8092,-245.9266 226.8081,-252.2507"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.4544,-225C306.4544,-225 249.3914,-225 249.3914,-225 243.3914,-225 237.3914,-219 237.3914,-213 237.3914,-213 237.3914,-201 237.3914,-201 237.3914,-195 243.3914,-189 249.3914,-189 249.3914,-189 306.4544,-189 306.4544,-189 312.4544,-189 318.4544,-195 318.4544,-201 318.4544,-201 318.4544,-213 318.4544,-213 318.4544,-219 312.4544,-225 306.4544,-225"/>
<text text-anchor="middle" x="277.9229" y="-202.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge2"><a xlink:title="at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M119.4844,-267.1397C128.5796,-263.9737 137.7215,-259.7136 145.3282,-254 167.6031,-237.2689 155.737,-215.0909 180.3282,-202 194.4559,-194.4792 211.4241,-193.1802 227.2209,-194.5388"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.0412,-198.0427 237.3908,-195.7767 227.887,-191.094 227.0412,-198.0427"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M292.9229,-347C292.9229,-347 262.9229,-347 262.9229,-347 256.9229,-347 250.9229,-341 250.9229,-335 250.9229,-335 250.9229,-323 250.9229,-323 250.9229,-317 256.9229,-311 262.9229,-311 262.9229,-311 292.9229,-311 292.9229,-311 298.9229,-311 304.9229,-317 304.9229,-323 304.9229,-323 304.9229,-335 304.9229,-335 304.9229,-341 298.9229,-347 292.9229,-347"/>
<text text-anchor="middle" x="277.9229" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge11"><a xlink:title="at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M119.5479,-263.4645C128.1782,-260.606 137.1166,-257.3998 145.3282,-254 161.8562,-247.157 166.3288,-226.2523 181.3282,-236 207.0203,-252.6966 187.5976,-277.398 209.3282,-299 218.0977,-307.7176 229.8221,-314.0989 241.0943,-318.6765"/>
<polygon fill="#8b4513" stroke="#8b4513" points="240.2046,-322.0785 250.7981,-322.2483 242.6226,-315.5094 240.2046,-322.0785"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge21" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge21"><a xlink:title="at multi.go:28: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:38: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:36: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M119.5559,-290.2748C128.7492,-294.6623 137.9149,-300.183 145.3282,-307 188.3844,-346.5929 178.1745,-372.4937 209.3282,-422 224.7608,-446.524 243.9126,-473.3432 258.0542,-492.5532"/>
<polygon fill="#8b4513" stroke="#8b4513" points="255.4036,-494.8551 264.1677,-500.8084 261.029,-490.6891 255.4036,-494.8551"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close | defined in multi.go:43&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at multi.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M92.5506,-355C92.5506,-355 60.7776,-355 60.7776,-355 54.7776,-355 48.7776,-349 48.7776,-343 48.7776,-343 48.7776,-331 48.7776,-331 48.7776,-325 54.7776,-319 60.7776,-319 60.7776,-319 92.5506,-319 92.5506,-319 98.5506,-319 104.5506,-325 104.5506,-331 104.5506,-331 104.5506,-343 104.5506,-343 104.5506,-349 98.5506,-355 92.5506,-355"/>
<text text-anchor="middle" x="76.6641" y="-332.8" font-family="Verdana" font-size="14.00" fill="#000000">Close</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge16"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M104.6483,-327.4058C136.4112,-316.5162 188.8505,-298.5378 227.7355,-285.2063"/>
<polygon fill="#8b4513" stroke="#8b4513" points="228.9843,-288.4783 237.3087,-281.9243 226.7141,-281.8566 228.9843,-288.4783"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge13"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M104.7705,-327.7355C117.7723,-322.7154 133.0241,-315.7366 145.3282,-307 179.4326,-282.7839 175.3763,-262.4295 209.3282,-238 215.1625,-233.802 221.6561,-229.9769 228.2563,-226.5583"/>
<polygon fill="#8b4513" stroke="#8b4513" points="229.824,-229.6879 237.2709,-222.1517 226.7497,-223.3991 229.824,-229.6879"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M293.5128,-408C293.5128,-408 262.333,-408 262.333,-408 256.333,-408 250.333,-402 250.333,-396 250.333,-396 250.333,-384 250.333,-384 250.333,-378 256.333,-372 262.333,-372 262.333,-372 293.5128,-372 293.5128,-372 299.5128,-372 305.5128,-378 305.5128,-384 305.5128,-384 305.5128,-396 305.5128,-396 305.5128,-402 299.5128,-408 293.5128,-408"/>
<text text-anchor="middle" x="277.9229" y="-385.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge6"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M104.818,-335.4984C126.2431,-335.1584 156.2211,-336.4266 181.3282,-344 195.0504,-348.1392 196.5217,-353.5636 209.3282,-360 219.4647,-365.0945 230.6629,-370.2024 241.0205,-374.7224"/>
<polygon fill="#8b4513" stroke="#8b4513" points="239.6726,-377.9526 250.2417,-378.6908 242.4398,-371.5227 239.6726,-377.9526"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge12"><a xlink:title="at multi.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M104.8681,-346.5751C117.8913,-351.7629 133.1328,-358.9741 145.3282,-368 193.5179,-403.6658 236.7582,-459.4892 259.9797,-492.3372"/>
<polygon fill="#8b4513" stroke="#8b4513" points="257.3973,-494.7533 265.986,-500.957 263.1405,-490.7514 257.3973,-494.7533"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession | defined in multi.go:74&#10;at multi.go:75: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]&#10;at multi.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:79: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:89: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:93: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at multi.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M108.1529,-477C108.1529,-477 45.1753,-477 45.1753,-477 39.1753,-477 33.1753,-471 33.1753,-465 33.1753,-465 33.1753,-453 33.1753,-453 33.1753,-447 39.1753,-441 45.1753,-441 45.1753,-441 108.1529,-441 108.1529,-441 114.1529,-441 120.1529,-447 120.1529,-453 120.1529,-453 120.1529,-465 120.1529,-465 120.1529,-471 114.1529,-477 108.1529,-477"/>
<text text-anchor="middle" x="76.6641" y="-454.8" font-family="Verdana" font-size="14.00" fill="#000000">GetSession</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="node8" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_node8"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String | defined in router_info.go:155">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M295.1477,-666C295.1477,-666 260.6981,-666 260.6981,-666 254.6981,-666 248.6981,-660 248.6981,-654 248.6981,-654 248.6981,-642 248.6981,-642 248.6981,-636 254.6981,-630 260.6981,-630 260.6981,-630 295.1477,-630 295.1477,-630 301.1477,-630 307.1477,-636 307.1477,-642 307.1477,-642 307.1477,-654 307.1477,-654 307.1477,-660 301.1477,-666 295.1477,-666"/>
<text text-anchor="middle" x="277.9229" y="-643.8" font-family="Verdana" font-size="14.00" fill="#000000">String</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_edge3"><a xlink:title="at multi.go:75: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]">
<path fill="none" stroke="#8b4513" d="M120.4557,-475.2096C129.1064,-479.3732 137.8219,-484.3133 145.3282,-490 158.6746,-500.1111 223.2936,-579.7826 257.1428,-621.9772"/>
<polygon fill="#8b4513" stroke="#8b4513" points="254.4941,-624.2688 263.4781,-629.8847 259.957,-619.892 254.4941,-624.2688"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge4" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge4"><a xlink:title="at multi.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:79: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:89: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M120.2855,-461.3133C141.3807,-460.0459 165.4978,-454.6951 181.3282,-439 226.3895,-394.3239 169.8311,-348.6633 209.3282,-299 214.3614,-292.6713 220.9687,-287.5909 228.0953,-283.5251"/>
<polygon fill="#8b4513" stroke="#8b4513" points="229.9496,-286.5108 237.3205,-278.9002 226.8124,-280.2531 229.9496,-286.5108"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge8"><a xlink:title="at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M120.154,-446.5151C129.4277,-442.1948 138.478,-436.4857 145.3282,-429 205.7684,-362.9531 149.3034,-304.4246 209.3282,-238 214.6264,-232.1369 221.2488,-227.314 228.2742,-223.367"/>
<polygon fill="#8b4513" stroke="#8b4513" points="229.9543,-226.4399 237.3193,-218.8236 226.8122,-220.1847 229.9543,-226.4399"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge7"><a xlink:title="at multi.go:93: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M120.2741,-474.3401C140.7352,-478.6493 164.3027,-479.1122 181.3282,-466 219.9333,-436.2684 177.8519,-397.1963 209.3282,-360 217.5722,-350.2578 229.5084,-343.4373 241.1202,-338.727"/>
<polygon fill="#8b4513" stroke="#8b4513" points="242.5022,-341.9488 250.7096,-335.2488 240.1154,-335.3683 242.5022,-341.9488"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge14"><a xlink:title="at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M114.1568,-477.0204C138.9891,-487.8398 169.1495,-498.5263 181.3282,-493 198.5374,-485.191 196.5367,-474.9109 209.3282,-461 223.39,-445.7076 239.5137,-428.9794 252.5942,-415.6034"/>
<polygon fill="#8b4513" stroke="#8b4513" points="255.4005,-417.7408 259.9056,-408.1514 250.4039,-412.8384 255.4005,-417.7408"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge22" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge22"><a xlink:title="at multi.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M120.4985,-476.5343C128.9673,-480.5437 137.6021,-485.0875 145.3282,-490 162.6172,-500.9929 161.1129,-512.8918 180.3282,-520 198.1296,-526.5852 219.0381,-527.2161 236.9263,-525.8426"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.4597,-529.3068 247.0632,-524.8322 236.7654,-522.3414 237.4597,-529.3068"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible | defined in multi.go:100&#10;at multi.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]&#10;at multi.go:101: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:109: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:104: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M109.4929,-538C109.4929,-538 43.8353,-538 43.8353,-538 37.8353,-538 31.8353,-532 31.8353,-526 31.8353,-526 31.8353,-514 31.8353,-514 31.8353,-508 37.8353,-502 43.8353,-502 43.8353,-502 109.4929,-502 109.4929,-502 115.4929,-502 121.4929,-508 121.4929,-514 121.4929,-514 121.4929,-526 121.4929,-526 121.4929,-532 115.4929,-538 109.4929,-538"/>
<text text-anchor="middle" x="76.6641" y="-515.8" font-family="Verdana" font-size="14.00" fill="#000000">Compatible</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_edge15"><a xlink:title="at multi.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]">
<path fill="none" stroke="#8b4513" d="M94.3896,-538.1322C114.009,-557.425 147.2493,-587.882 180.3282,-608 198.6294,-619.1304 220.5827,-628.4408 239.0293,-635.2704"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.9993,-638.6193 248.5938,-638.7085 240.3673,-632.032 237.9993,-638.6193"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge23" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge23"><a xlink:title="at multi.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M121.6007,-504.0419C129.8884,-500.0999 138.1742,-495.4215 145.3282,-490 165.4659,-474.7391 170.6352,-468.8928 181.3282,-446 209.4744,-385.7414 168.1696,-351.2425 209.3282,-299 214.3892,-292.5761 221.0747,-287.4404 228.2881,-283.347"/>
<polygon fill="#8b4513" stroke="#8b4513" points="230.2313,-286.2895 237.6248,-278.701 227.1127,-280.0226 230.2313,-286.2895"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge17" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge17"><a xlink:title="at multi.go:101: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:109: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:104: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M86.8626,-538.1611C104.1375,-566.2971 141.2107,-615.7318 181.3282,-601 211.6368,-589.8702 238.9441,-564.5471 256.7283,-544.9649"/>
<polygon fill="#8b4513" stroke="#8b4513" points="259.5393,-547.0686 263.5198,-537.2499 254.2851,-542.4433 259.5393,-547.0686"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -257,3 +257,271 @@ a pool of tunnels which we have created
```go
type TunnelID uint32
```
# tunnel
--
import "github.com/go-i2p/go-i2p/lib/tunnel"
i2p garlic tunnel implementation
![tunnel.svg](tunnel)
## Usage
```go
const (
DT_LOCAL = iota
DT_TUNNEL
DT_ROUTER
DT_UNUSED
)
```
```go
const (
FIRST_FRAGMENT = iota
FOLLOW_ON_FRAGMENT
)
```
```go
const (
FLAG_SIZE = 1
TUNNEL_ID_SIZE = 4
HASH_SIZE = 32
DELAY_SIZE = 1
MESSAGE_ID_SIZE = 4
EXTENDED_OPTIONS_MIN_SIZE = 2
SIZE_FIELD_SIZE = 2
)
```
#### type DecryptedTunnelMessage
```go
type DecryptedTunnelMessage [1028]byte
```
#### func (DecryptedTunnelMessage) Checksum
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) Checksum() crypto.TunnelIV
```
#### func (DecryptedTunnelMessage) DeliveryInstructionsWithFragments
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) DeliveryInstructionsWithFragments() []DeliveryInstructionsWithFragment
```
Returns a slice of DeliveryInstructionWithFragment structures, which all of the
Delivery Instructions in the tunnel message and their corresponding
MessageFragment structures.
#### func (DecryptedTunnelMessage) ID
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) ID() TunnelID
```
#### func (DecryptedTunnelMessage) IV
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) IV() crypto.TunnelIV
```
#### type DelayFactor
```go
type DelayFactor byte
```
#### type DeliveryInstructions
```go
type DeliveryInstructions []byte
```
#### func (DeliveryInstructions) Delay
```go
func (delivery_instructions DeliveryInstructions) Delay() (delay_factor DelayFactor, err error)
```
Return the DelayFactor if present and any errors encountered parsing the
DeliveryInstructions.
#### func (DeliveryInstructions) DeliveryType
```go
func (delivery_instructions DeliveryInstructions) DeliveryType() (byte, error)
```
Return the delivery type for these DeliveryInstructions, can be of type
DT_LOCAL, DT_TUNNEL, DT_ROUTER, or DT_UNUSED.
#### func (DeliveryInstructions) ExtendedOptions
```go
func (delivery_instructions DeliveryInstructions) ExtendedOptions() (data []byte, err error)
```
Return the Extended Options data if present, or an error if not present.
Extended Options in unimplemented in the Java router and the presence of
extended options will generate a warning.
#### func (DeliveryInstructions) FragmentNumber
```go
func (delivery_instructions DeliveryInstructions) FragmentNumber() (int, error)
```
Read the integer stored in the 6-1 bits of a FOLLOW_ON_FRAGMENT's flag,
indicating the fragment number.
#### func (DeliveryInstructions) FragmentSize
```go
func (delivery_instructions DeliveryInstructions) FragmentSize() (frag_size uint16, err error)
```
Return the size of the associated I2NP fragment and an error if the data is
unavailable.
#### func (DeliveryInstructions) Fragmented
```go
func (delivery_instructions DeliveryInstructions) Fragmented() (bool, error)
```
Returns true if the Delivery Instructions are fragmented or false if the
following data contains the entire message
#### func (DeliveryInstructions) HasDelay
```go
func (delivery_instructions DeliveryInstructions) HasDelay() (bool, error)
```
Check if the delay bit is set. This feature in unimplemented in the Java router.
#### func (DeliveryInstructions) HasExtendedOptions
```go
func (delivery_instructions DeliveryInstructions) HasExtendedOptions() (bool, error)
```
Check if the extended options bit is set. This feature in unimplemented in the
Java router.
#### func (DeliveryInstructions) HasHash
```go
func (delivery_instructions DeliveryInstructions) HasHash() (bool, error)
```
#### func (DeliveryInstructions) HasTunnelID
```go
func (delivery_instructions DeliveryInstructions) HasTunnelID() (bool, error)
```
Check if the DeliveryInstructions is of type DT_TUNNEL.
#### func (DeliveryInstructions) Hash
```go
func (delivery_instructions DeliveryInstructions) Hash() (hash common.Hash, err error)
```
Return the hash for these DeliveryInstructions, which varies by hash type.
If the type is DT_TUNNEL, hash is the SHA256 of the gateway router, if
the type is DT_ROUTER it is the SHA256 of the router.
#### func (DeliveryInstructions) LastFollowOnFragment
```go
func (delivery_instructions DeliveryInstructions) LastFollowOnFragment() (bool, error)
```
Read the value of the 0 bit of a FOLLOW_ON_FRAGMENT, which is set to 1 to
indicate the last fragment.
#### func (DeliveryInstructions) MessageID
```go
func (delivery_instructions DeliveryInstructions) MessageID() (msgid uint32, err error)
```
Return the I2NP Message ID or 0 and an error if the data is not available for
this DeliveryInstructions.
#### func (DeliveryInstructions) TunnelID
```go
func (delivery_instructions DeliveryInstructions) TunnelID() (tunnel_id uint32, err error)
```
Return the tunnel ID in this DeliveryInstructions or 0 and an error if the
DeliveryInstructions are not of type DT_TUNNEL.
#### func (DeliveryInstructions) Type
```go
func (delivery_instructions DeliveryInstructions) Type() (int, error)
```
Return if the DeliveryInstructions are of type FIRST_FRAGMENT or
FOLLOW_ON_FRAGMENT.
#### type DeliveryInstructionsWithFragment
```go
type DeliveryInstructionsWithFragment struct {
DeliveryInstructions DeliveryInstructions
MessageFragment []byte
}
```
#### type EncryptedTunnelMessage
```go
type EncryptedTunnelMessage crypto.TunnelData
```
#### func (EncryptedTunnelMessage) Data
```go
func (tm EncryptedTunnelMessage) Data() crypto.TunnelIV
```
#### func (EncryptedTunnelMessage) ID
```go
func (tm EncryptedTunnelMessage) ID() (tid TunnelID)
```
#### func (EncryptedTunnelMessage) IV
```go
func (tm EncryptedTunnelMessage) IV() crypto.TunnelIV
```
#### type Participant
```go
type Participant struct {
}
```
#### type Pool
```go
type Pool struct{}
```
a pool of tunnels which we have created
#### type TunnelID
```go
type TunnelID uint32
```
tunnel
github.com/go-i2p/go-i2p/lib/tunnel

1890
lib/tunnel/tunnel.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 221 KiB

View File

@ -37,3 +37,52 @@ Panicf allows passing formated string to panic()
```go
func RegisterCloser(c io.Closer)
```
# util
--
import "github.com/go-i2p/go-i2p/lib/util"
![util.svg](util)
## Usage
#### func CheckFileAge
```go
func CheckFileAge(fpath string, maxAge int) bool
```
Check if a file is more than maxAge minutes old returns false if
#### func CheckFileExists
```go
func CheckFileExists(fpath string) bool
```
Check if a file exists and is readable etc returns false if not
#### func CloseAll
```go
func CloseAll()
```
#### func Panicf
```go
func Panicf(format string, args ...interface{})
```
Panicf allows passing formated string to panic()
#### func RegisterCloser
```go
func RegisterCloser(c io.Closer)
```
util
github.com/go-i2p/go-i2p/lib/util

View File

@ -28,3 +28,43 @@ func RegisterReloadHandler(f Handler)
```go
type Handler func()
```
# signals
--
import "github.com/go-i2p/go-i2p/lib/util/signals"
![signals.svg](signals)
## Usage
#### func Handle
```go
func Handle()
```
#### func RegisterInterruptHandler
```go
func RegisterInterruptHandler(f Handler)
```
#### func RegisterReloadHandler
```go
func RegisterReloadHandler(f Handler)
```
#### type Handler
```go
type Handler func()
```
signals
github.com/go-i2p/go-i2p/lib/util/signals

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="293pt" height="220pt"
viewBox="0.00 0.00 292.94 220.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 220)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-220 292.9384,-220 292.9384,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-212 284.9384,-212 284.9384,-8 8,-8"/>
<text text-anchor="middle" x="146.4692" y="-191.8" font-family="Arial" font-size="18.00" fill="#000000">signals</text>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.Handle -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.Handle</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.Handle | defined in unix.go:15&#10;at unix.go:23: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleReload]&#10;at unix.go:25: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleInterrupted]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M68.641,-143C68.641,-143 27.7854,-143 27.7854,-143 21.7854,-143 15.7854,-137 15.7854,-131 15.7854,-131 15.7854,-119 15.7854,-119 15.7854,-113 21.7854,-107 27.7854,-107 27.7854,-107 68.641,-107 68.641,-107 74.641,-107 80.641,-113 80.641,-119 80.641,-119 80.641,-131 80.641,-131 80.641,-137 74.641,-143 68.641,-143"/>
<text text-anchor="middle" x="48.2132" y="-120.8" font-family="Verdana" font-size="14.00" fill="#000000">Handle</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleReload -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleReload</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleReload | defined in signals.go:17">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M253.6586,-113C253.6586,-113 176.7062,-113 176.7062,-113 170.7062,-113 164.7062,-107 164.7062,-101 164.7062,-101 164.7062,-89 164.7062,-89 164.7062,-83 170.7062,-77 176.7062,-77 176.7062,-77 253.6586,-77 253.6586,-77 259.6586,-77 265.6586,-83 265.6586,-89 265.6586,-89 265.6586,-101 265.6586,-101 265.6586,-107 259.6586,-113 253.6586,-113"/>
<text text-anchor="middle" x="215.1824" y="-90.8" font-family="Verdana" font-size="14.00" fill="#000000">handleReload</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.Handle&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleReload -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.Handle&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleReload</title>
<g id="a_edge1"><a xlink:title="at unix.go:23: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleReload]">
<path fill="none" stroke="#000000" d="M80.8029,-119.1445C101.7394,-115.3827 129.5814,-110.3803 154.4915,-105.9046"/>
<polygon fill="#000000" stroke="#000000" points="155.3715,-109.3026 164.5949,-104.0892 154.1336,-102.4129 155.3715,-109.3026"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleInterrupted -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleInterrupted</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleInterrupted | defined in signals.go:29">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M264.6954,-174C264.6954,-174 165.6694,-174 165.6694,-174 159.6694,-174 153.6694,-168 153.6694,-162 153.6694,-162 153.6694,-150 153.6694,-150 153.6694,-144 159.6694,-138 165.6694,-138 165.6694,-138 264.6954,-138 264.6954,-138 270.6954,-138 276.6954,-144 276.6954,-150 276.6954,-150 276.6954,-162 276.6954,-162 276.6954,-168 270.6954,-174 264.6954,-174"/>
<text text-anchor="middle" x="215.1824" y="-151.8" font-family="Verdana" font-size="14.00" fill="#000000">handleInterrupted</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.Handle&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleInterrupted -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.Handle&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleInterrupted</title>
<g id="a_edge2"><a xlink:title="at unix.go:25: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.handleInterrupted]">
<path fill="none" stroke="#000000" d="M80.8029,-131.0507C98.7443,-134.3818 121.7569,-138.6543 143.6498,-142.719"/>
<polygon fill="#000000" stroke="#000000" points="143.1368,-146.1835 153.6077,-144.5679 144.4146,-139.3011 143.1368,-146.1835"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init | defined in .:0&#10;at .:0: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init#1]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M63.2132,-52C63.2132,-52 33.2132,-52 33.2132,-52 27.2132,-52 21.2132,-46 21.2132,-40 21.2132,-40 21.2132,-28 21.2132,-28 21.2132,-22 27.2132,-16 33.2132,-16 33.2132,-16 63.2132,-16 63.2132,-16 69.2132,-16 75.2132,-22 75.2132,-28 75.2132,-28 75.2132,-40 75.2132,-40 75.2132,-46 69.2132,-52 63.2132,-52"/>
<text text-anchor="middle" x="48.2132" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init#1 -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init#1</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init#1 | defined in unix.go:11">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M231.3551,-52C231.3551,-52 199.0097,-52 199.0097,-52 193.0097,-52 187.0097,-46 187.0097,-40 187.0097,-40 187.0097,-28 187.0097,-28 187.0097,-22 193.0097,-16 199.0097,-16 199.0097,-16 231.3551,-16 231.3551,-16 237.3551,-16 243.3551,-22 243.3551,-28 243.3551,-28 243.3551,-40 243.3551,-40 243.3551,-46 237.3551,-52 231.3551,-52"/>
<text text-anchor="middle" x="215.1824" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">init#1</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init#1 -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init#1</title>
<g id="a_edge3"><a xlink:title="at .:0: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/signals.init#1]">
<path fill="none" stroke="#000000" d="M75.4113,-34C102.9748,-34 145.8607,-34 176.8609,-34"/>
<polygon fill="#000000" stroke="#000000" points="176.8791,-37.5001 186.879,-34 176.879,-30.5001 176.8791,-37.5001"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -1,70 +1,57 @@
# sntp
--
import "github.com/go-i2p/go-i2p/lib/util/sntp"
import "github.com/go-i2p/go-i2p/lib/util/time/sntp"
## Usage
#### type DefaultNTPClient
```go
import "github.com/go-i2p/go-i2p/lib/util/sntp"
type DefaultNTPClient struct{}
```
## Types
### type RouterTimestamper
#### func (*DefaultNTPClient) QueryWithOptions
```go
type RouterTimestamper struct {
servers []string
priorityServers [][]string
listeners []UpdateListener
queryFrequency time.Duration
concurringServers int
consecutiveFails int
disabled bool
initialized bool
wellSynced bool
isRunning bool
mutex sync.Mutex
zones *Zones
stopChan chan struct{}
waitGroup sync.WaitGroup
ntpClient NTPClient
func (c *DefaultNTPClient) QueryWithOptions(host string, options ntp.QueryOptions) (*ntp.Response, error)
```
#### type NTPClient
```go
type NTPClient interface {
QueryWithOptions(host string, options ntp.QueryOptions) (*ntp.Response, error)
}
```
RouterTimestamper is responsible for querying NTP servers and managing time synchronization.
#### func NewRouterTimestamper
#### type RouterTimestamper
```go
type RouterTimestamper struct {
}
```
#### func NewRouterTimestamper
```go
func NewRouterTimestamper(client NTPClient) *RouterTimestamper
```
NewRouterTimestamper creates a new RouterTimestamper instance.
#### func (*RouterTimestamper) Start
```go
func (rt *RouterTimestamper) Start()
```
Start begins the time synchronization process.
#### func (*RouterTimestamper) Stop
```go
func (rt *RouterTimestamper) Stop()
```
Stop halts the time synchronization process.
#### func (*RouterTimestamper) AddListener
```go
func (rt *RouterTimestamper) AddListener(listener UpdateListener)
```
AddListener adds a new listener for time updates.
#### func (*RouterTimestamper) GetCurrentTime
```go
func (rt *RouterTimestamper) GetCurrentTime() time.Time
```
#### func (*RouterTimestamper) RemoveListener
@ -72,15 +59,17 @@ AddListener adds a new listener for time updates.
func (rt *RouterTimestamper) RemoveListener(listener UpdateListener)
```
RemoveListener removes a listener from receiving time updates.
#### func (*RouterTimestamper) WaitForInitialization
#### func (*RouterTimestamper) Start
```go
func (rt *RouterTimestamper) WaitForInitialization()
func (rt *RouterTimestamper) Start()
```
WaitForInitialization blocks until the RouterTimestamper is initialized or a timeout occurs.
#### func (*RouterTimestamper) Stop
```go
func (rt *RouterTimestamper) Stop()
```
#### func (*RouterTimestamper) TimestampNow
@ -88,41 +77,164 @@ WaitForInitialization blocks until the RouterTimestamper is initialized or a tim
func (rt *RouterTimestamper) TimestampNow()
```
TimestampNow triggers an immediate time synchronization.
#### func (*RouterTimestamper) WaitForInitialization
### type UpdateListener
```go
func (rt *RouterTimestamper) WaitForInitialization()
```
#### type UpdateListener
```go
type UpdateListener interface {
SetNow(now time.Time, stratum uint8)
SetNow(now time.Time, stratum uint8)
}
```
UpdateListener is an interface that listeners must implement to receive time updates.
UpdateListener is an interface that listeners must implement to receive time
updates.
### type Zones
#### type Zones
```go
type Zones struct {
countryToZone map[string]string
continentToZone map[string]string
}
```
Zones manages mappings between country codes, continent codes, and NTP zones.
#### func NewZones
#### func NewZones
```go
func NewZones() *Zones
```
NewZones creates a new Zones instance and initializes it with data.
#### func (*Zones) GetZone
```go
func (z *Zones) GetZone(countryCode string) string
```
GetZone returns the NTP zone for a given country code.
# sntp
--
import "github.com/go-i2p/go-i2p/lib/util/time/sntp"
![sntp.svg](sntp)
## Usage
#### type DefaultNTPClient
```go
type DefaultNTPClient struct{}
```
#### func (*DefaultNTPClient) QueryWithOptions
```go
func (c *DefaultNTPClient) QueryWithOptions(host string, options ntp.QueryOptions) (*ntp.Response, error)
```
#### type NTPClient
```go
type NTPClient interface {
QueryWithOptions(host string, options ntp.QueryOptions) (*ntp.Response, error)
}
```
#### type RouterTimestamper
```go
type RouterTimestamper struct {
}
```
#### func NewRouterTimestamper
```go
func NewRouterTimestamper(client NTPClient) *RouterTimestamper
```
#### func (*RouterTimestamper) AddListener
```go
func (rt *RouterTimestamper) AddListener(listener UpdateListener)
```
#### func (*RouterTimestamper) GetCurrentTime
```go
func (rt *RouterTimestamper) GetCurrentTime() time.Time
```
#### func (*RouterTimestamper) RemoveListener
```go
func (rt *RouterTimestamper) RemoveListener(listener UpdateListener)
```
#### func (*RouterTimestamper) Start
```go
func (rt *RouterTimestamper) Start()
```
#### func (*RouterTimestamper) Stop
```go
func (rt *RouterTimestamper) Stop()
```
#### func (*RouterTimestamper) TimestampNow
```go
func (rt *RouterTimestamper) TimestampNow()
```
#### func (*RouterTimestamper) WaitForInitialization
```go
func (rt *RouterTimestamper) WaitForInitialization()
```
#### type UpdateListener
```go
type UpdateListener interface {
SetNow(now time.Time, stratum uint8)
}
```
UpdateListener is an interface that listeners must implement to receive time
updates.
#### type Zones
```go
type Zones struct {
}
```
#### func NewZones
```go
func NewZones() *Zones
```
#### func (*Zones) GetZone
```go
func (z *Zones) GetZone(countryCode string) string
```
sntp
github.com/go-i2p/go-i2p/lib/util/time/sntp

414
lib/util/time/sntp/sntp.svg Normal file
View File

@ -0,0 +1,414 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="1420pt" height="549pt"
viewBox="0.00 0.00 1420.13 549.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 549)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-549 1420.1336,-549 1420.1336,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-541 1412.1336,-541 1412.1336,-8 8,-8"/>
<text text-anchor="middle" x="710.0668" y="-520.8" font-family="Arial" font-size="18.00" fill="#000000">sntp</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/beevik/ntp</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/beevik/ntp" xlink:title="package: github.com/beevik/ntp">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="228.31,-424 228.31,-503 375.62,-503 375.62,-424 228.31,-424"/>
<text text-anchor="middle" x="301.965" y="-484.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">ntp</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones</title>
<g id="a_clust4"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M1091.3404,-16C1091.3404,-16 1392.1336,-16 1392.1336,-16 1398.1336,-16 1404.1336,-22 1404.1336,-28 1404.1336,-28 1404.1336,-143 1404.1336,-143 1404.1336,-149 1398.1336,-155 1392.1336,-155 1392.1336,-155 1091.3404,-155 1091.3404,-155 1085.3404,-155 1079.3404,-149 1079.3404,-143 1079.3404,-143 1079.3404,-28 1079.3404,-28 1079.3404,-22 1085.3404,-16 1091.3404,-16"/>
<text text-anchor="middle" x="1241.737" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(*Zones)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M32.6697,-216C32.6697,-216 1163.3285,-216 1163.3285,-216 1169.3285,-216 1175.3285,-222 1175.3285,-228 1175.3285,-228 1175.3285,-404 1175.3285,-404 1175.3285,-410 1169.3285,-416 1163.3285,-416 1163.3285,-416 32.6697,-416 32.6697,-416 26.6697,-416 20.6697,-410 20.6697,-404 20.6697,-404 20.6697,-228 20.6697,-228 20.6697,-222 26.6697,-216 32.6697,-216"/>
<text text-anchor="middle" x="597.9991" y="-224.5" font-family="Arial" font-size="15.00" fill="#222222">(*RouterTimestamper)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-424C28,-424 151.31,-424 151.31,-424 157.31,-424 163.31,-430 163.31,-436 163.31,-436 163.31,-490 163.31,-490 163.31,-496 157.31,-502 151.31,-502 151.31,-502 28,-502 28,-502 22,-502 16,-496 16,-490 16,-490 16,-436 16,-436 16,-430 22,-424 28,-424"/>
<text text-anchor="middle" x="89.655" y="-432.5" font-family="Arial" font-size="15.00" fill="#222222">(*DefaultNTPClient)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode | defined in router_timestamper.go:393">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1186.2513,-460C1186.2513,-460 1061.4169,-460 1061.4169,-460 1055.4169,-460 1049.4169,-454 1049.4169,-448 1049.4169,-448 1049.4169,-436 1049.4169,-436 1049.4169,-430 1055.4169,-424 1061.4169,-424 1061.4169,-424 1186.2513,-424 1186.2513,-424 1192.2513,-424 1198.2513,-430 1198.2513,-436 1198.2513,-436 1198.2513,-448 1198.2513,-448 1198.2513,-454 1192.2513,-460 1186.2513,-460"/>
<text text-anchor="middle" x="1123.8341" y="-437.8" font-family="Verdana" font-size="14.00" fill="#000000">getLocalCountryCode</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity | defined in router_timestamper.go:371">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M964.834,-469C964.834,-469 833.0024,-469 833.0024,-469 827.0024,-469 821.0024,-463 821.0024,-457 821.0024,-457 821.0024,-445 821.0024,-445 821.0024,-439 827.0024,-433 833.0024,-433 833.0024,-433 964.834,-433 964.834,-433 970.834,-433 976.834,-439 976.834,-445 976.834,-445 976.834,-457 976.834,-457 976.834,-463 970.834,-469 964.834,-469"/>
<text text-anchor="middle" x="898.9182" y="-446.8" font-family="Verdana" font-size="14.00" fill="#000000">checkIPv6Connectivity</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration | defined in router_timestamper.go:386">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1158.2573,-208C1158.2573,-208 1089.4109,-208 1089.4109,-208 1083.4109,-208 1077.4109,-202 1077.4109,-196 1077.4109,-196 1077.4109,-184 1077.4109,-184 1077.4109,-178 1083.4109,-172 1089.4109,-172 1089.4109,-172 1158.2573,-172 1158.2573,-172 1164.2573,-172 1170.2573,-178 1170.2573,-184 1170.2573,-184 1170.2573,-196 1170.2573,-196 1170.2573,-202 1164.2573,-208 1158.2573,-208"/>
<text text-anchor="middle" x="1123.8341" y="-185.8" font-family="Verdana" font-size="14.00" fill="#000000">absDuration</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones | defined in zones.go:19&#10;at zones.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M929.0586,-121C929.0586,-121 868.7778,-121 868.7778,-121 862.7778,-121 856.7778,-115 856.7778,-109 856.7778,-109 856.7778,-97 856.7778,-97 856.7778,-91 862.7778,-85 868.7778,-85 868.7778,-85 929.0586,-85 929.0586,-85 935.0586,-85 941.0586,-91 941.0586,-97 941.0586,-97 941.0586,-109 941.0586,-109 941.0586,-115 935.0586,-121 929.0586,-121"/>
<text text-anchor="middle" x="898.9182" y="-98.8" font-family="Verdana" font-size="14.00" fill="#000000">NewZones</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize -->
<g id="node19" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize</title>
<g id="a_node19"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize | defined in zones.go:36&#10;at zones.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1148.3215,-86C1148.3215,-86 1099.3467,-86 1099.3467,-86 1093.3467,-86 1087.3467,-80 1087.3467,-74 1087.3467,-74 1087.3467,-62 1087.3467,-62 1087.3467,-56 1093.3467,-50 1099.3467,-50 1099.3467,-50 1148.3215,-50 1148.3215,-50 1154.3215,-50 1160.3215,-56 1160.3215,-62 1160.3215,-62 1160.3215,-74 1160.3215,-74 1160.3215,-80 1154.3215,-86 1148.3215,-86"/>
<text text-anchor="middle" x="1123.8341" y="-63.8" font-family="Verdana" font-size="14.00" fill="#000000">initialize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize</title>
<g id="a_edge4"><a xlink:title="at zones.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize]">
<path fill="none" stroke="#000000" d="M941.2232,-96.4168C979.9704,-90.3872 1037.2175,-81.4787 1077.2557,-75.2482"/>
<polygon fill="#000000" stroke="#000000" points="1077.9539,-78.6818 1087.2968,-73.6857 1076.8775,-71.765 1077.9539,-78.6818"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper | defined in router_timestamper.go:55&#10;at router_timestamper.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones]&#10;at router_timestamper.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M736.4082,-138C736.4082,-138 597.6188,-138 597.6188,-138 591.6188,-138 585.6188,-132 585.6188,-126 585.6188,-126 585.6188,-114 585.6188,-114 585.6188,-108 591.6188,-102 597.6188,-102 597.6188,-102 736.4082,-102 736.4082,-102 742.4082,-102 748.4082,-108 748.4082,-114 748.4082,-114 748.4082,-126 748.4082,-126 748.4082,-132 742.4082,-138 736.4082,-138"/>
<text text-anchor="middle" x="667.0135" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterTimestamper</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones</title>
<g id="a_edge5"><a xlink:title="at router_timestamper.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones]">
<path fill="none" stroke="#000000" d="M748.4483,-114.0303C780.9942,-111.6445 817.5321,-108.9661 846.4526,-106.846"/>
<polygon fill="#000000" stroke="#000000" points="847.024,-110.3136 856.7413,-106.0918 846.5122,-103.3324 847.024,-110.3136"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig | defined in router_timestamper.go:331&#10;at router_timestamper.go:348: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode]&#10;at router_timestamper.go:357: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M937.126,-286C937.126,-286 860.7104,-286 860.7104,-286 854.7104,-286 848.7104,-280 848.7104,-274 848.7104,-274 848.7104,-262 848.7104,-262 848.7104,-256 854.7104,-250 860.7104,-250 860.7104,-250 937.126,-250 937.126,-250 943.126,-250 949.126,-256 949.126,-262 949.126,-262 949.126,-274 949.126,-274 949.126,-280 943.126,-286 937.126,-286"/>
<text text-anchor="middle" x="898.9182" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">updateConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig</title>
<g id="a_edge12"><a xlink:title="at router_timestamper.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="none" stroke="#000000" d="M684.2314,-138.2078C711.018,-165.5021 765.4158,-216.9173 821.2106,-246 826.759,-248.8921 832.7343,-251.4444 838.8191,-253.6875"/>
<polygon fill="#000000" stroke="#000000" points="837.8309,-257.0483 848.4253,-256.9623 840.0896,-250.4227 837.8309,-257.0483"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions | defined in router_timestamper.go:20&#10;at router_timestamper.go:21: calling [github.com/beevik/ntp.QueryWithOptions]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M143.4654,-494C143.4654,-494 35.8446,-494 35.8446,-494 29.8446,-494 23.8446,-488 23.8446,-482 23.8446,-482 23.8446,-470 23.8446,-470 23.8446,-464 29.8446,-458 35.8446,-458 35.8446,-458 143.4654,-458 143.4654,-458 149.4654,-458 155.4654,-464 155.4654,-470 155.4654,-470 155.4654,-482 155.4654,-482 155.4654,-488 149.4654,-494 143.4654,-494"/>
<text text-anchor="middle" x="89.655" y="-471.8" font-family="Verdana" font-size="14.00" fill="#000000">QueryWithOptions</text>
</a>
</g>
</g>
<!-- github.com/beevik/ntp.QueryWithOptions -->
<g id="node21" class="node">
<title>github.com/beevik/ntp.QueryWithOptions</title>
<g id="a_node21"><a xlink:title="github.com/beevik/ntp.QueryWithOptions | defined in ntp.go:432">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M355.7754,-468C355.7754,-468 248.1546,-468 248.1546,-468 242.1546,-468 236.1546,-462 236.1546,-456 236.1546,-456 236.1546,-444 236.1546,-444 236.1546,-438 242.1546,-432 248.1546,-432 248.1546,-432 355.7754,-432 355.7754,-432 361.7754,-432 367.7754,-438 367.7754,-444 367.7754,-444 367.7754,-456 367.7754,-456 367.7754,-462 361.7754,-468 355.7754,-468"/>
<text text-anchor="middle" x="301.965" y="-445.8" font-family="Verdana" font-size="14.00" fill="#000000">QueryWithOptions</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions&#45;&gt;github.com/beevik/ntp.QueryWithOptions -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions&#45;&gt;github.com/beevik/ntp.QueryWithOptions</title>
<g id="a_edge14"><a xlink:title="at router_timestamper.go:21: calling [github.com/beevik/ntp.QueryWithOptions]">
<path fill="none" stroke="#8b4513" d="M155.3772,-467.9515C177.7612,-465.2103 202.965,-462.1238 226.0794,-459.2931"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.6874,-462.7449 236.1878,-458.0552 225.8365,-455.7968 226.6874,-462.7449"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode</title>
<g id="a_edge1"><a xlink:title="at router_timestamper.go:348: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode]">
<path fill="none" stroke="#000000" d="M949.2861,-282.535C959.0176,-286.82 968.6526,-292.2328 976.6258,-299 1022.0787,-337.5781 1002.2441,-377.3308 1047.4553,-417.4837"/>
<polygon fill="#000000" stroke="#000000" points="1045.3444,-420.2793 1055.2899,-423.9314 1049.7925,-414.8743 1045.3444,-420.2793"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone -->
<g id="node18" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone | defined in zones.go:28">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M1148.3131,-147C1148.3131,-147 1099.3551,-147 1099.3551,-147 1093.3551,-147 1087.3551,-141 1087.3551,-135 1087.3551,-135 1087.3551,-123 1087.3551,-123 1087.3551,-117 1093.3551,-111 1099.3551,-111 1099.3551,-111 1148.3131,-111 1148.3131,-111 1154.3131,-111 1160.3131,-117 1160.3131,-123 1160.3131,-123 1160.3131,-135 1160.3131,-135 1160.3131,-141 1154.3131,-147 1148.3131,-147"/>
<text text-anchor="middle" x="1123.8341" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">GetZone</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone</title>
<g id="a_edge2"><a xlink:title="at router_timestamper.go:357: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone]">
<path fill="none" stroke="#000000" d="M949.0305,-264.8332C971.0415,-261.1253 995.8619,-253.4902 1013.6258,-238 1045.1651,-210.4976 1018.5362,-179.0098 1049.6258,-151 1057.338,-144.0518 1067.153,-139.2936 1077.0995,-136.0365"/>
<polygon fill="#000000" stroke="#000000" points="1078.334,-139.3254 1087.0168,-133.2543 1076.4431,-132.5856 1078.334,-139.3254"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery | defined in router_timestamper.go:129&#10;at router_timestamper.go:149: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool]&#10;at router_timestamper.go:131: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity]&#10;at router_timestamper.go:130: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]&#10;at router_timestamper.go:141: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]&#10;at router_timestamper.go:150: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M721.6312,-362C721.6312,-362 612.3958,-362 612.3958,-362 606.3958,-362 600.3958,-356 600.3958,-350 600.3958,-350 600.3958,-338 600.3958,-338 600.3958,-332 606.3958,-326 612.3958,-326 612.3958,-326 721.6312,-326 721.6312,-326 727.6312,-326 733.6312,-332 733.6312,-338 733.6312,-338 733.6312,-350 733.6312,-350 733.6312,-356 727.6312,-362 721.6312,-362"/>
<text text-anchor="middle" x="667.0135" y="-339.8" font-family="Verdana" font-size="14.00" fill="#000000">performTimeQuery</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity -->
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity</title>
<g id="a_edge7"><a xlink:title="at router_timestamper.go:131: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity]">
<path fill="none" stroke="#000000" d="M700.1887,-362.133C731.0725,-378.6876 778.615,-403.3472 821.2106,-422 826.8372,-424.4639 832.7462,-426.9119 838.6872,-429.2808"/>
<polygon fill="#000000" stroke="#000000" points="837.4258,-432.5455 848.0137,-432.9293 839.976,-426.0266 837.4258,-432.5455"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig -->
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig</title>
<g id="a_edge9"><a xlink:title="at router_timestamper.go:130: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="none" stroke="#000000" d="M734.0434,-326.2901C738.8505,-324.8816 743.6124,-323.4442 748.2106,-322 779.4019,-312.2034 813.7485,-300.0084 841.7651,-289.6876"/>
<polygon fill="#000000" stroke="#000000" points="843.2327,-292.8765 851.3954,-286.1221 840.8022,-286.3119 843.2327,-292.8765"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime | defined in router_timestamper.go:276&#10;at router_timestamper.go:319: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime]&#10;at router_timestamper.go:303: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:312: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:304: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M929.8429,-347C929.8429,-347 867.9935,-347 867.9935,-347 861.9935,-347 855.9935,-341 855.9935,-335 855.9935,-335 855.9935,-323 855.9935,-323 855.9935,-317 861.9935,-311 867.9935,-311 867.9935,-311 929.8429,-311 929.8429,-311 935.8429,-311 941.8429,-317 941.8429,-323 941.8429,-323 941.8429,-335 941.8429,-335 941.8429,-341 935.8429,-347 929.8429,-347"/>
<text text-anchor="middle" x="898.9182" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">queryTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime -->
<g id="edge17" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime</title>
<g id="a_edge17"><a xlink:title="at router_timestamper.go:141: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]&#10;at router_timestamper.go:150: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]">
<path fill="none" stroke="#000000" d="M733.7788,-339.6815C769.4301,-337.3755 812.6965,-334.577 845.998,-332.423"/>
<polygon fill="#000000" stroke="#000000" points="846.2404,-335.9147 855.9936,-331.7764 845.7885,-328.9293 846.2404,-335.9147"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool | defined in router_timestamper.go:125">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M944.9466,-408C944.9466,-408 852.8898,-408 852.8898,-408 846.8898,-408 840.8898,-402 840.8898,-396 840.8898,-396 840.8898,-384 840.8898,-384 840.8898,-378 846.8898,-372 852.8898,-372 852.8898,-372 944.9466,-372 944.9466,-372 950.9466,-372 956.9466,-378 956.9466,-384 956.9466,-384 956.9466,-396 956.9466,-396 956.9466,-402 950.9466,-408 944.9466,-408"/>
<text text-anchor="middle" x="898.9182" y="-385.8" font-family="Verdana" font-size="14.00" fill="#000000">secureRandBool</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool</title>
<g id="a_edge3"><a xlink:title="at router_timestamper.go:149: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool]">
<path fill="none" stroke="#000000" d="M733.7788,-357.2434C764.1938,-363.2764 800.1513,-370.4089 830.7354,-376.4754"/>
<polygon fill="#000000" stroke="#000000" points="830.3957,-379.9762 840.8856,-378.4888 831.7577,-373.11 830.3957,-379.9762"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_edge16"><a xlink:title="at router_timestamper.go:303: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:312: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:304: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="none" stroke="#000000" d="M942.0155,-316.7584C953.8548,-312.2574 966.2725,-306.4 976.6258,-299 1017.6903,-269.6493 1007.4174,-239.6803 1049.6258,-212 1055.2126,-208.3362 1061.4284,-205.2657 1067.8181,-202.6962"/>
<polygon fill="#000000" stroke="#000000" points="1069.0411,-205.9758 1077.2513,-199.2794 1066.6571,-199.3943 1069.0411,-205.9758"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime | defined in router_timestamper.go:323">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1155.3229,-347C1155.3229,-347 1092.3453,-347 1092.3453,-347 1086.3453,-347 1080.3453,-341 1080.3453,-335 1080.3453,-335 1080.3453,-323 1080.3453,-323 1080.3453,-317 1086.3453,-311 1092.3453,-311 1092.3453,-311 1155.3229,-311 1155.3229,-311 1161.3229,-311 1167.3229,-317 1167.3229,-323 1167.3229,-323 1167.3229,-335 1167.3229,-335 1167.3229,-341 1161.3229,-347 1155.3229,-347"/>
<text text-anchor="middle" x="1123.8341" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">stampTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime -->
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime</title>
<g id="a_edge15"><a xlink:title="at router_timestamper.go:319: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime]">
<path fill="none" stroke="#000000" d="M941.7526,-329C978.1397,-329 1030.5595,-329 1069.8194,-329"/>
<polygon fill="#000000" stroke="#000000" points="1070.0083,-332.5001 1080.0083,-329 1070.0083,-325.5001 1070.0083,-332.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce | defined in router_timestamper.go:272&#10;at router_timestamper.go:273: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M500.9149,-386C500.9149,-386 452.5215,-386 452.5215,-386 446.5215,-386 440.5215,-380 440.5215,-374 440.5215,-374 440.5215,-362 440.5215,-362 440.5215,-356 446.5215,-350 452.5215,-350 452.5215,-350 500.9149,-350 500.9149,-350 506.9149,-350 512.9149,-356 512.9149,-362 512.9149,-362 512.9149,-374 512.9149,-374 512.9149,-380 506.9149,-386 500.9149,-386"/>
<text text-anchor="middle" x="476.7182" y="-363.8" font-family="Verdana" font-size="14.00" fill="#000000">runOnce</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery -->
<g id="edge18" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery</title>
<g id="a_edge18"><a xlink:title="at router_timestamper.go:273: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="none" stroke="#000000" d="M512.9592,-363.4293C534.7608,-360.6797 563.365,-357.0721 590.0004,-353.7129"/>
<polygon fill="#000000" stroke="#000000" points="590.6105,-357.1637 600.0939,-352.4399 589.7346,-350.2188 590.6105,-357.1637"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow | defined in router_timestamper.go:119&#10;at router_timestamper.go:121: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M347.1672,-386C347.1672,-386 256.7628,-386 256.7628,-386 250.7628,-386 244.7628,-380 244.7628,-374 244.7628,-374 244.7628,-362 244.7628,-362 244.7628,-356 250.7628,-350 256.7628,-350 256.7628,-350 347.1672,-350 347.1672,-350 353.1672,-350 359.1672,-356 359.1672,-362 359.1672,-362 359.1672,-374 359.1672,-374 359.1672,-380 353.1672,-386 347.1672,-386"/>
<text text-anchor="middle" x="301.965" y="-363.8" font-family="Verdana" font-size="14.00" fill="#000000">TimestampNow</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce</title>
<g id="a_edge10"><a xlink:title="at router_timestamper.go:121: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce]">
<path fill="none" stroke="#000000" d="M359.1857,-368C377.8039,-368 398.5042,-368 417.2807,-368"/>
<polygon fill="#000000" stroke="#000000" points="430.5192,-371.5 440.5192,-368 430.5192,-364.5 430.5192,-371.5"/>
<polyline fill="none" stroke="#000000" points="430.5192,-368 425.5192,-368.0001 "/>
<ellipse fill="none" stroke="#000000" cx="421.5192" cy="-368.0001" rx="4" ry="4"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime | defined in router_timestamper.go:397&#10;at router_timestamper.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M135.6792,-386C135.6792,-386 43.6308,-386 43.6308,-386 37.6308,-386 31.6308,-380 31.6308,-374 31.6308,-374 31.6308,-362 31.6308,-362 31.6308,-356 37.6308,-350 43.6308,-350 43.6308,-350 135.6792,-350 135.6792,-350 141.6792,-350 147.6792,-356 147.6792,-362 147.6792,-362 147.6792,-374 147.6792,-374 147.6792,-380 141.6792,-386 135.6792,-386"/>
<text text-anchor="middle" x="89.655" y="-363.8" font-family="Verdana" font-size="14.00" fill="#000000">GetCurrentTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow</title>
<g id="a_edge11"><a xlink:title="at router_timestamper.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow]">
<path fill="none" stroke="#000000" d="M147.9505,-368C174.7367,-368 206.6648,-368 234.487,-368"/>
<polygon fill="#000000" stroke="#000000" points="234.5344,-371.5001 244.5344,-368 234.5343,-364.5001 234.5344,-371.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse -->
<g id="node15" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse</title>
<g id="a_node15"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse | defined in verification.go:10&#10;at verification.go:28: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M138.6256,-286C138.6256,-286 40.6844,-286 40.6844,-286 34.6844,-286 28.6844,-280 28.6844,-274 28.6844,-274 28.6844,-262 28.6844,-262 28.6844,-256 34.6844,-250 40.6844,-250 40.6844,-250 138.6256,-250 138.6256,-250 144.6256,-250 150.6256,-256 150.6256,-262 150.6256,-262 150.6256,-274 150.6256,-274 150.6256,-280 144.6256,-286 138.6256,-286"/>
<text text-anchor="middle" x="89.655" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">validateResponse</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_edge6"><a xlink:title="at verification.go:28: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="none" stroke="#000000" d="M125.453,-249.8939C166.855,-230.6609 237.5896,-203 301.965,-203 301.965,-203 301.965,-203 898.9182,-203 956.2509,-203 1021.6676,-198.7379 1067.1138,-195.0945"/>
<polygon fill="#000000" stroke="#000000" points="1067.6758,-198.5603 1077.3571,-194.2567 1067.1051,-191.5836 1067.6758,-198.5603"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run -->
<g id="node16" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run</title>
<g id="a_node16"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run | defined in router_timestamper.go:215&#10;at router_timestamper.go:218: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M491.7182,-325C491.7182,-325 461.7182,-325 461.7182,-325 455.7182,-325 449.7182,-319 449.7182,-313 449.7182,-313 449.7182,-301 449.7182,-301 449.7182,-295 455.7182,-289 461.7182,-289 461.7182,-289 491.7182,-289 491.7182,-289 497.7182,-289 503.7182,-295 503.7182,-301 503.7182,-301 503.7182,-313 503.7182,-313 503.7182,-319 497.7182,-325 491.7182,-325"/>
<text text-anchor="middle" x="476.7182" y="-302.8" font-family="Verdana" font-size="14.00" fill="#000000">run</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery</title>
<g id="a_edge13"><a xlink:title="at router_timestamper.go:218: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="none" stroke="#000000" d="M503.9829,-312.3012C526.61,-316.7007 559.9243,-323.1782 590.5502,-329.1329"/>
<polygon fill="#000000" stroke="#000000" points="589.8981,-332.5716 600.3823,-331.0446 591.2341,-325.7002 589.8981,-332.5716"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start -->
<g id="node17" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start</title>
<g id="a_node17"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start | defined in router_timestamper.go:69&#10;at router_timestamper.go:75: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M316.965,-325C316.965,-325 286.965,-325 286.965,-325 280.965,-325 274.965,-319 274.965,-313 274.965,-313 274.965,-301 274.965,-301 274.965,-295 280.965,-289 286.965,-289 286.965,-289 316.965,-289 316.965,-289 322.965,-289 328.965,-295 328.965,-301 328.965,-301 328.965,-313 328.965,-313 328.965,-319 322.965,-325 316.965,-325"/>
<text text-anchor="middle" x="301.965" y="-302.8" font-family="Verdana" font-size="14.00" fill="#000000">Start</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run -->
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run</title>
<g id="a_edge8"><a xlink:title="at router_timestamper.go:75: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run]">
<path fill="none" stroke="#000000" d="M329.2702,-307C355.1753,-307 394.7342,-307 426.3574,-307"/>
<polygon fill="#000000" stroke="#000000" points="439.6048,-310.5 449.6048,-307 439.6047,-303.5 439.6048,-310.5"/>
<polyline fill="none" stroke="#000000" points="439.6048,-307 434.6048,-307.0001 "/>
<ellipse fill="none" stroke="#000000" cx="430.6048" cy="-307.0001" rx="4" ry="4"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile -->
<g id="node20" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile</title>
<g id="a_node20"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile | defined in zones.go:54">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1384.1792,-86C1384.1792,-86 1282.9968,-86 1282.9968,-86 1276.9968,-86 1270.9968,-80 1270.9968,-74 1270.9968,-74 1270.9968,-62 1270.9968,-62 1270.9968,-56 1276.9968,-50 1282.9968,-50 1282.9968,-50 1384.1792,-50 1384.1792,-50 1390.1792,-50 1396.1792,-56 1396.1792,-62 1396.1792,-62 1396.1792,-74 1396.1792,-74 1396.1792,-80 1390.1792,-86 1384.1792,-86"/>
<text text-anchor="middle" x="1333.588" y="-63.8" font-family="Verdana" font-size="14.00" fill="#000000">readContinentFile</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile -->
<g id="edge19" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile</title>
<g id="a_edge19"><a xlink:title="at zones.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile]">
<path fill="none" stroke="#000000" d="M1160.3704,-68C1187.9205,-68 1226.6146,-68 1260.4451,-68"/>
<polygon fill="#000000" stroke="#000000" points="1260.7704,-71.5001 1270.7704,-68 1260.7703,-64.5001 1260.7704,-71.5001"/>
</a>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

13
lib/util/util.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="0pt" height="0pt"
viewBox="0.00 0.00 0.00 0.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 0)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,0 0,0 0,0 0,0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 584 B