summaryrefslogtreecommitdiff
path: root/lib/DeWeave/Crypto.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/DeWeave/Crypto.pm')
-rw-r--r--lib/DeWeave/Crypto.pm21
1 files changed, 7 insertions, 14 deletions
diff --git a/lib/DeWeave/Crypto.pm b/lib/DeWeave/Crypto.pm
index e21e141..dc657b6 100644
--- a/lib/DeWeave/Crypto.pm
+++ b/lib/DeWeave/Crypto.pm
@@ -29,8 +29,8 @@ sub _byte_sync_key {
my $key = $self->sync_key;
$key =~ y{89}{LO};
$key =~ s{-}{}g;
- $key = MIME::Base32::decode($key);
- return substr($key,0,16);
+ my $byte_key = MIME::Base32::decode(uc($key));
+ return substr($byte_key,0,16);
}
has _hmac_input => (
@@ -51,8 +51,6 @@ sub _build__encryption_key {
my $secret = $self->_hmac_input
. $self->storage->username . "\x01";
-warn "enc key: ",pp($secret,$self->_byte_sync_key,length($self->_byte_sync_key));
-
return Digest::SHA::hmac_sha256($secret, $self->_byte_sync_key);
}
@@ -93,16 +91,11 @@ sub _build__keys {
my $payload = $j->decode($keys_struct->{payload});
-warn "payload: ", pp $payload;
-warn "key: ",pp $self->_encryption_key, length($self->_encryption_key);
-
my $struct = $j->decode($self->decrypt({
%$payload,
key => $self->_encryption_key,
}));
-warn "keys: ",pp $struct;
-
my $keys = {
default => $struct->{default},
%{$struct->{collections}},
@@ -114,12 +107,14 @@ warn "keys: ",pp $struct;
sub keys_for_collection {
my ($self,$collection) = @_;
+ my $key;
if ($self->_has_collection_keys($collection)) {
- return $self->_get_collection_keys($collection);
+ $key = $self->_get_collection_keys($collection);
}
else {
- return $self->_get_collection_keys('default');
+ $key = $self->_get_collection_keys('default');
}
+ return [ map { MIME::Base64::decode($_) } @$key ];
}
sub decrypt {
@@ -128,9 +123,7 @@ sub decrypt {
my $iv = MIME::Base64::decode($args->{IV});
my $hmac = $args->{hmac};
my $ct = MIME::Base64::decode($args->{ciphertext});
- my $key = $args->{key} || $self->keys_for_collection('default');
-
-warn "Crypto ", pp($iv,$ct, length($ct), $key);
+ my $key = $args->{key} || $self->keys_for_collection('default')->[0];
my $cipher = Crypt::CBC->new(
-key => $key,