Initial Commit
This commit is contained in:
64
database/perl/vendor/lib/Digest/OMAC2.pm
vendored
Normal file
64
database/perl/vendor/lib/Digest/OMAC2.pm
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
package Digest::OMAC2;
|
||||
|
||||
use base qw(Digest::OMAC::Base);
|
||||
|
||||
use strict;
|
||||
#use warnings;
|
||||
use Carp;
|
||||
use MIME::Base64;
|
||||
|
||||
# we still call it Lu2 even though it's actually no longer squared ;-)
|
||||
|
||||
sub _lu2 {
|
||||
my ( $self, $blocksize, $L ) = @_;
|
||||
$self->_shift_lu2( $L, $self->_lu2_constant($blocksize) );
|
||||
}
|
||||
|
||||
sub _shift_lu2 {
|
||||
my ( $self, $L, $constant ) = @_;
|
||||
|
||||
# used to do Bit::Vector's shift_left but that's broken
|
||||
my $unpacked = unpack("B*",$L);
|
||||
my $lsb = chop $unpacked;
|
||||
my $Lt = pack("B*", "0" . $unpacked);
|
||||
|
||||
if ( $lsb ) {
|
||||
return $Lt ^ $constant;
|
||||
} else {
|
||||
return $Lt;
|
||||
}
|
||||
}
|
||||
|
||||
sub _lu2_constant {
|
||||
my ( $self, $blocksize ) = @_;
|
||||
|
||||
if ( $blocksize == 16 ) { # 128
|
||||
return ("\x80" . ("\x00" x 14) . "\x43");
|
||||
} elsif ( $blocksize == 8 ) { # 64
|
||||
return ("\x80" . ("\x00" x 6) . "\x0d");
|
||||
} else {
|
||||
die "Blocksize $blocksize is not supported by OMAC";
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Digest::OMAC2 - OMAC 2 implementation
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Digest::OMAC2;
|
||||
|
||||
my $d = Digest::OMAC2->new( $key, $cipher );
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
OMAC 2 is a variant of the CMAC/OMAC 1 algorithm. The initialization routines
|
||||
are slightly different. OMAC2 actually precedes OMAC1, so
|
||||
L<Digest::CMAC>/L<Digest::OMAC1> is the reccomended version. Supposedly OMAC1
|
||||
was more rigorously analyzed.
|
||||
Reference in New Issue
Block a user