4.8. Crypto

alot.crypto.RFC3156_canonicalize(text)

Canonicalizes plain text (MIME-encoded usually) according to RFC3156.

This function works as follows (in that order):

  1. Convert all line endings to \r\n (DOS line endings).
  2. Ensure the text ends with a newline (\r\n).
  3. Encode all occurences of “From ” at the beginning of a line to “From=20” in order to prevent other mail programs to replace this with “> From” (to avoid MBox conflicts) and thus invalidate the signature.
Parameters:text – text to canonicalize (already encoded as quoted-printable)
Return type:str
alot.crypto.RFC3156_micalg_from_algo(hash_algo)

Converts a GPGME hash algorithm name to one conforming to RFC3156.

GPGME returns hash algorithm names such as “SHA256”, but RFC3156 says that programs need to use names such as “pgp-sha256” instead.

Parameters:hash_algo – GPGME hash_algo
Return type:str
alot.crypto.decrypt_verify(encrypted)

Decrypts the given ciphertext string and returns both the signatures (if any) and the plaintext.

Parameters:encrypted – the mail to decrypt
Returns:a tuple (sigs, plaintext) with sigs being a list of a gpgme.Signature and plaintext is a str holding the decrypted mail
Raises :GPGProblem if the decryption fails
alot.crypto.detached_signature_for(plaintext_str, key=None)

Signs the given plaintext string and returns the detached signature.

A detached signature in GPG speak is a separate blob of data containing a signature for the specified plaintext.

Parameters:
  • plaintext_str – text to sign
  • key – gpgme_key_t object representing the key to use
Return type:

tuple of gpgme.NewSignature array and str

alot.crypto.email_as_string(mail)

Converts the given message to a string, without mangling “From” lines (like as_string() does).

Parameters:mail – email to convert to string
Return type:str
alot.crypto.encrypt(plaintext_str, keys=None)

Encrypts the given plaintext string and returns a PGP/MIME compatible string

Parameters:
  • plaintext_str – the mail to encrypt
  • key – gpgme_key_t object representing the key to use
Return type:

a string holding the encrypted mail

alot.crypto.get_key(keyid, validate=False, encrypt=False, sign=False)

Gets a key from the keyring by filtering for the specified keyid, but only if the given keyid is specific enough (if it matches multiple keys, an exception will be thrown).

Parameters:keyid – filter term for the keyring (usually a key ID)
Return type:gpgme.Key
alot.crypto.hash_key(key)

Returns a hash of the given key. This is a workaround for https://bugs.launchpad.net/pygpgme/+bug/1089865 and can be removed if the missing feature is added to pygpgme

Parameters:key – the key we want a hash of
Return type:a has of the key as string
alot.crypto.list_keys(hint=None, private=False)

Returns a list of all keys containing keyid.

Parameters:
  • keyid – The part we search for
  • private – Whether secret keys are listed
Return type:

list

alot.crypto.verify_detached(message, signature)

Verifies whether the message is authentic by checking the signature.

Parameters:
  • message – the message as str
  • signature – a str containing an OpenPGP signature
Returns:

a list of gpgme.Signature

Raises :

GPGProblem if the verification fails

Previous topic

4.7. Commands

Next topic

5. FAQ

This Page