rbnacl 1.1.0 → 2.0.0.pre

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -5
  3. data/CHANGES.md +15 -0
  4. data/Gemfile +4 -1
  5. data/Guardfile +8 -0
  6. data/README.md +52 -3
  7. data/lib/rbnacl.rb +65 -29
  8. data/lib/rbnacl/auth.rb +14 -18
  9. data/lib/rbnacl/boxes/curve25519xsalsa20poly1305.rb +185 -0
  10. data/lib/rbnacl/{keys → boxes/curve25519xsalsa20poly1305}/private_key.rb +26 -23
  11. data/lib/rbnacl/{keys → boxes/curve25519xsalsa20poly1305}/public_key.rb +13 -12
  12. data/lib/rbnacl/group_elements/curve25519.rb +81 -0
  13. data/lib/rbnacl/hash.rb +30 -14
  14. data/lib/rbnacl/hash/blake2b.rb +57 -0
  15. data/lib/rbnacl/hash/sha256.rb +15 -0
  16. data/lib/rbnacl/hash/sha512.rb +15 -0
  17. data/lib/rbnacl/hmac/sha256.rb +19 -17
  18. data/lib/rbnacl/hmac/sha512256.rb +18 -19
  19. data/lib/rbnacl/init.rb +10 -0
  20. data/lib/rbnacl/{keys/key_comparator.rb → key_comparator.rb} +1 -1
  21. data/lib/rbnacl/{auth/one_time.rb → one_time_auths/poly1305.rb} +21 -19
  22. data/lib/rbnacl/rake_tasks.rb +7 -6
  23. data/lib/rbnacl/random.rb +8 -3
  24. data/lib/rbnacl/random_nonce_box.rb +9 -14
  25. data/lib/rbnacl/secret_boxes/xsalsa20poly1305.rb +125 -0
  26. data/lib/rbnacl/self_test.rb +59 -40
  27. data/lib/rbnacl/serializable.rb +4 -12
  28. data/lib/rbnacl/signatures/ed25519.rb +15 -0
  29. data/lib/rbnacl/signatures/ed25519/signing_key.rb +104 -0
  30. data/lib/rbnacl/signatures/ed25519/verify_key.rb +91 -0
  31. data/lib/rbnacl/sodium.rb +43 -0
  32. data/lib/rbnacl/test_vectors.rb +34 -1
  33. data/lib/rbnacl/util.rb +52 -7
  34. data/lib/rbnacl/version.rb +2 -2
  35. data/rbnacl.gemspec +3 -6
  36. data/spec/rbnacl/{auth/one_time_spec.rb → authenticators/poly1305_spec.rb} +2 -2
  37. data/spec/rbnacl/boxes/curve25519xsalsa20poly1305/private_key_spec.rb +65 -0
  38. data/spec/rbnacl/{keys → boxes/curve25519xsalsa20poly1305}/public_key_spec.rb +10 -13
  39. data/spec/rbnacl/boxes/curve25519xsalsa20poly1305_spec.rb +39 -0
  40. data/spec/rbnacl/{point_spec.rb → group_element_spec.rb} +6 -8
  41. data/spec/rbnacl/hash/blake2b_spec.rb +26 -0
  42. data/spec/rbnacl/hash_spec.rb +13 -33
  43. data/spec/rbnacl/hmac/sha256_spec.rb +2 -2
  44. data/spec/rbnacl/hmac/sha512256_spec.rb +2 -2
  45. data/spec/rbnacl/random_nonce_box_spec.rb +21 -26
  46. data/spec/rbnacl/random_spec.rb +3 -3
  47. data/spec/rbnacl/secret_box_spec.rb +6 -6
  48. data/spec/rbnacl/signatures/ed25519/signing_key_spec.rb +30 -0
  49. data/spec/rbnacl/signatures/ed25519/verify_key_spec.rb +39 -0
  50. data/spec/rbnacl/util_spec.rb +67 -53
  51. data/spec/shared/authenticator.rb +36 -54
  52. data/spec/shared/box.rb +10 -10
  53. data/spec/shared/key_equality.rb +3 -3
  54. data/spec/shared/serializable.rb +17 -0
  55. data/spec/spec_helper.rb +14 -16
  56. data/tasks/rspec.rake +1 -0
  57. metadata +42 -67
  58. checksums.yaml.gz.sig +0 -0
  59. data.tar.gz.sig +0 -3
  60. data/lib/rbnacl/box.rb +0 -171
  61. data/lib/rbnacl/encoder.rb +0 -44
  62. data/lib/rbnacl/encoders/base32.rb +0 -33
  63. data/lib/rbnacl/encoders/base64.rb +0 -30
  64. data/lib/rbnacl/encoders/hex.rb +0 -30
  65. data/lib/rbnacl/encoders/raw.rb +0 -12
  66. data/lib/rbnacl/keys/signing_key.rb +0 -95
  67. data/lib/rbnacl/keys/verify_key.rb +0 -96
  68. data/lib/rbnacl/nacl.rb +0 -146
  69. data/lib/rbnacl/point.rb +0 -70
  70. data/lib/rbnacl/secret_box.rb +0 -119
  71. data/spec/rbnacl/box_spec.rb +0 -42
  72. data/spec/rbnacl/encoder_spec.rb +0 -14
  73. data/spec/rbnacl/encoders/base32_spec.rb +0 -16
  74. data/spec/rbnacl/encoders/base64_spec.rb +0 -15
  75. data/spec/rbnacl/encoders/hex_spec.rb +0 -15
  76. data/spec/rbnacl/keys/private_key_spec.rb +0 -68
  77. data/spec/rbnacl/keys/signing_key_spec.rb +0 -39
  78. data/spec/rbnacl/keys/verify_key_spec.rb +0 -51
  79. metadata.gz.sig +0 -2
