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:



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

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_create error" unless @session
end

Instance Method Details

#connect_requestObject

Raises:



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

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_generate_connect_request (length determination) error: #{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_generate_connect_request error: #{res}" unless res == SUCCESS
	return connect_request.get_bytes(0, connect_request_length.read_uint);
end

#finalizeObject

Raises:



202
203
204
205
206
# File 'lib/rubythemis.rb', line 202

def finalize
	res=secure_session_destroy(@session)
        raise ThemisError, "secure_session_destroy error" unless res == SUCCESS
	
end

#is_establishedObject



163
164
165
# File 'lib/rubythemis.rb', line 163

def is_established()
	return secure_session_is_established(@session)
end

#unwrap(message) ⇒ Object

Raises:



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

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_unwrap (length determination) error: #{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_unwrap error: #{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:



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

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_wrap (length determination) error: #{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_wrap error: #{res}" unless res == SUCCESS || res == SEND_AS_IS 
	return wrapped_message.get_bytes(0, wrapped_message_length.read_uint);
end