NAME
HEAT::Crypto - HEAT cryptographic routines
SYNOPSIS
use HEAT::Crypto qw(keygen shared_key sign verify encrypt decrypt);
# generate public-private key pairs
my $alice = keygen();
my $bob = keygen();
# compute shared secret
my $secret = shared_key($alice->{k}, $bob->{p});
shared_key($bob->{k}, $alice->{p}) eq $secret or die;
# message signing and verifying
my $signature = sign($alice->{k}, $message);
verify($signature, $message, $alice->{p}) or die;
# message encryption and decryption
my $encrypted = encrypt($message, $secret);
decrypt($encrypted, $secret) eq $message or die;
DESCRIPTION
This module provides HEAT compatible ECDH key agreement, signing and message encryption ported to perl from the HEAT SDK.
The functions provided below need to be imported explicitly.
- keygen()
- keygen( $seed_key );
-
Generates a new key pair. It returns a hash with 3 values:
{ p => <public key bytes>, k => <private key bytes>, s => <signing key bytes>, }
-
Computes shared secret.
Returns the key bytes.
- sign( $private_key, $message );
-
Sign message with the private key.
Returns the signature bytes.
- verify( $signature, $message, $public_key );
-
Verifies the message signature against the public key.
Returns 1 on success.
- encrypt( $data, $key );
-
Encrypts data with the given key.
In array context it returns the encryption nonce, initialization vector and cypher text. In scalar context it concatenates them.
- decrypt( $data, $key );
-
Decrypts data with the given key. Data is expected to be in the format returned by encrypt();
It returns the decrypted data on success or undefined in case of failure.
- priv_to_pub_key( $private_key )
-
Derives the public key from the private key.
- account_id( $public_key )
-
Derives the account ID from the public key.
- keyspec( $key )
- keyspec( $key, $is_private )
-
Parses the key specification into a 32 bytes buffer. A key can be specified as a 64 characters hexadecimal string and a private key can be specified as a secret phrase. All functions accepting key parameters use this functions to read them.
AUTHOR
Toma Mazilu
Curve25519 ECDH C implementation by Matthijs van Duin
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself