|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* gnome-keyring
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Copyright (C) 2011 Collabora Ltd.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
b00eeb |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit |
b00eeb |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
b00eeb |
* the License, or (at your option) any later version.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
b00eeb |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
b00eeb |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
b00eeb |
* Lesser General Public License for more details.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b00eeb |
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Author: Stef Walter <stefw@collabora.co.uk>
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#if !defined (__GCR_INSIDE_HEADER__) && !defined (GCR_COMPILATION)
|
|
Packit |
b00eeb |
#error "Only <gcr/gcr.h> or <gcr/gcr-base.h> can be included directly."
|
|
Packit |
b00eeb |
#endif
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#ifndef GCR_RECORD_H
|
|
Packit |
b00eeb |
#define GCR_RECORD_H
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include <glib.h>
|
|
Packit |
b00eeb |
#include <glib-object.h>
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Gnupg's official format for listing keys is in the '--with-colons' format.
|
|
Packit |
b00eeb |
* This is documented in doc/DETAILS in the gnupg distribution. Looks like:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* pub:f:1024:17:6C7EE1B8621CC013:899817715:1055898235::m:::scESC:
|
|
Packit |
b00eeb |
* fpr:::::::::ECAF7590EB3443B5C7CF3ACB6C7EE1B8621CC013:
|
|
Packit |
b00eeb |
* uid:f::::::::Werner Koch <wk@g10code.com>:
|
|
Packit |
b00eeb |
* uid:f::::::::Werner Koch <wk@gnupg.org>:
|
|
Packit |
b00eeb |
* sub:f:1536:16:06AD222CADF6A6E1:919537416:1036177416:::::e:
|
|
Packit |
b00eeb |
* fpr:::::::::CF8BCC4B18DE08FCD8A1615906AD222CADF6A6E1:
|
|
Packit |
b00eeb |
* sub:r:1536:20:5CE086B5B5A18FF4:899817788:1025961788:::::esc:
|
|
Packit |
b00eeb |
* fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Each row is colon delimeted, and has a certain 'schema'. The first item
|
|
Packit |
b00eeb |
* in the row tells us the schema. Then the various columns are numbered,
|
|
Packit |
b00eeb |
* (schema is zero).
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
G_BEGIN_DECLS
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_ATTRIBUTE (g_quark_from_static_string ("ATTRIBUTE"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_IMPORT_OK (g_quark_from_static_string ("IMPORT_OK"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_FPR (g_quark_from_static_string ("fpr"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_PUB (g_quark_from_static_string ("pub"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_SUB (g_quark_from_static_string ("sub"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_SEC (g_quark_from_static_string ("sec"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_SSB (g_quark_from_static_string ("ssb"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_UID (g_quark_from_static_string ("uid"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_UAT (g_quark_from_static_string ("uat"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_XA1 (g_quark_from_static_string ("xa1"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_SIG (g_quark_from_static_string ("sig"))
|
|
Packit |
b00eeb |
#define GCR_RECORD_SCHEMA_RVK (g_quark_from_static_string ("rvk"))
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* Common columns for schemas */
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_SCHEMA = 0,
|
|
Packit |
b00eeb |
GCR_RECORD_TRUST = 1,
|
|
Packit |
b00eeb |
} GcrRecordColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for ATTRIBUTE status message. eg:
|
|
Packit |
b00eeb |
* [GNUPG:] ATTRIBUTE FBAFC70D60AE13D560764062B547B5580EEB5A80 10604 1 1 1 1227936754 0 1
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_ATTRIBUTE_KEY_FINGERPRINT = 1,
|
|
Packit |
b00eeb |
GCR_RECORD_ATTRIBUTE_LENGTH = 2,
|
|
Packit |
b00eeb |
GCR_RECORD_ATTRIBUTE_TYPE = 3,
|
|
Packit |
b00eeb |
GCR_RECORD_ATTRIBUTE_TIMESTAMP = 6,
|
|
Packit |
b00eeb |
GCR_RECORD_ATTRIBUTE_EXPIRY = 7,
|
|
Packit |
b00eeb |
GCR_RECORD_ATTRIBUTE_FLAGS = 8
|
|
Packit |
b00eeb |
} GcrRecordAttributeColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for IMPORT_OK and IMPORT_PROBLEM status message. eg:
|
|
Packit |
b00eeb |
* [GNUPG:] IMPORT_OK 1 6BD9050FD8FC941B43412DCC68B7AB8957548DCD
|
|
Packit |
b00eeb |
* [GNUPG:] IMPORT_PROBLEM 1
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_IMPORT_REASON = 1,
|
|
Packit |
b00eeb |
GCR_RECORD_IMPORT_FINGERPRINT
|
|
Packit |
b00eeb |
} GcrRecordImportColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for fpr schema, add them as they're used. eg:
|
|
Packit |
b00eeb |
* fpr:::::::::ECAF7590EB3443B5C7CF3ACB6C7EE1B8621CC013:
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_FPR_FINGERPRINT = 9,
|
|
Packit |
b00eeb |
GCR_RECORD_FPR_MAX = 10
|
|
Packit |
b00eeb |
} GcrRecordFprColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for pub, sec, sub, and ssb schemas. eg:
|
|
Packit |
b00eeb |
* pub:f:1024:17:6C7EE1B8621CC013:899817715:1055898235::m:::scESC:
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_KEY_BITS = 2,
|
|
Packit |
b00eeb |
GCR_RECORD_KEY_ALGO = 3,
|
|
Packit |
b00eeb |
GCR_RECORD_KEY_KEYID = 4,
|
|
Packit |
b00eeb |
GCR_RECORD_KEY_TIMESTAMP = 5,
|
|
Packit |
b00eeb |
GCR_RECORD_KEY_EXPIRY = 6,
|
|
Packit |
b00eeb |
GCR_RECORD_KEY_OWNERTRUST = 8,
|
|
Packit |
b00eeb |
} GcrRecordKeyColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_PUB_CAPS = 11,
|
|
Packit |
b00eeb |
GCR_RECORD_PUB_MAX = 12
|
|
Packit |
b00eeb |
} GcrRecordPubColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_SEC_MAX = 15
|
|
Packit |
b00eeb |
} GcrRecordSecColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for uid schema, add them as they're used. eg:
|
|
Packit |
b00eeb |
* uid:u::::1024442705::7A5C6648DAA1F5D12BD80BBED538439ABAFEE203::Test <test@example.com>:
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_UID_TIMESTAMP = 5,
|
|
Packit |
b00eeb |
GCR_RECORD_UID_EXPIRY = 6,
|
|
Packit |
b00eeb |
GCR_RECORD_UID_FINGERPRINT = 7,
|
|
Packit |
b00eeb |
GCR_RECORD_UID_USERID = 9,
|
|
Packit |
b00eeb |
GCR_RECORD_UID_MAX = 10,
|
|
Packit |
b00eeb |
} GcrRecordUidColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for sig schema. eg:
|
|
Packit |
b00eeb |
* sig:::17:FAD3A86D2505A4D5:1291829838::::Stef Walter <stefw@servingtfi.com>:10x:
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_STATUS = 1,
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_ALGO = 3,
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_KEYID = 4,
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_TIMESTAMP = 5,
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_EXPIRY = 6,
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_USERID = 9,
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_CLASS = 10,
|
|
Packit |
b00eeb |
GCR_RECORD_SIG_MAX = 11,
|
|
Packit |
b00eeb |
} GcrRecordSigColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for rvk schema. eg:
|
|
Packit |
b00eeb |
* rvk:::17::::::3FC732041D23E9EA66DDB5009C9DBC21DF74DC61:80:
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_RVK_ALGO = 3,
|
|
Packit |
b00eeb |
GCR_RECORD_RVK_FINGERPRINT = 9,
|
|
Packit |
b00eeb |
GCR_RECORD_RVK_CLASS = 10,
|
|
Packit |
b00eeb |
GCR_RECORD_RVK_MAX = 11,
|
|
Packit |
b00eeb |
} GcrRecordRvkColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for uat schema, add them as they're used. eg:
|
|
Packit |
b00eeb |
* uat:u::::1024442705::7A5C6648DAA1F5D12BD80BBED538439ABAFEE203::1 3233:
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_UAT_TRUST = 1,
|
|
Packit |
b00eeb |
GCR_RECORD_UAT_FINGERPRINT = 7,
|
|
Packit |
b00eeb |
GCR_RECORD_UAT_COUNT_SIZE = 9,
|
|
Packit |
b00eeb |
GCR_RECORD_UAT_MAX = 10,
|
|
Packit |
b00eeb |
} GcrRecordUatColumns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Columns for xa1 schema. This is a schema that we've invented ourselves
|
|
Packit |
b00eeb |
* for representing the actual data of openpgp attribute packets. eg:
|
|
Packit |
b00eeb |
* xa1:e:10838:1:::1998-02-02:0:ECAF7590EB3443B5C7CF3ACB6C7EE1B8621CC013::...
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
typedef enum {
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_TRUST = 1,
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_LENGTH = 2,
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_TYPE = 3,
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_TIMESTAMP = 5,
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_EXPIRY = 6,
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_FINGERPRINT = 7,
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_DATA = 9,
|
|
Packit |
b00eeb |
GCR_RECORD_XA1_MAX = 11,
|
|
Packit |
b00eeb |
} GcrRecordXa1Columns;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
typedef struct _GcrRecord GcrRecord;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#define GCR_TYPE_RECORD (_gcr_record_get_type ())
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GType _gcr_record_get_type (void) G_GNUC_CONST;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GcrRecord * _gcr_record_new (GQuark schema,
|
|
Packit |
b00eeb |
guint n_columns,
|
|
Packit |
b00eeb |
gchar delimiter);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GcrRecord* _gcr_record_copy (GcrRecord *record);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GcrRecord* _gcr_record_parse_colons (const gchar *line,
|
|
Packit |
b00eeb |
gssize n_line);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GcrRecord* _gcr_record_parse_spaces (const gchar *line,
|
|
Packit |
b00eeb |
gssize n_line);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gchar * _gcr_record_format (GcrRecord *record);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_free (gpointer record);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
guint _gcr_record_get_count (GcrRecord *record);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gchar _gcr_record_get_char (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_set_char (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
gchar value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gchar* _gcr_record_get_string (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_set_string (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
const gchar *value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gboolean _gcr_record_get_uint (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
guint *value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_set_uint (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
guint value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gboolean _gcr_record_get_ulong (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
gulong *value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_set_ulong (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
gulong value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GDateTime * _gcr_record_get_date (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gpointer _gcr_record_get_base64 (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
gsize *n_data);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_set_base64 (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
gconstpointer data,
|
|
Packit |
b00eeb |
gsize n_data);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
const gchar* _gcr_record_get_raw (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_set_raw (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
const gchar *value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void _gcr_record_take_raw (GcrRecord *record,
|
|
Packit |
b00eeb |
guint column,
|
|
Packit |
b00eeb |
gchar *value);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GQuark _gcr_record_get_schema (GcrRecord *record);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GPtrArray * _gcr_records_parse_colons (gconstpointer data,
|
|
Packit |
b00eeb |
gssize n_data);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gchar * _gcr_records_format (GPtrArray *records);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GcrRecord * _gcr_records_find (GPtrArray *records,
|
|
Packit |
b00eeb |
GQuark schema);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
G_END_DECLS
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#endif /* GCR_RECORD_H */
|