lib/origami/encryption.rb in origami-1.2.3 vs lib/origami/encryption.rb in origami-1.2.4

- old
+ new

@@ -23,11 +23,10 @@ =end require 'digest/md5' require 'digest/sha2' -require 'iconv' module Origami class EncryptionError < Exception #:nodoc: end @@ -113,20 +112,19 @@ raise EncryptionError, "Document ID was not found or is invalid" unless handler.V.to_i == 5 else doc_id = doc_id.first end - if handler.is_owner_password?(passwd, doc_id) + if handler.is_user_password?(passwd, doc_id) + encryption_key = handler.compute_user_encryption_key(passwd, doc_id) + elsif handler.is_owner_password?(passwd, doc_id) if handler.V.to_i < 5 user_passwd = handler.retrieve_user_password(passwd) encryption_key = handler.compute_user_encryption_key(user_passwd, doc_id) else encryption_key = handler.compute_owner_encryption_key(passwd) end - - elsif handler.is_user_password?(passwd, doc_id) - encryption_key = handler.compute_user_encryption_key(passwd, doc_id) else raise EncryptionInvalidPasswordError end @@ -1323,13 +1321,13 @@ else fail "You need OpenSSL support to encrypt/decrypt documents with this method" end 64.times do |j| - x = aes.update(block) - unless vector.empty? - x += aes.update(vector) - end + x = '' + x += aes.update(password) unless password.empty? + x += aes.update(block) + x += aes.update(vector) unless vector.empty? if j == 0 block_size = 32 + (x.unpack("C16").inject(0) {|a,b| a+b} % 3) * 16 digest = Digest::SHA2.new(block_size << 3) end