ed25519 1.2.4-java
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/.gitignore +15 -0
 - data/.rspec +5 -0
 - data/.rubocop.yml +35 -0
 - data/.travis.yml +26 -0
 - data/CHANGES.md +70 -0
 - data/CODE_OF_CONDUCT.md +74 -0
 - data/Gemfile +12 -0
 - data/LICENSE +22 -0
 - data/README.md +170 -0
 - data/Rakefile +27 -0
 - data/appveyor.yml +21 -0
 - data/ed25519.gemspec +32 -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 +9 -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.rb +72 -0
 - data/lib/ed25519/signing_key.rb +60 -0
 - data/lib/ed25519/verify_key.rb +44 -0
 - data/lib/ed25519/version.rb +5 -0
 - metadata +137 -0
 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #include <string.h>
         
     | 
| 
      
 2 
     | 
    
         
            +
            #include "ed25519_ref10.h"
         
     | 
| 
      
 3 
     | 
    
         
            +
            #include "sha512.h"
         
     | 
| 
      
 4 
     | 
    
         
            +
            #include "ge.h"
         
     | 
| 
      
 5 
     | 
    
         
            +
            #include "sc.h"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            int crypto_sign_ed25519_ref10(
         
     | 
| 
      
 8 
     | 
    
         
            +
              uint8_t *sm, uint64_t *smlen,
         
     | 
| 
      
 9 
     | 
    
         
            +
              const uint8_t *m, uint64_t mlen,
         
     | 
| 
      
 10 
     | 
    
         
            +
              const uint8_t *sk
         
     | 
| 
      
 11 
     | 
    
         
            +
            )
         
     | 
