class SimpleSecrets::Packet
Public Class Methods
new(master_key)
click to toggle source
# File lib/simple_secrets/packet.rb, line 7 def initialize master_key raise ArgumentError unless master_key @master_key = hex_to_bin master_key @identity = Primitives.identify @master_key end
Public Instance Methods
authenticate(data, master_key, identity)
click to toggle source
# File lib/simple_secrets/packet.rb, line 54 def authenticate data, master_key, identity hmac_key = Primitives.derive_sender_hmac master_key auth = "#{identity}#{data}" mac = Primitives.mac auth, hmac_key packet = "#{auth}#{mac}" Primitives.zero hmac_key, mac packet end
body_to_data(body)
click to toggle source
# File lib/simple_secrets/packet.rb, line 24 def body_to_data body nonce = body[0...16] bindata = body[16..-1] data = Primitives.deserialize bindata Primitives.zero nonce, bindata data end
build_body(data)
click to toggle source
# File lib/simple_secrets/packet.rb, line 14 def build_body data nonce = Primitives.nonce bindata = Primitives.serialize data body = "#{nonce}#{bindata}" Primitives.zero nonce, bindata body end
decrypt_body(cipher_data, master_key)
click to toggle source
# File lib/simple_secrets/packet.rb, line 43 def decrypt_body cipher_data, master_key key = Primitives.derive_sender_key master_key iv = cipher_data[0...16] encrypted = cipher_data[16..-1] body = Primitives.decrypt encrypted, key, iv Primitives.zero key, iv, encrypted body end
encrypt_body(body, master_key)
click to toggle source
# File lib/simple_secrets/packet.rb, line 34 def encrypt_body body, master_key key = Primitives.derive_sender_key master_key cipher_data = Primitives.encrypt body, key Primitives.zero key cipher_data end
pack(data)
click to toggle source
# File lib/simple_secrets/packet.rb, line 79 def pack data body = build_body data encrypted = encrypt_body body, @master_key packet = authenticate encrypted, @master_key, @identity websafe = Primitives.stringify packet Primitives.zero body, encrypted, packet websafe end
unpack(websafe_data)
click to toggle source
# File lib/simple_secrets/packet.rb, line 89 def unpack websafe_data packet = Primitives.binify websafe_data cipher_data = verify packet, @master_key, @identity Primitives.zero packet return nil unless cipher_data body = decrypt_body cipher_data, @master_key data = body_to_data body Primitives.zero body, cipher_data data end
verify(packet, master_key, identity)
click to toggle source
# File lib/simple_secrets/packet.rb, line 65 def verify packet, master_key, identity packet_id = packet[0...6] return nil unless Primitives.compare packet_id, identity data = packet[0...-32] packet_mac = packet[-32..-1] hmac_key = Primitives.derive_sender_hmac master_key mac = Primitives.mac data, hmac_key return nil unless Primitives.compare packet_mac, mac Primitives.zero hmac_key, mac packet[6...-32] end
Private Instance Methods
hex_to_bin(string)
click to toggle source
# File lib/simple_secrets/packet.rb, line 103 def hex_to_bin string [string].pack('H*') end