diff options
Diffstat (limited to 'lib/libotputil/lcore.c')
| -rw-r--r-- | lib/libotputil/lcore.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/libotputil/lcore.c b/lib/libotputil/lcore.c index 35c4e91..5ccc143 100644 --- a/lib/libotputil/lcore.c +++ b/lib/libotputil/lcore.c | |||
| @@ -90,6 +90,11 @@ const otputil_t otputil_const_defaults = | |||
| 90 | .otp_seq = OTPUTIL_DFLT_OTP_SEQ, | 90 | .otp_seq = OTPUTIL_DFLT_OTP_SEQ, |
| 91 | .otp_hash = OTPUTIL_DFLT_OTP_HASH, | 91 | .otp_hash = OTPUTIL_DFLT_OTP_HASH, |
| 92 | .otp_encoding = OTPUTIL_DFLT_OTP_ENCODE, | 92 | .otp_encoding = OTPUTIL_DFLT_OTP_ENCODE, |
| 93 | // S/KEY options | ||
| 94 | .skey_pass = OTPUTIL_DFLT_SKEY_PASS, | ||
| 95 | .skey_seq = OTPUTIL_DFLT_SKEY_SEQ, | ||
| 96 | .skey_hash = OTPUTIL_DFLT_SKEY_HASH, | ||
| 97 | .skey_encoding = OTPUTIL_DFLT_SKEY_ENCODE, | ||
| 93 | // TOTP options | 98 | // TOTP options |
| 94 | .totp_k = &otputil_const_defaults_k, | 99 | .totp_k = &otputil_const_defaults_k, |
| 95 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, | 100 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, |
| @@ -117,6 +122,11 @@ otputil_t otputil_defaults = | |||
| 117 | .otp_seq = OTPUTIL_DFLT_OTP_SEQ, | 122 | .otp_seq = OTPUTIL_DFLT_OTP_SEQ, |
| 118 | .otp_hash = OTPUTIL_DFLT_OTP_HASH, | 123 | .otp_hash = OTPUTIL_DFLT_OTP_HASH, |
| 119 | .otp_encoding = OTPUTIL_DFLT_OTP_ENCODE, | 124 | .otp_encoding = OTPUTIL_DFLT_OTP_ENCODE, |
| 125 | // S/KEY options | ||
| 126 | .skey_pass = OTPUTIL_DFLT_SKEY_PASS, | ||
| 127 | .skey_seq = OTPUTIL_DFLT_SKEY_SEQ, | ||
| 128 | .skey_hash = OTPUTIL_DFLT_SKEY_HASH, | ||
| 129 | .skey_encoding = OTPUTIL_DFLT_SKEY_ENCODE, | ||
| 120 | // TOTP options | 130 | // TOTP options |
| 121 | .totp_k = NULL, | 131 | .totp_k = NULL, |
| 122 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, | 132 | .totp_time = OTPUTIL_DFLT_TOTP_TIME, |
| @@ -261,6 +271,29 @@ otputil_get_param( | |||
| 261 | *((int *)outvalue) = (int)tud->otp_seq; | 271 | *((int *)outvalue) = (int)tud->otp_seq; |
| 262 | return(OTPUTIL_SUCCESS); | 272 | return(OTPUTIL_SUCCESS); |
| 263 | 273 | ||
| 274 | ///////////////////////////// | ||
| 275 | // S/KEY options (RFC1760) // | ||
| 276 | ///////////////////////////// | ||
| 277 | |||
| 278 | case OTPUTIL_OPT_SKEY_ENCODE: | ||
| 279 | *((int *)outvalue) = (int)tud->skey_encoding; | ||
| 280 | return(OTPUTIL_SUCCESS); | ||
| 281 | |||
| 282 | case OTPUTIL_OPT_SKEY_HASH: | ||
| 283 | *((int *)outvalue) = (int)tud->skey_hash; | ||
| 284 | return(OTPUTIL_SUCCESS); | ||
| 285 | |||
| 286 | case OTPUTIL_OPT_SKEY_PASS: | ||
| 287 | *((char **)outvalue) = NULL; | ||
| 288 | if ((tud->skey_pass)) | ||
| 289 | if (( *((char **)outvalue) = bindle_strdup(tud->skey_pass)) == NULL) | ||
| 290 | return(OTPUTIL_ENOMEM); | ||
| 291 | return(OTPUTIL_SUCCESS); | ||
| 292 | |||
| 293 | case OTPUTIL_OPT_SKEY_SEQ: | ||
| 294 | *((int *)outvalue) = (int)tud->skey_seq; | ||
| 295 | return(OTPUTIL_SUCCESS); | ||
| 296 | |||
| 264 | //////////////////////////// | 297 | //////////////////////////// |
| 265 | // TOTP options (RFC6238) // | 298 | // TOTP options (RFC6238) // |
| 266 | //////////////////////////// | 299 | //////////////////////////// |
| @@ -383,6 +416,28 @@ otputil_initialize( | |||
| 383 | return(rc); | 416 | return(rc); |
| 384 | }; | 417 | }; |
| 385 | 418 | ||
| 419 | // defaults for S/KEY options | ||
| 420 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_SKEY_ENCODE, NULL)) != OTPUTIL_SUCCESS) | ||
| 421 | { | ||
| 422 | otputil_free(tud); | ||
| 423 | return(rc); | ||
| 424 | }; | ||
| 425 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_SKEY_HASH, NULL)) != OTPUTIL_SUCCESS) | ||
| 426 | { | ||
| 427 | otputil_free(tud); | ||
| 428 | return(rc); | ||
| 429 | }; | ||
| 430 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_SKEY_PASS, NULL)) != OTPUTIL_SUCCESS) | ||
| 431 | { | ||
| 432 | otputil_free(tud); | ||
| 433 | return(rc); | ||
| 434 | }; | ||
| 435 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_SKEY_SEQ, NULL)) != OTPUTIL_SUCCESS) | ||
| 436 | { | ||
| 437 | otputil_free(tud); | ||
| 438 | return(rc); | ||
| 439 | }; | ||
| 440 | |||
| 386 | // defaults for TOTP options | 441 | // defaults for TOTP options |
| 387 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_TOTP_K, NULL)) != OTPUTIL_SUCCESS) | 442 | if ((rc = otputil_set_param(tud, OTPUTIL_OPT_TOTP_K, NULL)) != OTPUTIL_SUCCESS) |
| 388 | { | 443 | { |
| @@ -551,6 +606,41 @@ otputil_set_param( | |||
| 551 | tud->otp_seq = _SET_INPUT_NUM(int, defaults->otp_seq); | 606 | tud->otp_seq = _SET_INPUT_NUM(int, defaults->otp_seq); |
| 552 | return(OTPUTIL_SUCCESS); | 607 | return(OTPUTIL_SUCCESS); |
| 553 | 608 | ||
| 609 | ///////////////////////////// | ||
| 610 | // S/KEY options (RFC1760) // | ||
| 611 | ///////////////////////////// | ||
| 612 | |||
| 613 | case OTPUTIL_OPT_SKEY_ENCODE: | ||
| 614 | switch (_SET_INPUT_NUM(int, defaults->skey_encoding)) | ||
| 615 | { case OTPUTIL_ENC_HEX: break; | ||
| 616 | case OTPUTIL_ENC_SIXWORD: break; | ||
| 617 | default: return(OTPUTIL_EOPTVAL); | ||
| 618 | }; | ||
| 619 | tud->skey_encoding = _SET_INPUT_NUM(int, defaults->skey_encoding); | ||
| 620 | return(OTPUTIL_SUCCESS); | ||
| 621 | |||
| 622 | case OTPUTIL_OPT_SKEY_HASH: | ||
| 623 | if (otputil_md2str(_SET_INPUT_NUM(int, defaults->skey_hash)) == NULL) | ||
| 624 | return(OTPUTIL_EOPTVAL); | ||
| 625 | tud->skey_hash = (int8_t)_SET_INPUT_NUM(int, defaults->skey_hash); | ||
| 626 | return(OTPUTIL_SUCCESS); | ||
| 627 | |||
| 628 | case OTPUTIL_OPT_SKEY_PASS: | ||
| 629 | ptr = NULL; | ||
| 630 | if ((invalue = ((invalue)) ? invalue : defaults->skey_pass) != NULL) | ||
| 631 | if ((ptr = bindle_strdup(((const char *)invalue))) == NULL) | ||
| 632 | return(OTPUTIL_ENOMEM); | ||
| 633 | if ((tud->skey_pass)) | ||
| 634 | free(tud->skey_pass); | ||
| 635 | tud->skey_pass = ptr; | ||
| 636 | return(OTPUTIL_SUCCESS); | ||
| 637 | |||
| 638 | case OTPUTIL_OPT_SKEY_SEQ: | ||
| 639 | if (_SET_INPUT_NUM(int, defaults->skey_seq) < 0) | ||
| 640 | return(OTPUTIL_EOPTVAL); | ||
| 641 | tud->skey_seq = _SET_INPUT_NUM(int, defaults->skey_seq); | ||
| 642 | return(OTPUTIL_SUCCESS); | ||
| 643 | |||
| 554 | //////////////////////////// | 644 | //////////////////////////// |
| 555 | // TOTP options (RFC6238) // | 645 | // TOTP options (RFC6238) // |
| 556 | //////////////////////////// | 646 | //////////////////////////// |
