1 package File
::KDBX
::KDF
::Argon2
;
2 # ABSTRACT: The Argon2 family of key derivation functions
7 use Crypt
::Argon2
qw(argon2d_raw argon2id_raw);
8 use File
::KDBX
::Constants
qw(:kdf);
10 use File
::KDBX
::Util
qw(:class);
13 extends
'File::KDBX::KDF';
15 our $VERSION = '0.902'; # VERSION
18 sub salt
{ $_[0]->{+KDF_PARAM_ARGON2_SALT
} or throw
'Salt is not set' }
19 sub seed
{ $_[0]->salt }
20 sub parallelism
{ $_[0]->{+KDF_PARAM_ARGON2_PARALLELISM
} //= KDF_DEFAULT_ARGON2_PARALLELISM
}
21 sub memory
{ $_[0]->{+KDF_PARAM_ARGON2_MEMORY
} //= KDF_DEFAULT_ARGON2_MEMORY
}
22 sub iterations
{ $_[0]->{+KDF_PARAM_ARGON2_ITERATIONS
} //= KDF_DEFAULT_ARGON2_ITERATIONS
}
23 sub version
{ $_[0]->{+KDF_PARAM_ARGON2_VERSION
} //= KDF_DEFAULT_ARGON2_VERSION
}
24 sub secret
{ $_[0]->{+KDF_PARAM_ARGON2_SECRET
} }
25 sub assocdata
{ $_[0]->{+KDF_PARAM_ARGON2_ASSOCDATA
} }
30 return $self->SUPER::init
(
31 KDF_PARAM_ARGON2_SALT
() => $args{+KDF_PARAM_ARGON2_SALT
} // $args{salt
},
32 KDF_PARAM_ARGON2_PARALLELISM
() => $args{+KDF_PARAM_ARGON2_PARALLELISM
} // $args{parallelism
},
33 KDF_PARAM_ARGON2_MEMORY
() => $args{+KDF_PARAM_ARGON2_MEMORY
} // $args{memory
},
34 KDF_PARAM_ARGON2_ITERATIONS
() => $args{+KDF_PARAM_ARGON2_ITERATIONS
} // $args{iterations
},
35 KDF_PARAM_ARGON2_VERSION
() => $args{+KDF_PARAM_ARGON2_VERSION
} // $args{version
},
36 KDF_PARAM_ARGON2_SECRET
() => $args{+KDF_PARAM_ARGON2_SECRET
} // $args{secret
},
37 KDF_PARAM_ARGON2_ASSOCDATA
() => $args{+KDF_PARAM_ARGON2_ASSOCDATA
} // $args{assocdata
},
45 my ($uuid, $salt, $iterations, $memory, $parallelism)
46 = ($self->uuid, $self->salt, $self->iterations, $self->memory, $self->parallelism);
48 if ($uuid eq KDF_UUID_ARGON2D
) {
49 return argon2d_raw
($key, $salt, $iterations, $memory, $parallelism, length($salt));
51 elsif ($uuid eq KDF_UUID_ARGON2ID
) {
52 return argon2id_raw
($key, $salt, $iterations, $memory, $parallelism, length($salt));
55 throw
'Unknown Argon2 type', uuid
=> $uuid;
68 File::KDBX::KDF::Argon2 - The Argon2 family of key derivation functions
76 An Argon2 key derivation function. This is a L<File::KDBX::KDF> subclass.
78 This KDF allows for excellent resistance to ASIC password cracking. It's a solid choice but doesn't have the
79 track record of L<File::KDBX::KDF::AES> and requires using the KDBX4+ file format.
97 Get various KDF parameters.
99 C<version>, C<secret> and C<assocdata> are currently unused.
103 Please report any bugs or feature requests on the bugtracker website
104 L<https://github.com/chazmcgarvey/File-KDBX/issues>
106 When submitting a bug or request, please include a test-file or a
107 patch to an existing test-file that illustrates the bug or desired
112 Charles McGarvey <ccm@cpan.org>
114 =head1 COPYRIGHT AND LICENSE
116 This software is copyright (c) 2022 by Charles McGarvey.
118 This is free software; you can redistribute it and/or modify it under
119 the same terms as the Perl 5 programming language system itself.