HEAT-Crypto
view release on metacpan or search on metacpan
lib/HEAT/Crypto.pm view on Meta::CPAN
for (my $i = 0; $i < 32; $i++) {
vec($key, $i, 8) = vec($key, $i, 8) ^ vec($nonce, $i, 8);
}
my $decrypted = eval { $cbc->decrypt($encrypted, hash($key), $iv) };
return undef if $@;
return $decrypted;
}
1;
__END__
=head1 NAME
HEAT::Crypto - HEAT cryptographic routines
=head1 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;
=head1 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.
=over 4
=item keygen()
=item 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>,
}
=item shared_key( $private_key, $public_key );
Computes shared secret.
Returns the key bytes.
=item sign( $private_key, $message );
Sign message with the private key.
Returns the signature bytes.
=item verify( $signature, $message, $public_key );
Verifies the message signature against the public key.
Returns 1 on success.
=item 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.
=item 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.
=item priv_to_pub_key( $private_key )
Derives the public key from the private key.
=item account_id( $public_key )
Derives the account ID from the public key.
=item keyspec( $key )
=item 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.
=back
=head1 AUTHOR
Toma Mazilu
Curve25519 ECDH C implementation by Matthijs van Duin
=head1 LICENSE
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself
=head1 SEE ALSO
=over
=item * L<https://github.com/heatcrypto/heat-sdk>
=back
=cut
( run in 1.808 second using v1.01-cache-2.11-cpan-13bb782fe5a )