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.c114
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 ////////////////////////////