|
|
- // p≡p Message API
-
- // Copyleft (c) 2019, p≡p foundation
- // this file is under GNU General Public License 3.0
- // see LICENSE.txt
-
- // written by Volker Birk
-
-
- protocol session {
- method encrypt_message
- doc="encrypt message in memory"
- {
- // parms
-
- supply message src
- doc="""
- message to encrypt - usually in-only, but can be in-out for
- unencrypted messages; in that case, we may attach the key and
- decorate the message
- """;
-
- use hash_list extra doc="extra keys for encryption";
-
- create message dst
- doc="""
- pointer to new encrypted message or #NV if no encryption could
- take place
- """
-
- use encformat format doc="encrypted format";
-
- // flags
-
- flags {
- flag default 0x0 doc='"default" means whatever the default behaviour for the function is.';
- flag force_encryption 0x1;
- flag force_unsigned 0x2 doc='This flag is for special use cases and should not be used by normal pEp clients!';
- flag force_no_attached_key 0x4;
- flag inner_message 0x8 doc='This is mainly used by pEp clients to send private keys to their own PGP-only device.';
- flag force_version_1 0x10 doc='This is mainly used by pEp clients to send private keys to their own PGP-only device';
- flag key_reset_only 0x20
- }
-
- // exceptions
-
- throws key_has_ambig_name
- doc="at least one of the receipient keys has an ambiguous name";
-
- throws unencrypted
- doc="""
- on demand or no recipients with usable key, is left unencrypted,
- and key is attached to it
- """
- }
- }
-
-
- protocol session {
- method encrypt_message_and_add_priv_key
- doc="encrypt message in memory, adding an encrypted private key (encrypted separately and sent within the inner message)"
- {
- // parms
-
- use message src
- doc="message to encrypt";
-
- create message dst
- doc="pointer to new encrypted message or NULL if no encryption could take place";
-
- to_fpr
- doc="fingerprint of the recipient key to which the private key should be encrypted";
-
- use format enc_format?
- doc="encrypted format";
-
- // flags
-
- flags {
- flag default 0x0 doc='"default" means whatever the default behaviour for the function is.';
- flag force_encryption 0x1;
- flag force_unsigned 0x2 doc='This flag is for special use cases and should not be used by normal pEp clients!';
- flag force_no_attached_key 0x4;
- flag inner_message 0x8 doc='This is mainly used by pEp clients to send private keys to their own PGP-only device.';
- flag force_version_1 0x10 doc='This is mainly used by pEp clients to send private keys to their own PGP-only device';
- flag key_reset_only 0x20
- }
-
- // exceptions
-
- throws key_has_ambig_name
- doc="at least one of the receipient keys has an ambiguous name";
-
- throws unencrypted
- doc="""
- on demand or no recipients with usable key, is left unencrypted,
- and key is attached to it
- """
- }
- }
-
-
- protocol session {
- method encrypt_message_for_self
- doc="""
- encrypt message in memory for user's identity only,
- ignoring recipients and other identities from the message
- """
- {
- // parms
-
- use message target_id
- doc="self identity this message should be encrypted for";
-
- use message src
- doc="message to encrypt";
-
- provide key? extra
- doc="extra keys for encryption";
-
- create message dst
- doc="pointer to new encrypted message or NULL on failure";
-
- use format enc_format?
- doc="encrypted format";
-
- // flags
-
- flags {
- flag default 0x0 doc='"default" means whatever the default behaviour for the function is.';
- flag force_encryption 0x1;
- flag force_unsigned 0x2 doc='This flag is for special use cases and should not be used by normal pEp clients!';
- flag force_no_attached_key 0x4;
- flag inner_message 0x8 doc='This is mainly used by pEp clients to send private keys to their own PGP-only device.';
- flag force_version_1 0x10 doc='This is mainly used by pEp clients to send private keys to their own PGP-only device';
- flag key_reset_only 0x20
- }
-
- // exceptions
-
- throws key_not_found
- doc="at least one of the receipient keys could not be found";
-
- throws key_has_ambig_name
- doc="at least one of the receipient keys has an ambiguous name";
-
- throws get_key_failed
- doc="cannot retrieve key"
- }
- }
-
-
- protocol session {
- method color_from_rating
- doc="calculate color from rating"
- {
- // parms
-
- provide message rating?
- doc="color representing that rating";
-
- // ratings
-
- ratings {
- rating_undefined 0;
- rating_cannot_decrypt,
- rating_have_no_key,
- rating_unencrypted,
- rating_unencrypted_for_some doc="don't use this any more",
- rating_unreliable,
- rating_reliable,
- rating_trusted,
- rating_trusted_and_anonymized,
- rating_fully_anonymous,
- rating_mistrust -1;
- rating_b0rken -2;
- rating_under_attack -3
- }
-
- // colors
-
- colors {
- color_no_color 0;
- color_yellow,
- color_green,
- color_red -1
- }
-
- // return value
- doc="color representing that rating"
- }
- }
-
-
- protocol session {
- method decrypt_message
- doc="decrypt message in memory"
- {
- // parms
-
- supply message src
- doc="""
- message to decrypt.
- The ownership of src remains with the caller - however, the contents
- might be modified (strings freed and allocated anew or set to NULL,
- etc) intentionally; when this happens, decrypt_flag_src_modified is set.
- """;
-
- create message dst
- doc="pointer to new decrypted message or NULL on failure";
-
- supply message keylist
- doc="""
- in: stringlist with additional keyids for reencryption if needed
- (will be freed and replaced with output keylist)
- out: stringlist with keyids used for signing and encryption. first
- first key is signer, additional keys are the ones it was encrypted
- to. Only signer and whichever of the user's keys was used are reliable.
- """;
-
- return message rating
- doc="rating for the message";
-
- // flags
-
- decrypt_flags {
- decrypt_flag_own_private_key 0x1
- doc="""
- private key was imported for one of our addresses (NOT trusted
- or set to be used - handshake/trust is required for that)
- """
- decrypt_flag_consume 0x2 doc=’used by sync';
- decrypt_flag_ignore 0x4 doc=’used by sync';
- decrypt_flag_src_modified 0x8
- doc="""
- indicates that the src object has been modified. At the moment,
- this is always as a direct result of the behaviour driven
- by the input flags. This flag is the ONLY value that should be
- relied upon to see if such changes have taken place.
- """;
- decrypt_flag_untrusted_server 0x100
- doc="""
- input flags. Used to signal that decrypt function should engage in behaviour
- specified for when the server storing the source is untrusted.
- """
- }
-
- // exceptions
-
- throws decrypted
- doc="if message decrypted but not verified";
-
- throws cannot_reencrypt
- doc="""
- if message was decrypted (and possibly verified) but a reencryption
- operation is expected by the caller and failed.
- """;
-
- throws unencrypted
- doc="""
- if src is unencrypted this function returns unencrypted and sets
- dst to NULL.
- """
- }
- }
-
-
- protocol session {
- method own_message_private_key_details
- doc="details on own key in own message"
- {
- //parms
-
- use message msg
- doc="""
- message to decrypt. msg MUST be encrypted so that this function
- can check own signature.
- """;
-
- create @type? ident
- doc="identity containing uid, address and fpr of key"
- }
- }
-
-
- protocol session {
- method outgoing_message_rating
- doc="get rating for an outgoing message"
- {
- //parms
-
- use message msg
- doc="""
- message to get the rating for. From must point to a valid pEp_identity.
- Dir must be dir_outgoing.
- """;
-
- create message rating
- doc="rating for the message"
- }
- }
-
-
- protocol session {
- method outgoing_message_rating_preview
- doc="get rating preview"
- {
- //parms
-
- use message msg
- doc="""
- message to get the rating for. From must point to a valid pEp_identity.
- Dir must be dir_outgoing.
- """;
-
- create message rating
- doc="rating preview for the message"
- }
- }
-
-
- protocol session {
- method identity_rating
- doc="get rating for a single identity"
- {
- //parms
-
- use @type ident
- doc="identity to get the rating for";
-
- create identity rating
- doc="rating for the identity"
- }
- }
-
-
- protocol session {
- method get_binary_path
- doc="retrieve path of cryptotech binary if available"
- {
- //parms
-
- use @type tech
- doc="cryptotech to get the binary for";
-
- use @type path
- doc="""
- path to cryptotech binary or NULL if not available. **path is owned by
- the library, do not change it!
- """
- }
- }
-
-
- protocol session {
- method get_trustwords
- doc="get full trustwords string for a *pair* of identities"
- {
- //parms
-
- provide message id1
- doc="identity of first party in communication - fpr can't be NULL";
-
- provide message id2
- doc="identity of second party in communication - fpr can't be NULL";
-
- provide message lang
- doc="C string with ISO 639-1 language code";
-
- create message words
- doc="""
- pointer to C string with all trustwords UTF-8 encoded, separated
- by a blank each NULL if language is not supported or trustword
- wordlist is damaged or unavailable.
- The word pointer goes to the ownership of the caller.
- The caller is responsible to free() it (on Windoze use pEp_free())
- """;
-
- create @type? wsize
- doc="length of full trustwords string";
-
- provide @type full
- doc="""
- if true, generate ALL trustwords for these identities.
- else, generate a fixed-size subset. (TODO: fixed-minimum-entropy
- subset in next version)
- """
-
- // exceptions
-
- throws out_of_memory
- doc="out of memory";
-
- throws trustword_not_found
- doc="at least one trustword not found"
- }
- }
-
-
- protocol session
- method get_message_trustwords
- doc="get full trustwords string for message sender and reciever identities"
- {
- //parms
-
- provide @type msg
- doc="message to get sender identity from";
-
- provide message keylist
- doc="NULL if message to be decrypted, keylist returned by decrypt_message() otherwise.";
-
- provide message received_by
- doc="identity for account receiving message can't be NULL";
-
- provide @type? lang
- doc="C string with ISO 639-1 language code";
-
- create message words
- doc="""
- pointer to C string with all trustwords UTF-8 encoded, separated by a blank each.
- NULL if language is not supported or trustword wordlist is damaged or unavailable.
- The word pointer goes to the ownership of the caller.
- The caller is responsible to free() it (on Windoze use pEp_free())
- """;
-
- provide @type full
- doc="""
- if true, generate ALL trustwords for these identities.
- else, generate a fixed-size subset. (TODO: fixed-minimum-entropy
- subset in next version)
- """
-
- // exceptions
-
- throws out_of_memory
- doc="out of memory";
-
- throws trustword_not_found
- doc="at least one trustword not found"
- }
- }
-
-
- protocol session
- method re_evaluate_message_rating
- doc="re-evaluate already decrypted message rating"
- {
- //parms
-
- use @type msg
- doc="message to get the rating for. msg->from must point to a valid pEp_identity";
-
- use message x_keylist
- doc="decrypted message recipients keys fpr";
-
- provide message x_enc_status
- doc="original rating for the decrypted message";
-
- create message rating
- doc="rating for the message"
-
- // exceptions
-
- throws illegal_value
- doc="""
- if decrypted message doesn't contain X-EncStatus optional field and
- x_enc_status is pEp_rating_udefined or if decrypted message doesn't
- contain X-Keylist optional field and x_keylist is NULL.
- """;
-
- throws out_of_memory
- doc="if not enough memory could be allocated"
- }
- }
-
-
- protocol session
- method get_key_rating_for_user
- doc="get the rating of a certain key for a certain user"
- {
- //parms
-
- provide @type? user_id
- doc="string with user ID";
-
- provide @type fpr
- doc="string with fingerprint";
-
- create @type rating
- doc="rating of key for this user"
-
- // exceptions
-
- throws record_not_found
- doc="if no trust record for user_id and fpr can be found"
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|