2003-04-24 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / key.h
1 /* key.h - Key handling interface.
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2002, 2003 g10 Code GmbH
4
5    This file is part of GPGME.
6  
7    GPGME is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11  
12    GPGME is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16  
17    You should have received a copy of the GNU General Public License
18    along with GPGME; if not, write to the Free Software Foundation,
19    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #ifndef KEY_H
22 #define KEY_H
23
24 #include <time.h>
25 #include "context.h"
26
27 \f
28 struct certsig_s
29 {
30   struct certsig_s *next;
31   struct
32   {
33     unsigned int revoked : 1;
34     unsigned int expired : 1;
35     unsigned int invalid : 1;
36     unsigned int exportable : 1;
37   } flags;
38   unsigned int algo;
39   char keyid[16 + 1]; 
40   time_t timestamp;             /* -1 for invalid, 0 for not available.  */
41   time_t expires_at;            /* 0 for no expiration.  */
42   GpgmeSigStat sig_stat;
43   unsigned int sig_class;
44   const char *name_part;        /* All 3 point into strings behind name  */
45   const char *email_part;       /* or to read-only strings.  */
46   const char *comment_part;
47   char name[1];
48 };
49
50
51 struct subkey_s
52 {
53   struct subkey_s *next;
54   unsigned int secret:1;
55   struct
56   {
57     unsigned int revoked : 1;
58     unsigned int expired : 1;
59     unsigned int disabled : 1;
60     unsigned int invalid : 1;
61     unsigned int can_encrypt : 1;
62     unsigned int can_sign : 1;
63     unsigned int can_certify : 1;
64   } flags;
65   unsigned int key_algo;
66   unsigned int key_len;
67   char keyid[16 + 1];
68   char *fingerprint;    /* Malloced hex digits.  */
69   time_t timestamp;     /* -1 for invalid, 0 for not available.  */
70   time_t expires_at;    /* 0 for does not expires.  */
71 };
72
73
74 struct gpgme_key_s
75 {
76   struct
77   {
78     unsigned int revoked : 1;
79     unsigned int expired : 1;
80     unsigned int disabled : 1;
81     unsigned int invalid : 1;
82     unsigned int can_encrypt : 1;
83     unsigned int can_sign : 1;
84     unsigned int can_certify : 1;
85   } gloflags;
86   unsigned int ref_count;
87   unsigned int secret : 1;
88   unsigned int x509 : 1;
89   char *issuer_serial;  /* Malloced string used only with X.509.  */
90   char *issuer_name;    /* Ditto.  */
91   char *chain_id;       /* Ditto.  */
92   GpgmeValidity otrust; /* Only used with OpenPGP.  */
93   struct subkey_s keys;
94   struct user_id_s *uids;
95   struct user_id_s *last_uid;
96 };
97
98 \f
99 struct certsig_s *_gpgme_key_add_certsig (GpgmeKey key, char *src);
100 struct subkey_s *_gpgme_key_add_subkey (GpgmeKey key);
101 struct subkey_s *_gpgme_key_add_secret_subkey (GpgmeKey key);
102 GpgmeError _gpgme_key_append_name (GpgmeKey key, const char *str);
103
104 #endif  /* KEY_H */