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 = '999.999'; # VERSION
31 Get various KDF parameters
.
33 C
<version
>, C
<secret
> and C
<assocdata
> are currently unused
.
37 sub salt
{ $_[0]->{+KDF_PARAM_ARGON2_SALT
} or throw
'Salt is not set' }
38 sub seed
{ $_[0]->salt }
39 sub parallelism
{ $_[0]->{+KDF_PARAM_ARGON2_PARALLELISM
} //= KDF_DEFAULT_ARGON2_PARALLELISM
}
40 sub memory
{ $_[0]->{+KDF_PARAM_ARGON2_MEMORY
} //= KDF_DEFAULT_ARGON2_MEMORY
}
41 sub iterations
{ $_[0]->{+KDF_PARAM_ARGON2_ITERATIONS
} //= KDF_DEFAULT_ARGON2_ITERATIONS
}
42 sub version
{ $_[0]->{+KDF_PARAM_ARGON2_VERSION
} //= KDF_DEFAULT_ARGON2_VERSION
}
43 sub secret
{ $_[0]->{+KDF_PARAM_ARGON2_SECRET
} }
44 sub assocdata
{ $_[0]->{+KDF_PARAM_ARGON2_ASSOCDATA
} }
49 return $self->SUPER::init
(
50 KDF_PARAM_ARGON2_SALT
() => $args{+KDF_PARAM_ARGON2_SALT
} // $args{salt
},
51 KDF_PARAM_ARGON2_PARALLELISM
() => $args{+KDF_PARAM_ARGON2_PARALLELISM
} // $args{parallelism
},
52 KDF_PARAM_ARGON2_MEMORY
() => $args{+KDF_PARAM_ARGON2_MEMORY
} // $args{memory
},
53 KDF_PARAM_ARGON2_ITERATIONS
() => $args{+KDF_PARAM_ARGON2_ITERATIONS
} // $args{iterations
},
54 KDF_PARAM_ARGON2_VERSION
() => $args{+KDF_PARAM_ARGON2_VERSION
} // $args{version
},
55 KDF_PARAM_ARGON2_SECRET
() => $args{+KDF_PARAM_ARGON2_SECRET
} // $args{secret
},
56 KDF_PARAM_ARGON2_ASSOCDATA
() => $args{+KDF_PARAM_ARGON2_ASSOCDATA
} // $args{assocdata
},
64 my ($uuid, $salt, $iterations, $memory, $parallelism)
65 = ($self->uuid, $self->salt, $self->iterations, $self->memory, $self->parallelism);
67 if ($uuid eq KDF_UUID_ARGON2D
) {
68 return argon2d_raw
($key, $salt, $iterations, $memory, $parallelism, length($salt));
70 elsif ($uuid eq KDF_UUID_ARGON2ID
) {
71 return argon2id_raw
($key, $salt, $iterations, $memory, $parallelism, length($salt));
74 throw
'Unknown Argon2 type', uuid
=> $uuid;
82 An Argon2 key derivation function. This is a L<File::KDBX::KDF> subclass.
84 This KDF allows for excellent resistance to ASIC password cracking. It's a solid choice but doesn't have the
85 track record of L<File::KDBX::KDF::AES> and requires using the KDBX4+ file format.