ed-precompiled_ed25519 1.4.0-arm64-darwin

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.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES.md +88 -0
  3. data/LICENSE +22 -0
  4. data/README.md +181 -0
  5. data/ed25519.png +0 -0
  6. data/ext/ed25519_jruby/LICENSE.txt +123 -0
  7. data/ext/ed25519_jruby/README.md +77 -0
  8. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAEngine.java +491 -0
  9. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAKey.java +31 -0
  10. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPrivateKey.java +338 -0
  11. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPublicKey.java +275 -0
  12. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSASecurityProvider.java +59 -0
  13. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyFactory.java +75 -0
  14. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyPairGenerator.java +97 -0
  15. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/Utils.java +103 -0
  16. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Constants.java +23 -0
  17. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Curve.java +100 -0
  18. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Encoding.java +54 -0
  19. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Field.java +99 -0
  20. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/FieldElement.java +76 -0
  21. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/GroupElement.java +1034 -0
  22. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ScalarOps.java +34 -0
  23. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerFieldElement.java +131 -0
  24. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerLittleEndianEncoding.java +102 -0
  25. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerScalarOps.java +37 -0
  26. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/package.html +6 -0
  27. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519FieldElement.java +988 -0
  28. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519LittleEndianEncoding.java +256 -0
  29. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519ScalarOps.java +693 -0
  30. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAGenParameterSpec.java +32 -0
  31. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveSpec.java +35 -0
  32. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveTable.java +71 -0
  33. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java +97 -0
  34. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java +133 -0
  35. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java +61 -0
  36. data/ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java +95 -0
  37. data/ext/ed25519_ref10/api.h +4 -0
  38. data/ext/ed25519_ref10/base.h +1344 -0
  39. data/ext/ed25519_ref10/base2.h +40 -0
  40. data/ext/ed25519_ref10/d.h +1 -0
  41. data/ext/ed25519_ref10/d2.h +1 -0
  42. data/ext/ed25519_ref10/ed25519_ref10.c +99 -0
  43. data/ext/ed25519_ref10/ed25519_ref10.h +33 -0
  44. data/ext/ed25519_ref10/extconf.rb +7 -0
  45. data/ext/ed25519_ref10/fe.c +1085 -0
  46. data/ext/ed25519_ref10/fe.h +56 -0
  47. data/ext/ed25519_ref10/ge.c +407 -0
  48. data/ext/ed25519_ref10/ge.h +95 -0
  49. data/ext/ed25519_ref10/ge_add.h +97 -0
  50. data/ext/ed25519_ref10/ge_madd.h +88 -0
  51. data/ext/ed25519_ref10/ge_msub.h +88 -0
  52. data/ext/ed25519_ref10/ge_p2_dbl.h +73 -0
  53. data/ext/ed25519_ref10/ge_sub.h +97 -0
  54. data/ext/ed25519_ref10/keypair.c +22 -0
  55. data/ext/ed25519_ref10/open.c +47 -0
  56. data/ext/ed25519_ref10/pow22523.h +160 -0
  57. data/ext/ed25519_ref10/pow225521.h +160 -0
  58. data/ext/ed25519_ref10/sc.h +17 -0
  59. data/ext/ed25519_ref10/sc_muladd.c +366 -0
  60. data/ext/ed25519_ref10/sc_reduce.c +272 -0
  61. data/ext/ed25519_ref10/sha512.c +304 -0
  62. data/ext/ed25519_ref10/sha512.h +8 -0
  63. data/ext/ed25519_ref10/sign.c +41 -0
  64. data/ext/ed25519_ref10/sqrtm1.h +1 -0
  65. data/ext/ed25519_ref10/verify.c +40 -0
  66. data/lib/3.0/ed25519_ref10.bundle +0 -0
  67. data/lib/3.1/ed25519_ref10.bundle +0 -0
  68. data/lib/3.2/ed25519_ref10.bundle +0 -0
  69. data/lib/3.3/ed25519_ref10.bundle +0 -0
  70. data/lib/3.4/ed25519_ref10.bundle +0 -0
  71. data/lib/ed25519/signing_key.rb +60 -0
  72. data/lib/ed25519/verify_key.rb +45 -0
  73. data/lib/ed25519/version.rb +5 -0
  74. data/lib/ed25519.rb +77 -0
  75. metadata +133 -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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ed25519
