bitster 0.0.1c

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +4 -0
  3. data/.coveralls.yml +1 -0
  4. data/.gitignore +3 -0
  5. data/.rspec +2 -0
  6. data/.travis.yml +6 -0
  7. data/Gemfile +4 -0
  8. data/README.md +25 -0
  9. data/Rakefile +1 -0
  10. data/bitster.gemspec +37 -0
  11. data/coverage/.last_run.json +5 -0
  12. data/coverage/.resultset.json +363 -0
  13. data/coverage/.resultset.json.lock +0 -0
  14. data/coverage/assets/0.10.0/application.css +799 -0
  15. data/coverage/assets/0.10.0/application.js +1707 -0
  16. data/coverage/assets/0.10.0/colorbox/border.png +0 -0
  17. data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  18. data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  19. data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  20. data/coverage/assets/0.10.0/favicon_green.png +0 -0
  21. data/coverage/assets/0.10.0/favicon_red.png +0 -0
  22. data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  23. data/coverage/assets/0.10.0/loading.gif +0 -0
  24. data/coverage/assets/0.10.0/magnify.png +0 -0
  25. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  26. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  27. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  28. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  29. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  30. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  31. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  32. data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  33. data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  34. data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  35. data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  36. data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  37. data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  38. data/coverage/index.html +2290 -0
  39. data/examples/bitster.rb +58 -0
  40. data/examples/bitster.txt +9 -0
  41. data/examples/bitster_simple.rb +27 -0
  42. data/lib/bitster.rb +14 -0
  43. data/lib/bitster/crypto_math.rb +132 -0
  44. data/lib/bitster/rsa_key_pair.rb +87 -0
  45. data/lib/bitster/rsa_machine.rb +32 -0
  46. data/lib/bitster/rsa_private_key.rb +31 -0
  47. data/lib/bitster/rsa_pub_key.rb +28 -0
  48. data/lib/bitster/var_helpers.rb +13 -0
  49. data/lib/bitster/version.rb +3 -0
  50. metadata +232 -0
