diff options
Diffstat (limited to 'Net/SSH/Authentication/ED25519/OpenSSHPrivateKeyLoader.html')
-rw-r--r-- | Net/SSH/Authentication/ED25519/OpenSSHPrivateKeyLoader.html | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/Net/SSH/Authentication/ED25519/OpenSSHPrivateKeyLoader.html b/Net/SSH/Authentication/ED25519/OpenSSHPrivateKeyLoader.html new file mode 100644 index 0000000..004910e --- /dev/null +++ b/Net/SSH/Authentication/ED25519/OpenSSHPrivateKeyLoader.html @@ -0,0 +1,235 @@ +<!DOCTYPE html> + +<html> +<head> +<meta charset="UTF-8"> + +<title>class Net::SSH::Authentication::ED25519::OpenSSHPrivateKeyLoader - net-ssh 6.0.0.beta1</title> + +<script type="text/javascript"> + var rdoc_rel_prefix = "../../../../"; + var index_rel_prefix = "../../../../"; +</script> + +<script src="../../../../js/jquery.js"></script> +<script src="../../../../js/darkfish.js"></script> + +<link href="../../../../css/fonts.css" rel="stylesheet"> +<link href="../../../../css/rdoc.css" rel="stylesheet"> + + + +<body id="top" role="document" class="class"> +<nav role="navigation"> + <div id="project-navigation"> + <div id="home-section" role="region" title="Quick navigation" class="nav-section"> + <h2> + <a href="../../../../index.html" rel="home">Home</a> + </h2> + + <div id="table-of-contents-navigation"> + <a href="../../../../table_of_contents.html#pages">Pages</a> + <a href="../../../../table_of_contents.html#classes">Classes</a> + <a href="../../../../table_of_contents.html#methods">Methods</a> + </div> +</div> + + <div id="search-section" role="search" class="project-section initially-hidden"> + <form action="#" method="get" accept-charset="utf-8"> + <div id="search-field-wrapper"> + <input id="search-field" role="combobox" aria-label="Search" + aria-autocomplete="list" aria-controls="search-results" + type="text" name="search" placeholder="Search" spellcheck="false" + title="Type to search, Up and Down to navigate, Enter to load"> + </div> + + <ul id="search-results" aria-label="Search Results" + aria-busy="false" aria-expanded="false" + aria-atomic="false" class="initially-hidden"></ul> + </form> +</div> + + </div> + + + + <div id="class-metadata"> + + <div id="parent-class-section" class="nav-section"> + <h3>Parent</h3> + + + <p class="link">Object + +</div> + + + + <!-- Method Quickref --> +<div id="method-list-section" class="nav-section"> + <h3>Methods</h3> + + <ul class="link-list" role="directory"> + + <li ><a href="#method-c-read">::read</a> + + </ul> +</div> + + </div> +</nav> + +<main role="main" aria-labelledby="class-Net::SSH::Authentication::ED25519::OpenSSHPrivateKeyLoader"> + <h1 id="class-Net::SSH::Authentication::ED25519::OpenSSHPrivateKeyLoader" class="class"> + class Net::SSH::Authentication::ED25519::OpenSSHPrivateKeyLoader + </h1> + + <section class="description"> + + </section> + + + + + <section id="5Buntitled-5D" class="documentation-section"> + + + + + + <section class="constants-list"> + <header> + <h3>Constants</h3> + </header> + <dl> + + <dt id="CipherFactory">CipherFactory + + <dd> + + + <dt id="MAGIC">MAGIC + + <dd> + + + <dt id="MBEGIN">MBEGIN + + <dd> + + + <dt id="MEND">MEND + + <dd> + + + </dl> + </section> + + + + + + <section id="public-class-5Buntitled-5D-method-details" class="method-section"> + <header> + <h3>Public Class Methods</h3> + </header> + + + <div id="method-c-read" class="method-detail "> + + <div class="method-heading"> + <span class="method-name">read</span><span + class="method-args">(datafull, password)</span> + + <span class="method-click-advice">click to toggle source</span> + + </div> + + + <div class="method-description"> + + + + + + + <div class="method-source-code" id="read-source"> + <pre><span class="ruby-comment"># File lib/net/ssh/authentication/ed25519.rb, line 43</span> +<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">datafull</span>, <span class="ruby-identifier">password</span>) + <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"Expected #{MBEGIN} at start of private key"</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">datafull</span>.<span class="ruby-identifier">start_with?</span>(<span class="ruby-constant">MBEGIN</span>) + <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"Expected #{MEND} at end of private key"</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">datafull</span>.<span class="ruby-identifier">end_with?</span>(<span class="ruby-constant">MEND</span>) + <span class="ruby-identifier">datab64</span> = <span class="ruby-identifier">datafull</span>[<span class="ruby-constant">MBEGIN</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">...</span><span class="ruby-operator">-</span><span class="ruby-constant">MEND</span>.<span class="ruby-identifier">size</span>] + <span class="ruby-identifier">data</span> = <span class="ruby-constant">Base64</span>.<span class="ruby-identifier">decode64</span>(<span class="ruby-identifier">datab64</span>) + <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"Expected #{MAGIC} at start of decoded private key"</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">start_with?</span>(<span class="ruby-constant">MAGIC</span>) + <span class="ruby-identifier">buffer</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">SSH</span><span class="ruby-operator">::</span><span class="ruby-constant">Buffer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">data</span>[<span class="ruby-constant">MAGIC</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]) + + <span class="ruby-identifier">ciphername</span> = <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">read_string</span> + <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"#{ciphername} in private key is not supported"</span>) <span class="ruby-keyword">unless</span> + <span class="ruby-constant">CipherFactory</span>.<span class="ruby-identifier">supported?</span>(<span class="ruby-identifier">ciphername</span>) + + <span class="ruby-identifier">kdfname</span> = <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">read_string</span> + <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"Expected #{kdfname} to be or none or bcrypt"</span>) <span class="ruby-keyword">unless</span> <span class="ruby-node">%w[none bcrypt]</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">kdfname</span>) + + <span class="ruby-identifier">kdfopts</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">SSH</span><span class="ruby-operator">::</span><span class="ruby-constant">Buffer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">read_string</span>) + <span class="ruby-identifier">num_keys</span> = <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">read_long</span> + <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"Only 1 key is supported in ssh keys #{num_keys} was in private key"</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">num_keys</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> + <span class="ruby-identifier">_pubkey</span> = <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">read_string</span> + + <span class="ruby-identifier">len</span> = <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">read_long</span> + + <span class="ruby-identifier">keylen</span>, <span class="ruby-identifier">blocksize</span>, <span class="ruby-identifier">ivlen</span> = <span class="ruby-constant">CipherFactory</span>.<span class="ruby-identifier">get_lengths</span>(<span class="ruby-identifier">ciphername</span>, <span class="ruby-identifier">iv_len</span><span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>) + <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"Private key len:#{len} is not a multiple of #{blocksize}"</span>) <span class="ruby-keyword">if</span> + ((<span class="ruby-identifier">len</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">blocksize</span>) <span class="ruby-operator">||</span> ((<span class="ruby-identifier">blocksize</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>) <span class="ruby-operator">&&</span> (<span class="ruby-identifier">len</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">blocksize</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>)) + + <span class="ruby-keyword">if</span> <span class="ruby-identifier">kdfname</span> <span class="ruby-operator">==</span> <span class="ruby-string">'bcrypt'</span> + <span class="ruby-identifier">salt</span> = <span class="ruby-identifier">kdfopts</span>.<span class="ruby-identifier">read_string</span> + <span class="ruby-identifier">rounds</span> = <span class="ruby-identifier">kdfopts</span>.<span class="ruby-identifier">read_long</span> + + <span class="ruby-identifier">raise</span> <span class="ruby-string">"BCryptPbkdf is not implemented for jruby"</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">RUBY_PLATFORM</span> <span class="ruby-operator">==</span> <span class="ruby-string">"java"</span> + <span class="ruby-identifier">key</span> = <span class="ruby-constant">BCryptPbkdf</span><span class="ruby-operator">::</span><span class="ruby-identifier">key</span>(<span class="ruby-identifier">password</span>, <span class="ruby-identifier">salt</span>, <span class="ruby-identifier">keylen</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ivlen</span>, <span class="ruby-identifier">rounds</span>) + <span class="ruby-keyword">else</span> + <span class="ruby-identifier">key</span> = <span class="ruby-string">'\x00'</span> <span class="ruby-operator">*</span> (<span class="ruby-identifier">keylen</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ivlen</span>) + <span class="ruby-keyword">end</span> + + <span class="ruby-identifier">cipher</span> = <span class="ruby-constant">CipherFactory</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">ciphername</span>, <span class="ruby-identifier">key</span><span class="ruby-operator">:</span> <span class="ruby-identifier">key</span>[<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">keylen</span>], <span class="ruby-identifier">iv</span><span class="ruby-value">:key</span>[<span class="ruby-identifier">keylen</span><span class="ruby-operator">...</span><span class="ruby-identifier">keylen</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ivlen</span>], <span class="ruby-identifier">decrypt</span><span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>) + + <span class="ruby-identifier">decoded</span> = <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">remainder_as_buffer</span>.<span class="ruby-identifier">to_s</span>) + <span class="ruby-identifier">decoded</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">final</span> + + <span class="ruby-identifier">decoded</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">SSH</span><span class="ruby-operator">::</span><span class="ruby-constant">Buffer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">decoded</span>) + <span class="ruby-identifier">check1</span> = <span class="ruby-identifier">decoded</span>.<span class="ruby-identifier">read_long</span> + <span class="ruby-identifier">check2</span> = <span class="ruby-identifier">decoded</span>.<span class="ruby-identifier">read_long</span> + + <span class="ruby-identifier">raise</span> <span class="ruby-constant">DecryptError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Decrypt failed on private key"</span>, <span class="ruby-identifier">encrypted_key</span><span class="ruby-operator">:</span> <span class="ruby-identifier">kdfname</span> <span class="ruby-operator">==</span> <span class="ruby-string">'bcrypt'</span>) <span class="ruby-keyword">if</span> (<span class="ruby-identifier">check1</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">check2</span>) + + <span class="ruby-identifier">type_name</span> = <span class="ruby-identifier">decoded</span>.<span class="ruby-identifier">read_string</span> + <span class="ruby-keyword">case</span> <span class="ruby-identifier">type_name</span> + <span class="ruby-keyword">when</span> <span class="ruby-string">"ssh-ed25519"</span> + <span class="ruby-constant">PrivKey</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">decoded</span>) + <span class="ruby-keyword">else</span> + <span class="ruby-identifier">decoded</span>.<span class="ruby-identifier">read_private_keyblob</span>(<span class="ruby-identifier">type_name</span>) + <span class="ruby-keyword">end</span> +<span class="ruby-keyword">end</span></pre> + </div> + + </div> + + + + + </div> + + + </section> + + </section> +</main> + + +<footer id="validator-badges" role="contentinfo"> + <p><a href="http://validator.w3.org/check/referer">Validate</a> + <p>Generated by <a href="https://rdoc.github.io/rdoc">RDoc</a> 5.0.0. + <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>. +</footer> + |