1 | /* |
2 | * Copyright (C) 2010-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 | |
23 | #ifndef _ABSTRACT_INT_H |
24 | # define _ABSTRACT_INT_H |
25 | |
26 | #include <gnutls/abstract.h> |
27 | |
28 | struct gnutls_privkey_st |
29 | { |
30 | gnutls_privkey_type_t type; |
31 | gnutls_pk_algorithm_t pk_algorithm; |
32 | |
33 | union |
34 | { |
35 | gnutls_x509_privkey_t x509; |
36 | #ifdef ENABLE_PKCS11 |
37 | gnutls_pkcs11_privkey_t pkcs11; |
38 | #endif |
39 | #ifdef ENABLE_OPENPGP |
40 | gnutls_openpgp_privkey_t openpgp; |
41 | #endif |
42 | struct { |
43 | gnutls_privkey_sign_func sign_func; |
44 | gnutls_privkey_decrypt_func decrypt_func; |
45 | gnutls_privkey_deinit_func deinit_func; |
46 | void* userdata; |
47 | } ext; |
48 | } key; |
49 | |
50 | unsigned int flags; |
51 | struct pin_info_st pin; |
52 | }; |
53 | |
54 | struct gnutls_pubkey_st |
55 | { |
56 | gnutls_pk_algorithm_t pk_algorithm; |
57 | unsigned int bits; /* an indication of the security parameter */ |
58 | |
59 | /* the size of params depends on the public |
60 | * key algorithm |
61 | * RSA: [0] is modulus |
62 | * [1] is public exponent |
63 | * DSA: [0] is p |
64 | * [1] is q |
65 | * [2] is g |
66 | * [3] is public key |
67 | */ |
68 | gnutls_pk_params_st params; |
69 | |
70 | #ifdef ENABLE_OPENPGP |
71 | uint8_t openpgp_key_id[GNUTLS_OPENPGP_KEYID_SIZE]; |
72 | unsigned int openpgp_key_id_set; |
73 | |
74 | uint8_t openpgp_key_fpr[GNUTLS_OPENPGP_V4_FINGERPRINT_SIZE]; |
75 | unsigned int openpgp_key_fpr_set:1; |
76 | #endif |
77 | |
78 | unsigned int key_usage; /* bits from GNUTLS_KEY_* */ |
79 | |
80 | struct pin_info_st pin; |
81 | }; |
82 | |
83 | int _gnutls_privkey_get_public_mpis (gnutls_privkey_t key, |
84 | gnutls_pk_params_st*); |
85 | |
86 | int pubkey_to_bits(gnutls_pk_algorithm_t pk, gnutls_pk_params_st* params); |
87 | int _gnutls_pubkey_compatible_with_sig(gnutls_session_t, gnutls_pubkey_t pubkey, |
88 | const version_entry_st* ver, gnutls_sign_algorithm_t sign); |
89 | int _gnutls_pubkey_is_over_rsa_512(gnutls_pubkey_t pubkey); |
90 | int |
91 | _gnutls_pubkey_get_mpis (gnutls_pubkey_t key, |
92 | gnutls_pk_params_st * params); |
93 | |
94 | int |
95 | pubkey_verify_hashed_data (gnutls_pk_algorithm_t pk, |
96 | const mac_entry_st * algo, |
97 | const gnutls_datum_t * hash, |
98 | const gnutls_datum_t * signature, |
99 | gnutls_pk_params_st * issuer_params); |
100 | |
101 | int pubkey_verify_data (gnutls_pk_algorithm_t pk, |
102 | const mac_entry_st * algo, |
103 | const gnutls_datum_t * data, |
104 | const gnutls_datum_t * signature, |
105 | gnutls_pk_params_st * issuer_params); |
106 | |
107 | |
108 | |
109 | const mac_entry_st* |
110 | _gnutls_dsa_q_to_hash (gnutls_pk_algorithm_t algo, |
111 | const gnutls_pk_params_st* params, unsigned int* hash_len); |
112 | |
113 | #endif |
114 | |