From 8a8b3dc9c67cad5c0bbf8506b00af5b72b107431 Mon Sep 17 00:00:00 2001 From: Aleksey Mazurin Date: Wed, 5 Oct 2016 21:51:22 +0400 Subject: [PATCH] fixed #68 --- lib/Spreadsheet/ParseXLSX/Decryptor.pm | 5 +++-- lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm | 4 +++- t/data/encryption-agile-SHA1-foobar.xlsx | Bin 0 -> 17920 bytes t/encryption.t | 18 ++++++++++++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 t/data/encryption-agile-SHA1-foobar.xlsx diff --git a/lib/Spreadsheet/ParseXLSX/Decryptor.pm b/lib/Spreadsheet/ParseXLSX/Decryptor.pm index 4968a7d..d4a33bc 100644 --- a/lib/Spreadsheet/ParseXLSX/Decryptor.pm +++ b/lib/Spreadsheet/ParseXLSX/Decryptor.pm @@ -143,6 +143,7 @@ sub _agileDecryption { my $encryptedVerifierHashInput = MIME::Base64::decode($info->att('encryptedVerifierHashInput')); my $encryptedVerifierHashValue = MIME::Base64::decode($info->att('encryptedVerifierHashValue')); my $encryptedKeyValue = MIME::Base64::decode($info->att('encryptedKeyValue')); + my $hashSize = 0 + $info->att('hashSize'); my $keyDecryptor = Spreadsheet::ParseXLSX::Decryptor::Agile->new({ cipherAlgorithm => $info->att('cipherAlgorithm'), @@ -155,7 +156,7 @@ sub _agileDecryption { blockSize => 0 + $info->att('blockSize') }); - $keyDecryptor->verifyPassword($encryptedVerifierHashInput, $encryptedVerifierHashValue); + $keyDecryptor->verifyPassword($encryptedVerifierHashInput, $encryptedVerifierHashValue, $hashSize); my $key = $keyDecryptor->decrypt($encryptedKeyValue, "\x14\x6e\x0b\xe7\xab\xac\xd0\xd6"); @@ -194,7 +195,7 @@ sub new { if ($self->{hashAlgorithm} eq 'SHA512') { $self->{hashProc} = \&Digest::SHA::sha512; - } elsif ($self->{hashAlgorithm} eq 'SHA-1') { + } elsif (($self->{hashAlgorithm} eq 'SHA-1') || ($self->{hashAlgorithm} eq 'SHA1')) { $self->{hashProc} = \&Digest::SHA::sha1; } elsif ($self->{hashAlgorithm} eq 'SHA256') { $self->{hashProc} = \&Digest::SHA::sha256; diff --git a/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm b/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm index 0405a68..21b60ec 100644 --- a/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm +++ b/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm @@ -89,10 +89,12 @@ sub decryptFile { sub verifyPassword { my $self = shift; - my ($encryptedVerifier, $encryptedVerifierHash) = @_; + my ($encryptedVerifier, $encryptedVerifierHash, $hashSize) = @_; my $encryptedVerifierHash0 = $self->{hashProc}->($self->decrypt($encryptedVerifier, "\xfe\xa7\xd2\x76\x3b\x4b\x9e\x79")); $encryptedVerifierHash = $self->decrypt($encryptedVerifierHash, "\xd7\xaa\x0f\x6d\x30\x61\x34\x4e"); + $encryptedVerifierHash0 = substr($encryptedVerifierHash0, 0, $hashSize); + $encryptedVerifierHash = substr($encryptedVerifierHash, 0, $hashSize); die "Wrong password: $self" unless ($encryptedVerifierHash0 eq $encryptedVerifierHash); } diff --git a/t/data/encryption-agile-SHA1-foobar.xlsx b/t/data/encryption-agile-SHA1-foobar.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4f2251b43e74a7ce4c86a4c7cbc03f8477ea01a1 GIT binary patch literal 17920 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 Bb{7Bu literal 0 HcmV?d00001 diff --git a/t/encryption.t b/t/encryption.t index 2ab510f..9ccc4c1 100644 --- a/t/encryption.t +++ b/t/encryption.t @@ -23,6 +23,24 @@ use Spreadsheet::ParseXLSX; } } +{ + my $filename = 't/data/encryption-agile-SHA1-foobar.xlsx'; + my @inputs = ( + $filename, + do { open my $fh, '<:raw:bytes', $filename or die; $fh }, + do { open my $fh, '<:raw:bytes', $filename or die; local $/; my $d = <$fh>; \$d }, + ); + + my $parser = Spreadsheet::ParseXLSX->new(Password => 'foobar'); + for my $input (@inputs) { + my $workbook = $parser->parse($input); + + my $worksheet = $workbook->worksheet(0); + my $cell = $worksheet->get_cell(0, 0); + is($cell->value, 'i can read this cell'); + } +} + { my $filename = 't/data/encryption-standard-default-password.xlsx'; my @inputs = (