diff options
Diffstat (limited to 'lib/DeWeave/Crypto.pm')
-rw-r--r-- | lib/DeWeave/Crypto.pm | 21 |
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, |