2009-01-30 16:26:34 +01:00
|
|
|
##@file
|
|
|
|
# Extend Crypt::Rijndael to add base64 encoding to cypher functions
|
|
|
|
|
|
|
|
##@class
|
|
|
|
# Extend Crypt::Rijndael to add base64 encoding to cypher functions.
|
|
|
|
# $Lemonldap::NG::Common::Crypto::msg contains Crypt::Rijndael errors.
|
|
|
|
package Lemonldap::NG::Common::Crypto;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use Crypt::Rijndael;
|
|
|
|
use MIME::Base64;
|
|
|
|
use base qw(Crypt::Rijndael);
|
2009-06-08 18:29:13 +02:00
|
|
|
|
2009-10-11 10:13:50 +02:00
|
|
|
our $VERSION = '0.2';
|
2009-06-08 18:29:13 +02:00
|
|
|
|
2009-01-30 16:26:34 +01:00
|
|
|
our $msg;
|
|
|
|
|
|
|
|
## @cmethod Lemonldap::NG::Common::Crypto new(array param)
|
|
|
|
# Constructor
|
|
|
|
# @param @param Crypt::Rijndael::new() parameters
|
|
|
|
# @return Lemonldap::NG::Common::Crypto object
|
|
|
|
sub new {
|
|
|
|
my $class = shift;
|
|
|
|
my $self = Crypt::Rijndael->new(@_);
|
|
|
|
return bless $self, $class;
|
|
|
|
}
|
|
|
|
|
|
|
|
## @method string encrypt(string data)
|
|
|
|
# Encrypt $data and return it in Base64 format
|
|
|
|
# @param data datas to encrypt
|
|
|
|
# @return encrypted datas in Base64 format
|
|
|
|
sub encrypt {
|
2009-08-20 16:19:40 +02:00
|
|
|
my ( $self, $str ) = @_;
|
2009-01-30 16:26:34 +01:00
|
|
|
my $tmp;
|
2009-08-20 16:19:40 +02:00
|
|
|
eval {
|
|
|
|
$tmp = encode_base64(
|
|
|
|
$self->SUPER::encrypt( $str . "\0" x ( 16 - length($str) % 16 ) ),
|
|
|
|
'' );
|
|
|
|
};
|
2009-01-30 16:26:34 +01:00
|
|
|
if ($@) {
|
|
|
|
$msg = "Crypt::Rijndael error : $@";
|
|
|
|
return undef;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$msg = '';
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
## @method string decrypt(string data)
|
|
|
|
# Decrypt $data and return it in
|
|
|
|
# @param data datas to decrypt in Base64 format
|
|
|
|
# @return decrypted datas
|
|
|
|
sub decrypt {
|
|
|
|
my $self = shift;
|
|
|
|
my $tmp = shift;
|
|
|
|
$tmp =~ s/%2B/\+/ig;
|
|
|
|
$tmp =~ s/%2F/\//ig;
|
|
|
|
$tmp =~ s/%3D/=/ig;
|
|
|
|
eval { $tmp = $self->SUPER::decrypt( decode_base64($tmp) ); };
|
|
|
|
if ($@) {
|
|
|
|
$msg = "Crypt::Rijndael error : $@";
|
|
|
|
return undef;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$msg = '';
|
2009-08-20 16:19:40 +02:00
|
|
|
|
|
|
|
# Obscure Perl re bug...
|
2010-03-01 21:32:28 +01:00
|
|
|
$tmp .= "\0";
|
2009-08-20 16:19:40 +02:00
|
|
|
$tmp =~ s/\0*$//;
|
2009-01-30 16:26:34 +01:00
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
1;
|