openpgp.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. /*
  2. * Copyright (C) 2003-2012 Free Software Foundation, Inc.
  3. *
  4. * Author: Nikos Mavrogiannopoulos
  5. *
  6. * This file is part of GnuTLS.
  7. *
  8. * The GnuTLS is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU Lesser General Public License
  10. * as published by the Free Software Foundation; either version 2.1 of
  11. * the License, or (at your option) any later version.
  12. *
  13. * This library is distributed in the hope that it will be useful, but
  14. * WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16. * Lesser General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU Lesser General Public License
  19. * along with this program. If not, see <http://www.gnu.org/licenses/>
  20. *
  21. */
  22. /* This file contains the types and prototypes for the OpenPGP
  23. * key and private key parsing functions.
  24. */
  25. #ifndef GNUTLS_OPENPGP_H
  26. #define GNUTLS_OPENPGP_H
  27. #include <gnutls/gnutls.h>
  28. #include <limits.h>
  29. /* *INDENT-OFF* */
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. /* *INDENT-ON* */
  34. /* Openpgp certificate stuff
  35. */
  36. /**
  37. * gnutls_openpgp_crt_fmt_t:
  38. * @GNUTLS_OPENPGP_FMT_RAW: OpenPGP certificate in raw format.
  39. * @GNUTLS_OPENPGP_FMT_BASE64: OpenPGP certificate in base64 format.
  40. *
  41. * Enumeration of different OpenPGP key formats.
  42. */
  43. typedef enum gnutls_openpgp_crt_fmt {
  44. GNUTLS_OPENPGP_FMT_RAW,
  45. GNUTLS_OPENPGP_FMT_BASE64
  46. } gnutls_openpgp_crt_fmt_t;
  47. #define GNUTLS_OPENPGP_KEYID_SIZE 8
  48. #define GNUTLS_OPENPGP_V4_FINGERPRINT_SIZE 20
  49. typedef unsigned char
  50. gnutls_openpgp_keyid_t[GNUTLS_OPENPGP_KEYID_SIZE];
  51. /* gnutls_openpgp_cert_t should be defined in gnutls.h
  52. */
  53. /* initializes the memory for gnutls_openpgp_crt_t struct */
  54. int gnutls_openpgp_crt_init(gnutls_openpgp_crt_t * key) _GNUTLS_GCC_ATTR_DEPRECATED;
  55. /* frees all memory */
  56. void gnutls_openpgp_crt_deinit(gnutls_openpgp_crt_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  57. int gnutls_openpgp_crt_import(gnutls_openpgp_crt_t key,
  58. const gnutls_datum_t * data,
  59. gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  60. int gnutls_openpgp_crt_export(gnutls_openpgp_crt_t key,
  61. gnutls_openpgp_crt_fmt_t format,
  62. void *output_data,
  63. size_t * output_data_size) _GNUTLS_GCC_ATTR_DEPRECATED;
  64. int gnutls_openpgp_crt_export2(gnutls_openpgp_crt_t key,
  65. gnutls_openpgp_crt_fmt_t format,
  66. gnutls_datum_t * out) _GNUTLS_GCC_ATTR_DEPRECATED;
  67. int gnutls_openpgp_crt_print(gnutls_openpgp_crt_t cert,
  68. gnutls_certificate_print_formats_t
  69. format, gnutls_datum_t * out) _GNUTLS_GCC_ATTR_DEPRECATED;
  70. /* The key_usage flags are defined in gnutls.h. They are
  71. * the GNUTLS_KEY_* definitions.
  72. */
  73. #define GNUTLS_OPENPGP_MASTER_KEYID_IDX INT_MAX
  74. int gnutls_openpgp_crt_get_key_usage(gnutls_openpgp_crt_t key,
  75. unsigned int *key_usage) _GNUTLS_GCC_ATTR_DEPRECATED;
  76. int gnutls_openpgp_crt_get_fingerprint(gnutls_openpgp_crt_t key,
  77. void *fpr, size_t * fprlen) _GNUTLS_GCC_ATTR_DEPRECATED;
  78. int gnutls_openpgp_crt_get_subkey_fingerprint(gnutls_openpgp_crt_t
  79. key,
  80. unsigned int idx,
  81. void *fpr, size_t * fprlen) _GNUTLS_GCC_ATTR_DEPRECATED;
  82. int gnutls_openpgp_crt_get_name(gnutls_openpgp_crt_t key,
  83. int idx, char *buf, size_t * sizeof_buf) _GNUTLS_GCC_ATTR_DEPRECATED;
  84. gnutls_pk_algorithm_t
  85. gnutls_openpgp_crt_get_pk_algorithm(gnutls_openpgp_crt_t key,
  86. unsigned int *bits) _GNUTLS_GCC_ATTR_DEPRECATED;
  87. int gnutls_openpgp_crt_get_version(gnutls_openpgp_crt_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  88. time_t gnutls_openpgp_crt_get_creation_time(gnutls_openpgp_crt_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  89. time_t gnutls_openpgp_crt_get_expiration_time(gnutls_openpgp_crt_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  90. int gnutls_openpgp_crt_get_key_id(gnutls_openpgp_crt_t key,
  91. gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  92. int gnutls_openpgp_crt_check_hostname(gnutls_openpgp_crt_t key,
  93. const char *hostname) _GNUTLS_GCC_ATTR_DEPRECATED;
  94. int gnutls_openpgp_crt_check_hostname2(gnutls_openpgp_crt_t key,
  95. const char *hostname, unsigned int flags) _GNUTLS_GCC_ATTR_DEPRECATED;
  96. int
  97. gnutls_openpgp_crt_check_email(gnutls_openpgp_crt_t key, const char *email, unsigned flags) _GNUTLS_GCC_ATTR_DEPRECATED;
  98. int gnutls_openpgp_crt_get_revoked_status(gnutls_openpgp_crt_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  99. int gnutls_openpgp_crt_get_subkey_count(gnutls_openpgp_crt_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  100. int gnutls_openpgp_crt_get_subkey_idx(gnutls_openpgp_crt_t key,
  101. const gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  102. int gnutls_openpgp_crt_get_subkey_revoked_status
  103. (gnutls_openpgp_crt_t key, unsigned int idx) _GNUTLS_GCC_ATTR_DEPRECATED;
  104. gnutls_pk_algorithm_t
  105. gnutls_openpgp_crt_get_subkey_pk_algorithm(gnutls_openpgp_crt_t
  106. key,
  107. unsigned int idx,
  108. unsigned int *bits) _GNUTLS_GCC_ATTR_DEPRECATED;
  109. time_t
  110. gnutls_openpgp_crt_get_subkey_creation_time
  111. (gnutls_openpgp_crt_t key, unsigned int idx) _GNUTLS_GCC_ATTR_DEPRECATED;
  112. time_t
  113. gnutls_openpgp_crt_get_subkey_expiration_time
  114. (gnutls_openpgp_crt_t key, unsigned int idx) _GNUTLS_GCC_ATTR_DEPRECATED;
  115. int gnutls_openpgp_crt_get_subkey_id(gnutls_openpgp_crt_t key,
  116. unsigned int idx,
  117. gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  118. int gnutls_openpgp_crt_get_subkey_usage(gnutls_openpgp_crt_t key,
  119. unsigned int idx,
  120. unsigned int *key_usage) _GNUTLS_GCC_ATTR_DEPRECATED;
  121. int gnutls_openpgp_crt_get_subkey_pk_dsa_raw(gnutls_openpgp_crt_t
  122. crt, unsigned int idx,
  123. gnutls_datum_t * p,
  124. gnutls_datum_t * q,
  125. gnutls_datum_t * g,
  126. gnutls_datum_t * y) _GNUTLS_GCC_ATTR_DEPRECATED;
  127. int gnutls_openpgp_crt_get_subkey_pk_rsa_raw(gnutls_openpgp_crt_t
  128. crt, unsigned int idx,
  129. gnutls_datum_t * m,
  130. gnutls_datum_t * e) _GNUTLS_GCC_ATTR_DEPRECATED;
  131. int gnutls_openpgp_crt_get_pk_dsa_raw(gnutls_openpgp_crt_t crt,
  132. gnutls_datum_t * p,
  133. gnutls_datum_t * q,
  134. gnutls_datum_t * g,
  135. gnutls_datum_t * y) _GNUTLS_GCC_ATTR_DEPRECATED;
  136. int gnutls_openpgp_crt_get_pk_rsa_raw(gnutls_openpgp_crt_t crt,
  137. gnutls_datum_t * m,
  138. gnutls_datum_t * e) _GNUTLS_GCC_ATTR_DEPRECATED;
  139. int gnutls_openpgp_crt_get_preferred_key_id(gnutls_openpgp_crt_t
  140. key,
  141. gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  142. int
  143. gnutls_openpgp_crt_set_preferred_key_id(gnutls_openpgp_crt_t key,
  144. const
  145. gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  146. /* privkey stuff.
  147. */
  148. int gnutls_openpgp_privkey_init(gnutls_openpgp_privkey_t * key) _GNUTLS_GCC_ATTR_DEPRECATED;
  149. void gnutls_openpgp_privkey_deinit(gnutls_openpgp_privkey_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  150. gnutls_pk_algorithm_t
  151. gnutls_openpgp_privkey_get_pk_algorithm
  152. (gnutls_openpgp_privkey_t key, unsigned int *bits) _GNUTLS_GCC_ATTR_DEPRECATED;
  153. gnutls_sec_param_t
  154. gnutls_openpgp_privkey_sec_param(gnutls_openpgp_privkey_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  155. int gnutls_openpgp_privkey_import(gnutls_openpgp_privkey_t key,
  156. const gnutls_datum_t * data,
  157. gnutls_openpgp_crt_fmt_t format,
  158. const char *password,
  159. unsigned int flags) _GNUTLS_GCC_ATTR_DEPRECATED;
  160. int gnutls_openpgp_privkey_get_fingerprint(gnutls_openpgp_privkey_t
  161. key, void *fpr,
  162. size_t * fprlen) _GNUTLS_GCC_ATTR_DEPRECATED;
  163. int gnutls_openpgp_privkey_get_subkey_fingerprint
  164. (gnutls_openpgp_privkey_t key, unsigned int idx, void *fpr,
  165. size_t * fprlen) _GNUTLS_GCC_ATTR_DEPRECATED;
  166. int gnutls_openpgp_privkey_get_key_id(gnutls_openpgp_privkey_t key,
  167. gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  168. int gnutls_openpgp_privkey_get_subkey_count(gnutls_openpgp_privkey_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  169. int gnutls_openpgp_privkey_get_subkey_idx(gnutls_openpgp_privkey_t
  170. key,
  171. const
  172. gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  173. int gnutls_openpgp_privkey_get_subkey_revoked_status
  174. (gnutls_openpgp_privkey_t key, unsigned int idx) _GNUTLS_GCC_ATTR_DEPRECATED;
  175. int gnutls_openpgp_privkey_get_revoked_status
  176. (gnutls_openpgp_privkey_t key) _GNUTLS_GCC_ATTR_DEPRECATED;
  177. gnutls_pk_algorithm_t
  178. gnutls_openpgp_privkey_get_subkey_pk_algorithm
  179. (gnutls_openpgp_privkey_t key, unsigned int idx, unsigned int *bits) _GNUTLS_GCC_ATTR_DEPRECATED;
  180. time_t
  181. gnutls_openpgp_privkey_get_subkey_expiration_time
  182. (gnutls_openpgp_privkey_t key, unsigned int idx) _GNUTLS_GCC_ATTR_DEPRECATED;
  183. int gnutls_openpgp_privkey_get_subkey_id(gnutls_openpgp_privkey_t
  184. key, unsigned int idx,
  185. gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  186. time_t
  187. gnutls_openpgp_privkey_get_subkey_creation_time
  188. (gnutls_openpgp_privkey_t key, unsigned int idx) _GNUTLS_GCC_ATTR_DEPRECATED;
  189. int gnutls_openpgp_privkey_export_subkey_dsa_raw
  190. (gnutls_openpgp_privkey_t pkey, unsigned int idx,
  191. gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g,
  192. gnutls_datum_t * y, gnutls_datum_t * x) _GNUTLS_GCC_ATTR_DEPRECATED;
  193. int gnutls_openpgp_privkey_export_subkey_rsa_raw
  194. (gnutls_openpgp_privkey_t pkey, unsigned int idx,
  195. gnutls_datum_t * m, gnutls_datum_t * e, gnutls_datum_t * d,
  196. gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * u) _GNUTLS_GCC_ATTR_DEPRECATED;
  197. int gnutls_openpgp_privkey_export_dsa_raw(gnutls_openpgp_privkey_t
  198. pkey, gnutls_datum_t * p,
  199. gnutls_datum_t * q,
  200. gnutls_datum_t * g,
  201. gnutls_datum_t * y,
  202. gnutls_datum_t * x) _GNUTLS_GCC_ATTR_DEPRECATED;
  203. int gnutls_openpgp_privkey_export_rsa_raw(gnutls_openpgp_privkey_t
  204. pkey, gnutls_datum_t * m,
  205. gnutls_datum_t * e,
  206. gnutls_datum_t * d,
  207. gnutls_datum_t * p,
  208. gnutls_datum_t * q,
  209. gnutls_datum_t * u) _GNUTLS_GCC_ATTR_DEPRECATED;
  210. int gnutls_openpgp_privkey_export(gnutls_openpgp_privkey_t key,
  211. gnutls_openpgp_crt_fmt_t format,
  212. const char *password,
  213. unsigned int flags,
  214. void *output_data,
  215. size_t * output_data_size) _GNUTLS_GCC_ATTR_DEPRECATED;
  216. int gnutls_openpgp_privkey_export2(gnutls_openpgp_privkey_t key,
  217. gnutls_openpgp_crt_fmt_t format,
  218. const char *password,
  219. unsigned int flags,
  220. gnutls_datum_t * out) _GNUTLS_GCC_ATTR_DEPRECATED;
  221. int gnutls_openpgp_privkey_set_preferred_key_id
  222. (gnutls_openpgp_privkey_t key, const gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  223. int gnutls_openpgp_privkey_get_preferred_key_id
  224. (gnutls_openpgp_privkey_t key, gnutls_openpgp_keyid_t keyid) _GNUTLS_GCC_ATTR_DEPRECATED;
  225. int gnutls_openpgp_crt_get_auth_subkey(gnutls_openpgp_crt_t crt,
  226. gnutls_openpgp_keyid_t
  227. keyid, unsigned int flag) _GNUTLS_GCC_ATTR_DEPRECATED;
  228. /* Keyring stuff.
  229. */
  230. int gnutls_openpgp_keyring_init(gnutls_openpgp_keyring_t * keyring) _GNUTLS_GCC_ATTR_DEPRECATED;
  231. void gnutls_openpgp_keyring_deinit(gnutls_openpgp_keyring_t keyring) _GNUTLS_GCC_ATTR_DEPRECATED;
  232. int gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring,
  233. const gnutls_datum_t * data,
  234. gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  235. int gnutls_openpgp_keyring_check_id(gnutls_openpgp_keyring_t ring,
  236. const gnutls_openpgp_keyid_t
  237. keyid, unsigned int flags) _GNUTLS_GCC_ATTR_DEPRECATED;
  238. int gnutls_openpgp_crt_verify_ring(gnutls_openpgp_crt_t key,
  239. gnutls_openpgp_keyring_t
  240. keyring, unsigned int flags,
  241. unsigned int *verify
  242. /* the output of the verification */
  243. ) _GNUTLS_GCC_ATTR_DEPRECATED;
  244. int gnutls_openpgp_crt_verify_self(gnutls_openpgp_crt_t key,
  245. unsigned int flags,
  246. unsigned int *verify) _GNUTLS_GCC_ATTR_DEPRECATED;
  247. int gnutls_openpgp_keyring_get_crt(gnutls_openpgp_keyring_t ring,
  248. unsigned int idx,
  249. gnutls_openpgp_crt_t * cert) _GNUTLS_GCC_ATTR_DEPRECATED;
  250. int gnutls_openpgp_keyring_get_crt_count(gnutls_openpgp_keyring_t ring) _GNUTLS_GCC_ATTR_DEPRECATED;
  251. /**
  252. * gnutls_openpgp_recv_key_func:
  253. * @session: a TLS session
  254. * @keyfpr: key fingerprint
  255. * @keyfpr_length: length of key fingerprint
  256. * @key: output key.
  257. *
  258. * A callback of this type is used to retrieve OpenPGP keys. Only
  259. * useful on the server, and will only be used if the peer send a key
  260. * fingerprint instead of a full key. See also
  261. * gnutls_openpgp_set_recv_key_function().
  262. *
  263. * The variable @key must be allocated using gnutls_malloc().
  264. *
  265. * Returns: On success, %GNUTLS_E_SUCCESS (zero) is returned,
  266. * otherwise an error code is returned.
  267. */
  268. typedef int (*gnutls_openpgp_recv_key_func) (gnutls_session_t
  269. session,
  270. const unsigned char
  271. *keyfpr,
  272. unsigned int
  273. keyfpr_length,
  274. gnutls_datum_t * key);
  275. void
  276. gnutls_openpgp_set_recv_key_function(gnutls_session_t session,
  277. gnutls_openpgp_recv_key_func func) _GNUTLS_GCC_ATTR_DEPRECATED;
  278. /* certificate authentication stuff.
  279. */
  280. int gnutls_certificate_set_openpgp_key
  281. (gnutls_certificate_credentials_t res,
  282. gnutls_openpgp_crt_t crt, gnutls_openpgp_privkey_t pkey) _GNUTLS_GCC_ATTR_DEPRECATED;
  283. int
  284. gnutls_certificate_get_openpgp_key(gnutls_certificate_credentials_t res,
  285. unsigned index,
  286. gnutls_openpgp_privkey_t *key) _GNUTLS_GCC_ATTR_DEPRECATED;
  287. int
  288. gnutls_certificate_get_openpgp_crt(gnutls_certificate_credentials_t res,
  289. unsigned index,
  290. gnutls_openpgp_crt_t **crt_list,
  291. unsigned *crt_list_size) _GNUTLS_GCC_ATTR_DEPRECATED;
  292. int
  293. gnutls_certificate_set_openpgp_key_file
  294. (gnutls_certificate_credentials_t res, const char *certfile,
  295. const char *keyfile, gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  296. int gnutls_certificate_set_openpgp_key_mem
  297. (gnutls_certificate_credentials_t res,
  298. const gnutls_datum_t * cert, const gnutls_datum_t * key,
  299. gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  300. int
  301. gnutls_certificate_set_openpgp_key_file2
  302. (gnutls_certificate_credentials_t res, const char *certfile,
  303. const char *keyfile, const char *subkey_id,
  304. gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  305. int
  306. gnutls_certificate_set_openpgp_key_mem2
  307. (gnutls_certificate_credentials_t res,
  308. const gnutls_datum_t * cert, const gnutls_datum_t * key,
  309. const char *subkey_id, gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  310. int gnutls_certificate_set_openpgp_keyring_mem
  311. (gnutls_certificate_credentials_t c, const unsigned char *data,
  312. size_t dlen, gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  313. int gnutls_certificate_set_openpgp_keyring_file
  314. (gnutls_certificate_credentials_t c, const char *file,
  315. gnutls_openpgp_crt_fmt_t format) _GNUTLS_GCC_ATTR_DEPRECATED;
  316. /* *INDENT-OFF* */
  317. #ifdef __cplusplus
  318. }
  319. #endif
  320. /* *INDENT-ON* */
  321. #endif /* GNUTLS_OPENPGP_H */