]>
Dogcows Code - chaz/p5-File-KDBX/blob - lib/File/KDBX/Key/Composite.pm
1 package File
::KDBX
::Key
::Composite
;
2 # ABSTRACT: A composite key made up of component keys
7 use Crypt
::Digest
qw(digest_data);
9 use File
::KDBX
::Util
qw(:erase);
10 use Ref
::Util
qw(is_arrayref);
11 use Scalar
::Util
qw(blessed);
14 use parent
'File::KDBX::Key';
16 our $VERSION = '999.999'; # VERSION
20 my $primitive = shift // throw
'Missing key primitive';
22 my @primitive = grep { defined } is_arrayref
($primitive) ? @$primitive : $primitive;
23 @primitive or throw
'Composite key must have at least one component key', count
=> scalar @primitive;
25 my @keys = map { blessed
$_ && $_->can('raw_key') ? $_ : File
::KDBX
::Key-
>new($_,
26 keep_primitive
=> $self->{keep_primitive
}) } @primitive;
27 $self->{keys} = \
@keys;
34 my $challenge = shift;
36 my @keys = @{$self->keys} or throw
'Cannot generate a raw key from an empty composite key';
38 my @basic_keys = map { $_->raw_key } grep { !$_->can('challenge') } @keys;
40 $response = $self->challenge($challenge, @_) if defined $challenge;
41 my $cleanup = erase_scoped \
@basic_keys, $response;
43 return digest_data
('SHA256',
45 defined $response ? $response : (),
51 $_->hide for @{$self->keys};
57 $_->show for @{$self->keys};
65 my @chalresp_keys = grep { $_->can('challenge') } @{$self->keys} or return '';
67 my @responses = map { $_->challenge(@args) } @chalresp_keys;
68 my $cleanup = erase_scoped \
@responses;
70 return digest_data
('SHA256', @responses);
77 Get one
or more component L
<File
::KDBX
::Key
>.
83 $self->{keys} = shift if @_;
84 return $self->{keys} ||= [];
This page took 0.04817 seconds and 5 git commands to generate.