protocol

# `otp_protocol`

Protocol for HOTP and TOTP generation and verification as specified in RFC 4226 and RFC 6238.

Availability:
`logtalk_load(otp(loader))`
Author: Paulo Moura
Version: 1:0:0
Date: 2026-07-14
Compilation flags:
`static`
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

## Public predicates

### `hotp/5`

Computes an HOTP value for the given hash object, secret, moving counter, and number of digits. The secret can be either a raw byte list or a Base32 wrapper term of the form `base32(atom(Atom))`, `base32(chars(Chars))`, or `base32(codes(Codes))`.

Compilation flags:
`static`
Template:
`hotp(Hash,Secret,Counter,Digits,OTP)`
Mode and number of proofs:
`hotp(+object_identifier,+term,+integer,+integer,--atom)` - `one`

### `totp/5`

Computes a TOTP value using the standard 30-second time step and Unix epoch `T0 = 0` for the given hash object, secret, Unix time, and number of digits.

Compilation flags:
`static`
Template:
`totp(Hash,Secret,UnixTime,Digits,OTP)`
Mode and number of proofs:
`totp(+object_identifier,+term,+integer,+integer,--atom)` - `one`

### `hotp_verify/7`

Verifies an HOTP value by searching from the given counter through the bounded forward counter window. Returns the matched counter on success.

Compilation flags:
`static`
Template:
`hotp_verify(Hash,Secret,Counter,Window,Digits,OTP,MatchedCounter)`
Mode and number of proofs:
`hotp_verify(+object_identifier,+term,+integer,+integer,+integer,+atom,--integer)` - `zero_or_one_or_error`

### `totp_verify/7`

Verifies a TOTP value by searching within the bounded symmetric time-step window around the current time step. Returns the matched time step on success.

Compilation flags:
`static`
Template:
`totp_verify(Hash,Secret,UnixTime,Window,Digits,OTP,MatchedTimeStep)`
Mode and number of proofs:
`totp_verify(+object_identifier,+term,+integer,+integer,+integer,+atom,--integer)` - `zero_or_one_or_error`

## Protected predicates

(none)

## Private predicates

(none)

## Operators

(none)

See also

hmac_protocol