Mineplex/.FILES USED TO GET TO WHERE WE ARE PRESENTLY/xampp/perl/vendor/lib/Crypt/Twofish.pm

160 lines
3.3 KiB
Perl
Raw Normal View History

2023-05-17 21:44:01 +00:00
# $Id: Twofish.pm,v 2.12 2001/05/21 17:38:01 ams Exp $
# Copyright 2001 Abhijit Menon-Sen <ams@toroid.org>
package Crypt::Twofish;
use strict;
use Carp;
use DynaLoader;
use vars qw( @ISA $VERSION );
@ISA = qw( DynaLoader );
$VERSION = '2.17';
bootstrap Crypt::Twofish $VERSION;
sub keysize () { 16 }
sub blocksize () { 16 }
sub new
{
my ($class, $key) = @_;
croak "Usage: ".__PACKAGE__."->new(\$key)" unless $key;
return Crypt::Twofish::setup($key);
}
sub encrypt
{
my ($self, $data) = @_;
croak "Usage: \$cipher->encrypt(\$data)" unless ref($self) && $data;
$self->crypt($data, $data, 0);
}
sub decrypt
{
my ($self, $data) = @_;
croak "Usage: \$cipher->decrypt(\$data)" unless ref($self) && $data;
$self->crypt($data, $data, 1);
}
# The functions below provide an interface that is call-compatible with
# the Crypt::Twofish 1.0 module. They do not, however, behave in exactly
# the same way: they don't pad keys, and cannot decrypt ciphertext which
# was written by the old module.
#
# (This interface is deprecated. Please use the documented interface
# instead).
sub Encipher
{
my ($key, $keylength, $plaintext) = @_;
require Crypt::CBC;
my $cipher = Crypt::CBC->new($key, "Twofish");
return $cipher->encrypt($plaintext);
}
sub Decipher
{
my ($key, $keylength, $ciphertext, $cipherlength) = @_;
require Crypt::CBC;
my $cipher = Crypt::CBC->new($key, "Twofish");
return $cipher->decrypt($ciphertext);
}
sub LastError { ""; }
sub CheckTwofish { undef; }
1;
__END__
=head1 NAME
Crypt::Twofish - The Twofish Encryption Algorithm
=head1 SYNOPSIS
use Crypt::Twofish;
$cipher = Crypt::Twofish->new($key);
$ciphertext = $cipher->encrypt($plaintext);
$plaintext = $cipher->decrypt($ciphertext);
=head1 DESCRIPTION
Twofish is a 128-bit symmetric block cipher with a variable length (128,
192, or 256-bit) key, developed by Counterpane Labs. It is unpatented
and free for all uses, as described at
<URL:http://www.counterpane.com/twofish.html>.
This module implements Twofish encryption. It supports the Crypt::CBC
interface, with the functions described below. It also provides an
interface that is call-compatible with Crypt::Twofish 1.0, but its use
in new code is strongly discouraged.
=head2 Functions
=over
=item blocksize
Returns the size (in bytes) of the block (16, in this case).
=item keysize
Returns the size (in bytes) of the key. Although the module understands
128, 192, and 256-bit keys, it returns 16 for compatibility with
Crypt::CBC.
=item new($key)
This creates a new Crypt::Twofish object with the specified key (which
should be 16, 24, or 32 bytes long).
=item encrypt($data)
Encrypts blocksize() bytes of $data and returns the corresponding
ciphertext.
=item decrypt($data)
Decrypts blocksize() bytes of $data and returns the corresponding
plaintext.
=back
=head1 SEE ALSO
Crypt::CBC, Crypt::Blowfish, Crypt::TEA
=head1 ACKNOWLEDGEMENTS
=over 4
=item Nishant Kakani
For writing Crypt::Twofish 1.0 (this version is a complete rewrite).
=item Tony Cook
For making the module work under Activeperl, testing on several
platforms, and suggesting that I probe for features via %Config.
=back
=head1 AUTHOR
Abhijit Menon-Sen <ams@toroid.org>
Copyright 2001 Abhijit Menon-Sen.
This module is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.