NAME
Protocol::Matrix
- Helper functions for the Matrix protocol
DESCRIPTION
This module provides some helper functions for implementing a matrix client or server. Currently it only contains a few base-level functions to assist with signing and verifying signatures on federation-level events.
FUNCTIONS
encode_json_for_signing
$json = encode_json_for_signing( $data )
Encodes a given HASH reference as Canonical JSON, having removed the signatures
and unsigned
keys if present. This is the first step towards signing it or verifying an embedded signature in it. The hash referred to by $data
remains unmodified by this function.
encode_base64_unpadded
$base64 = encode_base64( $bytes )
Returns a character string containing the Base-64 encoding of the given bytes, with no internal linebreaks and no trailing padding.
sign_json
sign_json( $data, secret_key => $key, origin => $name, key_id => $id )
Modifies the given HASH reference in-place to add a signature. This signature is created from the given key, and annotated as being from the given origin name and key ID. Existing signatures already in the hash are not disturbed.
The $key
should be a plain byte string or Data::Locker object obtained from Crypt::NaCl::Sodium::sign's keypair
method.
verify_json_signature
verify_json_signature( $data, public_key => $key, origin => $name, key_id => $id )
Inspects the given HASH reference to check that it contains a signature from the named origin, with the given key ID, and that it is actually valid.
This function does not return an interesting value; all failures are indicated by thrown exceptions. If no exception is thrown, it can be presumed valid.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>