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);
12 use parent
'File::KDBX::KDF';
14 our $VERSION = '999.999'; # VERSION
19 return $self->SUPER::init
(
20 KDF_PARAM_ARGON2_SALT
() => $args{+KDF_PARAM_ARGON2_SALT
} // $args{salt
},
21 KDF_PARAM_ARGON2_PARALLELISM
() => $args{+KDF_PARAM_ARGON2_PARALLELISM
} // $args{parallelism
},
22 KDF_PARAM_ARGON2_MEMORY
() => $args{+KDF_PARAM_ARGON2_MEMORY
} // $args{memory
},
23 KDF_PARAM_ARGON2_ITERATIONS
() => $args{+KDF_PARAM_ARGON2_ITERATIONS
} // $args{iterations
},
24 KDF_PARAM_ARGON2_VERSION
() => $args{+KDF_PARAM_ARGON2_VERSION
} // $args{version
},
25 KDF_PARAM_ARGON2_SECRET
() => $args{+KDF_PARAM_ARGON2_SECRET
} // $args{secret
},
26 KDF_PARAM_ARGON2_ASSOCDATA
() => $args{+KDF_PARAM_ARGON2_ASSOCDATA
} // $args{assocdata
},
44 Get various KDF parameters
.
46 C
<version
>, C
<secret
> and C
<assocdata
> are currently unused
.
50 sub salt
{ $_[0]->{+KDF_PARAM_ARGON2_SALT
} or throw
'Salt is not set' }
51 sub parallelism
{ $_[0]->{+KDF_PARAM_ARGON2_PARALLELISM
} //= KDF_DEFAULT_ARGON2_PARALLELISM
}
52 sub memory
{ $_[0]->{+KDF_PARAM_ARGON2_MEMORY
} //= KDF_DEFAULT_ARGON2_MEMORY
}
53 sub iterations
{ $_[0]->{+KDF_PARAM_ARGON2_ITERATIONS
} //= KDF_DEFAULT_ARGON2_ITERATIONS
}
54 sub version
{ $_[0]->{+KDF_PARAM_ARGON2_VERSION
} //= KDF_DEFAULT_ARGON2_VERSION
}
55 sub secret
{ $_[0]->{+KDF_PARAM_ARGON2_SECRET
} }
56 sub assocdata
{ $_[0]->{+KDF_PARAM_ARGON2_ASSOCDATA
} }
58 sub seed
{ $_[0]->salt }
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.