Sha256: c05928457d794f04f442bdbcd5205f74d8b971a5890ffd2e8268bb4fc64ca65e

Contents?: true

Size: 927 Bytes

Versions: 3

Compression:

Stored size: 927 Bytes

Contents

module Ed448
  module X448
    module_function

    X448_PRIVATE_BYTES = 56
    X448_PUBLIC_BYTES = 56

    def derive_public_key(private_key)
      private_key = FFI::MemoryPointer.new(:uchar, X448_PRIVATE_BYTES).put_bytes(0, private_key)
      public_key = FFI::MemoryPointer.new(:uchar, X448_PUBLIC_BYTES)
      Ed448.goldilocks_x448_derive_public_key(public_key, private_key)
      public_key.read_string(X448_PUBLIC_BYTES)
    end

    def dh(public_key, private_key)
      private_key = FFI::MemoryPointer.new(:uchar, X448_PRIVATE_BYTES).put_bytes(0, private_key)
      public_key = FFI::MemoryPointer.new(:uchar, X448_PUBLIC_BYTES).put_bytes(0, public_key)
      shared_key = FFI::MemoryPointer.new(:uchar, X448_PUBLIC_BYTES)
      result = Ed448.goldilocks_x448(shared_key, public_key, private_key)
      raise 'goldilocks_x448 failed.' if result != -1

      shared_key.read_bytes(X448_PUBLIC_BYTES)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ed448-0.1.2 lib/ed448/x448.rb
ed448-0.1.1 lib/ed448/x448.rb
ed448-0.1.0 lib/ed448/x448.rb