module Crypto::Sign
Constants
- BYTES
- PRIMITIVE
- PUBLICKEYBYTES
- SECRETKEYBYTES
- SEEDBYTES
Public Instance Methods
detached(message, secret_key)
click to toggle source
# 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()
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# File lib/crypto/sign.rb, line 66 def memory_locked_seed_keypair(seed) check_length(seed, SEEDBYTES, :Seed) public_key = zeros(PUBLICKEYBYTES) secret_key = Sodium::SecretBuffer.new(SECRETKEYBYTES) seed.readonly if seed.is_a?(Sodium::SecretBuffer) crypto_sign_seed_keypair(public_key, secret_key, seed) secret_key.noaccess [public_key, secret_key] ensure seed.noaccess if seed.is_a?(Sodium::SecretBuffer) end
open(sealed_message, public_key, encoding = nil)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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