[Affelio-cvs 744] CVS update: affelio/extlib/Crypt/Random/Provider

Back to archive index

Tadashi Okoshi slash****@users*****
2005年 11月 4日 (金) 11:08:49 JST


Index: affelio/extlib/Crypt/Random/Provider/File.pm
diff -u /dev/null affelio/extlib/Crypt/Random/Provider/File.pm:1.1
--- /dev/null	Fri Nov  4 11:08:49 2005
+++ affelio/extlib/Crypt/Random/Provider/File.pm	Fri Nov  4 11:08:49 2005
@@ -0,0 +1,62 @@
+package Crypt::Random::Provider::File; 
+use strict;
+use Carp;
+use Math::Pari qw(pari2num);
+use Fcntl;
+
+sub _defaultsource { 
+    return;
+}
+
+
+sub new { 
+
+    my ($class, %args) = @_;
+    my $self = { Source => $args{File} || $args{Device} || $args{Filename} || $class->_defaultsource() };
+    return bless $self, $class;
+
+}
+
+
+sub get_data { 
+
+    my ($self, %params) = @_;
+    $self = {} unless ref $self;
+
+    my $size = $params{Size}; 
+    my $skip = $params{Skip} || $$self{Skip} || '';
+    my $q_skip = quotemeta($skip);
+
+    if ($size && ref $size eq "Math::Pari") { 
+        $size = pari2num($size);
+    }
+
+    my $bytes = $params{Length} || (int($size / 8) + 1);
+
+    sysopen RANDOM, $$self{Source}, O_RDONLY;
+
+    my($r, $read, $rt) = ('', 0);
+    while ($read < $bytes) {
+        my $howmany = sysread  RANDOM, $rt, $bytes - $read;
+        next unless $howmany;
+        if ($howmany == -1) { 
+            croak "Error while reading from $$self{Source}. $!"
+        }
+        $rt =~ s/[$q_skip]//g if $skip;
+        $r .= $rt; 
+        $read = length $r;
+    }
+
+    $r;
+
+}
+
+
+sub available { 
+    my ($class) = @_;
+    return -e $class->_defaultsource();
+}
+
+
+1;
+
Index: affelio/extlib/Crypt/Random/Provider/devrandom.pm
diff -u /dev/null affelio/extlib/Crypt/Random/Provider/devrandom.pm:1.1
--- /dev/null	Fri Nov  4 11:08:49 2005
+++ affelio/extlib/Crypt/Random/Provider/devrandom.pm	Fri Nov  4 11:08:49 2005
@@ -0,0 +1,21 @@
+#!/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: devrandom.pm,v 1.1 2005/11/04 02:08:49 slash5234 Exp $
+
+package Crypt::Random::Provider::devrandom; 
+use strict;
+use lib qw(lib);
+use Crypt::Random::Provider::File;
+use vars qw(@ISA);
+ @ ISA = qw(Crypt::Random::Provider::File);
+
+sub _defaultsource { return "/dev/random" } 
+
+1;
+
Index: affelio/extlib/Crypt/Random/Provider/devurandom.pm
diff -u /dev/null affelio/extlib/Crypt/Random/Provider/devurandom.pm:1.1
--- /dev/null	Fri Nov  4 11:08:49 2005
+++ affelio/extlib/Crypt/Random/Provider/devurandom.pm	Fri Nov  4 11:08:49 2005
@@ -0,0 +1,21 @@
+#!/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: devurandom.pm,v 1.1 2005/11/04 02:08:49 slash5234 Exp $
+
+package Crypt::Random::Provider::devurandom; 
+use strict;
+use lib qw(lib);
+use Crypt::Random::Provider::File;
+use vars qw(@ISA);
+ @ ISA = qw(Crypt::Random::Provider::File);
+
+sub _defaultsource { return "/dev/urandom" } 
+
+1;
+
Index: affelio/extlib/Crypt/Random/Provider/egd.pm
diff -u /dev/null affelio/extlib/Crypt/Random/Provider/egd.pm:1.1
--- /dev/null	Fri Nov  4 11:08:49 2005
+++ affelio/extlib/Crypt/Random/Provider/egd.pm	Fri Nov  4 11:08:49 2005
@@ -0,0 +1,90 @@
+#!/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: egd.pm,v 1.1 2005/11/04 02:08:49 slash5234 Exp $
+
+package Crypt::Random::Provider::egd;
+use strict;
+
+use IO::Socket;
+use Carp;
+use Math::Pari qw(pari2num);
+
+
+sub _defaultsource { 
+
+    my $source;
+    for my $d (qw( /var/run/egd-pool /dev/egd-pool /etc/entropy )) {
+        if (IO::Socket::UNIX->new(Peer => $d)) { $source = $d; last }
+    }
+    return $source;
+
+}
+
+
+sub new { 
+
+    my ($class, %args) = @_;
+    my $self = { Source => $args{Source} || $args{Device} || $args{Filename} };
+    $$self{Source} = $class->_defaultsource() unless $$self{Source};
+    croak "egd entropy pool file not found.\n" unless $$self{Source};
+    return bless $self, $class;
+
+}
+
+
+sub get_data {
+   
+    my ( $self, %params ) = @_;
+    my $class = ref $self || $self;
+    $self = {} unless ref $self;
+ 
+    my $bytes    = $params{Length} ||
+                   (int( pari2num($params{ Size }) / 8) + 1);
+    my $dev      = $params{Source} || $$self{Source};
+    my $skip     = $params{Skip};
+
+    croak "$dev doesn't exist.  aborting." unless $dev && -e $dev;
+
+    my $s = IO::Socket::UNIX->new(Peer => $dev);
+    croak "couldn't talk to egd. $!" unless $s;
+
+    my($r, $read) = ('', 0);
+    while ($read < $bytes) {
+        my $msg = pack "CC", 0x01, 1;
+        $s->syswrite($msg, length $msg);
+        my $rt;
+        my $nread = $s->sysread($rt, 1);
+        croak "read from entropy socket failed" unless $nread == 1;
+        my $count = unpack("C", $rt);
+        $nread = $s->sysread($rt, $count);
+        croak "couldn't get all the requested entropy.  aborting."
+            unless $nread == $count;
+        unless ($skip && $skip =~ /\Q$rt\E/) {
+            if ($params{Verbosity}) { print '.' unless $read % 2 }
+            $r .= $rt;
+            $read++;
+        }
+    }
+
+    $r;
+}
+
+
+sub available { 
+   
+    my $class = shift; 
+    return 1 if $class->_defaultsource();
+    return;
+
+}
+
+
+1;
+
+
Index: affelio/extlib/Crypt/Random/Provider/rand.pm
diff -u /dev/null affelio/extlib/Crypt/Random/Provider/rand.pm:1.1
--- /dev/null	Fri Nov  4 11:08:49 2005
+++ affelio/extlib/Crypt/Random/Provider/rand.pm	Fri Nov  4 11:08:49 2005
@@ -0,0 +1,60 @@
+#!/usr/bin/perl -sw
+##
+## Crypt::Random::Provider::rand
+##
+## 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: rand.pm,v 1.1 2005/11/04 02:08:49 slash5234 Exp $
+
+package Crypt::Random::Provider::rand; 
+use strict;
+use Math::Pari qw(pari2num);
+
+sub new { 
+
+    my ($class, %params) = @_;
+    my $self = { Source => $params{Source} || sub { return rand($_[0]) } };
+    return bless $self, $class;
+
+}
+
+
+sub get_data { 
+
+    my ($self, %params) = @_;
+    $self = {} unless ref $self;
+
+    my $size = $params{Size}; 
+    my $skip = $params{Skip} || $$self{Skip};
+
+    if ($size && ref $size eq "Math::Pari") { 
+        $size = pari2num($size);
+    }
+
+    my $bytes = $params{Length} || (int($size / 8) + 1);
+    my $source = $$self{Source} || sub { rand($_[0]) };
+    
+    my($r, $read, $rt) = ('', 0);
+    while ($read < $bytes) {
+        $rt = chr(int(&$source(256)));
+        unless ($skip && $skip =~ /\Q$rt\E/) {
+            $r .= $rt; $read++;
+        }
+    }
+
+    $r;
+
+}
+
+
+sub available { 
+
+    return 1;
+
+}
+
+
+1;
+ 


Affelio-cvs メーリングリストの案内
Back to archive index