Compare commits
No commits in common. "e6926725f7be94ec4430054b2880f8db33d19541" and "ff9bd114ab3a90b9083d947eac9a856472fa2515" have entirely different histories.
e6926725f7
...
ff9bd114ab
3 changed files with 70 additions and 871 deletions
|
@ -17,9 +17,9 @@ audrey_deps = [
|
||||||
dependency('gtk4', version: '>= 4.16'),
|
dependency('gtk4', version: '>= 4.16'),
|
||||||
dependency('json-glib-1.0', version: '>= 1.10'),
|
dependency('json-glib-1.0', version: '>= 1.10'),
|
||||||
dependency('libadwaita-1', version: '>= 1.6'),
|
dependency('libadwaita-1', version: '>= 1.6'),
|
||||||
dependency('libgcrypt', version: '>= 1.11'),
|
|
||||||
dependency('libsecret-1', version: '>= 0.21'),
|
dependency('libsecret-1', version: '>= 0.21'),
|
||||||
dependency('libsoup-3.0', version: '>= 3.6'),
|
dependency('libsoup-3.0', version: '>= 3.6'),
|
||||||
|
dependency('sqlite3'),
|
||||||
]
|
]
|
||||||
|
|
||||||
blueprints = custom_target(
|
blueprints = custom_target(
|
||||||
|
@ -48,5 +48,4 @@ executable(
|
||||||
dependencies: audrey_deps,
|
dependencies: audrey_deps,
|
||||||
include_directories: config_inc,
|
include_directories: config_inc,
|
||||||
install: true,
|
install: true,
|
||||||
vala_args: ['--vapidir', meson.current_source_dir() / 'vapi'],
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
[CCode (cname = "sqlite3_randomness")]
|
||||||
|
public extern void randomness (int N, void *P);
|
||||||
|
|
||||||
[GtkTemplate (ui = "/eu/callcc/audrey/ui/setup.ui")]
|
[GtkTemplate (ui = "/eu/callcc/audrey/ui/setup.ui")]
|
||||||
public class Ui.Setup : Adw.PreferencesDialog {
|
public class Ui.Setup : Adw.PreferencesDialog {
|
||||||
public string status { get; private set; default = _("Not connected"); }
|
public string status { get; private set; default = _("Not connected"); }
|
||||||
|
@ -13,6 +16,10 @@ public class Ui.Setup : Adw.PreferencesDialog {
|
||||||
|
|
||||||
public signal void connected (Subsonic api);
|
public signal void connected (Subsonic api);
|
||||||
|
|
||||||
|
private Sqlite.Database db;
|
||||||
|
private Sqlite.Statement db_get;
|
||||||
|
private Sqlite.Statement db_set;
|
||||||
|
|
||||||
private static Secret.Schema secret_schema = new Secret.Schema (
|
private static Secret.Schema secret_schema = new Secret.Schema (
|
||||||
"eu.callcc.audrey",
|
"eu.callcc.audrey",
|
||||||
Secret.SchemaFlags.NONE,
|
Secret.SchemaFlags.NONE,
|
||||||
|
@ -20,6 +27,30 @@ public class Ui.Setup : Adw.PreferencesDialog {
|
||||||
"username", Secret.SchemaAttributeType.STRING
|
"username", Secret.SchemaAttributeType.STRING
|
||||||
);
|
);
|
||||||
|
|
||||||
|
construct {
|
||||||
|
var app_config_dir = Path.build_filename (Environment.get_user_config_dir (), "audrey");
|
||||||
|
|
||||||
|
try {
|
||||||
|
File.new_build_filename (app_config_dir).make_directory_with_parents ();
|
||||||
|
} catch (Error e) {
|
||||||
|
// just ignore if the directory already existed
|
||||||
|
}
|
||||||
|
|
||||||
|
int ec = Sqlite.Database.open (Path.build_filename (app_config_dir, "config.db"), out this.db);
|
||||||
|
assert (ec == Sqlite.OK);
|
||||||
|
|
||||||
|
ec = this.db.exec ("""
|
||||||
|
CREATE TABLE IF NOT EXISTS Setup (key UNIQUE, value);
|
||||||
|
""", null, null);
|
||||||
|
assert (ec == Sqlite.OK);
|
||||||
|
|
||||||
|
ec = this.db.prepare_v2 ("""SELECT value FROM Setup WHERE key IS ?1""", -1, out this.db_get);
|
||||||
|
assert (ec == Sqlite.OK);
|
||||||
|
|
||||||
|
ec = this.db.prepare_v2 ("""INSERT OR REPLACE INTO Setup VALUES (?1, ?2)""", -1, out this.db_set);
|
||||||
|
assert (ec == Sqlite.OK);
|
||||||
|
}
|
||||||
|
|
||||||
[GtkCallback] private void on_authn_changed () {
|
[GtkCallback] private void on_authn_changed () {
|
||||||
this.authn_can_validate = true;
|
this.authn_can_validate = true;
|
||||||
}
|
}
|
||||||
|
@ -56,52 +87,40 @@ public class Ui.Setup : Adw.PreferencesDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load () {
|
public void load () {
|
||||||
this.authn_can_edit = false;
|
this.db_get.bind_text (1, "server_url");
|
||||||
Secret.password_searchv.begin (
|
if (this.db_get.step () == Sqlite.ROW) {
|
||||||
secret_schema,
|
this.server_url = this.db_get.column_text (0);
|
||||||
new HashTable<string, string> (null, null),
|
|
||||||
Secret.SearchFlags.NONE,
|
|
||||||
null,
|
|
||||||
(obj, res) => {
|
|
||||||
try {
|
|
||||||
var list = Secret.password_searchv.end (res);
|
|
||||||
if (list == null) {
|
|
||||||
// didn't find shit, leave all empty
|
|
||||||
this.server_url = "";
|
|
||||||
this.username = "";
|
|
||||||
this.password = "";
|
|
||||||
// TODO: onboarding
|
|
||||||
this.authn_can_edit = true;
|
|
||||||
this.authn_can_validate = true;
|
|
||||||
} else {
|
} else {
|
||||||
var first = list.data;
|
this.server_url = "";
|
||||||
assert (first != null);
|
}
|
||||||
|
assert (this.db_get.reset () == Sqlite.OK);
|
||||||
|
|
||||||
this.server_url = first.attributes["server-url"];
|
this.db_get.bind_text (1, "username");
|
||||||
this.username = first.attributes["username"];
|
if (this.db_get.step () == Sqlite.ROW) {
|
||||||
|
this.username = this.db_get.column_text (0);
|
||||||
|
} else {
|
||||||
|
this.username = "";
|
||||||
|
}
|
||||||
|
assert (this.db_get.reset () == Sqlite.OK);
|
||||||
|
|
||||||
first.retrieve_secret.begin (null, (obj, res) => {
|
this.authn_can_edit = false;
|
||||||
|
Secret.password_lookup.begin (secret_schema, null, (obj, res) => {
|
||||||
try {
|
try {
|
||||||
var value = first.retrieve_secret.end (res);
|
string? password = Secret.password_lookup.end (res);
|
||||||
this.password = value.get_text () ?? "";
|
this.password = password ?? "";
|
||||||
} catch (Error e) {
|
} catch (Error e) {
|
||||||
error ("could not retrieve password from credentials: %s", e.message);
|
error ("could not look up password in keyring: %s", e.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// first connection
|
// first connection
|
||||||
this.authn_can_validate = true;
|
this.authn_can_validate = true;
|
||||||
this.on_authn_validate_activated ();
|
this.on_authn_validate_activated ();
|
||||||
});
|
}, "server-url", this.server_url, "username", this.username);
|
||||||
}
|
|
||||||
} catch (Error e) {
|
|
||||||
error ("could not search for password in keyring: %s", e.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void salt_password (string password, out string token, out string salt) {
|
private void salt_password (string password, out string token, out string salt) {
|
||||||
uchar salt_bytes[8];
|
uchar salt_bytes[8];
|
||||||
GCrypt.Random.randomize (salt_bytes);
|
randomness (8, salt_bytes);
|
||||||
uchar salt_chars[17];
|
uchar salt_chars[17];
|
||||||
for (int i = 0; i < 8; i += 1) {
|
for (int i = 0; i < 8; i += 1) {
|
||||||
salt_chars[2*i+0] = "0123456789abcdef"[(salt_bytes[i]>>4)&0xf];
|
salt_chars[2*i+0] = "0123456789abcdef"[(salt_bytes[i]>>4)&0xf];
|
||||||
|
@ -117,6 +136,16 @@ public class Ui.Setup : Adw.PreferencesDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save () {
|
public void save () {
|
||||||
|
this.db_set.bind_text (1, "server_url");
|
||||||
|
this.db_set.bind_text (2, this.server_url);
|
||||||
|
assert (this.db_set.step () == Sqlite.DONE);
|
||||||
|
assert (this.db_set.reset () == Sqlite.OK);
|
||||||
|
|
||||||
|
this.db_set.bind_text (1, "username");
|
||||||
|
this.db_set.bind_text (2, this.username);
|
||||||
|
assert (this.db_set.step () == Sqlite.DONE);
|
||||||
|
assert (this.db_set.reset () == Sqlite.OK);
|
||||||
|
|
||||||
this.authn_can_edit = false;
|
this.authn_can_edit = false;
|
||||||
Secret.password_store.begin (secret_schema, null, "Subsonic password", this.password, null, (obj, res) => {
|
Secret.password_store.begin (secret_schema, null, "Subsonic password", this.password, null, (obj, res) => {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,829 +0,0 @@
|
||||||
/* gcrypt.vapi
|
|
||||||
*
|
|
||||||
* Copyright:
|
|
||||||
* 2008 Jiqing Qiang
|
|
||||||
* 2008, 2010, 2012-2013 Evan Nemerson
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
* Author:
|
|
||||||
* Jiqing Qiang <jiqing.qiang@gmail.com>
|
|
||||||
* Evan Nemerson <evan@coeus-group.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
[CCode (cheader_filename = "gcrypt.h", lower_case_cprefix = "gcry_")]
|
|
||||||
namespace GCrypt {
|
|
||||||
[CCode (cname = "gpg_err_source_t", cprefix = "GPG_ERR_SOURCE_")]
|
|
||||||
public enum ErrorSource {
|
|
||||||
UNKNOWN,
|
|
||||||
GCRYPT,
|
|
||||||
GPG,
|
|
||||||
GPGSM,
|
|
||||||
GPGAGENT,
|
|
||||||
PINENTRY,
|
|
||||||
SCD,
|
|
||||||
GPGME,
|
|
||||||
KEYBOX,
|
|
||||||
KSBA,
|
|
||||||
DIRMNGR,
|
|
||||||
GSTI,
|
|
||||||
ANY,
|
|
||||||
USER_1,
|
|
||||||
USER_2,
|
|
||||||
USER_3,
|
|
||||||
USER_4,
|
|
||||||
|
|
||||||
/* This is one more than the largest allowed entry. */
|
|
||||||
DIM
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "gpg_err_code_t", cprefix = "GPG_ERR_")]
|
|
||||||
public enum ErrorCode {
|
|
||||||
NO_ERROR,
|
|
||||||
GENERAL,
|
|
||||||
UNKNOWN_PACKET,
|
|
||||||
UNKNOWN_VERSION,
|
|
||||||
PUBKEY_ALGO,
|
|
||||||
DIGEST_ALGO,
|
|
||||||
BAD_PUBKEY,
|
|
||||||
BAD_SECKEY,
|
|
||||||
BAD_SIGNATURE,
|
|
||||||
NO_PUBKEY,
|
|
||||||
CHECKSUM,
|
|
||||||
BAD_PASSPHRASE,
|
|
||||||
CIPHER_ALGO,
|
|
||||||
KEYRING_OPEN,
|
|
||||||
INV_PACKET,
|
|
||||||
INV_ARMOR,
|
|
||||||
NO_USER_ID,
|
|
||||||
NO_SECKEY,
|
|
||||||
WRONG_SECKEY,
|
|
||||||
BAD_KEY,
|
|
||||||
COMPR_ALGO,
|
|
||||||
NO_PRIME,
|
|
||||||
NO_ENCODING_METHOD,
|
|
||||||
NO_ENCRYPTION_SCHEME,
|
|
||||||
NO_SIGNATURE_SCHEME,
|
|
||||||
INV_ATTR,
|
|
||||||
NO_VALUE,
|
|
||||||
NOT_FOUND,
|
|
||||||
VALUE_NOT_FOUND,
|
|
||||||
SYNTAX,
|
|
||||||
BAD_MPI,
|
|
||||||
INV_PASSPHRASE,
|
|
||||||
SIG_CLASS,
|
|
||||||
RESOURCE_LIMIT,
|
|
||||||
INV_KEYRING,
|
|
||||||
TRUSTDB,
|
|
||||||
BAD_CERT,
|
|
||||||
INV_USER_ID,
|
|
||||||
UNEXPECTED,
|
|
||||||
TIME_CONFLICT,
|
|
||||||
KEYSERVER,
|
|
||||||
WRONG_PUBKEY_ALGO,
|
|
||||||
TRIBUTE_TO_D_A,
|
|
||||||
WEAK_KEY,
|
|
||||||
INV_KEYLEN,
|
|
||||||
INV_ARG,
|
|
||||||
BAD_URI,
|
|
||||||
INV_URI,
|
|
||||||
NETWORK,
|
|
||||||
UNKNOWN_HOST,
|
|
||||||
SELFTEST_FAILED,
|
|
||||||
NOT_ENCRYPTED,
|
|
||||||
NOT_PROCESSED,
|
|
||||||
UNUSABLE_PUBKEY,
|
|
||||||
UNUSABLE_SECKEY,
|
|
||||||
INV_VALUE,
|
|
||||||
BAD_CERT_CHAIN,
|
|
||||||
MISSING_CERT,
|
|
||||||
NO_DATA,
|
|
||||||
BUG,
|
|
||||||
NOT_SUPPORTED,
|
|
||||||
INV_OP,
|
|
||||||
TIMEOUT,
|
|
||||||
INTERNAL,
|
|
||||||
EOF_GCRYPT,
|
|
||||||
INV_OBJ,
|
|
||||||
TOO_SHORT,
|
|
||||||
TOO_LARGE,
|
|
||||||
NO_OBJ,
|
|
||||||
NOT_IMPLEMENTED,
|
|
||||||
CONFLICT,
|
|
||||||
INV_CIPHER_MODE,
|
|
||||||
INV_FLAG,
|
|
||||||
INV_HANDLE,
|
|
||||||
TRUNCATED,
|
|
||||||
INCOMPLETE_LINE,
|
|
||||||
INV_RESPONSE,
|
|
||||||
NO_AGENT,
|
|
||||||
AGENT,
|
|
||||||
INV_DATA,
|
|
||||||
ASSUAN_SERVER_FAULT,
|
|
||||||
ASSUAN,
|
|
||||||
INV_SESSION_KEY,
|
|
||||||
INV_SEXP,
|
|
||||||
UNSUPPORTED_ALGORITHM,
|
|
||||||
NO_PIN_ENTRY,
|
|
||||||
PIN_ENTRY,
|
|
||||||
BAD_PIN,
|
|
||||||
INV_NAME,
|
|
||||||
BAD_DATA,
|
|
||||||
INV_PARAMETER,
|
|
||||||
WRONG_CARD,
|
|
||||||
NO_DIRMNGR,
|
|
||||||
DIRMNGR,
|
|
||||||
CERT_REVOKED,
|
|
||||||
NO_CRL_KNOWN,
|
|
||||||
CRL_TOO_OLD,
|
|
||||||
LINE_TOO_LONG,
|
|
||||||
NOT_TRUSTED,
|
|
||||||
CANCELED,
|
|
||||||
BAD_CA_CERT,
|
|
||||||
CERT_EXPIRED,
|
|
||||||
CERT_TOO_YOUNG,
|
|
||||||
UNSUPPORTED_CERT,
|
|
||||||
UNKNOWN_SEXP,
|
|
||||||
UNSUPPORTED_PROTECTION,
|
|
||||||
CORRUPTED_PROTECTION,
|
|
||||||
AMBIGUOUS_NAME,
|
|
||||||
CARD,
|
|
||||||
CARD_RESET,
|
|
||||||
CARD_REMOVED,
|
|
||||||
INV_CARD,
|
|
||||||
CARD_NOT_PRESENT,
|
|
||||||
NO_PKCS15_APP,
|
|
||||||
NOT_CONFIRMED,
|
|
||||||
CONFIGURATION,
|
|
||||||
NO_POLICY_MATCH,
|
|
||||||
INV_INDEX,
|
|
||||||
INV_ID,
|
|
||||||
NO_SCDAEMON,
|
|
||||||
SCDAEMON,
|
|
||||||
UNSUPPORTED_PROTOCOL,
|
|
||||||
BAD_PIN_METHOD,
|
|
||||||
CARD_NOT_INITIALIZED,
|
|
||||||
UNSUPPORTED_OPERATION,
|
|
||||||
WRONG_KEY_USAGE,
|
|
||||||
NOTHING_FOUND,
|
|
||||||
WRONG_BLOB_TYPE,
|
|
||||||
MISSING_VALUE,
|
|
||||||
HARDWARE,
|
|
||||||
PIN_BLOCKED,
|
|
||||||
USE_CONDITIONS,
|
|
||||||
PIN_NOT_SYNCED,
|
|
||||||
INV_CRL,
|
|
||||||
BAD_BER,
|
|
||||||
INV_BER,
|
|
||||||
ELEMENT_NOT_FOUND,
|
|
||||||
IDENTIFIER_NOT_FOUND,
|
|
||||||
INV_TAG,
|
|
||||||
INV_LENGTH,
|
|
||||||
INV_KEYINFO,
|
|
||||||
UNEXPECTED_TAG,
|
|
||||||
NOT_DER_ENCODED,
|
|
||||||
NO_CMS_OBJ,
|
|
||||||
INV_CMS_OBJ,
|
|
||||||
UNKNOWN_CMS_OBJ,
|
|
||||||
UNSUPPORTED_CMS_OBJ,
|
|
||||||
UNSUPPORTED_ENCODING,
|
|
||||||
UNSUPPORTED_CMS_VERSION,
|
|
||||||
UNKNOWN_ALGORITHM,
|
|
||||||
INV_ENGINE,
|
|
||||||
PUBKEY_NOT_TRUSTED,
|
|
||||||
DECRYPT_FAILED,
|
|
||||||
KEY_EXPIRED,
|
|
||||||
SIG_EXPIRED,
|
|
||||||
ENCODING_PROBLEM,
|
|
||||||
INV_STATE,
|
|
||||||
DUP_VALUE,
|
|
||||||
MISSING_ACTION,
|
|
||||||
MODULE_NOT_FOUND,
|
|
||||||
INV_OID_STRING,
|
|
||||||
INV_TIME,
|
|
||||||
INV_CRL_OBJ,
|
|
||||||
UNSUPPORTED_CRL_VERSION,
|
|
||||||
INV_CERT_OBJ,
|
|
||||||
UNKNOWN_NAME,
|
|
||||||
LOCALE_PROBLEM,
|
|
||||||
NOT_LOCKED,
|
|
||||||
PROTOCOL_VIOLATION,
|
|
||||||
INV_MAC,
|
|
||||||
INV_REQUEST,
|
|
||||||
UNKNOWN_EXTN,
|
|
||||||
UNKNOWN_CRIT_EXTN,
|
|
||||||
LOCKED,
|
|
||||||
UNKNOWN_OPTION,
|
|
||||||
UNKNOWN_COMMAND,
|
|
||||||
BUFFER_TOO_SHORT,
|
|
||||||
SEXP_INV_LEN_SPEC,
|
|
||||||
SEXP_STRING_TOO_LONG,
|
|
||||||
SEXP_UNMATCHED_PAREN,
|
|
||||||
SEXP_NOT_CANONICAL,
|
|
||||||
SEXP_BAD_CHARACTER,
|
|
||||||
SEXP_BAD_QUOTATION,
|
|
||||||
SEXP_ZERO_PREFIX,
|
|
||||||
SEXP_NESTED_DH,
|
|
||||||
SEXP_UNMATCHED_DH,
|
|
||||||
SEXP_UNEXPECTED_PUNC,
|
|
||||||
SEXP_BAD_HEX_CHAR,
|
|
||||||
SEXP_ODD_HEX_NUMBERS,
|
|
||||||
SEXP_BAD_OCT_CHAR,
|
|
||||||
ASS_GENERAL,
|
|
||||||
ASS_ACCEPT_FAILED,
|
|
||||||
ASS_CONNECT_FAILED,
|
|
||||||
ASS_INV_RESPONSE,
|
|
||||||
ASS_INV_VALUE,
|
|
||||||
ASS_INCOMPLETE_LINE,
|
|
||||||
ASS_LINE_TOO_LONG,
|
|
||||||
ASS_NESTED_COMMANDS,
|
|
||||||
ASS_NO_DATA_CB,
|
|
||||||
ASS_NO_INQUIRE_CB,
|
|
||||||
ASS_NOT_A_SERVER,
|
|
||||||
ASS_NOT_A_CLIENT,
|
|
||||||
ASS_SERVER_START,
|
|
||||||
ASS_READ_ERROR,
|
|
||||||
ASS_WRITE_ERROR,
|
|
||||||
ASS_TOO_MUCH_DATA,
|
|
||||||
ASS_UNEXPECTED_CMD,
|
|
||||||
ASS_UNKNOWN_CMD,
|
|
||||||
ASS_SYNTAX,
|
|
||||||
ASS_CANCELED,
|
|
||||||
ASS_NO_INPUT,
|
|
||||||
ASS_NO_OUTPUT,
|
|
||||||
ASS_PARAMETER,
|
|
||||||
ASS_UNKNOWN_INQUIRE,
|
|
||||||
USER_1,
|
|
||||||
USER_2,
|
|
||||||
USER_3,
|
|
||||||
USER_4,
|
|
||||||
USER_5,
|
|
||||||
USER_6,
|
|
||||||
USER_7,
|
|
||||||
USER_8,
|
|
||||||
USER_9,
|
|
||||||
USER_10,
|
|
||||||
USER_11,
|
|
||||||
USER_12,
|
|
||||||
USER_13,
|
|
||||||
USER_14,
|
|
||||||
USER_15,
|
|
||||||
USER_16,
|
|
||||||
MISSING_ERRNO,
|
|
||||||
UNKNOWN_ERRNO,
|
|
||||||
EOF,
|
|
||||||
|
|
||||||
E2BIG,
|
|
||||||
EACCES,
|
|
||||||
EADDRINUSE,
|
|
||||||
EADDRNOTAVAIL,
|
|
||||||
EADV,
|
|
||||||
EAFNOSUPPORT,
|
|
||||||
EAGAIN,
|
|
||||||
EALREADY,
|
|
||||||
EAUTH,
|
|
||||||
EBACKGROUND,
|
|
||||||
EBADE,
|
|
||||||
EBADF,
|
|
||||||
EBADFD,
|
|
||||||
EBADMSG,
|
|
||||||
EBADR,
|
|
||||||
EBADRPC,
|
|
||||||
EBADRQC,
|
|
||||||
EBADSLT,
|
|
||||||
EBFONT,
|
|
||||||
EBUSY,
|
|
||||||
ECANCELED,
|
|
||||||
ECHILD,
|
|
||||||
ECHRNG,
|
|
||||||
ECOMM,
|
|
||||||
ECONNABORTED,
|
|
||||||
ECONNREFUSED,
|
|
||||||
ECONNRESET,
|
|
||||||
ED,
|
|
||||||
EDEADLK,
|
|
||||||
EDEADLOCK,
|
|
||||||
EDESTADDRREQ,
|
|
||||||
EDIED,
|
|
||||||
EDOM,
|
|
||||||
EDOTDOT,
|
|
||||||
EDQUOT,
|
|
||||||
EEXIST,
|
|
||||||
EFAULT,
|
|
||||||
EFBIG,
|
|
||||||
EFTYPE,
|
|
||||||
EGRATUITOUS,
|
|
||||||
EGREGIOUS,
|
|
||||||
EHOSTDOWN,
|
|
||||||
EHOSTUNREACH,
|
|
||||||
EIDRM,
|
|
||||||
EIEIO,
|
|
||||||
EILSEQ,
|
|
||||||
EINPROGRESS,
|
|
||||||
EINTR,
|
|
||||||
EINVAL,
|
|
||||||
EIO,
|
|
||||||
EISCONN,
|
|
||||||
EISDIR,
|
|
||||||
EISNAM,
|
|
||||||
EL2HLT,
|
|
||||||
EL2NSYNC,
|
|
||||||
EL3HLT,
|
|
||||||
EL3RST,
|
|
||||||
ELIBACC,
|
|
||||||
ELIBBAD,
|
|
||||||
ELIBEXEC,
|
|
||||||
ELIBMAX,
|
|
||||||
ELIBSCN,
|
|
||||||
ELNRNG,
|
|
||||||
ELOOP,
|
|
||||||
EMEDIUMTYPE,
|
|
||||||
EMFILE,
|
|
||||||
EMLINK,
|
|
||||||
EMSGSIZE,
|
|
||||||
EMULTIHOP,
|
|
||||||
ENAMETOOLONG,
|
|
||||||
ENAVAIL,
|
|
||||||
ENEEDAUTH,
|
|
||||||
ENETDOWN,
|
|
||||||
ENETRESET,
|
|
||||||
ENETUNREACH,
|
|
||||||
ENFILE,
|
|
||||||
ENOANO,
|
|
||||||
ENOBUFS,
|
|
||||||
ENOCSI,
|
|
||||||
ENODATA,
|
|
||||||
ENODEV,
|
|
||||||
ENOENT,
|
|
||||||
ENOEXEC,
|
|
||||||
ENOLCK,
|
|
||||||
ENOLINK,
|
|
||||||
ENOMEDIUM,
|
|
||||||
ENOMEM,
|
|
||||||
ENOMSG,
|
|
||||||
ENONET,
|
|
||||||
ENOPKG,
|
|
||||||
ENOPROTOOPT,
|
|
||||||
ENOSPC,
|
|
||||||
ENOSR,
|
|
||||||
ENOSTR,
|
|
||||||
ENOSYS,
|
|
||||||
ENOTBLK,
|
|
||||||
ENOTCONN,
|
|
||||||
ENOTDIR,
|
|
||||||
ENOTEMPTY,
|
|
||||||
ENOTNAM,
|
|
||||||
ENOTSOCK,
|
|
||||||
ENOTSUP,
|
|
||||||
ENOTTY,
|
|
||||||
ENOTUNIQ,
|
|
||||||
ENXIO,
|
|
||||||
EOPNOTSUPP,
|
|
||||||
EOVERFLOW,
|
|
||||||
EPERM,
|
|
||||||
EPFNOSUPPORT,
|
|
||||||
EPIPE,
|
|
||||||
EPROCLIM,
|
|
||||||
EPROCUNAVAIL,
|
|
||||||
EPROGMISMATCH,
|
|
||||||
EPROGUNAVAIL,
|
|
||||||
EPROTO,
|
|
||||||
EPROTONOSUPPORT,
|
|
||||||
EPROTOTYPE,
|
|
||||||
ERANGE,
|
|
||||||
EREMCHG,
|
|
||||||
EREMOTE,
|
|
||||||
EREMOTEIO,
|
|
||||||
ERESTART,
|
|
||||||
EROFS,
|
|
||||||
ERPCMISMATCH,
|
|
||||||
ESHUTDOWN,
|
|
||||||
ESOCKTNOSUPPORT,
|
|
||||||
ESPIPE,
|
|
||||||
ESRCH,
|
|
||||||
ESRMNT,
|
|
||||||
ESTALE,
|
|
||||||
ESTRPIPE,
|
|
||||||
ETIME,
|
|
||||||
ETIMEDOUT,
|
|
||||||
ETOOMANYREFS,
|
|
||||||
ETXTBSY,
|
|
||||||
EUCLEAN,
|
|
||||||
EUNATCH,
|
|
||||||
EUSERS,
|
|
||||||
EWOULDBLOCK,
|
|
||||||
EXDEV,
|
|
||||||
EXFULL,
|
|
||||||
|
|
||||||
/* This is one more than the largest allowed entry. */
|
|
||||||
CODE_DIM
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_error_t", cprefix = "gpg_err_")]
|
|
||||||
public struct Error : uint {
|
|
||||||
[CCode (cname = "gcry_err_make")]
|
|
||||||
public Error (ErrorSource source, ErrorCode code);
|
|
||||||
[CCode (cname = "gcry_err_make_from_errno")]
|
|
||||||
public Error.from_errno (ErrorSource source, int err);
|
|
||||||
public ErrorCode code ();
|
|
||||||
public ErrorSource source ();
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_strerror")]
|
|
||||||
public unowned string to_string ();
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_strsource")]
|
|
||||||
public unowned string source_to_string ();
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "enum gcry_ctl_cmds", cprefix = "GCRYCTL_")]
|
|
||||||
public enum ControlCommand {
|
|
||||||
SET_KEY,
|
|
||||||
SET_IV,
|
|
||||||
CFB_SYNC,
|
|
||||||
RESET,
|
|
||||||
FINALIZE,
|
|
||||||
GET_KEYLEN,
|
|
||||||
GET_BLKLEN,
|
|
||||||
TEST_ALGO,
|
|
||||||
IS_SECURE,
|
|
||||||
GET_ASNOID,
|
|
||||||
ENABLE_ALGO,
|
|
||||||
DISABLE_ALGO,
|
|
||||||
DUMP_RANDOM_STATS,
|
|
||||||
DUMP_SECMEM_STATS,
|
|
||||||
GET_ALGO_NPKEY,
|
|
||||||
GET_ALGO_NSKEY,
|
|
||||||
GET_ALGO_NSIGN,
|
|
||||||
GET_ALGO_NENCR,
|
|
||||||
SET_VERBOSITY,
|
|
||||||
SET_DEBUG_FLAGS,
|
|
||||||
CLEAR_DEBUG_FLAGS,
|
|
||||||
USE_SECURE_RNDPOOL,
|
|
||||||
DUMP_MEMORY_STATS,
|
|
||||||
INIT_SECMEM,
|
|
||||||
TERM_SECMEM,
|
|
||||||
DISABLE_SECMEM_WARN,
|
|
||||||
SUSPEND_SECMEM_WARN,
|
|
||||||
RESUME_SECMEM_WARN,
|
|
||||||
DROP_PRIVS,
|
|
||||||
ENABLE_M_GUARD,
|
|
||||||
START_DUMP,
|
|
||||||
STOP_DUMP,
|
|
||||||
GET_ALGO_USAGE,
|
|
||||||
IS_ALGO_ENABLED,
|
|
||||||
DISABLE_INTERNAL_LOCKING,
|
|
||||||
DISABLE_SECMEM,
|
|
||||||
INITIALIZATION_FINISHED,
|
|
||||||
INITIALIZATION_FINISHED_P,
|
|
||||||
ANY_INITIALIZATION_P,
|
|
||||||
SET_CBC_CTS,
|
|
||||||
SET_CBC_MAC,
|
|
||||||
SET_CTR,
|
|
||||||
ENABLE_QUICK_RANDOM,
|
|
||||||
SET_RANDOM_SEED_FILE,
|
|
||||||
UPDATE_RANDOM_SEED_FILE,
|
|
||||||
SET_THREAD_CBS,
|
|
||||||
FAST_POLL
|
|
||||||
}
|
|
||||||
public Error control (ControlCommand cmd, ...);
|
|
||||||
|
|
||||||
namespace Cipher {
|
|
||||||
[CCode (cname = "enum gcry_cipher_algos", cprefix = "GCRY_CIPHER_")]
|
|
||||||
public enum Algorithm {
|
|
||||||
NONE,
|
|
||||||
IDEA,
|
|
||||||
3DES,
|
|
||||||
CAST5,
|
|
||||||
BLOWFISH,
|
|
||||||
SAFER_SK128,
|
|
||||||
DES_SK,
|
|
||||||
AES,
|
|
||||||
AES128,
|
|
||||||
RIJNDAEL,
|
|
||||||
RIJNDAEL128,
|
|
||||||
AES192,
|
|
||||||
RIJNDAEL192,
|
|
||||||
AES256,
|
|
||||||
RIJNDAEL256,
|
|
||||||
TWOFISH,
|
|
||||||
TWOFISH128,
|
|
||||||
ARCFOUR,
|
|
||||||
DES,
|
|
||||||
SERPENT128,
|
|
||||||
SERPENT192,
|
|
||||||
SERPENT256,
|
|
||||||
RFC2268_40,
|
|
||||||
RFC2268_128,
|
|
||||||
SEED,
|
|
||||||
CAMELLIA128,
|
|
||||||
CAMELLIA192,
|
|
||||||
CAMELLIA256,
|
|
||||||
SALSA20,
|
|
||||||
SALSA20R12,
|
|
||||||
GOST28147,
|
|
||||||
CHACHA20;
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_cipher_algo_info")]
|
|
||||||
public Error info (ControlCommand what, [CCode (array_length_type = "size_t")] ref uchar[] buffer);
|
|
||||||
[CCode (cname = "gcry_cipher_algo_name")]
|
|
||||||
public unowned string to_string ();
|
|
||||||
[CCode (cname = "gcry_cipher_map_name")]
|
|
||||||
public static Algorithm from_string (string name);
|
|
||||||
[CCode (cname = "gcry_cipher_map_oid")]
|
|
||||||
public static Algorithm from_oid (string oid);
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "enum gcry_cipher_modes", cprefix = "GCRY_CIPHER_MODE_")]
|
|
||||||
public enum Mode {
|
|
||||||
NONE, /* No mode specified */
|
|
||||||
ECB, /* Electronic Codebook */
|
|
||||||
CFB, /* Cipher Feedback */
|
|
||||||
CFB8, /* Cipher Feedback */
|
|
||||||
CBC, /* Cipher Block Chaining */
|
|
||||||
STREAM, /* Used with stream ciphers */
|
|
||||||
OFB, /* Output Feedback */
|
|
||||||
CTR, /* Counter */
|
|
||||||
AESWRAP,
|
|
||||||
CCM, /* Counter with CBC-MAC */
|
|
||||||
GCM, /* Galois/Counter Mode */
|
|
||||||
POLY1305,
|
|
||||||
OCB
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "enum gcry_cipher_flags", cprefix = "GCRY_CIPHER_")]
|
|
||||||
public enum Flag {
|
|
||||||
SECURE, /* Allocate in secure memory. */
|
|
||||||
ENABLE_SYNC, /* Enable CFB sync mode. */
|
|
||||||
CBC_CTS, /* Enable CBC cipher text stealing (CTS). */
|
|
||||||
CBC_MAC /* Enable CBC message auth. code (MAC). */
|
|
||||||
}
|
|
||||||
[Compact]
|
|
||||||
[CCode (cname = "struct gcry_cipher_handle", lower_case_cprefix = "gcry_cipher_", free_function = "gcry_cipher_close")]
|
|
||||||
public class Cipher {
|
|
||||||
public static Error open (out Cipher cipher, Algorithm algo, Mode mode, Flag flags);
|
|
||||||
public void close ();
|
|
||||||
[CCode (cname = "gcry_cipher_ctl")]
|
|
||||||
public Error control (ControlCommand cmd, [CCode (array_length_type = "size_t")] uchar[] buffer);
|
|
||||||
public Error info (ControlCommand what, [CCode (array_length_type = "size_t")] ref uchar[] buffer);
|
|
||||||
|
|
||||||
public Error encrypt (uchar[] out_buffer, uchar[] in_buffer);
|
|
||||||
public Error decrypt (uchar[] out_buffer, uchar[] in_buffer);
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_cipher_setkey")]
|
|
||||||
public Error set_key (uchar[] key_data);
|
|
||||||
[CCode (cname = "gcry_cipher_setiv")]
|
|
||||||
public Error set_iv (uchar[] iv_data);
|
|
||||||
[CCode (cname = "gcry_cipher_setctr")]
|
|
||||||
public Error set_counter_vector (uchar[] counter_vector);
|
|
||||||
public Error reset ();
|
|
||||||
public Error sync ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Compact, CCode (cname = "struct gcry_md_handle", cprefix = "gcry_md_", free_function = "gcry_md_close")]
|
|
||||||
public class Hash {
|
|
||||||
[CCode (cname = "enum gcry_md_algos", cprefix = "GCRY_MD_")]
|
|
||||||
public enum Algorithm {
|
|
||||||
NONE,
|
|
||||||
SHA1,
|
|
||||||
RMD160,
|
|
||||||
MD5,
|
|
||||||
MD4,
|
|
||||||
MD2,
|
|
||||||
TIGER,
|
|
||||||
TIGER1,
|
|
||||||
TIGER2,
|
|
||||||
HAVAL,
|
|
||||||
SHA224,
|
|
||||||
SHA256,
|
|
||||||
SHA384,
|
|
||||||
SHA512,
|
|
||||||
SHA3_224,
|
|
||||||
SHA3_256,
|
|
||||||
SHA3_384,
|
|
||||||
SHA3_512,
|
|
||||||
SHAKE128,
|
|
||||||
SHAKE256,
|
|
||||||
CRC32,
|
|
||||||
CRC32_RFC1510,
|
|
||||||
CRC24_RFC2440,
|
|
||||||
WHIRLPOOL,
|
|
||||||
GOSTR3411_94,
|
|
||||||
STRIBOG256,
|
|
||||||
STRIBOG512;
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_md_get_algo_dlen")]
|
|
||||||
public size_t get_digest_length ();
|
|
||||||
[CCode (cname = "gcry_md_algo_info")]
|
|
||||||
public Error info (ControlCommand what, [CCode (array_length_type = "size_t")] ref uchar[] buffer);
|
|
||||||
[CCode (cname = "gcry_md_algo_name")]
|
|
||||||
public unowned string to_string ();
|
|
||||||
[CCode (cname = "gcry_md_map_name")]
|
|
||||||
public static Algorithm from_string (string name);
|
|
||||||
[CCode (cname = "gcry_md_test_algo")]
|
|
||||||
public Error is_available ();
|
|
||||||
[CCode (cname = "gcry_md_get_asnoid")]
|
|
||||||
public Error get_oid ([CCode (array_length_type = "size_t")] ref uchar[] buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "enum gcry_md_flags", cprefix = "GCRY_MD_FLAG_")]
|
|
||||||
public enum Flag {
|
|
||||||
SECURE,
|
|
||||||
HMAC,
|
|
||||||
BUGEMU1
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Error open (out Hash hash, Algorithm algo, Flag flag);
|
|
||||||
public void close ();
|
|
||||||
public Error enable (Algorithm algo);
|
|
||||||
[CCode (instance_pos = -1)]
|
|
||||||
public Error copy (out Hash dst);
|
|
||||||
public void reset ();
|
|
||||||
[CCode (cname = "gcry_md_ctl")]
|
|
||||||
public Error control (ControlCommand cmd, [CCode (array_length_type = "size_t")] uchar[] buffer);
|
|
||||||
public void write (uchar[] buffer);
|
|
||||||
[CCode (array_length = false)]
|
|
||||||
public unowned uchar[] read (Algorithm algo);
|
|
||||||
public static void hash_buffer (Algorithm algo, [CCode (array_length = false)] uchar[] digest, uchar[] buffer);
|
|
||||||
public Algorithm get_algo ();
|
|
||||||
public bool is_enabled (Algorithm algo);
|
|
||||||
public bool is_secure ();
|
|
||||||
public Error info (ControlCommand what, [CCode (array_length_type = "size_t")] ref uchar[] buffer);
|
|
||||||
[CCode (cname = "gcry_md_setkey")]
|
|
||||||
public Error set_key (uchar[] key_data);
|
|
||||||
public void putc (char c);
|
|
||||||
public void final ();
|
|
||||||
public static Error list (ref Algorithm[] algos);
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace Random {
|
|
||||||
[CCode (cname = "gcry_random_level_t")]
|
|
||||||
public enum Level {
|
|
||||||
[CCode (cname = "GCRY_WEAK_RANDOM")]
|
|
||||||
WEAK,
|
|
||||||
[CCode (cname = "GCRY_STRONG_RANDOM")]
|
|
||||||
STRONG,
|
|
||||||
[CCode (cname = "GCRY_VERY_STRONG_RANDOM")]
|
|
||||||
VERY_STRONG
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_randomize")]
|
|
||||||
public static void randomize (uchar[] buffer, Level level = Level.VERY_STRONG);
|
|
||||||
[CCode (cname = "gcry_fast_random_poll")]
|
|
||||||
public static Error poll ();
|
|
||||||
[CCode (cname = "gcry_random_bytes", array_length = false)]
|
|
||||||
public static uchar[] random_bytes (size_t nbytes, Level level = Level.VERY_STRONG);
|
|
||||||
[CCode (cname = "gcry_random_bytes_secure", array_length = false)]
|
|
||||||
public static uchar[] random_bytes_secure (size_t nbytes, Level level = Level.VERY_STRONG);
|
|
||||||
[CCode (cname = "gcry_create_nonce")]
|
|
||||||
public static void nonce (uchar[] buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Compact, CCode (cname = "struct gcry_mpi", cprefix = "gcry_mpi_", free_function = "gcry_mpi_release")]
|
|
||||||
public class MPI {
|
|
||||||
[CCode (cname = "enum gcry_mpi_format", cprefix = "GCRYMPI_FMT_")]
|
|
||||||
public enum Format {
|
|
||||||
NONE,
|
|
||||||
STD,
|
|
||||||
PGP,
|
|
||||||
SSH,
|
|
||||||
HEX,
|
|
||||||
USG
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "enum gcry_mpi_flag", cprefix = "GCRYMPI_FLAG_")]
|
|
||||||
public enum Flag {
|
|
||||||
SECURE,
|
|
||||||
OPAQUE
|
|
||||||
}
|
|
||||||
|
|
||||||
public MPI (uint nbits);
|
|
||||||
[CCode (cname = "gcry_mpi_snew")]
|
|
||||||
public MPI.secure (uint nbits);
|
|
||||||
public MPI copy ();
|
|
||||||
public void set (MPI u);
|
|
||||||
public void set_ui (ulong u);
|
|
||||||
public void swap (MPI b);
|
|
||||||
public int cmp (MPI v);
|
|
||||||
public int cmp_ui (ulong v);
|
|
||||||
|
|
||||||
public static Error scan (out MPI ret, MPI.Format format, [CCode (array_length = false)] uchar[] buffer, size_t buflen, out size_t nscanned);
|
|
||||||
[CCode (instance_pos = -1)]
|
|
||||||
public Error print (MPI.Format format, [CCode (array_length = false)] uchar[] buffer, size_t buflen, out size_t nwritter);
|
|
||||||
[CCode (instance_pos = -1)]
|
|
||||||
public Error aprint (MPI.Format format, [CCode (array_length_type = "size_t")] out uchar[] buffer);
|
|
||||||
|
|
||||||
public void add (MPI u, MPI v);
|
|
||||||
public void add_ui (MPI u, ulong v);
|
|
||||||
public void addm (MPI u, MPI v, MPI m);
|
|
||||||
public void sub (MPI u, MPI v);
|
|
||||||
public void sub_ui (MPI u, ulong v);
|
|
||||||
public void subm (MPI u, MPI v, MPI m);
|
|
||||||
public void mul (MPI u, MPI v);
|
|
||||||
public void mul_ui (MPI u, ulong v);
|
|
||||||
public void mulm (MPI u, MPI v, MPI m);
|
|
||||||
public void mul_2exp (MPI u, ulong cnt);
|
|
||||||
public void div (MPI r, MPI dividend, MPI divisor, int round);
|
|
||||||
public void mod (MPI dividend, MPI divisor);
|
|
||||||
public void powm (MPI b, MPI e, MPI m);
|
|
||||||
public int gcd (MPI a, MPI b);
|
|
||||||
public int invm (MPI a, MPI m);
|
|
||||||
|
|
||||||
public uint get_nbits ();
|
|
||||||
public int test_bit (uint n);
|
|
||||||
public void set_bit (uint n);
|
|
||||||
public void clear_bit (uint n);
|
|
||||||
public void set_highbit (uint n);
|
|
||||||
public void clear_highbit (uint n);
|
|
||||||
public void rshift (MPI a, uint n);
|
|
||||||
public void lshift (MPI a, uint n);
|
|
||||||
|
|
||||||
public void set_flag (MPI.Flag flag);
|
|
||||||
public void clear_flag (MPI.Flag flag);
|
|
||||||
public int get_flag (MPI.Flag flag);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Compact, CCode (cname = "struct gcry_sexp", free_function = "gcry_sexp_release")]
|
|
||||||
public class SExp {
|
|
||||||
[CCode (cname = "int", cprefix = "GCRYSEXP_FMT_")]
|
|
||||||
public enum Format {
|
|
||||||
DEFAULT,
|
|
||||||
CANON,
|
|
||||||
BASE64,
|
|
||||||
ADVANCED
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Error @new (out SExp retsexp, void * buffer, size_t length, int autodetect);
|
|
||||||
public static Error create (out SExp retsexp, void * buffer, size_t length, int autodetect, GLib.DestroyNotify free_function);
|
|
||||||
public static Error sscan (out SExp retsexp, out size_t erroff, char[] buffer);
|
|
||||||
public static Error build (out SExp retsexp, out size_t erroff, string format, ...);
|
|
||||||
public size_t sprint (Format mode, char[] buffer);
|
|
||||||
public static size_t canon_len (uchar[] buffer, out size_t erroff, out int errcode);
|
|
||||||
public SExp find_token (string token, size_t token_length = 0);
|
|
||||||
public int length ();
|
|
||||||
public SExp? nth (int number);
|
|
||||||
public SExp? car ();
|
|
||||||
public SExp? cdr ();
|
|
||||||
[CCode (array_length_type = "size_t")]
|
|
||||||
public unowned char[] nth_data (int number);
|
|
||||||
public gcry_string nth_string (int number);
|
|
||||||
public MPI nth_mpi (int number, MPI.Format mpifmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cname = "char", free_function = "gcry_free")]
|
|
||||||
public class gcry_string : string { }
|
|
||||||
|
|
||||||
[CCode (lower_case_cprefix = "gcry_pk_")]
|
|
||||||
namespace PublicKey {
|
|
||||||
[CCode (cname = "enum gcry_pk_algos")]
|
|
||||||
public enum Algorithm {
|
|
||||||
RSA,
|
|
||||||
ELG_E,
|
|
||||||
DSA,
|
|
||||||
ELG,
|
|
||||||
ECDSA;
|
|
||||||
|
|
||||||
[CCode (cname = "gcry_pk_algo_name")]
|
|
||||||
public unowned string to_string ();
|
|
||||||
[CCode (cname = "gcry_pk_map_name")]
|
|
||||||
public static Algorithm map_name (string name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Error encrypt (out SExp ciphertext, SExp data, SExp pkey);
|
|
||||||
public static Error decrypt (out SExp plaintext, SExp data, SExp skey);
|
|
||||||
public static Error sign (out SExp signature, SExp data, SExp skey);
|
|
||||||
public static Error verify (SExp signature, SExp data, SExp pkey);
|
|
||||||
public static Error testkey (SExp key);
|
|
||||||
public static Error genkey (out SExp r_key, SExp s_params);
|
|
||||||
public static uint get_nbits (SExp key);
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (lower_case_cprefix = "gcry_kdf_")]
|
|
||||||
namespace KeyDerivation {
|
|
||||||
[CCode (cname = "enum gcry_kdf_algos", cprefix = "GCRY_KDF_", has_type_id = false)]
|
|
||||||
public enum Algorithm {
|
|
||||||
NONE,
|
|
||||||
SIMPLE_S2K,
|
|
||||||
SALTED_S2K,
|
|
||||||
ITERSALTED_S2K,
|
|
||||||
PBKDF1,
|
|
||||||
PBKDF2,
|
|
||||||
SCRYPT
|
|
||||||
}
|
|
||||||
|
|
||||||
public GCrypt.Error derive ([CCode (type = "const void*", array_length_type = "size_t")] uint8[] passphrasse, GCrypt.KeyDerivation.Algorithm algo, GCrypt.Hash.Algorithm subalgo, [CCode (type = "const void*", array_length_type = "size_t")] uint8[] salt, ulong iterations, [CCode (type = "void*", array_length_type = "size_t", array_length_pos = 5.5)] uint8[] keybuffer);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue