Class: Themis::Ssession

Inherits:
Object
  • Object
show all
Includes:
ThemisCommon, ThemisImport
Defined in:
lib/rubythemis.rb

Constant Summary collapse

MAPPING =
{}
Get_pub_key_by_id_callback =
FFI::Function.new(:int, [:pointer, :int, :pointer, :int, :pointer]) do |id_buf, id_length, pubkey_buf, pubkey_length, obj|
    pub_key=MAPPING[obj.read_uint64].get_pub_key_by_id(id_buf.get_bytes(0,id_length))
    if !pub_key
  -1
    end
    pubkey_buf.put_bytes(0, pub_key)
    0
end

Instance Method Summary collapse

Methods included from ThemisCommon

string_to_pointer_size

Constructor Details

#initialize(id, private_key, transport) ⇒ Ssession

Returns a new instance of Ssession.

Raises:



152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/rubythemis.rb', line 152

def initialize(id, private_key, transport)
        id_buf, id_length = string_to_pointer_size(id)
  private_key_buf, private_key_length = string_to_pointer_size(private_key)
  @callbacks = Callbacks_struct.new
  @callbacks[:get_pub_key_for_id] = Get_pub_key_by_id_callback
  MAPPING[transport.object_id]=transport
  @transport_obj_id=transport.object_id
  @callbacks[:user_data] = FFI::MemoryPointer.new(:uint64)
  @callbacks[:user_data].write_uint64(@transport_obj_id)
  @session=secure_session_create(id_buf, id_length, private_key_buf, private_key_length, @callbacks);
        raise ThemisError, "Secure Session failed creating" unless @session
end

Instance Method Details

#connect_requestObject

Raises:



169
170
171
172
173
174
175
176
177
# File 'lib/rubythemis.rb', line 169

def connect_request()
  connect_request_length = FFI::MemoryPointer.new(:uint)
  res=secure_session_generate_connect_request(@session, nil, connect_request_length)
  raise ThemisError, "Secure Session failed making connection request: #{res}" unless res == BUFFER_TOO_SMALL
  connect_request = FFI::MemoryPointer.new(:char, connect_request_length.read_uint)
  res=secure_session_generate_connect_request(@session, connect_request, connect_request_length)
  raise ThemisError, "Secure Session failed making connection request: #{res}" unless res == SUCCESS
  return connect_request.get_bytes(0, connect_request_length.read_uint);
end

#finalizeObject

Raises:



204
205
206
207
208
# File 'lib/rubythemis.rb', line 204

def finalize
  res=secure_session_destroy(@session)
        raise ThemisError, "Secure Session failed destroying" unless res == SUCCESS
  
end

#is_establishedObject



165
166
167
# File 'lib/rubythemis.rb', line 165

def is_established()
  return secure_session_is_established(@session)
end

#unwrap(message) ⇒ Object

Raises:



179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/rubythemis.rb', line 179

def unwrap(message)
  message_, message_length_=string_to_pointer_size(message)
  unwrapped_message_length = FFI::MemoryPointer.new(:uint)
  res=secure_session_unwrap(@session,  message_, message_length_, nil, unwrapped_message_length)
  raise ThemisError, "Secure Session failed decrypting: #{res}" unless res == BUFFER_TOO_SMALL || res == SUCCESS
  if res == SUCCESS
      return SUCCESS, ""
  end
  unwrapped_message = FFI::MemoryPointer.new(:char, unwrapped_message_length.read_uint)
  res=secure_session_unwrap(@session, message_, message_length_, unwrapped_message, unwrapped_message_length)
  raise ThemisError, "Secure Session failed decrypting: #{res}" unless res == SUCCESS || res == SEND_AS_IS 
  return res, unwrapped_message.get_bytes(0, unwrapped_message_length.read_uint);
end

#wrap(message) ⇒ Object

Raises:



193
194
195
196
197
198
199
200
201
202
# File 'lib/rubythemis.rb', line 193

def wrap(message)
  message_, message_length_=string_to_pointer_size(message)
  wrapped_message_length = FFI::MemoryPointer.new(:uint)
  res=secure_session_wrap(@session,  message_, message_length_, nil, wrapped_message_length)
  raise ThemisError, "Secure Session failed encrypting: #{res}" unless res == BUFFER_TOO_SMALL
  wrapped_message = FFI::MemoryPointer.new(:char, wrapped_message_length.read_uint)
  res=secure_session_wrap(@session, message_, message_length_, wrapped_message, wrapped_message_length)
  raise ThemisError, "Secure Session failed encrypting: #{res}" unless res == SUCCESS || res == SEND_AS_IS 
  return wrapped_message.get_bytes(0, wrapped_message_length.read_uint);
end