diff options
Diffstat (limited to 'lib/libotputil/lcore.c')
| -rw-r--r-- | lib/libotputil/lcore.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/lib/libotputil/lcore.c b/lib/libotputil/lcore.c index 8b79e26..35c4e91 100644 --- a/lib/libotputil/lcore.c +++ b/lib/libotputil/lcore.c | |||
| @@ -84,6 +84,12 @@ const otputil_t otputil_const_defaults = | |||
| 84 | .hotp_c = OTPUTIL_DFLT_HOTP_C, | 84 | .hotp_c = OTPUTIL_DFLT_HOTP_C, |
| 85 | .hotp_digits = OTPUTIL_DFLT_HOTP_DIGITS, | 85 | .hotp_digits = OTPUTIL_DFLT_HOTP_DIGITS, |
| 86 | .hotp_hmac = OTPUTIL_DFLT_HOTP_HMAC, | 86 | .hotp_hmac = OTPUTIL_DFLT_HOTP_HMAC, |
| 87 | // OTP options | ||
| 88 | .otp_pass = OTPUTIL_DFLT_OTP_PASS, | ||
| 89 | .otp_seed = OTPUTIL_DFLT_OTP_SEED, | ||
| 90 | .otp_seq = OTPUTIL_DFLT_OTP_SEQ, | ||
| 91 | .otp_hash = OTPUTIL_DFLT_OTP_HASH, | ||
| 92 | .otp_encoding = OTPUTIL_DFLT_OTP_ENCODE, | ||
| 87 | // TOTP options | 93 | // TOTP options |
| 88 | .totp_k = &otputil_const_defaults_k, | 94 | .totp_k = &otputil_const_defaults_k, |
| 89 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, | 95 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, |
| @@ -105,6 +111,12 @@ otputil_t otputil_defaults = | |||
| 105 | .hotp_c = OTPUTIL_DFLT_HOTP_C, | 111 | .hotp_c = OTPUTIL_DFLT_HOTP_C, |
| 106 | .hotp_digits = OTPUTIL_DFLT_HOTP_DIGITS, | 112 | .hotp_digits = OTPUTIL_DFLT_HOTP_DIGITS, |
| 107 | .hotp_hmac = OTPUTIL_DFLT_HOTP_HMAC, | 113 | .hotp_hmac = OTPUTIL_DFLT_HOTP_HMAC, |
| 114 | // OTP options | ||
| 115 | .otp_pass = OTPUTIL_DFLT_OTP_PASS, | ||
| 116 | .otp_seed = OTPUTIL_DFLT_OTP_SEED, | ||
| 117 | .otp_seq = OTPUTIL_DFLT_OTP_SEQ, | ||
| 118 | .otp_hash = OTPUTIL_DFLT_OTP_HASH, | ||
| 119 | .otp_encoding = OTPUTIL_DFLT_OTP_ENCODE, | ||
| 108 | // TOTP options | 120 | // TOTP options |
| 109 | .totp_k = NULL, | 121 | .totp_k = NULL, |
| 110 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, | 122 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, |
| @@ -219,6 +231,36 @@ otputil_get_param( | |||
| 219 | return(OTPUTIL_ENOMEM); | 231 | return(OTPUTIL_ENOMEM); |
| 220 | return(OTPUTIL_SUCCESS); | 232 | return(OTPUTIL_SUCCESS); |
| 221 | 233 | ||
| 234 | /////////////////////////// | ||
| 235 | // OTP options (RFC2289) // | ||
| 236 | /////////////////////////// | ||
| 237 | |||
| 238 | case OTPUTIL_OPT_OTP_ENCODE: | ||
| 239 | *((int *)outvalue) = (int)tud->otp_encoding; | ||
| 240 | return(OTPUTIL_SUCCESS); | ||
| 241 | |||
| 242 | case OTPUTIL_OPT_OTP_HASH: | ||
| 243 | *((int *)outvalue) = (int)tud->otp_hash; | ||
| 244 | return(OTPUTIL_SUCCESS); | ||
| 245 | |||
| 246 | case OTPUTIL_OPT_OTP_PASS: | ||
| 247 | *((char **)outvalue) = NULL; | ||
| 248 | if ((tud->otp_pass)) | ||
| 249 | if (( *((char **)outvalue) = bindle_strdup(tud->otp_pass)) == NULL) | ||
| 250 | return(OTPUTIL_ENOMEM); | ||
| 251 | return(OTPUTIL_SUCCESS); | ||
| 252 | |||
| 253 | case OTPUTIL_OPT_OTP_SEED: | ||
| 254 | *((char **)outvalue) = NULL; | ||
| 255 | if ((tud->otp_seed)) | ||
| 256 | if (( *((char **)outvalue) = bindle_strdup(tud->otp_seed)) == NULL) | ||
| 257 | return(OTPUTIL_ENOMEM); | ||
| 258 | return(OTPUTIL_SUCCESS); | ||
| 259 | |||
| 260 | case OTPUTIL_OPT_OTP_SEQ: | ||
| 261 | *((int *)outvalue) = (int)tud->otp_seq; | ||
| 262 | return(OTPUTIL_SUCCESS); | ||
| 263 | |||
| 222 | //////////////////////////// | 264 | //////////////////////////// |
| 223 | // TOTP options (RFC6238) // | 265 | // TOTP options (RFC6238) // |
| 224 | //////////////////////////// | 266 | //////////////////////////// |
| @@ -314,6 +356,33 @@ otputil_initialize( | |||
| 314 | return(rc); | 356 | return(rc); |
| 315 | }; | 357 | }; |
| 316 | 358 | ||
| 359 | // defaults for OTP options | ||
| 360 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_OTP_ENCODE, NULL)) != OTPUTIL_SUCCESS) | ||
| 361 | { | ||
| 362 | otputil_free(tud); | ||
| 363 | return(rc); | ||
| 364 | }; | ||
| 365 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_OTP_HASH, NULL)) != OTPUTIL_SUCCESS) | ||
| 366 | { | ||
| 367 | otputil_free(tud); | ||
| 368 | return(rc); | ||
| 369 | }; | ||
| 370 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_OTP_PASS, NULL)) != OTPUTIL_SUCCESS) | ||
| 371 | { | ||
| 372 | otputil_free(tud); | ||
| 373 | return(rc); | ||
| 374 | }; | ||
| 375 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_OTP_SEED, NULL)) != OTPUTIL_SUCCESS) | ||
| 376 | { | ||
| 377 | otputil_free(tud); | ||
| 378 | return(rc); | ||
| 379 | }; | ||
| 380 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_OTP_SEQ, NULL)) != OTPUTIL_SUCCESS) | ||
| 381 | { | ||
| 382 | otputil_free(tud); | ||
| 383 | return(rc); | ||
| 384 | }; | ||
| 385 | |||
| 317 | // defaults for TOTP options | 386 | // defaults for TOTP options |
| 318 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_TOTP_K, NULL)) != OTPUTIL_SUCCESS) | 387 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_TOTP_K, NULL)) != OTPUTIL_SUCCESS) |
| 319 | { | 388 | { |
| @@ -437,6 +506,51 @@ otputil_set_param( | |||
| 437 | tud->hotp_k = bv; | 506 | tud->hotp_k = bv; |
| 438 | return(OTPUTIL_SUCCESS); | 507 | return(OTPUTIL_SUCCESS); |
| 439 | 508 | ||
| 509 | /////////////////////////// | ||
| 510 | // OTP options (RFC2289) // | ||
| 511 | /////////////////////////// | ||
| 512 | |||
| 513 | case OTPUTIL_OPT_OTP_ENCODE: | ||
| 514 | switch (_SET_INPUT_NUM(int, defaults->otp_encoding)) | ||
| 515 | { case OTPUTIL_ENC_HEX: break; | ||
| 516 | case OTPUTIL_ENC_SIXWORD: break; | ||
| 517 | default: return(OTPUTIL_EOPTVAL); | ||
| 518 | }; | ||
| 519 | tud->otp_encoding = _SET_INPUT_NUM(int, defaults->otp_encoding); | ||
| 520 | return(OTPUTIL_SUCCESS); | ||
| 521 | |||
| 522 | case OTPUTIL_OPT_OTP_HASH: | ||
| 523 | if (otputil_md2str(_SET_INPUT_NUM(int, defaults->otp_hash)) == NULL) | ||
| 524 | return(OTPUTIL_EOPTVAL); | ||
| 525 | tud->otp_hash = (int8_t)_SET_INPUT_NUM(int, defaults->otp_hash); | ||
| 526 | return(OTPUTIL_SUCCESS); | ||
| 527 | |||
| 528 | case OTPUTIL_OPT_OTP_PASS: | ||
| 529 | ptr = NULL; | ||
| 530 | if ((invalue = ((invalue)) ? invalue : defaults->otp_pass) != NULL) | ||
| 531 | if ((ptr = bindle_strdup(((const char *)invalue))) == NULL) | ||
| 532 | return(OTPUTIL_ENOMEM); | ||
| 533 | if ((tud->otp_pass)) | ||
| 534 | free(tud->otp_pass); | ||
| 535 | tud->otp_pass = ptr; | ||
| 536 | return(OTPUTIL_SUCCESS); | ||
| 537 | |||
| 538 | case OTPUTIL_OPT_OTP_SEED: | ||
| 539 | ptr = NULL; | ||
| 540 | if ((invalue = ((invalue)) ? invalue : defaults->otp_seed) != NULL) | ||
| 541 | if ((ptr = bindle_strdup(((const char *)invalue))) == NULL) | ||
| 542 | return(OTPUTIL_ENOMEM); | ||
| 543 | if ((tud->otp_seed)) | ||
| 544 | free(tud->otp_seed); | ||
| 545 | tud->otp_seed = ptr; | ||
| 546 | return(OTPUTIL_SUCCESS); | ||
| 547 | |||
| 548 | case OTPUTIL_OPT_OTP_SEQ: | ||
| 549 | if (_SET_INPUT_NUM(int, defaults->otp_seq) < 0) | ||
| 550 | return(OTPUTIL_EOPTVAL); | ||
| 551 | tud->otp_seq = _SET_INPUT_NUM(int, defaults->otp_seq); | ||
| 552 | return(OTPUTIL_SUCCESS); | ||
| 553 | |||
| 440 | //////////////////////////// | 554 | //////////////////////////// |
| 441 | // TOTP options (RFC6238) // | 555 | // TOTP options (RFC6238) // |
| 442 | //////////////////////////// | 556 | //////////////////////////// |
