Module: Crypto::Sign
- Extended by:
- FFI::Library, Sodium::Utils
- Defined in:
- lib/crypto/sign.rb,
lib/crypto/sign/ed25519.rb
Defined Under Namespace
Modules: Ed25519
Constant Summary
collapse
- PRIMITIVE =
primitive.freeze
- BYTES =
bytes.freeze
- SEEDBYTES =
seedbytes.freeze
- PUBLICKEYBYTES =
publickeybytes.freeze
- SECRETKEYBYTES =
secretkeybytes.freeze
Sodium::Utils::HEXY, Sodium::Utils::ZERO
Class Method Summary
collapse
bin2hex, check_length, get_size, hex2bin, zeros
Class Method Details
.detached(message, secret_key) ⇒ Object
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/crypto/sign.rb', line 110
def detached(message, secret_key)
check_length(secret_key, SECRETKEYBYTES, :SecretKey)
signature = zeros(BYTES)
secret_key.readonly if secret_key.is_a?(Sodium::SecretBuffer)
crypto_sign_detached(signature, nil, message, get_size(message), secret_key)
signature
ensure
secret_key.noaccess if secret_key.is_a?(Sodium::SecretBuffer)
end
|
.keypair ⇒ Object
36
37
38
39
40
41
42
|
# File 'lib/crypto/sign.rb', line 36
def keypair
public_key = zeros(PUBLICKEYBYTES)
secret_key = zeros(SECRETKEYBYTES)
crypto_sign_keypair(public_key, secret_key)
[public_key, secret_key]
end
|
.memory_locked_keypair ⇒ Object
57
58
59
60
61
62
63
64
|
# File 'lib/crypto/sign.rb', line 57
def memory_locked_keypair
public_key = zeros(PUBLICKEYBYTES)
secret_key = Sodium::SecretBuffer.new(SECRETKEYBYTES)
crypto_sign_keypair(public_key, secret_key)
secret_key.noaccess
[public_key, secret_key]
end
|
.memory_locked_seed_keypair(seed) ⇒ Object
.open(sealed_message, public_key, encoding = nil) ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/crypto/sign.rb', line 93
def open(sealed_message, public_key, encoding = nil)
sealed_message_len = get_size(sealed_message)
check_length(public_key, PUBLICKEYBYTES, :PublicKey)
unsealed_message = zeros(sealed_message_len - BYTES)
unsealed_message_len = FFI::MemoryPointer.new(:ulong_long)
if crypto_sign_open(unsealed_message, unsealed_message_len, sealed_message, sealed_message_len, public_key) == -1
raise Sodium::CryptoError, "Incorrect signature", caller
end
if encoding
unsealed_message.force_encoding(encoding)
end
unsealed_message
end
|
.seed_keypair(seed) ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/crypto/sign.rb', line 44
def seed_keypair(seed)
check_length(seed, SEEDBYTES, :Seed)
public_key = zeros(PUBLICKEYBYTES)
secret_key = zeros(SECRETKEYBYTES)
seed.readonly if seed.is_a?(Sodium::SecretBuffer)
crypto_sign_seed_keypair(public_key, secret_key, seed)
[public_key, secret_key]
ensure
seed.noaccess if seed.is_a?(Sodium::SecretBuffer)
end
|
.sign(message, secret_key) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/crypto/sign.rb', line 80
def sign(message, secret_key)
message_len = get_size(message)
check_length(secret_key, SECRETKEYBYTES, :SecretKey)
sealed_message = zeros(message_len + BYTES)
secret_key.readonly if secret_key.is_a?(Sodium::SecretBuffer)
crypto_sign(sealed_message, nil, message, message_len, secret_key)
sealed_message
ensure
secret_key.noaccess if secret_key.is_a?(Sodium::SecretBuffer)
end
|
.verify_detached(signature, message, public_key) ⇒ Object
122
123
124
125
126
|
# File 'lib/crypto/sign.rb', line 122
def verify_detached(signature, message, public_key)
check_length(signature, BYTES, :Signature)
crypto_sign_verify_detached(signature, message, get_size(message), public_key) == 0
end
|