oath_totp_generate(3)

πŸ’– oath_totp_generate(3) β€” the liboath era πŸ’…

okay bestie, gather round, because this is the function that makes your authenticator app actually work πŸŽ€ it lives in liboath, and the manual page header says oath_totp_generate(3) β€” yes, section 3, we love a library call ✨


🌸 NAME 🌸

oath_totp_generate β€” the API function that mints you a fresh time-based one-time password, no cap πŸ”₯


πŸ¦‹ SYNOPSIS πŸ¦‹

#include <oath.h>

int oath_totp_generate(const char * secret, size_t secret_length, time_t
now, unsigned time_step_size, time_t start_offset, unsigned digits, char
* output_otp);

πŸ’œ ARGUMENTS πŸ’œ

  • const char * secret β€” the shared secret string, the whole vibe behind your OTP πŸ”
  • size_t secret_length β€” how long that secret is, obviously
  • time_t now β€” the Unix time value you're computing the TOTP for ⏰
  • unsigned time_step_size β€” the time step system parameter (typically 30)
  • time_t start_offset β€” the Unix time of when to start counting time steps (typically 0)
  • unsigned digits β€” how many digits you want in the OTP, excluding the checksum
  • char * output_otp β€” your output buffer, and it must have room for the output OTP plus the zero terminator 🫢

✨ DESCRIPTION ✨

So what this does is generate a one-time-password using the time-variant TOTP algorithm described in RFC 6238 β€” iconic spec behaviour honestly πŸ“œ The input parameters are taken as time values.

The system parameter time_step_size describes how long the time window for each OTP is. The recommended value is 30 seconds, and you can use the value 0 or the symbol OATH_TOTP_DEFAULT_TIME_STEP_SIZE to indicate this πŸ‘‘

The system parameter start_offset denotes the Unix time when time steps are started to be counted. The recommended value is 0, to fall back on the Unix epoch, and you can use the symbol OATH_TOTP_DEFAULT_START_TIME to indicate this. (Yes, the original manpage literally has a stray ) there β€” we stan a typo that survived into the docs πŸ˜­πŸ’€)

The output_otp buffer must have room for at least digits characters, plus one for the terminating NUL.

⚠️ Currently only values 6, 7 and 8 for digits are supported. This restriction may be lifted in future versions β€” so don't come for me if you asked for 9 πŸ™ˆ

🌈 RETURNS 🌈

On success, OATH_OK (zero) is returned β€” slay πŸ’… otherwise an error code is returned. Periodt.


⭐ SINCE ⭐

1.4.0 β€” she's been serving since day one, fr fr 🧚


πŸ’€ REPORTING BUGS πŸ’€

Report bugs to <oath-toolkit-help@nongnu.org>. liboath home page: https://oath-toolkit.codeberg.page/ General help using GNU software: http://www.gnu.org/gethelp/ 🫢


Copyright Β© 2009-2026 Simon Josefsson.

Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. πŸŽ€


and that's the whole page bestie, iykyk 🌸 β€” this little beauty comes to you from liboath, version 2.6.15, dated oath_totp_generate(3) (that's the header/footer energy, we kept it cute) πŸ’– go forth and generate those OTPs, main character energy only βœ¨πŸ¦‹

πŸ“¦ where this page comes from