doc/
[gpgme.git] / gpgme / key.h
1 /* key.h - Key handling interface.
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2002 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 "types.h"
26 #include "context.h"
27
28 \f
29 struct certsig_s
30 {
31   struct certsig_s *next;
32   struct
33   {
34     unsigned int revoked : 1;
35     unsigned int expired : 1;
36     unsigned int invalid : 1;
37     unsigned int exportable : 1;
38   } flags;
39   unsigned int algo;
40   char keyid[16 + 1]; 
41   time_t timestamp;             /* -1 for invalid, 0 for not available.  */
42   time_t expires_at;            /* 0 for no expiration.  */
43   GpgmeSigStat sig_stat;
44   unsigned int sig_class;
45   const char *name_part;        /* All 3 point into strings behind name  */
46   const char *email_part;       /* or to read-only strings.  */
47   const char *comment_part;
48   char name[1];
49 };
50
51
52 struct subkey_s
53 {
54   struct subkey_s *next;
55   unsigned int secret:1;
56   struct
57   {
58     unsigned int revoked : 1;
59     unsigned int expired : 1;
60     unsigned int disabled : 1;
61     unsigned int invalid : 1;
62     unsigned int can_encrypt : 1;
63     unsigned int can_sign : 1;
64     unsigned int can_certify : 1;
65   } flags;
66   unsigned int key_algo;
67   unsigned int key_len;
68   char keyid[16 + 1];
69   char *fingerprint;    /* Malloced hex digits.  */
70   time_t timestamp;     /* -1 for invalid, 0 for not available.  */
71   time_t expires_at;    /* 0 for does not expires.  */
72 };
73
74
75 struct gpgme_key_s
76 {
77   struct
78   {
79     unsigned int revoked : 1;
80     unsigned int expired : 1;
81     unsigned int disabled : 1;
82     unsigned int invalid : 1;
83     unsigned int can_encrypt : 1;
84     unsigned int can_sign : 1;
85     unsigned int can_certify : 1;
86   } gloflags;
87   unsigned int ref_count;
88   unsigned int secret : 1;
89   unsigned int x509 : 1;
90   char *issuer_serial;  /* Malloced string used only with X.509.  */
91   char *issuer_name;    /* Ditto.  */
92   char *chain_id;       /* Ditto.  */
93   GpgmeValidity otrust; /* Only used with OpenPGP.  */
94   struct subkey_s keys;
95   struct user_id_s *uids;
96   struct user_id_s *last_uid;
97 };
98
99 \f
100 void _gpgme_key_cache_init (void);
101 void _gpgme_key_cache_add (GpgmeKey key);
102 GpgmeKey _gpgme_key_cache_get (const char *fpr);
103
104
105 struct certsig_s *_gpgme_key_add_certsig (GpgmeKey key, char *src);
106 struct subkey_s *_gpgme_key_add_subkey (GpgmeKey key);
107 struct subkey_s *_gpgme_key_add_secret_subkey (GpgmeKey key);
108 GpgmeError _gpgme_key_append_name (GpgmeKey key, const char *str);
109
110 #endif  /* KEY_H */