1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6 <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8 <title>Class: MCollective::SSL</title>
10 <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
12 <script src="../js/jquery.js" type="text/javascript"
13 charset="utf-8"></script>
14 <script src="../js/thickbox-compressed.js" type="text/javascript"
15 charset="utf-8"></script>
16 <script src="../js/quicksearch.js" type="text/javascript"
17 charset="utf-8"></script>
18 <script src="../js/darkfish.js" type="text/javascript"
19 charset="utf-8"></script>
25 <div id="file-metadata">
26 <div id="file-list-section" class="section">
27 <h3 class="section-header">In Files</h3>
28 <div class="section-body">
31 <li><a href="../lib/mcollective/ssl_rb.html?TB_iframe=true&height=550&width=785"
32 class="thickbox" title="lib/mcollective/ssl.rb">lib/mcollective/ssl.rb</a></li>
41 <div id="class-metadata">
45 <div id="parent-class-section" class="section">
46 <h3 class="section-header">Parent</h3>
48 <p class="link"><a href="../Object.html">Object</a></p>
53 <!-- Namespace Contents -->
56 <!-- Method Quickref -->
58 <div id="method-list-section" class="section">
59 <h3 class="section-header">Methods</h3>
60 <ul class="link-list">
62 <li><a href="#M000220">::base64_decode</a></li>
64 <li><a href="#M000218">::base64_encode</a></li>
66 <li><a href="#M000222">::md5</a></li>
68 <li><a href="#M000203">::new</a></li>
70 <li><a href="#M000223">::uuid</a></li>
72 <li><a href="#M000214">#aes_decrypt</a></li>
74 <li><a href="#M000213">#aes_encrypt</a></li>
76 <li><a href="#M000219">#base64_decode</a></li>
78 <li><a href="#M000217">#base64_encode</a></li>
80 <li><a href="#M000207">#decrypt_with_private</a></li>
82 <li><a href="#M000208">#decrypt_with_public</a></li>
84 <li><a href="#M000206">#encrypt_with_private</a></li>
86 <li><a href="#M000205">#encrypt_with_public</a></li>
88 <li><a href="#M000221">#md5</a></li>
90 <li><a href="#M000224">#read_key</a></li>
92 <li><a href="#M000210">#rsa_decrypt_with_private</a></li>
94 <li><a href="#M000212">#rsa_decrypt_with_public</a></li>
96 <li><a href="#M000211">#rsa_encrypt_with_private</a></li>
98 <li><a href="#M000209">#rsa_encrypt_with_public</a></li>
100 <li><a href="#M000215">#sign</a></li>
102 <li><a href="#M000216">#verify_signature</a></li>
108 <!-- Included Modules -->
112 <div id="project-metadata">
115 <div id="fileindex-section" class="section project-section">
116 <h3 class="section-header">Files</h3>
119 <li class="file"><a href="../COPYING.html">COPYING</a></li>
121 <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
123 <li class="file"><a href="../README.html">README</a></li>
125 <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
127 <li class="file"><a href="../etc/client_cfg_dist.html">client.cfg.dist</a></li>
129 <li class="file"><a href="../etc/data-help_erb.html">data-help.erb</a></li>
131 <li class="file"><a href="../etc/discovery-help_erb.html">discovery-help.erb</a></li>
133 <li class="file"><a href="../etc/facts_yaml_dist.html">facts.yaml.dist</a></li>
135 <li class="file"><a href="../etc/metadata-help_erb.html">metadata-help.erb</a></li>
137 <li class="file"><a href="../etc/msg-help_erb.html">msg-help.erb</a></li>
139 <li class="file"><a href="../etc/rpc-help_erb.html">rpc-help.erb</a></li>
141 <li class="file"><a href="../etc/server_cfg_dist.html">server.cfg.dist</a></li>
143 <li class="file"><a href="../etc/ssl/PLACEHOLDER.html">PLACEHOLDER</a></li>
145 <li class="file"><a href="../etc/ssl/clients/PLACEHOLDER.html">PLACEHOLDER</a></li>
147 <li class="file"><a href="../lib/mcollective/generators/templates/action_snippet_erb.html">action_snippet.erb</a></li>
149 <li class="file"><a href="../lib/mcollective/generators/templates/data_input_snippet_erb.html">data_input_snippet.erb</a></li>
151 <li class="file"><a href="../lib/mcollective/generators/templates/ddl_erb.html">ddl.erb</a></li>
153 <li class="file"><a href="../lib/mcollective/generators/templates/plugin_erb.html">plugin.erb</a></li>
155 <li class="file"><a href="../lib/mcollective/locales/en_yml.html">en.yml</a></li>
157 <li class="file"><a href="../mcollective_init.html">mcollective.init</a></li>
163 <div id="classindex-section" class="section project-section">
164 <h3 class="section-header">Class Index
165 <span class="search-toggle"><img src="../images/find.png"
166 height="16" width="16" alt="[+]"
167 title="show/hide quicksearch" /></span></h3>
168 <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
170 <legend>Quicksearch</legend>
171 <input type="text" name="quicksearch" value=""
172 class="quicksearch-field" />
176 <ul class="link-list">
178 <li><a href="../MCollective.html">MCollective</a></li>
180 <li><a href="../MCollective/Agent.html">MCollective::Agent</a></li>
182 <li><a href="../MCollective/Agents.html">MCollective::Agents</a></li>
184 <li><a href="../MCollective/Aggregate.html">MCollective::Aggregate</a></li>
186 <li><a href="../MCollective/Aggregate/Base.html">MCollective::Aggregate::Base</a></li>
188 <li><a href="../MCollective/Aggregate/Result.html">MCollective::Aggregate::Result</a></li>
190 <li><a href="../MCollective/Aggregate/Result/Base.html">MCollective::Aggregate::Result::Base</a></li>
192 <li><a href="../MCollective/Aggregate/Result/CollectionResult.html">MCollective::Aggregate::Result::CollectionResult</a></li>
194 <li><a href="../MCollective/Aggregate/Result/NumericResult.html">MCollective::Aggregate::Result::NumericResult</a></li>
196 <li><a href="../MCollective/Application.html">MCollective::Application</a></li>
198 <li><a href="../MCollective/Applications.html">MCollective::Applications</a></li>
200 <li><a href="../MCollective/Cache.html">MCollective::Cache</a></li>
202 <li><a href="../MCollective/Client.html">MCollective::Client</a></li>
204 <li><a href="../MCollective/CodedError.html">MCollective::CodedError</a></li>
206 <li><a href="../MCollective/Config.html">MCollective::Config</a></li>
208 <li><a href="../MCollective/Connector.html">MCollective::Connector</a></li>
210 <li><a href="../MCollective/Connector/Base.html">MCollective::Connector::Base</a></li>
212 <li><a href="../MCollective/DDL.html">MCollective::DDL</a></li>
214 <li><a href="../MCollective/DDL/AgentDDL.html">MCollective::DDL::AgentDDL</a></li>
216 <li><a href="../MCollective/DDL/Base.html">MCollective::DDL::Base</a></li>
218 <li><a href="../MCollective/DDL/DataDDL.html">MCollective::DDL::DataDDL</a></li>
220 <li><a href="../MCollective/DDL/DiscoveryDDL.html">MCollective::DDL::DiscoveryDDL</a></li>
222 <li><a href="../MCollective/DDL/ValidatorDDL.html">MCollective::DDL::ValidatorDDL</a></li>
224 <li><a href="../MCollective/DDLValidationError.html">MCollective::DDLValidationError</a></li>
226 <li><a href="../MCollective/Data.html">MCollective::Data</a></li>
228 <li><a href="../MCollective/Data/Base.html">MCollective::Data::Base</a></li>
230 <li><a href="../MCollective/Data/Result.html">MCollective::Data::Result</a></li>
232 <li><a href="../MCollective/Discovery.html">MCollective::Discovery</a></li>
234 <li><a href="../MCollective/Facts.html">MCollective::Facts</a></li>
236 <li><a href="../MCollective/Facts/Base.html">MCollective::Facts::Base</a></li>
238 <li><a href="../MCollective/Generators.html">MCollective::Generators</a></li>
240 <li><a href="../MCollective/Generators/AgentGenerator.html">MCollective::Generators::AgentGenerator</a></li>
242 <li><a href="../MCollective/Generators/Base.html">MCollective::Generators::Base</a></li>
244 <li><a href="../MCollective/Generators/DataGenerator.html">MCollective::Generators::DataGenerator</a></li>
246 <li><a href="../MCollective/InvalidRPCData.html">MCollective::InvalidRPCData</a></li>
248 <li><a href="../MCollective/Log.html">MCollective::Log</a></li>
250 <li><a href="../MCollective/Logger.html">MCollective::Logger</a></li>
252 <li><a href="../MCollective/Logger/Base.html">MCollective::Logger::Base</a></li>
254 <li><a href="../MCollective/Logger/Console_logger.html">MCollective::Logger::Console_logger</a></li>
256 <li><a href="../MCollective/Logger/File_logger.html">MCollective::Logger::File_logger</a></li>
258 <li><a href="../MCollective/Logger/Syslog_logger.html">MCollective::Logger::Syslog_logger</a></li>
260 <li><a href="../MCollective/Matcher.html">MCollective::Matcher</a></li>
262 <li><a href="../MCollective/Matcher/Parser.html">MCollective::Matcher::Parser</a></li>
264 <li><a href="../MCollective/Matcher/Scanner.html">MCollective::Matcher::Scanner</a></li>
266 <li><a href="../MCollective/Message.html">MCollective::Message</a></li>
268 <li><a href="../MCollective/MissingRPCData.html">MCollective::MissingRPCData</a></li>
270 <li><a href="../MCollective/MsgDoesNotMatchRequestID.html">MCollective::MsgDoesNotMatchRequestID</a></li>
272 <li><a href="../MCollective/MsgTTLExpired.html">MCollective::MsgTTLExpired</a></li>
274 <li><a href="../MCollective/NotTargettedAtUs.html">MCollective::NotTargettedAtUs</a></li>
276 <li><a href="../MCollective/Optionparser.html">MCollective::Optionparser</a></li>
278 <li><a href="../MCollective/PluginManager.html">MCollective::PluginManager</a></li>
280 <li><a href="../MCollective/PluginPackager.html">MCollective::PluginPackager</a></li>
282 <li><a href="../MCollective/PluginPackager/AgentDefinition.html">MCollective::PluginPackager::AgentDefinition</a></li>
284 <li><a href="../MCollective/PluginPackager/StandardDefinition.html">MCollective::PluginPackager::StandardDefinition</a></li>
286 <li><a href="../MCollective/RPC.html">MCollective::RPC</a></li>
288 <li><a href="../MCollective/RPC/ActionRunner.html">MCollective::RPC::ActionRunner</a></li>
290 <li><a href="../MCollective/RPC/Agent.html">MCollective::RPC::Agent</a></li>
292 <li><a href="../MCollective/RPC/Audit.html">MCollective::RPC::Audit</a></li>
294 <li><a href="../MCollective/RPC/Client.html">MCollective::RPC::Client</a></li>
296 <li><a href="../MCollective/RPC/Helpers.html">MCollective::RPC::Helpers</a></li>
298 <li><a href="../MCollective/RPC/Progress.html">MCollective::RPC::Progress</a></li>
300 <li><a href="../MCollective/RPC/Reply.html">MCollective::RPC::Reply</a></li>
302 <li><a href="../MCollective/RPC/Request.html">MCollective::RPC::Request</a></li>
304 <li><a href="../MCollective/RPC/Result.html">MCollective::RPC::Result</a></li>
306 <li><a href="../MCollective/RPC/Stats.html">MCollective::RPC::Stats</a></li>
308 <li><a href="../MCollective/RPCAborted.html">MCollective::RPCAborted</a></li>
310 <li><a href="../MCollective/RPCError.html">MCollective::RPCError</a></li>
312 <li><a href="../MCollective/Registration.html">MCollective::Registration</a></li>
314 <li><a href="../MCollective/Registration/Base.html">MCollective::Registration::Base</a></li>
316 <li><a href="../MCollective/Runner.html">MCollective::Runner</a></li>
318 <li><a href="../MCollective/RunnerStats.html">MCollective::RunnerStats</a></li>
320 <li><a href="../MCollective/SSL.html">MCollective::SSL</a></li>
322 <li><a href="../MCollective/Security.html">MCollective::Security</a></li>
324 <li><a href="../MCollective/Security/Base.html">MCollective::Security::Base</a></li>
326 <li><a href="../MCollective/SecurityValidationFailed.html">MCollective::SecurityValidationFailed</a></li>
328 <li><a href="../MCollective/Shell.html">MCollective::Shell</a></li>
330 <li><a href="../MCollective/Translatable.html">MCollective::Translatable</a></li>
332 <li><a href="../MCollective/UnixDaemon.html">MCollective::UnixDaemon</a></li>
334 <li><a href="../MCollective/UnknownRPCAction.html">MCollective::UnknownRPCAction</a></li>
336 <li><a href="../MCollective/UnknownRPCError.html">MCollective::UnknownRPCError</a></li>
338 <li><a href="../MCollective/Util.html">MCollective::Util</a></li>
340 <li><a href="../MCollective/Validator.html">MCollective::Validator</a></li>
342 <li><a href="../MCollective/ValidatorError.html">MCollective::ValidatorError</a></li>
344 <li><a href="../MCollective/WindowsDaemon.html">MCollective::WindowsDaemon</a></li>
346 <li><a href="../Array.html">Array</a></li>
348 <li><a href="../Dir.html">Dir</a></li>
350 <li><a href="../Object.html">Object</a></li>
352 <li><a href="../String.html">String</a></li>
354 <li><a href="../Symbol.html">Symbol</a></li>
357 <div id="no-class-search-results" style="display: none;">No matching classes.</div>
364 <div id="documentation">
365 <h1 class="class">MCollective::SSL</h1>
367 <div id="description">
369 A class that assists in encrypting and decrypting data using a combination
373 <a href="Data.html">Data</a> will be AES encrypted for speed, the Key used
374 in # the AES stage will be encrypted using RSA
377 ssl = SSL.new(public_key, private_key, passphrase)
379 data = File.read("largefile.dat")
381 crypted_data = ssl.encrypt_with_private(data)
386 This will result in a hash of data like:
389 crypted = {:key => "crd4NHvG....=",
390 :data => "XWXlqN+i...=="}
393 The key and data will all be base 64 encoded already by default you can
394 pass a 2nd parameter as false to <a
395 href="SSL.html#M000206">encrypt_with_private</a> and counterparts that will
396 prevent the base 64 encoding
399 You can pass the data hash into ssl.decrypt_with_public which should return
403 There are matching methods for using a public key to encrypt data to be
404 decrypted using a private key
414 <div id="attribute-method-details" class="method-section section">
415 <h3 class="section-header">Attributes</h3>
418 <div id="public-key-file-attribute-method" class="method-detail">
419 <a name="public_key_file"></a>
421 <div class="method-heading attribute-method-heading">
422 <span class="method-name">public_key_file</span><span
423 class="attribute-access-type">[R]</span>
426 <div class="method-description">
428 <p class="missing-docs">(Not documented)</p>
433 <div id="private-key-file-attribute-method" class="method-detail">
434 <a name="private_key_file"></a>
436 <div class="method-heading attribute-method-heading">
437 <span class="method-name">private_key_file</span><span
438 class="attribute-access-type">[R]</span>
441 <div class="method-description">
443 <p class="missing-docs">(Not documented)</p>
448 <div id="ssl-cipher-attribute-method" class="method-detail">
449 <a name="ssl_cipher"></a>
451 <div class="method-heading attribute-method-heading">
452 <span class="method-name">ssl_cipher</span><span
453 class="attribute-access-type">[R]</span>
456 <div class="method-description">
458 <p class="missing-docs">(Not documented)</p>
468 <div id="public-class-method-details" class="method-section section">
469 <h3 class="section-header">Public Class Methods</h3>
472 <div id="base-decode-method" class="method-detail ">
473 <a name="M000220"></a>
475 <div class="method-heading">
477 <span class="method-name">base64_decode</span><span
478 class="method-args">(string)</span>
479 <span class="method-click-advice">click to toggle source</span>
483 <div class="method-description">
485 <p class="missing-docs">(Not documented)</p>
489 <div class="method-source-code"
490 id="base-decode-source">
492 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 195</span>
493 195: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">string</span>)
494 196: <span class="ruby-constant">Base64</span>.<span class="ruby-identifier">decode64</span>(<span class="ruby-identifier">string</span>)
495 197: <span class="ruby-keyword kw">end</span></pre>
504 <div id="base-encode-method" class="method-detail ">
505 <a name="M000218"></a>
507 <div class="method-heading">
509 <span class="method-name">base64_encode</span><span
510 class="method-args">(string)</span>
511 <span class="method-click-advice">click to toggle source</span>
515 <div class="method-description">
517 <p class="missing-docs">(Not documented)</p>
521 <div class="method-source-code"
522 id="base-encode-source">
524 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 186</span>
525 186: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">string</span>)
526 187: <span class="ruby-constant">Base64</span>.<span class="ruby-identifier">encode64</span>(<span class="ruby-identifier">string</span>)
527 188: <span class="ruby-keyword kw">end</span></pre>
536 <div id="md--method" class="method-detail ">
537 <a name="M000222"></a>
539 <div class="method-heading">
541 <span class="method-name">md5</span><span
542 class="method-args">(string)</span>
543 <span class="method-click-advice">click to toggle source</span>
547 <div class="method-description">
549 <p class="missing-docs">(Not documented)</p>
553 <div class="method-source-code"
556 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 203</span>
557 203: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">md5</span>(<span class="ruby-identifier">string</span>)
558 204: <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">MD5</span>.<span class="ruby-identifier">hexdigest</span>(<span class="ruby-identifier">string</span>)
559 205: <span class="ruby-keyword kw">end</span></pre>
568 <div id="new-method" class="method-detail ">
569 <a name="M000203"></a>
571 <div class="method-heading">
573 <span class="method-name">new</span><span
574 class="method-args">(pubkey=nil, privkey=nil, passphrase=nil, cipher=nil)</span>
575 <span class="method-click-advice">click to toggle source</span>
579 <div class="method-description">
581 <p class="missing-docs">(Not documented)</p>
585 <div class="method-source-code"
588 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 37</span>
589 37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">pubkey</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">privkey</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">passphrase</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">cipher</span>=<span class="ruby-keyword kw">nil</span>)
590 38: <span class="ruby-ivar">@public_key_file</span> = <span class="ruby-identifier">pubkey</span>
591 39: <span class="ruby-ivar">@private_key_file</span> = <span class="ruby-identifier">privkey</span>
593 41: <span class="ruby-ivar">@public_key</span> = <span class="ruby-identifier">read_key</span>(<span class="ruby-identifier">:public</span>, <span class="ruby-identifier">pubkey</span>)
594 42: <span class="ruby-ivar">@private_key</span> = <span class="ruby-identifier">read_key</span>(<span class="ruby-identifier">:private</span>, <span class="ruby-identifier">privkey</span>, <span class="ruby-identifier">passphrase</span>)
596 44: <span class="ruby-ivar">@ssl_cipher</span> = <span class="ruby-value str">"aes-256-cbc"</span>
597 45: <span class="ruby-ivar">@ssl_cipher</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">ssl_cipher</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">ssl_cipher</span>
598 46: <span class="ruby-ivar">@ssl_cipher</span> = <span class="ruby-identifier">cipher</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cipher</span>
600 48: <span class="ruby-identifier">raise</span> <span class="ruby-node">"The supplied cipher '#{@ssl_cipher}' is not supported"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Cipher</span>.<span class="ruby-identifier">ciphers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@ssl_cipher</span>)
601 49: <span class="ruby-keyword kw">end</span></pre>
610 <div id="uuid-method" class="method-detail ">
611 <a name="M000223"></a>
613 <div class="method-heading">
615 <span class="method-name">uuid</span><span
616 class="method-args">(string=nil)</span>
617 <span class="method-click-advice">click to toggle source</span>
621 <div class="method-description">
624 Creates a RFC 4122 version 5 UUID. If string is supplied it will produce
625 repeatable UUIDs for that string else a random 128bit string will be used
629 Code used with permission from:
632 https://github.com/kwilczynski/puppet-functions/blob/master/lib/puppet/parser/functions/uuid.rb
637 <div class="method-source-code"
640 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 213</span>
641 213: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">uuid</span>(<span class="ruby-identifier">string</span>=<span class="ruby-keyword kw">nil</span>)
642 214: <span class="ruby-identifier">string</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Random</span>.<span class="ruby-identifier">random_bytes</span>(<span class="ruby-value">16</span>).<span class="ruby-identifier">unpack</span>(<span class="ruby-value str">'H*'</span>).<span class="ruby-identifier">shift</span>
644 216: <span class="ruby-identifier">uuid_name_space_dns</span> = <span class="ruby-value str">"\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8"</span>
646 218: <span class="ruby-identifier">sha1</span> = <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">SHA1</span>.<span class="ruby-identifier">new</span>
647 219: <span class="ruby-identifier">sha1</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">uuid_name_space_dns</span>)
648 220: <span class="ruby-identifier">sha1</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">string</span>)
650 222: <span class="ruby-comment cmt"># first 16 bytes..</span>
651 223: <span class="ruby-identifier">bytes</span> = <span class="ruby-identifier">sha1</span>.<span class="ruby-identifier">digest</span>[<span class="ruby-value">0</span>, <span class="ruby-value">16</span>].<span class="ruby-identifier">bytes</span>.<span class="ruby-identifier">to_a</span>
653 225: <span class="ruby-comment cmt"># version 5 adjustments</span>
654 226: <span class="ruby-identifier">bytes</span>[<span class="ruby-value">6</span>] <span class="ruby-operator">&=</span> <span class="ruby-value">0x0f</span>
655 227: <span class="ruby-identifier">bytes</span>[<span class="ruby-value">6</span>] <span class="ruby-operator">|=</span> <span class="ruby-value">0x50</span>
657 229: <span class="ruby-comment cmt"># variant is DCE 1.1</span>
658 230: <span class="ruby-identifier">bytes</span>[<span class="ruby-value">8</span>] <span class="ruby-operator">&=</span> <span class="ruby-value">0x3f</span>
659 231: <span class="ruby-identifier">bytes</span>[<span class="ruby-value">8</span>] <span class="ruby-operator">|=</span> <span class="ruby-value">0x80</span>
661 233: <span class="ruby-identifier">bytes</span> = [<span class="ruby-value">4</span>, <span class="ruby-value">2</span>, <span class="ruby-value">2</span>, <span class="ruby-value">2</span>, <span class="ruby-value">6</span>].<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
662 234: <span class="ruby-identifier">bytes</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">i</span>).<span class="ruby-identifier">pack</span>(<span class="ruby-value str">'C*'</span>).<span class="ruby-identifier">unpack</span>(<span class="ruby-value str">'H*'</span>)
663 235: <span class="ruby-keyword kw">end</span>
665 237: <span class="ruby-identifier">bytes</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'-'</span>)
666 238: <span class="ruby-keyword kw">end</span></pre>
677 <div id="public-instance-method-details" class="method-section section">
678 <h3 class="section-header">Public Instance Methods</h3>
681 <div id="aes-decrypt-method" class="method-detail ">
682 <a name="M000214"></a>
684 <div class="method-heading">
686 <span class="method-name">aes_decrypt</span><span
687 class="method-args">(key, crypt_string)</span>
688 <span class="method-click-advice">click to toggle source</span>
692 <div class="method-description">
695 decrypts a string given key, iv and data
700 <div class="method-source-code"
701 id="aes-decrypt-source">
703 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 158</span>
704 158: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">aes_decrypt</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">crypt_string</span>)
705 159: <span class="ruby-identifier">cipher</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Cipher</span><span class="ruby-operator">::</span><span class="ruby-constant">Cipher</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">ssl_cipher</span>)
707 161: <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">decrypt</span>
708 162: <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">key</span> = <span class="ruby-identifier">key</span>
709 163: <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">pkcs5_keyivgen</span>(<span class="ruby-identifier">key</span>)
710 164: <span class="ruby-identifier">decrypted_data</span> = <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">crypt_string</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">final</span>
711 165: <span class="ruby-keyword kw">end</span></pre>
720 <div id="aes-encrypt-method" class="method-detail ">
721 <a name="M000213"></a>
723 <div class="method-heading">
725 <span class="method-name">aes_encrypt</span><span
726 class="method-args">(plain_string)</span>
727 <span class="method-click-advice">click to toggle source</span>
731 <div class="method-description">
734 encrypts a string, returns a hash of key, iv and data
739 <div class="method-source-code"
740 id="aes-encrypt-source">
742 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 144</span>
743 144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">aes_encrypt</span>(<span class="ruby-identifier">plain_string</span>)
744 145: <span class="ruby-identifier">cipher</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Cipher</span><span class="ruby-operator">::</span><span class="ruby-constant">Cipher</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">ssl_cipher</span>)
745 146: <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">encrypt</span>
747 148: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">random_key</span>
749 150: <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">key</span> = <span class="ruby-identifier">key</span>
750 151: <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">pkcs5_keyivgen</span>(<span class="ruby-identifier">key</span>)
751 152: <span class="ruby-identifier">encrypted_data</span> = <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">plain_string</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">final</span>
753 154: {<span class="ruby-identifier">:key</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:data</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">encrypted_data</span>}
754 155: <span class="ruby-keyword kw">end</span></pre>
763 <div id="base-decode-method" class="method-detail ">
764 <a name="M000219"></a>
766 <div class="method-heading">
768 <span class="method-name">base64_decode</span><span
769 class="method-args">(string)</span>
770 <span class="method-click-advice">click to toggle source</span>
774 <div class="method-description">
777 base 64 decode a string
782 <div class="method-source-code"
783 id="base-decode-source">
785 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 191</span>
786 191: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">string</span>)
787 192: <span class="ruby-constant">SSL</span>.<span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">string</span>)
788 193: <span class="ruby-keyword kw">end</span></pre>
797 <div id="base-encode-method" class="method-detail ">
798 <a name="M000217"></a>
800 <div class="method-heading">
802 <span class="method-name">base64_encode</span><span
803 class="method-args">(string)</span>
804 <span class="method-click-advice">click to toggle source</span>
808 <div class="method-description">
811 base 64 encode a string
816 <div class="method-source-code"
817 id="base-encode-source">
819 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 182</span>
820 182: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">string</span>)
821 183: <span class="ruby-constant">SSL</span>.<span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">string</span>)
822 184: <span class="ruby-keyword kw">end</span></pre>
831 <div id="decrypt-with-private-method" class="method-detail ">
832 <a name="M000207"></a>
834 <div class="method-heading">
836 <span class="method-name">decrypt_with_private</span><span
837 class="method-args">(crypted, base64=true)</span>
838 <span class="method-click-advice">click to toggle source</span>
842 <div class="method-description">
845 Decrypts data, expects a hash as create with crypt_with_public
850 <div class="method-source-code"
851 id="decrypt-with-private-source">
853 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 88</span>
854 88: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">decrypt_with_private</span>(<span class="ruby-identifier">crypted</span>, <span class="ruby-identifier">base64</span>=<span class="ruby-keyword kw">true</span>)
855 89: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Crypted data should include a key"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">crypted</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:key</span>)
856 90: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Crypted data should include data"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">crypted</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:data</span>)
858 92: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
859 93: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">rsa_decrypt_with_private</span>(<span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>]))
860 94: <span class="ruby-identifier">aes_decrypt</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>]))
861 95: <span class="ruby-keyword kw">else</span>
862 96: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">rsa_decrypt_with_private</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>])
863 97: <span class="ruby-identifier">aes_decrypt</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>])
864 98: <span class="ruby-keyword kw">end</span>
865 99: <span class="ruby-keyword kw">end</span></pre>
874 <div id="decrypt-with-public-method" class="method-detail ">
875 <a name="M000208"></a>
877 <div class="method-heading">
879 <span class="method-name">decrypt_with_public</span><span
880 class="method-args">(crypted, base64=true)</span>
881 <span class="method-click-advice">click to toggle source</span>
885 <div class="method-description">
888 Decrypts data, expects a hash as create with crypt_with_private
893 <div class="method-source-code"
894 id="decrypt-with-public-source">
896 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 102</span>
897 102: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">decrypt_with_public</span>(<span class="ruby-identifier">crypted</span>, <span class="ruby-identifier">base64</span>=<span class="ruby-keyword kw">true</span>)
898 103: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Crypted data should include a key"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">crypted</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:key</span>)
899 104: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Crypted data should include data"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">crypted</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:data</span>)
901 106: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
902 107: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">rsa_decrypt_with_public</span>(<span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>]))
903 108: <span class="ruby-identifier">aes_decrypt</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>]))
904 109: <span class="ruby-keyword kw">else</span>
905 110: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">rsa_decrypt_with_public</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>])
906 111: <span class="ruby-identifier">aes_decrypt</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>])
907 112: <span class="ruby-keyword kw">end</span>
908 113: <span class="ruby-keyword kw">end</span></pre>
917 <div id="encrypt-with-private-method" class="method-detail ">
918 <a name="M000206"></a>
920 <div class="method-heading">
922 <span class="method-name">encrypt_with_private</span><span
923 class="method-args">(plain_text, base64=true)</span>
924 <span class="method-click-advice">click to toggle source</span>
928 <div class="method-description">
931 Encrypts supplied data using AES and then encrypts using RSA the key and IV
934 Return a hash with everything optionally base 64 encoded
939 <div class="method-source-code"
940 id="encrypt-with-private-source">
942 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 73</span>
943 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">encrypt_with_private</span>(<span class="ruby-identifier">plain_text</span>, <span class="ruby-identifier">base64</span>=<span class="ruby-keyword kw">true</span>)
944 74: <span class="ruby-identifier">crypted</span> = <span class="ruby-identifier">aes_encrypt</span>(<span class="ruby-identifier">plain_text</span>)
946 76: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
947 77: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">rsa_encrypt_with_private</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>]))
948 78: <span class="ruby-identifier">data</span> = <span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>])
949 79: <span class="ruby-keyword kw">else</span>
950 80: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">rsa_encrypt_with_private</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>])
951 81: <span class="ruby-identifier">data</span> = <span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>]
952 82: <span class="ruby-keyword kw">end</span>
954 84: {<span class="ruby-identifier">:key</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:data</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">data</span>}
955 85: <span class="ruby-keyword kw">end</span></pre>
964 <div id="encrypt-with-public-method" class="method-detail ">
965 <a name="M000205"></a>
967 <div class="method-heading">
969 <span class="method-name">encrypt_with_public</span><span
970 class="method-args">(plain_text, base64=true)</span>
971 <span class="method-click-advice">click to toggle source</span>
975 <div class="method-description">
978 Encrypts supplied data using AES and then encrypts using RSA the key and IV
981 Return a hash with everything optionally base 64 encoded
986 <div class="method-source-code"
987 id="encrypt-with-public-source">
989 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 55</span>
990 55: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">encrypt_with_public</span>(<span class="ruby-identifier">plain_text</span>, <span class="ruby-identifier">base64</span>=<span class="ruby-keyword kw">true</span>)
991 56: <span class="ruby-identifier">crypted</span> = <span class="ruby-identifier">aes_encrypt</span>(<span class="ruby-identifier">plain_text</span>)
993 58: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
994 59: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">rsa_encrypt_with_public</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>]))
995 60: <span class="ruby-identifier">data</span> = <span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>])
996 61: <span class="ruby-keyword kw">else</span>
997 62: <span class="ruby-identifier">key</span> = <span class="ruby-identifier">rsa_encrypt_with_public</span>(<span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:key</span>])
998 63: <span class="ruby-identifier">data</span> = <span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>]
999 64: <span class="ruby-keyword kw">end</span>
1001 66: {<span class="ruby-identifier">:key</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:data</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">data</span>}
1002 67: <span class="ruby-keyword kw">end</span></pre>
1011 <div id="md--method" class="method-detail ">
1012 <a name="M000221"></a>
1014 <div class="method-heading">
1016 <span class="method-name">md5</span><span
1017 class="method-args">(string)</span>
1018 <span class="method-click-advice">click to toggle source</span>
1022 <div class="method-description">
1024 <p class="missing-docs">(Not documented)</p>
1028 <div class="method-source-code"
1031 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 199</span>
1032 199: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">md5</span>(<span class="ruby-identifier">string</span>)
1033 200: <span class="ruby-constant">SSL</span>.<span class="ruby-identifier">md5</span>(<span class="ruby-identifier">string</span>)
1034 201: <span class="ruby-keyword kw">end</span></pre>
1043 <div id="read-key-method" class="method-detail ">
1044 <a name="M000224"></a>
1046 <div class="method-heading">
1048 <span class="method-name">read_key</span><span
1049 class="method-args">(type, key=nil, passphrase=nil)</span>
1050 <span class="method-click-advice">click to toggle source</span>
1054 <div class="method-description">
1057 Reads either a :public or :private key from disk, uses an optional
1058 passphrase to read the private key
1063 <div class="method-source-code"
1064 id="read-key-source">
1066 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 242</span>
1067 242: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read_key</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">key</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">passphrase</span>=<span class="ruby-keyword kw">nil</span>)
1068 243: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">key</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">key</span>.<span class="ruby-identifier">nil?</span>
1070 245: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Could not find key #{key}"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">key</span>)
1071 246: <span class="ruby-identifier">raise</span> <span class="ruby-node">"#{type} key file '#{key}' is empty"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">zero?</span>(<span class="ruby-identifier">key</span>)
1073 248: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:public</span>
1074 249: <span class="ruby-keyword kw">begin</span>
1075 250: <span class="ruby-identifier">key</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">PKey</span><span class="ruby-operator">::</span><span class="ruby-constant">RSA</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">key</span>))
1076 251: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">PKey</span><span class="ruby-operator">::</span><span class="ruby-constant">RSAError</span>
1077 252: <span class="ruby-identifier">key</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">X509</span><span class="ruby-operator">::</span><span class="ruby-constant">Certificate</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">key</span>)).<span class="ruby-identifier">public_key</span>
1078 253: <span class="ruby-keyword kw">end</span>
1080 255: <span class="ruby-comment cmt"># Ruby < 1.9.3 had a bug where it does not correctly clear the</span>
1081 256: <span class="ruby-comment cmt"># queue of errors while reading a key. It tries various ways</span>
1082 257: <span class="ruby-comment cmt"># to read the key and each failing attempt pushes an error onto</span>
1083 258: <span class="ruby-comment cmt"># the queue. With pubkeys only the 3rd attempt pass leaving 2</span>
1084 259: <span class="ruby-comment cmt"># stale errors on the error queue.</span>
1085 260: <span class="ruby-comment cmt">#</span>
1086 261: <span class="ruby-comment cmt"># In 1.9.3 they fixed this by simply discarding the errors after</span>
1087 262: <span class="ruby-comment cmt"># every attempt. So we simulate this fix here for older rubies</span>
1088 263: <span class="ruby-comment cmt"># as without it we get SSL_read errors from the Stomp+TLS sessions</span>
1089 264: <span class="ruby-comment cmt">#</span>
1090 265: <span class="ruby-comment cmt"># We do this only on 1.8 relying on 1.9.3 to do the right thing</span>
1091 266: <span class="ruby-comment cmt"># and we do not support 1.9 less than 1.9.3</span>
1092 267: <span class="ruby-comment cmt">#</span>
1093 268: <span class="ruby-comment cmt"># See http://bugs.ruby-lang.org/issues/4550</span>
1094 269: <span class="ruby-constant">OpenSSL</span>.<span class="ruby-identifier">errors</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">ruby_version</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^1.8/</span>
1096 271: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">key</span>
1097 272: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:private</span>
1098 273: <span class="ruby-keyword kw">return</span> <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">PKey</span><span class="ruby-operator">::</span><span class="ruby-constant">RSA</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">key</span>), <span class="ruby-identifier">passphrase</span>)
1099 274: <span class="ruby-keyword kw">else</span>
1100 275: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Can only load :public or :private keys"</span>
1101 276: <span class="ruby-keyword kw">end</span>
1102 277: <span class="ruby-keyword kw">end</span></pre>
1111 <div id="rsa-decrypt-with-private-method" class="method-detail ">
1112 <a name="M000210"></a>
1114 <div class="method-heading">
1116 <span class="method-name">rsa_decrypt_with_private</span><span
1117 class="method-args">(crypt_string)</span>
1118 <span class="method-click-advice">click to toggle source</span>
1122 <div class="method-description">
1125 Use the private key to RSA decrypt data
1130 <div class="method-source-code"
1131 id="rsa-decrypt-with-private-source">
1133 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 123</span>
1134 123: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_decrypt_with_private</span>(<span class="ruby-identifier">crypt_string</span>)
1135 124: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"No private key set"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@private_key</span>
1137 126: <span class="ruby-ivar">@private_key</span>.<span class="ruby-identifier">private_decrypt</span>(<span class="ruby-identifier">crypt_string</span>)
1138 127: <span class="ruby-keyword kw">end</span></pre>
1147 <div id="rsa-decrypt-with-public-method" class="method-detail ">
1148 <a name="M000212"></a>
1150 <div class="method-heading">
1152 <span class="method-name">rsa_decrypt_with_public</span><span
1153 class="method-args">(crypt_string)</span>
1154 <span class="method-click-advice">click to toggle source</span>
1158 <div class="method-description">
1161 Use the public key to RSA decrypt data
1166 <div class="method-source-code"
1167 id="rsa-decrypt-with-public-source">
1169 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 137</span>
1170 137: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_decrypt_with_public</span>(<span class="ruby-identifier">crypt_string</span>)
1171 138: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"No public key set"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@public_key</span>
1173 140: <span class="ruby-ivar">@public_key</span>.<span class="ruby-identifier">public_decrypt</span>(<span class="ruby-identifier">crypt_string</span>)
1174 141: <span class="ruby-keyword kw">end</span></pre>
1183 <div id="rsa-encrypt-with-private-method" class="method-detail ">
1184 <a name="M000211"></a>
1186 <div class="method-heading">
1188 <span class="method-name">rsa_encrypt_with_private</span><span
1189 class="method-args">(plain_string)</span>
1190 <span class="method-click-advice">click to toggle source</span>
1194 <div class="method-description">
1197 Use the private key to RSA encrypt data
1202 <div class="method-source-code"
1203 id="rsa-encrypt-with-private-source">
1205 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 130</span>
1206 130: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_encrypt_with_private</span>(<span class="ruby-identifier">plain_string</span>)
1207 131: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"No private key set"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@private_key</span>
1209 133: <span class="ruby-ivar">@private_key</span>.<span class="ruby-identifier">private_encrypt</span>(<span class="ruby-identifier">plain_string</span>)
1210 134: <span class="ruby-keyword kw">end</span></pre>
1219 <div id="rsa-encrypt-with-public-method" class="method-detail ">
1220 <a name="M000209"></a>
1222 <div class="method-heading">
1224 <span class="method-name">rsa_encrypt_with_public</span><span
1225 class="method-args">(plain_string)</span>
1226 <span class="method-click-advice">click to toggle source</span>
1230 <div class="method-description">
1233 Use the public key to RSA encrypt data
1238 <div class="method-source-code"
1239 id="rsa-encrypt-with-public-source">
1241 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 116</span>
1242 116: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_encrypt_with_public</span>(<span class="ruby-identifier">plain_string</span>)
1243 117: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"No public key set"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@public_key</span>
1245 119: <span class="ruby-ivar">@public_key</span>.<span class="ruby-identifier">public_encrypt</span>(<span class="ruby-identifier">plain_string</span>)
1246 120: <span class="ruby-keyword kw">end</span></pre>
1255 <div id="sign-method" class="method-detail ">
1256 <a name="M000215"></a>
1258 <div class="method-heading">
1260 <span class="method-name">sign</span><span
1261 class="method-args">(string, base64=false)</span>
1262 <span class="method-click-advice">click to toggle source</span>
1266 <div class="method-description">
1269 Signs a string using the private key
1274 <div class="method-source-code"
1277 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 168</span>
1278 168: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sign</span>(<span class="ruby-identifier">string</span>, <span class="ruby-identifier">base64</span>=<span class="ruby-keyword kw">false</span>)
1279 169: <span class="ruby-identifier">sig</span> = <span class="ruby-ivar">@private_key</span>.<span class="ruby-identifier">sign</span>(<span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">SHA1</span>.<span class="ruby-identifier">new</span>, <span class="ruby-identifier">string</span>)
1281 171: <span class="ruby-identifier">base64</span> <span class="ruby-value">? </span><span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">sig</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">sig</span>
1282 172: <span class="ruby-keyword kw">end</span></pre>
1291 <div id="verify-signature-method" class="method-detail ">
1292 <a name="M000216"></a>
1294 <div class="method-heading">
1296 <span class="method-name">verify_signature</span><span
1297 class="method-args">(signature, string, base64=false)</span>
1298 <span class="method-click-advice">click to toggle source</span>
1302 <div class="method-description">
1305 Using the public key verifies that a string was signed using the private
1311 <div class="method-source-code"
1312 id="verify-signature-source">
1314 <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 175</span>
1315 175: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">verify_signature</span>(<span class="ruby-identifier">signature</span>, <span class="ruby-identifier">string</span>, <span class="ruby-identifier">base64</span>=<span class="ruby-keyword kw">false</span>)
1316 176: <span class="ruby-identifier">signature</span> = <span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">signature</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
1318 178: <span class="ruby-ivar">@public_key</span>.<span class="ruby-identifier">verify</span>(<span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">SHA1</span>.<span class="ruby-identifier">new</span>, <span class="ruby-identifier">signature</span>, <span class="ruby-identifier">string</span>)
1319 179: <span class="ruby-keyword kw">end</span></pre>
1334 <div id="rdoc-debugging-section-dump" class="debugging-section">
1336 <p>Disabled; run with --debug to generate this.</p>
1340 <div id="validator-badges">
1341 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1342 <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
1343 Rdoc Generator</a> 1.1.6</small>.</p>