our $VERSION = '1.00';
sub generate_csrf_token {
- my ($id, $secret, $random, $time) = @_;
+ my ($id, $secret, $options) = @_;
- $time //= time;
+ my $time = $options->{'Time'} // time;
+ my $random = $options->{'Random'};
my $digest = Digest::HMAC_SHA1::hmac_sha1($time . "/" . $id, $secret);
my @digest_bytes = _to_byte_array($digest);
}
sub check_csrf_token {
- my ($id, $secret, $csrf_token, $max_age) = @_;
+ my ($id, $secret, $csrf_token, $options) = @_;
if ($csrf_token !~ /^([0-9a-f]+),([0-9a-f]+),([0-9]+)$/) {
# Malformed token.
return 0;
}
+ my $ref_time = $options->{'Time'} // time;
+
my ($masked_token, $mask, $time) = ($1, $2, $3);
- if (defined($max_age) && time - $time > $max_age) {
+ my $max_age = $options->{'MaxAge'};
+ if (defined($max_age) && $ref_time - $time > $max_age) {
# Timed out.
return 0;
}