File Coverage

lib/Crypt/Random/Generator.pm
Criterion Covered Total %
statement 642 642 100.0
branch 10 16 62.5
condition 9 17 52.9
subroutine 207 207 100.0
pod 0 5 0.0
total 868 887 97.9


line stmt bran cond sub pod time code
1             #!/usr/bin/perl -sw
2             ##
3             ##
4             ##
5             ## Copyright (c) 2001, Vipul Ved Prakash. All rights reserved.
6             ## This code is free software; you can redistribute it and/or modify
7             ## it under the same terms as Perl itself.
8             ##
9             ## $Id: Generator.pm,v 1.2 2001/06/22 03:43:51 vipul Exp $
10              
11             package Crypt::Random::Generator;
12 6     6   105 use Crypt::Random qw(makerandom makerandom_itv makerandom_octet);
  6         90  
  6         115  
13 6     6   157 use Carp;
  6         209  
  6         143  
14              
15             my @PROVIDERS = qw(devrandom devurandom egd rand);
16             my %STRENGTH = ( 0 => [ qw(devurandom egd rand) ], 1 => [ qw(devrandom egd rand) ] );
17              
18             sub new {
19              
20 203     203 0 2283     my ($class, %params) = @_;
21               
22 203         2544     my $self = { _STRENGTH => \%STRENGTH, _PROVIDERS => \@PROVIDERS };
23              
24 203   100     215594     $$self{Strength} = $params{Strength} || 0;
25 203   100     2948     $$self{Provider} = $params{Provider} || "";
26 203   50     2924     $$self{ProviderParams} = $params{ProviderParams} || "";
27              
28 203         2952     bless $self, $class;
29              
30 203 100       2481     unless ($$self{Provider}) {
31 203         2451         SELECT_PROVIDER: for ($self->strength_order($$self{Strength})) {
32 203         1829             my $pname = $_; my $fqpname = "Crypt::Random::Provider::$pname";
  203         2004  
33 6 50   6   243             if (eval "use $fqpname; $fqpname->available()") {
  6     5   60  
  6     1006   127  
  5     1005   104  
  5     1005   46  
  5     14   93  
  1006     5   13143  
  1006     2   22792  
  1006     2   16755  
  1006     2   19787  
  1006     2   20085  
  1006     2   12512  
  1006     2   14679  
  1005     2   13653  
  1005     2   11668  
  1005     2   13748  
  1005     2   17149  
  1005     2   11496  
  4014     2   251226  
  1005     2   11450  
  1005     2   11637  
  1006     2   14606  
  1006     2   15079  
  1005     2   19565  
  1005     2   11333  
  2     2   19  
  1005     2   12905  
  1005     2   17351  
  1005     2   14174  
  1005     2   12004  
  2     2   28  
  1005     2   9885  
  1005     2   18610  
  14     2   1900  
  14     2   156  
  11     2   167  
  11     2   191  
  5     2   75  
  5     2   88  
  5     2   68  
  5     2   71  
  5     2   82  
  2     2   28  
  2     2   20  
  2     2   37  
  2     2   27  
  2     2   19  
  2     2   35  
  2     2   29  
  2     2   19  
  2     2   38  
  2     2   29  
  2     2   19  
  2     2   34  
  2     2   31  
  2     2   19  
  2     2   38  
  2     2   30  
  2     2   18  
  2     2   35  
  2     2   32  
  2     2   21  
  2     2   403  
  2     2   39  
  2     2   18  
  2     2   36  
  2     2   32  
  2     2   19  
  2     2   66  
  2     2   29  
  2     2   19  
  2     2   36  
  2     2   31  
  2     2   19  
  2     2   35  
  2     2   28  
  2     2   21  
  2     2   37  
  2     2   31  
  2     2   19  
  2     2   108  
  2     2   33  
  2     2   18  
  2     2   41  
  2     2   29  
  2     2   19  
  2     2   36  
  2     2   27  
  2     2   19  
  2     2   33  
  2     2   32  
  2     2   18  
  2     2   40  
  2     2   30  
  2     2   20  
  2     2   72  
  2     2   30  
  2     2   19  
  2     2   75  
  2     2   30  
  2     2   18  
  2     2   37  
  2     2   32  
  2     2   19  
  2     2   344  
  2     2   31  
  2     2   17  
  2     2   43  
  2     2   28  
  2     2   18  
  2     2   39  
  2     2   27  
  2     2   18  
  2     2   34  
  2     2   29  
  2     2   19  
  2     2   36  
  2     2   30  
  2     2   18  
  2     2   38  
  2     2   31  
  2     2   19  
  2     2   41  
  2     2   29  
  2     2   19  
  2     2   37  
  2     2   28  
  2     2   17  
  2     2   36  
  2     2   27  
  2     2   18  
  2     2   35  
  2     2   31  
  2     2   20  
  2     2   38  
  2     2   30  
  2     2   18  
  2     2   35  
  2     2   29  
  2     2   19  
  2     2   37  
  2     2   30  
  2     2   19  
  2     2   35  
  2     2   28  
  2     2   18  
  2     2   35  
  2     2   31  
  2     2   20  
  2     2   41  
  2     2   30  
  2     2   18  
  2     2   38  
  2     2   29  
  2     2   17  
  2     2   35  
  2     2   30  
  2     2   21  
  2     2   36  
  2     2   31  
  2     2   50  
  2     2   41  
  2     2   27  
  2     2   89  
  2     2   43  
  2     2   27  
  2     2   21  
  2     2   36  
  2     2   29  
  2     2   21  
  2     2   125  
  2     2   27  
  2     2   21  
  2     2   34  
  2     2   29  
  2     2   471  
  2     2   42  
  2     2   27  
  2     2   18  
  2     2   100  
  2     2   356  
  2     2   20  
  2     2   41  
  2     2   28  
  2     2   18  
  2     2   35  
  2     2   29  
  2     2   19  
  2     2   85  
  2     2   29  
  2     2   18  
  2     2   38  
  2     2   28  
  2     2   18  
  2     2   38  
  2     2   28  
  2     2   18  
  2     2   36  
  2     2   28  
  2     2   19  
  2         37  
  2         26  
  2         2254  
  2         70  
  2         29  
  2         18  
  2         39  
  2         55  
  2         18  
  2         36  
  2         29  
  2         18  
  2         37  
  2         30  
  2         17  
  2         36  
  2         29  
  2         18  
  2         39  
  2         29  
  2         17  
  2         37  
  2         26  
  2         19  
  2         37  
  2         27  
  2         18  
  2         34  
  2         28  
  2         17  
  2         38  
  2         74  
  2         19  
  2         39  
  2         29  
  2         18  
  2         42  
  2         30  
  2         18  
  2         36  
  2         28  
  2         19  
  2         39  
  2         29  
  2         21  
  2         66  
  2         28  
  2         19  
  2         35  
  2         28  
  2         18  
  2         39  
  2         30  
  2         18  
  2         37  
  2         27  
  2         18  
  2         36  
  2         30  
  2         19  
  2         37  
  2         29  
  2         18  
  2         63  
  2         29  
  2         18  
  2         35  
  2         29  
  2         18  
  2         35  
  2         31  
  2         18  
  2         38  
  2         29  
  2         19  
  2         35  
  2         79  
  2         19  
  2         42  
  2         32  
  2         18  
  2         40  
  2         28  
  2         18  
  2         38  
  2         28  
  2         20  
  2         33  
  2         30  
  2         18  
  2         40  
  2         31  
  2         18  
  2         39  
  2         26  
  2         19  
  2         37  
  2         31  
  2         18  
  2         37  
  2         29  
  2         20  
  2         36  
  2         122  
  2         19  
  2         122  
  2         31  
  2         19  
  2         39  
  2         29  
  2         19  
  2         38  
  2         30  
  2         18  
  2         41  
  2         29  
  2         19  
  2         36  
  2         29  
  2         21  
  2         38  
  2         28  
  2         19  
  2         35  
  2         28  
  2         18  
  2         40  
  2         28  
  2         20  
  2         37  
  2         30  
  2         19  
  2         40  
  2         28  
  2         18  
  2         36  
  2         28  
  2         17  
  2         71  
  2         29  
  2         18  
  2         35  
  2         28  
  2         19  
  2         38  
  2         29  
  2         20  
  2         39  
  2         31  
  2         18  
  2         38  
  2         28  
  2         18  
  2         168  
  2         32  
  2         19  
  2         41  
  2         28  
  2         17  
  2         40  
  2         27  
  2         19  
  2         39  
  2         28  
  2         18  
  2         37  
  2         30  
  2         18  
  2         40  
  2         31  
  2         20  
  2         36  
  2         31  
  2         19  
  2         44  
  2         30  
  2         17  
  2         34  
  2         30  
  2         20  
  2         35  
  2         28  
  2         19  
  2         35  
  2         30  
  2         18  
  2         37  
  2         28  
  2         18  
  2         37  
  2         29  
  2         18  
  2         37  
  2         27  
  2         18  
  2         36  
  2         28  
  2         18  
  2         36  
  2         30  
  2         20  
  2         74  
  2         32  
  2         19  
  2         40  
  2         29  
  2         18  
  2         37  
  2         29  
  2         19  
  2         39  
  2         27  
  2         19  
  2         34  
  2         30  
  2         19  
  2         109  
  2         48  
  2         19  
  2         36  
  2         32  
  2         76  
  2         44  
  2         29  
  2         20  
  2         37  
  2         31  
  2         18  
  2         39  
  2         29  
  2         18  
  2         40  
  2         77  
  2         20  
  2         42  
  2         31  
  2         17  
  2         65  
  2         34  
  2         18  
  2         44  
  2         31  
  2         18  
  2         38  
  2         29  
  2         18  
  2         38  
  2         30  
  2         19  
  2         38  
  2         31  
  2         18  
  2         40  
  2         28  
  2         20  
  2         34  
  2         30  
  2         218202  
  2         65  
  2         30  
  2         18  
  2         41  
  2         30  
  2         20  
  2         80  
  2         29  
  2         107  
  2         38  
  2         30  
  2         19  
  2         84  
  2         29  
  2         19  
  2         59  
  2         49  
  2         36  
  2         36  
  2         70  
  2         20  
  2         82  
  2         30  
  2         18  
  2         40  
  2         30  
  2         18  
  2         69  
  2         31  
  2         18  
  2         39  
  2         31  
  2         19  
  2         40  
  2         31  
  2         20  
  2         42  
  2         30  
  2         20  
  2         43  
  2         30  
  2         20  
  2         36  
  2         29  
  2         18  
  2         36  
  2         30  
  2         18  
  2         41  
  2         59  
  2         18  
  2         37  
  2         32  
  2         19  
  2         102  
  2         28  
  2         20  
  2         39  
  2         29  
  2         18  
  2         40  
  2         31  
  2         18  
  2         36  
  2         28  
  2         18  
  2         39  
  2         28  
  2         18  
  2         35  
  2         29  
  2         20  
  2         39  
  2         32  
  2         18  
  2         41  
  2         31  
  2         19  
  2         34  
  2         29  
  2         19  
  2         38  
  2         31  
  2         19  
  2         43  
  2         29  
  2         19  
  2         39  
  2         30  
  2         1075  
  2         65  
  2         29  
  2         19  
  2         36  
  2         30  
  2         19  
  2         39  
  2         28  
  2         19  
  2         35  
  2         33  
  2         20  
  2         45  
  2         54  
  2         22  
  2         40  
  2         33  
  2         19  
  2         45  
  2         31  
  2         19  
  2         37  
  2         29  
  2         19  
  2         45  
  2         31  
  2         19  
  2         40  
  2         32  
  2         20  
  2         42  
  2         30  
  2         19  
  2         56  
  2         31  
  2         18  
  2         37  
  2         27  
  2         19  
  2         36  
  2         31  
  2         19  
  2         338  
  2         31  
  2         19  
  2         36  
  2         78  
  2         21  
  2         38  
  2         28  
  2         18  
  2         39  
  203         2472  
34 203 50       2274                 if (grep { $pname eq $_ } $self->providers) {
  809         9637  
35 203         2047                     $$self{Provider} = $pname;
36 203         2068                     last SELECT_PROVIDER;
37                             }
38                         }
39                     }
40                 }
41              
42 203 50       2733     croak "No provider available.\n" unless $$self{Provider};
43 203         4851     return $self;
44              
45             }
46              
47              
48             sub providers {
49              
50 203     203 0 3988     my ($self, @args) = @_;
51 203 50       2286     if (@args) { $$self{_PROVIDERS} = [@args] }
  1         10  
52 203         1824     return @{$$self{_PROVIDERS}};
  203         3087  
53              
54             }
55              
56              
57             sub strength_order {
58              
59 203     203 0 2022     my ($self, $strength, @args) = @_;
60 203 50       2484     if (@args) { $$self{_STRENGTH}{$strength} = [@args] }
  1         16  
61 203         2119     return @{$$self{_STRENGTH}{$strength}}
  203         3354  
62              
63             }
64              
65              
66             sub integer {
67              
68 1     1 0 16     my ($self, %params) = @_;
69 1 100       9     if ($params{Size}) {
    50          
70 1         15         return makerandom (
71                             Size => $params{Size},
72                             Provider => $$self{Provider},
73                             Verbosity => $params{Verbosity} || $$self{Verbosity},
74 1   33     17                 %{$$self{ProviderParams}},
75                     )
76                 } elsif ($params{Upper}) {
77 1         21          return makerandom_itv (
78                             Lower => $params{Lower} || 0,
79                             Upper => $params{Upper},
80                             Provider => $$self{Provider},
81                             Verbosity => $params{Verbosity} || $$self{Verbosity},
82 1   50     10                 %{$$self{ProviderParams}},
      33        
83                     )
84                 }
85              
86             } 
87              
88              
89             sub string {
90              
91 1     1 0 14     my ($self, %params) = @_;
92 1         16     return makerandom_octet (
93                     %params,
94                     Provider => $$self{Provider},
95                     Verbosity => $params{Verbosity} || $$self{Verbosity},
96 1   33     9         %{$$self{ProviderParams}},
97                 )
98              
99             }
100              
101              
102