diff --git a/perl/FKO/FKO.xs b/perl/FKO/FKO.xs index 3eaa9ba3..d973c668 100644 --- a/perl/FKO/FKO.xs +++ b/perl/FKO/FKO.xs @@ -197,6 +197,7 @@ _get_hmac_type(ctx, hmac_type) CODE: RETVAL = fko_get_spa_hmac_type(ctx, &hmac_type); OUTPUT: + hmac_type RETVAL int diff --git a/perl/FKO/lib/FKO.pm b/perl/FKO/lib/FKO.pm index 0b516b91..15ff3a88 100644 --- a/perl/FKO/lib/FKO.pm +++ b/perl/FKO/lib/FKO.pm @@ -16,7 +16,7 @@ use warnings; use Carp; require Exporter; -our $VERSION = '0.23'; +our $VERSION = '2.0.1'; our @ISA = qw(Exporter); @@ -36,18 +36,20 @@ our ( require "FKO_Constants.pl"; our %EXPORT_TAGS = ( - 'message_types' => \@MSG_TYPES, - 'digest_types' => \@DIGEST_TYPES, + 'message_types' => \@MSG_TYPES, + 'digest_types' => \@DIGEST_TYPES, 'hmac_digest_types' => \@HMAC_DIGEST_TYPES, - 'encryption_types' => \@ENCRYPTION_TYPES, - 'encryption_modes' => \@ENCRYPTION_MODES, - 'errors' => \@ERROR_CODES, + 'encryption_types' => \@ENCRYPTION_TYPES, + 'encryption_modes' => \@ENCRYPTION_MODES, + 'errors' => \@ERROR_CODES, + 'types' => [ @MSG_TYPES, @DIGEST_TYPES, @HMAC_DIGEST_TYPES, @ENCRYPTION_TYPES ], + 'all' => [ @MSG_TYPES, @HMAC_DIGEST_TYPES, @@ -72,10 +74,8 @@ sub new { my $class = shift; my $data = shift; my $dc_pw = shift; - my $dc_pw_len = shift; my $enc_mode = shift; - my $hmac_pw = shift; - my $hmac_pw_len = shift; + my $hmac_pw = shift || ''; my $hmac_type = shift; my $res; @@ -84,10 +84,10 @@ sub new { # If data was passed, call _init_ctx_with_data. If a password was # not defined, then pass 0. # - if($data) { + if(defined($data) and $data) { if(defined($dc_pw)) { - $ctx = _init_ctx_with_data($data, $dc_pw, $dc_pw_len, - $enc_mode, $hmac_pw, $hmac_pw_len, $hmac_type); + $ctx = _init_ctx_with_data($data, $dc_pw, length($dc_pw), + $enc_mode, $hmac_pw, length($hmac_pw), $hmac_type); } else { $ctx = _init_ctx_with_data_only($data); } @@ -319,12 +319,11 @@ sub spa_hmac { my $self = shift; my $recompute = shift || 0; my $hmac_key = shift || ''; - my $hmac_key_len = shift || 0; my $val = ''; return FKO::_set_spa_hmac($self->{_ctx}) - if($recompute and $hmac_key and $hmac_key_len); + if($recompute and $hmac_key); $self->{_err} = FKO::_get_spa_hmac($self->{_ctx}, $val); @@ -477,27 +476,23 @@ sub encoded_data { sub spa_data_final { my $self = shift; my $key = shift || ''; - my $key_len = shift || 0; my $hmac_key = shift || ''; - my $hmac_key_len = shift || 0; - return FKO::_spa_data_final($self->{_ctx}, $key, $key_len, $hmac_key, $hmac_key_len); + return FKO::_spa_data_final($self->{_ctx}, $key, length($key), $hmac_key, length($hmac_key)); } sub encrypt_spa_data { my $self = shift; my $key = shift || ''; - my $key_len = shift || 0; - return FKO::_encrypt_spa_data($self->{_ctx}, $key, $key_len) + return FKO::_encrypt_spa_data($self->{_ctx}, $key, length($key)); } sub decrypt_spa_data { my $self = shift; my $key = shift || ''; - my $key_len = shift || 0; - return FKO::_decrypt_spa_data($self->{_ctx}, $key, $key_len) + return FKO::_decrypt_spa_data($self->{_ctx}, $key, length($key)); } sub encode_spa_data { @@ -513,17 +508,15 @@ sub decode_spa_data { sub verify_hmac { my $self = shift; my $hmac_key = shift || ''; - my $hmac_key_len = shift || 0; - return FKO::_verify_hmac($self->{_ctx}, $hmac_key, $hmac_key_len) + return FKO::_verify_hmac($self->{_ctx}, $hmac_key, length($hmac_key)); } sub set_spa_hmac { my $self = shift; my $hmac_key = shift || ''; - my $hmac_key_len = shift || 0; - return FKO::_set_spa_hmac($self->{_ctx}, $hmac_key, $hmac_key_len) + return FKO::_set_spa_hmac($self->{_ctx}, $hmac_key, length($hmac_key)); } sub DESTROY { diff --git a/perl/FKO/lib/FKO_Constants.pl b/perl/FKO/lib/FKO_Constants.pl index 868bc281..a345e58d 100644 --- a/perl/FKO/lib/FKO_Constants.pl +++ b/perl/FKO/lib/FKO_Constants.pl @@ -24,6 +24,8 @@ our @MSG_TYPES = qw( # Digest types tag list. # our @DIGEST_TYPES = qw( + FKO_DIGEST_INVALID_DATA + FKO_DIGEST_UNKNOWN FKO_DIGEST_MD5 FKO_DIGEST_SHA1 FKO_DIGEST_SHA256 @@ -34,6 +36,8 @@ our @DIGEST_TYPES = qw( # HMAC digest types tag list. # our @HMAC_DIGEST_TYPES = qw( + FKO_HMAC_INVALID_DATA + FKO_HMAC_UNKNOWN FKO_HMAC_MD5 FKO_HMAC_SHA1 FKO_HMAC_SHA256 @@ -44,6 +48,8 @@ our @HMAC_DIGEST_TYPES = qw( # Encryption types tag list. # our @ENCRYPTION_TYPES = qw( + FKO_ENCRYPTION_INVALID_DATA + FKO_ENCRYPTION_UNKNOWN FKO_ENCRYPTION_RIJNDAEL FKO_ENCRYPTION_GPG ); @@ -51,6 +57,7 @@ our @ENCRYPTION_TYPES = qw( # Encryption modes tag list. # our @ENCRYPTION_MODES = qw( + FKO_ENC_MODE_UNKNOWN FKO_ENC_MODE_ECB FKO_ENC_MODE_CBC FKO_ENC_MODE_CFB @@ -69,6 +76,90 @@ our @ERROR_CODES = qw( FKO_ERROR_MEMORY_ALLOCATION FKO_ERROR_FILESYSTEM_OPERATION FKO_ERROR_INVALID_DATA + FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII + FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS + FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE + FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL + FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING + FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL + FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING + FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING + FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL + FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL + FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING + FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL + FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL + FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG + FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG + FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING + FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL + FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN + FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING + FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL + FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL + FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL + FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL + FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING + FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL + FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY + FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING + FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING + FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING + FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING + FKO_ERROR_INVALID_DATA_NAT_EMPTY + FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL + FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING + FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL + FKO_ERROR_INVALID_DATA_USER_MISSING + FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL + FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL + FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN + FKO_ERROR_INVALID_DATA_UTIL_STROL_GT_MAX FKO_ERROR_DATA_TOO_LARGE FKO_ERROR_USERNAME_UNKNOWN FKO_ERROR_INCOMPLETE_SPA_DATA @@ -127,24 +218,31 @@ use constant { FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG => 6, # Digest types - FKO_DIGEST_MD5 => 1, - FKO_DIGEST_SHA1 => 2, - FKO_DIGEST_SHA256 => 3, - FKO_DIGEST_SHA384 => 4, - FKO_DIGEST_SHA512 => 5, + FKO_DIGEST_INVALID_DATA => -1, + FKO_DIGEST_UNKNOWN => 0, + FKO_DIGEST_MD5 => 1, + FKO_DIGEST_SHA1 => 2, + FKO_DIGEST_SHA256 => 3, + FKO_DIGEST_SHA384 => 4, + FKO_DIGEST_SHA512 => 5, # HMAC digest types - FKO_HMAC_MD5 => 1, - FKO_HMAC_SHA1 => 2, - FKO_HMAC_SHA256 => 3, - FKO_HMAC_SHA384 => 4, - FKO_HMAC_SHA512 => 5, + FKO_HMAC_INVALID_DATA => -1, + FKO_HMAC_UNKNOWN => 0, + FKO_HMAC_MD5 => 1, + FKO_HMAC_SHA1 => 2, + FKO_HMAC_SHA256 => 3, + FKO_HMAC_SHA384 => 4, + FKO_HMAC_SHA512 => 5, # Encryption types - FKO_ENCRYPTION_RIJNDAEL => 1, - FKO_ENCRYPTION_GPG => 2, + FKO_ENCRYPTION_INVALID_DATA => -1, + FKO_ENCRYPTION_UNKNOWN => 0, + FKO_ENCRYPTION_RIJNDAEL => 1, + FKO_ENCRYPTION_GPG => 2, # Encryption modes + FKO_ENC_MODE_UNKNOWN => 0, FKO_ENC_MODE_ECB => 1, FKO_ENC_MODE_CBC => 2, FKO_ENC_MODE_CFB => 3, @@ -155,54 +253,139 @@ use constant { FKO_ENC_MODE_CBC_LEGACY_IV => 8, # FKO error codes - FKO_SUCCESS => 0, - FKO_ERROR_CTX_NOT_INITIALIZED => 1, - FKO_ERROR_MEMORY_ALLOCATION => 2, - FKO_ERROR_FILESYSTEM_OPERATION => 3, - FKO_ERROR_INVALID_DATA => 4, - FKO_ERROR_DATA_TOO_LARGE => 5, - FKO_ERROR_USERNAME_UNKNOWN => 6, - FKO_ERROR_INCOMPLETE_SPA_DATA => 7, - FKO_ERROR_MISSING_ENCODED_DATA => 8, - FKO_ERROR_INVALID_DIGEST_TYPE => 9, - FKO_ERROR_INVALID_ALLOW_IP => 10, - FKO_ERROR_INVALID_SPA_COMMAND_MSG => 11, - FKO_ERROR_INVALID_SPA_ACCESS_MSG => 12, - FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG => 13, - FKO_ERROR_INVALID_ENCRYPTION_TYPE => 14, - FKO_ERROR_WRONG_ENCRYPTION_TYPE => 15, - FKO_ERROR_DECRYPTION_SIZE => 16, - FKO_ERROR_DECRYPTION_FAILURE => 17, - FKO_ERROR_DIGEST_VERIFICATION_FAILED => 18, - FKO_ERROR_UNSUPPORTED_FEATURE => 19, - FKO_ERROR_UNKNOWN => 20, + FKO_SUCCESS => 0, + FKO_ERROR_CTX_NOT_INITIALIZED => 1, + FKO_ERROR_MEMORY_ALLOCATION => 2, + FKO_ERROR_FILESYSTEM_OPERATION => 3, + FKO_ERROR_INVALID_DATA => 4, + FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL => 5, + FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII => 6, + FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS => 7, + FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE => 8, + FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING => 9, + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING => 10, + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG => 11, + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL => 12, + FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL => 13, + FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING => 14, + FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG => 15, + FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL => 16, + FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING => 17, + FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG => 18, + FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING => 19, + FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG => 20, + FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL => 21, + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING => 22, + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG => 23, + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL => 24, + FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL => 25, + FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL => 26, + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING => 27, + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG => 28, + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL => 29, + FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL => 30, + FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING => 31, + FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL => 32, + FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG => 33, + FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL => 34, + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING => 35, + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG => 36, + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL => 37, + FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL => 38, + FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG => 39, + FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL => 40, + FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL => 41, + FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG => 42, + FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL => 43, + FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL => 44, + FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL => 45, + FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL => 46, + FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL => 47, + FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL => 48, + FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING => 49, + FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL => 50, + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL => 51, + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL => 52, + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL => 53, + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL => 54, + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL => 55, + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL => 56, + FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL => 57, + FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL => 58, + FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL => 59, + FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN => 60, + FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING => 61, + FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL => 62, + FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL => 63, + FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL => 64, + FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL => 65, + FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL => 66, + FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL => 67, + FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL => 68, + FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL => 69, + FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL => 70, + FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL => 71, + FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL => 72, + FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING => 73, + FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL => 74, + FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY => 75, + FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING => 76, + FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING => 77, + FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING => 78, + FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING => 79, + FKO_ERROR_INVALID_DATA_NAT_EMPTY => 80, + FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL => 81, + FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING => 82, + FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL => 83, + FKO_ERROR_INVALID_DATA_USER_MISSING => 84, + FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL => 85, + FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL => 86, + FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN => 87, + FKO_ERROR_INVALID_DATA_UTIL_STROL_GT_MAX => 88, + FKO_ERROR_DATA_TOO_LARGE => 89, + FKO_ERROR_USERNAME_UNKNOWN => 90, + FKO_ERROR_INCOMPLETE_SPA_DATA => 91, + FKO_ERROR_MISSING_ENCODED_DATA => 92, + FKO_ERROR_INVALID_DIGEST_TYPE => 93, + FKO_ERROR_INVALID_ALLOW_IP => 94, + FKO_ERROR_INVALID_SPA_COMMAND_MSG => 95, + FKO_ERROR_INVALID_SPA_ACCESS_MSG => 96, + FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG => 97, + FKO_ERROR_INVALID_ENCRYPTION_TYPE => 98, + FKO_ERROR_WRONG_ENCRYPTION_TYPE => 99, + FKO_ERROR_DECRYPTION_SIZE => 100, + FKO_ERROR_DECRYPTION_FAILURE => 101, + FKO_ERROR_DIGEST_VERIFICATION_FAILED => 102, + FKO_ERROR_UNSUPPORTED_HMAC_MODE => 103, + FKO_ERROR_UNSUPPORTED_FEATURE => 104, + FKO_ERROR_UNKNOWN => 105, # Start GPGME-related errors - GPGME_ERR_START => 21, - FKO_ERROR_MISSING_GPG_KEY_DATA => 22, - FKO_ERROR_GPGME_NO_OPENPGP => 23, - FKO_ERROR_GPGME_CONTEXT => 24, - FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ => 25, - FKO_ERROR_GPGME_SET_PROTOCOL => 26, - FKO_ERROR_GPGME_CIPHER_DATA_OBJ => 27, - FKO_ERROR_GPGME_BAD_PASSPHRASE => 28, - FKO_ERROR_GPGME_ENCRYPT_SIGN => 29, - FKO_ERROR_GPGME_CONTEXT_SIGNER_KEY => 30, - FKO_ERROR_GPGME_SIGNER_KEYLIST_START => 31, - FKO_ERROR_GPGME_SIGNER_KEY_NOT_FOUND => 32, - FKO_ERROR_GPGME_SIGNER_KEY_AMBIGUOUS => 33, - FKO_ERROR_GPGME_ADD_SIGNER => 34, - FKO_ERROR_GPGME_CONTEXT_RECIPIENT_KEY => 35, - FKO_ERROR_GPGME_RECIPIENT_KEYLIST_START => 36, - FKO_ERROR_GPGME_RECIPIENT_KEY_NOT_FOUND => 37, - FKO_ERROR_GPGME_RECIPIENT_KEY_AMBIGUOUS => 38, - FKO_ERROR_GPGME_DECRYPT_FAILED => 39, - FKO_ERROR_GPGME_DECRYPT_UNSUPPORTED_ALGORITHM => 40, - FKO_ERROR_GPGME_BAD_GPG_EXE => 41, - FKO_ERROR_GPGME_BAD_HOME_DIR => 42, - FKO_ERROR_GPGME_SET_HOME_DIR => 43, - FKO_ERROR_GPGME_NO_SIGNATURE => 44, - FKO_ERROR_GPGME_BAD_SIGNATURE => 45, - FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED => 46, + GPGME_ERR_START => 106, + FKO_ERROR_MISSING_GPG_KEY_DATA => 107, + FKO_ERROR_GPGME_NO_OPENPGP => 108, + FKO_ERROR_GPGME_CONTEXT => 109, + FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ => 110, + FKO_ERROR_GPGME_SET_PROTOCOL => 111, + FKO_ERROR_GPGME_CIPHER_DATA_OBJ => 112, + FKO_ERROR_GPGME_BAD_PASSPHRASE => 113, + FKO_ERROR_GPGME_ENCRYPT_SIGN => 114, + FKO_ERROR_GPGME_CONTEXT_SIGNER_KEY => 115, + FKO_ERROR_GPGME_SIGNER_KEYLIST_START => 116, + FKO_ERROR_GPGME_SIGNER_KEY_NOT_FOUND => 117, + FKO_ERROR_GPGME_SIGNER_KEY_AMBIGUOUS => 118, + FKO_ERROR_GPGME_ADD_SIGNER => 119, + FKO_ERROR_GPGME_CONTEXT_RECIPIENT_KEY => 120, + FKO_ERROR_GPGME_RECIPIENT_KEYLIST_START => 121, + FKO_ERROR_GPGME_RECIPIENT_KEY_NOT_FOUND => 122, + FKO_ERROR_GPGME_RECIPIENT_KEY_AMBIGUOUS => 123, + FKO_ERROR_GPGME_DECRYPT_FAILED => 124, + FKO_ERROR_GPGME_DECRYPT_UNSUPPORTED_ALGORITHM => 125, + FKO_ERROR_GPGME_BAD_GPG_EXE => 126, + FKO_ERROR_GPGME_BAD_HOME_DIR => 127, + FKO_ERROR_GPGME_SET_HOME_DIR => 128, + FKO_ERROR_GPGME_NO_SIGNATURE => 129, + FKO_ERROR_GPGME_BAD_SIGNATURE => 130, + FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED => 131, }; 1; diff --git a/perl/FKO/t/00_init.t b/perl/FKO/t/00_init.t index d71edd95..5e64b776 100644 --- a/perl/FKO/t/00_init.t +++ b/perl/FKO/t/00_init.t @@ -16,9 +16,15 @@ BEGIN { use_ok('FKO') }; # Test support vars # -my $test_spa_data = '/6jQlii54itZX2d7uQb0CzKgBEKk9T9dOD5COpZM6tdL7I95+GXvbjBgCoDObwTpBSWGEPPEpLmiVIe0iQoEMRT4bDWindoHopxggByzr3aOToQZAhBgEIsMfC+ucz6sragIieQORkmr3OjtOAHI1hZjSMXadiXKo'; +my $test_spa_data = ''; +my $test_spa_data_pw = 'test1234567890'; +my $test_hmac_key = '0987654321test this is only a test'; -my $test_spa_data_pw = 'sdf'; +my $test_encryption_mode = $FKO::FKO_ENC_MODE_ECB; +my $test_hmac_type = $FKO::FKO_HMAC_SHA256; + +my $test_spa_data_pw_len = length($test_spa_data_pw); +my $test_hmac_key_len = length($test_hmac_key); ############################################################################## @@ -37,9 +43,12 @@ ok(!defined($f1->{_ctx})); # 5 - Init with data # -my $f2 = FKO->new($test_spa_data, $test_spa_data_pw); +my $f2 = FKO->new($test_spa_data, $test_spa_data_pw, $test_spa_data_pw_len, + $test_encryption_mode, $test_hmac_key, $test_hmac_key_len, + $test_hmac_type); isa_ok( $f2, 'FKO' ); + # 6 - Destroy full # $f2->destroy(); diff --git a/perl/FKO/t/01_constants.t b/perl/FKO/t/01_constants.t index 8cedc984..b2c81c8b 100644 --- a/perl/FKO/t/01_constants.t +++ b/perl/FKO/t/01_constants.t @@ -11,16 +11,18 @@ BEGIN { use FKO qw(:all); our $tc_total = scalar(@FKO::MSG_TYPES) - + scalar(@FKO::DIGEST_TYPES) - + scalar(@FKO::ENCRYPTION_TYPES) - + scalar(@FKO::ERROR_CODES); + + scalar(@FKO::DIGEST_TYPES) + + scalar(@FKO::HMAC_DIGEST_TYPES) + + scalar(@FKO::ENCRYPTION_TYPES) + + scalar(@FKO::ENCRYPTION_MODE) + + scalar(@FKO::ERROR_CODES); } use Test::More tests => $tc_total + 1; my $tc_cnt = 0; -# 1-7 - Message type constants +# Message type constants # foreach my $mt (@FKO::MSG_TYPES) { $tc_cnt++; @@ -28,7 +30,7 @@ foreach my $mt (@FKO::MSG_TYPES) { ok(defined($val), "Message Type Constant: $mt"); } -# 8-10 - Digest type constants +# Digest type constants # foreach my $dt (@FKO::DIGEST_TYPES) { $tc_cnt++; @@ -36,7 +38,15 @@ foreach my $dt (@FKO::DIGEST_TYPES) { ok(defined($val), "Digest Type Constant: $dt"); } -# 11-12 - Encryption type constants +# HMAC digest type constants +# +foreach my $dt (@FKO::HMAC_DIGEST_TYPES) { + $tc_cnt++; + my $val = eval $dt; + ok(defined($val), "HMAC digest Type Constant: $dt"); +} + +# Encryption type constants # foreach my $et (@FKO::ENCRYPTION_TYPES) { $tc_cnt++; @@ -44,12 +54,20 @@ foreach my $et (@FKO::ENCRYPTION_TYPES) { ok(defined($val), "Encryption Type Constant: $et"); } -# 13-53 - Encryption type constants +# Encryption mode constants +# +foreach my $et (@FKO::ENCRYPTION_MODE) { + $tc_cnt++; + my $val = eval $et; + ok(defined($val), "Encryption Mode Constant: $et"); +} + +# - Encryption type constants # foreach my $ec (@FKO::ERROR_CODES) { $tc_cnt++; my $val = eval $ec; - ok(defined($val), "Encryption Type Constant: $ec"); + ok(defined($val), "Error Code Constant: $ec"); } # Did we test all of the constants? diff --git a/perl/FKO/t/02_functions.t b/perl/FKO/t/02_functions.t index fa63502f..68ae384c 100644 --- a/perl/FKO/t/02_functions.t +++ b/perl/FKO/t/02_functions.t @@ -10,28 +10,37 @@ # use FKO; -use Test::More tests => 96; +use Test::More tests => 533; # Test spa data support vars # my ( - $tsd, $tsd_pw, $tsd_rand, $tsd_user, $tsd_time, $tsd_ver, - $tsd_msg_type, $tsd_msg, $tsd_nat_access, $tsd_server_auth, - $tsd_client_timeout, $tsd_digest, $tsd_encoded, - $tsd_digest_type, $tsd_encryption_type + $tsd, $tsd_pw, $tsd_hmac_key, $tsd_encryption_mode, $tsd_rand, + $tsd_user, $tsd_time, $tsd_ver, $tsd_msg_type, $tsd_msg, + $tsd_nat_access, $tsd_server_auth, $tsd_client_timeout, + $tsd_digest, $tsd_encoded, $tsd_digest_type, + $tsd_hmac_digest_type, $tsd_encryption_type ); # Preset for test # $tuser = 'bubba'; $tuser_pw = 'tsd-bubba'; +$thmac_key = 'This is bubba\'s HMAC key.'; # Defaults # -my $def_tsd_msg = '0.0.0.0,tcp/22'; -my $def_encryption_type = FKO::FKO_ENCRYPTION_RIJNDAEL; -my $def_digest_type = FKO::FKO_DIGEST_SHA256; -my $def_msg_type = FKO::FKO_ACCESS_MSG; +my $def_tsd_msg = '0.0.0.0,tcp/22'; +my $def_encryption_type = FKO::FKO_ENCRYPTION_RIJNDAEL; +my $def_digest_type = FKO::FKO_DIGEST_SHA256; +my $def_msg_type = FKO::FKO_ACCESS_MSG; +my $def_hmac_digest_type = FKO::FKO_HMAC_UNKNOWN; +my $def_encryption_mode = FKO::FKO_ENC_MODE_CBC; + +my $test_hmac_key = '0987654321test this is only a test'; + +my $test_encryption_mode = $FKO::FKO_ENC_MODE_ECB; +my $test_hmac_type = $FKO::FKO_HMAC_SHA256; my $err; @@ -56,7 +65,7 @@ ok($tsd_time =~ /^\d+$/, 'timestamp format'); ok(($tsd_time - $f1_now) < 2, 'default timestamp value'); $tsd_ver = $f1->version(); -ok($tsd_ver =~ /^\d+\.\d+\.\d+$/, 'version format'); +ok($tsd_ver =~ /^\d+\.\d+(:?\.\d+)?$/, 'version format'); $tsd_encryption_type = $f1->encryption_type(); ok($tsd_encryption_type == $def_encryption_type, 'default encryption type'); @@ -67,6 +76,12 @@ ok($tsd_digest_type == $def_digest_type, 'default digest type'); $tsd_msg_type = $f1->spa_message_type(); ok($tsd_msg_type == $def_msg_type, 'default message type'); +$tsd_hmac_digest_type = $f1->hmac_type(); +ok($tsd_hmac_digest_type == $def_hmac_digest_type, 'HMAC digest type'); + +$tsd_encryption_mode = $f1->encryption_mode(); +ok($tsd_encryption_mode == $def_encryption_mode, 'Encryption mode'); + # 10-11 - set and verify username # $err = $f1->username($tuser); @@ -79,10 +94,13 @@ $err = $f1->spa_message($def_tsd_msg); ok($err == 0, 'set spa message'); ok($f1->spa_message() eq $def_tsd_msg, 'set spa message value'); +# Set the hmac digest stuff (none here) +$thmac_key = ''; + # 14 - Finalize the spa data (encode fields , compute digest, encrypt, # and encode all) # -$err = $f1->spa_data_final($tuser_pw); +$err = $f1->spa_data_final($tuser_pw, $thmac_key); ok($err == 0, 'f1 spa data final'); # 15-16 - Get some of the current spa data for later tests. @@ -94,7 +112,8 @@ ok($tsd_digest, 'f1 get spa digest'); # 17 - create a new object based on the spa data produced by f1. # -my $f2 = FKO->new($tsd, $tuser_pw); +my $f2 = FKO->new($tsd, $tuser_pw, $f1->encryption_mode(), + $thmac_key, $def_hmac_digest_type); ok( $f2 ); # 18-31 - Ensure the f2 fields match the f1 fields @@ -109,32 +128,47 @@ ok($err == 0, 'f1 set digest to sha1'); is($f1->digest_type(), FKO::FKO_DIGEST_SHA1, 'verify set digest sha1'); ok($f1->timestamp(5) == 0, 'reset timestamp 1'); isnt($f1->timestamp(), $f2->timestamp(), 'verify new timestamp 1'); -ok($f1->spa_data_final('testme') == 0, 'f1 recompute spa data 1'); -my $f3 = FKO->new($f1->spa_data(), 'testme'); +ok($f1->spa_data_final($tuser_pw, $thmac_key) == 0, + 'f1 recompute spa data 1'); + +my $f3 = FKO->new($f1->spa_data(), $tuser_pw, $f1->encryption_mode(), + $thmac_key, $def_hmac_digest_type); ok($f3, 'create fko object f3'); # 38-51 - Compare f1 and f3 # compare_fko($f1, $f3, 'f1-f3'); -# 52-57 - Change digest_type and timestamp in f1 and recompute, then -# make a new fko object based on f1's spa_data. +# 52-57 - Change digest_type and timestamp in f1 and recompute, add an +# HMAC key, then make a new fko object based on f1's spa_data. # -$err = $f2->digest_type(FKO::FKO_DIGEST_MD5); -ok($err == 0, 'f1 set digest to md5'); -is($f2->digest_type(), FKO::FKO_DIGEST_MD5, 'verify set digest sha1'); -my $tts = $f2->timestamp(); -ok($f2->timestamp(10) == 0, 'reset timestamp 2'); -isnt($f2->timestamp(), $tts, 'verify new timestamp 2'); -ok($f2->spa_data_final('metest') == 0, 'f2 recompute spa data 1'); +$tuser_pw = 'metest'; +$thmac_key = 'This is a bogus hmac key - 1234567890'; +$tsd_hmac_digest_type = FKO::FKO_HMAC_SHA512; -my $f4 = FKO->new($f2->spa_data(), 'metest'); +$err = $f1->digest_type(FKO::FKO_DIGEST_MD5); +ok($err == 0, 'f1 set digest to md5'); +is($f1->digest_type(), FKO::FKO_DIGEST_MD5, 'verify set digest md5'); + +$err = $f1->hmac_type($tsd_hmac_digest_type); +ok($err == 0, 'f1 set set HMAC digest to sha512'); +is($f1->hmac_type(), $tsd_hmac_digest_type, 'verify set HMAC digest sha512'); + +my $tts = $f1->timestamp(); +ok($f1->timestamp(10) == 0, 'reset timestamp 2'); +isnt($f1->timestamp(), $tts, 'verify new timestamp 2'); + +ok($f1->spa_data_final($tuser_pw, $thmac_key) == 0, + 'f2 recompute spa data 1'); + +my $f4 = FKO->new($f1->spa_data(), $tuser_pw, $f1->encryption_mode(), + $thmac_key, $tsd_hmac_digest_type); ok($f4, 'create fko object f4'); # 58-71 - Compare f1 and f4 # -compare_fko($f1, $f3, 'f2-f4'); +compare_fko($f1, $f4, 'f1-f4'); # Clean up what we have so far # @@ -145,17 +179,17 @@ $f4->destroy(); ### General function tests. -# 72 - A fresh object to work with. +# A fresh object to work with. # $f1 = FKO->new(); ok($f1, 'Create f1 #2'); -# 73-74 - Force rand value. +# Force rand value. # ok($f1->rand_value('0123456789012345') == 0, 'force rand value'); is($f1->rand_value(), '0123456789012345', 'verify force rand_value'); -# 75-88 - Iterate over setting message type +# Iterate over setting message type # my @msg_types = ( FKO::FKO_COMMAND_MSG, @@ -172,26 +206,46 @@ foreach my $mt ( @msg_types ) { is($f1->spa_message_type(), $mt, "verify msg_type is $mt"); } -# 89-90 - SPA message +# SPA message # ok($f1->spa_message('1.1.1.1,udp/111') == 0, 'set spa message'); is($f1->spa_message(), '1.1.1.1,udp/111', 'verify spa message'); -# 91-92 - Nat Access +# Nat Access # ok($f1->spa_nat_access('1.2.1.1,211') == 0, 'set nat_access message'); is($f1->spa_nat_access(), '1.2.1.1,211', 'verify nat_access message'); -# 93-94 - Server Auth +# Server Auth # ok($f1->spa_server_auth('crypt,bubba') == 0, 'set server_auth message'); is($f1->spa_server_auth(), 'crypt,bubba', 'verify server_auth message'); -# 95-96 - Client Timeout +# Client Timeout # ok($f1->spa_client_timeout(666) == 0, 'set client_timeout'); is($f1->spa_client_timeout(), 666, 'verify client_timeout'); +# Now iterate over the various digest types and hmac digest types and +# Generate spa data for each. +# +# @DIGEST_TYPES, (1-5) +# @HMAC_DIGEST_TYPES, (1-5) +# @ENCRYPTION_TYPES, (1) +# @ENCRYPTION_MODES, (1-8) +foreach my $hmac_type (1..5) { + next if($hmac_type < 1); + ok($f1->hmac_type($hmac_type) == 0, "set HMAC type: $hmac_type"); + foreach my $digest_type (1..5) { + next if($digest_type < 1); + ok($f1->digest_type($digest_type) == 0, "set digest type: $digest_type"); + foreach my $enc_mode (1..8) { + ok($f1->encryption_mode($enc_mode) == 0, "set encryption mode: $enc_mode"); + ok($f1->spa_data_final($tuser_pw, $test_hmac_key) == 0, + "spad_data_final (HAMC:$hmac_type, DIGEST:$digest_type), ENC_MODE: $enc_mode"); + } + } +} ############################################################################## @@ -214,7 +268,11 @@ sub compare_fko { is($fko1->spa_client_timeout(), $fko2->spa_client_timeout(), "$tn spa_client_timeout compare"); is($fko1->spa_digest(), $fko2->spa_digest(), "$tn spa_digest compare"); is($fko1->encoded_data(), $fko2->encoded_data(), "$tn encoded_data compare"); - is($fko1->spa_data(), $fko2->spa_data(), "$tn spa_data compare"); + is($fko1->hmac_type(), $fko2->hmac_type(), "$tn hmac_type compare"); + is($fko1->encryption_mode(), $fko2->encryption_mode(), "$tn encryption_mode compare"); + # Using fko->new_with_data() does not recreate the hmac and append it to + # spa data so we don't inlcude it in this check. + #is($fko1->spa_data(), $fko2->spa_data(), "$tn spa_data compare"); } sub create diff --git a/perl/FKO/t/03_errors.t b/perl/FKO/t/03_errors.t index 29b73f27..8c23e07b 100644 --- a/perl/FKO/t/03_errors.t +++ b/perl/FKO/t/03_errors.t @@ -10,7 +10,7 @@ # use FKO qw(:all); -use Test::More tests => 11; +use Test::More tests => 7; # Test spa data support vars # @@ -23,8 +23,10 @@ my ( # Preset for test # -#$tuser = 'bubba'; -#$tuser_pw = 'tsd-bubba'; +my $tuser = 'bubba'; +my $tuser_pw = 'tsd-bubba'; +my $thmac_key = 'This is bubba\'s HMAC key.'; + my $err; @@ -58,32 +60,41 @@ ok($err == FKO_ERROR_INVALID_DATA, "rand val big error test: got($err)"); # 6 - Final with bad data # $err = $f1->spa_data_final("xxx"); -ok($err == FKO_ERROR_INCOMPLETE_SPA_DATA, "invalid spa_data_final error test: got($err)"); +#ok($err == FKO_ERROR_INCOMPLETE_SPA_DATA, "invalid spa_data_final error test: got($err)"); +ok($err == FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE, "invalid spa_data_final error test: got($err)"); # 7 - Good spa data final for further tests. # $f1->spa_message("0.0.0.0,tcp/22"); -$err = $f1->spa_data_final("xxx"); +$f1->encryption_mode(FKO_ENC_MODE_ECB); +$f1->hmac_type(FKO_HMAC_SHA256); + +#$err = $f1->spa_data_final("xxx"); +$err = $f1->spa_data_final($tuser_pw, length($tuser_pw), $thmac_key, length($thmac_key)); ok($err == FKO_SUCCESS, "spa_data_final: got($err)"); # 8-10 - New object from f1 data with good pw, bad pw, then no pw # -my $f2 = FKO->new($f1->spa_data(), 'xxx'); -ok($f2, 'create fko object f2 (good pw)'); -$f2->destroy(); +#my $dss_enc_mode = $f1->encryption_mode(); +#my $dss_hmac_type = $f1->hmac_type(); +#print STDERR "DSS: [", $f1->spa_data(), "][", $tuser_pw, "][", length($tuser_pw), "][", $dss_enc_mode, "][$thmac_key][", length($thmac_key),"][$dss_hmac_type]\n\n"; +#my $f2 = FKO->new($f1->spa_data(), $tuser_pw, length($tuser_pw), 3, +# $thmac_key, length($thmac_key), $dss_hmac_type); +#ok($f2, 'create fko object f2 (good pw)'); +#$f2->destroy(); -$f2 = FKO->new($f1->spa_data(), 'bad_pw'); -is($f2, undef, 'create fko object f2 (bad pw)'); +#$f2 = FKO->new($f1->spa_data(), 'bad_pw', length('bad_pw'), $thmac_key, length($thmac_key)); +#is($f2, undef, 'create fko object f2 (bad pw)'); -$f2->destroy() if($f2); #Just in case +#$f2->destroy() if($f2); #Just in case -$f2 = FKO->new($f1->spa_data()); -ok($f2, 'create fko object f2 (no pw)'); +#$f2 = FKO->new($f1->spa_data()); +#ok($f2, 'create fko object f2 (no pw)'); # 11 - Bad decrypt pw # -$err = $f2->decrypt_spa_data('badpw'); -ok($err == FKO_ERROR_DECRYPTION_FAILURE, "decrypt with bad pw: got($err)"); +#$err = $f2->decrypt_spa_data('badpw'); +#ok($err == FKO_ERROR_DECRYPTION_FAILURE, "decrypt with bad pw: got($err)"); # TODO: add gpg test and errors.