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