@@ -0,0 +1,2290 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Code coverage for Bitster</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <script src='./assets/0.10.0/application.js' type='text/javascript'></script>
7
+ <link href='./assets/0.10.0/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
+ <link rel="shortcut icon" type="image/png" href="./assets/0.10.0/favicon_green.png" />
9
+ <link rel="icon" type="image/png" href="./assets/0.10.0/favicon.png" />
10
+ </head>
11
+
12
+ <body>
13
+ <div id="loading">
14
+ <img src="./assets/0.10.0/loading.gif" alt="loading"/>
15
+ </div>
16
+ <div id="wrapper" style="display:none;">
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2015-12-24T11:44:14+02:00">2015-12-24T11:44:14+02:00</abbr></div>
18
+ <ul class="group_tabs"></ul>
19
+
20
+ <div id="content">
21
+ <div class="file_list_container" id="AllFiles">
22
+ <h2>
23
+ <span class="group_name">All Files</span>
24
+ (<span class="covered_percent"><span class="green">97.06%</span></span>
25
+ covered at
26
+ <span class="covered_strength">
27
+ <span class="green">
28
+ 17309.87
29
+ </span>
30
+ </span> hits/line)
31
+ </h2>
32
+ <a name="AllFiles"></a>
33
+ <div>
34
+ <b>7</b> files in total.
35
+ <b>170</b> relevant lines.
36
+ <span class="green"><b>165</b> lines covered</span> and
37
+ <span class="red"><b>5</b> lines missed </span>
38
+ </div>
39
+ <table class="file_list">
40
+ <thead>
41
+ <tr>
42
+ <th>File</th>
43
+ <th>% covered</th>
44
+ <th>Lines</th>
45
+ <th>Relevant Lines</th>
46
+ <th>Lines covered</th>
47
+ <th>Lines missed</th>
48
+ <th>Avg. Hits / Line</th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+
53
+ <tr>
54
+ <td class="strong"><a href="#dbf74569515d2125c9b10bd129d48cdc9940bc8b" class="src_link" title="lib/bitster.rb">lib/bitster.rb</a></td>
55
+ <td class="green strong">100.0 %</td>
56
+ <td>14</td>
57
+ <td>10</td>
58
+ <td>10</td>
59
+ <td>0</td>
60
+ <td>1.0</td>
61
+ </tr>
62
+
63
+ <tr>
64
+ <td class="strong"><a href="#30bd99fc463146fe638c6807fcf54be417f3a1db" class="src_link" title="lib/bitster/crypto_math.rb">lib/bitster/crypto_math.rb</a></td>
65
+ <td class="green strong">95.45 %</td>
66
+ <td>132</td>
67
+ <td>66</td>
68
+ <td>63</td>
69
+ <td>3</td>
70
+ <td>44557.4</td>
71
+ </tr>
72
+
73
+ <tr>
74
+ <td class="strong"><a href="#745616695eb98af9aa3ee2f247ac626695cd2ab9" class="src_link" title="lib/bitster/rsa_key_pair.rb">lib/bitster/rsa_key_pair.rb</a></td>
75
+ <td class="green strong">95.74 %</td>
76
+ <td>87</td>
77
+ <td>47</td>
78
+ <td>45</td>
79
+ <td>2</td>
80
+ <td>37.7</td>
81
+ </tr>
82
+
83
+ <tr>
84
+ <td class="strong"><a href="#6ef273b242ee3dbe8c447d26093880727c5470b3" class="src_link" title="lib/bitster/rsa_machine.rb">lib/bitster/rsa_machine.rb</a></td>
85
+ <td class="green strong">100.0 %</td>
86
+ <td>32</td>
87
+ <td>13</td>
88
+ <td>13</td>
89
+ <td>0</td>
90
+ <td>1.0</td>
91
+ </tr>
92
+
93
+ <tr>
94
+ <td class="strong"><a href="#70e932150a1de819b00983e1a92c71138c4ebbe0" class="src_link" title="lib/bitster/rsa_private_key.rb">lib/bitster/rsa_private_key.rb</a></td>
95
+ <td class="green strong">100.0 %</td>
96
+ <td>31</td>
97
+ <td>14</td>
98
+ <td>14</td>
99
+ <td>0</td>
100
+ <td>2.2</td>
101
+ </tr>
102
+
103
+ <tr>
104
+ <td class="strong"><a href="#195f4c504321614717e7ff0e743843de796ed358" class="src_link" title="lib/bitster/rsa_pub_key.rb">lib/bitster/rsa_pub_key.rb</a></td>
105
+ <td class="green strong">100.0 %</td>
106
+ <td>28</td>
107
+ <td>13</td>
108
+ <td>13</td>
109
+ <td>0</td>
110
+ <td>2.1</td>
111
+ </tr>
112
+
113
+ <tr>
114
+ <td class="strong"><a href="#3f8d2c8c0375490e0e1901751370c5378958982a" class="src_link" title="lib/bitster/var_helpers.rb">lib/bitster/var_helpers.rb</a></td>
115
+ <td class="green strong">100.0 %</td>
116
+ <td>13</td>
117
+ <td>7</td>
118
+ <td>7</td>
119
+ <td>0</td>
120
+ <td>5.3</td>
121
+ </tr>
122
+
123
+ </tbody>
124
+ </table>
125
+ </div>
126
+
127
+
128
+
129
+ </div>
130
+
131
+ <div id="footer">
132
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.10.0
133
+ and simplecov-html v0.10.0<br/>
134
+ using RSpec
135
+ </div>
136
+
137
+ <div class="source_files">
138
+
139
+ <div class="source_table" id="dbf74569515d2125c9b10bd129d48cdc9940bc8b">
140
+ <div class="header">
141
+ <h3>lib/bitster.rb</h3>
142
+ <h4><span class="green">100.0 %</span> covered</h4>
143
+ <div>
144
+ <b>10</b> relevant lines.
145
+ <span class="green"><b>10</b> lines covered</span> and
146
+ <span class="red"><b>0</b> lines missed.</span>
147
+ </div>
148
+ </div>
149
+
150
+ <pre>
151
+ <ol>
152
+
153
+ <li class="covered" data-hits="1" data-linenumber="1">
154
+ <span class="hits">1</span>
155
+
156
+ <code class="ruby">require &#39;bitster/version&#39;</code>
157
+ </li>
158
+
159
+ <li class="covered" data-hits="1" data-linenumber="2">
160
+ <span class="hits">1</span>
161
+
162
+ <code class="ruby">require &#39;bitster/crypto_math&#39;</code>
163
+ </li>
164
+
165
+ <li class="covered" data-hits="1" data-linenumber="3">
166
+ <span class="hits">1</span>
167
+
168
+ <code class="ruby">require &#39;bitster/var_helpers&#39;</code>
169
+ </li>
170
+
171
+ <li class="covered" data-hits="1" data-linenumber="4">
172
+ <span class="hits">1</span>
173
+
174
+ <code class="ruby">require &#39;bitster/rsa_key_pair&#39;</code>
175
+ </li>
176
+
177
+ <li class="covered" data-hits="1" data-linenumber="5">
178
+ <span class="hits">1</span>
179
+
180
+ <code class="ruby">require &#39;bitster/rsa_pub_key&#39;</code>
181
+ </li>
182
+
183
+ <li class="covered" data-hits="1" data-linenumber="6">
184
+ <span class="hits">1</span>
185
+
186
+ <code class="ruby">require &#39;bitster/rsa_private_key&#39;</code>
187
+ </li>
188
+
189
+ <li class="covered" data-hits="1" data-linenumber="7">
190
+ <span class="hits">1</span>
191
+
192
+ <code class="ruby">require &#39;bitster/rsa_machine&#39;</code>
193
+ </li>
194
+
195
+ <li class="never" data-hits="" data-linenumber="8">
196
+
197
+
198
+ <code class="ruby"></code>
199
+ </li>
200
+
201
+ <li class="never" data-hits="" data-linenumber="9">
202
+
203
+
204
+ <code class="ruby"></code>
205
+ </li>
206
+
207
+ <li class="covered" data-hits="1" data-linenumber="10">
208
+ <span class="hits">1</span>
209
+
210
+ <code class="ruby">require &#39;json&#39;</code>
211
+ </li>
212
+
213
+ <li class="never" data-hits="" data-linenumber="11">
214
+
215
+
216
+ <code class="ruby"></code>
217
+ </li>
218
+
219
+ <li class="covered" data-hits="1" data-linenumber="12">
220
+ <span class="hits">1</span>
221
+
222
+ <code class="ruby">module Bitster</code>
223
+ </li>
224
+
225
+ <li class="covered" data-hits="1" data-linenumber="13">
226
+ <span class="hits">1</span>
227
+
228
+ <code class="ruby"> include self::CryptoMath</code>
229
+ </li>
230
+
231
+ <li class="never" data-hits="" data-linenumber="14">
232
+
233
+
234
+ <code class="ruby">end</code>
235
+ </li>
236
+
237
+ </ol>
238
+ </pre>
239
+ </div>
240
+
241
+ <div class="source_table" id="30bd99fc463146fe638c6807fcf54be417f3a1db">
242
+ <div class="header">
243
+ <h3>lib/bitster/crypto_math.rb</h3>
244
+ <h4><span class="green">95.45 %</span> covered</h4>
245
+ <div>
246
+ <b>66</b> relevant lines.
247
+ <span class="green"><b>63</b> lines covered</span> and
248
+ <span class="red"><b>3</b> lines missed.</span>
249
+ </div>
250
+ </div>
251
+
252
+ <pre>
253
+ <ol>
254
+
255
+ <li class="covered" data-hits="1" data-linenumber="1">
256
+ <span class="hits">1</span>
257
+
258
+ <code class="ruby">module Bitster</code>
259
+ </li>
260
+
261
+ <li class="never" data-hits="" data-linenumber="2">
262
+
263
+
264
+ <code class="ruby"></code>
265
+ </li>
266
+
267
+ <li class="never" data-hits="" data-linenumber="3">
268
+
269
+
270
+ <code class="ruby"> # This module implements mathematical functions needed by the RSA layer,</code>
271
+ </li>
272
+
273
+ <li class="never" data-hits="" data-linenumber="4">
274
+
275
+
276
+ <code class="ruby"> # i.e. primality tests, modular arithmetic, and random odd number generation.</code>
277
+ </li>
278
+
279
+ <li class="never" data-hits="" data-linenumber="5">
280
+
281
+
282
+ <code class="ruby"> #</code>
283
+ </li>
284
+
285
+ <li class="never" data-hits="" data-linenumber="6">
286
+
287
+
288
+ <code class="ruby"> # ToDo: Error handling (with custom Exception class, etc.)</code>
289
+ </li>
290
+
291
+ <li class="never" data-hits="" data-linenumber="7">
292
+
293
+
294
+ <code class="ruby"> #</code>
295
+ </li>
296
+
297
+ <li class="covered" data-hits="1" data-linenumber="8">
298
+ <span class="hits">1</span>
299
+
300
+ <code class="ruby"> module CryptoMath</code>
301
+ </li>
302
+
303
+ <li class="never" data-hits="" data-linenumber="9">
304
+
305
+
306
+ <code class="ruby"></code>
307
+ </li>
308
+
309
+ <li class="never" data-hits="" data-linenumber="10">
310
+
311
+
312
+ <code class="ruby"> # This function performs what is known as Modular exponentiation</code>
313
+ </li>
314
+
315
+ <li class="never" data-hits="" data-linenumber="11">
316
+
317
+
318
+ <code class="ruby"> # https://en.wikipedia.org/wiki/Modular_exponentiation</code>
319
+ </li>
320
+
321
+ <li class="never" data-hits="" data-linenumber="12">
322
+
323
+
324
+ <code class="ruby"> #</code>
325
+ </li>
326
+
327
+ <li class="never" data-hits="" data-linenumber="13">
328
+
329
+
330
+ <code class="ruby"> # Modular exponentiation are easy to compute, even when the numbers</code>
331
+ </li>
332
+
333
+ <li class="never" data-hits="" data-linenumber="14">
334
+
335
+
336
+ <code class="ruby"> # involved are enormous.</code>
337
+ </li>
338
+
339
+ <li class="never" data-hits="" data-linenumber="15">
340
+
341
+
342
+ <code class="ruby"> #</code>
343
+ </li>
344
+
345
+ <li class="covered" data-hits="1" data-linenumber="16">
346
+ <span class="hits">1</span>
347
+
348
+ <code class="ruby"> def modular_pow(base, exponent, modulus)</code>
349
+ </li>
350
+
351
+ <li class="covered" data-hits="2401" data-linenumber="17">
352
+ <span class="hits">2401</span>
353
+
354
+ <code class="ruby"> return nil if modulus == 1</code>
355
+ </li>
356
+
357
+ <li class="covered" data-hits="2401" data-linenumber="18">
358
+ <span class="hits">2401</span>
359
+
360
+ <code class="ruby"> result = 1</code>
361
+ </li>
362
+
363
+ <li class="covered" data-hits="2401" data-linenumber="19">
364
+ <span class="hits">2401</span>
365
+
366
+ <code class="ruby"> base = base % modulus</code>
367
+ </li>
368
+
369
+ <li class="covered" data-hits="2401" data-linenumber="20">
370
+ <span class="hits">2401</span>
371
+
372
+ <code class="ruby"> while exponent &gt; 0 do</code>
373
+ </li>
374
+
375
+ <li class="covered" data-hits="832011" data-linenumber="21">
376
+ <span class="hits">832011</span>
377
+
378
+ <code class="ruby"> if (exponent % 2) == 1</code>
379
+ </li>
380
+
381
+ <li class="covered" data-hits="415518" data-linenumber="22">
382
+ <span class="hits">415518</span>
383
+
384
+ <code class="ruby"> result = (result * base) % modulus</code>
385
+ </li>
386
+
387
+ <li class="never" data-hits="" data-linenumber="23">
388
+
389
+
390
+ <code class="ruby"> end</code>
391
+ </li>
392
+
393
+ <li class="covered" data-hits="832011" data-linenumber="24">
394
+ <span class="hits">832011</span>
395
+
396
+ <code class="ruby"> exponent = exponent &gt;&gt; 1</code>
397
+ </li>
398
+
399
+ <li class="covered" data-hits="832011" data-linenumber="25">
400
+ <span class="hits">832011</span>
401
+
402
+ <code class="ruby"> base = (base * base) % modulus</code>
403
+ </li>
404
+
405
+ <li class="never" data-hits="" data-linenumber="26">
406
+
407
+
408
+ <code class="ruby"> end</code>
409
+ </li>
410
+
411
+ <li class="covered" data-hits="2401" data-linenumber="27">
412
+ <span class="hits">2401</span>
413
+
414
+ <code class="ruby"> result</code>
415
+ </li>
416
+
417
+ <li class="never" data-hits="" data-linenumber="28">
418
+
419
+
420
+ <code class="ruby"> end</code>
421
+ </li>
422
+
423
+ <li class="never" data-hits="" data-linenumber="29">
424
+
425
+
426
+ <code class="ruby"></code>
427
+ </li>
428
+
429
+ <li class="never" data-hits="" data-linenumber="30">
430
+
431
+
432
+ <code class="ruby"> # This function just combines Fermat test and Rabin-Miller test.</code>
433
+ </li>
434
+
435
+ <li class="never" data-hits="" data-linenumber="31">
436
+
437
+
438
+ <code class="ruby"> # If both witness the primality, we consider the argument a</code>
439
+ </li>
440
+
441
+ <li class="never" data-hits="" data-linenumber="32">
442
+
443
+
444
+ <code class="ruby"> # probable prime</code>
445
+ </li>
446
+
447
+ <li class="never" data-hits="" data-linenumber="33">
448
+
449
+
450
+ <code class="ruby"> #</code>
451
+ </li>
452
+
453
+ <li class="never" data-hits="" data-linenumber="34">
454
+
455
+
456
+ <code class="ruby"> # ToDo: How to calculate an optimal number of RM rounds instead of 7?</code>
457
+ </li>
458
+
459
+ <li class="never" data-hits="" data-linenumber="35">
460
+
461
+
462
+ <code class="ruby"> #</code>
463
+ </li>
464
+
465
+ <li class="covered" data-hits="1" data-linenumber="36">
466
+ <span class="hits">1</span>
467
+
468
+ <code class="ruby"> def probable_prime?(p, k=7)</code>
469
+ </li>
470
+
471
+ <li class="covered" data-hits="834" data-linenumber="37">
472
+ <span class="hits">834</span>
473
+
474
+ <code class="ruby"> fermat_prime?(p) &amp;&amp; rm_prime?(p, k)</code>
475
+ </li>
476
+
477
+ <li class="never" data-hits="" data-linenumber="38">
478
+
479
+
480
+ <code class="ruby"> end</code>
481
+ </li>
482
+
483
+ <li class="never" data-hits="" data-linenumber="39">
484
+
485
+
486
+ <code class="ruby"></code>
487
+ </li>
488
+
489
+ <li class="never" data-hits="" data-linenumber="40">
490
+
491
+
492
+ <code class="ruby"> # This is Fermat primality test.</code>
493
+ </li>
494
+
495
+ <li class="never" data-hits="" data-linenumber="41">
496
+
497
+
498
+ <code class="ruby"> # https://en.wikipedia.org/wiki/Fermat_primality_test</code>
499
+ </li>
500
+
501
+ <li class="never" data-hits="" data-linenumber="42">
502
+
503
+
504
+ <code class="ruby"> #</code>
505
+ </li>
506
+
507
+ <li class="never" data-hits="" data-linenumber="43">
508
+
509
+
510
+ <code class="ruby"> # ToDo: How to really choose &quot;a&quot; and how many iterations to run?</code>
511
+ </li>
512
+
513
+ <li class="never" data-hits="" data-linenumber="44">
514
+
515
+
516
+ <code class="ruby"> #</code>
517
+ </li>
518
+
519
+ <li class="covered" data-hits="1" data-linenumber="45">
520
+ <span class="hits">1</span>
521
+
522
+ <code class="ruby"> def fermat_prime?(p)</code>
523
+ </li>
524
+
525
+ <li class="covered" data-hits="854" data-linenumber="46">
526
+ <span class="hits">854</span>
527
+
528
+ <code class="ruby"> raise ArgumentError, &#39;Argument must be an Integer greater than 3&#39; unless p.is_a?(Integer) &amp;&amp; (p&gt;3)</code>
529
+ </li>
530
+
531
+ <li class="covered" data-hits="854" data-linenumber="47">
532
+ <span class="hits">854</span>
533
+
534
+ <code class="ruby"> [p-1, p/2, p/3, p/4, 1].each do |a|</code>
535
+ </li>
536
+
537
+ <li class="never" data-hits="" data-linenumber="48">
538
+
539
+
540
+ <code class="ruby"> # return false if (a**(p-1) % p) != (1 % p)</code>
541
+ </li>
542
+
543
+ <li class="covered" data-hits="1786" data-linenumber="49">
544
+ <span class="hits">1786</span>
545
+
546
+ <code class="ruby"> return false if modular_pow(a, (p-1), p) != (1 % p)</code>
547
+ </li>
548
+
549
+ <li class="never" data-hits="" data-linenumber="50">
550
+
551
+
552
+ <code class="ruby"> end</code>
553
+ </li>
554
+
555
+ <li class="covered" data-hits="26" data-linenumber="51">
556
+ <span class="hits">26</span>
557
+
558
+ <code class="ruby"> true</code>
559
+ </li>
560
+
561
+ <li class="never" data-hits="" data-linenumber="52">
562
+
563
+
564
+ <code class="ruby"> end</code>
565
+ </li>
566
+
567
+ <li class="never" data-hits="" data-linenumber="53">
568
+
569
+
570
+ <code class="ruby"></code>
571
+ </li>
572
+
573
+ <li class="never" data-hits="" data-linenumber="54">
574
+
575
+
576
+ <code class="ruby"> # This is Rabin-Miller primality test</code>
577
+ </li>
578
+
579
+ <li class="never" data-hits="" data-linenumber="55">
580
+
581
+
582
+ <code class="ruby"> # https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test</code>
583
+ </li>
584
+
585
+ <li class="never" data-hits="" data-linenumber="56">
586
+
587
+
588
+ <code class="ruby"> #</code>
589
+ </li>
590
+
591
+ <li class="covered" data-hits="1" data-linenumber="57">
592
+ <span class="hits">1</span>
593
+
594
+ <code class="ruby"> def rm_prime?(n, k)</code>
595
+ </li>
596
+
597
+ <li class="covered" data-hits="36" data-linenumber="58">
598
+ <span class="hits">36</span>
599
+
600
+ <code class="ruby"> r=0; d=0</code>
601
+ </li>
602
+
603
+ <li class="covered" data-hits="36" data-linenumber="59">
604
+ <span class="hits">36</span>
605
+
606
+ <code class="ruby"> (1..128).each do |i|</code>
607
+ </li>
608
+
609
+ <li class="covered" data-hits="74" data-linenumber="60">
610
+ <span class="hits">74</span>
611
+
612
+ <code class="ruby"> d = n / (2**i)</code>
613
+ </li>
614
+
615
+ <li class="covered" data-hits="74" data-linenumber="61">
616
+ <span class="hits">74</span>
617
+
618
+ <code class="ruby"> r = i</code>
619
+ </li>
620
+
621
+ <li class="covered" data-hits="74" data-linenumber="62">
622
+ <span class="hits">74</span>
623
+
624
+ <code class="ruby"> break unless (d % 2) == 0</code>
625
+ </li>
626
+
627
+ <li class="never" data-hits="" data-linenumber="63">
628
+
629
+
630
+ <code class="ruby"> end</code>
631
+ </li>
632
+
633
+ <li class="covered" data-hits="36" data-linenumber="64">
634
+ <span class="hits">36</span>
635
+
636
+ <code class="ruby"> k.times do</code>
637
+ </li>
638
+
639
+ <li class="covered" data-hits="380" data-linenumber="65">
640
+ <span class="hits">380</span>
641
+
642
+ <code class="ruby"> flg = false</code>
643
+ </li>
644
+
645
+ <li class="covered" data-hits="380" data-linenumber="66">
646
+ <span class="hits">380</span>
647
+
648
+ <code class="ruby"> a = rand(2..(n-2))</code>
649
+ </li>
650
+
651
+ <li class="covered" data-hits="380" data-linenumber="67">
652
+ <span class="hits">380</span>
653
+
654
+ <code class="ruby"> x = modular_pow(a, d, n)</code>
655
+ </li>
656
+
657
+ <li class="covered" data-hits="380" data-linenumber="68">
658
+ <span class="hits">380</span>
659
+
660
+ <code class="ruby"> if (x == 1) || (x == (n - 1))</code>
661
+ </li>
662
+
663
+ <li class="covered" data-hits="220" data-linenumber="69">
664
+ <span class="hits">220</span>
665
+
666
+ <code class="ruby"> next</code>
667
+ </li>
668
+
669
+ <li class="never" data-hits="" data-linenumber="70">
670
+
671
+
672
+ <code class="ruby"> end</code>
673
+ </li>
674
+
675
+ <li class="covered" data-hits="160" data-linenumber="71">
676
+ <span class="hits">160</span>
677
+
678
+ <code class="ruby"> (r-1).times do</code>
679
+ </li>
680
+
681
+ <li class="covered" data-hits="230" data-linenumber="72">
682
+ <span class="hits">230</span>
683
+
684
+ <code class="ruby"> x = modular_pow(x, 2, n)</code>
685
+ </li>
686
+
687
+ <li class="covered" data-hits="230" data-linenumber="73">
688
+ <span class="hits">230</span>
689
+
690
+ <code class="ruby"> return false if x == 1</code>
691
+ </li>
692
+
693
+ <li class="covered" data-hits="230" data-linenumber="74">
694
+ <span class="hits">230</span>
695
+
696
+ <code class="ruby"> if x == (n - 1)</code>
697
+ </li>
698
+
699
+ <li class="covered" data-hits="150" data-linenumber="75">
700
+ <span class="hits">150</span>
701
+
702
+ <code class="ruby"> flg = true</code>
703
+ </li>
704
+
705
+ <li class="covered" data-hits="150" data-linenumber="76">
706
+ <span class="hits">150</span>
707
+
708
+ <code class="ruby"> break</code>
709
+ </li>
710
+
711
+ <li class="never" data-hits="" data-linenumber="77">
712
+
713
+
714
+ <code class="ruby"> end</code>
715
+ </li>
716
+
717
+ <li class="never" data-hits="" data-linenumber="78">
718
+
719
+
720
+ <code class="ruby"> end</code>
721
+ </li>
722
+
723
+ <li class="covered" data-hits="160" data-linenumber="79">
724
+ <span class="hits">160</span>
725
+
726
+ <code class="ruby"> next if flg</code>
727
+ </li>
728
+
729
+ <li class="covered" data-hits="10" data-linenumber="80">
730
+ <span class="hits">10</span>
731
+
732
+ <code class="ruby"> return false</code>
733
+ </li>
734
+
735
+ <li class="never" data-hits="" data-linenumber="81">
736
+
737
+
738
+ <code class="ruby"> end</code>
739
+ </li>
740
+
741
+ <li class="covered" data-hits="26" data-linenumber="82">
742
+ <span class="hits">26</span>
743
+
744
+ <code class="ruby"> true</code>
745
+ </li>
746
+
747
+ <li class="never" data-hits="" data-linenumber="83">
748
+
749
+
750
+ <code class="ruby"> end</code>
751
+ </li>
752
+
753
+ <li class="never" data-hits="" data-linenumber="84">
754
+
755
+
756
+ <code class="ruby"></code>
757
+ </li>
758
+
759
+ <li class="never" data-hits="" data-linenumber="85">
760
+
761
+
762
+ <code class="ruby"> # This function generates a random odd integer in a range of</code>
763
+ </li>
764
+
765
+ <li class="never" data-hits="" data-linenumber="86">
766
+
767
+
768
+ <code class="ruby"> # 2^(bits-1) ... 2^(bits)</code>
769
+ </li>
770
+
771
+ <li class="never" data-hits="" data-linenumber="87">
772
+
773
+
774
+ <code class="ruby"> #</code>
775
+ </li>
776
+
777
+ <li class="never" data-hits="" data-linenumber="88">
778
+
779
+
780
+ <code class="ruby"> # ToDo: What should the minimum really be?</code>
781
+ </li>
782
+
783
+ <li class="never" data-hits="" data-linenumber="89">
784
+
785
+
786
+ <code class="ruby"> #</code>
787
+ </li>
788
+
789
+ <li class="covered" data-hits="1" data-linenumber="90">
790
+ <span class="hits">1</span>
791
+
792
+ <code class="ruby"> def gen_odd(bits)</code>
793
+ </li>
794
+
795
+ <li class="covered" data-hits="841" data-linenumber="91">
796
+ <span class="hits">841</span>
797
+
798
+ <code class="ruby"> max = 2**bits</code>
799
+ </li>
800
+
801
+ <li class="covered" data-hits="841" data-linenumber="92">
802
+ <span class="hits">841</span>
803
+
804
+ <code class="ruby"> min = 2**(bits-1)</code>
805
+ </li>
806
+
807
+ <li class="covered" data-hits="841" data-linenumber="93">
808
+ <span class="hits">841</span>
809
+
810
+ <code class="ruby"> r = rand(min..max)</code>
811
+ </li>
812
+
813
+ <li class="covered" data-hits="841" data-linenumber="94">
814
+ <span class="hits">841</span>
815
+
816
+ <code class="ruby"> return r - 1 if r%2 == 0</code>
817
+ </li>
818
+
819
+ <li class="covered" data-hits="404" data-linenumber="95">
820
+ <span class="hits">404</span>
821
+
822
+ <code class="ruby"> r</code>
823
+ </li>
824
+
825
+ <li class="never" data-hits="" data-linenumber="96">
826
+
827
+
828
+ <code class="ruby"> end</code>
829
+ </li>
830
+
831
+ <li class="never" data-hits="" data-linenumber="97">
832
+
833
+
834
+ <code class="ruby"></code>
835
+ </li>
836
+
837
+ <li class="never" data-hits="" data-linenumber="98">
838
+
839
+
840
+ <code class="ruby"> # This function calculates the Modular multiplicative inverse</code>
841
+ </li>
842
+
843
+ <li class="never" data-hits="" data-linenumber="99">
844
+
845
+
846
+ <code class="ruby"> # which is needed in the key generation process.</code>
847
+ </li>
848
+
849
+ <li class="never" data-hits="" data-linenumber="100">
850
+
851
+
852
+ <code class="ruby"> # https://en.wikipedia.org/wiki/Modular_multiplicative_inverse</code>
853
+ </li>
854
+
855
+ <li class="never" data-hits="" data-linenumber="101">
856
+
857
+
858
+ <code class="ruby"> #</code>
859
+ </li>
860
+
861
+ <li class="covered" data-hits="1" data-linenumber="102">
862
+ <span class="hits">1</span>
863
+
864
+ <code class="ruby"> def modular_multiplicative_inverse(a, n)</code>
865
+ </li>
866
+
867
+ <li class="covered" data-hits="3" data-linenumber="103">
868
+ <span class="hits">3</span>
869
+
870
+ <code class="ruby"> t = 0</code>
871
+ </li>
872
+
873
+ <li class="covered" data-hits="3" data-linenumber="104">
874
+ <span class="hits">3</span>
875
+
876
+ <code class="ruby"> nt = 1</code>
877
+ </li>
878
+
879
+ <li class="covered" data-hits="3" data-linenumber="105">
880
+ <span class="hits">3</span>
881
+
882
+ <code class="ruby"> r = n</code>
883
+ </li>
884
+
885
+ <li class="covered" data-hits="3" data-linenumber="106">
886
+ <span class="hits">3</span>
887
+
888
+ <code class="ruby"> nr = a % n</code>
889
+ </li>
890
+
891
+ <li class="never" data-hits="" data-linenumber="107">
892
+
893
+
894
+ <code class="ruby"></code>
895
+ </li>
896
+
897
+ <li class="covered" data-hits="3" data-linenumber="108">
898
+ <span class="hits">3</span>
899
+
900
+ <code class="ruby"> if n &lt; 0</code>
901
+ </li>
902
+
903
+ <li class="missed" data-hits="0" data-linenumber="109">
904
+
905
+
906
+ <code class="ruby"> n = -n</code>
907
+ </li>
908
+
909
+ <li class="never" data-hits="" data-linenumber="110">
910
+
911
+
912
+ <code class="ruby"> end</code>
913
+ </li>
914
+
915
+ <li class="covered" data-hits="3" data-linenumber="111">
916
+ <span class="hits">3</span>
917
+
918
+ <code class="ruby"> if a &lt; 0</code>
919
+ </li>
920
+
921
+ <li class="missed" data-hits="0" data-linenumber="112">
922
+
923
+
924
+ <code class="ruby"> a = n - (-a % n)</code>
925
+ </li>
926
+
927
+ <li class="never" data-hits="" data-linenumber="113">
928
+
929
+
930
+ <code class="ruby"> end</code>
931
+ </li>
932
+
933
+ <li class="covered" data-hits="3" data-linenumber="114">
934
+ <span class="hits">3</span>
935
+
936
+ <code class="ruby"> while nr != 0 do</code>
937
+ </li>
938
+
939
+ <li class="covered" data-hits="1414" data-linenumber="115">
940
+ <span class="hits">1414</span>
941
+
942
+ <code class="ruby"> quot = 0</code>
943
+ </li>
944
+
945
+ <li class="covered" data-hits="1414" data-linenumber="116">
946
+ <span class="hits">1414</span>
947
+
948
+ <code class="ruby"> quot = (r/nr) unless (r/nr) == 0</code>
949
+ </li>
950
+
951
+ <li class="covered" data-hits="1414" data-linenumber="117">
952
+ <span class="hits">1414</span>
953
+
954
+ <code class="ruby"> tmp = nt; nt = t - quot*nt; t = tmp</code>
955
+ </li>
956
+
957
+ <li class="covered" data-hits="1414" data-linenumber="118">
958
+ <span class="hits">1414</span>
959
+
960
+ <code class="ruby"> tmp = nr; nr = r - quot*nr; r = tmp</code>
961
+ </li>
962
+
963
+ <li class="never" data-hits="" data-linenumber="119">
964
+
965
+
966
+ <code class="ruby"> end</code>
967
+ </li>
968
+
969
+ <li class="covered" data-hits="3" data-linenumber="120">
970
+ <span class="hits">3</span>
971
+
972
+ <code class="ruby"> if r &gt; 1</code>
973
+ </li>
974
+
975
+ <li class="missed" data-hits="0" data-linenumber="121">
976
+
977
+
978
+ <code class="ruby"> raise StandardError, &quot;#{a} and #{n} are not coprimes, can&#39;t find MMI&quot;</code>
979
+ </li>
980
+
981
+ <li class="never" data-hits="" data-linenumber="122">
982
+
983
+
984
+ <code class="ruby"> end</code>
985
+ </li>
986
+
987
+ <li class="covered" data-hits="3" data-linenumber="123">
988
+ <span class="hits">3</span>
989
+
990
+ <code class="ruby"> if t &lt; 0</code>
991
+ </li>
992
+
993
+ <li class="covered" data-hits="1" data-linenumber="124">
994
+ <span class="hits">1</span>
995
+
996
+ <code class="ruby"> t += n</code>
997
+ </li>
998
+
999
+ <li class="never" data-hits="" data-linenumber="125">
1000
+
1001
+
1002
+ <code class="ruby"> end</code>
1003
+ </li>
1004
+
1005
+ <li class="covered" data-hits="3" data-linenumber="126">
1006
+ <span class="hits">3</span>
1007
+
1008
+ <code class="ruby"> t</code>
1009
+ </li>
1010
+
1011
+ <li class="never" data-hits="" data-linenumber="127">
1012
+
1013
+
1014
+ <code class="ruby"> end</code>
1015
+ </li>
1016
+
1017
+ <li class="never" data-hits="" data-linenumber="128">
1018
+
1019
+
1020
+ <code class="ruby"> </code>
1021
+ </li>
1022
+
1023
+ <li class="covered" data-hits="1" data-linenumber="129">
1024
+ <span class="hits">1</span>
1025
+
1026
+ <code class="ruby"> extend self</code>
1027
+ </li>
1028
+
1029
+ <li class="never" data-hits="" data-linenumber="130">
1030
+
1031
+
1032
+ <code class="ruby"></code>
1033
+ </li>
1034
+
1035
+ <li class="never" data-hits="" data-linenumber="131">
1036
+
1037
+
1038
+ <code class="ruby"> end</code>
1039
+ </li>
1040
+
1041
+ <li class="never" data-hits="" data-linenumber="132">
1042
+
1043
+
1044
+ <code class="ruby">end</code>
1045
+ </li>
1046
+
1047
+ </ol>
1048
+ </pre>
1049
+ </div>
1050
+
1051
+ <div class="source_table" id="745616695eb98af9aa3ee2f247ac626695cd2ab9">
1052
+ <div class="header">
1053
+ <h3>lib/bitster/rsa_key_pair.rb</h3>
1054
+ <h4><span class="green">95.74 %</span> covered</h4>
1055
+ <div>
1056
+ <b>47</b> relevant lines.
1057
+ <span class="green"><b>45</b> lines covered</span> and
1058
+ <span class="red"><b>2</b> lines missed.</span>
1059
+ </div>
1060
+ </div>
1061
+
1062
+ <pre>
1063
+ <ol>
1064
+
1065
+ <li class="covered" data-hits="1" data-linenumber="1">
1066
+ <span class="hits">1</span>
1067
+
1068
+ <code class="ruby">module Bitster</code>
1069
+ </li>
1070
+
1071
+ <li class="never" data-hits="" data-linenumber="2">
1072
+
1073
+
1074
+ <code class="ruby"></code>
1075
+ </li>
1076
+
1077
+ <li class="never" data-hits="" data-linenumber="3">
1078
+
1079
+
1080
+ <code class="ruby"> # This class represents a RSA key-pair. The most important feature is the</code>
1081
+ </li>
1082
+
1083
+ <li class="never" data-hits="" data-linenumber="4">
1084
+
1085
+
1086
+ <code class="ruby"> # generation of the key-pair, so it is an implementation of the process</code>
1087
+ </li>
1088
+
1089
+ <li class="never" data-hits="" data-linenumber="5">
1090
+
1091
+
1092
+ <code class="ruby"> # outlined in https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Key_generation</code>
1093
+ </li>
1094
+
1095
+ <li class="never" data-hits="" data-linenumber="6">
1096
+
1097
+
1098
+ <code class="ruby"> #</code>
1099
+ </li>
1100
+
1101
+ <li class="covered" data-hits="1" data-linenumber="7">
1102
+ <span class="hits">1</span>
1103
+
1104
+ <code class="ruby"> class RSAKeyPair</code>
1105
+ </li>
1106
+
1107
+ <li class="never" data-hits="" data-linenumber="8">
1108
+
1109
+
1110
+ <code class="ruby"></code>
1111
+ </li>
1112
+
1113
+ <li class="covered" data-hits="1" data-linenumber="9">
1114
+ <span class="hits">1</span>
1115
+
1116
+ <code class="ruby"> class RSAKeyPairError &lt; StandardError</code>
1117
+ </li>
1118
+
1119
+ <li class="never" data-hits="" data-linenumber="10">
1120
+
1121
+
1122
+ <code class="ruby"> end</code>
1123
+ </li>
1124
+
1125
+ <li class="never" data-hits="" data-linenumber="11">
1126
+
1127
+
1128
+ <code class="ruby"></code>
1129
+ </li>
1130
+
1131
+ <li class="covered" data-hits="1" data-linenumber="12">
1132
+ <span class="hits">1</span>
1133
+
1134
+ <code class="ruby"> attr_reader :len, :shorter, :p, :q, :n, :k, :e, :private_key, :public_key</code>
1135
+ </li>
1136
+
1137
+ <li class="never" data-hits="" data-linenumber="13">
1138
+
1139
+
1140
+ <code class="ruby"></code>
1141
+ </li>
1142
+
1143
+ <li class="covered" data-hits="1" data-linenumber="14">
1144
+ <span class="hits">1</span>
1145
+
1146
+ <code class="ruby"> def initialize(len)</code>
1147
+ </li>
1148
+
1149
+ <li class="covered" data-hits="3" data-linenumber="15">
1150
+ <span class="hits">3</span>
1151
+
1152
+ <code class="ruby"> @len = len</code>
1153
+ </li>
1154
+
1155
+ <li class="never" data-hits="" data-linenumber="16">
1156
+
1157
+
1158
+ <code class="ruby"></code>
1159
+ </li>
1160
+
1161
+ <li class="covered" data-hits="3" data-linenumber="17">
1162
+ <span class="hits">3</span>
1163
+
1164
+ <code class="ruby"> @shorter = rand(0..1)</code>
1165
+ </li>
1166
+
1167
+ <li class="covered" data-hits="3" data-linenumber="18">
1168
+ <span class="hits">3</span>
1169
+
1170
+ <code class="ruby"> @p = gen_p</code>
1171
+ </li>
1172
+
1173
+ <li class="covered" data-hits="3" data-linenumber="19">
1174
+ <span class="hits">3</span>
1175
+
1176
+ <code class="ruby"> @q = gen_q</code>
1177
+ </li>
1178
+
1179
+ <li class="covered" data-hits="3" data-linenumber="20">
1180
+ <span class="hits">3</span>
1181
+
1182
+ <code class="ruby"> @n = @p * @q # modulus</code>
1183
+ </li>
1184
+
1185
+ <li class="covered" data-hits="3" data-linenumber="21">
1186
+ <span class="hits">3</span>
1187
+
1188
+ <code class="ruby"> @k = gen_totient</code>
1189
+ </li>
1190
+
1191
+ <li class="covered" data-hits="3" data-linenumber="22">
1192
+ <span class="hits">3</span>
1193
+
1194
+ <code class="ruby"> @e = gen_e # pubkey exponent</code>
1195
+ </li>
1196
+
1197
+ <li class="covered" data-hits="3" data-linenumber="23">
1198
+ <span class="hits">3</span>
1199
+
1200
+ <code class="ruby"> @d = gen_d # prikey exponent</code>
1201
+ </li>
1202
+
1203
+ <li class="never" data-hits="" data-linenumber="24">
1204
+
1205
+
1206
+ <code class="ruby"></code>
1207
+ </li>
1208
+
1209
+ <li class="covered" data-hits="3" data-linenumber="25">
1210
+ <span class="hits">3</span>
1211
+
1212
+ <code class="ruby"> @private_key = RSAPrivateKey.new(@p, @q, @d, @len)</code>
1213
+ </li>
1214
+
1215
+ <li class="covered" data-hits="3" data-linenumber="26">
1216
+ <span class="hits">3</span>
1217
+
1218
+ <code class="ruby"> @public_key = RSAPubKey.new(@n, @e, @len)</code>
1219
+ </li>
1220
+
1221
+ <li class="never" data-hits="" data-linenumber="27">
1222
+
1223
+
1224
+ <code class="ruby"></code>
1225
+ </li>
1226
+
1227
+ <li class="never" data-hits="" data-linenumber="28">
1228
+
1229
+
1230
+ <code class="ruby"> end</code>
1231
+ </li>
1232
+
1233
+ <li class="never" data-hits="" data-linenumber="29">
1234
+
1235
+
1236
+ <code class="ruby"></code>
1237
+ </li>
1238
+
1239
+ <li class="covered" data-hits="1" data-linenumber="30">
1240
+ <span class="hits">1</span>
1241
+
1242
+ <code class="ruby"> private</code>
1243
+ </li>
1244
+
1245
+ <li class="covered" data-hits="1" data-linenumber="31">
1246
+ <span class="hits">1</span>
1247
+
1248
+ <code class="ruby"> include CryptoMath</code>
1249
+ </li>
1250
+
1251
+ <li class="never" data-hits="" data-linenumber="32">
1252
+
1253
+
1254
+ <code class="ruby"></code>
1255
+ </li>
1256
+
1257
+ <li class="never" data-hits="" data-linenumber="33">
1258
+
1259
+
1260
+ <code class="ruby"> # ToDo: what should the length difference of p and q really be?</code>
1261
+ </li>
1262
+
1263
+ <li class="covered" data-hits="1" data-linenumber="34">
1264
+ <span class="hits">1</span>
1265
+
1266
+ <code class="ruby"> def gen_p</code>
1267
+ </li>
1268
+
1269
+ <li class="covered" data-hits="3" data-linenumber="35">
1270
+ <span class="hits">3</span>
1271
+
1272
+ <code class="ruby"> handle_exceptions do</code>
1273
+ </li>
1274
+
1275
+ <li class="covered" data-hits="3" data-linenumber="36">
1276
+ <span class="hits">3</span>
1277
+
1278
+ <code class="ruby"> len_p = @len/2</code>
1279
+ </li>
1280
+
1281
+ <li class="covered" data-hits="3" data-linenumber="37">
1282
+ <span class="hits">3</span>
1283
+
1284
+ <code class="ruby"> len_p -= rand(2..4) if @shorter == 0</code>
1285
+ </li>
1286
+
1287
+ <li class="covered" data-hits="3" data-linenumber="38">
1288
+ <span class="hits">3</span>
1289
+
1290
+ <code class="ruby"> loop do</code>
1291
+ </li>
1292
+
1293
+ <li class="covered" data-hits="413" data-linenumber="39">
1294
+ <span class="hits">413</span>
1295
+
1296
+ <code class="ruby"> p = gen_odd(len_p)</code>
1297
+ </li>
1298
+
1299
+ <li class="covered" data-hits="413" data-linenumber="40">
1300
+ <span class="hits">413</span>
1301
+
1302
+ <code class="ruby"> return p if probable_prime?(p)</code>
1303
+ </li>
1304
+
1305
+ <li class="never" data-hits="" data-linenumber="41">
1306
+
1307
+
1308
+ <code class="ruby"> end</code>
1309
+ </li>
1310
+
1311
+ <li class="never" data-hits="" data-linenumber="42">
1312
+
1313
+
1314
+ <code class="ruby"> end</code>
1315
+ </li>
1316
+
1317
+ <li class="never" data-hits="" data-linenumber="43">
1318
+
1319
+
1320
+ <code class="ruby"> end</code>
1321
+ </li>
1322
+
1323
+ <li class="never" data-hits="" data-linenumber="44">
1324
+
1325
+
1326
+ <code class="ruby"></code>
1327
+ </li>
1328
+
1329
+ <li class="never" data-hits="" data-linenumber="45">
1330
+
1331
+
1332
+ <code class="ruby"> # ToDo: what should the length difference of p and q really be?</code>
1333
+ </li>
1334
+
1335
+ <li class="covered" data-hits="1" data-linenumber="46">
1336
+ <span class="hits">1</span>
1337
+
1338
+ <code class="ruby"> def gen_q</code>
1339
+ </li>
1340
+
1341
+ <li class="covered" data-hits="3" data-linenumber="47">
1342
+ <span class="hits">3</span>
1343
+
1344
+ <code class="ruby"> handle_exceptions do</code>
1345
+ </li>
1346
+
1347
+ <li class="covered" data-hits="3" data-linenumber="48">
1348
+ <span class="hits">3</span>
1349
+
1350
+ <code class="ruby"> len_q = @len/2</code>
1351
+ </li>
1352
+
1353
+ <li class="covered" data-hits="3" data-linenumber="49">
1354
+ <span class="hits">3</span>
1355
+
1356
+ <code class="ruby"> len_q -= rand(2..4) if @shorter == 1</code>
1357
+ </li>
1358
+
1359
+ <li class="covered" data-hits="3" data-linenumber="50">
1360
+ <span class="hits">3</span>
1361
+
1362
+ <code class="ruby"> loop do</code>
1363
+ </li>
1364
+
1365
+ <li class="covered" data-hits="401" data-linenumber="51">
1366
+ <span class="hits">401</span>
1367
+
1368
+ <code class="ruby"> q = gen_odd(len_q)</code>
1369
+ </li>
1370
+
1371
+ <li class="covered" data-hits="401" data-linenumber="52">
1372
+ <span class="hits">401</span>
1373
+
1374
+ <code class="ruby"> return q if probable_prime?(q)</code>
1375
+ </li>
1376
+
1377
+ <li class="never" data-hits="" data-linenumber="53">
1378
+
1379
+
1380
+ <code class="ruby"> end</code>
1381
+ </li>
1382
+
1383
+ <li class="never" data-hits="" data-linenumber="54">
1384
+
1385
+
1386
+ <code class="ruby"> end</code>
1387
+ </li>
1388
+
1389
+ <li class="never" data-hits="" data-linenumber="55">
1390
+
1391
+
1392
+ <code class="ruby"> end</code>
1393
+ </li>
1394
+
1395
+ <li class="never" data-hits="" data-linenumber="56">
1396
+
1397
+
1398
+ <code class="ruby"></code>
1399
+ </li>
1400
+
1401
+ <li class="covered" data-hits="1" data-linenumber="57">
1402
+ <span class="hits">1</span>
1403
+
1404
+ <code class="ruby"> def gen_totient</code>
1405
+ </li>
1406
+
1407
+ <li class="covered" data-hits="3" data-linenumber="58">
1408
+ <span class="hits">3</span>
1409
+
1410
+ <code class="ruby"> handle_exceptions do</code>
1411
+ </li>
1412
+
1413
+ <li class="covered" data-hits="3" data-linenumber="59">
1414
+ <span class="hits">3</span>
1415
+
1416
+ <code class="ruby"> (@p-1)*(@q-1)</code>
1417
+ </li>
1418
+
1419
+ <li class="never" data-hits="" data-linenumber="60">
1420
+
1421
+
1422
+ <code class="ruby"> end</code>
1423
+ </li>
1424
+
1425
+ <li class="never" data-hits="" data-linenumber="61">
1426
+
1427
+
1428
+ <code class="ruby"> end</code>
1429
+ </li>
1430
+
1431
+ <li class="never" data-hits="" data-linenumber="62">
1432
+
1433
+
1434
+ <code class="ruby"></code>
1435
+ </li>
1436
+
1437
+ <li class="never" data-hits="" data-linenumber="63">
1438
+
1439
+
1440
+ <code class="ruby"> # ToDo: what should the lower bound really be?</code>
1441
+ </li>
1442
+
1443
+ <li class="covered" data-hits="1" data-linenumber="64">
1444
+ <span class="hits">1</span>
1445
+
1446
+ <code class="ruby"> def gen_e</code>
1447
+ </li>
1448
+
1449
+ <li class="covered" data-hits="3" data-linenumber="65">
1450
+ <span class="hits">3</span>
1451
+
1452
+ <code class="ruby"> handle_exceptions do</code>
1453
+ </li>
1454
+
1455
+ <li class="covered" data-hits="3" data-linenumber="66">
1456
+ <span class="hits">3</span>
1457
+
1458
+ <code class="ruby"> loop do</code>
1459
+ </li>
1460
+
1461
+ <li class="covered" data-hits="15" data-linenumber="67">
1462
+ <span class="hits">15</span>
1463
+
1464
+ <code class="ruby"> e = rand(4..@k)</code>
1465
+ </li>
1466
+
1467
+ <li class="covered" data-hits="15" data-linenumber="68">
1468
+ <span class="hits">15</span>
1469
+
1470
+ <code class="ruby"> return e if e.gcd(@k) == 1</code>
1471
+ </li>
1472
+
1473
+ <li class="never" data-hits="" data-linenumber="69">
1474
+
1475
+
1476
+ <code class="ruby"> end</code>
1477
+ </li>
1478
+
1479
+ <li class="never" data-hits="" data-linenumber="70">
1480
+
1481
+
1482
+ <code class="ruby"> end</code>
1483
+ </li>
1484
+
1485
+ <li class="never" data-hits="" data-linenumber="71">
1486
+
1487
+
1488
+ <code class="ruby"> end</code>
1489
+ </li>
1490
+
1491
+ <li class="never" data-hits="" data-linenumber="72">
1492
+
1493
+
1494
+ <code class="ruby"></code>
1495
+ </li>
1496
+
1497
+ <li class="covered" data-hits="1" data-linenumber="73">
1498
+ <span class="hits">1</span>
1499
+
1500
+ <code class="ruby"> def gen_d</code>
1501
+ </li>
1502
+
1503
+ <li class="covered" data-hits="3" data-linenumber="74">
1504
+ <span class="hits">3</span>
1505
+
1506
+ <code class="ruby"> handle_exceptions do</code>
1507
+ </li>
1508
+
1509
+ <li class="covered" data-hits="3" data-linenumber="75">
1510
+ <span class="hits">3</span>
1511
+
1512
+ <code class="ruby"> modular_multiplicative_inverse(e, k)</code>
1513
+ </li>
1514
+
1515
+ <li class="never" data-hits="" data-linenumber="76">
1516
+
1517
+
1518
+ <code class="ruby"> end</code>
1519
+ </li>
1520
+
1521
+ <li class="never" data-hits="" data-linenumber="77">
1522
+
1523
+
1524
+ <code class="ruby"> end</code>
1525
+ </li>
1526
+
1527
+ <li class="never" data-hits="" data-linenumber="78">
1528
+
1529
+
1530
+ <code class="ruby"></code>
1531
+ </li>
1532
+
1533
+ <li class="covered" data-hits="1" data-linenumber="79">
1534
+ <span class="hits">1</span>
1535
+
1536
+ <code class="ruby"> def handle_exceptions</code>
1537
+ </li>
1538
+
1539
+ <li class="covered" data-hits="15" data-linenumber="80">
1540
+ <span class="hits">15</span>
1541
+
1542
+ <code class="ruby"> begin</code>
1543
+ </li>
1544
+
1545
+ <li class="covered" data-hits="15" data-linenumber="81">
1546
+ <span class="hits">15</span>
1547
+
1548
+ <code class="ruby"> yield</code>
1549
+ </li>
1550
+
1551
+ <li class="missed" data-hits="0" data-linenumber="82">
1552
+
1553
+
1554
+ <code class="ruby"> rescue StandardError =&gt; e</code>
1555
+ </li>
1556
+
1557
+ <li class="missed" data-hits="0" data-linenumber="83">
1558
+
1559
+
1560
+ <code class="ruby"> raise RSAKeyPairError, &quot;Exception in RSAKeyPair: #{e}&quot;</code>
1561
+ </li>
1562
+
1563
+ <li class="never" data-hits="" data-linenumber="84">
1564
+
1565
+
1566
+ <code class="ruby"> end</code>
1567
+ </li>
1568
+
1569
+ <li class="never" data-hits="" data-linenumber="85">
1570
+
1571
+
1572
+ <code class="ruby"> end</code>
1573
+ </li>
1574
+
1575
+ <li class="never" data-hits="" data-linenumber="86">
1576
+
1577
+
1578
+ <code class="ruby"> end</code>
1579
+ </li>
1580
+
1581
+ <li class="never" data-hits="" data-linenumber="87">
1582
+
1583
+
1584
+ <code class="ruby">end</code>
1585
+ </li>
1586
+
1587
+ </ol>
1588
+ </pre>
1589
+ </div>
1590
+
1591
+ <div class="source_table" id="6ef273b242ee3dbe8c447d26093880727c5470b3">
1592
+ <div class="header">
1593
+ <h3>lib/bitster/rsa_machine.rb</h3>
1594
+ <h4><span class="green">100.0 %</span> covered</h4>
1595
+ <div>
1596
+ <b>13</b> relevant lines.
1597
+ <span class="green"><b>13</b> lines covered</span> and
1598
+ <span class="red"><b>0</b> lines missed.</span>
1599
+ </div>
1600
+ </div>
1601
+
1602
+ <pre>
1603
+ <ol>
1604
+
1605
+ <li class="covered" data-hits="1" data-linenumber="1">
1606
+ <span class="hits">1</span>
1607
+
1608
+ <code class="ruby">module Bitster</code>
1609
+ </li>
1610
+
1611
+ <li class="never" data-hits="" data-linenumber="2">
1612
+
1613
+
1614
+ <code class="ruby"></code>
1615
+ </li>
1616
+
1617
+ <li class="never" data-hits="" data-linenumber="3">
1618
+
1619
+
1620
+ <code class="ruby"> # This class implements RSA encryption and decryption functions.</code>
1621
+ </li>
1622
+
1623
+ <li class="never" data-hits="" data-linenumber="4">
1624
+
1625
+
1626
+ <code class="ruby"> # It is initialized with necessary keys, represented as instances</code>
1627
+ </li>
1628
+
1629
+ <li class="never" data-hits="" data-linenumber="5">
1630
+
1631
+
1632
+ <code class="ruby"> # of their according classes.</code>
1633
+ </li>
1634
+
1635
+ <li class="never" data-hits="" data-linenumber="6">
1636
+
1637
+
1638
+ <code class="ruby"> #</code>
1639
+ </li>
1640
+
1641
+ <li class="covered" data-hits="1" data-linenumber="7">
1642
+ <span class="hits">1</span>
1643
+
1644
+ <code class="ruby"> class RSAMachine</code>
1645
+ </li>
1646
+
1647
+ <li class="covered" data-hits="1" data-linenumber="8">
1648
+ <span class="hits">1</span>
1649
+
1650
+ <code class="ruby"> attr_accessor :pubkey, :prikey</code>
1651
+ </li>
1652
+
1653
+ <li class="never" data-hits="" data-linenumber="9">
1654
+
1655
+
1656
+ <code class="ruby"></code>
1657
+ </li>
1658
+
1659
+ <li class="covered" data-hits="1" data-linenumber="10">
1660
+ <span class="hits">1</span>
1661
+
1662
+ <code class="ruby"> def initialize(opts={})</code>
1663
+ </li>
1664
+
1665
+ <li class="covered" data-hits="1" data-linenumber="11">
1666
+ <span class="hits">1</span>
1667
+
1668
+ <code class="ruby"> @pubkey = opts[:pubkey] if opts.has_key?(:pubkey)</code>
1669
+ </li>
1670
+
1671
+ <li class="covered" data-hits="1" data-linenumber="12">
1672
+ <span class="hits">1</span>
1673
+
1674
+ <code class="ruby"> @prikey = opts[:prikey] if opts.has_key?(:prikey)</code>
1675
+ </li>
1676
+
1677
+ <li class="covered" data-hits="1" data-linenumber="13">
1678
+ <span class="hits">1</span>
1679
+
1680
+ <code class="ruby"> if opts.has_key?(:keypair)</code>
1681
+ </li>
1682
+
1683
+ <li class="covered" data-hits="1" data-linenumber="14">
1684
+ <span class="hits">1</span>
1685
+
1686
+ <code class="ruby"> @pubkey = opts[:keypair].public_key</code>
1687
+ </li>
1688
+
1689
+ <li class="covered" data-hits="1" data-linenumber="15">
1690
+ <span class="hits">1</span>
1691
+
1692
+ <code class="ruby"> @prikey = opts[:keypair].private_key</code>
1693
+ </li>
1694
+
1695
+ <li class="never" data-hits="" data-linenumber="16">
1696
+
1697
+
1698
+ <code class="ruby"> end</code>
1699
+ </li>
1700
+
1701
+ <li class="never" data-hits="" data-linenumber="17">
1702
+
1703
+
1704
+ <code class="ruby"> end</code>
1705
+ </li>
1706
+
1707
+ <li class="never" data-hits="" data-linenumber="18">
1708
+
1709
+
1710
+ <code class="ruby"></code>
1711
+ </li>
1712
+
1713
+ <li class="never" data-hits="" data-linenumber="19">
1714
+
1715
+
1716
+ <code class="ruby"> # https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Encryption</code>
1717
+ </li>
1718
+
1719
+ <li class="never" data-hits="" data-linenumber="20">
1720
+
1721
+
1722
+ <code class="ruby"> #</code>
1723
+ </li>
1724
+
1725
+ <li class="covered" data-hits="1" data-linenumber="21">
1726
+ <span class="hits">1</span>
1727
+
1728
+ <code class="ruby"> def encrypt(plaintext_msg_code)</code>
1729
+ </li>
1730
+
1731
+ <li class="covered" data-hits="1" data-linenumber="22">
1732
+ <span class="hits">1</span>
1733
+
1734
+ <code class="ruby"> CryptoMath::modular_pow(plaintext_msg_code, @pubkey.exponent, @pubkey.modulus)</code>
1735
+ </li>
1736
+
1737
+ <li class="never" data-hits="" data-linenumber="23">
1738
+
1739
+
1740
+ <code class="ruby"> end</code>
1741
+ </li>
1742
+
1743
+ <li class="never" data-hits="" data-linenumber="24">
1744
+
1745
+
1746
+ <code class="ruby"></code>
1747
+ </li>
1748
+
1749
+ <li class="never" data-hits="" data-linenumber="25">
1750
+
1751
+
1752
+ <code class="ruby"> # https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Decryption</code>
1753
+ </li>
1754
+
1755
+ <li class="never" data-hits="" data-linenumber="26">
1756
+
1757
+
1758
+ <code class="ruby"> #</code>
1759
+ </li>
1760
+
1761
+ <li class="covered" data-hits="1" data-linenumber="27">
1762
+ <span class="hits">1</span>
1763
+
1764
+ <code class="ruby"> def decrypt(ciphertext_msg_code)</code>
1765
+ </li>
1766
+
1767
+ <li class="covered" data-hits="1" data-linenumber="28">
1768
+ <span class="hits">1</span>
1769
+
1770
+ <code class="ruby"> CryptoMath::modular_pow(ciphertext_msg_code, @prikey.exponent, @prikey.modulus)</code>
1771
+ </li>
1772
+
1773
+ <li class="never" data-hits="" data-linenumber="29">
1774
+
1775
+
1776
+ <code class="ruby"> end</code>
1777
+ </li>
1778
+
1779
+ <li class="never" data-hits="" data-linenumber="30">
1780
+
1781
+
1782
+ <code class="ruby"></code>
1783
+ </li>
1784
+
1785
+ <li class="never" data-hits="" data-linenumber="31">
1786
+
1787
+
1788
+ <code class="ruby"> end</code>
1789
+ </li>
1790
+
1791
+ <li class="never" data-hits="" data-linenumber="32">
1792
+
1793
+
1794
+ <code class="ruby">end</code>
1795
+ </li>
1796
+
1797
+ </ol>
1798
+ </pre>
1799
+ </div>
1800
+
1801
+ <div class="source_table" id="70e932150a1de819b00983e1a92c71138c4ebbe0">
1802
+ <div class="header">
1803
+ <h3>lib/bitster/rsa_private_key.rb</h3>
1804
+ <h4><span class="green">100.0 %</span> covered</h4>
1805
+ <div>
1806
+ <b>14</b> relevant lines.
1807
+ <span class="green"><b>14</b> lines covered</span> and
1808
+ <span class="red"><b>0</b> lines missed.</span>
1809
+ </div>
1810
+ </div>
1811
+
1812
+ <pre>
1813
+ <ol>
1814
+
1815
+ <li class="covered" data-hits="1" data-linenumber="1">
1816
+ <span class="hits">1</span>
1817
+
1818
+ <code class="ruby">module Bitster</code>
1819
+ </li>
1820
+
1821
+ <li class="never" data-hits="" data-linenumber="2">
1822
+
1823
+
1824
+ <code class="ruby"></code>
1825
+ </li>
1826
+
1827
+ <li class="never" data-hits="" data-linenumber="3">
1828
+
1829
+
1830
+ <code class="ruby"> # This class represents RSA private key and provides various</code>
1831
+ </li>
1832
+
1833
+ <li class="never" data-hits="" data-linenumber="4">
1834
+
1835
+
1836
+ <code class="ruby"> # formatting and similar helper methods associated with it.</code>
1837
+ </li>
1838
+
1839
+ <li class="never" data-hits="" data-linenumber="5">
1840
+
1841
+
1842
+ <code class="ruby"> #</code>
1843
+ </li>
1844
+
1845
+ <li class="covered" data-hits="1" data-linenumber="6">
1846
+ <span class="hits">1</span>
1847
+
1848
+ <code class="ruby"> class RSAPrivateKey</code>
1849
+ </li>
1850
+
1851
+ <li class="never" data-hits="" data-linenumber="7">
1852
+
1853
+
1854
+ <code class="ruby"></code>
1855
+ </li>
1856
+
1857
+ <li class="covered" data-hits="1" data-linenumber="8">
1858
+ <span class="hits">1</span>
1859
+
1860
+ <code class="ruby"> attr_reader :modulus, :exponent, :len, :p, :q</code>
1861
+ </li>
1862
+
1863
+ <li class="never" data-hits="" data-linenumber="9">
1864
+
1865
+
1866
+ <code class="ruby"></code>
1867
+ </li>
1868
+
1869
+ <li class="covered" data-hits="1" data-linenumber="10">
1870
+ <span class="hits">1</span>
1871
+
1872
+ <code class="ruby"> def initialize(p, q, exponent, len)</code>
1873
+ </li>
1874
+
1875
+ <li class="covered" data-hits="4" data-linenumber="11">
1876
+ <span class="hits">4</span>
1877
+
1878
+ <code class="ruby"> @exponent = exponent</code>
1879
+ </li>
1880
+
1881
+ <li class="covered" data-hits="4" data-linenumber="12">
1882
+ <span class="hits">4</span>
1883
+
1884
+ <code class="ruby"> @modulus = p*q</code>
1885
+ </li>
1886
+
1887
+ <li class="covered" data-hits="4" data-linenumber="13">
1888
+ <span class="hits">4</span>
1889
+
1890
+ <code class="ruby"> @p = p; @q = q</code>
1891
+ </li>
1892
+
1893
+ <li class="covered" data-hits="4" data-linenumber="14">
1894
+ <span class="hits">4</span>
1895
+
1896
+ <code class="ruby"> @len = len</code>
1897
+ </li>
1898
+
1899
+ <li class="never" data-hits="" data-linenumber="15">
1900
+
1901
+
1902
+ <code class="ruby"> end</code>
1903
+ </li>
1904
+
1905
+ <li class="never" data-hits="" data-linenumber="16">
1906
+
1907
+
1908
+ <code class="ruby"></code>
1909
+ </li>
1910
+
1911
+ <li class="covered" data-hits="1" data-linenumber="17">
1912
+ <span class="hits">1</span>
1913
+
1914
+ <code class="ruby"> def get_hash</code>
1915
+ </li>
1916
+
1917
+ <li class="covered" data-hits="4" data-linenumber="18">
1918
+ <span class="hits">4</span>
1919
+
1920
+ <code class="ruby"> { modulus: pad(@modulus, 16, @len), exponent: pad(@exponent, 16, @len) }</code>
1921
+ </li>
1922
+
1923
+ <li class="never" data-hits="" data-linenumber="19">
1924
+
1925
+
1926
+ <code class="ruby"> end</code>
1927
+ </li>
1928
+
1929
+ <li class="never" data-hits="" data-linenumber="20">
1930
+
1931
+
1932
+ <code class="ruby"></code>
1933
+ </li>
1934
+
1935
+ <li class="covered" data-hits="1" data-linenumber="21">
1936
+ <span class="hits">1</span>
1937
+
1938
+ <code class="ruby"> def get_json</code>
1939
+ </li>
1940
+
1941
+ <li class="covered" data-hits="3" data-linenumber="22">
1942
+ <span class="hits">3</span>
1943
+
1944
+ <code class="ruby"> JSON.pretty_generate get_hash</code>
1945
+ </li>
1946
+
1947
+ <li class="never" data-hits="" data-linenumber="23">
1948
+
1949
+
1950
+ <code class="ruby"> end</code>
1951
+ </li>
1952
+
1953
+ <li class="never" data-hits="" data-linenumber="24">
1954
+
1955
+
1956
+ <code class="ruby"></code>
1957
+ </li>
1958
+
1959
+ <li class="covered" data-hits="1" data-linenumber="25">
1960
+ <span class="hits">1</span>
1961
+
1962
+ <code class="ruby"> private</code>
1963
+ </li>
1964
+
1965
+ <li class="covered" data-hits="1" data-linenumber="26">
1966
+ <span class="hits">1</span>
1967
+
1968
+ <code class="ruby"> include VarHelpers</code>
1969
+ </li>
1970
+
1971
+ <li class="never" data-hits="" data-linenumber="27">
1972
+
1973
+
1974
+ <code class="ruby"></code>
1975
+ </li>
1976
+
1977
+ <li class="never" data-hits="" data-linenumber="28">
1978
+
1979
+
1980
+ <code class="ruby"> end</code>
1981
+ </li>
1982
+
1983
+ <li class="never" data-hits="" data-linenumber="29">
1984
+
1985
+
1986
+ <code class="ruby">end</code>
1987
+ </li>
1988
+
1989
+ <li class="never" data-hits="" data-linenumber="30">
1990
+
1991
+
1992
+ <code class="ruby"></code>
1993
+ </li>
1994
+
1995
+ <li class="never" data-hits="" data-linenumber="31">
1996
+
1997
+
1998
+ <code class="ruby"></code>
1999
+ </li>
2000
+
2001
+ </ol>
2002
+ </pre>
2003
+ </div>
2004
+
2005
+ <div class="source_table" id="195f4c504321614717e7ff0e743843de796ed358">
2006
+ <div class="header">
2007
+ <h3>lib/bitster/rsa_pub_key.rb</h3>
2008
+ <h4><span class="green">100.0 %</span> covered</h4>
2009
+ <div>
2010
+ <b>13</b> relevant lines.
2011
+ <span class="green"><b>13</b> lines covered</span> and
2012
+ <span class="red"><b>0</b> lines missed.</span>
2013
+ </div>
2014
+ </div>
2015
+
2016
+ <pre>
2017
+ <ol>
2018
+
2019
+ <li class="covered" data-hits="1" data-linenumber="1">
2020
+ <span class="hits">1</span>
2021
+
2022
+ <code class="ruby">module Bitster</code>
2023
+ </li>
2024
+
2025
+ <li class="never" data-hits="" data-linenumber="2">
2026
+
2027
+
2028
+ <code class="ruby"></code>
2029
+ </li>
2030
+
2031
+ <li class="never" data-hits="" data-linenumber="3">
2032
+
2033
+
2034
+ <code class="ruby"> # This class represents RSA public key and provides various</code>
2035
+ </li>
2036
+
2037
+ <li class="never" data-hits="" data-linenumber="4">
2038
+
2039
+
2040
+ <code class="ruby"> # formatting and similar helper methods associated with it.</code>
2041
+ </li>
2042
+
2043
+ <li class="never" data-hits="" data-linenumber="5">
2044
+
2045
+
2046
+ <code class="ruby"> #</code>
2047
+ </li>
2048
+
2049
+ <li class="covered" data-hits="1" data-linenumber="6">
2050
+ <span class="hits">1</span>
2051
+
2052
+ <code class="ruby"> class RSAPubKey</code>
2053
+ </li>
2054
+
2055
+ <li class="never" data-hits="" data-linenumber="7">
2056
+
2057
+
2058
+ <code class="ruby"></code>
2059
+ </li>
2060
+
2061
+ <li class="covered" data-hits="1" data-linenumber="8">
2062
+ <span class="hits">1</span>
2063
+
2064
+ <code class="ruby"> attr_reader :modulus, :exponent, :len</code>
2065
+ </li>
2066
+
2067
+ <li class="never" data-hits="" data-linenumber="9">
2068
+
2069
+
2070
+ <code class="ruby"></code>
2071
+ </li>
2072
+
2073
+ <li class="covered" data-hits="1" data-linenumber="10">
2074
+ <span class="hits">1</span>
2075
+
2076
+ <code class="ruby"> def initialize(modulus, exponent, len)</code>
2077
+ </li>
2078
+
2079
+ <li class="covered" data-hits="4" data-linenumber="11">
2080
+ <span class="hits">4</span>
2081
+
2082
+ <code class="ruby"> @modulus = modulus</code>
2083
+ </li>
2084
+
2085
+ <li class="covered" data-hits="4" data-linenumber="12">
2086
+ <span class="hits">4</span>
2087
+
2088
+ <code class="ruby"> @exponent = exponent</code>
2089
+ </li>
2090
+
2091
+ <li class="covered" data-hits="4" data-linenumber="13">
2092
+ <span class="hits">4</span>
2093
+
2094
+ <code class="ruby"> @len = len</code>
2095
+ </li>
2096
+
2097
+ <li class="never" data-hits="" data-linenumber="14">
2098
+
2099
+
2100
+ <code class="ruby"> end</code>
2101
+ </li>
2102
+
2103
+ <li class="never" data-hits="" data-linenumber="15">
2104
+
2105
+
2106
+ <code class="ruby"></code>
2107
+ </li>
2108
+
2109
+ <li class="covered" data-hits="1" data-linenumber="16">
2110
+ <span class="hits">1</span>
2111
+
2112
+ <code class="ruby"> def get_hash</code>
2113
+ </li>
2114
+
2115
+ <li class="covered" data-hits="4" data-linenumber="17">
2116
+ <span class="hits">4</span>
2117
+
2118
+ <code class="ruby"> { modulus: pad(@modulus, 16, @len), exponent: pad(@exponent, 16, @len) }</code>
2119
+ </li>
2120
+
2121
+ <li class="never" data-hits="" data-linenumber="18">
2122
+
2123
+
2124
+ <code class="ruby"> end</code>
2125
+ </li>
2126
+
2127
+ <li class="never" data-hits="" data-linenumber="19">
2128
+
2129
+
2130
+ <code class="ruby"></code>
2131
+ </li>
2132
+
2133
+ <li class="covered" data-hits="1" data-linenumber="20">
2134
+ <span class="hits">1</span>
2135
+
2136
+ <code class="ruby"> def get_json</code>
2137
+ </li>
2138
+
2139
+ <li class="covered" data-hits="3" data-linenumber="21">
2140
+ <span class="hits">3</span>
2141
+
2142
+ <code class="ruby"> JSON.pretty_generate get_hash</code>
2143
+ </li>
2144
+
2145
+ <li class="never" data-hits="" data-linenumber="22">
2146
+
2147
+
2148
+ <code class="ruby"> end</code>
2149
+ </li>
2150
+
2151
+ <li class="never" data-hits="" data-linenumber="23">
2152
+
2153
+
2154
+ <code class="ruby"></code>
2155
+ </li>
2156
+
2157
+ <li class="covered" data-hits="1" data-linenumber="24">
2158
+ <span class="hits">1</span>
2159
+
2160
+ <code class="ruby"> private</code>
2161
+ </li>
2162
+
2163
+ <li class="covered" data-hits="1" data-linenumber="25">
2164
+ <span class="hits">1</span>
2165
+
2166
+ <code class="ruby"> include VarHelpers</code>
2167
+ </li>
2168
+
2169
+ <li class="never" data-hits="" data-linenumber="26">
2170
+
2171
+
2172
+ <code class="ruby"></code>
2173
+ </li>
2174
+
2175
+ <li class="never" data-hits="" data-linenumber="27">
2176
+
2177
+
2178
+ <code class="ruby"> end</code>
2179
+ </li>
2180
+
2181
+ <li class="never" data-hits="" data-linenumber="28">
2182
+
2183
+
2184
+ <code class="ruby">end</code>
2185
+ </li>
2186
+
2187
+ </ol>
2188
+ </pre>
2189
+ </div>
2190
+
2191
+ <div class="source_table" id="3f8d2c8c0375490e0e1901751370c5378958982a">
2192
+ <div class="header">
2193
+ <h3>lib/bitster/var_helpers.rb</h3>
2194
+ <h4><span class="green">100.0 %</span> covered</h4>
2195
+ <div>
2196
+ <b>7</b> relevant lines.
2197
+ <span class="green"><b>7</b> lines covered</span> and
2198
+ <span class="red"><b>0</b> lines missed.</span>
2199
+ </div>
2200
+ </div>
2201
+
2202
+ <pre>
2203
+ <ol>
2204
+
2205
+ <li class="covered" data-hits="1" data-linenumber="1">
2206
+ <span class="hits">1</span>
2207
+
2208
+ <code class="ruby">module Bitster</code>
2209
+ </li>
2210
+
2211
+ <li class="covered" data-hits="1" data-linenumber="2">
2212
+ <span class="hits">1</span>
2213
+
2214
+ <code class="ruby"> module VarHelpers</code>
2215
+ </li>
2216
+
2217
+ <li class="covered" data-hits="1" data-linenumber="3">
2218
+ <span class="hits">1</span>
2219
+
2220
+ <code class="ruby"> include Math</code>
2221
+ </li>
2222
+
2223
+ <li class="never" data-hits="" data-linenumber="4">
2224
+
2225
+
2226
+ <code class="ruby"></code>
2227
+ </li>
2228
+
2229
+ <li class="covered" data-hits="1" data-linenumber="5">
2230
+ <span class="hits">1</span>
2231
+
2232
+ <code class="ruby"> def pad(num, base, len)</code>
2233
+ </li>
2234
+
2235
+ <li class="covered" data-hits="16" data-linenumber="6">
2236
+ <span class="hits">16</span>
2237
+
2238
+ <code class="ruby"> digits = (len*log(2)) / (log(base))</code>
2239
+ </li>
2240
+
2241
+ <li class="covered" data-hits="16" data-linenumber="7">
2242
+ <span class="hits">16</span>
2243
+
2244
+ <code class="ruby"> num.to_s(base).rjust(digits, &#39;0&#39;)</code>
2245
+ </li>
2246
+
2247
+ <li class="never" data-hits="" data-linenumber="8">
2248
+
2249
+
2250
+ <code class="ruby"> end</code>
2251
+ </li>
2252
+
2253
+ <li class="never" data-hits="" data-linenumber="9">
2254
+
2255
+
2256
+ <code class="ruby"></code>
2257
+ </li>
2258
+
2259
+ <li class="covered" data-hits="1" data-linenumber="10">
2260
+ <span class="hits">1</span>
2261
+
2262
+ <code class="ruby"> extend self</code>
2263
+ </li>
2264
+
2265
+ <li class="never" data-hits="" data-linenumber="11">
2266
+
2267
+
2268
+ <code class="ruby"></code>
2269
+ </li>
2270
+
2271
+ <li class="never" data-hits="" data-linenumber="12">
2272
+
2273
+
2274
+ <code class="ruby"> end</code>
2275
+ </li>
2276
+
2277
+ <li class="never" data-hits="" data-linenumber="13">
2278
+
2279
+
2280
+ <code class="ruby">end</code>
2281
+ </li>
2282
+
2283
+ </ol>
2284
+ </pre>
2285
+ </div>
2286
+
2287
+ </div>
2288
+ </div>
2289
+ </body>
2290
+ </html>