diff options
Diffstat (limited to 'vapi/gpgme.vapi')
-rw-r--r-- | vapi/gpgme.vapi | 1224 |
1 files changed, 1224 insertions, 0 deletions
diff --git a/vapi/gpgme.vapi b/vapi/gpgme.vapi new file mode 100644 index 00000000..49fd2d78 --- /dev/null +++ b/vapi/gpgme.vapi @@ -0,0 +1,1224 @@ +/* libgpgme.vapi + * + * Copyright (C) 2009 Sebastian Reichel <sre@ring0.de> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +/** + * GPGME is an API wrapper around GnuPG, which parses the output of GnuPG. + */ +[CCode (lower_case_cprefix = "gpgme_", cheader_filename = "gpgme.h")] +namespace GPG { + /** + * EngineInfo as List + */ + [CCode (cname = "struct _gpgme_engine_info")] + public struct EngineInfo { + /** + * Next entry in the list + */ + EngineInfo* next; + + /** + * The protocol ID + */ + Protocol protocol; + + /** + * filename of the engine binary + */ + string file_name; + + /** + * version string of the installed binary + */ + string version; + + /** + * minimum version required for gpgme + */ + string req_version; + + /** + * home directory to be used or null for default + */ + string? home_dir; + } + + /** + * A Key from the Keyring + */ + [CCode (cname = "struct _gpgme_key", ref_function = "gpgme_key_ref", ref_function_void = true, unref_function = "gpgme_key_unref", free_function = "gpgme_key_release")] + public class Key { + public bool revoked; + public bool expired; + public bool disabled; + public bool invalid; + public bool can_encrypt; + public bool can_sign; + public bool can_certify; + public bool secret; + public bool can_authenticate; + public bool is_qualified; + public Protocol protocol; + + /** + * If protocol is CMS, this string contains the issuer's serial + */ + public string issuer_serial; + + /** + * If protocol is CMS, this string contains the issuer's name + */ + public string issuer_name; + + /** + * If protocol is CMS, this string contains the issuer's ID + */ + public string issuer_id; + + /** + * If protocol is OpenPGP, this field contains the owner trust level + */ + public Validity owner_trust; + + /** + * The key's subkeys + */ + [CCode(array_null_terminated = true)] + public SubKey[] subkeys; + + /** + * The key's user ids + */ + [CCode(array_null_terminated = true)] + public UserID[] uids; + + public KeylistMode keylist_mode; + } + + /** + * A signature notation + */ + [CCode (cname = "struct _gpgme_sig_notation")] + public struct SigNotation { + /** + * The next SigNotation from the list + */ + SigNotation* next; + + /** + * If name is a null pointer value contains a policy url rather than a notation + */ + string? name; + + /** + * The value of the notation data + */ + string value; + + /** + * The length of the name of the notation data + */ + int name_len; + + /** + * The length of the value of the notation data + */ + int value_len; + + /** + * The accumulated flags + */ + SigNotationFlags flags; + + /** + * notation data is human readable + */ + bool human_readable; + + /** + * notation data is critical + */ + bool critical; + } + + /** + * A subkey from a Key + */ + [CCode (cname = "struct _gpgme_subkey")] + public struct SubKey { + SubKey* next; + bool revoked; + bool expired; + bool disabled; + bool invalid; + bool can_encrypt; + bool can_sign; + bool can_certify; + bool secret; + bool can_authenticate; + bool is_qualified; + bool is_cardkey; + PublicKeyAlgorithm algo; + uint length; + string keyid; + + /** + * Fingerprint of the key in hex form + */ + string fpr; + + /** + * The creation timestamp. + * -1 = invalid, + * 0 = not available + */ + long timestamp; + + /** + * The expiration timestamp. + * 0 = key does not expire + */ + long expires; + + /** + * The serial number of the smartcard holding this key or null + */ + string? cardnumber; + } + + /** + * A signature on a UserID + */ + [CCode (cname = "struct _gpgme_key_sig")] + public struct KeySig { + /** + * The next signature from the list + */ + KeySig* next; + bool invoked; + bool expired; + bool invalid; + bool exportable; + PublicKeyAlgorithm algo; + string keyid; + + /** + * The creation timestamp. + * -1 = invalid, + * 0 = not available + */ + long timestamp; + + /** + * The expiration timestamp. + * 0 = key does not expire + */ + long expires; + + GPGError.ErrorCode status; + + string uid; + string name; + string email; + string comment; + + /** + * Crypto backend specific signature class + */ + uint sig_class; + + SigNotation notations; + } + + /** + * A UserID from a Key + */ + [CCode (cname = "struct _gpgme_user_id")] + public struct UserID { + /** + * The next UserID from the list + */ + UserID* next; + + bool revoked; + bool invalid; + Validity validity; + string uid; + string name; + string email; + string comment; + + KeySig signatures; + } + + /** + * verify result of OP + */ + [CCode (cname = "struct _gpgme_op_verify_result")] + public struct VerifyResult { + Signature* signatures; + + /** + * The original file name of the plaintext message, if available + */ + string? file_name; + } + + /** + * sign result of OP + */ + [CCode (cname = "struct _gpgme_op_sign_result")] + public struct SignResult { + InvalidKey invalid_signers; + Signature* signatures; + } + + /** + * encrypt result of OP + */ + [CCode (cname = "struct _gpgme_op_encrypt_result")] + public struct EncryptResult { + /** + * The list of invalid repipients + */ + InvalidKey invalid_signers; + } + + /** + * decrypt result of OP + */ + [CCode (cname = "struct _gpgme_op_decrypt_result")] + public struct DecryptResult { + string unsupported_algorithm; + bool wrong_key_usage; + Recipient recipients; + string filename; + } + + /** + * An receipient + */ + [CCode (cname = "struct _gpgme_recipient")] + public struct Recipient { + Recipient *next; + string keyid; + PublicKeyAlgorithm pubkey_algo; + GPGError.ErrorCode status; + } + + /** + * list of invalid keys + */ + [CCode (cname = "struct _gpgme_invalid_key")] + public struct InvalidKey { + InvalidKey *next; + string fpr; + GPGError.ErrorCode reason; + } + + /** + * A Signature + */ + [CCode (cname = "struct _gpgme_signature")] + public struct Signature { + /** + * The next signature in the list + */ + Signature *next; + + /** + * A summary of the signature status + */ + Sigsum summary; + + /** + * Fingerprint or key ID of the signature + */ + string fpr; + + /** + * The Error status of the signature + */ + GPGError.ErrorCode status; + + /** + * Notation data and policy URLs + */ + SigNotation notations; + + /** + * Signature creation time + */ + ulong timestamp; + + /** + * Signature expiration time or 0 + */ + ulong exp_timestamp; + + /** + * Key should not have been used for signing + */ + bool wrong_key_usage; + + /** + * PKA status + */ + PKAStatus pka_trust; + + /** + * Validity has been verified using the chain model + */ + bool chain_model; + + /** + * Validity + */ + Validity validity; + + /** + * Validity reason + */ + GPGError.ErrorCode validity_reason; + + /** + * public key algorithm used to create the signature + */ + PublicKeyAlgorithm pubkey_algo; + + /** + * The hash algorithm used to create the signature + */ + HashAlgorithm hash_algo; + + /** + * The mailbox from the PKA information or null + */ + string? pka_adress; + } + + /** + * PKA Status + */ + public enum PKAStatus { + NOT_AVAILABLE, + BAD, + OKAY, + RFU + } + + /** + * Flags used for the summary field in a Signature + */ + [CCode (cname = "gpgme_sigsum_t", cprefix = "GPGME_SIGSUM_")] + public enum Sigsum { + /** + * The signature is fully valid + */ + VALID, + + /** + * The signature is good + */ + GREEN, + + /** + * The signature is bad + */ + RED, + + /** + * One key has been revoked + */ + KEY_REVOKED, + + /** + * One key has expired + */ + KEY_EXPIRED, + + /** + * The signature has expired + */ + SIG_EXPIRED, + + /** + * Can't verfiy - missing key + */ + KEY_MISSING, + + /** + * CRL not available + */ + CRL_MISSING, + + /** + * Available CRL is too old + */ + CRL_TOO_OLD, + + /** + * A policy was not met + */ + BAD_POLICY, + + /** + * A system error occured + */ + SYS_ERROR + } + + /** + * Encoding modes of Data objects + */ + [CCode (cname = "gpgme_data_encoding_t", cprefix = "GPGME_DATA_ENCODING_")] + public enum DataEncoding { + /** + * Not specified + */ + NONE, + /** + * Binary encoded + */ + BINARY, + /** + * Base64 encoded + */ + BASE64, + /** + * Either PEM or OpenPGP Armor + */ + ARMOR, + /** + * LF delimited URL list + */ + URL, + /** + * LF percent escaped, delimited URL list + */ + URLESC, + /** + * Nul determined URL list + */ + URL0 + } + + /** + * Public Key Algorithms from libgcrypt + */ + [CCode (cname = "gpgme_pubkey_algo_t", cprefix = "GPGME_PK_")] + public enum PublicKeyAlgorithm { + RSA, + RSA_E, + RSA_S, + ELG_E, + DSA, + ELG + } + + /** + * Hash Algorithms from libgcrypt + */ + [CCode (cname = "gpgme_hash_algo_t", cprefix = "GPGME_MD_")] + public enum HashAlgorithm { + NONE, + MD5, + SHA1, + RMD160, + MD2, + TIGER, + HAVAL, + SHA256, + SHA384, + SHA512, + MD4, + MD_CRC32, + MD_CRC32_RFC1510, + MD_CRC24_RFC2440 + } + + /** + * Signature modes + */ + [CCode (cname = "gpgme_sig_mode_t", cprefix = "GPGME_SIG_MODE_")] + public enum SigMode { + NORMAL, + DETACH, + CLEAR + } + + /** + * Validities for a trust item or key + */ + [CCode (cname = "gpgme_validity_t", cprefix = "GPGME_VALIDITY_")] + public enum Validity { + UNKNOWN, + UNDEFINED, + NEVER, + MARGINAL, + FULL, + ULTIMATE + } + + /** + * Protocols + */ + [CCode (cname = "gpgme_protocol_t", cprefix = "GPGME_PROTOCOL_")] + public enum Protocol { + /** + * Default Mode + */ + OpenPGP, + /** + * Cryptographic Message Syntax + */ + CMS, + /** + * Special code for gpgconf + */ + GPGCONF, + /** + * Low-level access to an Assuan server + */ + ASSUAN, + UNKNOWN + } + + /** + * Keylist modes used by Context + */ + [CCode (cname = "gpgme_keylist_mode_t", cprefix = "GPGME_KEYLIST_MODE_")] + public enum KeylistMode { + LOCAL, + EXTERN, + SIGS, + SIG_NOTATIONS, + EPHEMERAL, + VALIDATE + } + + /** + * Export modes used by Context + */ + [CCode (cname = "gpgme_export_mode_t", cprefix = "GPGME_EXPORT_MODE_")] + public enum ExportMode { + EXTERN + } + + /** + * Audit log function flags + */ + [CCode (cprefix = "GPGME_AUDITLOG_")] + public enum AuditLogFlag { + HTML, + WITH_HELP + } + + /** + * Signature notation flags + */ + [CCode (cname = "gpgme_sig_notation_flags_t", cprefix = "GPGME_SIG_NOTATION_")] + public enum SigNotationFlags { + HUMAN_READABLE, + CRITICAL + } + + /** + * Encryption Flags + */ + [CCode (cname = "gpgme_encrypt_flags_t", cprefix = "GPGME_ENCRYPT_")] + public enum EncryptFlags { + ALWAYS_TRUST, + NO_ENCRYPT_TO + } + + /** + * Edit Operation Stati + */ + [CCode (cname = "gpgme_status_code_t", cprefix = "GPGME_STATUS_")] + public enum StatusCode { + EOF, + ENTER, + LEAVE, + ABORT, + GOODSIG, + BADSIG, + ERRSIG, + BADARMOR, + RSA_OR_IDEA, + KEYEXPIRED, + KEYREVOKED, + TRUST_UNDEFINED, + TRUST_NEVER, + TRUST_MARGINAL, + TRUST_FULLY, + TRUST_ULTIMATE, + SHM_INFO, + SHM_GET, + SHM_GET_BOOL, + SHM_GET_HIDDEN, + NEED_PASSPHRASE, + VALIDSIG, + SIG_ID, + SIG_TO, + ENC_TO, + NODATA, + BAD_PASSPHRASE, + NO_PUBKEY, + NO_SECKEY, + NEED_PASSPHRASE_SYM, + DECRYPTION_FAILED, + DECRYPTION_OKAY, + MISSING_PASSPHRASE, + GOOD_PASSPHRASE, + GOODMDC, + BADMDC, + ERRMDC, + IMPORTED, + IMPORT_OK, + IMPORT_PROBLEM, + IMPORT_RES, + FILE_START, + FILE_DONE, + FILE_ERROR, + BEGIN_DECRYPTION, + END_DECRYPTION, + BEGIN_ENCRYPTION, + END_ENCRYPTION, + DELETE_PROBLEM, + GET_BOOL, + GET_LINE, + GET_HIDDEN, + GOT_IT, + PROGRESS, + SIG_CREATED, + SESSION_KEY, + NOTATION_NAME, + NOTATION_DATA, + POLICY_URL, + BEGIN_STREAM, + END_STREAM, + KEY_CREATED, + USERID_HINT, + UNEXPECTED, + INV_RECP, + NO_RECP, + ALREADY_SIGNED, + SIGEXPIRED, + EXPSIG, + EXPKEYSIG, + TRUNCATED, + ERROR, + NEWSIG, + REVKEYSIG, + SIG_SUBPACKET, + NEED_PASSPHRASE_PIN, + SC_OP_FAILURE, + SC_OP_SUCCESS, + CARDCTRL, + BACKUP_KEY_CREATED, + PKA_TRUST_BAD, + PKA_TRUST_GOOD, + PLAINTEXT + } + + /** + * The Context object represents a GPG instance + */ + [Compact] + [CCode (cname = "struct gpgme_context", free_function = "gpgme_release", cprefix = "gpgme_")] + public class Context { + /** + * Create a new context, returns Error Status Code + */ + [CCode (cname = "gpgme_new")] + public static GPGError.ErrorCode Context(out Context ctx); + + public GPGError.ErrorCode set_protocol(Protocol p); + public Protocol get_protocol(); + + public void set_armor(bool yes); + public bool get_armor(); + + public void set_textmode(bool yes); + public bool get_textmode(); + + public GPGError.ErrorCode set_keylist_mode(KeylistMode mode); + public KeylistMode get_keylist_mode(); + + /** + * Include up to nr_of_certs certificates in an S/MIME message, + * Use "-256" to use the backend's default. + */ + public void set_include_certs(int nr_of_certs = -256); + + /** + * Return the number of certs to include in an S/MIME message + */ + public int get_include_certs(); + + /** + * Set callback function for requesting passphrase. hook_value will be + * passed as first argument. + */ + public void set_passphrase_cb(passphrase_callback cb, void* hook_value = null); + + /** + * Get callback function and hook_value + */ + public void get_passphrase_cb(out passphrase_callback cb, out void* hook_value); + + public GPGError.ErrorCode set_locale(int category, string val); + + /** + * Get information about the configured engines. The returned data is valid + * until the next set_engine_info() call. + */ + [CCode (cname = "gpgme_ctx_get_engine_info")] + public EngineInfo* get_engine_info(); + + /** + * Set information about the configured engines. The string parameters may not + * be free'd after this calls, because they are not copied. + */ + [CCode (cname = "gpgme_ctx_set_engine_info")] + public GPGError.ErrorCode set_engine_info(Protocol proto, string file_name, string home_dir); + + /** + * Delete all signers + */ + public void signers_clear(); + + /** + * Add key to list of signers + */ + public GPGError.ErrorCode signers_add(Key key); + + /** + * Get the n-th signer's key + */ + public Key* signers_enum(int n); + + /** + * Clear all notation data + */ + public void sig_notation_clear(); + + /** + * Add human readable notation data. If name is null, + * then value val should be a policy URL. The HUMAN_READABLE + * flag is forced to be true for notation data and false + * for policy URLs. + */ + public GPGError.ErrorCode sig_notation_add(string name, string val, SigNotationFlags flags); + + /** + * Get sig notations + */ + public SigNotation* sig_notation_get(); + + /** + * Get key with the fingerprint FPR from the crypto backend. + * If SECRET is true, get the secret key. + */ + public GPGError.ErrorCode get_key(string fpr, out Key key, bool secret); + + /** + * process the pending operation and, if hang is true, wait for + * the pending operation to finish. + */ + public Context* wait(out GPGError.ErrorCode status, bool hang); + + /** + * Retrieve a pointer to the results of the signing operation + */ + public SignResult* op_sign_result(); + + /** + * Sign the plaintext PLAIN and store the signature in SIG. + */ + public GPGError.ErrorCode op_sign(Data plain, Data sig, SigMode mode); + + /** + * Retrieve a pointer to the result of the verify operation + */ + public VerifyResult* op_verify_result(); + + /** + * Verify that SIG is a valid signature for SIGNED_TEXT. + */ + public GPGError.ErrorCode op_verify(Data sig, Data signed_text, Data? plaintext); + + /** + * Retrieve a pointer to the result of the encrypt operation + */ + public EncryptResult* op_encrypt_result(); + + /** + * Encrypt plaintext PLAIN for the recipients RECP and store the + * resulting ciphertext in CIPHER. + */ + public GPGError.ErrorCode op_encrypt([CCode (array_length = false)] Key[] recp, EncryptFlags flags, Data plain, Data cipher); + + /** + * Retrieve a pointer to the result of the decrypt operation + */ + public DecryptResult* op_decrypt_result(); + + /** + * Decrypt ciphertext CIPHER and store the resulting plaintext + * in PLAIN. + */ + public GPGError.ErrorCode op_decrypt(Data cipher, Data plain); + + /** + * Export the keys found by PATTERN into KEYDATA. If PATTERN is + * NULL all keys will be exported. + */ + public GPGError.ErrorCode op_export(string? pattern, ExportMode mode, Data keydata); + + /** + * Import the keys in KEYDATA. + */ + public GPGError.ErrorCode op_import(Data keydata); + + /** + * Get result of last op_import. + */ + public unowned ImportResult op_import_result(); + + /** + * Initiates a key listing operation. It sets everything up, so that + * subsequent invocations of op_keylist_next() return the keys in the list. + * + * If pattern is NULL, all available keys are returned. Otherwise, pattern + * contains an engine specific expression that is used to limit the list to + * all keys matching the pattern. + * + * If secret_only is not 0, the list is restricted to secret keys only. + * + * The context will be busy until either all keys are received (and + * op_keylist_next() returns GPG_ERR_EOF), or gpgme_op_keylist_end is called + * to finish the operation. + * + * The function returns the error code GPG_ERR_INV_VALUE if ctx is not a valid + * pointer, and passes through any errors that are reported by the crypto engine + * support routines. + */ + public GPGError.ErrorCode op_keylist_start(string? pattern = null, int secret_only = 0); + + /** + * returns the next key in the list created by a previous op_keylist_start() + * operation in the context ctx. The key will have one reference for the user. + * + * If the last key in the list has already been returned, op_keylist_next() + * returns GPG_ERR_EOF. + * + * The function returns the error code GPG_ERR_INV_VALUE if ctx or r_key is + * not a valid pointer, and GPG_ERR_ENOMEM if there is not enough memory for + * the operation. + */ + public GPGError.ErrorCode op_keylist_next(out Key key); + + /** + * ends a pending key list operation in the context. + * + * After the operation completed successfully, the result of the key listing + * operation can be retrieved with op_keylist_result(). + * + * The function returns the error code GPG_ERR_INV_VALUE if ctx is not a valid + * pointer, and GPG_ERR_ENOMEM if at some time during the operation there was + * not enough memory available. + */ + public GPGError.ErrorCode op_keylist_end(); + + /** + * The function op_keylist_result() returns a KeylistResult holding the result of + * a op_keylist_*() operation. The returned KeylistResult is only valid if the last + * operation on the context was a key listing operation, and if this operation + * finished successfully. The returned KeylistResult is only valid until the next + * operation is started on the context. + */ + public KeylistResult op_keylist_result(); + } + + [Flags] + [CCode (cname="unsigned int")] + public enum ImportStatusFlags { + /** + * The key was new. + */ + [CCode (cname = "GPGME_IMPORT_NEW")] + NEW, + /** + * The key contained new user IDs. + */ + [CCode (cname = "GPGME_IMPORT_UID")] + UID, + /** + * The key contained new signatures. + */ + [CCode (cname = "GPGME_IMPORT_SIG")] + SIG, + /** + * The key contained new sub keys. + */ + [CCode (cname = "GPGME_IMPORT_SUBKEY")] + SUBKEY, + /** + * The key contained a secret key. + */ + [CCode (cname = "GPGME_IMPORT_SECRET")] + SECRET + } + + [Compact] + [CCode (cname = "struct _gpgme_import_status")] + public class ImportStatus { + /** + * This is a pointer to the next status structure in the linked list, or null + * if this is the last element. + */ + public ImportStatus? next; + + /** + * fingerprint of the key that was considered. + */ + public string fpr; + + /** + * If the import was not successful, this is the error value that caused the + * import to fail. Otherwise the error code is GPG_ERR_NO_ERROR. + */ + public GPGError.ErrorCode result; + + /** + * Flags what parts of the key have been imported. May be 0, if the key has + * already been known. + */ + public ImportStatusFlags status; + } + + [Compact] + [CCode (cname = "struct _gpgme_op_import_result")] + public class ImportResult { + /** + * The total number of considered keys. + */ + public int considered; + + /** + * The number of keys without user ID. + */ + public int no_user_id; + + /** + * The total number of imported keys. + */ + public int imported; + + /** + * The number of imported RSA keys. + */ + public int imported_rsa; + + /** + * The number of unchanged keys. + */ + public int unchanged; + + /** + * The number of new user IDs. + */ + public int new_user_ids; + + /** + * The number of new sub keys. + */ + public int new_sub_keys; + + /** + * The number of new signatures. + */ + public int new_signatures; + + /** + * The number of new revocations. + */ + public int new_revocations; + + /** + * The total number of secret keys read. + */ + public int secret_read; + + /** + * The number of imported secret keys. + */ + public int secret_imported; + + /** + * The number of unchanged secret keys. + */ + public int secret_unchanged; + + /** + * The number of keys not imported. + */ + public int not_imported; + + /* + * A linked list of ImportStatus objects which + * contains more information about the keys for + * which an import was attempted. + */ + public ImportStatus imports; + } + + [Compact] + [CCode (cname = "struct _gpgme_op_keylist_result")] + public class KeylistResult { + uint truncated; + } + + + /** + * Data Object, contains encrypted and/or unencrypted data + */ + [Compact] + [CCode (cname = "struct gpgme_data", free_function = "gpgme_data_release", cprefix = "gpgme_data_")] + public class Data { + /** + * Create a new data buffer, returns Error Status Code. + */ + [CCode (cname = "gpgme_data_new")] + public static GPGError.ErrorCode create(out Data d); + + /** + * Create a new data buffer filled with SIZE bytes starting + * from BUFFER. If COPY is false, COPYING is delayed until + * necessary and the data is taken from the original location + * when needed. Returns Error Status Code. + */ + [CCode (cname = "gpgme_data_new_from_mem")] + public static GPGError.ErrorCode create_from_memory(out Data d, uint8[] buffer, bool copy); + + /** + * Create a new data buffer filled with the content of the file. + * COPY must be non-zero. For delayed read, please use + * create_from_fd or create_from stream instead. + */ + [CCode (cname = "gpgme_data_new_from_file")] + public static GPGError.ErrorCode create_from_file(out Data d, string filename, int copy = 1); + + + /** + * Destroy the object and return a pointer to its content. + * It's size is returned in R_LEN. + */ + [CCode (cname = "gpgme_data_release_and_get_mem")] + public string release_and_get_mem(out size_t len); + + /** + * Read up to SIZE bytes into buffer BUFFER from the data object. + * Return the number of characters read, 0 on EOF and -1 on error. + * If an error occurs, errno is set. + */ + public ssize_t read(uint8[] buf); + + /** + * Write up to SIZE bytes from buffer BUFFER to the data object. + * Return the number of characters written, or -1 on error. + * If an error occurs, errno is set. + */ + public ssize_t write(uint8[] buf); + + /** + * Set the current position from where the next read or write + * starts in the data object to OFFSET, relativ to WHENCE. + */ + public long seek(long offset, int whence=0); + + /** + * Get the encoding attribute of the buffer + */ + public DataEncoding *get_encoding(); + + /** + * Set the encoding attribute of the buffer to ENC + */ + public GPGError.ErrorCode set_encoding(DataEncoding enc); + } + + [CCode (cname = "gpgme_get_protocol_name")] + public unowned string get_protocol_name(Protocol p); + + [CCode (cname = "gpgme_pubkey_algo_name")] + public unowned string get_public_key_algorithm_name(PublicKeyAlgorithm algo); + + [CCode (cname = "gpgme_hash_algo_name")] + public unowned string get_hash_algorithm_name(HashAlgorithm algo); + + [CCode (cname = "gpgme_passphrase_cb_t", has_target = false)] + public delegate GPGError.ErrorCode passphrase_callback(void* hook, string uid_hint, string passphrase_info, bool prev_was_bad, int fd); + + /** + * Get version of libgpgme + * Always call this function before using gpgme, it initializes some stuff + */ + [CCode (cname = "gpgme_check_version")] + public unowned string check_version(string? required_version = null); + + /** + * Verify that the engine implementing proto is installed and + * available. + */ + [CCode (cname = "gpgme_engine_check_version")] + public GPGError.ErrorCode engine_check_version(Protocol proto); + + /** + * Get information about the configured engines. The returned data is valid + * until the next set_engine_info() call. + */ + [CCode (cname = "gpgme_get_engine_information")] + public GPGError.ErrorCode get_engine_information(out EngineInfo engine_info); + + /** + * Return the error string for ERR in the user-supplied buffer BUF + * of size BUFLEN. This function is thread-safe, if a thread-safe + * strerror_r() function is provided by the system. If the function + * succeeds, 0 is returned and BUF contains the string describing + * the error. If the buffer was not large enough, ERANGE is returned + * and BUF contains as much of the beginning of the error string as + * fits into the buffer. Returns Error Status Code. + */ + [CCode (cname = "gpgme_strerror_r")] + public int strerror_r(GPGError.ErrorCode err, uint8[] buf); + + /** + * Like strerror_r, but returns a pointer to the string. This method + * is not thread safe! + */ + [CCode (cname = "gpgme_strerror")] + public unowned string strerror(GPGError.ErrorCode err); +} |