| 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; |