module Xlsxrb::Ooxml::Crypto
High-level encryption and decryption facade for [MS-OFFCRYPTO] Excel document protection.
Public Class Methods
(untyped cfb_data, untyped password) → untyped
Source
# File lib/xlsxrb/ooxml/crypto.rb, line 27 def decrypt(cfb_data, password) raise Xlsxrb::EncryptedFileError, "Password is required to decrypt this file" if password.nil? || password.to_s.empty? reader = Cfb::Reader.new(cfb_data) encryption_info = reader.read_stream("EncryptionInfo") encrypted_package = reader.read_stream("EncryptedPackage") raise Xlsxrb::DecryptionError, "Missing EncryptionInfo or EncryptedPackage stream" if encryption_info.nil? || encrypted_package.nil? major, minor = encryption_info[0, 4].unpack("vv") if major == 4 && minor == 4 Agile.decrypt(encryption_info, encrypted_package, password) elsif minor == 2 Standard.decrypt(encryption_info, encrypted_package, password) else raise Xlsxrb::DecryptionError, "Unsupported encryption version #{major}.#{minor}" end end
Decrypts an encrypted XLSX (CFB) package with the given password.
(untyped plain_zip_data, untyped password, ?mode: untyped) → untyped
Source
# File lib/xlsxrb/ooxml/crypto.rb, line 47 def encrypt(plain_zip_data, password, mode: :standard) return plain_zip_data if password.nil? || password.to_s.empty? streams = if mode == :agile Agile.encrypt(plain_zip_data, password) else Standard.encrypt(plain_zip_data, password) end Cfb::Writer.write(streams) end
Encrypts a plain ZIP payload with the given password into an encrypted CFB package.
(untyped data) → untyped
Source
# File lib/xlsxrb/ooxml/crypto.rb, line 15 def encrypted?(data) return false unless Cfb::Reader.cfb?(data) begin reader = Cfb::Reader.new(data) reader.stream_names.any? { |n| n.casecmp?("EncryptionInfo") } rescue StandardError false end end
Checks if the binary data is an encrypted Compound File Binary package.