diff options
Diffstat (limited to 'lib/KiokuDB/Serializer/Crypt.pm')
-rw-r--r-- | lib/KiokuDB/Serializer/Crypt.pm | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/KiokuDB/Serializer/Crypt.pm b/lib/KiokuDB/Serializer/Crypt.pm index e69de29..b125a48 100644 --- a/lib/KiokuDB/Serializer/Crypt.pm +++ b/lib/KiokuDB/Serializer/Crypt.pm @@ -0,0 +1,61 @@ +package KiokuDB::Serializer::Crypt; +use Moose::Role; +use namespace::autoclean; + +use Crypt::Util; + +has crypt_key => ( + is => 'ro', + isa => 'Str', + required => 1, +); + +has crypt_cipher => ( + is => 'ro', + isa => 'Str', + default => 'Rijndael', +); + +has crypt_mode => ( + is => 'ro', + isa => 'Str', + required => 1, + default => 'CFB', +); + +has crypt => ( + is => 'ro', + isa => 'Crypt::Util', + lazy => 1, + default => sub { + my $self = shift; + return Crypt::Util->new( + disable_fallback => 1, + default_cipher => $self->crypt_cipher, + default_mode => $self->crypt_mode, + default_key => $self->crypt_key, + ); + }, + handles => ['encrypt_string', 'decrypt_string'], +); + +around serialize => sub { + my $orig = shift; + my $self = shift; + my (@args) = @_; + + my $collapsed = $self->$orig(@args); + return $self->encrypt_string($collapsed); +}; + +around deserialize => sub { + my $orig = shift; + my $self = shift; + my ($collapsed, @args) = @_; + + return $self->$orig($self->decrypt_string($collapsed), @args); +}; + +no Moose::Role; + +1; |