diff options
Diffstat (limited to 'design/68723/knownhosts/knownhosts.html')
| -rw-r--r-- | design/68723/knownhosts/knownhosts.html | 688 |
1 files changed, 688 insertions, 0 deletions
diff --git a/design/68723/knownhosts/knownhosts.html b/design/68723/knownhosts/knownhosts.html new file mode 100644 index 0000000..4c73d7c --- /dev/null +++ b/design/68723/knownhosts/knownhosts.html @@ -0,0 +1,688 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="doc2go"> + <title>knownhosts</title> + <style> + body { + margin: 1em 2em; + font-family: Helvetica, sans-serif; + background-color: #f8f8f8; + font-size: 1em; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + margin-top: 0.3em; + margin-bottom: 0.3em; + } + + h1, + h2, + h3, + h4 { + font-weight: 500; + } + + h2 { + font-size: 1.75em + } + + h3 { + font-size: 1.5em + } + + h4 { + font-size: 1.33em + } + + h5 { + font-size: 1em + } + + a { + text-decoration: none; + color: #0366a5; + } + + a:hover { + text-decoration: underline; + } + + a.permalink { + display: none; + } + + a.permalink:hover { + text-decoration: none; + } + + *:hover>a.permalink { + display: inline; + } + + nav { + padding: 1em; + background-color: #eee; + border-radius: 0.5em; + display: flex; + flex-wrap: wrap; + } + + nav .navbar-right { + margin-left: auto; + } + + /* Remove first level of nesting for a package's index section. */ + #pkg-index+ul, + #pkg-examples+ul { + list-style-type: none; + padding: 0; + } + + code, + kbd, + pre { + font-family: Consolas, monospace; + } + + pre { + color: #222; + overflow-x: auto; + border: 1px solid #ccc; + border-radius: 0.5em; + background-color: #eee; + padding: 0.75em; + font-size: 0.9em; + } + + details.example>summary { + color: #0366a5; + cursor: pointer; + } + + details.deprecated>summary { + list-style: none; + } + + span.deprecated-tag { + color: #eee; + background-color: #999; + padding: 0.125rem 0.3rem; + border-radius: 0.3rem; + font-size: 0.7rem; + vertical-align: middle; + cursor: pointer; + } + + #search { + margin: 0.3em 0; + } + + #generated-by-footer { + font-size: x-small; + } + + /* Background */ + .bg { + background-color: #ffffff; + } + + /* PreWrapper */ + .chroma { + background-color: #ffffff; + } + + /* Error */ + .chroma .err { + color: #a61717; + background-color: #e3d2d2 + } + + /* LineLink */ + .chroma .lnlinks { + outline: none; + text-decoration: none; + color: inherit + } + + /* LineTableTD */ + .chroma .lntd { + vertical-align: top; + padding: 0; + margin: 0; + border: 0; + } + + /* LineTable */ + .chroma .lntable { + border-spacing: 0; + padding: 0; + margin: 0; + border: 0; + } + + /* LineHighlight */ + .chroma .hl { + background-color: #e5e5e5 + } + + /* LineNumbersTable */ + .chroma .lnt { + white-space: pre; + -webkit-user-select: none; + user-select: none; + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; + color: #7f7f7f + } + + /* LineNumbers */ + .chroma .ln { + white-space: pre; + -webkit-user-select: none; + user-select: none; + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; + color: #7f7f7f + } + + /* Line */ + .chroma .line { + display: flex; + } + + /* Keyword */ + .chroma .k { + color: #000000; + font-weight: bold + } + + /* KeywordConstant */ + .chroma .kc { + color: #000000; + font-weight: bold + } + + /* KeywordDeclaration */ + .chroma .kd { + color: #000000; + font-weight: bold + } + + /* KeywordNamespace */ + .chroma .kn { + color: #000000; + font-weight: bold + } + + /* KeywordPseudo */ + .chroma .kp { + color: #000000; + font-weight: bold + } + + /* KeywordReserved */ + .chroma .kr { + color: #000000; + font-weight: bold + } + + /* KeywordType */ + .chroma .kt { + color: #445588; + font-weight: bold + } + + /* NameAttribute */ + .chroma .na { + color: #008080 + } + + /* NameBuiltin */ + .chroma .nb { + color: #0086b3 + } + + /* NameBuiltinPseudo */ + .chroma .bp { + color: #999999 + } + + /* NameClass */ + .chroma .nc { + color: #445588; + font-weight: bold + } + + /* NameConstant */ + .chroma .no { + color: #008080 + } + + /* NameDecorator */ + .chroma .nd { + color: #3c5d5d; + font-weight: bold + } + + /* NameEntity */ + .chroma .ni { + color: #800080 + } + + /* NameException */ + .chroma .ne { + color: #990000; + font-weight: bold + } + + /* NameFunction */ + .chroma .nf { + color: #990000; + font-weight: bold + } + + /* NameLabel */ + .chroma .nl { + color: #990000; + font-weight: bold + } + + /* NameNamespace */ + .chroma .nn { + color: #555555 + } + + /* NameTag */ + .chroma .nt { + color: #000080 + } + + /* NameVariable */ + .chroma .nv { + color: #008080 + } + + /* NameVariableClass */ + .chroma .vc { + color: #008080 + } + + /* NameVariableGlobal */ + .chroma .vg { + color: #008080 + } + + /* NameVariableInstance */ + .chroma .vi { + color: #008080 + } + + /* LiteralString */ + .chroma .s { + color: #dd1144 + } + + /* LiteralStringAffix */ + .chroma .sa { + color: #dd1144 + } + + /* LiteralStringBacktick */ + .chroma .sb { + color: #dd1144 + } + + /* LiteralStringChar */ + .chroma .sc { + color: #dd1144 + } + + /* LiteralStringDelimiter */ + .chroma .dl { + color: #dd1144 + } + + /* LiteralStringDoc */ + .chroma .sd { + color: #dd1144 + } + + /* LiteralStringDouble */ + .chroma .s2 { + color: #dd1144 + } + + /* LiteralStringEscape */ + .chroma .se { + color: #dd1144 + } + + /* LiteralStringHeredoc */ + .chroma .sh { + color: #dd1144 + } + + /* LiteralStringInterpol */ + .chroma .si { + color: #dd1144 + } + + /* LiteralStringOther */ + .chroma .sx { + color: #dd1144 + } + + /* LiteralStringRegex */ + .chroma .sr { + color: #009926 + } + + /* LiteralStringSingle */ + .chroma .s1 { + color: #dd1144 + } + + /* LiteralStringSymbol */ + .chroma .ss { + color: #990073 + } + + /* LiteralNumber */ + .chroma .m { + color: #009999 + } + + /* LiteralNumberBin */ + .chroma .mb { + color: #009999 + } + + /* LiteralNumberFloat */ + .chroma .mf { + color: #009999 + } + + /* LiteralNumberHex */ + .chroma .mh { + color: #009999 + } + + /* LiteralNumberInteger */ + .chroma .mi { + color: #009999 + } + + /* LiteralNumberIntegerLong */ + .chroma .il { + color: #009999 + } + + /* LiteralNumberOct */ + .chroma .mo { + color: #009999 + } + + /* Operator */ + .chroma .o { + color: #000000; + font-weight: bold + } + + /* OperatorWord */ + .chroma .ow { + color: #000000; + font-weight: bold + } + + /* Comment */ + .chroma .c { + color: #999988; + font-style: italic + } + + /* CommentHashbang */ + .chroma .ch { + color: #999988; + font-style: italic + } + + /* CommentMultiline */ + .chroma .cm { + color: #999988; + font-style: italic + } + + /* CommentSingle */ + .chroma .c1 { + color: #999988; + font-style: italic + } + + /* CommentSpecial */ + .chroma .cs { + color: #999999; + font-weight: bold; + font-style: italic + } + + /* CommentPreproc */ + .chroma .cp { + color: #999999; + font-weight: bold; + font-style: italic + } + + /* CommentPreprocFile */ + .chroma .cpf { + color: #999999; + font-weight: bold; + font-style: italic + } + + /* GenericDeleted */ + .chroma .gd { + color: #000000; + background-color: #ffdddd + } + + /* GenericEmph */ + .chroma .ge { + color: #000000; + font-style: italic + } + + /* GenericError */ + .chroma .gr { + color: #aa0000 + } + + /* GenericHeading */ + .chroma .gh { + color: #999999 + } + + /* GenericInserted */ + .chroma .gi { + color: #000000; + background-color: #ddffdd + } + + /* GenericOutput */ + .chroma .go { + color: #888888 + } + + /* GenericPrompt */ + .chroma .gp { + color: #555555 + } + + /* GenericStrong */ + .chroma .gs { + font-weight: bold + } + + /* GenericSubheading */ + .chroma .gu { + color: #aaaaaa + } + + /* GenericTraceback */ + .chroma .gt { + color: #aa0000 + } + + /* GenericUnderline */ + .chroma .gl { + text-decoration: underline + } + + /* TextWhitespace */ + .chroma .w { + color: #bbbbbb + } + </style> +</head> + <body> + <main><h2 id="pkg-overview">package knownhosts</h2> +<pre class="chroma"><span class="kn">import</span> <span class="s">"golang.org/x/crypto/ssh/knownhosts"</span></pre> +<p>Package knownhosts implements a parser for the OpenSSH known_hosts +host key database, and provides utility functions for writing +OpenSSH compliant known_hosts files. +<h3 id="pkg-index">Index</h3> +<ul> + <li><a href="#HashHostname">func HashHostname(hostname string) string</a></li> + <li><a href="#Line">func Line(addresses []string, key ssh.PublicKey) string</a></li> + <li><a href="#New">func New(files ...string) (ssh.HostKeyCallback, error)</a></li> + <li><a href="#Normalize">func Normalize(address string) string</a></li> + <li> + <a href="#KeyError">type KeyError</a> + <ul> + <li><a href="#KeyError.Error">func (u *KeyError) Error() string</a></li> + </ul> + </li> + <li> + <a href="#KnownKey">type KnownKey</a> + <ul> + <li><a href="#KnownKey.String">func (k *KnownKey) String() string</a></li> + </ul> + </li> + <li> + <a href="#RevokedError">type RevokedError</a> + <ul> + <li><a href="#RevokedError.Error">func (r *RevokedError) Error() string</a></li> + </ul> + </li> + </ul><h3 id="pkg-functions">Functions</h3> + <h3 id="HashHostname">func HashHostname</h3> + <pre class="chroma"><span class="kd">func</span> <span class="nf">HashHostname</span><span class="p">(</span><span class="nx">hostname</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a><span class="p">)</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a></pre> + <p>HashHostname hashes the given hostname. The hostname is not +normalized before hashing. +<h3 id="Line">func Line</h3> + <pre class="chroma"><span class="kd">func</span> <span class="nf">Line</span><span class="p">(</span><span class="nx">addresses</span> <span class="p">[]</span><a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a><span class="p">,</span> <span class="nx">key</span> <a href=".."><span class="nx">ssh</span></a><span class="p">.</span><a href="..#PublicKey"><span class="nx">PublicKey</span></a><span class="p">)</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a></pre> + <p>Line returns a line to add append to the known_hosts files. +<h3 id="New">func New</h3> + <pre class="chroma"><span class="kd">func</span> <span class="nf">New</span><span class="p">(</span><span class="nx">files</span> <span class="o">...</span><a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a><span class="p">)</span> <span class="p">(</span><a href=".."><span class="nx">ssh</span></a><span class="p">.</span><a href="..#HostKeyCallback"><span class="nx">HostKeyCallback</span></a><span class="p">,</span> <a href="https://pkg.go.dev/builtin#error"><span class="kt">error</span></a><span class="p">)</span></pre> + <p>New creates a host key callback from the given OpenSSH host key +files. The returned callback is for use in +ssh.ClientConfig.HostKeyCallback. By preference, the key check +operates on the hostname if available, i.e. if a server changes its +IP address, the host key check will still succeed, even though a +record of the new IP address is not available. +<h3 id="Normalize">func Normalize</h3> + <pre class="chroma"><span class="kd">func</span> <span class="nf">Normalize</span><span class="p">(</span><span class="nx">address</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a><span class="p">)</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a></pre> + <p>Normalize normalizes an address into the form used in known_hosts +<h3 id="pkg-types">Types</h3> + <h3 id="KeyError">type KeyError</h3> + <pre class="chroma"><span class="kd">type</span> <span class="nx">KeyError</span> <span class="kd">struct</span> <span class="p">{</span> + <span class="c1">// Want holds the accepted host keys. For each key algorithm, +</span><span class="c1"></span> <span class="c1">// there can be one hostkey. If Want is empty, the host is +</span><span class="c1"></span> <span class="c1">// unknown. If Want is non-empty, there was a mismatch, which +</span><span class="c1"></span> <span class="c1">// can signify a MITM attack. +</span><span class="c1"></span> <span id="KeyError.Want"><span class="nx">Want</span></span> <span class="p">[]</span><a href="#KnownKey"><span class="nx">KnownKey</span></a> +<span class="p">}</span></pre> + <p>KeyError is returned if we did not find the key in the host key +database, or there was a mismatch. Typically, in batch +applications, this should be interpreted as failure. Interactive +applications can offer an interactive prompt to the user. +<h4 id="KeyError.Error">func (*KeyError) Error</h4> + <pre class="chroma"><span class="kd">func</span> <span class="p">(</span><span class="nx">u</span> <span class="o">*</span><a href="#KeyError"><span class="nx">KeyError</span></a><span class="p">)</span> <span class="nf">Error</span><span class="p">()</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a></pre> + <h3 id="KnownKey">type KnownKey</h3> + <pre class="chroma"><span class="kd">type</span> <span class="nx">KnownKey</span> <span class="kd">struct</span> <span class="p">{</span> + <span id="KnownKey.Key"><span class="nx">Key</span></span> <a href=".."><span class="nx">ssh</span></a><span class="p">.</span><a href="..#PublicKey"><span class="nx">PublicKey</span></a> + <span id="KnownKey.Filename"><span class="nx">Filename</span></span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a> + <span id="KnownKey.Line"><span class="nx">Line</span></span> <a href="https://pkg.go.dev/builtin#int"><span class="kt">int</span></a> +<span class="p">}</span></pre> + <p>KnownKey represents a key declared in a known_hosts file. +<h4 id="KnownKey.String">func (*KnownKey) String</h4> + <pre class="chroma"><span class="kd">func</span> <span class="p">(</span><span class="nx">k</span> <span class="o">*</span><a href="#KnownKey"><span class="nx">KnownKey</span></a><span class="p">)</span> <span class="nf">String</span><span class="p">()</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a></pre> + <h3 id="RevokedError">type RevokedError</h3> + <pre class="chroma"><span class="kd">type</span> <span class="nx">RevokedError</span> <span class="kd">struct</span> <span class="p">{</span> + <span id="RevokedError.Revoked"><span class="nx">Revoked</span></span> <a href="#KnownKey"><span class="nx">KnownKey</span></a> +<span class="p">}</span></pre> + <p>RevokedError is returned if we found a key that was revoked. +<h4 id="RevokedError.Error">func (*RevokedError) Error</h4> + <pre class="chroma"><span class="kd">func</span> <span class="p">(</span><span class="nx">r</span> <span class="o">*</span><a href="#RevokedError"><span class="nx">RevokedError</span></a><span class="p">)</span> <span class="nf">Error</span><span class="p">()</span> <a href="https://pkg.go.dev/builtin#string"><span class="kt">string</span></a></pre> + </main> + <hr> + <footer> + <small id="generated-by-footer"> + Generated with <a href="https://abhinav.github.io/doc2go/">doc2go</a> + </small> + </footer> + <script type="text/javascript"> + // If the page was opened with an anchor (e.g. #foo), + // and the destination is a <details> element, open it. + function openDetailsAnchor() { + let hash = window.location.hash + if (!hash) { + return + } + let el = document.getElementById(hash.slice(1)) // remove leading '#' + if (!el) { + return + } + + let details = el.closest("details") + while (details) { + details.open = true + details = details.parentElement.closest("details") + } + + // New elements may have appeared. + // Set hash again to scroll to the right place. + window.location.hash = hash; + return false; + } + + window.addEventListener('hashchange', openDetailsAnchor) + + window.addEventListener('load', () => { + document.querySelectorAll("h2, h3, h4, h5, h6").forEach((el) => { + if (!el.id) { + return + } + el.innerHTML += ' <a class="permalink" href="#' + el.id + '">¶</a>' + }) + + document.querySelectorAll("details.example > summary").forEach((el) => { + let id = el.parentElement.id; + if (!id) { + return + } + el.innerHTML += ' <a class="permalink" href="#' + id + '">¶</a>' + }) + + openDetailsAnchor() + }) + </script> + </body> +</html> |
