diff --git a/inc/CryptX_PK_Ed25519.xs.inc b/inc/CryptX_PK_Ed25519.xs.inc index 993c4f7..b33b1e7 100644 --- a/inc/CryptX_PK_Ed25519.xs.inc +++ b/inc/CryptX_PK_Ed25519.xs.inc @@ -206,25 +206,15 @@ RETVAL SV * -sign_hash(Crypt::PK::Ed25519 self, SV * data, const char * hash_name = "SHA1") - ALIAS: - sign_message = 1 - CODE: - { - int rv, id; - unsigned char buffer[1024], tmp[MAXBLOCKSIZE], *data_ptr = NULL; - unsigned long tmp_len = MAXBLOCKSIZE, buffer_len = 1024; +sign_message(Crypt::PK::Ed25519 self, SV * data) + CODE: + { + int rv; + unsigned char buffer[64], *data_ptr = NULL; + unsigned long buffer_len = 64; STRLEN data_len = 0; data_ptr = (unsigned char *)SvPVbyte(data, data_len); - if (ix == 1) { - id = _find_hash(hash_name); - if (id == -1) croak("FATAL: find_hash failed for '%s'", hash_name); - rv = hash_memory(id, data_ptr, (unsigned long)data_len, tmp, &tmp_len); - if (rv != CRYPT_OK) croak("FATAL: hash_memory failed: %s", error_to_string(rv)); - data_ptr = tmp; - data_len = tmp_len; - } rv = ed25519_sign(data_ptr, (unsigned long)data_len, buffer, &buffer_len, &self->key); if (rv != CRYPT_OK) croak("FATAL: ed25519_sign failed: %s", error_to_string(rv)); RETVAL = newSVpvn((char*)buffer, buffer_len); @@ -233,30 +223,19 @@ RETVAL int -verify_hash(Crypt::PK::Ed25519 self, SV * sig, SV * data, const char * hash_name = "SHA1") - ALIAS: - verify_message = 1 - CODE: - { - int rv, stat, id; - unsigned char tmp[MAXBLOCKSIZE], *data_ptr = NULL, *sig_ptr = NULL; - unsigned long tmp_len = MAXBLOCKSIZE; +verify_message(Crypt::PK::Ed25519 self, SV * sig, SV * data) + CODE: + { + int rv, stat; + unsigned char *data_ptr = NULL, *sig_ptr = NULL; STRLEN data_len = 0, sig_len = 0; data_ptr = (unsigned char *)SvPVbyte(data, data_len); sig_ptr = (unsigned char *)SvPVbyte(sig, sig_len); - if (ix == 1) { - id = _find_hash(hash_name); - if (id == -1) croak("FATAL: find_hash failed for '%s'", hash_name); - rv = hash_memory(id, data_ptr, (unsigned long)data_len, tmp, &tmp_len); - if (rv != CRYPT_OK) croak("FATAL: hash_memory failed: %s", error_to_string(rv)); - data_ptr = tmp; - data_len = tmp_len; - } - RETVAL = 1; + RETVAL = 0; stat = 0; rv = ed25519_verify(data_ptr, (unsigned long)data_len, sig_ptr, (unsigned long)sig_len, &stat, &self->key); - if (rv != CRYPT_OK || stat != 1) RETVAL = 0; + if (rv == CRYPT_OK && stat == 1) RETVAL = 1; } OUTPUT: RETVAL diff --git a/lib/Crypt/PK/Ed25519.pm b/lib/Crypt/PK/Ed25519.pm index 90204ab..ffe8686 100644 --- a/lib/Crypt/PK/Ed25519.pm +++ b/lib/Crypt/PK/Ed25519.pm @@ -327,25 +327,17 @@ Export raw public/private key - my $private_pem = $pk->export_key_raw('private'); - #or - my $public_pem = $pk->export_key_raw('public'); + my $private_bytes = $pk->export_key_raw('private'); + #or + my $public_bytes = $pk->export_key_raw('public'); =head2 sign_message my $signature = $priv->sign_message($message); - #or - my $signature = $priv->sign_message($message, $hash_name); - - #NOTE: $hash_name can be 'SHA1' (DEFAULT), 'SHA256' or any other hash supported by Crypt::Digest =head2 verify_message my $valid = $pub->verify_message($signature, $message) - #or - my $valid = $pub->verify_message($signature, $message, $hash_name); - - #NOTE: $hash_name can be 'SHA1' (DEFAULT), 'SHA256' or any other hash supported by Crypt::Digest =head2 is_private