summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Crypt/Random/Generator.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Crypt/Random/Generator.pm')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/Crypt/Random/Generator.pm101
1 files changed, 101 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Crypt/Random/Generator.pm b/Master/tlpkg/tlperl/lib/Crypt/Random/Generator.pm
new file mode 100755
index 00000000000..8833b0e7679
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Crypt/Random/Generator.pm
@@ -0,0 +1,101 @@
+#!/usr/bin/perl -sw
+##
+##
+##
+## Copyright (c) 2001, Vipul Ved Prakash. All rights reserved.
+## This code is free software; you can redistribute it and/or modify
+## it under the same terms as Perl itself.
+##
+## $Id: Generator.pm,v 1.2 2001/06/22 03:43:51 vipul Exp $
+
+package Crypt::Random::Generator;
+use Crypt::Random qw(makerandom makerandom_itv makerandom_octet);
+use Carp;
+
+my @PROVIDERS = qw(devrandom devurandom egd rand);
+my %STRENGTH = ( 0 => [ qw(devurandom egd rand) ], 1 => [ qw(devrandom egd rand) ] );
+
+sub new {
+
+ my ($class, %params) = @_;
+
+ my $self = { _STRENGTH => \%STRENGTH, _PROVIDERS => \@PROVIDERS };
+
+ $$self{Strength} = $params{Strength} || 0;
+ $$self{Provider} = $params{Provider} || "";
+ $$self{ProviderParams} = $params{ProviderParams} || "";
+
+ bless $self, $class;
+
+ unless ($$self{Provider}) {
+ SELECT_PROVIDER: for ($self->strength_order($$self{Strength})) {
+ my $pname = $_; my $fqpname = "Crypt::Random::Provider::$pname";
+ if (eval "use $fqpname; $fqpname->available()") {
+ if (grep { $pname eq $_ } $self->providers) {
+ $$self{Provider} = $pname;
+ last SELECT_PROVIDER;
+ }
+ }
+ }
+ }
+
+ croak "No provider available.\n" unless $$self{Provider};
+ return $self;
+
+}
+
+
+sub providers {
+
+ my ($self, @args) = @_;
+ if (@args) { $$self{_PROVIDERS} = [@args] }
+ return @{$$self{_PROVIDERS}};
+
+}
+
+
+sub strength_order {
+
+ my ($self, $strength, @args) = @_;
+ if (@args) { $$self{_STRENGTH}{$strength} = [@args] }
+ return @{$$self{_STRENGTH}{$strength}}
+
+}
+
+
+sub integer {
+
+ my ($self, %params) = @_;
+ if ($params{Size}) {
+ return makerandom (
+ Size => $params{Size},
+ Provider => $$self{Provider},
+ Verbosity => $params{Verbosity} || $$self{Verbosity},
+ %{$$self{ProviderParams}},
+ )
+ } elsif ($params{Upper}) {
+ return makerandom_itv (
+ Lower => $params{Lower} || 0,
+ Upper => $params{Upper},
+ Provider => $$self{Provider},
+ Verbosity => $params{Verbosity} || $$self{Verbosity},
+ %{$$self{ProviderParams}},
+ )
+ }
+
+}
+
+
+sub string {
+
+ my ($self, %params) = @_;
+ return makerandom_octet (
+ %params,
+ Provider => $$self{Provider},
+ Verbosity => $params{Verbosity} || $$self{Verbosity},
+ %{$$self{ProviderParams}},
+ )
+
+}
+
+