Author image Toma Mazilu
and 1 contributors

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>,
  }
shared_key( $private_key, $public_key );

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

SEE ALSO