Files
core/library/sodium-plus/docs/SodiumPlus/digital-signatures.md
2024-03-10 22:38:21 +00:00

3.7 KiB

Digital signatures

See also: Libsodium's documentation on its public-key signature features.

crypto_sign

See also: the detached API below.

Sign a message with Ed25519, returning a signed message (prefixed with the signature).

Parameters and their respective types:

  1. {string|Buffer} message
  2. {Ed25519SecretKey} secretKey

Returns a Promise that resolves to a Buffer.

crypto_sign_open

Verify a signed message with Ed25519, returning the original message if the signature is valid.

Parameters and their respective types:

  1. {string|Buffer} signedMessage
  2. {Ed25519SecretKey} publicKey

Returns a Promise that resolves to a Buffer.

crypto_sign_detached

Returns the Ed25519 signature of the message, for the given secret key.

Parameters and their respective types:

  1. {string|Buffer} message
  2. {Ed25519SecretKey} secretKey

Returns a Promise that resolves to a Buffer.

crypto_sign_verify_detached

Returns true if the Ed25519 signature is valid for a given message and public key.

Parameters and their respective types:

  1. {string|Buffer} message
  2. {Ed25519PublicKey} publicKey
  3. {Buffer} signature

Returns a Promise that resolves to a boolean.

crypto_sign_keypair

Returns a Promise that resolves to a CryptographyKey containing a 96-byte Buffer. The first 64 bytes are your Ed25519 secret key, the latter 32 are your Ed25519 public key.

crypto_sign_seed_keypair

Parameters and their respective types:

  1. {Buffer} 32 byte seed

Returns a Promise that resolves to a CryptographyKey containing a 96-byte Buffer. The first 64 bytes are your Ed25519 secret key, the latter 32 are your Ed25519 public key.

crypto_sign_publickey

Parameters and their respective types:

  1. {CryptographyKey} (buffer must be 96 bytes long)

Returns a Promise that resolves to a Ed25519PublicKey.

crypto_sign_secretkey

Parameters and their respective types:

  1. {CryptographyKey} (buffer must be 96 bytes long)

Returns a Promise that resolves to a Ed25519SecretKey.

crypto_sign_ed25519_sk_to_curve25519

Obtain a birationally equivalent X25519 secret key, given an Ed25519 secret key.

Parameters and their respective types:

  1. {Ed25519SecretKey}

Returns a Promise that resolves to an X25519SecretKey.

crypto_sign_ed25519_pk_to_curve25519

Obtain a birationally equivalent X25519 public key, given an Ed25519 public key.

Parameters and their respective types:

  1. {Ed25519PublicKey}

Returns a Promise that resolves to an X25519PublicKey.

Example for crypto_sign

const { SodiumPlus } = require('sodium-plus');
let sodium;

(async function () {
    if (!sodium) sodium = await SodiumPlus.auto();
    let aliceKeypair = await sodium.crypto_sign_keypair();
        let aliceSecret = await sodium.crypto_sign_secretkey(aliceKeypair);
        let alicePublic = await sodium.crypto_sign_publickey(aliceKeypair);
    
    let message = 'This is something I need to sign publicly.';

    // Detached mode:
    let signature = await sodium.crypto_sign_detached(message, aliceSecret);
    console.log(signature.toString('hex'));
    if (await sodium.crypto_sign_verify_detached(message, alicePublic, signature)) {
        console.log("Signature is valid.");
    } else {
        console.error("Invalid signature!");
    }

    // NaCl (crypto_sign / crypto_sign_open):
    let signed = await sodium.crypto_sign(message, aliceSecret);
    let opened = await sodium.crypto_sign_open(signed, alicePublic);
    console.log(opened.toString());
})();