1 /**
2  * FreeRDP: A Remote Desktop Protocol Implementation
3  * Certificate Handling
4  *
5  * Copyright 2011-2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 
20 #ifndef FREERDP_CRYPTO_CERTIFICATE_H
21 #define FREERDP_CRYPTO_CERTIFICATE_H
22 
23 typedef struct rdp_certificate_data rdpCertificateData;
24 typedef struct rdp_certificate_store rdpCertificateStore;
25 
26 #include <freerdp/crypto/ber.h>
27 #include <freerdp/crypto/crypto.h>
28 
29 #include <freerdp/api.h>
30 #include <freerdp/settings.h>
31 
32 #include <winpr/print.h>
33 #include <winpr/stream.h>
34 
35 struct rdp_certificate_data
36 {
37 	char* hostname;
38 	UINT16 port;
39 	char* subject;
40 	char* issuer;
41 	char* fingerprint;
42 };
43 
44 struct rdp_certificate_store
45 {
46 	char* path;
47 	char* file;
48 	char* legacy_file;
49 	rdpSettings* settings;
50 	rdpCertificateData* certificate_data;
51 };
52 
53 #ifdef __cplusplus
54 extern "C"
55 {
56 #endif
57 
58 	FREERDP_API rdpCertificateData* certificate_data_new(const char* hostname, UINT16 port,
59 	                                                     const char* subject, const char* issuer,
60 	                                                     const char* fingerprint);
61 	FREERDP_API void certificate_data_free(rdpCertificateData* certificate_data);
62 	FREERDP_API rdpCertificateStore* certificate_store_new(rdpSettings* settings);
63 	FREERDP_API BOOL certificate_data_replace(rdpCertificateStore* certificate_store,
64 	                                          rdpCertificateData* certificate_data);
65 	FREERDP_API void certificate_store_free(rdpCertificateStore* certificate_store);
66 	FREERDP_API int certificate_data_match(rdpCertificateStore* certificate_store,
67 	                                       rdpCertificateData* certificate_data);
68 	FREERDP_API BOOL certificate_data_print(rdpCertificateStore* certificate_store,
69 	                                        rdpCertificateData* certificate_data);
70 	FREERDP_API BOOL certificate_get_stored_data(rdpCertificateStore* certificate_store,
71 	                                             rdpCertificateData* certificate_data,
72 	                                             char** subject, char** issuer, char** fingerprint);
73 
74 #ifdef __cplusplus
75 }
76 #endif
77 
78 #endif /* FREERDP_CRYPTO_CERTIFICATE_H */
79