ed-precompiled_ed25519 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGES.md +88 -0
- data/LICENSE +22 -0
- data/README.md +181 -0
- data/ed25519.png +0 -0
- data/ext/ed25519_jruby/LICENSE.txt +123 -0
- data/ext/ed25519_jruby/README.md +77 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAEngine.java +491 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAKey.java +31 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPrivateKey.java +338 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPublicKey.java +275 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSASecurityProvider.java +59 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyFactory.java +75 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyPairGenerator.java +97 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/Utils.java +103 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Constants.java +23 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Curve.java +100 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Encoding.java +54 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Field.java +99 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/FieldElement.java +76 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/GroupElement.java +1034 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ScalarOps.java +34 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerFieldElement.java +131 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerLittleEndianEncoding.java +102 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerScalarOps.java +37 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/package.html +6 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519FieldElement.java +988 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519LittleEndianEncoding.java +256 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519ScalarOps.java +693 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAGenParameterSpec.java +32 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveSpec.java +35 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveTable.java +71 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java +97 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java +133 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java +61 -0
- data/ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java +95 -0
- data/ext/ed25519_ref10/api.h +4 -0
- data/ext/ed25519_ref10/base.h +1344 -0
- data/ext/ed25519_ref10/base2.h +40 -0
- data/ext/ed25519_ref10/d.h +1 -0
- data/ext/ed25519_ref10/d2.h +1 -0
- data/ext/ed25519_ref10/ed25519_ref10.c +99 -0
- data/ext/ed25519_ref10/ed25519_ref10.h +33 -0
- data/ext/ed25519_ref10/extconf.rb +7 -0
- data/ext/ed25519_ref10/fe.c +1085 -0
- data/ext/ed25519_ref10/fe.h +56 -0
- data/ext/ed25519_ref10/ge.c +407 -0
- data/ext/ed25519_ref10/ge.h +95 -0
- data/ext/ed25519_ref10/ge_add.h +97 -0
- data/ext/ed25519_ref10/ge_madd.h +88 -0
- data/ext/ed25519_ref10/ge_msub.h +88 -0
- data/ext/ed25519_ref10/ge_p2_dbl.h +73 -0
- data/ext/ed25519_ref10/ge_sub.h +97 -0
- data/ext/ed25519_ref10/keypair.c +22 -0
- data/ext/ed25519_ref10/open.c +47 -0
- data/ext/ed25519_ref10/pow22523.h +160 -0
- data/ext/ed25519_ref10/pow225521.h +160 -0
- data/ext/ed25519_ref10/sc.h +17 -0
- data/ext/ed25519_ref10/sc_muladd.c +366 -0
- data/ext/ed25519_ref10/sc_reduce.c +272 -0
- data/ext/ed25519_ref10/sha512.c +304 -0
- data/ext/ed25519_ref10/sha512.h +8 -0
- data/ext/ed25519_ref10/sign.c +41 -0
- data/ext/ed25519_ref10/sqrtm1.h +1 -0
- data/ext/ed25519_ref10/verify.c +40 -0
- data/lib/ed25519/signing_key.rb +60 -0
- data/lib/ed25519/verify_key.rb +45 -0
- data/lib/ed25519/version.rb +5 -0
- data/lib/ed25519.rb +77 -0
- metadata +126 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "securerandom"
|
|
4
|
+
|
|
5
|
+
module Ed25519
|
|
6
|
+
# Private key for producing digital signatures
|
|
7
|
+
class SigningKey
|
|
8
|
+
attr_reader :seed, :keypair, :verify_key
|
|
9
|
+
|
|
10
|
+
# Generate a random Ed25519 signing key (i.e. private scalar)
|
|
11
|
+
def self.generate
|
|
12
|
+
new SecureRandom.random_bytes(Ed25519::KEY_SIZE)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Create a SigningKey from a 64-byte Ed25519 keypair (i.e. public + private)
|
|
16
|
+
#
|
|
17
|
+
# @param keypair [String] 64-byte keypair value containing both seed + public key
|
|
18
|
+
def self.from_keypair(keypair)
|
|
19
|
+
raise TypeError, "expected String, got #{keypair.class}" unless keypair.is_a?(String)
|
|
20
|
+
raise ArgumentError, "expected 64-byte String, got #{keypair.bytesize}" unless keypair.bytesize == 64
|
|
21
|
+
|
|
22
|
+
new(keypair[0, KEY_SIZE]).tap do |key|
|
|
23
|
+
raise ArgumentError, "corrupt keypair" unless keypair[KEY_SIZE, KEY_SIZE] == key.verify_key.to_bytes
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Create a new Ed25519::SigningKey from the given seed value
|
|
28
|
+
#
|
|
29
|
+
# @param seed [String] 32-byte seed value from which the key should be derived
|
|
30
|
+
def initialize(seed)
|
|
31
|
+
Ed25519.validate_key_bytes(seed)
|
|
32
|
+
|
|
33
|
+
@seed = seed
|
|
34
|
+
@keypair = Ed25519.provider.create_keypair(seed)
|
|
35
|
+
@verify_key = VerifyKey.new(@keypair[32, 32])
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Sign the given message, returning an Ed25519 signature
|
|
39
|
+
#
|
|
40
|
+
# @param message [String] message to be signed
|
|
41
|
+
#
|
|
42
|
+
# @return [String] 64-byte Ed25519 signature
|
|
43
|
+
def sign(message)
|
|
44
|
+
Ed25519.provider.sign(@keypair, message)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# String inspection that does not leak secret values
|
|
48
|
+
def inspect
|
|
49
|
+
to_s
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Return a bytestring representation of this signing key
|
|
53
|
+
#
|
|
54
|
+
# @return [String] signing key converted to a bytestring
|
|
55
|
+
def to_bytes
|
|
56
|
+
seed
|
|
57
|
+
end
|
|
58
|
+
alias to_str to_bytes
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ed25519
|
|
4
|
+
# Public key for verifying digital signatures
|
|
5
|
+
class VerifyKey
|
|
6
|
+
# Create a Ed25519::VerifyKey from its serialized Twisted Edwards representation
|
|
7
|
+
#
|
|
8
|
+
# @param key [String] 32-byte string representing a serialized public key
|
|
9
|
+
def initialize(key)
|
|
10
|
+
Ed25519.validate_key_bytes(key)
|
|
11
|
+
@key_bytes = key
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Verify an Ed25519 signature against the message
|
|
15
|
+
#
|
|
16
|
+
# @param signature [String] 64-byte string containing an Ed25519 signature
|
|
17
|
+
# @param message [String] string containing message to be verified
|
|
18
|
+
#
|
|
19
|
+
# @raise Ed25519::VerifyError signature verification failed
|
|
20
|
+
#
|
|
21
|
+
# @return [true] message verified successfully
|
|
22
|
+
def verify(signature, message)
|
|
23
|
+
if signature.length != SIGNATURE_SIZE
|
|
24
|
+
raise ArgumentError, "expected #{SIGNATURE_SIZE} byte signature, got #{signature.length}"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
return true if Ed25519.provider.verify(@key_bytes, signature, message)
|
|
28
|
+
|
|
29
|
+
raise VerifyError, "signature verification failed!"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Return a compressed twisted Edwards coordinate representing the public key
|
|
33
|
+
#
|
|
34
|
+
# @return [String] bytestring serialization of this public key
|
|
35
|
+
def to_bytes
|
|
36
|
+
@key_bytes
|
|
37
|
+
end
|
|
38
|
+
alias to_str to_bytes
|
|
39
|
+
|
|
40
|
+
# Show hex representation of serialized coordinate in string inspection
|
|
41
|
+
def inspect
|
|
42
|
+
"#<#{self.class}:#{@key_bytes.unpack1('H*')}>"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
data/lib/ed25519.rb
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "ed25519/version"
|
|
4
|
+
require "ed25519/signing_key"
|
|
5
|
+
require "ed25519/verify_key"
|
|
6
|
+
|
|
7
|
+
# The Ed25519 digital signatre algorithm
|
|
8
|
+
# rubocop:disable Layout/LineLength
|
|
9
|
+
module Ed25519
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
# Size of an Ed25519 key (public or private) in bytes
|
|
13
|
+
KEY_SIZE = 32
|
|
14
|
+
|
|
15
|
+
# Size of an Ed25519 signature in bytes
|
|
16
|
+
SIGNATURE_SIZE = 64
|
|
17
|
+
|
|
18
|
+
# Raised when a signature fails to verify
|
|
19
|
+
VerifyError = Class.new(StandardError)
|
|
20
|
+
|
|
21
|
+
# Raised when the built-in self-test fails
|
|
22
|
+
SelfTestFailure = Class.new(StandardError)
|
|
23
|
+
|
|
24
|
+
class << self
|
|
25
|
+
# Obtain the backend provider module used to perform signatures
|
|
26
|
+
attr_accessor :provider
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Select the Ed25519::Provider to use based on the current environment
|
|
30
|
+
if defined? JRUBY_VERSION
|
|
31
|
+
require "jruby"
|
|
32
|
+
require "ed25519_jruby"
|
|
33
|
+
self.provider = org.cryptorb.Ed25519Provider.createEd25519Module(JRuby.runtime)
|
|
34
|
+
else
|
|
35
|
+
ruby_version = /(\d+\.\d+)/.match(::RUBY_VERSION)
|
|
36
|
+
begin
|
|
37
|
+
require "#{ruby_version}/ed25519_ref10"
|
|
38
|
+
rescue LoadError
|
|
39
|
+
require 'ed25519_ref10'
|
|
40
|
+
end
|
|
41
|
+
self.provider = Ed25519::Provider::Ref10
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Ensure a serialized key meets the requirements
|
|
45
|
+
def validate_key_bytes(key_bytes)
|
|
46
|
+
raise TypeError, "expected String, got #{key_bytes.class}" unless key_bytes.is_a?(String)
|
|
47
|
+
return true if key_bytes.bytesize == KEY_SIZE
|
|
48
|
+
|
|
49
|
+
raise ArgumentError, "expected #{KEY_SIZE}-byte String, got #{key_bytes.bytesize}"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Perform a self-test to ensure the selected provider is working
|
|
53
|
+
def self_test
|
|
54
|
+
signature_key = Ed25519::SigningKey.new("A" * 32)
|
|
55
|
+
raise SelfTestFailure, "failed to generate verify key correctly" unless signature_key.verify_key.to_bytes.unpack1("H*") == "db995fe25169d141cab9bbba92baa01f9f2e1ece7df4cb2ac05190f37fcc1f9d"
|
|
56
|
+
|
|
57
|
+
message = "crypto libraries should self-test on boot"
|
|
58
|
+
signature = signature_key.sign(message)
|
|
59
|
+
raise SelfTestFailure, "failed to generate correct signature" unless signature.unpack1("H*") == "c62c12a3a6cbfa04800d4be81468ef8aecd152a6a26a81d91257baecef13ba209531fe905a843e833c8b71cee04400fa2af3a29fef1152ece470421848758d0a"
|
|
60
|
+
|
|
61
|
+
verify_key = signature_key.verify_key
|
|
62
|
+
raise SelfTestFailure, "failed to verify a valid signature" unless verify_key.verify(signature, message)
|
|
63
|
+
|
|
64
|
+
bad_signature = "#{signature[0...63]}X"
|
|
65
|
+
ex = nil
|
|
66
|
+
begin
|
|
67
|
+
verify_key.verify(bad_signature, message)
|
|
68
|
+
rescue Ed25519::VerifyError => ex
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
raise SelfTestFailure, "failed to detect an invalid signature" unless ex.is_a?(Ed25519::VerifyError)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
# rubocop:enable Layout/LineLength
|
|
75
|
+
|
|
76
|
+
# Automatically run self-test when library loads
|
|
77
|
+
Ed25519.self_test
|
metadata
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: ed-precompiled_ed25519
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.4.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Tony Arcieri
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: bundler
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
description: A Ruby binding to the Ed25519 elliptic curve public-key signature system
|
|
27
|
+
described in RFC 8032.
|
|
28
|
+
email:
|
|
29
|
+
- tony.arcieri@gmail.com
|
|
30
|
+
executables: []
|
|
31
|
+
extensions:
|
|
32
|
+
- ext/ed25519_ref10/extconf.rb
|
|
33
|
+
extra_rdoc_files:
|
|
34
|
+
- README.md
|
|
35
|
+
- ed25519.png
|
|
36
|
+
files:
|
|
37
|
+
- CHANGES.md
|
|
38
|
+
- LICENSE
|
|
39
|
+
- README.md
|
|
40
|
+
- ed25519.png
|
|
41
|
+
- ext/ed25519_jruby/LICENSE.txt
|
|
42
|
+
- ext/ed25519_jruby/README.md
|
|
43
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAEngine.java
|
|
44
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAKey.java
|
|
45
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPrivateKey.java
|
|
46
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPublicKey.java
|
|
47
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSASecurityProvider.java
|
|
48
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyFactory.java
|
|
49
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyPairGenerator.java
|
|
50
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/Utils.java
|
|
51
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Constants.java
|
|
52
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Curve.java
|
|
53
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Encoding.java
|
|
54
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Field.java
|
|
55
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/FieldElement.java
|
|
56
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/GroupElement.java
|
|
57
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ScalarOps.java
|
|
58
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerFieldElement.java
|
|
59
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerLittleEndianEncoding.java
|
|
60
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerScalarOps.java
|
|
61
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/package.html
|
|
62
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519FieldElement.java
|
|
63
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519LittleEndianEncoding.java
|
|
64
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519ScalarOps.java
|
|
65
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAGenParameterSpec.java
|
|
66
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveSpec.java
|
|
67
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveTable.java
|
|
68
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java
|
|
69
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java
|
|
70
|
+
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java
|
|
71
|
+
- ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java
|
|
72
|
+
- ext/ed25519_ref10/api.h
|
|
73
|
+
- ext/ed25519_ref10/base.h
|
|
74
|
+
- ext/ed25519_ref10/base2.h
|
|
75
|
+
- ext/ed25519_ref10/d.h
|
|
76
|
+
- ext/ed25519_ref10/d2.h
|
|
77
|
+
- ext/ed25519_ref10/ed25519_ref10.c
|
|
78
|
+
- ext/ed25519_ref10/ed25519_ref10.h
|
|
79
|
+
- ext/ed25519_ref10/extconf.rb
|
|
80
|
+
- ext/ed25519_ref10/fe.c
|
|
81
|
+
- ext/ed25519_ref10/fe.h
|
|
82
|
+
- ext/ed25519_ref10/ge.c
|
|
83
|
+
- ext/ed25519_ref10/ge.h
|
|
84
|
+
- ext/ed25519_ref10/ge_add.h
|
|
85
|
+
- ext/ed25519_ref10/ge_madd.h
|
|
86
|
+
- ext/ed25519_ref10/ge_msub.h
|
|
87
|
+
- ext/ed25519_ref10/ge_p2_dbl.h
|
|
88
|
+
- ext/ed25519_ref10/ge_sub.h
|
|
89
|
+
- ext/ed25519_ref10/keypair.c
|
|
90
|
+
- ext/ed25519_ref10/open.c
|
|
91
|
+
- ext/ed25519_ref10/pow22523.h
|
|
92
|
+
- ext/ed25519_ref10/pow225521.h
|
|
93
|
+
- ext/ed25519_ref10/sc.h
|
|
94
|
+
- ext/ed25519_ref10/sc_muladd.c
|
|
95
|
+
- ext/ed25519_ref10/sc_reduce.c
|
|
96
|
+
- ext/ed25519_ref10/sha512.c
|
|
97
|
+
- ext/ed25519_ref10/sha512.h
|
|
98
|
+
- ext/ed25519_ref10/sign.c
|
|
99
|
+
- ext/ed25519_ref10/sqrtm1.h
|
|
100
|
+
- ext/ed25519_ref10/verify.c
|
|
101
|
+
- lib/ed25519.rb
|
|
102
|
+
- lib/ed25519/signing_key.rb
|
|
103
|
+
- lib/ed25519/verify_key.rb
|
|
104
|
+
- lib/ed25519/version.rb
|
|
105
|
+
homepage: https://github.com/RubyCrypto/ed25519
|
|
106
|
+
licenses:
|
|
107
|
+
- MIT
|
|
108
|
+
metadata: {}
|
|
109
|
+
rdoc_options: []
|
|
110
|
+
require_paths:
|
|
111
|
+
- lib
|
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - ">="
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '3.0'
|
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - ">="
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: '0'
|
|
122
|
+
requirements: []
|
|
123
|
+
rubygems_version: 3.6.7
|
|
124
|
+
specification_version: 4
|
|
125
|
+
summary: An efficient digital signature library providing the Ed25519 algorithm
|
|
126
|
+
test_files: []
|