Sha256: 865d3aa2c7fdc451d9b4c0c715beb4dc1b8aa8ad7e0e9f06b48d6b73d27dedfa

Contents?: true

Size: 933 Bytes

Versions: 2

Compression:

Stored size: 933 Bytes

Contents

# frozen_string_literal: true

require "securerandom"

module Ed25519
  # Private key for producing digital signatures
  class SigningKey
    attr_reader :seed, :keypair, :verify_key

    # Generate a random Ed25519 signing key (i.e. private scalar)
    def self.generate
      new SecureRandom.random_bytes(Ed25519::KEY_SIZE)
    end

    # Create a new Ed25519::SigningKey from the given seed value
    #
    # @param seed [String] 32-byte seed value from which the key should be derived
    def initialize(seed)
      raise ArgumentError, "seed must be #{KEY_SIZE}-bytes long" unless seed.length == KEY_SIZE
      @seed = seed

      @keypair = Ed25519.provider.create_keypair(seed)
      @verify_key = VerifyKey.new(@keypair[32, 32])
    end

    def sign(message)
      Ed25519.provider.sign(@keypair, message)
    end

    def inspect
      to_s
    end

    def to_bytes
      seed
    end
    alias to_str to_bytes
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ed25519-1.0.0-jruby lib/ed25519/signing_key.rb
ed25519-1.0.0 lib/ed25519/signing_key.rb