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 )