class CryptoconditionsRuby::Types::Ed25519Fulfillment

Constants

FEATURE_BITMASK
FULFILLMENT_LENGTH
PUBKEY_LENGTH
SIGNATURE_LENGTH
TYPE_ID

Attributes

public_key[RW]
signature[RW]

Public Class Methods

new(public_key = nil) click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 12
def initialize(public_key = nil)
  if public_key
    public_key = Crypto::Ed25519VerifyingKey.new(public_key) if public_key.is_a?(String)
    raise TypeError unless public_key.is_a?(Crypto::Ed25519VerifyingKey)
  end
  @public_key = public_key
  @signature = nil
end

Public Instance Methods

calculate_max_fulfillment_length() click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 53
def calculate_max_fulfillment_length
  Ed25519Fulfillment::FULFILLMENT_LENGTH
end
generate_hash() click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 34
def generate_hash
  raise StandardError, 'Requires a public publicKey' unless public_key
  public_key.to_s
end
parse_dict(data) click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 67
def parse_dict(data)
  self.public_key = Crypto::Ed25519VerifyingKey.new(data['public_key'])
  self.signature = (Utils::Base58.decode(data['signature']) if data['signature'])
end
parse_payload(reader, *_args) click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 39
def parse_payload(reader, *_args)
  self.public_key = Crypto::Ed25519VerifyingKey.new(
    Utils::Base58.encode(reader.read_octet_string(Ed25519Fulfillment::PUBKEY_LENGTH))
  )
  self.signature = reader.read_octet_string(Ed25519Fulfillment::SIGNATURE_LENGTH)
end
sign(message, private_key) click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 25
def sign(message, private_key)
  sk = private_key
  vk = sk.get_verifying_key

  self.public_key = vk

  self.signature = sk.sign(message, 'bytes')
end
to_dict() click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 57
def to_dict
  {
    'type' => 'fulfillment',
    'type_id' => TYPE_ID,
    'bitmask' => bitmask,
    'public_key' => Utils::Base58.encode(public_key.to_s),
    'signature' => (Utils::Base58.encode(signature) if signature)
  }
end
validate(message: nil, **_kwargs) click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 72
def validate(message: nil, **_kwargs)
  return false unless message && signature

  public_key.verify(signature, message, 'bytes')
end
write_common_header(writer) click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 21
def write_common_header(writer)
  writer.write_var_octet_string(public_key)
end
write_payload(writer) click to toggle source
# File lib/cryptoconditions_ruby/types/ed25519_fulfillment.rb, line 46
def write_payload(writer)
  writer.tap do |w|
    w.write_octet_string(public_key.to_s, Ed25519Fulfillment::PUBKEY_LENGTH)
    w.write_octet_string(signature, Ed25519Fulfillment::SIGNATURE_LENGTH)
  end
end