From 8a1145c29a789e06a591df5d5f97f87c71eaeb5a Mon Sep 17 00:00:00 2001 From: "David M. Syzdek" Date: Mon, 16 Jan 2023 19:32:37 -0900 Subject: libotputil: adding otputil_encoding2str() and otputil_str2encoding() --- include/otputil.h | 10 ++++++++++ lib/libotputil/libotputil.sym | 2 ++ lib/libotputil/lmisc.c | 44 ++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/include/otputil.h b/include/otputil.h index 8b08583..cdb177b 100644 --- a/include/otputil.h +++ b/include/otputil.h @@ -315,6 +315,11 @@ otputil_debug( FILE * fs ); +_OTPUTIL_F const char * +otputil_encoding2str( + int hmac ); + + _OTPUTIL_F char * otputil_getpass( const char * prompt, @@ -332,6 +337,11 @@ otputil_meth2str( int hmac ); +_OTPUTIL_F int +otputil_str2encoding( + const char * str ); + + _OTPUTIL_F int otputil_str2md( const char * str ); diff --git a/lib/libotputil/libotputil.sym b/lib/libotputil/libotputil.sym index 3c3c4c2..7a7ebbf 100644 --- a/lib/libotputil/libotputil.sym +++ b/lib/libotputil/libotputil.sym @@ -71,10 +71,12 @@ otputil_set_param # # misc functions otputil_debug +otputil_encoding2str otputil_err2string otputil_getpass otputil_md2str otputil_meth2str +otputil_str2encoding otputil_str2md otputil_str2meth # diff --git a/lib/libotputil/lmisc.c b/lib/libotputil/lmisc.c index 1ec3c78..8312e86 100644 --- a/lib/libotputil/lmisc.c +++ b/lib/libotputil/lmisc.c @@ -55,10 +55,23 @@ ///////////////// #pragma mark - Variables +#pragma mark otputil_encoding_list[] +static const otputil_map_t otputil_encoding_list[] = +{ + { .map_name = "none", .map_id = 0 }, + { .map_name = "hex", .map_id = OTPUTIL_ENC_HEX }, + { .map_name = "six-word", .map_id = OTPUTIL_ENC_SIXWORD }, + { .map_name = "altdict", .map_id = OTPUTIL_ENC_ALTDICT }, + // duplicate names + { .map_name = "six", .map_id = OTPUTIL_ENC_SIXWORD }, + { .map_name = NULL, .map_id = 0 }, +}; + + #pragma mark otputil_md_list[] static const otputil_map_t otputil_md_list[] = { - { .map_name = "none", .map_id = OTPUTIL_MD_NONE }, + { .map_name = "none", .map_id = 0 }, { .map_name = "md4", .map_id = OTPUTIL_MD_MD4 }, { .map_name = "md5", .map_id = OTPUTIL_MD_MD5 }, { .map_name = "sha1", .map_id = OTPUTIL_MD_SHA1 }, @@ -123,7 +136,7 @@ otputil_debug( fprintf(fs, "\n"); fprintf(fs, "OTP (RFC 2289) Options:\n"); - fprintf(fs, " OTPUTIL_OPT_OTP_ENCODE: %i\n", tud->otp_encoding); + fprintf(fs, " OTPUTIL_OPT_OTP_ENCODE: %s (%i)\n", otputil_encoding2str(tud->otp_encoding), tud->otp_encoding); fprintf(fs, " OTPUTIL_OPT_OTP_HASH: %s (%i)\n", otputil_md2str(tud->otp_hash), tud->otp_hash); fprintf(fs, " OTPUTIL_OPT_OTP_PASS: %s\n", (((tud->otp_pass)) ? tud->otp_pass : "n/a")); fprintf(fs, " OTPUTIL_OPT_OTP_SEED: %s\n", (((tud->otp_seed)) ? tud->otp_seed : "n/a")); @@ -131,7 +144,7 @@ otputil_debug( fprintf(fs, "\n"); fprintf(fs, "S/KEY (RFC 1760) Options:\n"); - fprintf(fs, " OTPUTIL_OPT_SKEY_ENCODE: %i\n", tud->skey_encoding); + fprintf(fs, " OTPUTIL_OPT_SKEY_ENCODE: %s (%i)\n", otputil_encoding2str(tud->skey_encoding), tud->skey_encoding); fprintf(fs, " OTPUTIL_OPT_SKEY_HASH: %s (%i)\n", otputil_md2str(tud->skey_hash), tud->skey_hash); fprintf(fs, " OTPUTIL_OPT_SKEY_PASS: %s\n", (((tud->skey_pass)) ? tud->skey_pass : "n/a")); fprintf(fs, " OTPUTIL_OPT_SKEY_SEQ: %i\n", tud->skey_seq); @@ -149,6 +162,18 @@ otputil_debug( } +const char * +otputil_encoding2str( + int md ) +{ + int x; + for(x = 0; ((otputil_encoding_list[x].map_name)); x++) + if (md == otputil_encoding_list[x].map_id) + return(otputil_encoding_list[x].map_name); + return(NULL); +} + + const char * otputil_err2string( int err ) @@ -231,6 +256,19 @@ otputil_meth2str( } +int +otputil_str2encoding( + const char * str ) +{ + int x; + assert(str != NULL); + for(x = 0; ((otputil_encoding_list[x].map_name)); x++) + if (!(strcasecmp(str, otputil_encoding_list[x].map_name))) + return(otputil_encoding_list[x].map_id); + return(-1); +} + + int otputil_str2md( const char * str ) -- cgit v1.2.3