NAME
Crypt::Sodium::XS::OO::kx - Asymmetric (public/secret key) derivation from client/server asymmetric key pairs
SYNOPSIS
use Crypt::Sodium::XS;
my $kx = Crypt::Sodium::XS->kx;
# client
my ($client_pk, $client_sk) = $kx->keypair;
my ($server_pk, $server_sk) = $kx->keypair;
# client must have server's public key
# shared keys for server->client (client_rx) and client->server (client_tx)
my ($client_rx, $client_tx)
= $kx->client_session_keys($client_pk, $client_sk, $server_pk);
# server must have client's public key
# shared keys for client->server (server_rx) and server->client (server_tx)
my ($server_rx, $server_tx)
= $kx->client_session_keys($server_pk, $server_sk, $client_pk);
DESCRIPTION
Using Crypt::Sodium::XS::kx, two parties can securely compute a set of shared keys using their peer's public key and their own secret key.
CONSTRUCTOR
new
my $kx = Crypt::Sodium::XS::OO::kx->new;
my $kx = Crypt::Sodium::XS::OO::kx->new(primitive => 'x25519blake2b');
my $kx = Crypt::Sodium::XS->kx;
Returns a new kx object for the given primitive. If not given, the default primitive is default
.
METHODS
PRIMITIVE
my $kx = Crypt::Sodium::XS::OO::kx->new;
my $default_primitive = $kx->PRIMITIVE;
PUBLICKEYBYTES
my $public_key_length = $kx->PUBLICKEYBYTES;
SECRETKEYBYTES
my $secret_key_length = $kx->SECRETKEYBYTES;
SEEDBYTES
my $seed_length = $kx->SEEDKEYBYTES;
SESSIONKEYBYTES
my $session_key_length = $kx->SESSIONKEYBYTES;
primitives
my @primitives = $kx->primitives;
Returns a list of all supported primitive names (including 'default').
keypair
my ($public_key, $secret_key) = $kx->keypair;
my ($public_key, $secret_key) = $kx->keypair($seed);
$seed
is optional. If provided, it must be "kx_SEEDBYTES" in length. Using the same seed will generate the same key pair, so it must be kept confidential. If omitted, a key pair is randomly generated.
client_session_keys
my ($client_rx, $client_tx)
= $kx->client_session_keys($client_pk, $client_sk, $server_pk);
server_session_keys
my ($server_rx, $server_tx)
= $kx->client_session_keys($server_pk, $server_sk, $client_pk);
SEE ALSO
FEEDBACK
For reporting bugs, giving feedback, submitting patches, etc. please use the following:
IRC channel
#sodium
onirc.perl.org
.Email the author directly.
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.