Scroll to navigation

oath_hotp_generate(3) liboath oath_hotp_generate(3)


oath_hotp_generate - API function


#include <oath.h>

int oath_hotp_generate(const char * secret, size_t secret_length, uint64_t moving_factor, unsigned digits, bool add_checksum, size_t truncation_offset, char * output_otp);


const char * secret
the shared secret string
size_t secret_length
length of secret
uint64_t moving_factor
a counter indicating the current OTP to generate
unsigned digits
number of requested digits in the OTP, excluding checksum
bool add_checksum
whether to add a checksum digit or not
size_t truncation_offset
use a specific truncation offset
char * output_otp
output buffer, must have room for the output OTP plus zero


Generate a one-time-password using the HOTP algorithm as described in RFC 4226.

Use a value of OATH_HOTP_DYNAMIC_TRUNCATION for truncation_offset unless you really need a specific truncation offset.

To find out the size of the OTP you may use the OATH_HOTP_LENGTH() macro. The output_otp buffer must be have room for that length plus one for the terminating NUL.

Currently only values 6, 7 and 8 for digits are supported, and the add_checksum value is ignored. These restrictions may be lifted in future versions, although some limitations are inherent in the protocol.


On success, OATH_OK (zero) is returned, otherwise an error code is returned.


Report bugs to <>. liboath home page: General help using GNU software:


Copyright © 2009-2020 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.
2.6.7 liboath