Module: Origami::Encryption::EncryptedStream

Includes:
EncryptedObject
Defined in:
lib/origami/encryption.rb

Overview

Module for encrypted Stream.

Instance Attribute Summary

Attributes included from EncryptedObject

#decrypted

Class Method Summary collapse

Instance Method Summary collapse

Methods included from EncryptedObject

#post_build

Class Method Details

.extended(obj) ⇒ Object



506
507
508
# File 'lib/origami/encryption.rb', line 506

def self.extended(obj)
    obj.decrypted = false
end

Instance Method Details

#decrypt!Object

Raises:



548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
# File 'lib/origami/encryption.rb', line 548

def decrypt!
    return self if @decrypted

    if self.filters.first == :Crypt
        params = decode_params.first

        if params.is_a?(Dictionary) and params.Name.is_a?(Name)
            crypt_filter = params.Name.value
        else
            crypt_filter = :Identity
        end

        cipher = self.document.encryption_cipher(crypt_filter)
    else
        cipher = self.document.stream_encryption_cipher
    end
    raise EncryptionError, "Cannot find stream encryption filter" if cipher.nil?

    key = compute_object_key(cipher)

    self.encoded_data = cipher.decrypt(key, @encoded_data)
    @decrypted = true

    self
end

#encrypt!Object

Raises:



510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
# File 'lib/origami/encryption.rb', line 510

def encrypt!
    return self unless @decrypted

    encode!

    if self.filters.first == :Crypt
        params = decode_params.first

        if params.is_a?(Dictionary) and params.Name.is_a?(Name)
            crypt_filter = params.Name.value
        else
            crypt_filter = :Identity
        end

        cipher = self.document.encryption_cipher(crypt_filter)
    else
        cipher = self.document.stream_encryption_cipher
    end
    raise EncryptionError, "Cannot find stream encryption filter" if cipher.nil?

    key = compute_object_key(cipher)

    @encoded_data =
        if cipher == RC4 or cipher == Identity
            cipher.encrypt(key, self.encoded_data)
        else
            iv = Encryption.rand_bytes(AES::BLOCKSIZE)
            cipher.encrypt(key, iv, @encoded_data)
        end

    @decrypted = false

    @encoded_data.freeze
    self.freeze

    self
end