Sha256: 9ff25835fc44540668517cfa6d3bc8e931e883559e47c08b0463b494f15ff206

Contents?: true

Size: 1.44 KB

Versions: 5

Compression:

Stored size: 1.44 KB

Contents

module Exonum
  class MessageT
    attr_accessor :protocol_version
    attr_accessor :message_id
    attr_accessor :service_id
    attr_accessor :head
    attr_accessor :body
    attr_accessor :signature

    def initialize protocol_version, message_id, service_id, body
      self.protocol_version = protocol_version
      self.message_id = message_id
      self.service_id = service_id
      self.head = StructT.new([
        { name: 'network_id', type: UInt8T },
        { name: 'protocol_version', type: UInt8T },
        { name: 'message_id', type: UInt16T },
        { name: 'service_id', type: UInt16T },
        { name: 'payload', type: UInt32T }
      ])
      self.body = body
    end

    def serialize data
      buffer = SparseArray.new
      head_data = {
        network_id: 0,
        protocol_version: self.protocol_version,
        message_id: self.message_id,
        service_id: self.service_id,
        payload: 0 # placeholder, real value will be inserted later
      }
      head.serialize head_data, buffer, 0
      body.serialize data, buffer, head.size, 0, true
      UInt32T.serialize buffer.length + SignatureT.size, buffer, 6
      buffer.serialize
    end

    def sign secret, data
      raise "Expecting 64 bytes key in hex" unless secret.is_a?(String) and secret.length == 128
      key = Ed25519::SigningKey.new [secret[0..63]].pack 'H*'
      buffer = serialize(data).pack('c*')
      key.sign(buffer).unpack('H*').first
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
exonum-client-ruby-0.1.0 lib/exonum/types/message.rb
exonum-client-ruby-0.0.5 lib/exonum/types/message.rb
exonum-client-ruby-0.0.4 lib/exonum/types/message.rb
exonum-client-ruby-0.0.3 lib/exonum/types/message.rb
exonum-client-ruby-0.0.2 lib/exonum/types/message.rb