@@ -1,44 +0,0 @@
1
- # encoding: binary
2
- module Crypto
3
- # Encoders can be used to serialize or deserialize keys, ciphertexts, hashes,
4
- # and signatures. To provide an encoder, simply subclass Encoder and call the
5
- # register class method, then define the encode and decode methods:
6
- #
7
- # class CrazysauceEncoder < Crypto::Encoder
8
- # register :crazysauce
9
- #
10
- # def encode(string)
11
- # ...
12
- # end
13
- #
14
- # def decode(string)
15
- # ...
16
- # end
17
- # end
18
- #
19
- # Once an encoder has been registered, an instance of it is available via
20
- # calling Crypto::Encoder[], e.g. Crypto::Encoder[:hex].encode("foobar")
21
- #
22
- class Encoder
23
- # Hash where encoder objects are stored
24
- Registry = {}
25
-
26
- # Register the current class as an encoder
27
- def self.register(name)
28
- self[name] = self.new
29
- end
30
-
31
- # Look up an encoder by the given name
32
- def self.[](name)
33
- Registry[name.to_sym] or raise ArgumentError, "unsupported encoder: #{name}"
34
- end
35
-
36
- # Register an encoder object directly
37
- def self.[]=(name, obj)
38
- Registry[name.to_sym] = obj
39
- end
40
-
41
- def encode(string); raise NotImplementedError, "encoding not implemented"; end
42
- def decode(string); raise NotImplementedError, "decoding not implemented"; end
43
- end
44
- end
@@ -1,33 +0,0 @@
1
- # encoding: binary
2
- # Requires the base32 gem
3
- require 'base32'
4
-
5
- module Crypto
6
- module Encoders
7
- # Base64 encoding provider
8
- #
9
- # Accessable as Crypto::Encoder[:base64]
10
- #
11
- class Base32 < Crypto::Encoder
12
- register :base32
13
-
14
- # Base64 encodes a message
15
- #
16
- # @param [String] bytes The bytes to encode
17
- #
18
- # @return [String] Lovely, elegant "Zooko-style" Base32
19
- def encode(bytes)
20
- ::Base32.encode(bytes.to_s).downcase
21
- end
22
-
23
- # Hex decodes a message
24
- #
25
- # @param [String] base32 string to decode.
26
- #
27
- # @return [String] crisp and clean bytes
28
- def decode(base32)
29
- ::Base32.decode(base32.to_s.upcase)
30
- end
31
- end
32
- end
33
- end
@@ -1,30 +0,0 @@
1
- # encoding: binary
2
- module Crypto
3
- module Encoders
4
- # Base64 encoding provider
5
- #
6
- # Accessable as Crypto::Encoder[:base64]
7
- #
8
- class Base64 < Crypto::Encoder
9
- register :base64
10
-
11
- # Base64 encodes a message
12
- #
13
- # @param [String] bytes The bytes to encode
14
- #
15
- # @return [String] Clunky old base64
16
- def encode(bytes)
17
- [bytes.to_s].pack("m").gsub("\n", '')
18
- end
19
-
20
- # Hex decodes a message
21
- #
22
- # @param [String] base64 string to decode.
23
- #
24
- # @return [String] crisp and clean bytes
25
- def decode(base64)
26
- base64.to_s.unpack("m").first
27
- end
28
- end
29
- end
30
- end
@@ -1,30 +0,0 @@
1
- # encoding: binary
2
- module Crypto
3
- module Encoders
4
- # Hex encoding provider
5
- #
6
- # Accessable as Crypto::Encoder[:hex]
7
- #
8
- class Hex < Crypto::Encoder
9
- register :hex
10
-
11
- # Hex encodes a message
12
- #
13
- # @param [String] bytes The bytes to encode
14
- #
15
- # @return [String] Tasty, tasty hexidecimal
16
- def encode(bytes)
17
- bytes.to_s.unpack("H*").first
18
- end
19
-
20
- # Hex decodes a message
21
- #
22
- # @param [String] hex hex to decode.
23
- #
24
- # @return [String] crisp and clean bytes
25
- def decode(hex)
26
- [hex.to_s].pack("H*")
27
- end
28
- end
29
- end
30
- end
@@ -1,12 +0,0 @@
1
- # encoding: binary
2
- module Crypto
3
- module Encoders
4
- # Raw encoder which only does a string conversion (if necessary)
5
- class Raw < Crypto::Encoder
6
- register :raw
7
-
8
- def encode(bytes); bytes.to_s; end
9
- def decode(bytes); bytes.to_s; end
10
- end
11
- end
12
- end
@@ -1,95 +0,0 @@
1
- # encoding: binary
2
- module Crypto
3
- # Private key for producing digital signatures using the Ed25519 algorithm.
4
- # Ed25519 provides a 128-bit security level, that is to say, all known attacks
5
- # take at least 2^128 operations, providing the same security level as
6
- # AES-128, NIST P-256, and RSA-3072.
7
- #
8
- # Signing keys are produced from a 32-byte (256-bit) random seed value.
9
- # This value can be passed into the SigningKey constructoras a String
10
- # whose bytesize is 32.
11
- #
12
- # The public VerifyKey can be computed from the private 32-byte seed value
13
- # as well, eliminating the need to store a "keypair".
14
- #
15
- # SigningKey produces 64-byte (512-bit) signatures. The signatures are
16
- # deterministic: signing the same message will always produce the same
17
- # signature. This prevents "entropy failure" seen in other signature
18
- # algorithms like DSA and ECDSA, where poor random number generators can
19
- # leak enough information to recover the private key.
20
- class SigningKey
21
- include KeyComparator
22
- include Serializable
23
-
24
- attr_reader :verify_key
25
-
26
- # Generate a random SigningKey
27
- #
28
- # @return [Crypto::SigningKey] Freshly-generated random SigningKey
29
- def self.generate
30
- new Crypto::Random.random_bytes(NaCl::ED25519_SEED_BYTES)
31
- end
32
-
33
- # Create a SigningKey from a seed value
34
- #
35
- # @param seed [String] Random 32-byte value (i.e. private key)
36
- # @param encoding [Symbol] Parse seed from the given encoding
37
- #
38
- # @return [Crypto::SigningKey] Key which can sign messages
39
- def initialize(seed, encoding = :raw)
40
- seed = Encoder[encoding].decode(seed)
41
-
42
- Util.check_length(seed, NaCl::ED25519_SEED_BYTES, "seed")
43
-
44
- pk = Util.zeros(NaCl::ED25519_VERIFYKEY_BYTES)
45
- sk = Util.zeros(NaCl::ED25519_SIGNINGKEY_BYTES)
46
-
47
- NaCl.crypto_sign_ed25519_seed_keypair(pk, sk, seed) || raise(CryptoError, "Failed to generate a key pair")
48
-
49
- @seed, @signing_key = seed, sk
50
- @verify_key = VerifyKey.new(pk)
51
- end
52
-
53
- # Sign a message using this key
54
- #
55
- # @param message [String] Message to be signed by this key
56
- # @param encoding [Symbol] Encode signature in the given format
57
- #
58
- # @return [String] Signature as bytes
59
- def sign(message, encoding = :raw)
60
- buffer = Util.prepend_zeros(signature_bytes, message)
61
- buffer_len = Util.zeros(FFI::Type::LONG_LONG.size)
62
-
63
- NaCl.crypto_sign_ed25519(buffer, buffer_len, message, message.bytesize, @signing_key)
64
-
65
- signature = buffer[0, signature_bytes]
66
- Encoder[encoding].encode(signature)
67
- end
68
-
69
- # Return the raw seed value of this key
70
- #
71
- # @return [String] seed used to create this key
72
- def to_bytes; @seed; end
73
-
74
- # The crypto primitive the SigningKey class uses for signatures
75
- #
76
- # @return [Symbol] The primitive
77
- def self.primitive; :ed25519; end
78
-
79
- # The crypto primitive this SigningKey class uses for signatures
80
- #
81
- # @return [Symbol] The primitive
82
- def primitive; self.class.primitive; end
83
-
84
- # The size of signatures generated by the SigningKey class
85
- #
86
- # @return [Integer] The number of bytes in a signature
87
- def self.signature_bytes; NaCl::ED25519_SIGNATUREBYTES; end
88
-
89
- # The size of signatures generated by the SigningKey instance
90
- #
91
- # @return [Integer] The number of bytes in a signature
92
- def signature_bytes; NaCl::ED25519_SIGNATUREBYTES; end
93
-
94
- end
95
- end
@@ -1,96 +0,0 @@
1
- # encoding: binary
2
- module Crypto
3
- # The signature was forged or otherwise corrupt
4
- class BadSignatureError < CryptoError; end
5
-
6
- # The public key counterpart to an Ed25519 SigningKey for producing digital
7
- # signatures. Like the name says, VerifyKeys can be used to verify that a
8
- # given digital signature is authentic.
9
- #
10
- # For more information on the Ed25519 digital signature system, please see
11
- # the SigningKey documentation.
12
- class VerifyKey
13
- include KeyComparator
14
- include Serializable
15
-
16
- # Create a new VerifyKey object from a serialized public key. The key can
17
- # be decoded from any serialization format supported by the
18
- # Crypto::Encoding system.
19
- #
20
- # @param key [String] Serialized Ed25519 public key
21
- # @param encoding [Symbol] Parse key from the given encoding
22
- #
23
- # @return [Crypto::SigningKey] Key which can sign messages
24
- def initialize(key, encoding = :raw)
25
- key = Encoder[encoding].decode(key)
26
- Util.check_length(key, NaCl::ED25519_VERIFYKEY_BYTES, "key")
27
-
28
- @key = key
29
- end
30
-
31
- # Create a new VerifyKey object from a serialized public key. The key can
32
- # be decoded from any serialization format supported by the
33
- # Crypto::Encoding system.
34
- #
35
- # You can remember the argument ordering by "verify message with signature"
36
- # It's like a legal document, with the signature at the end.
37
- #
38
- # @param message [String] Message to be authenticated
39
- # @param signature [String] Alleged signature to be checked
40
- # @param signature_encoding [Symbol] Parse signature from the given encoding
41
- #
42
- # @return [Boolean] was the signature authentic?
43
- def verify(message, signature, signature_encoding = :raw)
44
- signature = Encoder[signature_encoding].decode(signature)
45
- Util.check_length(signature, signature_bytes, "signature")
46
-
47
- sig_and_msg = signature + message
48
- buffer = Util.zeros(sig_and_msg.bytesize)
49
- buffer_len = Util.zeros(FFI::Type::LONG_LONG.size)
50
-
51
- NaCl.crypto_sign_ed25519_open(buffer, buffer_len, sig_and_msg, sig_and_msg.bytesize, @key)
52
- end
53
-
54
- # "Dangerous" (but probably safer) verify that raises an exception if a
55
- # signature check fails. This is probably less likely to go unnoticed than
56
- # an improperly checked verify, as you are forced to deal with the
57
- # exception explicitly (and failing signature checks are certainly an
58
- # exceptional condition!)
59
- #
60
- # The arguments are otherwise the same as the verify method.
61
- #
62
- # @param message [String] Message to be authenticated
63
- # @param signature [String] Alleged signature to be checked
64
- # @param signature_encoding [Symbol] Parse signature from the given encoding
65
- #
66
- # @return [true] Will raise BadSignatureError if signature check fails
67
- def verify!(message, signature, signature_encoding = :raw)
68
- verify(message, signature, signature_encoding) or raise BadSignatureError, "signature was forged/corrupt"
69
- end
70
-
71
- # Return the raw key in byte format
72
- #
73
- # @return [String] raw key as bytes
74
- def to_bytes; @key; end
75
-
76
- # The crypto primitive the VerifyKey class uses for signatures
77
- #
78
- # @return [Symbol] The primitive
79
- def self.primitive; :ed25519; end
80
-
81
- # The crypto primitive this VerifyKey class uses for signatures
82
- #
83
- # @return [Symbol] The primitive
84
- def primitive; self.class.primitive; end
85
-
86
- # The size of signatures verified by the VerifyKey class
87
- #
88
- # @return [Integer] The number of bytes in a signature
89
- def self.signature_bytes; NaCl::ED25519_SIGNATUREBYTES; end
90
-
91
- # The size of signatures verified by the VerifyKey instance
92
- #
93
- # @return [Integer] The number of bytes in a signature
94
- def signature_bytes; NaCl::ED25519_SIGNATUREBYTES; end
95
- end
96
- end
@@ -1,146 +0,0 @@
1
- # encoding: binary
2
- require 'ffi'
3
- module Crypto
4
- # This module has all the FFI code hanging off it
5
- #
6
- # And that's all it does, really.
7
- #
8
- # HERE BE DRAGONS!
9
- #
10
- # Do **NOT** use constants and methods defined here. If you do find yourself
11
- # needing to, that is a bug in RbNaCl and should be reported.
12
- #
13
- # @private
14
- module NaCl
15
- extend FFI::Library
16
- ffi_lib 'sodium'
17
-
18
- # Wraps an NaCl function so it returns a sane value
19
- #
20
- # The NaCl functions generally have an integer return value which is 0 in
21
- # the case of success and below 0 if they failed. This is a bit
22
- # inconvinient in ruby, where 0 is a truthy value, so this makes them
23
- # return true/false based on success.
24
- #
25
- # @param [Symbol] name Function name that will return true/false
26
- # @param [Symbol] function Function to attach
27
- # @param [Array<Symbol>] arguments Array of arguments to the function
28
- def self.wrap_nacl_function(name, function, arguments)
29
- module_eval <<-eos, __FILE__, __LINE__ + 1
30
- attach_function #{function.inspect}, #{arguments.inspect}, :int
31
- def self.#{name}(*args)
32
- ret = #{function}(*args)
33
- ret == 0
34
- end
35
- eos
36
- end
37
-
38
- SHA256BYTES = 32
39
- wrap_nacl_function :crypto_hash_sha256,
40
- :crypto_hash_sha256_ref,
41
- [:pointer, :pointer, :long_long]
42
-
43
- SHA512BYTES = 64
44
- wrap_nacl_function :crypto_hash_sha512,
45
- :crypto_hash_sha512_ref,
46
- [:pointer, :pointer, :long_long]
47
-
48
- CURVE25519_XSALSA20_POLY1305_PUBLICKEY_BYTES = 32
49
- PUBLICKEYBYTES = CURVE25519_XSALSA20_POLY1305_PUBLICKEY_BYTES
50
- CURVE25519_XSALSA20_POLY1305_SECRETKEY_BYTES = 32
51
- SECRETKEYBYTES = CURVE25519_XSALSA20_POLY1305_SECRETKEY_BYTES
52
- wrap_nacl_function :crypto_box_curve25519xsalsa20poly1305_keypair,
53
- :crypto_box_curve25519xsalsa20poly1305_ref_keypair,
54
- [:pointer, :pointer]
55
-
56
- CURVE25519_XSALSA20_POLY1305_BOX_NONCEBYTES = 24
57
- NONCEBYTES = CURVE25519_XSALSA20_POLY1305_BOX_NONCEBYTES
58
- ZEROBYTES = 32
59
- BOXZEROBYTES = 16
60
- CURVE25519_XSALSA20_POLY1305_BOX_BEFORENMBYTES = 32
61
-
62
- wrap_nacl_function :crypto_box_curve25519_xsalsa20_poly1305_beforenm,
63
- :crypto_box_curve25519xsalsa20poly1305_ref_beforenm,
64
- [:pointer, :pointer, :pointer]
65
-
66
- wrap_nacl_function :crypto_box_curve25519_xsalsa20_poly1305_afternm,
67
- :crypto_box_curve25519xsalsa20poly1305_ref_afternm,
68
- [:pointer, :pointer, :long_long, :pointer, :pointer]
69
-
70
- wrap_nacl_function :crypto_box_curve25519_xsalsa20_poly1305_open_afternm,
71
- :crypto_box_curve25519xsalsa20poly1305_ref_open_afternm,
72
- [:pointer, :pointer, :long_long, :pointer, :pointer]
73
-
74
- XSALSA20_POLY1305_SECRETBOX_KEYBYTES = 32
75
- XSALSA20_POLY1305_SECRETBOX_NONCEBYTES = 24
76
- wrap_nacl_function :crypto_secretbox_xsalsa20poly1305,
77
- :crypto_secretbox_xsalsa20poly1305_ref,
78
- [:pointer, :pointer, :long_long, :pointer, :pointer]
79
-
80
- wrap_nacl_function :crypto_secretbox_xsalsa20poly1305_open,
81
- :crypto_secretbox_xsalsa20poly1305_ref_open,
82
- [:pointer, :pointer, :long_long, :pointer, :pointer]
83
-
84
- HMACSHA512256_KEYBYTES = 32
85
- HMACSHA512256_BYTES = 32
86
- wrap_nacl_function :crypto_auth_hmacsha512256,
87
- :crypto_auth_hmacsha512256_ref,
88
- [:pointer, :pointer, :long_long, :pointer]
89
- wrap_nacl_function :crypto_auth_hmacsha512256_verify,
90
- :crypto_auth_hmacsha512256_ref_verify,
91
- [:pointer, :pointer, :long_long, :pointer]
92
-
93
- HMACSHA256_KEYBYTES = 32
94
- HMACSHA256_BYTES = 32
95
- wrap_nacl_function :crypto_auth_hmacsha256,
96
- :crypto_auth_hmacsha256_ref,
97
- [:pointer, :pointer, :long_long, :pointer]
98
- wrap_nacl_function :crypto_auth_hmacsha256_verify,
99
- :crypto_auth_hmacsha256_ref_verify,
100
- [:pointer, :pointer, :long_long, :pointer]
101
-
102
- ONETIME_KEYBYTES = 32
103
- ONETIME_BYTES = 16
104
- wrap_nacl_function :crypto_auth_onetime,
105
- :crypto_onetimeauth_poly1305_ref,
106
- [:pointer, :pointer, :long_long, :pointer]
107
- wrap_nacl_function :crypto_auth_onetime_verify,
108
- :crypto_onetimeauth_poly1305_ref_verify,
109
- [:pointer, :pointer, :long_long, :pointer]
110
-
111
- wrap_nacl_function :random_bytes,
112
- :randombytes,
113
- [:pointer, :long_long]
114
-
115
- wrap_nacl_function :crypto_verify_32,
116
- :crypto_verify_32_ref,
117
- [:pointer, :pointer]
118
- wrap_nacl_function :crypto_verify_16,
119
- :crypto_verify_16_ref,
120
- [:pointer, :pointer]
121
-
122
- ED25519_SIGNATUREBYTES = 64
123
- SIGNATUREBYTES = ED25519_SIGNATUREBYTES
124
- ED25519_SIGNINGKEY_BYTES = 64
125
- ED25519_VERIFYKEY_BYTES = 32
126
- ED25519_SEED_BYTES = 32
127
- wrap_nacl_function :crypto_sign_ed25519_seed_keypair,
128
- :crypto_sign_ed25519_ref_seed_keypair,
129
- [:pointer, :pointer, :pointer]
130
-
131
- wrap_nacl_function :crypto_sign_ed25519,
132
- :crypto_sign_ed25519_ref,
133
- [:pointer, :pointer, :pointer, :long_long, :pointer]
134
-
135
- wrap_nacl_function :crypto_sign_ed25519_open,
136
- :crypto_sign_ed25519_ref_open,
137
- [:pointer, :pointer, :pointer, :long_long, :pointer]
138
-
139
- ED25519_SCALARBYTES = 32
140
- SCALARBYTES = ED25519_SCALARBYTES
141
-
142
- wrap_nacl_function :crypto_scalarmult_curve25519,
143
- :crypto_scalarmult_curve25519_ref,
144
- [:pointer, :pointer, :pointer]
145
- end
146
- end