Update version according to OSCI-856
[packages/precise/mcollective.git] / doc / classes / MCollective / SSL.html
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!DOCTYPE html 
3      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7 <head>
8   <title>Class: MCollective::SSL</title>
9   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10   <meta http-equiv="Content-Script-Type" content="text/javascript" />
11   <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12   <script type="text/javascript">
13   // <![CDATA[
14
15   function popupCode( url ) {
16     window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17   }
18
19   function toggleCode( id ) {
20     if ( document.getElementById )
21       elem = document.getElementById( id );
22     else if ( document.all )
23       elem = eval( "document.all." + id );
24     else
25       return false;
26
27     elemStyle = elem.style;
28     
29     if ( elemStyle.display != "block" ) {
30       elemStyle.display = "block"
31     } else {
32       elemStyle.display = "none"
33     }
34
35     return true;
36   }
37   
38   // Make codeblocks hidden by default
39   document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40   
41   // ]]>
42   </script>
43
44 </head>
45 <body>
46
47
48
49     <div id="classHeader">
50         <table class="header-table">
51         <tr class="top-aligned-row">
52           <td><strong>Class</strong></td>
53           <td class="class-name-in-header">MCollective::SSL</td>
54         </tr>
55         <tr class="top-aligned-row">
56             <td><strong>In:</strong></td>
57             <td>
58                 <a href="../../files/lib/mcollective/ssl_rb.html">
59                 lib/mcollective/ssl.rb
60                 </a>
61         <br />
62             </td>
63         </tr>
64
65         <tr class="top-aligned-row">
66             <td><strong>Parent:</strong></td>
67             <td>
68                 Object
69             </td>
70         </tr>
71         </table>
72     </div>
73   <!-- banner header -->
74
75   <div id="bodyContent">
76
77
78
79   <div id="contextContent">
80
81     <div id="description">
82       <p>
83 A class that assists in encrypting and decrypting data using a combination
84 of RSA and AES
85 </p>
86 <p>
87 <a href="Data.html">Data</a> will be AES encrypted for speed, the Key used
88 in # the AES stage will be encrypted using RSA
89 </p>
90 <pre>
91   ssl = SSL.new(public_key, private_key, passphrase)
92
93   data = File.read(&quot;largefile.dat&quot;)
94
95   crypted_data = ssl.encrypt_with_private(data)
96
97   pp crypted_data
98 </pre>
99 <p>
100 This will result in a hash of data like:
101 </p>
102 <pre>
103   crypted = {:key  =&gt; &quot;crd4NHvG....=&quot;,
104              :data =&gt; &quot;XWXlqN+i...==&quot;}
105 </pre>
106 <p>
107 The key and data will all be base 64 encoded already by default you can
108 pass a 2nd parameter as false to <a
109 href="SSL.html#M000378">encrypt_with_private</a> and counterparts that will
110 prevent the base 64 encoding
111 </p>
112 <p>
113 You can pass the data hash into ssl.decrypt_with_public which should return
114 your original data
115 </p>
116 <p>
117 There are matching methods for using a public key to encrypt data to be
118 decrypted using a private key
119 </p>
120
121     </div>
122
123
124    </div>
125
126     <div id="method-list">
127       <h3 class="section-bar">Methods</h3>
128
129       <div class="name-list">
130       <a href="#M000386">aes_decrypt</a>&nbsp;&nbsp;
131       <a href="#M000385">aes_encrypt</a>&nbsp;&nbsp;
132       <a href="#M000392">base64_decode</a>&nbsp;&nbsp;
133       <a href="#M000391">base64_decode</a>&nbsp;&nbsp;
134       <a href="#M000390">base64_encode</a>&nbsp;&nbsp;
135       <a href="#M000389">base64_encode</a>&nbsp;&nbsp;
136       <a href="#M000379">decrypt_with_private</a>&nbsp;&nbsp;
137       <a href="#M000380">decrypt_with_public</a>&nbsp;&nbsp;
138       <a href="#M000378">encrypt_with_private</a>&nbsp;&nbsp;
139       <a href="#M000377">encrypt_with_public</a>&nbsp;&nbsp;
140       <a href="#M000394">md5</a>&nbsp;&nbsp;
141       <a href="#M000393">md5</a>&nbsp;&nbsp;
142       <a href="#M000376">new</a>&nbsp;&nbsp;
143       <a href="#M000396">read_key</a>&nbsp;&nbsp;
144       <a href="#M000382">rsa_decrypt_with_private</a>&nbsp;&nbsp;
145       <a href="#M000384">rsa_decrypt_with_public</a>&nbsp;&nbsp;
146       <a href="#M000383">rsa_encrypt_with_private</a>&nbsp;&nbsp;
147       <a href="#M000381">rsa_encrypt_with_public</a>&nbsp;&nbsp;
148       <a href="#M000387">sign</a>&nbsp;&nbsp;
149       <a href="#M000395">uuid</a>&nbsp;&nbsp;
150       <a href="#M000388">verify_signature</a>&nbsp;&nbsp;
151       </div>
152     </div>
153
154   </div>
155
156
157     <!-- if includes -->
158
159     <div id="section">
160
161
162
163
164
165     <div id="attribute-list">
166       <h3 class="section-bar">Attributes</h3>
167
168       <div class="name-list">
169         <table>
170         <tr class="top-aligned-row context-row">
171           <td class="context-item-name">private_key_file</td>
172           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
173           <td class="context-item-desc"></td>
174         </tr>
175         <tr class="top-aligned-row context-row">
176           <td class="context-item-name">public_key_file</td>
177           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
178           <td class="context-item-desc"></td>
179         </tr>
180         <tr class="top-aligned-row context-row">
181           <td class="context-item-name">ssl_cipher</td>
182           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
183           <td class="context-item-desc"></td>
184         </tr>
185         </table>
186       </div>
187     </div>
188       
189
190
191     <!-- if method_list -->
192     <div id="methods">
193       <h3 class="section-bar">Public Class methods</h3>
194
195       <div id="method-M000392" class="method-detail">
196         <a name="M000392"></a>
197
198         <div class="method-heading">
199           <a href="#M000392" class="method-signature">
200           <span class="method-name">base64_decode</span><span class="method-args">(string)</span>
201           </a>
202         </div>
203       
204         <div class="method-description">
205           <p><a class="source-toggle" href="#"
206             onclick="toggleCode('M000392-source');return false;">[Source]</a></p>
207           <div class="method-source-code" id="M000392-source">
208 <pre>
209      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 195</span>
210 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>)
211 196:       <span class="ruby-constant">Base64</span>.<span class="ruby-identifier">decode64</span>(<span class="ruby-identifier">string</span>)
212 197:     <span class="ruby-keyword kw">end</span>
213 </pre>
214           </div>
215         </div>
216       </div>
217
218       <div id="method-M000390" class="method-detail">
219         <a name="M000390"></a>
220
221         <div class="method-heading">
222           <a href="#M000390" class="method-signature">
223           <span class="method-name">base64_encode</span><span class="method-args">(string)</span>
224           </a>
225         </div>
226       
227         <div class="method-description">
228           <p><a class="source-toggle" href="#"
229             onclick="toggleCode('M000390-source');return false;">[Source]</a></p>
230           <div class="method-source-code" id="M000390-source">
231 <pre>
232      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 186</span>
233 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>)
234 187:       <span class="ruby-constant">Base64</span>.<span class="ruby-identifier">encode64</span>(<span class="ruby-identifier">string</span>)
235 188:     <span class="ruby-keyword kw">end</span>
236 </pre>
237           </div>
238         </div>
239       </div>
240
241       <div id="method-M000394" class="method-detail">
242         <a name="M000394"></a>
243
244         <div class="method-heading">
245           <a href="#M000394" class="method-signature">
246           <span class="method-name">md5</span><span class="method-args">(string)</span>
247           </a>
248         </div>
249       
250         <div class="method-description">
251           <p><a class="source-toggle" href="#"
252             onclick="toggleCode('M000394-source');return false;">[Source]</a></p>
253           <div class="method-source-code" id="M000394-source">
254 <pre>
255      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 203</span>
256 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>)
257 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>)
258 205:     <span class="ruby-keyword kw">end</span>
259 </pre>
260           </div>
261         </div>
262       </div>
263
264       <div id="method-M000376" class="method-detail">
265         <a name="M000376"></a>
266
267         <div class="method-heading">
268           <a href="#M000376" class="method-signature">
269           <span class="method-name">new</span><span class="method-args">(pubkey=nil, privkey=nil, passphrase=nil, cipher=nil)</span>
270           </a>
271         </div>
272       
273         <div class="method-description">
274           <p><a class="source-toggle" href="#"
275             onclick="toggleCode('M000376-source');return false;">[Source]</a></p>
276           <div class="method-source-code" id="M000376-source">
277 <pre>
278     <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 37</span>
279 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>)
280 38:       <span class="ruby-ivar">@public_key_file</span> = <span class="ruby-identifier">pubkey</span>
281 39:       <span class="ruby-ivar">@private_key_file</span> = <span class="ruby-identifier">privkey</span>
282 40: 
283 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>)
284 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>)
285 43: 
286 44:       <span class="ruby-ivar">@ssl_cipher</span> = <span class="ruby-value str">&quot;aes-256-cbc&quot;</span>
287 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>
288 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>
289 47: 
290 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>)
291 49:     <span class="ruby-keyword kw">end</span>
292 </pre>
293           </div>
294         </div>
295       </div>
296
297       <div id="method-M000395" class="method-detail">
298         <a name="M000395"></a>
299
300         <div class="method-heading">
301           <a href="#M000395" class="method-signature">
302           <span class="method-name">uuid</span><span class="method-args">(string=nil)</span>
303           </a>
304         </div>
305       
306         <div class="method-description">
307           <p>
308 Creates a RFC 4122 version 5 UUID. If string is supplied it will produce
309 repeatable UUIDs for that string else a random 128bit string will be used
310 from OpenSSL::BN
311 </p>
312 <p>
313 Code used with permission from:
314 </p>
315 <pre>
316    https://github.com/kwilczynski/puppet-functions/blob/master/lib/puppet/parser/functions/uuid.rb
317 </pre>
318           <p><a class="source-toggle" href="#"
319             onclick="toggleCode('M000395-source');return false;">[Source]</a></p>
320           <div class="method-source-code" id="M000395-source">
321 <pre>
322      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 213</span>
323 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>)
324 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>
325 215: 
326 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>
327 217: 
328 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>
329 219:       <span class="ruby-identifier">sha1</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">uuid_name_space_dns</span>)
330 220:       <span class="ruby-identifier">sha1</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">string</span>)
331 221: 
332 222:       <span class="ruby-comment cmt"># first 16 bytes..</span>
333 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>
334 224: 
335 225:       <span class="ruby-comment cmt"># version 5 adjustments</span>
336 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>
337 227:       <span class="ruby-identifier">bytes</span>[<span class="ruby-value">6</span>] <span class="ruby-operator">|=</span> <span class="ruby-value">0x50</span>
338 228: 
339 229:       <span class="ruby-comment cmt"># variant is DCE 1.1</span>
340 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>
341 231:       <span class="ruby-identifier">bytes</span>[<span class="ruby-value">8</span>] <span class="ruby-operator">|=</span> <span class="ruby-value">0x80</span>
342 232: 
343 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>
344 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>)
345 235:       <span class="ruby-keyword kw">end</span>
346 236: 
347 237:       <span class="ruby-identifier">bytes</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'-'</span>)
348 238:     <span class="ruby-keyword kw">end</span>
349 </pre>
350           </div>
351         </div>
352       </div>
353
354       <h3 class="section-bar">Public Instance methods</h3>
355
356       <div id="method-M000386" class="method-detail">
357         <a name="M000386"></a>
358
359         <div class="method-heading">
360           <a href="#M000386" class="method-signature">
361           <span class="method-name">aes_decrypt</span><span class="method-args">(key, crypt_string)</span>
362           </a>
363         </div>
364       
365         <div class="method-description">
366           <p>
367 decrypts a string given key, iv and data
368 </p>
369           <p><a class="source-toggle" href="#"
370             onclick="toggleCode('M000386-source');return false;">[Source]</a></p>
371           <div class="method-source-code" id="M000386-source">
372 <pre>
373      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 158</span>
374 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>)
375 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>)
376 160: 
377 161:       <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">decrypt</span>
378 162:       <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">key</span> = <span class="ruby-identifier">key</span>
379 163:       <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">pkcs5_keyivgen</span>(<span class="ruby-identifier">key</span>)
380 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>
381 165:     <span class="ruby-keyword kw">end</span>
382 </pre>
383           </div>
384         </div>
385       </div>
386
387       <div id="method-M000385" class="method-detail">
388         <a name="M000385"></a>
389
390         <div class="method-heading">
391           <a href="#M000385" class="method-signature">
392           <span class="method-name">aes_encrypt</span><span class="method-args">(plain_string)</span>
393           </a>
394         </div>
395       
396         <div class="method-description">
397           <p>
398 encrypts a string, returns a hash of key, iv and data
399 </p>
400           <p><a class="source-toggle" href="#"
401             onclick="toggleCode('M000385-source');return false;">[Source]</a></p>
402           <div class="method-source-code" id="M000385-source">
403 <pre>
404      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 144</span>
405 144:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">aes_encrypt</span>(<span class="ruby-identifier">plain_string</span>)
406 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>)
407 146:       <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">encrypt</span>
408 147: 
409 148:       <span class="ruby-identifier">key</span> = <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">random_key</span>
410 149: 
411 150:       <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">key</span> = <span class="ruby-identifier">key</span>
412 151:       <span class="ruby-identifier">cipher</span>.<span class="ruby-identifier">pkcs5_keyivgen</span>(<span class="ruby-identifier">key</span>)
413 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>
414 153: 
415 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>}
416 155:     <span class="ruby-keyword kw">end</span>
417 </pre>
418           </div>
419         </div>
420       </div>
421
422       <div id="method-M000391" class="method-detail">
423         <a name="M000391"></a>
424
425         <div class="method-heading">
426           <a href="#M000391" class="method-signature">
427           <span class="method-name">base64_decode</span><span class="method-args">(string)</span>
428           </a>
429         </div>
430       
431         <div class="method-description">
432           <p>
433 base 64 decode a string
434 </p>
435           <p><a class="source-toggle" href="#"
436             onclick="toggleCode('M000391-source');return false;">[Source]</a></p>
437           <div class="method-source-code" id="M000391-source">
438 <pre>
439      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 191</span>
440 191:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">string</span>)
441 192:       <span class="ruby-constant">SSL</span>.<span class="ruby-identifier">base64_decode</span>(<span class="ruby-identifier">string</span>)
442 193:     <span class="ruby-keyword kw">end</span>
443 </pre>
444           </div>
445         </div>
446       </div>
447
448       <div id="method-M000389" class="method-detail">
449         <a name="M000389"></a>
450
451         <div class="method-heading">
452           <a href="#M000389" class="method-signature">
453           <span class="method-name">base64_encode</span><span class="method-args">(string)</span>
454           </a>
455         </div>
456       
457         <div class="method-description">
458           <p>
459 base 64 encode a string
460 </p>
461           <p><a class="source-toggle" href="#"
462             onclick="toggleCode('M000389-source');return false;">[Source]</a></p>
463           <div class="method-source-code" id="M000389-source">
464 <pre>
465      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 182</span>
466 182:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">string</span>)
467 183:       <span class="ruby-constant">SSL</span>.<span class="ruby-identifier">base64_encode</span>(<span class="ruby-identifier">string</span>)
468 184:     <span class="ruby-keyword kw">end</span>
469 </pre>
470           </div>
471         </div>
472       </div>
473
474       <div id="method-M000379" class="method-detail">
475         <a name="M000379"></a>
476
477         <div class="method-heading">
478           <a href="#M000379" class="method-signature">
479           <span class="method-name">decrypt_with_private</span><span class="method-args">(crypted, base64=true)</span>
480           </a>
481         </div>
482       
483         <div class="method-description">
484           <p>
485 Decrypts data, expects a hash as create with crypt_with_public
486 </p>
487           <p><a class="source-toggle" href="#"
488             onclick="toggleCode('M000379-source');return false;">[Source]</a></p>
489           <div class="method-source-code" id="M000379-source">
490 <pre>
491     <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 88</span>
492 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>)
493 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>)
494 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>)
495 91: 
496 92:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
497 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>]))
498 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>]))
499 95:       <span class="ruby-keyword kw">else</span>
500 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>])
501 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>])
502 98:       <span class="ruby-keyword kw">end</span>
503 99:     <span class="ruby-keyword kw">end</span>
504 </pre>
505           </div>
506         </div>
507       </div>
508
509       <div id="method-M000380" class="method-detail">
510         <a name="M000380"></a>
511
512         <div class="method-heading">
513           <a href="#M000380" class="method-signature">
514           <span class="method-name">decrypt_with_public</span><span class="method-args">(crypted, base64=true)</span>
515           </a>
516         </div>
517       
518         <div class="method-description">
519           <p>
520 Decrypts data, expects a hash as create with crypt_with_private
521 </p>
522           <p><a class="source-toggle" href="#"
523             onclick="toggleCode('M000380-source');return false;">[Source]</a></p>
524           <div class="method-source-code" id="M000380-source">
525 <pre>
526      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 102</span>
527 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>)
528 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>)
529 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>)
530 105: 
531 106:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
532 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>]))
533 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>]))
534 109:       <span class="ruby-keyword kw">else</span>
535 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>])
536 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>])
537 112:       <span class="ruby-keyword kw">end</span>
538 113:     <span class="ruby-keyword kw">end</span>
539 </pre>
540           </div>
541         </div>
542       </div>
543
544       <div id="method-M000378" class="method-detail">
545         <a name="M000378"></a>
546
547         <div class="method-heading">
548           <a href="#M000378" class="method-signature">
549           <span class="method-name">encrypt_with_private</span><span class="method-args">(plain_text, base64=true)</span>
550           </a>
551         </div>
552       
553         <div class="method-description">
554           <p>
555 Encrypts supplied data using AES and then encrypts using RSA the key and IV
556 </p>
557 <p>
558 Return a hash with everything optionally base 64 encoded
559 </p>
560           <p><a class="source-toggle" href="#"
561             onclick="toggleCode('M000378-source');return false;">[Source]</a></p>
562           <div class="method-source-code" id="M000378-source">
563 <pre>
564     <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 73</span>
565 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>)
566 74:       <span class="ruby-identifier">crypted</span> = <span class="ruby-identifier">aes_encrypt</span>(<span class="ruby-identifier">plain_text</span>)
567 75: 
568 76:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
569 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>]))
570 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>])
571 79:       <span class="ruby-keyword kw">else</span>
572 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>])
573 81:         <span class="ruby-identifier">data</span> = <span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>]
574 82:       <span class="ruby-keyword kw">end</span>
575 83: 
576 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>}
577 85:     <span class="ruby-keyword kw">end</span>
578 </pre>
579           </div>
580         </div>
581       </div>
582
583       <div id="method-M000377" class="method-detail">
584         <a name="M000377"></a>
585
586         <div class="method-heading">
587           <a href="#M000377" class="method-signature">
588           <span class="method-name">encrypt_with_public</span><span class="method-args">(plain_text, base64=true)</span>
589           </a>
590         </div>
591       
592         <div class="method-description">
593           <p>
594 Encrypts supplied data using AES and then encrypts using RSA the key and IV
595 </p>
596 <p>
597 Return a hash with everything optionally base 64 encoded
598 </p>
599           <p><a class="source-toggle" href="#"
600             onclick="toggleCode('M000377-source');return false;">[Source]</a></p>
601           <div class="method-source-code" id="M000377-source">
602 <pre>
603     <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 55</span>
604 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>)
605 56:       <span class="ruby-identifier">crypted</span> = <span class="ruby-identifier">aes_encrypt</span>(<span class="ruby-identifier">plain_text</span>)
606 57: 
607 58:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">base64</span>
608 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>]))
609 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>])
610 61:       <span class="ruby-keyword kw">else</span>
611 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>])
612 63:         <span class="ruby-identifier">data</span> = <span class="ruby-identifier">crypted</span>[<span class="ruby-identifier">:data</span>]
613 64:       <span class="ruby-keyword kw">end</span>
614 65: 
615 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>}
616 67:     <span class="ruby-keyword kw">end</span>
617 </pre>
618           </div>
619         </div>
620       </div>
621
622       <div id="method-M000393" class="method-detail">
623         <a name="M000393"></a>
624
625         <div class="method-heading">
626           <a href="#M000393" class="method-signature">
627           <span class="method-name">md5</span><span class="method-args">(string)</span>
628           </a>
629         </div>
630       
631         <div class="method-description">
632           <p><a class="source-toggle" href="#"
633             onclick="toggleCode('M000393-source');return false;">[Source]</a></p>
634           <div class="method-source-code" id="M000393-source">
635 <pre>
636      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 199</span>
637 199:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">md5</span>(<span class="ruby-identifier">string</span>)
638 200:       <span class="ruby-constant">SSL</span>.<span class="ruby-identifier">md5</span>(<span class="ruby-identifier">string</span>)
639 201:     <span class="ruby-keyword kw">end</span>
640 </pre>
641           </div>
642         </div>
643       </div>
644
645       <div id="method-M000396" class="method-detail">
646         <a name="M000396"></a>
647
648         <div class="method-heading">
649           <a href="#M000396" class="method-signature">
650           <span class="method-name">read_key</span><span class="method-args">(type, key=nil, passphrase=nil)</span>
651           </a>
652         </div>
653       
654         <div class="method-description">
655           <p>
656 Reads either a :public or :private key from disk, uses an optional
657 passphrase to read the private key
658 </p>
659           <p><a class="source-toggle" href="#"
660             onclick="toggleCode('M000396-source');return false;">[Source]</a></p>
661           <div class="method-source-code" id="M000396-source">
662 <pre>
663      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 242</span>
664 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>)
665 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>
666 244: 
667 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>)
668 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>)
669 247: 
670 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>
671 249:         <span class="ruby-keyword kw">begin</span>
672 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>))
673 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>
674 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>
675 253:         <span class="ruby-keyword kw">end</span>
676 254: 
677 255:         <span class="ruby-comment cmt"># Ruby &lt; 1.9.3 had a bug where it does not correctly clear the</span>
678 256:         <span class="ruby-comment cmt"># queue of errors while reading a key.  It tries various ways</span>
679 257:         <span class="ruby-comment cmt"># to read the key and each failing attempt pushes an error onto</span>
680 258:         <span class="ruby-comment cmt"># the queue.  With pubkeys only the 3rd attempt pass leaving 2</span>
681 259:         <span class="ruby-comment cmt"># stale errors on the error queue.</span>
682 260:         <span class="ruby-comment cmt">#</span>
683 261:         <span class="ruby-comment cmt"># In 1.9.3 they fixed this by simply discarding the errors after</span>
684 262:         <span class="ruby-comment cmt"># every attempt.  So we simulate this fix here for older rubies</span>
685 263:         <span class="ruby-comment cmt"># as without it we get SSL_read errors from the Stomp+TLS sessions</span>
686 264:         <span class="ruby-comment cmt">#</span>
687 265:         <span class="ruby-comment cmt"># We do this only on 1.8 relying on 1.9.3 to do the right thing</span>
688 266:         <span class="ruby-comment cmt"># and we do not support 1.9 less than 1.9.3</span>
689 267:         <span class="ruby-comment cmt">#</span>
690 268:         <span class="ruby-comment cmt"># See  http://bugs.ruby-lang.org/issues/4550</span>
691 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>
692 270: 
693 271:         <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">key</span>
694 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>
695 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>)
696 274:       <span class="ruby-keyword kw">else</span>
697 275:         <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Can only load :public or :private keys&quot;</span>
698 276:       <span class="ruby-keyword kw">end</span>
699 277:     <span class="ruby-keyword kw">end</span>
700 </pre>
701           </div>
702         </div>
703       </div>
704
705       <div id="method-M000382" class="method-detail">
706         <a name="M000382"></a>
707
708         <div class="method-heading">
709           <a href="#M000382" class="method-signature">
710           <span class="method-name">rsa_decrypt_with_private</span><span class="method-args">(crypt_string)</span>
711           </a>
712         </div>
713       
714         <div class="method-description">
715           <p>
716 Use the private key to RSA decrypt data
717 </p>
718           <p><a class="source-toggle" href="#"
719             onclick="toggleCode('M000382-source');return false;">[Source]</a></p>
720           <div class="method-source-code" id="M000382-source">
721 <pre>
722      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 123</span>
723 123:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_decrypt_with_private</span>(<span class="ruby-identifier">crypt_string</span>)
724 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>
725 125: 
726 126:       <span class="ruby-ivar">@private_key</span>.<span class="ruby-identifier">private_decrypt</span>(<span class="ruby-identifier">crypt_string</span>)
727 127:     <span class="ruby-keyword kw">end</span>
728 </pre>
729           </div>
730         </div>
731       </div>
732
733       <div id="method-M000384" class="method-detail">
734         <a name="M000384"></a>
735
736         <div class="method-heading">
737           <a href="#M000384" class="method-signature">
738           <span class="method-name">rsa_decrypt_with_public</span><span class="method-args">(crypt_string)</span>
739           </a>
740         </div>
741       
742         <div class="method-description">
743           <p>
744 Use the public key to RSA decrypt data
745 </p>
746           <p><a class="source-toggle" href="#"
747             onclick="toggleCode('M000384-source');return false;">[Source]</a></p>
748           <div class="method-source-code" id="M000384-source">
749 <pre>
750      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 137</span>
751 137:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_decrypt_with_public</span>(<span class="ruby-identifier">crypt_string</span>)
752 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>
753 139: 
754 140:       <span class="ruby-ivar">@public_key</span>.<span class="ruby-identifier">public_decrypt</span>(<span class="ruby-identifier">crypt_string</span>)
755 141:     <span class="ruby-keyword kw">end</span>
756 </pre>
757           </div>
758         </div>
759       </div>
760
761       <div id="method-M000383" class="method-detail">
762         <a name="M000383"></a>
763
764         <div class="method-heading">
765           <a href="#M000383" class="method-signature">
766           <span class="method-name">rsa_encrypt_with_private</span><span class="method-args">(plain_string)</span>
767           </a>
768         </div>
769       
770         <div class="method-description">
771           <p>
772 Use the private key to RSA encrypt data
773 </p>
774           <p><a class="source-toggle" href="#"
775             onclick="toggleCode('M000383-source');return false;">[Source]</a></p>
776           <div class="method-source-code" id="M000383-source">
777 <pre>
778      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 130</span>
779 130:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_encrypt_with_private</span>(<span class="ruby-identifier">plain_string</span>)
780 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>
781 132: 
782 133:       <span class="ruby-ivar">@private_key</span>.<span class="ruby-identifier">private_encrypt</span>(<span class="ruby-identifier">plain_string</span>)
783 134:     <span class="ruby-keyword kw">end</span>
784 </pre>
785           </div>
786         </div>
787       </div>
788
789       <div id="method-M000381" class="method-detail">
790         <a name="M000381"></a>
791
792         <div class="method-heading">
793           <a href="#M000381" class="method-signature">
794           <span class="method-name">rsa_encrypt_with_public</span><span class="method-args">(plain_string)</span>
795           </a>
796         </div>
797       
798         <div class="method-description">
799           <p>
800 Use the public key to RSA encrypt data
801 </p>
802           <p><a class="source-toggle" href="#"
803             onclick="toggleCode('M000381-source');return false;">[Source]</a></p>
804           <div class="method-source-code" id="M000381-source">
805 <pre>
806      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 116</span>
807 116:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rsa_encrypt_with_public</span>(<span class="ruby-identifier">plain_string</span>)
808 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>
809 118: 
810 119:       <span class="ruby-ivar">@public_key</span>.<span class="ruby-identifier">public_encrypt</span>(<span class="ruby-identifier">plain_string</span>)
811 120:     <span class="ruby-keyword kw">end</span>
812 </pre>
813           </div>
814         </div>
815       </div>
816
817       <div id="method-M000387" class="method-detail">
818         <a name="M000387"></a>
819
820         <div class="method-heading">
821           <a href="#M000387" class="method-signature">
822           <span class="method-name">sign</span><span class="method-args">(string, base64=false)</span>
823           </a>
824         </div>
825       
826         <div class="method-description">
827           <p>
828 Signs a string using the private key
829 </p>
830           <p><a class="source-toggle" href="#"
831             onclick="toggleCode('M000387-source');return false;">[Source]</a></p>
832           <div class="method-source-code" id="M000387-source">
833 <pre>
834      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 168</span>
835 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>)
836 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>)
837 170: 
838 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>
839 172:     <span class="ruby-keyword kw">end</span>
840 </pre>
841           </div>
842         </div>
843       </div>
844
845       <div id="method-M000388" class="method-detail">
846         <a name="M000388"></a>
847
848         <div class="method-heading">
849           <a href="#M000388" class="method-signature">
850           <span class="method-name">verify_signature</span><span class="method-args">(signature, string, base64=false)</span>
851           </a>
852         </div>
853       
854         <div class="method-description">
855           <p>
856 Using the public key verifies that a string was signed using the private
857 key
858 </p>
859           <p><a class="source-toggle" href="#"
860             onclick="toggleCode('M000388-source');return false;">[Source]</a></p>
861           <div class="method-source-code" id="M000388-source">
862 <pre>
863      <span class="ruby-comment cmt"># File lib/mcollective/ssl.rb, line 175</span>
864 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>)
865 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>
866 177: 
867 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>)
868 179:     <span class="ruby-keyword kw">end</span>
869 </pre>
870           </div>
871         </div>
872       </div>
873
874
875     </div>
876
877
878   </div>
879
880
881 <div id="validator-badges">
882   <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
883 </div>
884
885 </body>
886 </html>