4
+ VERSION = "1.4.0"
5
+ 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,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ed-precompiled_ed25519
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.4.0
5
+ platform: arm64-darwin
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
+ extra_rdoc_files:
33
+ - README.md
34
+ - ed25519.png
35
+ files:
36
+ - CHANGES.md
37
+ - LICENSE
38
+ - README.md
39
+ - ed25519.png
40
+ - ext/ed25519_jruby/LICENSE.txt
41
+ - ext/ed25519_jruby/README.md
42
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAEngine.java
43
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAKey.java
44
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPrivateKey.java
45
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPublicKey.java
46
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSASecurityProvider.java
47
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyFactory.java
48
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyPairGenerator.java
49
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/Utils.java
50
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Constants.java
51
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Curve.java
52
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Encoding.java
53
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Field.java
54
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/FieldElement.java
55
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/GroupElement.java
56
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ScalarOps.java
57
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerFieldElement.java
58
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerLittleEndianEncoding.java
59
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerScalarOps.java
60
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/package.html
61
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519FieldElement.java
62
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519LittleEndianEncoding.java
63
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519ScalarOps.java
64
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAGenParameterSpec.java
65
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveSpec.java
66
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveTable.java
67
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java
68
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java
69
+ - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java
70
+ - ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java
71
+ - ext/ed25519_ref10/api.h
72
+ - ext/ed25519_ref10/base.h
73
+ - ext/ed25519_ref10/base2.h
74
+ - ext/ed25519_ref10/d.h
75
+ - ext/ed25519_ref10/d2.h
76
+ - ext/ed25519_ref10/ed25519_ref10.c
77
+ - ext/ed25519_ref10/ed25519_ref10.h
78
+ - ext/ed25519_ref10/extconf.rb
79
+ - ext/ed25519_ref10/fe.c
80
+ - ext/ed25519_ref10/fe.h
81
+ - ext/ed25519_ref10/ge.c
82
+ - ext/ed25519_ref10/ge.h
83
+ - ext/ed25519_ref10/ge_add.h
84
+ - ext/ed25519_ref10/ge_madd.h
85
+ - ext/ed25519_ref10/ge_msub.h
86
+ - ext/ed25519_ref10/ge_p2_dbl.h
87
+ - ext/ed25519_ref10/ge_sub.h
88
+ - ext/ed25519_ref10/keypair.c
89
+ - ext/ed25519_ref10/open.c
90
+ - ext/ed25519_ref10/pow22523.h
91
+ - ext/ed25519_ref10/pow225521.h
92
+ - ext/ed25519_ref10/sc.h
93
+ - ext/ed25519_ref10/sc_muladd.c
94
+ - ext/ed25519_ref10/sc_reduce.c
95
+ - ext/ed25519_ref10/sha512.c
96
+ - ext/ed25519_ref10/sha512.h
97
+ - ext/ed25519_ref10/sign.c
98
+ - ext/ed25519_ref10/sqrtm1.h
99
+ - ext/ed25519_ref10/verify.c
100
+ - lib/3.0/ed25519_ref10.bundle
101
+ - lib/3.1/ed25519_ref10.bundle
102
+ - lib/3.2/ed25519_ref10.bundle
103
+ - lib/3.3/ed25519_ref10.bundle
104
+ - lib/3.4/ed25519_ref10.bundle
105
+ - lib/ed25519.rb
106
+ - lib/ed25519/signing_key.rb
107
+ - lib/ed25519/verify_key.rb
108
+ - lib/ed25519/version.rb
109
+ homepage: https://github.com/RubyCrypto/ed25519
110
+ licenses:
111
+ - MIT
112
+ metadata: {}
113
+ rdoc_options: []
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '3.0'
121
+ - - "<"
122
+ - !ruby/object:Gem::Version
123
+ version: 3.5.dev
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubygems_version: 3.6.7
131
+ specification_version: 4
132
+ summary: An efficient digital signature library providing the Ed25519 algorithm
133
+ test_files: []