Sha256: 2588e9e82e7ba5768a20788b14307bb5101b1756d4a1dff99321fdebcd92cfaa

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require "java"
require "ed25519_java"

module Ed25519
  module Provider
    # Binding between the JRuby extension and the Ed25519::Provider API
    #
    # TODO: implement the Ed25519::Provider API natively in the Java extension
    module JRuby
      module_function

      def create_keypair(seed)
        raise ArgumentError, "seed must be #{KEY_SIZE}-bytes long" unless seed.length == Ed25519::KEY_SIZE

        verify_key = org.cryptosphere.ed25519.publickey(seed.to_java_bytes)
        verify_key = String.from_java_bytes(verify_key)
        seed + verify_key
      end

      def sign(signing_key, message)
        verify_key  = signing_key[32, 32].to_java_bytes
        signing_key = signing_key[0, 32].to_java_bytes

        signature = org.cryptosphere.ed25519.signature(message.to_java_bytes, signing_key, verify_key)
        String.from_java_bytes(signature)
      end

      def verify(verify_key, signature, message)
        org.cryptosphere.ed25519.checkvalid(
          signature.to_java_bytes,
          message.to_java_bytes,
          verify_key.to_java_bytes
        )
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

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