Sha256: 949097341f800aa7c7d155417919a1c2cfe75f338326e7ab69dd7ccbb4e3763d

Contents?: true

Size: 1.56 KB

Versions: 4

Compression:

Stored size: 1.56 KB

Contents

module SolanaRuby
  class Keypair
    require 'rbnacl'
    require 'base58'

    # Generates a new Ed25519 keypair
    def self.generate
      signing_key = RbNaCl::Signatures::Ed25519::SigningKey.generate
      public_key_bytes = signing_key.verify_key.to_bytes # Binary format for public key
      private_key_bytes = signing_key.to_bytes
      private_key_hex = private_key_bytes.unpack1('H*') # Hex format for private key

      # Convert public key binary to Base58 for readability and compatibility
      {
        public_key: Base58.binary_to_base58(public_key_bytes, :bitcoin),
        private_key: private_key_hex,
        full_private_key: Base58.binary_to_base58((private_key_bytes + public_key_bytes), :bitcoin)
      }
    end

    # Restores a keypair from a private key in hex format
    def self.from_private_key(private_key_hex)
      raise ArgumentError, "Invalid private key length" unless private_key_hex.size == 64

      # Convert hex private key to binary format for signing key
      private_key_bytes = [private_key_hex].pack('H*')

      # Initialize signing key
      signing_key = RbNaCl::Signatures::Ed25519::SigningKey.new(private_key_bytes)

      # Extract public key in binary format
      public_key_bytes = signing_key.verify_key.to_bytes

      # Return public key in Base58 format and private key in hex format
      {
        public_key: Base58.binary_to_base58(public_key_bytes, :bitcoin),
        private_key: private_key_hex,
        full_private_key: Base58.binary_to_base58((private_key_bytes + public_key_bytes), :bitcoin)
      }
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
solana-ruby-web3js-2.0.1 lib/solana_ruby/keypair.rb
solana-ruby-web3js-2.0.0beta2 lib/solana_ruby/keypair.rb
solana-ruby-web3js-2.0.0beta1 lib/solana_ruby/keypair.rb
solana-ruby-web3js-2.0.0 lib/solana_ruby/keypair.rb