---
name: "oath_hotp_generate"
section: "3"
platform: "linux"
package: "oath-toolkit"
version: "2.6.15-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/oath_hotp_generate"
---

# oath\_hotp\_generate(3)

API function

## NAME

oath\_hotp\_generate - API function

## SYNOPSIS

**#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***);**

## ARGUMENTS

- 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

## DESCRIPTION

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.

## RETURNS

On success, **OATH\_OK** (zero) is returned, otherwise an error code is returned.

## 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

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.
