Changeset 32744 for lang/perl/UUID-Generator-PurePerl
- Timestamp:
- 04/23/09 12:41:40 (4 years ago)
- Location:
- lang/perl/UUID-Generator-PurePerl/trunk
- Files:
-
- 3 modified
-
Changes (modified) (1 diff)
-
lib/UUID/Generator/PurePerl.pm (modified) (1 diff)
-
lib/UUID/Generator/PurePerl/Util.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/UUID-Generator-PurePerl/trunk/Changes
r32529 r32744 1 1 Revision history for Perl extension UUID::Generator::PurePerl 2 3 0.04_02 Thu Apr 23 12:30:00 JST 2009 4 - added pseudo hash generator to U::G::P::Util 5 (for case that Digest::MD5 doesn't exist) 2 6 3 7 0.04_01 Mon Apr 13 11:00:00 JST 2009 -
lang/perl/UUID-Generator-PurePerl/trunk/lib/UUID/Generator/PurePerl.pm
r32529 r32744 5 5 use 5.006; 6 6 7 our $VERSION = '0.04_0 1';7 our $VERSION = '0.04_02'; 8 8 9 9 use Carp; -
lang/perl/UUID-Generator-PurePerl/trunk/lib/UUID/Generator/PurePerl/Util.pm
r32529 r32744 32 32 } 33 33 34 { 35 my $digester; 36 37 sub digester { 38 if (! defined $digester) { 39 my $d; 40 $d = eval { Digest->new('SHA-1') }; 41 $d = eval { Digest->new('MD5') } if $@; 42 $d = UUID::Generator::PurePerl::Util::PseudoDigester->new() if $@; 43 $digester = $d; 44 } 45 46 return $digester; 47 } 48 } 49 34 50 sub digest_as_octets { 35 51 my $num_octets = shift; 36 52 37 my $d; 38 $d = eval { Digest->new('SHA-1') }; 39 $d = eval { Digest->new('MD5') } if $@; 40 die if $@; 41 53 my $d = digester(); 54 $d->reset(); 42 55 $d->add($_) for @_; 43 56 … … 51 64 sub digest_as_16bit { 52 65 return unpack 'n', digest_as_octets(2, @_); 66 } 67 68 package UUID::Generator::PurePerl::Util::PseudoDigester; 69 70 sub new { 71 my $class = shift; 72 my $entity = q{}; 73 74 return bless \$entity, $class; 75 } 76 77 sub digest { 78 my $self = shift; 79 80 my $entity = $$self; 81 82 my $source = q{}; 83 while (length $entity > 0) { 84 # 4 bytes seems to be enough (8 bytes in ordinal crypt() impl.) 85 my $token = substr($entity, 0, 4, q{}) . "\0\0\0\0"; 86 $source .= crypt $token, $token; 87 } 88 89 my @r = ( 0, 0, 0, 0 ); # 32bits * 4 90 my $index = 0; 91 while (length $source > 0) { 92 my $token = substr($source, 0, 4, q{}) . "\0\0\0\0"; 93 $r[$index] ^= unpack 'N', $token; 94 95 $index = ($index + 1) % 4; 96 } 97 98 return pack 'NNNN', @r; 99 } 100 101 sub reset { 102 my $self = shift; 103 $$self = q{}; 104 return $self; 105 } 106 107 sub add { 108 my ($self, $data) = @_; 109 $$self .= $data; 110 return $self; 53 111 } 54 112
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)