Mineplex/.FILES USED TO GET TO WHERE WE ARE PRESENTLY/xampp/perl/vendor/lib/Digest/OMAC2.pm
Daniel Waggner 76a7ae65df PUUUUUSH
2023-05-17 14:44:01 -07:00

65 lines
1.2 KiB
Perl

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.