File: eddsa.rb

package info (click to toggle)
ruby-openssl-signature-algorithm 1.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 200 kB
  • sloc: ruby: 268; sh: 4; makefile: 4
file content (48 lines) | stat: -rw-r--r-- 1,131 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# frozen_string_literal: true

begin
  gem "ed25519", ">= 1.0.0"
  require "ed25519"
rescue LoadError
  warn "OpenSSL::SignatureAlgorithm::EdDSA requires the ed25519 gem, version 1.0 or higher. "\
        "Please add it to your Gemfile: `gem \"ed25519\", \"~> 1.0\"`"
  raise
end

require "openssl/signature_algorithm/base"

module OpenSSL
  module SignatureAlgorithm
    class EdDSA < Base
      class SigningKey < ::Ed25519::SigningKey
        def verify_key
          VerifyKey.new(keypair[32, 32])
        end
      end

      class VerifyKey < ::Ed25519::VerifyKey
        def self.deserialize(key_bytes)
          new(key_bytes)
        end

        def serialize
          to_bytes
        end
      end

      def generate_signing_key
        @signing_key = SigningKey.generate
      end

      def sign(data)
        signing_key.sign(data)
      end

      def verify(signature, verification_data)
        verify_key.verify(signature, verification_data)
      rescue ::Ed25519::VerifyError
        raise(OpenSSL::SignatureAlgorithm::SignatureVerificationError, "Signature verification failed")
      end
    end
  end
end