Class: BlockCipherKit::BaseScheme
- Inherits:
-
Object
- Object
- BlockCipherKit::BaseScheme
- Defined in:
- lib/block_cipher_kit/base_scheme.rb
Direct Known Subclasses
AES256CBCScheme, AES256CFBCIVScheme, AES256CFBScheme, AES256CTRScheme, AES256GCMScheme, PassthruScheme
Instance Method Summary collapse
-
#decrypt_range(from_ciphertext_io:, range:) ⇒ String
Decrypts the desired range of the ciphered message, reading ciphertext out of
from_ciphertext_io. - #inspect ⇒ Object
-
#streaming_decrypt(from_ciphertext_io:, into_plaintext_io: nil) {|String| ... } ⇒ void
Decrypts the entire ciphered message, reading ciphertext out of
from_ciphertext_iountil itsreadreturnsnil(until EOF is implicitly reached). -
#streaming_decrypt_range(from_ciphertext_io:, range:, into_plaintext_io: nil) {|String| ... } ⇒ void
Decrypts the desired range of the ciphered message, reading ciphertext out of
from_ciphertext_io. -
#streaming_encrypt(into_ciphertext_io:, from_plaintext_io: nil) {|#write| ... } ⇒ void
Encrypts the entire ciphered message, reading plaintext either from the
from_plaintext_iountil itsreadreturnsnil(until EOF is implicitly reached) or from writes to the object it yields (for streaming writes).
Instance Method Details
#decrypt_range(from_ciphertext_io:, range:) ⇒ String
Decrypts the desired range of the ciphered message, reading ciphertext out of from_ciphertext_io.
Reading requires the from_ciphertext_io to be seekable - it must support #pos, #readand #seek.
The decrypted plaintext gets returned as a single concatenated String.
61 62 63 64 65 |
# File 'lib/block_cipher_kit/base_scheme.rb', line 61 def decrypt_range(from_ciphertext_io:, range:) buf = StringIO.new.binmode streaming_decrypt_range(from_ciphertext_io: from_ciphertext_io, range: range, into_plaintext_io: buf) buf.string end |
#inspect ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/block_cipher_kit/base_scheme.rb', line 67 def inspect # A reimplementation of #inspect based largely on # https://alchemists.io/articles/ruby_object_inspection pattern = +"" values = [] instance_variables.each do |name| pattern << "#{name}=%s " ivar_value = instance_variable_get(name) if ivar_value.is_a?(String) && key_material_instance_variable_names.include?(name) values.push("[SENSITIVE(#{ivar_value.bytesize * 8} bits)]") else values.push(ivar_value.inspect) end end format "#<%s:%#018x #{pattern.strip}>", self.class, object_id << 1, *values end |
#streaming_decrypt(from_ciphertext_io:, into_plaintext_io: nil) {|String| ... } ⇒ void
This method returns an undefined value.
Decrypts the entire ciphered message, reading ciphertext out of from_ciphertext_io
until its read returns nil (until EOF is implicitly reached). The scheme
will also read any data at the start of the IO that it requires for
operation, and consume the IO until exhaustion.
15 16 17 |
# File 'lib/block_cipher_kit/base_scheme.rb', line 15 def streaming_decrypt(from_ciphertext_io:, into_plaintext_io: nil, &blk) raise "Unimplemented" end |
#streaming_decrypt_range(from_ciphertext_io:, range:, into_plaintext_io: nil) {|String| ... } ⇒ void
This method returns an undefined value.
Decrypts the desired range of the ciphered message, reading ciphertext out of from_ciphertext_io.
Reading requires the from_ciphertext_io to be seekable - it must support #pos, #readand #seek.
The decrypted plaintext either gets written into into_plaintext_io if it is provided, or yielded
to the passed block in String chunks.
50 51 52 |
# File 'lib/block_cipher_kit/base_scheme.rb', line 50 def streaming_decrypt_range(from_ciphertext_io:, range:, into_plaintext_io: nil, &blk) raise "Unimplemented" end |
#streaming_encrypt(into_ciphertext_io:, from_plaintext_io: nil) {|#write| ... } ⇒ void
This method returns an undefined value.
Encrypts the entire ciphered message, reading plaintext either from the from_plaintext_io
until its read returns nil (until EOF is implicitly reached) or from writes to
the object it yields (for streaming writes).
The scheme will also write any leading data at the start of the output that should prefix the
ciphertext (usually the IV) and any trailing data after the ciphertext (like a validation
tag for cipher authentication) into the into_ciphertext_io.
33 34 35 |
# File 'lib/block_cipher_kit/base_scheme.rb', line 33 def streaming_encrypt(into_ciphertext_io:, from_plaintext_io: nil, &blk) raise "Unimplemented" end |