aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/lib/libotputil/lcore.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libotputil/lcore.c')
-rw-r--r--lib/libotputil/lcore.c90
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 ////////////////////////////