| 
      
 12 
     | 
    
         
            +
            {
         
     | 
| 
      
 13 
     | 
    
         
            +
              unsigned char pk[32];
         
     | 
| 
      
 14 
     | 
    
         
            +
              unsigned char az[64];
         
     | 
| 
      
 15 
     | 
    
         
            +
              unsigned char nonce[64];
         
     | 
| 
      
 16 
     | 
    
         
            +
              unsigned char hram[64];
         
     | 
| 
      
 17 
     | 
    
         
            +
              ge_p3 R;
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              memmove(pk,sk + 32,32);
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              crypto_hash_sha512(az,sk,32);
         
     | 
| 
      
 22 
     | 
    
         
            +
              az[0] &= 248;
         
     | 
| 
      
 23 
     | 
    
         
            +
              az[31] &= 63;
         
     | 
| 
      
 24 
     | 
    
         
            +
              az[31] |= 64;
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              *smlen = mlen + 64;
         
     | 
| 
      
 27 
     | 
    
         
            +
              memmove(sm + 64,m,mlen);
         
     | 
| 
      
 28 
     | 
    
         
            +
              memmove(sm + 32,az + 32,32);
         
     | 
| 
      
 29 
     | 
    
         
            +
              crypto_hash_sha512(nonce,sm + 32,mlen + 32);
         
     | 
| 
      
 30 
     | 
    
         
            +
              memmove(sm + 32,pk,32);
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              sc_reduce(nonce);
         
     | 
| 
      
 33 
     | 
    
         
            +
              ge_scalarmult_base(&R,nonce);
         
     | 
| 
      
 34 
     | 
    
         
            +
              ge_p3_tobytes(sm,&R);
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              crypto_hash_sha512(hram,sm,mlen + 64);
         
     | 
| 
      
 37 
     | 
    
         
            +
              sc_reduce(hram);
         
     | 
| 
      
 38 
     | 
    
         
            +
              sc_muladd(sm + 32,hram,az,nonce);
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              return 0;
         
     | 
| 
      
 41 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            -32595792,-7943725,9377950,3500415,12389472,-272473,-25146209,-2005654,326686,11406482
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #include "ed25519_ref10.h"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            int crypto_verify_32(const uint8_t *x,const uint8_t *y)
         
     | 
| 
      
 4 
     | 
    
         
            +
            {
         
     | 
| 
      
 5 
     | 
    
         
            +
              unsigned int differentbits = 0;
         
     | 
| 
      
 6 
     | 
    
         
            +
            #define F(i) differentbits |= x[i] ^ y[i];
         
     | 
| 
      
 7 
     | 
    
         
            +
              F(0)
         
     | 
| 
      
 8 
     | 
    
         
            +
              F(1)
         
     | 
| 
      
 9 
     | 
    
         
            +
              F(2)
         
     | 
| 
      
 10 
     | 
    
         
            +
              F(3)
         
     | 
| 
      
 11 
     | 
    
         
            +
              F(4)
         
     | 
| 
      
 12 
     | 
    
         
            +
              F(5)
         
     | 
| 
      
 13 
     | 
    
         
            +
              F(6)
         
     | 
| 
      
 14 
     | 
    
         
            +
              F(7)
         
     | 
| 
      
 15 
     | 
    
         
            +
              F(8)
         
     | 
| 
      
 16 
     | 
    
         
            +
              F(9)
         
     | 
| 
      
 17 
     | 
    
         
            +
              F(10)
         
     | 
| 
      
 18 
     | 
    
         
            +
              F(11)
         
     | 
| 
      
 19 
     | 
    
         
            +
              F(12)
         
     | 
| 
      
 20 
     | 
    
         
            +
              F(13)
         
     | 
| 
      
 21 
     | 
    
         
            +
              F(14)
         
     | 
| 
      
 22 
     | 
    
         
            +
              F(15)
         
     | 
| 
      
 23 
     | 
    
         
            +
              F(16)
         
     | 
| 
      
 24 
     | 
    
         
            +
              F(17)
         
     | 
| 
      
 25 
     | 
    
         
            +
              F(18)
         
     | 
| 
      
 26 
     | 
    
         
            +
              F(19)
         
     | 
| 
      
 27 
     | 
    
         
            +
              F(20)
         
     | 
| 
      
 28 
     | 
    
         
            +
              F(21)
         
     | 
| 
      
 29 
     | 
    
         
            +
              F(22)
         
     | 
| 
      
 30 
     | 
    
         
            +
              F(23)
         
     | 
| 
      
 31 
     | 
    
         
            +
              F(24)
         
     | 
| 
      
 32 
     | 
    
         
            +
              F(25)
         
     | 
| 
      
 33 
     | 
    
         
            +
              F(26)
         
     | 
| 
      
 34 
     | 
    
         
            +
              F(27)
         
     | 
| 
      
 35 
     | 
    
         
            +
              F(28)
         
     | 
| 
      
 36 
     | 
    
         
            +
              F(29)
         
     | 
| 
      
 37 
     | 
    
         
            +
              F(30)
         
     | 
| 
      
 38 
     | 
    
         
            +
              F(31)
         
     | 
| 
      
 39 
     | 
    
         
            +
              return (1 & ((differentbits - 1) >> 8)) - 1;
         
     | 
| 
      
 40 
     | 
    
         
            +
            }
         
     | 
    
        data/lib/ed25519.rb
    ADDED
    
    | 
         @@ -0,0 +1,72 @@ 
     | 
|
| 
      
 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 Metrics/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 "ed25519_jruby"
         
     | 
| 
      
 32 
     | 
    
         
            +
                self.provider = org.cryptorb.Ed25519Provider.createEd25519Module(JRuby.runtime)
         
     | 
| 
      
 33 
     | 
    
         
            +
              else
         
     | 
| 
      
 34 
     | 
    
         
            +
                require "ed25519_ref10"
         
     | 
| 
      
 35 
     | 
    
         
            +
                self.provider = Ed25519::Provider::Ref10
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              # Ensure a serialized key meets the requirements
         
     | 
| 
      
 39 
     | 
    
         
            +
              def validate_key_bytes(key_bytes)
         
     | 
| 
      
 40 
     | 
    
         
            +
                raise TypeError, "expected String, got #{key_bytes.class}" unless key_bytes.is_a?(String)
         
     | 
| 
      
 41 
     | 
    
         
            +
                return true if key_bytes.bytesize == KEY_SIZE
         
     | 
| 
      
 42 
     | 
    
         
            +
                raise ArgumentError, "expected #{KEY_SIZE}-byte String, got #{key_bytes.bytesize}"
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              # Perform a self-test to ensure the selected provider is working
         
     | 
| 
      
 46 
     | 
    
         
            +
              def self_test
         
     | 
| 
      
 47 
     | 
    
         
            +
                signature_key = Ed25519::SigningKey.new("A" * 32)
         
     | 
| 
      
 48 
     | 
    
         
            +
                raise SelfTestFailure, "failed to generate verify key correctly" unless signature_key.verify_key.to_bytes.unpack("H*").first == "db995fe25169d141cab9bbba92baa01f9f2e1ece7df4cb2ac05190f37fcc1f9d"
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                message = "crypto libraries should self-test on boot"
         
     | 
| 
      
 51 
     | 
    
         
            +
                signature = signature_key.sign(message)
         
     | 
| 
      
 52 
     | 
    
         
            +
                raise SelfTestFailure, "failed to generate correct signature" unless signature.unpack("H*").first == "c62c12a3a6cbfa04800d4be81468ef8aecd152a6a26a81d91257baecef13ba209531fe905a843e833c8b71cee04400fa2af3a29fef1152ece470421848758d0a"
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                verify_key = signature_key.verify_key
         
     | 
| 
      
 55 
     | 
    
         
            +
                raise SelfTestFailure, "failed to verify a valid signature" unless verify_key.verify(signature, message)
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                bad_signature = signature[0...63] + "X"
         
     | 
| 
      
 58 
     | 
    
         
            +
                ex = nil
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                # rubocop:disable Lint/HandleExceptions
         
     | 
| 
      
 61 
     | 
    
         
            +
                begin
         
     | 
| 
      
 62 
     | 
    
         
            +
                  verify_key.verify(bad_signature, message)
         
     | 
| 
      
 63 
     | 
    
         
            +
                rescue Ed25519::VerifyError => ex
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
                # rubocop:enable Lint/HandleExceptions
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                raise SelfTestFailure, "failed to detect an invalid signature" unless ex.is_a?(Ed25519::VerifyError)
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
            end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            # Automatically run self-test when library loads
         
     | 
| 
      
 72 
     | 
    
         
            +
            Ed25519.self_test
         
     | 
| 
         @@ -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,44 @@ 
     | 
|
| 
      
 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 
     | 
    
         
            +
                  raise VerifyError, "signature verification failed!"
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                # Return a compressed twisted Edwards coordinate representing the public key
         
     | 
| 
      
 32 
     | 
    
         
            +
                #
         
     | 
| 
      
 33 
     | 
    
         
            +
                # @return [String] bytestring serialization of this public key
         
     | 
| 
      
 34 
     | 
    
         
            +
                def to_bytes
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @key_bytes
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
                alias to_str to_bytes
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                # Show hex representation of serialized coordinate in string inspection
         
     | 
| 
      
 40 
     | 
    
         
            +
                def inspect
         
     | 
| 
      
 41 
     | 
    
         
            +
                  "#<#{self.class}:#{@key_bytes.unpack('H*').first}>"
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,137 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: ed25519
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.2.4
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: java
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Tony Arcieri
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire:
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: exe
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-01-05 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 15 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 16 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 17 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 18 
     | 
    
         
            +
                    version: '1.16'
         
     | 
| 
      
 19 
     | 
    
         
            +
              name: bundler
         
     | 
| 
      
 20 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 21 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '1.16'
         
     | 
| 
      
 27 
     | 
    
         
            +
            description: A Ruby binding to the Ed25519 elliptic curve public-key signature system
         
     | 
| 
      
 28 
     | 
    
         
            +
              described in RFC 8032.
         
     | 
| 
      
 29 
     | 
    
         
            +
            email:
         
     | 
| 
      
 30 
     | 
    
         
            +
            - tony.arcieri@gmail.com
         
     | 
| 
      
 31 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 32 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 33 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 34 
     | 
    
         
            +
            files:
         
     | 
| 
      
 35 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
      
 36 
     | 
    
         
            +
            - ".rspec"
         
     | 
| 
      
 37 
     | 
    
         
            +
            - ".rubocop.yml"
         
     | 
| 
      
 38 
     | 
    
         
            +
            - ".travis.yml"
         
     | 
| 
      
 39 
     | 
    
         
            +
            - CHANGES.md
         
     | 
| 
      
 40 
     | 
    
         
            +
            - CODE_OF_CONDUCT.md
         
     | 
| 
      
 41 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 42 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 43 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 44 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 45 
     | 
    
         
            +
            - appveyor.yml
         
     | 
| 
      
 46 
     | 
    
         
            +
            - ed25519.gemspec
         
     | 
| 
      
 47 
     | 
    
         
            +
            - ed25519.png
         
     | 
| 
      
 48 
     | 
    
         
            +
            - ext/ed25519_jruby/LICENSE.txt
         
     | 
| 
      
 49 
     | 
    
         
            +
            - ext/ed25519_jruby/README.md
         
     | 
| 
      
 50 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAEngine.java
         
     | 
| 
      
 51 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAKey.java
         
     | 
| 
      
 52 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPrivateKey.java
         
     | 
| 
      
 53 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPublicKey.java
         
     | 
| 
      
 54 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSASecurityProvider.java
         
     | 
| 
      
 55 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyFactory.java
         
     | 
| 
      
 56 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyPairGenerator.java
         
     | 
| 
      
 57 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/Utils.java
         
     | 
| 
      
 58 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Constants.java
         
     | 
| 
      
 59 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Curve.java
         
     | 
| 
      
 60 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Encoding.java
         
     | 
| 
      
 61 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Field.java
         
     | 
| 
      
 62 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/FieldElement.java
         
     | 
| 
      
 63 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/GroupElement.java
         
     | 
| 
      
 64 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ScalarOps.java
         
     | 
| 
      
 65 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerFieldElement.java
         
     | 
| 
      
 66 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerLittleEndianEncoding.java
         
     | 
| 
      
 67 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerScalarOps.java
         
     | 
| 
      
 68 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/package.html
         
     | 
| 
      
 69 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519FieldElement.java
         
     | 
| 
      
 70 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519LittleEndianEncoding.java
         
     | 
| 
      
 71 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519ScalarOps.java
         
     | 
| 
      
 72 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAGenParameterSpec.java
         
     | 
| 
      
 73 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveSpec.java
         
     | 
| 
      
 74 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveTable.java
         
     | 
| 
      
 75 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java
         
     | 
| 
      
 76 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java
         
     | 
| 
      
 77 
     | 
    
         
            +
            - ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java
         
     | 
| 
      
 78 
     | 
    
         
            +
            - ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java
         
     | 
| 
      
 79 
     | 
    
         
            +
            - ext/ed25519_ref10/api.h
         
     | 
| 
      
 80 
     | 
    
         
            +
            - ext/ed25519_ref10/base.h
         
     | 
| 
      
 81 
     | 
    
         
            +
            - ext/ed25519_ref10/base2.h
         
     | 
| 
      
 82 
     | 
    
         
            +
            - ext/ed25519_ref10/d.h
         
     | 
| 
      
 83 
     | 
    
         
            +
            - ext/ed25519_ref10/d2.h
         
     | 
| 
      
 84 
     | 
    
         
            +
            - ext/ed25519_ref10/ed25519_ref10.c
         
     | 
| 
      
 85 
     | 
    
         
            +
            - ext/ed25519_ref10/ed25519_ref10.h
         
     | 
| 
      
 86 
     | 
    
         
            +
            - ext/ed25519_ref10/extconf.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - ext/ed25519_ref10/fe.c
         
     | 
| 
      
 88 
     | 
    
         
            +
            - ext/ed25519_ref10/fe.h
         
     | 
| 
      
 89 
     | 
    
         
            +
            - ext/ed25519_ref10/ge.c
         
     | 
| 
      
 90 
     | 
    
         
            +
            - ext/ed25519_ref10/ge.h
         
     | 
| 
      
 91 
     | 
    
         
            +
            - ext/ed25519_ref10/ge_add.h
         
     | 
| 
      
 92 
     | 
    
         
            +
            - ext/ed25519_ref10/ge_madd.h
         
     | 
| 
      
 93 
     | 
    
         
            +
            - ext/ed25519_ref10/ge_msub.h
         
     | 
| 
      
 94 
     | 
    
         
            +
            - ext/ed25519_ref10/ge_p2_dbl.h
         
     | 
| 
      
 95 
     | 
    
         
            +
            - ext/ed25519_ref10/ge_sub.h
         
     | 
| 
      
 96 
     | 
    
         
            +
            - ext/ed25519_ref10/keypair.c
         
     | 
| 
      
 97 
     | 
    
         
            +
            - ext/ed25519_ref10/open.c
         
     | 
| 
      
 98 
     | 
    
         
            +
            - ext/ed25519_ref10/pow22523.h
         
     | 
| 
      
 99 
     | 
    
         
            +
            - ext/ed25519_ref10/pow225521.h
         
     | 
| 
      
 100 
     | 
    
         
            +
            - ext/ed25519_ref10/sc.h
         
     | 
| 
      
 101 
     | 
    
         
            +
            - ext/ed25519_ref10/sc_muladd.c
         
     | 
| 
      
 102 
     | 
    
         
            +
            - ext/ed25519_ref10/sc_reduce.c
         
     | 
| 
      
 103 
     | 
    
         
            +
            - ext/ed25519_ref10/sha512.c
         
     | 
| 
      
 104 
     | 
    
         
            +
            - ext/ed25519_ref10/sha512.h
         
     | 
| 
      
 105 
     | 
    
         
            +
            - ext/ed25519_ref10/sign.c
         
     | 
| 
      
 106 
     | 
    
         
            +
            - ext/ed25519_ref10/sqrtm1.h
         
     | 
| 
      
 107 
     | 
    
         
            +
            - ext/ed25519_ref10/verify.c
         
     | 
| 
      
 108 
     | 
    
         
            +
            - lib/ed25519.rb
         
     | 
| 
      
 109 
     | 
    
         
            +
            - lib/ed25519/signing_key.rb
         
     | 
| 
      
 110 
     | 
    
         
            +
            - lib/ed25519/verify_key.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            - lib/ed25519/version.rb
         
     | 
| 
      
 112 
     | 
    
         
            +
            - lib/ed25519_jruby.jar
         
     | 
| 
      
 113 
     | 
    
         
            +
            homepage: https://github.com/crypto-rb/ed25519
         
     | 
| 
      
 114 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 115 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 116 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 117 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
      
 118 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 119 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 120 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 121 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 122 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 123 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 124 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 125 
     | 
    
         
            +
                  version: 2.0.0
         
     | 
| 
      
 126 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 127 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 128 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 129 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 130 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 131 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 132 
     | 
    
         
            +
            rubyforge_project:
         
     | 
| 
      
 133 
     | 
    
         
            +
            rubygems_version: 2.7.4
         
     | 
| 
      
 134 
     | 
    
         
            +
            signing_key:
         
     | 
| 
      
 135 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 136 
     | 
    
         
            +
            summary: An efficient digital signature library providing the Ed25519 algorithm
         
     | 
| 
      
 137 
     | 
    
         
            +
            test_files: []
         
     |