]> Dogcows Code - chaz/p5-File-KDBX/blob - lib/File/KDBX/Cipher/CBC.pm
Add function for creating class attributes
[chaz/p5-File-KDBX] / lib / File / KDBX / Cipher / CBC.pm
1 package File::KDBX::Cipher::CBC;
2 # ABSTRACT: A CBC block cipher mode encrypter/decrypter
3
4 use warnings;
5 use strict;
6
7 use Crypt::Mode::CBC;
8 use File::KDBX::Error;
9 use File::KDBX::Util qw(:class);
10 use namespace::clean;
11
12 extends 'File::KDBX::Cipher';
13
14 our $VERSION = '999.999'; # VERSION
15
16 has key_size => 32;
17 sub iv_size { 16 }
18 sub block_size { 16 }
19
20 sub encrypt {
21 my $self = shift;
22
23 my $mode = $self->{mode} ||= do {
24 my $m = Crypt::Mode::CBC->new($self->algorithm);
25 $m->start_encrypt($self->key, $self->iv);
26 $m;
27 };
28
29 return join('', map { $mode->add(ref $_ ? $$_ : $_) } grep { defined } @_);
30 }
31
32 sub decrypt {
33 my $self = shift;
34
35 my $mode = $self->{mode} ||= do {
36 my $m = Crypt::Mode::CBC->new($self->algorithm);
37 $m->start_decrypt($self->key, $self->iv);
38 $m;
39 };
40
41 return join('', map { $mode->add(ref $_ ? $$_ : $_) } grep { defined } @_);
42 }
43
44 sub finish {
45 my $self = shift;
46 return '' if !$self->{mode};
47 my $out = $self->{mode}->finish;
48 delete $self->{mode};
49 return $out;
50 }
51
52 1;
53 __END__
54
55 =head1 SYNOPSIS
56
57 use File::KDBX::Cipher::CBC;
58
59 my $cipher = File::KDBX::Cipher::CBC->new(algorithm => $algo, key => $key, iv => $iv);
60
61 =head1 DESCRIPTION
62
63 A subclass of L<File::KDBX::Cipher> for encrypting and decrypting data using the CBC block cipher mode.
64
65 =cut
This page took 0.033157 seconds and 4 git commands to generate.