.. index:: single: paseto_protocol .. _paseto_protocol/0: .. rst-class:: right **protocol** ``paseto_protocol`` =================== PASETO v4.local and v4.public protocol for byte payloads. | **Availability:** | ``logtalk_load(paseto(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 Public predicates ----------------- .. index:: local_key/1 .. _paseto_protocol/0::local_key/1: ``local_key/1`` ^^^^^^^^^^^^^^^ Generates a 32-byte v4.local key. | **Compilation flags:** | ``static`` | **Template:** | ``local_key(Key)`` | **Mode and number of proofs:** | ``local_key(-list(byte))`` - ``one`` ------------ .. index:: public_keypair/2 .. _paseto_protocol/0::public_keypair/2: ``public_keypair/2`` ^^^^^^^^^^^^^^^^^^^^ Generates an Ed25519 seed and public key for v4.public tokens. | **Compilation flags:** | ``static`` | **Template:** | ``public_keypair(Seed,PublicKey)`` | **Mode and number of proofs:** | ``public_keypair(-list(byte),-list(byte))`` - ``one`` ------------ .. index:: local_encrypt/3 .. _paseto_protocol/0::local_encrypt/3: ``local_encrypt/3`` ^^^^^^^^^^^^^^^^^^^ Encrypts Payload using a 32-byte local Key and empty footer and implicit assertion. | **Compilation flags:** | ``static`` | **Template:** | ``local_encrypt(Key,Payload,Token)`` | **Mode and number of proofs:** | ``local_encrypt(+list(byte),+list(byte),-atom)`` - ``one_or_error`` | **Exceptions:** | ``Key`` is a variable or a partial list: | ``instantiation_error`` | ``Key`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Key)`` | ``Key`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Key`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``Payload`` is a variable or a partial list: | ``instantiation_error`` | ``Payload`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Payload)`` | ``Payload`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Payload`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: local_encrypt/5 .. _paseto_protocol/0::local_encrypt/5: ``local_encrypt/5`` ^^^^^^^^^^^^^^^^^^^ Encrypts Payload using a 32-byte local Key and authenticates Footer and ImplicitAssertion. | **Compilation flags:** | ``static`` | **Template:** | ``local_encrypt(Key,Payload,Footer,ImplicitAssertion,Token)`` | **Mode and number of proofs:** | ``local_encrypt(+list(byte),+list(byte),+list(byte),+list(byte),-atom)`` - ``one_or_error`` | **Exceptions:** | ``Key`` is a variable or a partial list: | ``instantiation_error`` | ``Key`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Key)`` | ``Key`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Key`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``Payload`` is a variable or a partial list: | ``instantiation_error`` | ``Payload`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Payload)`` | ``Payload`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Payload`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``Footer`` is a variable or a partial list: | ``instantiation_error`` | ``Footer`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Footer)`` | ``Footer`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Footer`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``ImplicitAssertion`` is a variable or a partial list: | ``instantiation_error`` | ``ImplicitAssertion`` is not a list of the required number of bytes: | ``type_error(list(byte,32),ImplicitAssertion)`` | ``ImplicitAssertion`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``ImplicitAssertion`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: local_decrypt/3 .. _paseto_protocol/0::local_decrypt/3: ``local_decrypt/3`` ^^^^^^^^^^^^^^^^^^^ Authenticates and decrypts a local Token using an empty implicit assertion. | **Compilation flags:** | ``static`` | **Template:** | ``local_decrypt(Token,Key,Payload)`` | **Mode and number of proofs:** | ``local_decrypt(+atom,+list(byte),-list(byte))`` - ``zero_or_one_or_error`` | **Exceptions:** | ``Token`` is a variable: | ``instantiation_error`` | ``Token`` is neither a variable nor an atom: | ``type_error(atom,Token)`` | ``Token`` is an atom but not a canonical v4.local token: | ``domain_error(paseto_v4_token,Token)`` | ``Key`` is a variable or a partial list: | ``instantiation_error`` | ``Key`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Key)`` | ``Key`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Key`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: local_decrypt/5 .. _paseto_protocol/0::local_decrypt/5: ``local_decrypt/5`` ^^^^^^^^^^^^^^^^^^^ Authenticates and decrypts a local Token using ImplicitAssertion and returns its authenticated Footer. | **Compilation flags:** | ``static`` | **Template:** | ``local_decrypt(Token,Key,ImplicitAssertion,Payload,Footer)`` | **Mode and number of proofs:** | ``local_decrypt(+atom,+list(byte),+list(byte),-list(byte),-list(byte))`` - ``zero_or_one_or_error`` | **Exceptions:** | ``Token`` is a variable: | ``instantiation_error`` | ``Token`` is neither a variable nor an atom: | ``type_error(atom,Token)`` | ``Token`` is an atom but not a canonical v4.local token: | ``domain_error(paseto_v4_token,Token)`` | ``Token`` is a v4.local token but has a malformed compact serialization: | ``domain_error(paseto_compact_serialization,malformed)`` | ``Token`` contains non-canonical base64url data: | ``representation_error(base64)`` | ``Token`` has a malformed local payload: | ``domain_error(paseto_v4_local_payload,Token)`` | ``Key`` is a variable or a partial list: | ``instantiation_error`` | ``Key`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Key)`` | ``Key`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Key`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``ImplicitAssertion`` is a variable or a partial list: | ``instantiation_error`` | ``ImplicitAssertion`` is not a list of the required number of bytes: | ``type_error(list(byte,32),ImplicitAssertion)`` | ``ImplicitAssertion`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``ImplicitAssertion`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: public_sign/3 .. _paseto_protocol/0::public_sign/3: ``public_sign/3`` ^^^^^^^^^^^^^^^^^ Signs Payload using an Ed25519 Seed and empty footer and implicit assertion. | **Compilation flags:** | ``static`` | **Template:** | ``public_sign(Seed,Payload,Token)`` | **Mode and number of proofs:** | ``public_sign(+list(byte),+list(byte),-atom)`` - ``one_or_error`` | **Exceptions:** | ``Seed`` is a variable or a partial list: | ``instantiation_error`` | ``Seed`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Seed)`` | ``Seed`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Seed`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``Payload`` is a variable or a partial list: | ``instantiation_error`` | ``Payload`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Payload)`` | ``Payload`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Payload`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: public_sign/5 .. _paseto_protocol/0::public_sign/5: ``public_sign/5`` ^^^^^^^^^^^^^^^^^ Signs Payload using an Ed25519 Seed and authenticates Footer and ImplicitAssertion. | **Compilation flags:** | ``static`` | **Template:** | ``public_sign(Seed,Payload,Footer,ImplicitAssertion,Token)`` | **Mode and number of proofs:** | ``public_sign(+list(byte),+list(byte),+list(byte),+list(byte),-atom)`` - ``one_or_error`` | **Exceptions:** | ``Seed`` is a variable or a partial list: | ``instantiation_error`` | ``Seed`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Seed)`` | ``Seed`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Seed`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``Payload`` is a variable or a partial list: | ``instantiation_error`` | ``Payload`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Payload)`` | ``Payload`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Payload`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``Footer`` is a variable or a partial list: | ``instantiation_error`` | ``Footer`` is not a list of the required number of bytes: | ``type_error(list(byte,32),Footer)`` | ``Footer`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``Footer`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``ImplicitAssertion`` is a variable or a partial list: | ``instantiation_error`` | ``ImplicitAssertion`` is not a list of the required number of bytes: | ``type_error(list(byte,32),ImplicitAssertion)`` | ``ImplicitAssertion`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``ImplicitAssertion`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: public_verify/3 .. _paseto_protocol/0::public_verify/3: ``public_verify/3`` ^^^^^^^^^^^^^^^^^^^ Authenticates a public Token using an Ed25519 public key and empty implicit assertion. | **Compilation flags:** | ``static`` | **Template:** | ``public_verify(Token,PublicKey,Payload)`` | **Mode and number of proofs:** | ``public_verify(+atom,+list(byte),-list(byte))`` - ``zero_or_one_or_error`` | **Exceptions:** | ``Token`` is a variable: | ``instantiation_error`` | ``Token`` is neither a variable nor an atom: | ``type_error(atom,Token)`` | ``Token`` is an atom but not a canonical v4.public token: | ``domain_error(paseto_v4_token,Token)`` | ``PublicKey`` is a variable or a partial list: | ``instantiation_error`` | ``PublicKey`` is not a list of the required number of bytes: | ``type_error(list(byte,32),PublicKey)`` | ``PublicKey`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``PublicKey`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: public_verify/5 .. _paseto_protocol/0::public_verify/5: ``public_verify/5`` ^^^^^^^^^^^^^^^^^^^ Authenticates a public Token using an Ed25519 public key and ImplicitAssertion and returns its authenticated Footer. | **Compilation flags:** | ``static`` | **Template:** | ``public_verify(Token,PublicKey,ImplicitAssertion,Payload,Footer)`` | **Mode and number of proofs:** | ``public_verify(+atom,+list(byte),+list(byte),-list(byte),-list(byte))`` - ``zero_or_one_or_error`` | **Exceptions:** | ``Token`` is a variable: | ``instantiation_error`` | ``Token`` is neither a variable nor an atom: | ``type_error(atom,Token)`` | ``Token`` is an atom but not a canonical v4 token: | ``domain_error(paseto_v4_token,Token)`` | ``Token`` is a canonical v4 token but has a malformed compact serialization: | ``domain_error(paseto_compact_serialization,malformed)`` | ``Token`` contains non-canonical base64url data: | ``representation_error(base64)`` | ``Token`` has a malformed public payload: | ``domain_error(paseto_v4_public_payload,Token)`` | ``PublicKey`` is a variable or a partial list: | ``instantiation_error`` | ``PublicKey`` is not a list of the required number of bytes: | ``type_error(list(byte,32),PublicKey)`` | ``PublicKey`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``PublicKey`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` | ``ImplicitAssertion`` is a variable or a partial list: | ``instantiation_error`` | ``ImplicitAssertion`` is not a list of the required number of bytes: | ``type_error(list(byte,32),ImplicitAssertion)`` | ``ImplicitAssertion`` contains a non-integer byte: | ``type_error(integer,Byte)`` | ``ImplicitAssertion`` contains an integer outside the byte range: | ``domain_error(byte,Byte)`` ------------ .. index:: footer/2 .. _paseto_protocol/0::footer/2: ``footer/2`` ^^^^^^^^^^^^ Extracts a token footer without authenticating it. The result must only be used for pre-authentication key selection. | **Compilation flags:** | ``static`` | **Template:** | ``footer(Token,Footer)`` | **Mode and number of proofs:** | ``footer(+atom,-list(byte))`` - ``one_or_error`` | **Exceptions:** | ``Token`` is a variable: | ``instantiation_error`` | ``Token`` is neither a variable nor an atom: | ``type_error(atom,Token)`` | ``Token`` is an atom but not a canonical v4 token: | ``domain_error(paseto_v4_token,Token)`` | ``Token`` is a canonical v4 token but has a malformed compact serialization: | ``domain_error(paseto_compact_serialization,malformed)`` | ``Token`` contains non-canonical base64url data: | ``representation_error(base64)`` ------------ Protected predicates -------------------- (none) Private predicates ------------------ (none) Operators --------- (none)