bitster 0.0.1c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>