Update version according to OSCI-936
[packages/precise/mcollective.git] / doc / MCollective / SSL.html
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">
5 <head>
6         <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
8         <title>Class: MCollective::SSL</title>
9
10         <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
11
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>
20
21 </head>
22 <body class="class">
23
24         <div id="metadata">
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">
29                                         <ul>
30                                         
31                                                 <li><a href="../lib/mcollective/ssl_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
32                                                         class="thickbox" title="lib/mcollective/ssl.rb">lib/mcollective/ssl.rb</a></li>
33                                         
34                                         </ul>
35                                 </div>
36                         </div>
37
38                         
39                 </div>
40
41                 <div id="class-metadata">
42
43                         <!-- Parent Class -->
44                         
45                         <div id="parent-class-section" class="section">
46                                 <h3 class="section-header">Parent</h3>
47                                 
48                                 <p class="link"><a href="../Object.html">Object</a></p>
49                                 
50                         </div>
51                         
52
53                         <!-- Namespace Contents -->
54                         
55
56                         <!-- Method Quickref -->
57                         
58                         <div id="method-list-section" class="section">
59                                 <h3 class="section-header">Methods</h3>
60                                 <ul class="link-list">
61                                         
62                                         <li><a href="#M000220">::base64_decode</a></li>
63                                         
64                                         <li><a href="#M000218">::base64_encode</a></li>
65                                         
66                                         <li><a href="#M000222">::md5</a></li>
67                                         
68                                         <li><a href="#M000203">::new</a></li>
69                                         
70                                         <li><a href="#M000223">::uuid</a></li>
71                                         
72                                         <li><a href="#M000214">#aes_decrypt</a></li>
73                                         
74                                         <li><a href="#M000213">#aes_encrypt</a></li>
75                                         
76                                         <li><a href="#M000219">#base64_decode</a></li>
77                                         
78                                         <li><a href="#M000217">#base64_encode</a></li>
79                                         
80                                         <li><a href="#M000207">#decrypt_with_private</a></li>
81                                         
82                                         <li><a href="#M000208">#decrypt_with_public</a></li>
83                                         
84                                         <li><a href="#M000206">#encrypt_with_private</a></li>
85                                         
86                                         <li><a href="#M000205">#encrypt_with_public</a></li>
87                                         
88                                         <li><a href="#M000221">#md5</a></li>
89                                         
90                                         <li><a href="#M000224">#read_key</a></li>
91                                         
92                                         <li><a href="#M000210">#rsa_decrypt_with_private</a></li>
93                                         
94                                         <li><a href="#M000212">#rsa_decrypt_with_public</a></li>
95                                         
96                                         <li><a href="#M000211">#rsa_encrypt_with_private</a></li>
97                                         
98                                         <li><a href="#M000209">#rsa_encrypt_with_public</a></li>
99                                         
100                                         <li><a href="#M000215">#sign</a></li>
101                                         
102                                         <li><a href="#M000216">#verify_signature</a></li>
103                                         
104                                 </ul>
105                         </div>
106                         
107
108                         <!-- Included Modules -->
109                         
110                 </div>
111
112                 <div id="project-metadata">
113                         
114                         
115                         <div id="fileindex-section" class="section project-section">
116                                 <h3 class="section-header">Files</h3>
117                                 <ul>
118                                 
119                                         <li class="file"><a href="../COPYING.html">COPYING</a></li>
120                                 
121                                         <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
122                                 
123                                         <li class="file"><a href="../README.html">README</a></li>
124                                 
125                                         <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
126                                 
127                                         <li class="file"><a href="../etc/client_cfg_dist.html">client.cfg.dist</a></li>
128                                 
129                                         <li class="file"><a href="../etc/data-help_erb.html">data-help.erb</a></li>
130                                 
131                                         <li class="file"><a href="../etc/discovery-help_erb.html">discovery-help.erb</a></li>
132                                 
133                                         <li class="file"><a href="../etc/facts_yaml_dist.html">facts.yaml.dist</a></li>
134                                 
135                                         <li class="file"><a href="../etc/metadata-help_erb.html">metadata-help.erb</a></li>
136                                 
137                                         <li class="file"><a href="../etc/msg-help_erb.html">msg-help.erb</a></li>
138                                 
139                                         <li class="file"><a href="../etc/rpc-help_erb.html">rpc-help.erb</a></li>
140                                 
141                                         <li class="file"><a href="../etc/server_cfg_dist.html">server.cfg.dist</a></li>
142                                 
143                                         <li class="file"><a href="../etc/ssl/PLACEHOLDER.html">PLACEHOLDER</a></li>
144                                 
145                                         <li class="file"><a href="../etc/ssl/clients/PLACEHOLDER.html">PLACEHOLDER</a></li>
146                                 
147                                         <li class="file"><a href="../lib/mcollective/generators/templates/action_snippet_erb.html">action_snippet.erb</a></li>
148                                 
149                                         <li class="file"><a href="../lib/mcollective/generators/templates/data_input_snippet_erb.html">data_input_snippet.erb</a></li>
150                                 
151                                         <li class="file"><a href="../lib/mcollective/generators/templates/ddl_erb.html">ddl.erb</a></li>
152                                 
153                                         <li class="file"><a href="../lib/mcollective/generators/templates/plugin_erb.html">plugin.erb</a></li>
154                                 
155                                         <li class="file"><a href="../lib/mcollective/locales/en_yml.html">en.yml</a></li>
156                                 
157                                         <li class="file"><a href="../mcollective_init.html">mcollective.init</a></li>
158                                 
159                                 </ul>
160                         </div>
161                         
162
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">
169                                 <fieldset>
170                                         <legend>Quicksearch</legend>
171                                         <input type="text" name="quicksearch" value=""
172                                                 class="quicksearch-field" />
173                                 </fieldset>
174                                 </form>
175
176                                 <ul class="link-list">
177                                 
178                                         <li><a href="../MCollective.html">MCollective</a></li>
179                                 
180                                         <li><a href="../MCollective/Agent.html">MCollective::Agent</a></li>
181                                 
182                                         <li><a href="../MCollective/Agents.html">MCollective::Agents</a></li>
183                                 
184                                         <li><a href="../MCollective/Aggregate.html">MCollective::Aggregate</a></li>
185                                 
186                                         <li><a href="../MCollective/Aggregate/Base.html">MCollective::Aggregate::Base</a></li>
187                                 
188                                         <li><a href="../MCollective/Aggregate/Result.html">MCollective::Aggregate::Result</a></li>
189                                 
190                                         <li><a href="../MCollective/Aggregate/Result/Base.html">MCollective::Aggregate::Result::Base</a></li>
191                                 
192                                         <li><a href="../MCollective/Aggregate/Result/CollectionResult.html">MCollective::Aggregate::Result::CollectionResult</a></li>
193                                 
194                                         <li><a href="../MCollective/Aggregate/Result/NumericResult.html">MCollective::Aggregate::Result::NumericResult</a></li>
195                                 
196                                         <li><a href="../MCollective/Application.html">MCollective::Application</a></li>
197                                 
198                                         <li><a href="../MCollective/Applications.html">MCollective::Applications</a></li>
199                                 
200                                         <li><a href="../MCollective/Cache.html">MCollective::Cache</a></li>
201                                 
202                                         <li><a href="../MCollective/Client.html">MCollective::Client</a></li>
203                                 
204                                         <li><a href="../MCollective/CodedError.html">MCollective::CodedError</a></li>
205                                 
206                                         <li><a href="../MCollective/Config.html">MCollective::Config</a></li>
207                                 
208                                         <li><a href="../MCollective/Connector.html">MCollective::Connector</a></li>
209                                 
210                                         <li><a href="../MCollective/Connector/Base.html">MCollective::Connector::Base</a></li>
211                                 
212                                         <li><a href="../MCollective/DDL.html">MCollective::DDL</a></li>
213                                 
214                                         <li><a href="../MCollective/DDL/AgentDDL.html">MCollective::DDL::AgentDDL</a></li>
215                                 
216                                         <li><a href="../MCollective/DDL/Base.html">MCollective::DDL::Base</a></li>
217                                 
218                                         <li><a href="../MCollective/DDL/DataDDL.html">MCollective::DDL::DataDDL</a></li>
219                                 
220                                         <li><a href="../MCollective/DDL/DiscoveryDDL.html">MCollective::DDL::DiscoveryDDL</a></li>
221                                 
222                                         <li><a href="../MCollective/DDL/ValidatorDDL.html">MCollective::DDL::ValidatorDDL</a></li>
223                                 
224                                         <li><a href="../MCollective/DDLValidationError.html">MCollective::DDLValidationError</a></li>
225                                 
226                                         <li><a href="../MCollective/Data.html">MCollective::Data</a></li>
227                                 
228                                         <li><a href="../MCollective/Data/Base.html">MCollective::Data::Base</a></li>
229                                 
230                                         <li><a href="../MCollective/Data/Result.html">MCollective::Data::Result</a></li>
231                                 
232                                         <li><a href="../MCollective/Discovery.html">MCollective::Discovery</a></li>
233                                 
234                                         <li><a href="../MCollective/Facts.html">MCollective::Facts</a></li>
235                                 
236                                         <li><a href="../MCollective/Facts/Base.html">MCollective::Facts::Base</a></li>
237                                 
238                                         <li><a href="../MCollective/Generators.html">MCollective::Generators</a></li>
239                                 
240                                         <li><a href="../MCollective/Generators/AgentGenerator.html">MCollective::Generators::AgentGenerator</a></li>
241                                 
242                                         <li><a href="../MCollective/Generators/Base.html">MCollective::Generators::Base</a></li>
243                                 
244                                         <li><a href="../MCollective/Generators/DataGenerator.html">MCollective::Generators::DataGenerator</a></li>
245                                 
246                                         <li><a href="../MCollective/InvalidRPCData.html">MCollective::InvalidRPCData</a></li>
247                                 
248                                         <li><a href="../MCollective/Log.html">MCollective::Log</a></li>
249                                 
250                                         <li><a href="../MCollective/Logger.html">MCollective::Logger</a></li>
251                                 
252                                         <li><a href="../MCollective/Logger/Base.html">MCollective::Logger::Base</a></li>
253                                 
254                                         <li><a href="../MCollective/Logger/Console_logger.html">MCollective::Logger::Console_logger</a></li>
255                                 
256                                         <li><a href="../MCollective/Logger/File_logger.html">MCollective::Logger::File_logger</a></li>
257                                 
258                                         <li><a href="../MCollective/Logger/Syslog_logger.html">MCollective::Logger::Syslog_logger</a></li>
259                                 
260                                         <li><a href="../MCollective/Matcher.html">MCollective::Matcher</a></li>
261                                 
262                                         <li><a href="../MCollective/Matcher/Parser.html">MCollective::Matcher::Parser</a></li>
263                                 
264                                         <li><a href="../MCollective/Matcher/Scanner.html">MCollective::Matcher::Scanner</a></li>
265                                 
266                                         <li><a href="../MCollective/Message.html">MCollective::Message</a></li>
267                                 
268                                         <li><a href="../MCollective/MissingRPCData.html">MCollective::MissingRPCData</a></li>
269                                 
270                                         <li><a href="../MCollective/MsgDoesNotMatchRequestID.html">MCollective::MsgDoesNotMatchRequestID</a></li>
271                                 
272                                         <li><a href="../MCollective/MsgTTLExpired.html">MCollective::MsgTTLExpired</a></li>
273                                 
274                                         <li><a href="../MCollective/NotTargettedAtUs.html">MCollective::NotTargettedAtUs</a></li>
275                                 
276                                         <li><a href="../MCollective/Optionparser.html">MCollective::Optionparser</a></li>
277                                 
278                                         <li><a href="../MCollective/PluginManager.html">MCollective::PluginManager</a></li>
279                                 
280                                         <li><a href="../MCollective/PluginPackager.html">MCollective::PluginPackager</a></li>
281                                 
282                                         <li><a href="../MCollective/PluginPackager/AgentDefinition.html">MCollective::PluginPackager::AgentDefinition</a></li>
283                                 
284                                         <li><a href="../MCollective/PluginPackager/StandardDefinition.html">MCollective::PluginPackager::StandardDefinition</a></li>
285                                 
286                                         <li><a href="../MCollective/RPC.html">MCollective::RPC</a></li>
287                                 
288                                         <li><a href="../MCollective/RPC/ActionRunner.html">MCollective::RPC::ActionRunner</a></li>
289                                 
290                                         <li><a href="../MCollective/RPC/Agent.html">MCollective::RPC::Agent</a></li>
291                                 
292                                         <li><a href="../MCollective/RPC/Audit.html">MCollective::RPC::Audit</a></li>
293                                 
294                                         <li><a href="../MCollective/RPC/Client.html">MCollective::RPC::Client</a></li>
295                                 
296                                         <li><a href="../MCollective/RPC/Helpers.html">MCollective::RPC::Helpers</a></li>
297                                 
298                                         <li><a href="../MCollective/RPC/Progress.html">MCollective::RPC::Progress</a></li>
299                                 
300                                         <li><a href="../MCollective/RPC/Reply.html">MCollective::RPC::Reply</a></li>
301                                 
302                                         <li><a href="../MCollective/RPC/Request.html">MCollective::RPC::Request</a></li>
303                                 
304                                         <li><a href="../MCollective/RPC/Result.html">MCollective::RPC::Result</a></li>
305                                 
306                                         <li><a href="../MCollective/RPC/Stats.html">MCollective::RPC::Stats</a></li>
307                                 
308                                         <li><a href="../MCollective/RPCAborted.html">MCollective::RPCAborted</a></li>
309                                 
310                                         <li><a href="../MCollective/RPCError.html">MCollective::RPCError</a></li>
311                                 
312                                         <li><a href="../MCollective/Registration.html">MCollective::Registration</a></li>
313                                 
314                                         <li><a href="../MCollective/Registration/Base.html">MCollective::Registration::Base</a></li>
315                                 
316                                         <li><a href="../MCollective/Runner.html">MCollective::Runner</a></li>
317                                 
318                                         <li><a href="../MCollective/RunnerStats.html">MCollective::RunnerStats</a></li>
319                                 
320                                         <li><a href="../MCollective/SSL.html">MCollective::SSL</a></li>
321                                 
322                                         <li><a href="../MCollective/Security.html">MCollective::Security</a></li>
323                                 
324                                         <li><a href="../MCollective/Security/Base.html">MCollective::Security::Base</a></li>
325                                 
326                                         <li><a href="../MCollective/SecurityValidationFailed.html">MCollective::SecurityValidationFailed</a></li>
327                                 
328                                         <li><a href="../MCollective/Shell.html">MCollective::Shell</a></li>
329                                 
330                                         <li><a href="../MCollective/Translatable.html">MCollective::Translatable</a></li>
331                                 
332                                         <li><a href="../MCollective/UnixDaemon.html">MCollective::UnixDaemon</a></li>
333                                 
334                                         <li><a href="../MCollective/UnknownRPCAction.html">MCollective::UnknownRPCAction</a></li>
335                                 
336                                         <li><a href="../MCollective/UnknownRPCError.html">MCollective::UnknownRPCError</a></li>
337                                 
338                                         <li><a href="../MCollective/Util.html">MCollective::Util</a></li>
339                                 
340                                         <li><a href="../MCollective/Validator.html">MCollective::Validator</a></li>
341                                 
342                                         <li><a href="../MCollective/ValidatorError.html">MCollective::ValidatorError</a></li>
343                                 
344                                         <li><a href="../MCollective/WindowsDaemon.html">MCollective::WindowsDaemon</a></li>
345                                 
346                                         <li><a href="../Array.html">Array</a></li>
347                                 
348                                         <li><a href="../Dir.html">Dir</a></li>
349                                 
350                                         <li><a href="../Object.html">Object</a></li>
351                                 
352                                         <li><a href="../String.html">String</a></li>
353                                 
354                                         <li><a href="../Symbol.html">Symbol</a></li>
355                                 
356                                 </ul>
357                                 <div id="no-class-search-results" style="display: none;">No matching classes.</div>
358                         </div>
359
360                         
361                 </div>
362         </div>
363
364         <div id="documentation">
365                 <h1 class="class">MCollective::SSL</h1>
366
367                 <div id="description">
368                         <p>
369 A class that assists in encrypting and decrypting data using a combination
370 of RSA and AES
371 </p>
372 <p>
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
375 </p>
376 <pre>
377   ssl = SSL.new(public_key, private_key, passphrase)
378
379   data = File.read(&quot;largefile.dat&quot;)
380
381   crypted_data = ssl.encrypt_with_private(data)
382
383   pp crypted_data
384 </pre>
385 <p>
386 This will result in a hash of data like:
387 </p>
388 <pre>
389   crypted = {:key  =&gt; &quot;crd4NHvG....=&quot;,
390              :data =&gt; &quot;XWXlqN+i...==&quot;}
391 </pre>
392 <p>
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
397 </p>
398 <p>
399 You can pass the data hash into ssl.decrypt_with_public which should return
400 your original data
401 </p>
402 <p>
403 There are matching methods for using a public key to encrypt data to be
404 decrypted using a private key
405 </p>
406
407                 </div>
408
409                 <!-- Constants -->
410                 
411
412                 <!-- Attributes -->
413                 
414                 <div id="attribute-method-details" class="method-section section">
415                         <h3 class="section-header">Attributes</h3>
416
417                         
418                         <div id="public-key-file-attribute-method" class="method-detail">
419                                 <a name="public_key_file"></a>
420                                 
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>
424                                 </div>
425
426                                 <div class="method-description">
427                                 
428                                 <p class="missing-docs">(Not documented)</p>
429                                 
430                                 </div>
431                         </div>
432                         
433                         <div id="private-key-file-attribute-method" class="method-detail">
434                                 <a name="private_key_file"></a>
435                                 
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>
439                                 </div>
440
441                                 <div class="method-description">
442                                 
443                                 <p class="missing-docs">(Not documented)</p>
444                                 
445                                 </div>
446                         </div>
447                         
448                         <div id="ssl-cipher-attribute-method" class="method-detail">
449                                 <a name="ssl_cipher"></a>
450                                 
451                                 <div class="method-heading attribute-method-heading">
452                                         <span class="method-name">ssl_cipher</span><span
453                                                 class="attribute-access-type">[R]</span>
454                                 </div>
455
456                                 <div class="method-description">
457                                 
458                                 <p class="missing-docs">(Not documented)</p>
459                                 
460                                 </div>
461                         </div>
462                         
463                 </div>
464                 
465
466                 <!-- Methods -->
467                 
468                 <div id="public-class-method-details" class="method-section section">
469                         <h3 class="section-header">Public Class Methods</h3>
470
471                 
472                         <div id="base-decode-method" class="method-detail ">
473                                 <a name="M000220"></a>
474
475                                 <div class="method-heading">
476                                 
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>
480                                 
481                                 </div>
482
483                                 <div class="method-description">
484                                         
485                                         <p class="missing-docs">(Not documented)</p>
486                                         
487
488                                         
489                                         <div class="method-source-code"
490                                                 id="base-decode-source">
491 <pre>
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>
496                                         </div>
497                                         
498                                 </div>
499
500                                 
501                         </div>
502
503                 
504                         <div id="base-encode-method" class="method-detail ">
505                                 <a name="M000218"></a>
506
507                                 <div class="method-heading">
508                                 
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>
512                                 
513                                 </div>
514
515                                 <div class="method-description">
516                                         
517                                         <p class="missing-docs">(Not documented)</p>
518                                         
519
520                                         
521                                         <div class="method-source-code"
522                                                 id="base-encode-source">
523 <pre>
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>
528                                         </div>
529                                         
530                                 </div>
531
532                                 
533                         </div>
534
535                 
536                         <div id="md--method" class="method-detail ">
537                                 <a name="M000222"></a>
538
539                                 <div class="method-heading">
540                                 
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>
544                                 
545                                 </div>
546
547                                 <div class="method-description">
548                                         
549                                         <p class="missing-docs">(Not documented)</p>
550                                         
551
552                                         
553                                         <div class="method-source-code"
554                                                 id="md--source">
555 <pre>
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>
560                                         </div>
561                                         
562                                 </div>
563
564                                 
565                         </div>
566
567                 
568                         <div id="new-method" class="method-detail ">
569                                 <a name="M000203"></a>
570
571                                 <div class="method-heading">
572                                 
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>
576                                 
577                                 </div>
578
579                                 <div class="method-description">
580                                         
581                                         <p class="missing-docs">(Not documented)</p>
582                                         
583
584                                         
585                                         <div class="method-source-code"
586                                                 id="new-source">
587 <pre>
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>
592 40: 
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>)
595 43: 
596 44:       <span class="ruby-ivar">@ssl_cipher</span> = <span class="ruby-value str">&quot;aes-256-cbc&quot;</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>
599 47: 
600 48:       <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;The supplied cipher '#{@ssl_cipher}' is not supported&quot;</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>
602                                         </div>
603                                         
604                                 </div>
605
606                                 
607                         </div>
608
609                 
610                         <div id="uuid-method" class="method-detail ">
611                                 <a name="M000223"></a>
612
613                                 <div class="method-heading">
614                                 
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>
618                                 
619                                 </div>
620
621                                 <div class="method-description">
622                                         
623                                         <p>
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
626 from OpenSSL::BN
627 </p>
628 <p>
629 Code used with permission from:
630 </p>
631 <pre>
632    https://github.com/kwilczynski/puppet-functions/blob/master/lib/puppet/parser/functions/uuid.rb
633 </pre>
634                                         
635
636                                         
637                                         <div class="method-source-code"
638                                                 id="uuid-source">
639 <pre>
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>
643 215: 
644 216:       <span class="ruby-identifier">uuid_name_space_dns</span> = <span class="ruby-value str">&quot;\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8&quot;</span>
645 217: 
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>)
649 221: 
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>
652 224: 
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">&amp;=</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>
656 228: 
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">&amp;=</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>
660 232: 
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>
664 236: 
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>
667                                         </div>
668                                         
669                                 </div>
670
671                                 
672                         </div>
673
674                 
675                 </div>
676         
677                 <div id="public-instance-method-details" class="method-section section">
678                         <h3 class="section-header">Public Instance Methods</h3>
679
680                 
681                         <div id="aes-decrypt-method" class="method-detail ">
682                                 <a name="M000214"></a>
683
684                                 <div class="method-heading">
685                                 
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>
689                                 
690                                 </div>
691
692                                 <div class="method-description">
693                                         
694                                         <p>
695 decrypts a string given key, iv and data
696 </p>
697                                         
698
699                                         
700                                         <div class="method-source-code"
701                                                 id="aes-decrypt-source">
702 <pre>
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>)
706 160: 
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>
712                                         </div>
713                                         
714                                 </div>
715
716                                 
717                         </div>
718
719                 
720                         <div id="aes-encrypt-method" class="method-detail ">
721                                 <a name="M000213"></a>
722
723                                 <div class="method-heading">
724                                 
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>
728                                 
729                                 </div>
730
731                                 <div class="method-description">
732                                         
733                                         <p>
734 encrypts a string, returns a hash of key, iv and data
735 </p>
736                                         
737
738                                         
739                                         <div class="method-source-code"
740                                                 id="aes-encrypt-source">
741 <pre>
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>
746 147: 
747 148:       <span class="ruby-identifier">key</span> = <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">random_key</span>
748 149: 
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>
752 153: 
753 154:       {<span class="ruby-identifier">:key</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:data</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">encrypted_data</span>}
754 155:     <span class="ruby-keyword kw">end</span></pre>
755                                         </div>
756                                         
757                                 </div>
758
759                                 
760                         </div>
761
762                 
763                         <div id="base-decode-method" class="method-detail ">
764                                 <a name="M000219"></a>
765
766                                 <div class="method-heading">
767                                 
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>
771                                 
772                                 </div>
773
774                                 <div class="method-description">
775                                         
776                                         <p>
777 base 64 decode a string
778 </p>
779                                         
780
781                                         
782                                         <div class="method-source-code"
783                                                 id="base-decode-source">
784 <pre>
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>
789                                         </div>
790                                         
791                                 </div>
792
793                                 
794                         </div>
795
796                 
797                         <div id="base-encode-method" class="method-detail ">
798                                 <a name="M000217"></a>
799
800                                 <div class="method-heading">
801                                 
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>
805                                 
806                                 </div>
807
808                                 <div class="method-description">
809                                         
810                                         <p>
811 base 64 encode a string
812 </p>
813                                         
814
815                                         
816                                         <div class="method-source-code"
817                                                 id="base-encode-source">
818 <pre>
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>
823                                         </div>
824                                         
825                                 </div>
826
827                                 
828                         </div>
829
830                 
831                         <div id="decrypt-with-private-method" class="method-detail ">
832                                 <a name="M000207"></a>
833
834                                 <div class="method-heading">
835                                 
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>
839                                 
840                                 </div>
841
842                                 <div class="method-description">
843                                         
844                                         <p>
845 Decrypts data, expects a hash as create with crypt_with_public
846 </p>
847                                         
848
849                                         
850                                         <div class="method-source-code"
851                                                 id="decrypt-with-private-source">
852 <pre>
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">&quot;Crypted data should include a key&quot;</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">&quot;Crypted data should include data&quot;</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>)
857 91: 
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>
866                                         </div>
867                                         
868                                 </div>
869
870                                 
871                         </div>
872
873                 
874                         <div id="decrypt-with-public-method" class="method-detail ">
875                                 <a name="M000208"></a>
876
877                                 <div class="method-heading">
878                                 
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>
882                                 
883                                 </div>
884
885                                 <div class="method-description">
886                                         
887                                         <p>
888 Decrypts data, expects a hash as create with crypt_with_private
889 </p>
890                                         
891
892                                         
893                                         <div class="method-source-code"
894                                                 id="decrypt-with-public-source">
895 <pre>
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">&quot;Crypted data should include a key&quot;</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">&quot;Crypted data should include data&quot;</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>)
900 105: 
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>
909                                         </div>
910                                         
911                                 </div>
912
913                                 
914                         </div>
915
916                 
917                         <div id="encrypt-with-private-method" class="method-detail ">
918                                 <a name="M000206"></a>
919
920                                 <div class="method-heading">
921                                 
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>
925                                 
926                                 </div>
927
928                                 <div class="method-description">
929                                         
930                                         <p>
931 Encrypts supplied data using AES and then encrypts using RSA the key and IV
932 </p>
933 <p>
934 Return a hash with everything optionally base 64 encoded
935 </p>
936                                         
937
938                                         
939                                         <div class="method-source-code"
940                                                 id="encrypt-with-private-source">
941 <pre>
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>)
945 75: 
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>
953 83: 
954 84:       {<span class="ruby-identifier">:key</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:data</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">data</span>}
955 85:     <span class="ruby-keyword kw">end</span></pre>
956                                         </div>
957                                         
958                                 </div>
959
960                                 
961                         </div>
962
963                 
964                         <div id="encrypt-with-public-method" class="method-detail ">
965                                 <a name="M000205"></a>
966
967                                 <div class="method-heading">
968                                 
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>
972                                 
973                                 </div>
974
975                                 <div class="method-description">
976                                         
977                                         <p>
978 Encrypts supplied data using AES and then encrypts using RSA the key and IV
979 </p>
980 <p>
981 Return a hash with everything optionally base 64 encoded
982 </p>
983                                         
984
985                                         
986                                         <div class="method-source-code"
987                                                 id="encrypt-with-public-source">
988 <pre>
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>)
992 57: 
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>
1000 65: 
1001 66:       {<span class="ruby-identifier">:key</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:data</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">data</span>}
1002 67:     <span class="ruby-keyword kw">end</span></pre>
1003                                         </div>
1004                                         
1005                                 </div>
1006
1007                                 
1008                         </div>
1009
1010                 
1011                         <div id="md--method" class="method-detail ">
1012                                 <a name="M000221"></a>
1013
1014                                 <div class="method-heading">
1015                                 
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>
1019                                 
1020                                 </div>
1021
1022                                 <div class="method-description">
1023                                         
1024                                         <p class="missing-docs">(Not documented)</p>
1025                                         
1026
1027                                         
1028                                         <div class="method-source-code"
1029                                                 id="md--source">
1030 <pre>
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>
1035                                         </div>
1036                                         
1037                                 </div>
1038
1039                                 
1040                         </div>
1041
1042                 
1043                         <div id="read-key-method" class="method-detail ">
1044                                 <a name="M000224"></a>
1045
1046                                 <div class="method-heading">
1047                                 
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>
1051                                 
1052                                 </div>
1053
1054                                 <div class="method-description">
1055                                         
1056                                         <p>
1057 Reads either a :public or :private key from disk, uses an optional
1058 passphrase to read the private key
1059 </p>
1060                                         
1061
1062                                         
1063                                         <div class="method-source-code"
1064                                                 id="read-key-source">
1065 <pre>
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>
1069 244: 
1070 245:       <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not find key #{key}&quot;</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">&quot;#{type} key file '#{key}' is empty&quot;</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>)
1072 247: 
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>
1079 254: 
1080 255:         <span class="ruby-comment cmt"># Ruby &lt; 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>
1095 270: 
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">&quot;Can only load :public or :private keys&quot;</span>
1101 276:       <span class="ruby-keyword kw">end</span>
1102 277:     <span class="ruby-keyword kw">end</span></pre>
1103                                         </div>
1104                                         
1105                                 </div>
1106
1107                                 
1108                         </div>
1109
1110                 
1111                         <div id="rsa-decrypt-with-private-method" class="method-detail ">
1112                                 <a name="M000210"></a>
1113
1114                                 <div class="method-heading">
1115                                 
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>
1119                                 
1120                                 </div>
1121
1122                                 <div class="method-description">
1123                                         
1124                                         <p>
1125 Use the private key to RSA decrypt data
1126 </p>
1127                                         
1128
1129                                         
1130                                         <div class="method-source-code"
1131                                                 id="rsa-decrypt-with-private-source">
1132 <pre>
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">&quot;No private key set&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@private_key</span>
1136 125: 
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>
1139                                         </div>
1140                                         
1141                                 </div>
1142
1143                                 
1144                         </div>
1145
1146                 
1147                         <div id="rsa-decrypt-with-public-method" class="method-detail ">
1148                                 <a name="M000212"></a>
1149
1150                                 <div class="method-heading">
1151                                 
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>
1155                                 
1156                                 </div>
1157
1158                                 <div class="method-description">
1159                                         
1160                                         <p>
1161 Use the public key to RSA decrypt data
1162 </p>
1163                                         
1164
1165                                         
1166                                         <div class="method-source-code"
1167                                                 id="rsa-decrypt-with-public-source">
1168 <pre>
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">&quot;No public key set&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@public_key</span>
1172 139: 
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>
1175                                         </div>
1176                                         
1177                                 </div>
1178
1179                                 
1180                         </div>
1181
1182                 
1183                         <div id="rsa-encrypt-with-private-method" class="method-detail ">
1184                                 <a name="M000211"></a>
1185
1186                                 <div class="method-heading">
1187                                 
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>
1191                                 
1192                                 </div>
1193
1194                                 <div class="method-description">
1195                                         
1196                                         <p>
1197 Use the private key to RSA encrypt data
1198 </p>
1199                                         
1200
1201                                         
1202                                         <div class="method-source-code"
1203                                                 id="rsa-encrypt-with-private-source">
1204 <pre>
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">&quot;No private key set&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@private_key</span>
1208 132: 
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>
1211                                         </div>
1212                                         
1213                                 </div>
1214
1215                                 
1216                         </div>
1217
1218                 
1219                         <div id="rsa-encrypt-with-public-method" class="method-detail ">
1220                                 <a name="M000209"></a>
1221
1222                                 <div class="method-heading">
1223                                 
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>
1227                                 
1228                                 </div>
1229
1230                                 <div class="method-description">
1231                                         
1232                                         <p>
1233 Use the public key to RSA encrypt data
1234 </p>
1235                                         
1236
1237                                         
1238                                         <div class="method-source-code"
1239                                                 id="rsa-encrypt-with-public-source">
1240 <pre>
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">&quot;No public key set&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@public_key</span>
1244 118: 
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>
1247                                         </div>
1248                                         
1249                                 </div>
1250
1251                                 
1252                         </div>
1253
1254                 
1255                         <div id="sign-method" class="method-detail ">
1256                                 <a name="M000215"></a>
1257
1258                                 <div class="method-heading">
1259                                 
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>
1263                                 
1264                                 </div>
1265
1266                                 <div class="method-description">
1267                                         
1268                                         <p>
1269 Signs a string using the private key
1270 </p>
1271                                         
1272
1273                                         
1274                                         <div class="method-source-code"
1275                                                 id="sign-source">
1276 <pre>
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>)
1280 170: 
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>
1283                                         </div>
1284                                         
1285                                 </div>
1286
1287                                 
1288                         </div>
1289
1290                 
1291                         <div id="verify-signature-method" class="method-detail ">
1292                                 <a name="M000216"></a>
1293
1294                                 <div class="method-heading">
1295                                 
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>
1299                                 
1300                                 </div>
1301
1302                                 <div class="method-description">
1303                                         
1304                                         <p>
1305 Using the public key verifies that a string was signed using the private
1306 key
1307 </p>
1308                                         
1309
1310                                         
1311                                         <div class="method-source-code"
1312                                                 id="verify-signature-source">
1313 <pre>
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>
1317 177: 
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>
1320                                         </div>
1321                                         
1322                                 </div>
1323
1324                                 
1325                         </div>
1326
1327                 
1328                 </div>
1329         
1330
1331         </div>
1332
1333
1334         <div id="rdoc-debugging-section-dump" class="debugging-section">
1335         
1336                 <p>Disabled; run with --debug to generate this.</p>
1337         
1338         </div>
1339
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>
1344         </div>
1345
1346 </body>
1347 </html>
1348