NAME

Crypt::Sodium::XS::scalarmult - Point-scalar multiplication over the edwards25519 curve

SYNOPSIS

use Crypt::Sodium::XS::scalarmult ':default';
use Crypt::Sodium::XS 'sodium_random_bytes';

my $keysize = Crypt::Sodium::XS->box->SECRETKEYBYTES;
my $client_sk = sodium_random_bytes($keysize);
my $client_pk = scalarmult_base($client_sk);
my $server_sk = sodium_random_bytes($keysize);
my $server_pk = scalarmult_base($client_sk);

# do not use output directly for key exchange use Crypt::Sodium::XS::kx.
# or, if you insist:

use Crypt::Sodium::XS::generichash 'generichash_init';

# client side:
my $q = scalarmult($client_sk, $server_pk);
my $hasher = generichash_init();
$hasher->update($q, $client_pk, $server_pk);
my $client_shared_secret = $hasher->final;

# server side:
my $q = scalarmult($server_sk, $client_pk);
my $hasher = generichash_init();
$hasher->update($q, $client_pk, $server_pk);
my $server_shared_secret = $hasher->final;

# $client_shared_secret and $server_shared_secret are now identical keys.

DESCRIPTION

Crypt::Sodium::XS::scalarmult provides an API to multiply a point on the edwards25519 curve.

This can be used as a building block to construct key exchange mechanisms, or more generally to compute a public key from a secret key. For key exchange, you generally want to use Crypt::Sodium::XS::kx instead.

FUNCTIONS

Nothing is exported by default. A :default tag imports the functions and constants as documented below.

scalarmult_keygen

my $secret_key = scalarmult_keygen();

scalarmult_base

my $public_key = scalarmult_base($secret_key);

scalarmult

my $q = scalarmult($my_secret_key, $their_public_key);

CONTSANTS

scalarmult_BYTES

my $public_key_length = scalarmult_BYTES();

scalarmult_SCALARBYTES

my $shared_and_secret_key_length = scalarmult_SCALARBYTES();

PRIMITIVES

There are no primitive-specific functions for this module. It always uses X25519 (ECDH over Curve25519). See RFC 7748.

SEE ALSO

Crypt::Sodium::XS
Crypt::Sodium::XS::OO::scalarmult
https://doc.libsodium.org/advanced/scalar_multiplication

FEEDBACK

For reporting bugs, giving feedback, submitting patches, etc. please use the following:

  • IRC channel #sodium on irc.perl.org.

  • Email the author directly.

For any security sensitive reports, please email the author directly or contact privately via IRC.

AUTHOR

Brad Barden <perlmodules@5c30.org>

COPYRIGHT & LICENSE

Copyright (c) 2022 Brad Barden. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.