| Did you know ... | Search Documentation: |
| Pack logtalk -- logtalk-3.102.0/docs/apis/_sources/otp_protocol_0.rst.txt |
.. index:: single: otp_protocol .. _otp_protocol/0:
.. rst-class:: right
protocol
otp_protocolProtocol 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-08-08
| Compilation flags:
| static
| Dependencies: | (none)
| Remarks: | (none)
| Inherited public predicates: | (none)
.. contents:: :local: :backlinks: top
.. index:: hotp/5 .. _otp_protocol/0::hotp/5:
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
.. index:: totp/5 .. _otp_protocol/0::totp/5:
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
.. index:: hotp_verify/7 .. _otp_protocol/0::hotp_verify/7:
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
| Exceptions:
| Hash, Secret, Counter, Window, Digits, or OTP is a variable or a partial list:
| instantiation_error
| Hash is not a supported OTP hash object:
| domain_error(otp_hash,Hash)
| Secret is neither a partial list nor a list:
| type_error(list,Secret)
| An element Byte of the Secret` list is neither a variable nor an integer:
| type_error(integer,Byte)
| An element Byte of the Secret list is an integer but not a valid byte:
| domain_error(byte,Byte)
| Secret is not a valid Base32 source:
| domain_error(base32_source,Secret)
| Counter or Window is neither a variable nor an integer:
| type_error(integer,Integer)
| Counter or Window is an integer but not a non-negative integer:
| domain_error(non_negative_integer,Integer)
| Digits is neither a variable nor an integer:
| type_error(integer,Digits)
| Digits is an integer but not a positive integer:
| domain_error(positive_integer,Digits)
| OTP neither a variable nor an atom:
| type_error(atom,OTP)
| OTP does not contain exactly Digits decimal digits:
| domain_error(otp_value,OTP)
| A searched counter exceeds the 64-bit HOTP moving-factor range:
| domain_error(otp_moving_factor,Counter)
.. index:: totp_verify/7 .. _otp_protocol/0::totp_verify/7:
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
| Exceptions:
| Hash, Secret, UnixTime, Window, Digits, or OTP is a variable or a partial list:
| instantiation_error
| Hash is not a supported OTP hash object:
| domain_error(otp_hash,Hash)
| Secret is neither a partial list nor a list:
| type_error(list,Secret)
| An element Byte of the Secret` list is neither a variable nor an integer:
| type_error(integer,Byte)
| An element Byte of the Secret list is an integer but not a valid byte:
| domain_error(byte,Byte)
| Secret is not a valid Base32 source:
| domain_error(base32_source,Secret)
| UnixTime or Window is neither a variable nor an integer:
| type_error(integer,Integer)
| UnixTime or Window is an integer but not a non-negative integer:
| domain_error(non_negative_integer,Integer)
| Digits is neither a variable nor an integer:
| type_error(integer,Digits)
| Digits is an integer but not a positive integer:
| domain_error(positive_integer,Digits)
| OTP is neither a variable nor an atom:
| type_error(atom,OTP)
| OTP does not contain exactly Digits decimal digits:
| domain_error(otp_value,OTP)
| A searched time step exceeds the 64-bit HOTP moving-factor range:
| domain_error(otp_moving_factor,TimeStep)
(none)
(none)
(none)
.. seealso::
:ref:`hmac_protocol <hmac_protocol/0>`