summaryrefslogtreecommitdiffstats
path: root/lib/KiokuDB/Serializer/Crypt.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/KiokuDB/Serializer/Crypt.pm')
-rw-r--r--lib/KiokuDB/Serializer/Crypt.pm61
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;