Author image Toma Mazilu
and 1 contributors


HEAT::Crypto - HEAT cryptographic routines


  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;


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( $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.


Toma Mazilu

Curve25519 ECDH C implementation by Matthijs van Duin


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