class Themis::Scell
Constants
- CONTEXT_IMPRINT_MODE
- SEAL_MODE
- TOKEN_PROTECT_MODE
Public Class Methods
new(key, mode)
click to toggle source
# File lib/rubythemis.rb, line 276 def initialize(key, mode) @key, @key_length = string_to_pointer_size(key) @mode = mode end
Public Instance Methods
decrypt(message, context=nil)
click to toggle source
# File lib/rubythemis.rb, line 314 def decrypt(message, context=nil) context_, context_length_ = context.nil? ? [nil,0] : string_to_pointer_size(context) decrypted_message_length=FFI::MemoryPointer.new(:uint) case @mode when SEAL_MODE message_, message_length_ = string_to_pointer_size(message) res=themis_secure_cell_decrypt_seal(@key, @key_length, context_, context_length_, message_, message_length_, nil, decrypted_message_length) raise ThemisError, "Secure Cell (Seal) failed decrypting: #{res}" unless res == BUFFER_TOO_SMALL decrypted_message = FFI::MemoryPointer.new(:char, decrypted_message_length.read_uint) res=themis_secure_cell_decrypt_seal(@key, @key_length, context_, context_length_, message_, message_length_, decrypted_message, decrypted_message_length) raise ThemisError, "Secure Cell (Seal) failed decrypting: #{res}" unless res == SUCCESS return decrypted_message.get_bytes(0, decrypted_message_length.read_uint) when TOKEN_PROTECT_MODE enccontext, message_ = message message__, message_length__ = string_to_pointer_size(message_) enccontext_, enccontext_length = string_to_pointer_size(enccontext) res=themis_secure_cell_decrypt_token_protect(@key, @key_length, context_, context_length_, message__, message_length__, enccontext_, enccontext_length, nil, decrypted_message_length) raise ThemisError, "Secure Cell (Token Protect) failed decrypting: #{res}" unless res == BUFFER_TOO_SMALL decrypted_message = FFI::MemoryPointer.new(:char, decrypted_message_length.read_uint) res=themis_secure_cell_decrypt_token_protect(@key, @key_length, context_, context_length_, message__, message_length__, enccontext_, enccontext_length, decrypted_message, decrypted_message_length) raise ThemisError, "Secure Cell (Token Protect) failed decrypting: #{res}" unless res == SUCCESS return decrypted_message.get_bytes(0, decrypted_message_length.read_uint) when CONTEXT_IMPRINT_MODE message_, message_length_ = string_to_pointer_size(message) res=themis_secure_cell_decrypt_context_imprint(@key, @key_length, message_, message_length_, context_, context_length_, nil, decrypted_message_length) raise ThemisError, "Secure Cell (Context Imprint) failed decrypting: #{res}" unless res == BUFFER_TOO_SMALL decrypted_message = FFI::MemoryPointer.new(:char, decrypted_message_length.read_uint) res=themis_secure_cell_decrypt_context_imprint(@key, @key_length, message_, message_length_, context_, context_length_, decrypted_message, decrypted_message_length) raise ThemisError, "Secure Cell (Context Imprint) failed decrypting: #{res}" unless res == SUCCESS return decrypted_message.get_bytes(0, decrypted_message_length.read_uint) else raise ThemisError, "Secure Cell failed encrypting, undefined mode" end end
encrypt(message, context=nil)
click to toggle source
# File lib/rubythemis.rb, line 281 def encrypt(message, context=nil) message_, message_length_ = string_to_pointer_size(message) context_, context_length_ = context.nil? ? [nil,0] : string_to_pointer_size(context) encrypted_message_length=FFI::MemoryPointer.new(:uint) enccontext_length=FFI::MemoryPointer.new(:uint) case @mode when SEAL_MODE res=themis_secure_cell_encrypt_seal(@key, @key_length, context_, context_length_, message_, message_length_, nil, encrypted_message_length) raise ThemisError, "Secure Cell (Seal) failed encrypting: #{res}" unless res == BUFFER_TOO_SMALL encrypted_message = FFI::MemoryPointer.new(:char, encrypted_message_length.read_uint) res=themis_secure_cell_encrypt_seal(@key, @key_length, context_, context_length_, message_, message_length_, encrypted_message, encrypted_message_length) raise ThemisError, "Secure Cell (Seal) failed encrypting: #{res}" unless res == SUCCESS return encrypted_message.get_bytes(0, encrypted_message_length.read_uint) when TOKEN_PROTECT_MODE res=themis_secure_cell_encrypt_token_protect(@key, @key_length, context_, context_length_, message_, message_length_, nil, enccontext_length, nil, encrypted_message_length) raise ThemisError, "Secure Cell (Token protect) failed encrypting: #{res}" unless res == BUFFER_TOO_SMALL encrypted_message = FFI::MemoryPointer.new(:char, encrypted_message_length.read_uint) enccontext = FFI::MemoryPointer.new(:char, enccontext_length.read_uint) res=themis_secure_cell_encrypt_token_protect(@key, @key_length, context_, context_length_, message_, message_length_, enccontext, enccontext_length, encrypted_message, encrypted_message_length) raise ThemisError, "Secure Cell (Token Protect) failed encrypting: #{res}" unless res == SUCCESS return enccontext.get_bytes(0, enccontext_length.read_uint), encrypted_message.get_bytes(0, encrypted_message_length.read_uint) when CONTEXT_IMPRINT_MODE res=themis_secure_cell_encrypt_context_imprint(@key, @key_length, message_, message_length_, context_, context_length_, nil, encrypted_message_length) raise ThemisError, "Secure Cell (Context Imprint) failed encrypting: #{res}" unless res == BUFFER_TOO_SMALL encrypted_message = FFI::MemoryPointer.new(:char, encrypted_message_length.read_uint) res=themis_secure_cell_encrypt_context_imprint(@key, @key_length, message_, message_length_, context_, context_length_, encrypted_message, encrypted_message_length) raise ThemisError, "Secure Cell (Context Imprint) failed encrypting: #{res}" unless res == SUCCESS return encrypted_message.get_bytes(0, encrypted_message_length.read_uint) else raise ThemisError, "Secure Cell failed encrypting, undefined mode" end end