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
onirc.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.