File Coverage

blib/lib/Win32/Crypt/API.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package Win32::Crypt::API;
2            
3 2     2   44046 use strict;
  2         4  
  2         62  
4 2     2   10 use warnings;
  2         3  
  2         64  
5 2     2   19 use base qw/Exporter Win32::API::Interface/;
  2         5  
  2         4148  
6            
7             use vars qw/$VERSION @EXPORT_OK %EXPORT_TAGS/;
8             $VERSION = '0.00_004';
9            
10             my %consts;
11            
12             BEGIN {
13             %consts = (
14             CERT_STORE_PROV_MEMORY => 'Memory',
15             CERT_STORE_PROV_FILENAME => 'File',
16             CERT_STORE_PROV_SYSTEM => 'System',
17             CERT_STORE_PROV_PKCS7 => 'PKCS7',
18             CERT_STORE_PROV_SERIALIZED => 'Serialized',
19             CERT_STORE_PROV_COLLECTION => 'Collection',
20             CERT_STORE_PROV_SYSTEM_REGISTRY => 'SystemRegistry',
21             CERT_STORE_PROV_PHYSICAL => 'Physical',
22             CERT_STORE_PROV_SMART_CARD => 'SmartCard',
23             CERT_STORE_PROV_LDAP => 'Ldap',
24            
25             X509_ASN_ENCODING => 0x00000001,
26             X509_NDR_ENCODING => 0x00000002,
27             PKCS_7_ASN_ENCODING => 0x00010000,
28             PKCS_7_NDR_ENCODING => 0x00020000,
29            
30             CERT_STORE_NO_CRYPT_RELEASE_FLAG => 0x00000001,
31             CERT_STORE_SET_LOCALIZED_NAME_FLAG => 0x00000002,
32             CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG => 0x00000004,
33             CERT_STORE_DELETE_FLAG => 0x00000010,
34             CERT_STORE_UNSAFE_PHYSICAL_FLAG => 0x00000020,
35             CERT_STORE_SHARE_STORE_FLAG => 0x00000040,
36             CERT_STORE_SHARE_CONTEXT_FLAG => 0x00000080,
37             CERT_STORE_MANIFOLD_FLAG => 0x00000100,
38             CERT_STORE_ENUM_ARCHIVED_FLAG => 0x00000200,
39             CERT_STORE_UPDATE_KEYID_FLAG => 0x00000400,
40             CERT_STORE_BACKUP_RESTORE_FLAG => 0x00000800,
41             CERT_STORE_READONLY_FLAG => 0x00008000,
42             CERT_STORE_OPEN_EXISTING_FLAG => 0x00004000,
43             CERT_STORE_CREATE_NEW_FLAG => 0x00002000,
44             CERT_STORE_MAXIMUM_ALLOWED_FLAG => 0x00001000,
45            
46             CERT_SYSTEM_STORE_UNPROTECTED_FLAG => 0x40000000,
47             CERT_SYSTEM_STORE_LOCATION_MASK => 0x00FF0000,
48             CERT_SYSTEM_STORE_RELOCATE_FLAG => 0x80000000,
49            
50             CERT_REGISTRY_STORE_REMOTE_FLAG => 0x10000,
51             CERT_REGISTRY_STORE_SERIALIZED_FLAG => 0x20000,
52             CERT_REGISTRY_STORE_CLIENT_GPT_FLAG => 0x80000000,
53             CERT_REGISTRY_STORE_LM_GPT_FLAG => 0x01000000,
54            
55             CERT_SYSTEM_STORE_LOCATION_SHIFT => 16,
56             CERT_SYSTEM_STORE_CURRENT_USER_ID => 1,
57             CERT_SYSTEM_STORE_LOCAL_MACHINE_ID => 2,
58             CERT_SYSTEM_STORE_CURRENT_SERVICE_ID => 4,
59             CERT_SYSTEM_STORE_SERVICES_ID => 5,
60             CERT_SYSTEM_STORE_USERS_ID => 6,
61             CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID => 7,
62             CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID => 8,
63             CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID => 9,
64            
65             CERT_LDAP_STORE_SIGN_FLAG => 0x10000,
66             CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG => 0x20000,
67             CERT_LDAP_STORE_OPENED_FLAG => 0x40000,
68            
69             CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG => 0x1,
70             CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG => 0x2,
71             CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG => 0x4,
72             CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG => 0x8,
73            
74             CERT_STORE_ADD_NEW => 1,
75             CERT_STORE_ADD_USE_EXISTING => 2,
76             CERT_STORE_ADD_REPLACE_EXISTING => 3,
77             CERT_STORE_ADD_ALWAYS => 4,
78             CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES => 5,
79             CERT_STORE_ADD_NEWER => 6,
80             CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES => 7,
81            
82             E_INVALIDARG => 0x80070057,
83             CRYPT_E_MSG_ERROR => 0x80091001,
84             CRYPT_E_UNKNOWN_ALGO => 0x80091002,
85             CRYPT_E_OID_FORMAT => 0x80091003,
86             CRYPT_E_INVALID_MSG_TYPE => 0x80091004,
87             CRYPT_E_UNEXPECTED_ENCODING => 0x80091005,
88             CRYPT_E_AUTH_ATTR_MISSING => 0x80091006,
89             CRYPT_E_HASH_VALUE => 0x80091007,
90             CRYPT_E_INVALID_INDEX => 0x80091008,
91             CRYPT_E_ALREADY_DECRYPTED => 0x80091009,
92             CRYPT_E_NOT_DECRYPTED => 0x8009100A,
93             CRYPT_E_RECIPIENT_NOT_FOUND => 0x8009100B,
94             CRYPT_E_CONTROL_TYPE => 0x8009100C,
95             CRYPT_E_ISSUER_SERIALNUMBER => 0x8009100D,
96             CRYPT_E_SIGNER_NOT_FOUND => 0x8009100E,
97             CRYPT_E_ATTRIBUTES_MISSING => 0x8009100F,
98             CRYPT_E_STREAM_MSG_NOT_READY => 0x80091010,
99             CRYPT_E_STREAM_INSUFFICIENT_DATA => 0x80091011,
100             CRYPT_I_NEW_PROTECTION_REQUIRED => 0x00091012,
101             CRYPT_E_BAD_LEN => 0x80092001,
102             CRYPT_E_BAD_ENCODE => 0x80092002,
103             CRYPT_E_FILE_ERROR => 0x80092003,
104             CRYPT_E_NOT_FOUND => 0x80092004,
105             CRYPT_E_EXISTS => 0x80092005,
106             CRYPT_E_NO_PROVIDER => 0x80092006,
107             CRYPT_E_SELF_SIGNED => 0x80092007,
108             CRYPT_E_DELETED_PREV => 0x80092008,
109             CRYPT_E_NO_MATCH => 0x80092009,
110             CRYPT_E_UNEXPECTED_MSG_TYPE => 0x8009200A,
111             CRYPT_E_NO_KEY_PROPERTY => 0x8009200B,
112             CRYPT_E_NO_DECRYPT_CERT => 0x8009200C,
113             CRYPT_E_BAD_MSG => 0x8009200D,
114             CRYPT_E_NO_SIGNER => 0x8009200E,
115             CRYPT_E_PENDING_CLOSE => 0x8009200F,
116             CRYPT_E_REVOKED => 0x80092010,
117             CRYPT_E_NO_REVOCATION_DLL => 0x80092011,
118             CRYPT_E_NO_REVOCATION_CHECK => 0x80092012,
119             CRYPT_E_REVOCATION_OFFLINE => 0x80092013,
120             CRYPT_E_NOT_IN_REVOCATION_DATABASE => 0x80092014,
121             CRYPT_E_INVALID_NUMERIC_STRING => 0x80092020,
122             CRYPT_E_INVALID_PRINTABLE_STRING => 0x80092021,
123             CRYPT_E_INVALID_IA5_STRING => 0x80092022,
124             CRYPT_E_INVALID_X500_STRING => 0x80092023,
125             CRYPT_E_NOT_CHAR_STRING => 0x80092024,
126             CRYPT_E_FILERESIZED => 0x80092025,
127             CRYPT_E_SECURITY_SETTINGS => 0x80092026,
128             CRYPT_E_NO_VERIFY_USAGE_DLL => 0x80092027,
129             CRYPT_E_NO_VERIFY_USAGE_CHECK => 0x80092028,
130             CRYPT_E_VERIFY_USAGE_OFFLINE => 0x80092029,
131             CRYPT_E_NOT_IN_CTL => 0x8009202A,
132             CRYPT_E_NO_TRUSTED_SIGNER => 0x8009202B,
133             CRYPT_E_MISSING_PUBKEY_PARA => 0x8009202C,
134             CRYPT_E_OSS_ERROR => 0x80093000,
135            
136             ERROR_NOT_ENOUGH_MEMORY => 8,
137             ERROR_INVALID_PARAMETER => 87,
138             ERROR_BUSY => 107,
139             ERROR_MORE_DATA => 234,
140             ERROR_NO_MORE_ITEMS => 259,
141            
142             NTE_BAD_SIGNATURE => 0x80090006,
143             NTE_BAD_FLAGS => 0x80090009,
144             NTE_NO_MEMORY => 0x8009000E,
145             NTE_EXISTS => 0x8009000F,
146             NTE_BAD_PROV_TYPE => 0x80090014,
147             NTE_BAD_KEYSET => 0x80090016,
148             NTE_PROV_TYPE_NOT_DEF => 0x80090017,
149             NTE_PROV_TYPE_ENTRY_BAD => 0x80090018,
150             NTE_KEYSET_NOT_DEF => 0x80090019,
151             NTE_KEYSET_ENTRY_BAD => 0x8009001A,
152             NTE_PROV_TYPE_NO_MATCH => 0x8009001B,
153             NTE_SIGNATURE_FILE_BAD => 0x8009001C,
154             NTE_PROVIDER_DLL_FAIL => 0x8009001D,
155             NTE_PROV_DLL_NOT_FOUND => 0x8009001E,
156             NTE_BAD_KEYSET_PARAM => 0x8009001F,
157             NTE_FAIL => 0x80090020,
158            
159             CERT_STORE_CTRL_COMMIT_FORCE_FLAG => 0x1,
160             CERT_STORE_CTRL_COMMIT_CLEAR_FLAG => 0x2,
161             CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG => 0x1,
162            
163             PP_ENUMALGS => 1,
164             PP_ENUMCONTAINERS => 2,
165             PP_IMPTYPE => 3,
166             PP_NAME => 4,
167             PP_VERSION => 5,
168             PP_CONTAINER => 6,
169             PP_CHANGE_PASSWORD => 7,
170             PP_KEYSET_SEC_DESCR => 8, # get/set security descriptor of keyset
171             PP_CERTCHAIN => 9, # for retrieving certificates from tokens
172             PP_KEY_TYPE_SUBTYPE => 10,
173             PP_PROVTYPE => 16,
174             PP_KEYSTORAGE => 17,
175             PP_APPLI_CERT => 18,
176             PP_SYM_KEYSIZE => 19,
177             PP_SESSION_KEYSIZE => 20,
178             PP_UI_PROMPT => 21,
179             PP_ENUMALGS_EX => 22,
180             PP_ENUMMANDROOTS => 25,
181             PP_ENUMELECTROOTS => 26,
182             PP_KEYSET_TYPE => 27,
183             PP_ADMIN_PIN => 31,
184             PP_KEYEXCHANGE_PIN => 32,
185             PP_SIGNATURE_PIN => 33,
186             PP_SIG_KEYSIZE_INC => 34,
187             PP_KEYX_KEYSIZE_INC => 35,
188             PP_UNIQUE_CONTAINER => 36,
189             PP_SGC_INFO => 37,
190             PP_USE_HARDWARE_RNG => 38,
191             PP_KEYSPEC => 39,
192             PP_ENUMEX_SIGNING_PROT => 40,
193             PP_CRYPT_COUNT_KEY_USE => 41,
194            
195             CRYPT_FIRST => 1,
196             CRYPT_NEXT => 2,
197             CRYPT_SGC_ENUM => 4,
198            
199             CRYPT_IMPL_HARDWARE => 1,
200             CRYPT_IMPL_SOFTWARE => 2,
201             CRYPT_IMPL_MIXED => 3,
202             CRYPT_IMPL_UNKNOWN => 4,
203             CRYPT_IMPL_REMOVABLE => 8,
204            
205             CRYPT_SEC_DESCR => 0x00000001,
206             CRYPT_PSTORE => 0x00000002,
207             CRYPT_UI_PROMPT => 0x00000004,
208            
209             CRYPT_FLAG_PCT1 => 0x0001,
210             CRYPT_FLAG_SSL2 => 0x0002,
211             CRYPT_FLAG_SSL3 => 0x0004,
212             CRYPT_FLAG_TLS1 => 0x0008,
213             CRYPT_FLAG_IPSEC => 0x0010,
214             CRYPT_FLAG_SIGNING => 0x0020,
215            
216             CRYPT_SGC => 0x0001,
217             CRYPT_FASTSGC => 0x0002,
218            
219             PP_CLIENT_HWND => 1,
220             PP_CONTEXT_INFO => 11,
221             PP_KEYEXCHANGE_KEYSIZE => 12,
222             PP_SIGNATURE_KEYSIZE => 13,
223             PP_KEYEXCHANGE_ALG => 14,
224             PP_SIGNATURE_ALG => 15,
225             PP_DELETEKEY => 24,
226            
227             PROV_RSA_FULL => 1,
228             PROV_RSA_SIG => 2,
229             PROV_DSS => 3,
230             PROV_FORTEZZA => 4,
231             PROV_MS_EXCHANGE => 5,
232             PROV_SSL => 6,
233             PROV_RSA_SCHANNEL => 12,
234             PROV_DSS_DH => 13,
235             PROV_EC_ECDSA_SIG => 14,
236             PROV_EC_ECNRA_SIG => 15,
237             PROV_EC_ECDSA_FULL => 16,
238             PROV_EC_ECNRA_FULL => 17,
239             PROV_DH_SCHANNEL => 18,
240             PROV_SPYRUS_LYNKS => 20,
241             PROV_RNG => 21,
242             PROV_INTEL_SEC => 22,
243             PROV_REPLACE_OWF => 23,
244             PROV_RSA_AES => 24,
245            
246             );
247            
248             %consts = (
249             %consts,
250            
251             CERT_SYSTEM_STORE_CURRENT_USER =>
252             $consts{CERT_SYSTEM_STORE_CURRENT_USER_ID}
253             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
254             CERT_SYSTEM_STORE_LOCAL_MACHINE =>
255             $consts{CERT_SYSTEM_STORE_LOCAL_MACHINE_ID}
256             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
257             CERT_SYSTEM_STORE_CURRENT_SERVICE =>
258             $consts{CERT_SYSTEM_STORE_CURRENT_SERVICE_ID}
259             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
260             CERT_SYSTEM_STORE_SERVICES => $consts{CERT_SYSTEM_STORE_SERVICES_ID}
261             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
262             CERT_SYSTEM_STORE_USERS => $consts{CERT_SYSTEM_STORE_USERS_ID}
263             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
264             CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY =>
265             $consts{CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID}
266             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
267             CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY =>
268             $consts{CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID}
269             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
270             CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE =>
271             $consts{CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID}
272             << $consts{CERT_SYSTEM_STORE_LOCATION_SHIFT},
273             );
274             }
275             use constant \%consts;
276            
277             __PACKAGE__->generate(
278             {
279             'advapi32' => [
280             [ 'CryptAcquireContext', 'PPPNN', 'I' ],
281             [ 'CryptContextAddRef', 'NPN', 'I' ],
282             [ 'CryptEnumProviders', 'NPNPPP', 'I' ],
283             [ 'CryptEnumProviderTypes', 'NPNPPP', 'I' ],
284             [ 'CryptGetDefaultProvider', 'NPNPP', 'I' ],
285             [ 'CryptGetProvParam', 'NNPPN', 'I' ],
286             [ 'CryptInstallDefaultContext', 'NNPNPP', 'I' ],
287             [ 'CryptReleaseContext', 'NN', 'I' ],
288             [ 'CryptSetProvider', 'PN', 'I' ],
289             [ 'CryptSetProviderEx', 'PNPN', 'I' ],
290             [ 'CryptSetProvParam', 'NNPN', 'I' ],
291             [ 'CryptUninstallDefaultContext', 'NNP', 'I' ],
292             ],
293             'crypt32' => [
294            
295             [ 'CertAddStoreToCollection', 'NNNN', 'I' ],
296             [ 'CertAddCertificateLinkToStore', 'NNNN', 'I' ],
297             [ 'CertCloseStore', 'NN', 'I' ],
298             [ 'CertControlStore', 'NNNP', 'I' ],
299             [ 'CertDuplicateStore', 'N', 'N' ],
300             [ 'CertEnumPhysicalStore', 'PNPK', 'I' ],
301             [ 'CertEnumSystemStore', 'PNPK', 'I' ],
302             [ 'CertEnumSystemStoreLocation', 'NPK', 'I' ],
303             [ 'CertGetStoreProperty', 'NNPP', 'I' ],
304             [ 'CertOpenStore', 'PNNNP', 'N' ],
305             [ 'CertOpenSystemStore', 'NP', 'N' ],
306             [ 'CertRegisterPhysicalStore', 'PNPSP', 'I' ],
307             [ 'CertRegisterSystemStore', 'PNSP', 'I' ],
308             [ 'CertRemoveStoreFromCollection', 'NN', 'V' ],
309             [ 'CertSaveStore', 'NNNNPN', 'I' ],
310             [ 'CertSetStoreProperty', 'NNNP', 'I' ],
311             [ 'CertUnregisterPhysicalStore', 'PNP', 'I' ],
312             [ 'CertUnregisterSystemStore', 'PN', 'I' ],
313             ],
314             }
315             );
316            
317             %EXPORT_TAGS = ( consts => [ __PACKAGE__->constant_names ] );
318             @EXPORT_OK = ( __PACKAGE__->constant_names );
319            
320             sub constant_names {
321             return keys %consts;
322             }
323            
324             1;