aboutsummaryrefslogtreecommitdiff
path: root/lib/Net/Hawk/Crypto.pm
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2014-12-21 11:34:04 +0000
committerdakkar <dakkar@thenautilus.net>2014-12-21 11:34:04 +0000
commitaa127d020cc85e790c6caa158860a298142ed85d (patch)
tree9a08f5c7fc947558315751cdbc7485c753bedaed /lib/Net/Hawk/Crypto.pm
parentmore client tests (diff)
downloadnet-hawk-aa127d020cc85e790c6caa158860a298142ed85d.tar.gz
net-hawk-aa127d020cc85e790c6caa158860a298142ed85d.tar.bz2
net-hawk-aa127d020cc85e790c6caa158860a298142ed85d.zip
authenticate client tests
Diffstat (limited to 'lib/Net/Hawk/Crypto.pm')
-rw-r--r--lib/Net/Hawk/Crypto.pm47
1 files changed, 40 insertions, 7 deletions
diff --git a/lib/Net/Hawk/Crypto.pm b/lib/Net/Hawk/Crypto.pm
index 9c53148..e70b210 100644
--- a/lib/Net/Hawk/Crypto.pm
+++ b/lib/Net/Hawk/Crypto.pm
@@ -25,8 +25,8 @@ sub generate_normalized_string {
port => Int,
hash => Optional[Str],
ext => Optional[Str|Undef],
- app => Optional[Str],
- dlg => Optional[Str],
+ app => Optional[Str|Undef],
+ dlg => Optional[Str|Undef],
slurpy Any,
]);
my ($self,$type,$options) = $argcheck->(@_);
@@ -78,16 +78,49 @@ sub calculate_mac {
my $normalized = $self->generate_normalized_string($type,$options);
+ return $self->calc_hmac(
+ $normalized,
+ $credentials->{algorithm},
+ $credentials->{key},
+ );
+}
+
+sub calculate_ts_mac {
+ state $argcheck = compile(
+ Object,Int,
+ Dict[
+ algorithm => Algorithm,
+ key => Str,
+ slurpy Any,
+ ],
+ );
+ my ($self,$ts,$credentials) = $argcheck->(@_);
+
+ my $string = sprintf(
+ "hawk.%s.ts\n%d\n",
+ header_version(),
+ $ts,
+ );
+
+ return $self->calc_hmac(
+ $string,
+ $credentials->{algorithm},
+ $credentials->{key},
+ );
+}
+
+sub calc_hmac {
+ state $argcheck = compile(Object,Str,Algorithm,Str);
+ my ($self,$data,$algorithm,$key) = $argcheck->(@_);
+
state $function_map = {
sha1 => \&hmac_sha1_base64,
sha256 => \&hmac_sha256_base64,
};
- my $mac = $function_map->{$credentials->{algorithm}}->(
- $normalized,$credentials->{key},
- );
-
- return _pad_b64($mac);
+ return _pad_b64($function_map->{$algorithm}->(
+ $data,$key,
+ ));
}
sub make_digest {