Sha256: 69e260772c75c6a8610719cf7d0af1d08045bfaada7e997627d78e67471e0a4a

Contents?: true

Size: 1.23 KB

Versions: 6

Compression:

Stored size: 1.23 KB

Contents

module Stellar
  class SignerKey

    PREIMAGE_LENGTH = 32

    def self.ed25519(keypair)
      raise ArgumentError, "Bad keypair" unless keypair.is_a?(KeyPair)
      new(:signer_key_type_ed25519, keypair.raw_public_key)
    end


    def self.preauthorized_transaction(tx)
      new(:signer_key_type_pre_auth_tx, tx.hash)
    end


    def self.hash_x(preimage)
      raise ArgumentError, "Must be string" unless preimage.is_a?(String) 
      raise ArgumentError, "Must be 32 bytes" unless preimage.bytesize == PREIMAGE_LENGTH
      
      hash_x = Digest::SHA256.digest(preimage)
      new(:signer_key_type_hash_x, hash_x)
    end

    def to_s
      case switch
      when SignerKeyType.signer_key_type_ed25519
        address = Stellar::Convert.pk_to_address(self)
        "ed25519: #{address}"
      when SignerKeyType.signer_key_type_pre_auth_tx
        tx = Stellar::Convert.to_hex(pre_auth_tx!)
        "pre_auth_tx: #{tx}"
      when SignerKeyType.signer_key_type_hash_x
        hx = Stellar::Convert.to_hex(hash_x!)
        "hash_x: #{hx}"
      end
    end

    def inspect
      label = switch.to_s
      "#<Stellar::SignerKey #{to_s}>"
    end

    def signature_hint
      # take last 4 bytes
      value.to_xdr.slice(-4, 4)
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
stellar-base-0.22.0 lib/stellar/signer_key.rb
stellar-base-0.21.0 lib/stellar/signer_key.rb
stellar-base-0.20.0 lib/stellar/signer_key.rb
stellar-base-0.19.0 lib/stellar/signer_key.rb
stellar-base-0.18.0 lib/stellar/signer_key.rb
stellar-base-0.17.0 lib/stellar/signer_key.rb