1use libc::{c_char, c_uint, c_int, c_void};
6use nspr::{PLArenaPool, PRBool, PRUint32, PRCList};
7use super::{SECItem, SECAlgorithmID, NSSTrustDomainStr, NSSCertificateStr, PK11SlotInfo, CK_OBJECT_HANDLE, SECStatus};
8
9pub type CERTCertList = CERTCertListStr;
10pub type CERTCertListNode = CERTCertListNodeStr;
11pub type CERTCertificate = CERTCertificateStr;
12pub type CERTSignedData = CERTSignedDataStr;
13pub type CERTName = CERTNameStr;
14pub type CERTRDN = CERTRDNStr;
15pub type CERTAVA = CERTAVAStr;
16pub type CERTValidity = CERTValidityStr;
17pub type CERTSubjectPublicKeyInfo = CERTSubjectPublicKeyInfoStr;
18pub type CERTCertExtension = CERTCertExtensionStr;
19pub type CERTCertDBHandle = NSSTrustDomainStr;
20pub type CERTOKDomainName = CERTOKDomainNameStr;
21pub type CERTCertTrust = CERTCertTrustStr;
22pub type CERTSubjectList = CERTSubjectListStr;
23pub type CERTSubjectNode = CERTSubjectNodeStr;
24pub type CERTAuthKeyID = CERTAuthKeyIDStr;
25pub type CERTGeneralName = CERTGeneralNameStr;
26
27#[derive(Debug)]
28#[repr(C)]
29pub struct CERTCertListStr {
30 pub list: PRCList,
31 pub arena: *mut PLArenaPool,
32}
33
34#[derive(Debug)]
35#[repr(C)]
36pub struct CERTCertListNodeStr {
37 pub links: PRCList,
38 pub cert: *mut CERTCertificate,
39 pub appData: *mut c_void,
40}
41
42#[derive(Debug)]
43#[repr(C)]
44pub struct CERTCertificateStr {
45 pub arena: *mut PLArenaPool,
46 pub subjectName: *mut c_char,
47 pub issuerName: *mut c_char,
48 pub signatureWrap: CERTSignedData,
49 pub derCert: SECItem,
50 pub derIssuer: SECItem,
51 pub derSubject: SECItem,
52 pub derPublicKey: SECItem,
53 pub certKey: SECItem,
54 pub version: SECItem,
55 pub serialNumber: SECItem,
56 pub signature: SECAlgorithmID,
57 pub issuer: CERTName,
58 pub validity: CERTValidity,
59 pub subject: CERTName,
60 pub subjectPublicKeyInfo: CERTSubjectPublicKeyInfo,
61 pub issuerID: SECItem,
62 pub subjectID: SECItem,
63 pub extensions: *mut *mut CERTCertExtension,
64 pub emailAddr: *mut c_char,
65 pub dbhandle: *mut CERTCertDBHandle,
66 pub subjectKeyID: SECItem,
67 pub keyIDGenerated: PRBool,
68 pub keyUsage: c_uint,
69 pub rawKeyUsage: c_uint,
70 pub keyUsagePresent: PRBool,
71 pub nsCertType: PRUint32,
72 pub keepSession: PRBool,
73 pub timeOK: PRBool,
74 pub domainOK: *mut CERTOKDomainName,
75 pub isperm: PRBool,
76 pub istemp: PRBool,
77 pub nickname: *mut c_char,
78 pub dbnickname: *mut c_char,
79 pub nssCertificate: *mut NSSCertificateStr,
80 pub trust: *mut CERTCertTrust,
81 pub referenceCount: c_int,
82 pub subjectList: *mut CERTSubjectList,
83 pub authKeyID: *mut CERTAuthKeyID,
84 pub isRoot: PRBool,
85 pub options: usize,
89 pub series: c_int,
90 pub slot: *mut PK11SlotInfo,
91 pub pkcs11ID: CK_OBJECT_HANDLE,
92 pub ownSlot: PRBool,
93}
94
95#[derive(Debug)]
96#[repr(C)]
97pub struct CERTSignedDataStr {
98 pub data: SECItem,
99 pub signatureAlgorithm: SECAlgorithmID,
100 pub signature: SECItem,
101}
102
103#[derive(Debug)]
104#[repr(C)]
105pub struct CERTNameStr {
106 pub arena: *mut PLArenaPool,
107 pub rdns: *mut *mut CERTRDN,
108}
109
110#[derive(Debug)]
111#[repr(C)]
112pub struct CERTRDNStr {
113 pub avas: *mut *mut CERTAVA,
114}
115
116#[derive(Debug)]
117#[repr(C)]
118pub struct CERTAVAStr {
119 pub type_: SECItem,
120 pub value: SECItem,
121}
122
123#[derive(Debug)]
124#[repr(C)]
125pub struct CERTValidityStr {
126 pub arena: *mut PLArenaPool,
127 pub notBefore: SECItem,
128 pub notAfter: SECItem,
129}
130
131#[derive(Debug)]
132#[repr(C)]
133pub struct CERTSubjectPublicKeyInfoStr {
134 pub arena: *mut PLArenaPool,
135 pub algorithm: SECAlgorithmID,
136 pub subjectPublicKey: SECItem,
137}
138
139#[derive(Debug)]
140#[repr(C)]
141pub struct CERTCertExtensionStr {
142 pub id: SECItem,
143 pub critical: SECItem,
144 pub value: SECItem,
145}
146
147#[derive(Debug)]
148#[repr(C)]
149pub struct CERTOKDomainNameStr {
150 pub next: *mut CERTOKDomainName,
151 pub name0: c_char,
159}
160
161#[derive(Debug)]
162#[repr(C)]
163pub struct CERTCertTrustStr {
165 pub sslFlags: c_uint,
166 pub emailFlags: c_uint,
167 pub objectSigningFlags: c_uint,
168}
169
170#[derive(Debug)]
171#[repr(C)]
172pub struct CERTSubjectListStr {
173 pub arena: *mut PLArenaPool,
174 pub ncerts: c_int,
175 pub emailAddr: *mut c_char,
176 pub head: *mut CERTSubjectNode,
177 pub tail: *mut CERTSubjectNode,
178 pub entry: *mut c_void,
179}
180
181#[derive(Debug)]
182#[repr(C)]
183pub struct CERTSubjectNodeStr {
184 pub next: *mut CERTSubjectNodeStr,
185 pub prev: *mut CERTSubjectNodeStr,
186 pub certKey: SECItem,
187 pub keyID: SECItem,
188}
189
190#[derive(Debug)]
191#[repr(C)]
192pub struct CERTAuthKeyIDStr {
193 pub keyID: SECItem,
194 pub authCertIssuer: *mut CERTGeneralName,
195 pub authCertSerialNumber: SECItem,
196 pub DERAuthCertIssuer: *mut *mut SECItem,
197}
198
199pub enum CERTGeneralNameStr { }
201
202extern "C" {
203 pub fn CERT_DestroyCertificate(cert: *mut CERTCertificate);
204 pub fn CERT_DestroyCertList(cert: *mut CERTCertList);
205 pub fn CERT_VerifyCertName(cert: *const CERTCertificate, hn: *const c_char) -> SECStatus;
206}