mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 07:32:57 +00:00
Sync to Wine-0_9_10:
Juan Lang <juan_lang@yahoo.com> - crypt32: Move context properties to a separate file. - crypt32: Move serialization functions to serialize.c. - crypt32: Implement CertGetValidUsages. - crypt32: Implement CertDuplicateStore. Sync to Wine-0_9_9: Juan Lang <juan_lang@yahoo.com> - crypt32: implement CryptEnumOIDInfo and CryptFindOIDInfo. - implement CryptEnumOIDInfo and CryptFindOIDInfo - implement CertOIDToAlgId and CertAlgIdToOID using CryptFindOIDInfo - crypt32: Move certificate store functions to their own file. - crypt32: More encoding/decoding. Add support for encoding/decoding basic constraints and enhanced key usage, with tests. - crypt32: Move OIDToAlgID and AlgIDToOID to oid.c. - crypt32: Correct compile problem on gcc 2.95. - crypt32: Partially implement CertGetNameString. Henning Gerhardt <henning.gerhardt@web.de> - crypt32: Add German resource file. YunSong Hwang <hys545@dreamwiz.com> - crypt32: Add Korean translation. Alexander N. Sшrnes <alex@thehandofagony.com> - Updated/new Norwegian Bokmеl resources. Eric Pouech <eric.pouech@wanadoo.fr> - crypt32: Don't access a blob after freeing it. Sync to Wine-0_9_8: Juan Lang <juan_lang@yahoo.com> - crypt32: Fix a fixme, and remove an old comment. - crypt32: Output string type in trace. Alexandre Julliard <julliard@winehq.org> - Include wine/port.h in files that use exceptions. Sync to Wine-0_9_7: Juan Lang <juan@codeweavers.com> - crypt32: Implement CertRDNValueToStrA and CertNameToStrA, with tests. - crypt32: Correct X509_NAME decoding, and more stringent tests. - crypt32: Implement CertRDNValueToStrW and CertNameToStrW, with tests. svn path=/trunk/; revision=21617
This commit is contained in:
parent
e4af2a5bf8
commit
41f90c8fd7
18 changed files with 6057 additions and 3142 deletions
File diff suppressed because it is too large
Load diff
|
@ -12,7 +12,11 @@
|
|||
<file>encode.c</file>
|
||||
<file>cert.c</file>
|
||||
<file>oid.c</file>
|
||||
<file>proplist.c</file>
|
||||
<file>protectdata.c</file>
|
||||
<file>serialize.c</file>
|
||||
<file>store.c</file>
|
||||
<file>str.c</file>
|
||||
<file>crypt32.rc</file>
|
||||
<file>crypt32.spec</file>
|
||||
</module>
|
||||
|
|
|
@ -1,7 +1,36 @@
|
|||
/* $Id$ */
|
||||
/*
|
||||
* crypt32 dll resources
|
||||
*
|
||||
* Copyright (C) 2006 Juan Lang
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#define REACTOS_VERSION_DLL
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "Crypt\0"
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "CryptoAPI Library\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "crypt32\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "crypt32.dll\0"
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "cryptres.h"
|
||||
|
||||
#include <reactos/version.rc>
|
||||
|
||||
#include "crypt32_De.rc"
|
||||
#include "crypt32_En.rc"
|
||||
#include "crypt32_Ko.rc"
|
||||
#include "crypt32_No.rc"
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
@ stdcall CertAddEncodedCertificateToStore(long long ptr long long ptr)
|
||||
@ stub CertAddEncodedCertificateToSystemStoreA
|
||||
@ stub CertAddEncodedCertificateToSystemStoreW
|
||||
@ stub CertAddEnhancedKeyUsageIdentifier
|
||||
@ stdcall CertAddEnhancedKeyUsageIdentifier(ptr str)
|
||||
@ stdcall CertAddSerializedElementToStore(ptr ptr long long long long ptr ptr)
|
||||
@ stdcall CertAddStoreToCollection(ptr ptr long long)
|
||||
@ stdcall CertAlgIdToOID(long)
|
||||
|
@ -26,7 +26,7 @@
|
|||
@ stub CertDuplicateCRLContext
|
||||
@ stub CertDuplicateCTLContext
|
||||
@ stdcall CertDuplicateCertificateContext(ptr)
|
||||
@ stub CertDuplicateStore
|
||||
@ stdcall CertDuplicateStore(ptr)
|
||||
@ stub CertEnumCRLContextProperties
|
||||
@ stdcall CertEnumCRLsInStore(ptr ptr)
|
||||
@ stub CertEnumCTLContextProperties
|
||||
|
@ -49,23 +49,24 @@
|
|||
@ stdcall CertGetCTLContextProperty(ptr long ptr ptr)
|
||||
@ stub CertGetCertificateChain
|
||||
@ stdcall CertGetCertificateContextProperty(ptr long ptr ptr)
|
||||
@ stub CertGetEnhancedKeyUsage
|
||||
@ stdcall CertGetEnhancedKeyUsage(ptr long ptr ptr)
|
||||
@ stub CertGetIntendedKeyUsage
|
||||
@ stub CertGetIssuerCertificateFromStore
|
||||
@ stub CertGetNameStringA
|
||||
@ stub CertGetNameStringW
|
||||
@ stdcall CertGetNameStringA(ptr long long ptr ptr long)
|
||||
@ stdcall CertGetNameStringW(ptr long long ptr ptr long)
|
||||
@ stub CertGetPublicKeyLength
|
||||
@ stub CertGetSubjectCertificateFromStore
|
||||
@ stdcall CertGetValidUsages(long ptr ptr ptr ptr)
|
||||
@ stub CertIsRDNAttrsInCertificateName
|
||||
@ stub CertNameToStrA
|
||||
@ stub CertNameToStrW
|
||||
@ stdcall CertNameToStrA(long ptr long ptr long)
|
||||
@ stdcall CertNameToStrW(long ptr long ptr long)
|
||||
@ stdcall CertOIDToAlgId(str)
|
||||
@ stdcall CertOpenStore(str long long long ptr)
|
||||
@ stdcall CertOpenSystemStoreA(long str)
|
||||
@ stdcall CertOpenSystemStoreW(long wstr)
|
||||
@ stub CertRDNValueToStrA
|
||||
@ stub CertRDNValueToStrW
|
||||
@ stub CertRemoveEnhancedKeyUsageIdentifier
|
||||
@ stdcall CertRDNValueToStrA(long ptr ptr long)
|
||||
@ stdcall CertRDNValueToStrW(long ptr ptr long)
|
||||
@ stdcall CertRemoveEnhancedKeyUsageIdentifier(ptr str)
|
||||
@ stdcall CertRemoveStoreFromCollection(long long)
|
||||
@ stdcall CertSaveStore(long long long long ptr long)
|
||||
@ stdcall CertSerializeCRLStoreElement(ptr long ptr ptr)
|
||||
|
@ -74,7 +75,7 @@
|
|||
@ stdcall CertSetCRLContextProperty(ptr long long ptr)
|
||||
@ stdcall CertSetCTLContextProperty(ptr long long ptr)
|
||||
@ stdcall CertSetCertificateContextProperty(ptr long long ptr)
|
||||
@ stub CertSetEnhancedKeyUsage
|
||||
@ stdcall CertSetEnhancedKeyUsage(ptr ptr)
|
||||
@ stub CertStrToNameA
|
||||
@ stub CertStrToNameW
|
||||
@ stub CertVerifyCertificateChainPolicy
|
||||
|
@ -98,12 +99,12 @@
|
|||
@ stdcall CryptEncodeObjectEx(long str ptr long ptr ptr ptr)
|
||||
@ stub CryptEncryptMessage
|
||||
@ stub CryptEnumOIDFunction
|
||||
@ stub CryptEnumOIDInfo
|
||||
@ stdcall CryptEnumOIDInfo(long long ptr ptr)
|
||||
@ stub CryptEnumProvidersU
|
||||
@ stub CryptExportPKCS8
|
||||
@ stdcall CryptExportPublicKeyInfo(long long long ptr ptr)
|
||||
@ stdcall CryptExportPublicKeyInfoEx(long long long str long ptr ptr ptr)
|
||||
@ stub CryptFindOIDInfo
|
||||
@ stdcall CryptFindOIDInfo(long ptr long)
|
||||
@ stub CryptFormatObject
|
||||
@ stdcall CryptFreeOIDFunctionAddress(long long)
|
||||
@ stub CryptGetAsyncParam
|
||||
|
@ -140,6 +141,7 @@
|
|||
@ stub CryptMsgUpdate
|
||||
@ stub CryptMsgVerifyCountersignatureEncoded
|
||||
@ stdcall CryptProtectData(ptr wstr ptr ptr ptr long ptr)
|
||||
@ stdcall CryptQueryObject(long ptr long long long ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall CryptRegisterDefaultOIDFunction(long str long wstr)
|
||||
@ stdcall CryptRegisterOIDFunction(long str str wstr str)
|
||||
@ stub CryptRegisterOIDInfo
|
||||
|
@ -178,10 +180,11 @@
|
|||
@ stdcall I_CryptFreeTls(long long)
|
||||
@ stub I_CryptGetDefaultCryptProv
|
||||
@ stub I_CryptGetDefaultCryptProvForEncrypt
|
||||
@ stub I_CryptGetOssGlobal
|
||||
@ stdcall I_CryptGetOssGlobal(long)
|
||||
@ stdcall I_CryptGetTls(long)
|
||||
@ stub I_CryptInsertLruEntry
|
||||
@ stub I_CryptInstallOssGlobal
|
||||
@ stdcall I_CryptInstallAsn1Module(long long long)
|
||||
@ stdcall I_CryptInstallOssGlobal(long long long)
|
||||
@ stub I_CryptReleaseLruEntry
|
||||
@ stdcall I_CryptSetTls(long ptr)
|
||||
@ stub I_CryptUninstallOssGlobal
|
||||
|
|
166
reactos/dll/win32/crypt32/crypt32_De.rc
Normal file
166
reactos/dll/win32/crypt32/crypt32_De.rc
Normal file
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
* crypt32 dll resources
|
||||
*
|
||||
* Copyright (C) 2006 Henning Gerhardt
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
IDS_AUTHORITY_KEY_ID "Autoritätsschlüsselkennung"
|
||||
IDS_KEY_ATTRIBUTES "Schlüsselattribute"
|
||||
IDS_KEY_USAGE_RESTRICTION "Schlüsselbenutzungseinschränkung"
|
||||
IDS_SUBJECT_ALT_NAME "Alternativer Name des Antragsstellers"
|
||||
IDS_ISSUER_ALT_NAME "Alternativer Name des Ausgebers"
|
||||
IDS_BASIC_CONSTRAINTS "Grundsätzliche Einschränkungen"
|
||||
IDS_KEY_USAGE "Schlüsselbenutzung"
|
||||
IDS_CERT_POLICIES "Zertifikatsrichtlinien"
|
||||
IDS_SUBJECT_KEY_IDENTIFIER "Schlüsselkennung des Antragsstellers"
|
||||
IDS_CRL_REASON_CODE "CRL Grundcode"
|
||||
IDS_CRL_DIST_POINTS "CRL Verteilungspunkte"
|
||||
IDS_ENHANCED_KEY_USAGE "Erweiterte Schlüsselbenutzung"
|
||||
IDS_AUTHORITY_INFO_ACCESS "Autoritätsinformationszugriff"
|
||||
IDS_CERT_EXTENSIONS "Zertifikatserweiterung"
|
||||
IDS_NEXT_UPDATE_LOCATION "Next Update Location"
|
||||
IDS_YES_OR_NO_TRUST "Vertrauen oder nicht vertrauen"
|
||||
IDS_EMAIL_ADDRESS "E-Mail-Adresse"
|
||||
IDS_UNSTRUCTURED_NAME "Unstrukturierter Name"
|
||||
IDS_CONTENT_TYPE "Inhaltstyp"
|
||||
IDS_MESSAGE_DIGEST "Nachrichtenübersicht"
|
||||
IDS_SIGNING_TIME "Signierungszeit"
|
||||
IDS_COUNTER_SIGN "Gegensignatur"
|
||||
IDS_CHALLENGE_PASSWORD "Challenge Password"
|
||||
IDS_UNSTRUCTURED_ADDRESS "Unstrukturierte Adresse"
|
||||
IDS_SMIME_CAPABILITIES "SMIME Möglichkeiten"
|
||||
IDS_PREFER_SIGNED_DATA "Signierte Daten bevorzugen"
|
||||
IDS_CPS "CPS"
|
||||
IDS_USER_NOTICE "Benutzerbenachrichtung"
|
||||
IDS_OCSP "Online Zertifikationsstatusprotokoll"
|
||||
IDS_CA_ISSUER "Ausgeber des Zertifikationsautorität"
|
||||
IDS_CERT_TEMPLATE_NAME "Zertifkationsvorlagenname"
|
||||
IDS_CERT_TYPE "Zertifikationstyp"
|
||||
IDS_CERT_MANIFOLD "Zertifikationsvervielfältigung"
|
||||
IDS_NETSCAPE_CERT_TYPE "Netscape Zertifikationstyp"
|
||||
IDS_NETSCAPE_BASE_URL "Netscape Basis-URL"
|
||||
IDS_NETSCAPE_REVOCATION_URL "Netscape Sperrungs-URL"
|
||||
IDS_NETSCAPE_CA_REVOCATION_URL "Netscape CA Sperrungs-URL"
|
||||
IDS_NETSCAPE_CERT_RENEWAL_URL "Netscape Zertifikationsernerung-URL"
|
||||
IDS_NETSCAPE_CA_POLICY_URL "Netscape CA Richtlinien-URL"
|
||||
IDS_NETSCAPE_SSL_SERVER_NAME "Netscape SSL Servername"
|
||||
IDS_NETSCAPE_COMMENT "Netscape Kommentar"
|
||||
IDS_SPC_SP_AGENCY_INFO "SpcSp Agentur-Information"
|
||||
IDS_SPC_FINANCIAL_CRITERIA "Spc Finanzielle Kriterien"
|
||||
IDS_SPC_MINIMAL_CRITERIA "Spc Minimale Kriterien"
|
||||
IDS_COUNTRY "Land/Region"
|
||||
IDS_ORGANIZATION "Organisation"
|
||||
IDS_ORGANIZATIONAL_UNIT "Organisationseinheit"
|
||||
IDS_COMMON_NAME "Allgemeiner Name"
|
||||
IDS_LOCALITY "Ort"
|
||||
IDS_STATE_OR_PROVINCE "Bundesland oder Provinz"
|
||||
IDS_TITLE "Titel"
|
||||
IDS_GIVEN_NAME "Vorname"
|
||||
IDS_INITIALS "Initialen"
|
||||
IDS_SUR_NAME "Nachname"
|
||||
IDS_DOMAIN_COMPONENT "Domänkomponente"
|
||||
IDS_STREET_ADDRESS "Straße"
|
||||
IDS_SERIAL_NUMBER "Seriennummer"
|
||||
IDS_CA_VERSION "CA Version"
|
||||
IDS_CROSS_CA_VERSION "Kreuz CA Version"
|
||||
IDS_SERIALIZED_SIG_SERIAL_NUMBER "Serialisierte Signaturseriennummer"
|
||||
IDS_PRINCIPAL_NAME "Prinzipalname"
|
||||
IDS_WINDOWS_PRODUCT_UPDATE "Windows Produkt Aktualisierung"
|
||||
IDS_ENROLLMENT_NAME_VALUE_PAIR "Wertepaar für Eintragungsname"
|
||||
IDS_OS_VERSION "Betriebssystemversion"
|
||||
IDS_ENROLLMENT_CSP "Eintragungs-CSP"
|
||||
IDS_CRL_NUMBER "CRL Nummer"
|
||||
IDS_DELTA_CRL_INDICATOR "Delta CRL Indikator"
|
||||
IDS_ISSUING_DIST_POINT "Ausgeber des Verteilungspunktes"
|
||||
IDS_FRESHEST_CRL "Aktuelle CRL"
|
||||
IDS_NAME_CONSTRAINTS "Namenseinschränkungen"
|
||||
IDS_POLICY_MAPPINGS "Richtlinienzuordnungen"
|
||||
IDS_POLICY_CONSTRAINTS "Richtlinieneinschränkungen"
|
||||
IDS_CROSS_CERT_DIST_POINTS "Verteilungspunkte für Kreuzzertifikate"
|
||||
IDS_APPLICATION_POLICIES "Anwendungsrichtlinien"
|
||||
IDS_APPLICATION_POLICY_MAPPINGS "Anwendungsrichtlinienzuordnungen"
|
||||
IDS_APPLICATION_POLICY_CONSTRAINTS "Anweungsungsrichtlinieneinschränkungen"
|
||||
IDS_CMC_DATA "CMC Daten"
|
||||
IDS_CMC_RESPONSE "CMC Antwort"
|
||||
IDS_UNSIGNED_CMC_REQUEST "Unsignierte CMC Antwort"
|
||||
IDS_CMC_STATUS_INFO "CMC Statusinformation"
|
||||
IDS_CMC_EXTENSIONS "CMC Erweiterungen"
|
||||
IDS_CMC_ATTRIBUTES "CMC Attribute"
|
||||
IDS_PKCS_7_DATA "PKCS 7 Daten"
|
||||
IDS_PKCS_7_SIGNED "PKCS 7 signiert"
|
||||
IDS_PKCS_7_ENVELOPED "PKCS 7 umhüllt"
|
||||
IDS_PKCS_7_SIGNED_ENVELOPED "PKCS 7 signiert und umhüllt"
|
||||
IDS_PKCS_7_DIGESTED "PKCS 7 Digested"
|
||||
IDS_PKCS_7_ENCRYPTED "PKCS 7 verschlüsselt"
|
||||
IDS_PREVIOUS_CA_CERT_HASH "Vorheriger CA Zertifikatshash"
|
||||
IDS_CRL_VIRTUAL_BASE "Virtuelle Basis-CRL-Nummer"
|
||||
IDS_CRL_NEXT_PUBLISH "Nächste CRL Veröffentlichung"
|
||||
IDS_CA_EXCHANGE "CA Verschlüsselungszertifikat"
|
||||
IDS_KEY_RECOVERY_AGENT "Agent zur Schlüsselwiederherstellung"
|
||||
IDS_CERTIFICATE_TEMPLATE "Zertifikatsvorlageninformation"
|
||||
IDS_ENTERPRISE_ROOT_OID "Unternehmensstamm-OID"
|
||||
IDS_RDN_DUMMY_SIGNER "Attrapenunterzeichner"
|
||||
IDS_ARCHIVED_KEY_ATTR "Verschlüsselter, privater Schlüssel"
|
||||
IDS_CRL_SELF_CDP "Veröffentlichte CRL Standorte"
|
||||
IDS_REQUIRE_CERT_CHAIN_POLICY "Erzwinge Zertifikatskettenrichtlinie"
|
||||
IDS_TRANSACTION_ID "Transaktions-ID"
|
||||
IDS_SENDER_NONCE "Sender einstweilen"
|
||||
IDS_RECIPIENT_NONCE "Empfänger einstweilen"
|
||||
IDS_REG_INFO "Registrierungsinformationen"
|
||||
IDS_GET_CERTIFICATE "Bekomme Zertifikat"
|
||||
IDS_GET_CRL "Bekomme CRL"
|
||||
IDS_REVOKE_REQUEST "Anfrageablehnen"
|
||||
IDS_QUERY_PENDING "Wartende Abfrage"
|
||||
IDS_SORTED_CTL "Zertifikatsvertrauensliste"
|
||||
IDS_ARCHIVED_KEY_CERT_HASH "Archivierter Schlüsselzertifikatshash"
|
||||
IDS_PRIVATE_KEY_USAGE_PERIOD "Private Schlüsselbenutzungsdauer"
|
||||
IDS_CLIENT_INFORMATION "Client Information"
|
||||
IDS_SERVER_AUTHENTICATION "Server Authentifizierung"
|
||||
IDS_CLIENT_AUTHENTICATION "Client Authentifizierung"
|
||||
IDS_CODE_SIGNING "Codesignatur"
|
||||
IDS_SECURE_EMAIL "Sichere E-Mail"
|
||||
IDS_TIME_STAMPING "Zeitstempel"
|
||||
IDS_MICROSOFT_TRUST_LIST_SIGNING "Microsoft Vertrauenslistensignatur"
|
||||
IDS_MICROSOFT_TIME_STAMPING "Microsoft Zeitstempel"
|
||||
IDS_IPSEC_END_SYSTEM "IP Sicherheitsendsystem"
|
||||
IDS_IPSEC_TUNNEL "IP Sicherheitstunnelabschluss"
|
||||
IDS_IPSEC_USER "IP Sicherheitsbenutzer"
|
||||
IDS_EFS "Verschlüsseltes Dateisystem"
|
||||
IDS_WHQL_CRYPTO "Windows Hardware Treiber Verifizierung"
|
||||
IDS_NT5_CRYPTO "Windows System Komponenten Verifizierung"
|
||||
IDS_OEM_WHQL_CRYPTO "OEM Windows System Komponenten Verifizierung"
|
||||
IDS_EMBEDDED_NT_CRYPTO "Embedded Windows System Komponenten Verifizierung"
|
||||
IDS_KEY_PACK_LICENSES "Schlüsselpaketlizenzen"
|
||||
IDS_LICENSE_SERVER "Lizenzserver Verifizierung"
|
||||
IDS_SMART_CARD_LOGON "Smartcard Login"
|
||||
IDS_DIGITAL_RIGHTS "Digitale Rechte"
|
||||
IDS_QUALIFIED_SUBORDINATION "Qualifizierte Unterordnung"
|
||||
IDS_KEY_RECOVERY "Schlüsselwiederherstellung"
|
||||
IDS_DOCUMENT_SIGNING "Dokumentensignatur"
|
||||
IDS_IPSEC_IKE_INTERMEDIATE "dazwischenliegende IP Sicherheits-IKE"
|
||||
IDS_FILE_RECOVERY "Dateiwiederherstellung"
|
||||
IDS_ROOT_LIST_SIGNER "Stammlistengeber"
|
||||
IDS_ANY_APPLICATION_POLICIES "Alle Anwendungsrichtlinien"
|
||||
IDS_DS_EMAIL_REPLICATION "Verzeichnisdienst für E-Mail Replikation"
|
||||
IDS_ENROLLMENT_AGENT "Agent für Zertifikationsanforderung"
|
||||
IDS_LIFETIME_SIGNING "Lebensdauersignatur"
|
||||
IDS_ANY_CERT_POLICY "Alle ausgegebenen Richtlinien"
|
||||
}
|
166
reactos/dll/win32/crypt32/crypt32_En.rc
Normal file
166
reactos/dll/win32/crypt32/crypt32_En.rc
Normal file
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
* crypt32 dll resources
|
||||
*
|
||||
* Copyright (C) 2006 Juan Lang
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
IDS_AUTHORITY_KEY_ID "Authority Key Identifier"
|
||||
IDS_KEY_ATTRIBUTES "Key Attributes"
|
||||
IDS_KEY_USAGE_RESTRICTION "Key Usage Restriction"
|
||||
IDS_SUBJECT_ALT_NAME "Subject Alternative Name"
|
||||
IDS_ISSUER_ALT_NAME "Issuer Alternative Name"
|
||||
IDS_BASIC_CONSTRAINTS "Basic Constraints"
|
||||
IDS_KEY_USAGE "Key Usage"
|
||||
IDS_CERT_POLICIES "Certificate Policies"
|
||||
IDS_SUBJECT_KEY_IDENTIFIER "Subject Key Identifier"
|
||||
IDS_CRL_REASON_CODE "CRL Reason Code"
|
||||
IDS_CRL_DIST_POINTS "CRL Distribution Points"
|
||||
IDS_ENHANCED_KEY_USAGE "Enhanced Key Usage"
|
||||
IDS_AUTHORITY_INFO_ACCESS "Authority Information Access"
|
||||
IDS_CERT_EXTENSIONS "Certificate Extensions"
|
||||
IDS_NEXT_UPDATE_LOCATION "Next Update Location"
|
||||
IDS_YES_OR_NO_TRUST "Yes or No Trust"
|
||||
IDS_EMAIL_ADDRESS "Email Address"
|
||||
IDS_UNSTRUCTURED_NAME "Unstructured Name"
|
||||
IDS_CONTENT_TYPE "Content Type"
|
||||
IDS_MESSAGE_DIGEST "Message Digest"
|
||||
IDS_SIGNING_TIME "Signing Time"
|
||||
IDS_COUNTER_SIGN "Counter Sign"
|
||||
IDS_CHALLENGE_PASSWORD "Challenge Password"
|
||||
IDS_UNSTRUCTURED_ADDRESS "Unstructured Address"
|
||||
IDS_SMIME_CAPABILITIES "SMIME Capabilities"
|
||||
IDS_PREFER_SIGNED_DATA "Prefer Signed Data"
|
||||
IDS_CPS "CPS"
|
||||
IDS_USER_NOTICE "User Notice"
|
||||
IDS_OCSP "On-line Certificate Status Protocol"
|
||||
IDS_CA_ISSUER "Certification Authority Issuer"
|
||||
IDS_CERT_TEMPLATE_NAME "Certification Template Name"
|
||||
IDS_CERT_TYPE "Certificate Type"
|
||||
IDS_CERT_MANIFOLD "Certificate Manifold"
|
||||
IDS_NETSCAPE_CERT_TYPE "Netscape Cert Type"
|
||||
IDS_NETSCAPE_BASE_URL "Netscape Base URL"
|
||||
IDS_NETSCAPE_REVOCATION_URL "Netscape Revocation URL"
|
||||
IDS_NETSCAPE_CA_REVOCATION_URL "Netscape CA Revocation URL"
|
||||
IDS_NETSCAPE_CERT_RENEWAL_URL "Netscape Cert Renewal URL"
|
||||
IDS_NETSCAPE_CA_POLICY_URL "Netscape CA Policy URL"
|
||||
IDS_NETSCAPE_SSL_SERVER_NAME "Netscape SSL ServerName"
|
||||
IDS_NETSCAPE_COMMENT "Netscape Comment"
|
||||
IDS_SPC_SP_AGENCY_INFO "SpcSpAgencyInfo"
|
||||
IDS_SPC_FINANCIAL_CRITERIA "SpcFinancialCriteria"
|
||||
IDS_SPC_MINIMAL_CRITERIA "SpcMinimalCriteria"
|
||||
IDS_COUNTRY "Country/Region"
|
||||
IDS_ORGANIZATION "Organization"
|
||||
IDS_ORGANIZATIONAL_UNIT "Organizational Unit"
|
||||
IDS_COMMON_NAME "Common Name"
|
||||
IDS_LOCALITY "Locality"
|
||||
IDS_STATE_OR_PROVINCE "State or Province"
|
||||
IDS_TITLE "Title"
|
||||
IDS_GIVEN_NAME "Given Name"
|
||||
IDS_INITIALS "Initials"
|
||||
IDS_SUR_NAME "Sur Name"
|
||||
IDS_DOMAIN_COMPONENT "Domain Component"
|
||||
IDS_STREET_ADDRESS "Street Address"
|
||||
IDS_SERIAL_NUMBER "Serial Number"
|
||||
IDS_CA_VERSION "CA Version"
|
||||
IDS_CROSS_CA_VERSION "Cross CA Version"
|
||||
IDS_SERIALIZED_SIG_SERIAL_NUMBER "Serialized Signature Serial Number"
|
||||
IDS_PRINCIPAL_NAME "Principal Name"
|
||||
IDS_WINDOWS_PRODUCT_UPDATE "Windows Product Update"
|
||||
IDS_ENROLLMENT_NAME_VALUE_PAIR "Enrollment Name Value Pair"
|
||||
IDS_OS_VERSION "OS Version"
|
||||
IDS_ENROLLMENT_CSP "Enrollment CSP"
|
||||
IDS_CRL_NUMBER "CRL Number"
|
||||
IDS_DELTA_CRL_INDICATOR "Delta CRL Indicator"
|
||||
IDS_ISSUING_DIST_POINT "Issuing Distribution Point"
|
||||
IDS_FRESHEST_CRL "Freshest CRL"
|
||||
IDS_NAME_CONSTRAINTS "Name Constraints"
|
||||
IDS_POLICY_MAPPINGS "Policy Mappings"
|
||||
IDS_POLICY_CONSTRAINTS "Policy Constraints"
|
||||
IDS_CROSS_CERT_DIST_POINTS "Cross-Certificate Distribution Points"
|
||||
IDS_APPLICATION_POLICIES "Application Policies"
|
||||
IDS_APPLICATION_POLICY_MAPPINGS "Application Policy Mappings"
|
||||
IDS_APPLICATION_POLICY_CONSTRAINTS "Application Policy Constraints"
|
||||
IDS_CMC_DATA "CMC Data"
|
||||
IDS_CMC_RESPONSE "CMC Response"
|
||||
IDS_UNSIGNED_CMC_REQUEST "Unsigned CMC Request"
|
||||
IDS_CMC_STATUS_INFO "CMC Status Info"
|
||||
IDS_CMC_EXTENSIONS "CMC Extensions"
|
||||
IDS_CMC_ATTRIBUTES "CMC Attributes"
|
||||
IDS_PKCS_7_DATA "PKCS 7 Data"
|
||||
IDS_PKCS_7_SIGNED "PKCS 7 Signed"
|
||||
IDS_PKCS_7_ENVELOPED "PKCS 7 Enveloped"
|
||||
IDS_PKCS_7_SIGNED_ENVELOPED "PKCS 7 Signed Enveloped"
|
||||
IDS_PKCS_7_DIGESTED "PKCS 7 Digested"
|
||||
IDS_PKCS_7_ENCRYPTED "PKCS 7 Encrypted"
|
||||
IDS_PREVIOUS_CA_CERT_HASH "Previous CA Certificate Hash"
|
||||
IDS_CRL_VIRTUAL_BASE "Virtual Base CRL Number"
|
||||
IDS_CRL_NEXT_PUBLISH "Next CRL Publish"
|
||||
IDS_CA_EXCHANGE "CA Encryption Certificate"
|
||||
IDS_KEY_RECOVERY_AGENT "Key Recovery Agent"
|
||||
IDS_CERTIFICATE_TEMPLATE "Certificate Template Information"
|
||||
IDS_ENTERPRISE_ROOT_OID "Enterprise Root OID"
|
||||
IDS_RDN_DUMMY_SIGNER "Dummy Signer"
|
||||
IDS_ARCHIVED_KEY_ATTR "Encrypted Private Key"
|
||||
IDS_CRL_SELF_CDP "Published CRL Locations"
|
||||
IDS_REQUIRE_CERT_CHAIN_POLICY "Enforce Certificate Chain Policy"
|
||||
IDS_TRANSACTION_ID "Transaction Id"
|
||||
IDS_SENDER_NONCE "Sender Nonce"
|
||||
IDS_RECIPIENT_NONCE "Recipient Nonce"
|
||||
IDS_REG_INFO "Reg Info"
|
||||
IDS_GET_CERTIFICATE "Get Certificate"
|
||||
IDS_GET_CRL "Get CRL"
|
||||
IDS_REVOKE_REQUEST "Revoke Request"
|
||||
IDS_QUERY_PENDING "Query Pending"
|
||||
IDS_SORTED_CTL "Certificate Trust List"
|
||||
IDS_ARCHIVED_KEY_CERT_HASH "Archived Key Certificate Hash"
|
||||
IDS_PRIVATE_KEY_USAGE_PERIOD "Private Key Usage Period"
|
||||
IDS_CLIENT_INFORMATION "Client Information"
|
||||
IDS_SERVER_AUTHENTICATION "Server Authentication"
|
||||
IDS_CLIENT_AUTHENTICATION "Client Authentication"
|
||||
IDS_CODE_SIGNING "Code Signing"
|
||||
IDS_SECURE_EMAIL "Secure Email"
|
||||
IDS_TIME_STAMPING "Time Stamping"
|
||||
IDS_MICROSOFT_TRUST_LIST_SIGNING "Microsoft Trust List Signing"
|
||||
IDS_MICROSOFT_TIME_STAMPING "Microsoft Time Stamping"
|
||||
IDS_IPSEC_END_SYSTEM "IP security end system"
|
||||
IDS_IPSEC_TUNNEL "IP security tunnel termination"
|
||||
IDS_IPSEC_USER "IP security user"
|
||||
IDS_EFS "Encrypting File System"
|
||||
IDS_WHQL_CRYPTO "Windows Hardware Driver Verification"
|
||||
IDS_NT5_CRYPTO "Windows System Component Verification"
|
||||
IDS_OEM_WHQL_CRYPTO "OEM Windows System Component Verification"
|
||||
IDS_EMBEDDED_NT_CRYPTO "Embedded Windows System Component Verification"
|
||||
IDS_KEY_PACK_LICENSES "Key Pack Licenses"
|
||||
IDS_LICENSE_SERVER "License Server Verification"
|
||||
IDS_SMART_CARD_LOGON "Smart Card Logon"
|
||||
IDS_DIGITAL_RIGHTS "Digital Rights"
|
||||
IDS_QUALIFIED_SUBORDINATION "Qualified Subordination"
|
||||
IDS_KEY_RECOVERY "Key Recovery"
|
||||
IDS_DOCUMENT_SIGNING "Document Signing"
|
||||
IDS_IPSEC_IKE_INTERMEDIATE "IP security IKE intermediate"
|
||||
IDS_FILE_RECOVERY "File Recovery"
|
||||
IDS_ROOT_LIST_SIGNER "Root List Signer"
|
||||
IDS_ANY_APPLICATION_POLICIES "All application policies"
|
||||
IDS_DS_EMAIL_REPLICATION "Directory Service Email Replication"
|
||||
IDS_ENROLLMENT_AGENT "Certificate Request Agent"
|
||||
IDS_LIFETIME_SIGNING "Lifetime Signing"
|
||||
IDS_ANY_CERT_POLICY "All issuance policies"
|
||||
}
|
167
reactos/dll/win32/crypt32/crypt32_Ko.rc
Normal file
167
reactos/dll/win32/crypt32/crypt32_Ko.rc
Normal file
|
@ -0,0 +1,167 @@
|
|||
/*
|
||||
* crypt32 dll resources
|
||||
*
|
||||
* Copyright (C) 2006 Juan Lang
|
||||
* Copyright (C) 2006 YunSong Hwang
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
IDS_AUTHORITY_KEY_ID "접근 키 식별자"
|
||||
IDS_KEY_ATTRIBUTES "키 속성"
|
||||
IDS_KEY_USAGE_RESTRICTION "키 사용 제한"
|
||||
IDS_SUBJECT_ALT_NAME "주제(subject) 대체 이름"
|
||||
IDS_ISSUER_ALT_NAME "발행자 대체 이름"
|
||||
IDS_BASIC_CONSTRAINTS "기본 제약"
|
||||
IDS_KEY_USAGE "키 사용법"
|
||||
IDS_CERT_POLICIES "인증 방침"
|
||||
IDS_SUBJECT_KEY_IDENTIFIER "주제(Subject)키 식별자"
|
||||
IDS_CRL_REASON_CODE "CRL 분별 코드"
|
||||
IDS_CRL_DIST_POINTS "CRL 배포 지점"
|
||||
IDS_ENHANCED_KEY_USAGE "확장된 키 사용법"
|
||||
IDS_AUTHORITY_INFO_ACCESS "권한 정보 접근"
|
||||
IDS_CERT_EXTENSIONS "인증서 확장(Certificate Extensions)"
|
||||
IDS_NEXT_UPDATE_LOCATION "다음 업데이트 위치"
|
||||
IDS_YES_OR_NO_TRUST "신뢰(예 나 아니오)"
|
||||
IDS_EMAIL_ADDRESS "이메일 주소"
|
||||
IDS_UNSTRUCTURED_NAME "비구조화 이름"
|
||||
IDS_CONTENT_TYPE "내용 형식"
|
||||
IDS_MESSAGE_DIGEST "내용 요약"
|
||||
IDS_SIGNING_TIME "서명 시간"
|
||||
IDS_COUNTER_SIGN "역 서명(Counter Sign)"
|
||||
IDS_CHALLENGE_PASSWORD "암호 바꾸기"
|
||||
IDS_UNSTRUCTURED_ADDRESS "비구조화 주소"
|
||||
IDS_SMIME_CAPABILITIES "SMIME 특성"
|
||||
IDS_PREFER_SIGNED_DATA "선호하는 사인된 데이타(Prefer Signed Data)"
|
||||
IDS_CPS "CPS"
|
||||
IDS_USER_NOTICE "사용자 통지"
|
||||
IDS_OCSP "온라인 인증 상태 프로토콜"
|
||||
IDS_CA_ISSUER "인증서 접근 발행자"
|
||||
IDS_CERT_TEMPLATE_NAME "인증 형판 이름"
|
||||
IDS_CERT_TYPE "인증서 형태"
|
||||
IDS_CERT_MANIFOLD "인증서 사본"
|
||||
IDS_NETSCAPE_CERT_TYPE "넷스케이프 인증 형태"
|
||||
IDS_NETSCAPE_BASE_URL "넷스케이프 기본 웹주소"
|
||||
IDS_NETSCAPE_REVOCATION_URL "넷스케이프 취소 웹주소"
|
||||
IDS_NETSCAPE_CA_REVOCATION_URL "넷스케이프 CA 취소 웹주소"
|
||||
IDS_NETSCAPE_CERT_RENEWAL_URL "넷스케이프 인증서 재개 웹주소"
|
||||
IDS_NETSCAPE_CA_POLICY_URL "넷스케이프 CA 방침 URL"
|
||||
IDS_NETSCAPE_SSL_SERVER_NAME "넷스케이프 SSL 서버이름"
|
||||
IDS_NETSCAPE_COMMENT "넷스케이프 설명"
|
||||
IDS_SPC_SP_AGENCY_INFO "SpcSp관리자 정보"
|
||||
IDS_SPC_FINANCIAL_CRITERIA "Spc재정상 원칙"
|
||||
IDS_SPC_MINIMAL_CRITERIA "Spc최소 원칙"
|
||||
IDS_COUNTRY "나라/지역"
|
||||
IDS_ORGANIZATION "단체"
|
||||
IDS_ORGANIZATIONAL_UNIT "단체(Organizational Unit)"
|
||||
IDS_COMMON_NAME "애칭"
|
||||
IDS_LOCALITY "소재지"
|
||||
IDS_STATE_OR_PROVINCE "주나 지방"
|
||||
IDS_TITLE "제목"
|
||||
IDS_GIVEN_NAME "주어진 이름"
|
||||
IDS_INITIALS "머릿글자"
|
||||
IDS_SUR_NAME "성"
|
||||
IDS_DOMAIN_COMPONENT "주소 구성요소"
|
||||
IDS_STREET_ADDRESS "거리 주소"
|
||||
IDS_SERIAL_NUMBER "시리얼 번호"
|
||||
IDS_CA_VERSION "CA 버젼"
|
||||
IDS_CROSS_CA_VERSION "교차 CA 버젼"
|
||||
IDS_SERIALIZED_SIG_SERIAL_NUMBER "연속된(Serialized) 서명 시리얼 넘버"
|
||||
IDS_PRINCIPAL_NAME "주요한 이름"
|
||||
IDS_WINDOWS_PRODUCT_UPDATE "윈도우즈 제품 업데이트"
|
||||
IDS_ENROLLMENT_NAME_VALUE_PAIR "등록 이름 값의 쌍"
|
||||
IDS_OS_VERSION "OS 버젼"
|
||||
IDS_ENROLLMENT_CSP "CSP 등록"
|
||||
IDS_CRL_NUMBER "CRL 번호"
|
||||
IDS_DELTA_CRL_INDICATOR "델타 CRL 표시기"
|
||||
IDS_ISSUING_DIST_POINT "발행자 배포 위치"
|
||||
IDS_FRESHEST_CRL "최신 CRL"
|
||||
IDS_NAME_CONSTRAINTS "이름 제약"
|
||||
IDS_POLICY_MAPPINGS "정책 대응"
|
||||
IDS_POLICY_CONSTRAINTS "정책 제약"
|
||||
IDS_CROSS_CERT_DIST_POINTS "상호 인증 분배 위치"
|
||||
IDS_APPLICATION_POLICIES "풀그림 방침"
|
||||
IDS_APPLICATION_POLICY_MAPPINGS "풀그림 정책 대응(Mappings)"
|
||||
IDS_APPLICATION_POLICY_CONSTRAINTS "풀그림 정책 제약"
|
||||
IDS_CMC_DATA "CMC 데이타"
|
||||
IDS_CMC_RESPONSE "CMC 응답"
|
||||
IDS_UNSIGNED_CMC_REQUEST "서명되지 않은CMC 요청"
|
||||
IDS_CMC_STATUS_INFO "CMC 상태 정보"
|
||||
IDS_CMC_EXTENSIONS "CMC 확장"
|
||||
IDS_CMC_ATTRIBUTES "CMC 속성"
|
||||
IDS_PKCS_7_DATA "PKCS 7 데이타"
|
||||
IDS_PKCS_7_SIGNED "PKCS 7 서명"
|
||||
IDS_PKCS_7_ENVELOPED "PKCS 7 싸개"
|
||||
IDS_PKCS_7_SIGNED_ENVELOPED "PKCS 7 서명된 싸개"
|
||||
IDS_PKCS_7_DIGESTED "PKCS 7 요약"
|
||||
IDS_PKCS_7_ENCRYPTED "PKCS 7 암호화"
|
||||
IDS_PREVIOUS_CA_CERT_HASH "이전의 CA 인증 해쉬"
|
||||
IDS_CRL_VIRTUAL_BASE "가상 기반 CRL 숫자(Virtual Base CRL Number)"
|
||||
IDS_CRL_NEXT_PUBLISH "다음 CRL 발행"
|
||||
IDS_CA_EXCHANGE "CA 암호 인증"
|
||||
IDS_KEY_RECOVERY_AGENT "키 복구 관리자"
|
||||
IDS_CERTIFICATE_TEMPLATE "인증 주형(Template) 정보"
|
||||
IDS_ENTERPRISE_ROOT_OID "기업 루트 OID"
|
||||
IDS_RDN_DUMMY_SIGNER "가짜 사인자(Dummy Signer)"
|
||||
IDS_ARCHIVED_KEY_ATTR "암호화된 개인 키"
|
||||
IDS_CRL_SELF_CDP "발행된 CRL 위치"
|
||||
IDS_REQUIRE_CERT_CHAIN_POLICY "강제 인증 체인 정책(Enforce Certificate Chain Policy)"
|
||||
IDS_TRANSACTION_ID "처리 Id"
|
||||
IDS_SENDER_NONCE "임시 발송인"
|
||||
IDS_RECIPIENT_NONCE "임시 수령인"
|
||||
IDS_REG_INFO "등록 정보"
|
||||
IDS_GET_CERTIFICATE "인증서 얻기"
|
||||
IDS_GET_CRL "CRL 얻기"
|
||||
IDS_REVOKE_REQUEST "취소 요청"
|
||||
IDS_QUERY_PENDING "질문하는 중"
|
||||
IDS_SORTED_CTL "인증된 신뢰 목록"
|
||||
IDS_ARCHIVED_KEY_CERT_HASH "압축된 키 인증 해쉬"
|
||||
IDS_PRIVATE_KEY_USAGE_PERIOD "개인 키 사용 기간"
|
||||
IDS_CLIENT_INFORMATION "클라이언트 정보"
|
||||
IDS_SERVER_AUTHENTICATION "서버 인증"
|
||||
IDS_CLIENT_AUTHENTICATION "클라이언트 인증"
|
||||
IDS_CODE_SIGNING "코드 서명"
|
||||
IDS_SECURE_EMAIL "보안 이메일"
|
||||
IDS_TIME_STAMPING "시간 날인"
|
||||
IDS_MICROSOFT_TRUST_LIST_SIGNING "마이크로소프트 신뢰 목록 사인"
|
||||
IDS_MICROSOFT_TIME_STAMPING "마이크로소프트 시간 날인"
|
||||
IDS_IPSEC_END_SYSTEM "IP 보안 종단 시스템"
|
||||
IDS_IPSEC_TUNNEL "IP 보안 터널 종료(tunnel termination)"
|
||||
IDS_IPSEC_USER "IP 보안 사용자"
|
||||
IDS_EFS "암호화된 파일 시스템"
|
||||
IDS_WHQL_CRYPTO "윈도우즈 하드웨어 드라이버 검증"
|
||||
IDS_NT5_CRYPTO "윈도우즈 시스템 구성요소 검증"
|
||||
IDS_OEM_WHQL_CRYPTO "OEM 윈도우즈 시스템 구성요소 검증"
|
||||
IDS_EMBEDDED_NT_CRYPTO "내장된 윈도우즈 시스탬 구성요소 검중"
|
||||
IDS_KEY_PACK_LICENSES "키 팩 라이센스"
|
||||
IDS_LICENSE_SERVER "라이센스 서버 검증"
|
||||
IDS_SMART_CARD_LOGON "스마트 카드 로그인"
|
||||
IDS_DIGITAL_RIGHTS "디지털 저작권"
|
||||
IDS_QUALIFIED_SUBORDINATION "자격있는 종속관계"
|
||||
IDS_KEY_RECOVERY "키 복구"
|
||||
IDS_DOCUMENT_SIGNING "문서 서명"
|
||||
IDS_IPSEC_IKE_INTERMEDIATE "IP 보안 IKE 수단(intermediate)"
|
||||
IDS_FILE_RECOVERY "파일 복구"
|
||||
IDS_ROOT_LIST_SIGNER "루트 목록 서명자"
|
||||
IDS_ANY_APPLICATION_POLICIES "모든 풀그림의 방침"
|
||||
IDS_DS_EMAIL_REPLICATION "디렉토리 서비스 이메일 응답"
|
||||
IDS_ENROLLMENT_AGENT "인증 요구 관리자"
|
||||
IDS_LIFETIME_SIGNING "평생 서명"
|
||||
IDS_ANY_CERT_POLICY "모든 배포 방침"
|
||||
}
|
166
reactos/dll/win32/crypt32/crypt32_No.rc
Normal file
166
reactos/dll/win32/crypt32/crypt32_No.rc
Normal file
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
* crypt32 dll resources
|
||||
*
|
||||
* Copyright (C) 2006 Alexander N. Sørnes <alex@thehandofagony.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
IDS_AUTHORITY_KEY_ID "Identifiserer for autentiseringsnøkkel"
|
||||
IDS_KEY_ATTRIBUTES "Nøkkelegenskaper"
|
||||
IDS_KEY_USAGE_RESTRICTION "Begrensning av nøkkelbruk"
|
||||
IDS_SUBJECT_ALT_NAME "Alternativt navn for emne"
|
||||
IDS_ISSUER_ALT_NAME "Alternativt navn for utsteder"
|
||||
IDS_BASIC_CONSTRAINTS "Basisbegrensninger"
|
||||
IDS_KEY_USAGE "Nøkkelbruk"
|
||||
IDS_CERT_POLICIES "Sertifikatholdninger"
|
||||
IDS_SUBJECT_KEY_IDENTIFIER "Identifiserer for emnenøkkel"
|
||||
IDS_CRL_REASON_CODE "CRL-grunnkode"
|
||||
IDS_CRL_DIST_POINTS "CRL-distribusjonspunkter"
|
||||
IDS_ENHANCED_KEY_USAGE "Forbedret nøkkelbruk"
|
||||
IDS_AUTHORITY_INFO_ACCESS "Myndighet-informasjonstilgang"
|
||||
IDS_CERT_EXTENSIONS "Sertifikatutvidelser"
|
||||
IDS_NEXT_UPDATE_LOCATION "Neste oppdateringsplassering"
|
||||
IDS_YES_OR_NO_TRUST "Ja eller nei tillit"
|
||||
IDS_EMAIL_ADDRESS "E-postadresse"
|
||||
IDS_UNSTRUCTURED_NAME "Ustrukturert navn"
|
||||
IDS_CONTENT_TYPE "Innholdstype"
|
||||
IDS_MESSAGE_DIGEST "Meldingssammendrag"
|
||||
IDS_SIGNING_TIME "Signeringstidspunkt"
|
||||
IDS_COUNTER_SIGN "Tellersymbol"
|
||||
IDS_CHALLENGE_PASSWORD "Utfordre passord"
|
||||
IDS_UNSTRUCTURED_ADDRESS "Ustrukturert adresse"
|
||||
IDS_SMIME_CAPABILITIES "SMIME-evner"
|
||||
IDS_PREFER_SIGNED_DATA "Fortrekk signert data"
|
||||
IDS_CPS "CPS"
|
||||
IDS_USER_NOTICE "Brukervarsel"
|
||||
IDS_OCSP "On-line Certificate Status Protocol"
|
||||
IDS_CA_ISSUER "Utsteder for sertifiseringsautoritet"
|
||||
IDS_CERT_TEMPLATE_NAME "Navn på sertifiseringsmal"
|
||||
IDS_CERT_TYPE "Sertifikattype"
|
||||
IDS_CERT_MANIFOLD "Sertifikatmangfold"
|
||||
IDS_NETSCAPE_CERT_TYPE "Netscape-sertifikattype"
|
||||
IDS_NETSCAPE_BASE_URL "Netscape-basis-URL"
|
||||
IDS_NETSCAPE_REVOCATION_URL "Netscape-tilbakekalling-URL"
|
||||
IDS_NETSCAPE_CA_REVOCATION_URL "Netscape-CA-tilbakekalling-URLURL"
|
||||
IDS_NETSCAPE_CERT_RENEWAL_URL "Netscape-sertifikatfornying-URL"
|
||||
IDS_NETSCAPE_CA_POLICY_URL "Netscape-CA-politikk-URL"
|
||||
IDS_NETSCAPE_SSL_SERVER_NAME "Netscape-SSL-tjenernavn"
|
||||
IDS_NETSCAPE_COMMENT "Netscape-kommentar"
|
||||
IDS_SPC_SP_AGENCY_INFO "SpcSpAgencyInfo"
|
||||
IDS_SPC_FINANCIAL_CRITERIA "SpcFinancialCriteria"
|
||||
IDS_SPC_MINIMAL_CRITERIA "SpcMinimalCriteria"
|
||||
IDS_COUNTRY "Land/Region"
|
||||
IDS_ORGANIZATION "Organisasjon"
|
||||
IDS_ORGANIZATIONAL_UNIT "Organisasjonsell enhet"
|
||||
IDS_COMMON_NAME "Vanlig navn"
|
||||
IDS_LOCALITY "Lokalitet"
|
||||
IDS_STATE_OR_PROVINCE "Fylke"
|
||||
IDS_TITLE "Tittel"
|
||||
IDS_GIVEN_NAME "Oppgitt navn"
|
||||
IDS_INITIALS "Initialer"
|
||||
IDS_SUR_NAME "Etternavn"
|
||||
IDS_DOMAIN_COMPONENT "Domenekomponent"
|
||||
IDS_STREET_ADDRESS "Gateadresse"
|
||||
IDS_SERIAL_NUMBER "Serienummer"
|
||||
IDS_CA_VERSION "CA-versjon"
|
||||
IDS_CROSS_CA_VERSION "Kryss CA-versjon"
|
||||
IDS_SERIALIZED_SIG_SERIAL_NUMBER "Serienummer for serialisert signatur"
|
||||
IDS_PRINCIPAL_NAME "Hovednavn"
|
||||
IDS_WINDOWS_PRODUCT_UPDATE "Windows-produktoppdatering"
|
||||
IDS_ENROLLMENT_NAME_VALUE_PAIR "Innrullerings-navneverdipar"
|
||||
IDS_OS_VERSION "OS-versjon"
|
||||
IDS_ENROLLMENT_CSP "Innrullerings-CSP"
|
||||
IDS_CRL_NUMBER "CRL-nummer"
|
||||
IDS_DELTA_CRL_INDICATOR "Delta CRL-indikator"
|
||||
IDS_ISSUING_DIST_POINT "Utsteder distribusjonspunkt"
|
||||
IDS_FRESHEST_CRL "Nyeste CRL"
|
||||
IDS_NAME_CONSTRAINTS "Navnebegrensninger"
|
||||
IDS_POLICY_MAPPINGS "Framgangsmåtekartlegginger"
|
||||
IDS_POLICY_CONSTRAINTS "Framgangsmåtebegresninger"
|
||||
IDS_CROSS_CERT_DIST_POINTS "Distribusjonspunkter for kryss-sertifikat"
|
||||
IDS_APPLICATION_POLICIES "Framgangsmåter for programmers"
|
||||
IDS_APPLICATION_POLICY_MAPPINGS "Framgangsmåtekartlegginger for programmer"
|
||||
IDS_APPLICATION_POLICY_CONSTRAINTS "Framgangsmåtebegrensninger for programmer"
|
||||
IDS_CMC_DATA "CMC-data"
|
||||
IDS_CMC_RESPONSE "CMS-svar"
|
||||
IDS_UNSIGNED_CMC_REQUEST "Usignert CMC-forespørsel"
|
||||
IDS_CMC_STATUS_INFO "CMC-statusinformasjon"
|
||||
IDS_CMC_EXTENSIONS "CMC-utvidelser"
|
||||
IDS_CMC_ATTRIBUTES "CMC-egenskaper"
|
||||
IDS_PKCS_7_DATA "PKCS 7 Data"
|
||||
IDS_PKCS_7_SIGNED "PKCS 7 Signert"
|
||||
IDS_PKCS_7_ENVELOPED "PKCS 7 Innpakket"
|
||||
IDS_PKCS_7_SIGNED_ENVELOPED "PKCS 7 Signert Innpakket"
|
||||
IDS_PKCS_7_DIGESTED "PKCS 7 Fordøyet"
|
||||
IDS_PKCS_7_ENCRYPTED "PKCS 7 Kryptert"
|
||||
IDS_PREVIOUS_CA_CERT_HASH "Forrige CA-sertifikatlappskaus"
|
||||
IDS_CRL_VIRTUAL_BASE "Virtuelt basis-CRL-nummer"
|
||||
IDS_CRL_NEXT_PUBLISH "Neste CRL-utgiving"
|
||||
IDS_CA_EXCHANGE "CA-krypteringssertifikat"
|
||||
IDS_KEY_RECOVERY_AGENT "Agent for nøkkelgjenoppretting"
|
||||
IDS_CERTIFICATE_TEMPLATE "Informasjon om sertifikatmal"
|
||||
IDS_ENTERPRISE_ROOT_OID "Storselskap-rot-OID"
|
||||
IDS_RDN_DUMMY_SIGNER "Tullesignerer"
|
||||
IDS_ARCHIVED_KEY_ATTR "Kryptert privat nøkkel"
|
||||
IDS_CRL_SELF_CDP "Publisert CRL-plasseringer"
|
||||
IDS_REQUIRE_CERT_CHAIN_POLICY "Håndhev sertifikatlenkepolitikk"
|
||||
IDS_TRANSACTION_ID "Transaksjons-id"
|
||||
IDS_SENDER_NONCE "Gjeldende sender"
|
||||
IDS_RECIPIENT_NONCE "Gjeldende mottaker"
|
||||
IDS_REG_INFO "Reg info"
|
||||
IDS_GET_CERTIFICATE "Hent sertifikat"
|
||||
IDS_GET_CRL "Hent CRL"
|
||||
IDS_REVOKE_REQUEST "Gjenoppliv forespørsel"
|
||||
IDS_QUERY_PENDING "Spørring venter"
|
||||
IDS_SORTED_CTL "Tillitsliste for sertifikater"
|
||||
IDS_ARCHIVED_KEY_CERT_HASH "Arkivert nøkkelsertifikatlappskaus"
|
||||
IDS_PRIVATE_KEY_USAGE_PERIOD "Privat nøkkelbrukperiode"
|
||||
IDS_CLIENT_INFORMATION "Klientinformasjon"
|
||||
IDS_SERVER_AUTHENTICATION "Tjenerautentisering"
|
||||
IDS_CLIENT_AUTHENTICATION "Klientautentisering"
|
||||
IDS_CODE_SIGNING "Kodesignering"
|
||||
IDS_SECURE_EMAIL "Sikker e-post"
|
||||
IDS_TIME_STAMPING "Tidsstempling"
|
||||
IDS_MICROSOFT_TRUST_LIST_SIGNING "Microsoft tillitslistesignering"
|
||||
IDS_MICROSOFT_TIME_STAMPING "Microsoft tidsstempling"
|
||||
IDS_IPSEC_END_SYSTEM "IP-sikkerhetsendesystem"
|
||||
IDS_IPSEC_TUNNEL "IP-sikkerhetstunnel-terminering"
|
||||
IDS_IPSEC_USER "IP-sikkerhetsbruker"
|
||||
IDS_EFS "Krypterer filsystem"
|
||||
IDS_WHQL_CRYPTO "Windows maskinvaredriver-godkjenning"
|
||||
IDS_NT5_CRYPTO "Windows sytemkomponent-godkjenning"
|
||||
IDS_OEM_WHQL_CRYPTO "OEM Windows systemkomponent-godkjenning"
|
||||
IDS_EMBEDDED_NT_CRYPTO "Innebygget Windows systemkomponent-godkjenning"
|
||||
IDS_KEY_PACK_LICENSES "Nøkkelpakkelisenser"
|
||||
IDS_LICENSE_SERVER "Lisenstjener-verifisering"
|
||||
IDS_SMART_CARD_LOGON "Smart Card-pålogging"
|
||||
IDS_DIGITAL_RIGHTS "Digitale rettigheter"
|
||||
IDS_QUALIFIED_SUBORDINATION "Kvalifisert underordinering"
|
||||
IDS_KEY_RECOVERY "Nøkkelgjenoppretting"
|
||||
IDS_DOCUMENT_SIGNING "Dokumentsignering"
|
||||
IDS_IPSEC_IKE_INTERMEDIATE "IP-sikkerhet IKE viderekommen"
|
||||
IDS_FILE_RECOVERY "Filgjenoppretting"
|
||||
IDS_ROOT_LIST_SIGNER "Rotlistesignerer"
|
||||
IDS_ANY_APPLICATION_POLICIES "Alle framgangsmåter for programmer"
|
||||
IDS_DS_EMAIL_REPLICATION "Katalogtjeneste e-postreplikering"
|
||||
IDS_ENROLLMENT_AGENT "Agent for sertifikatforespørsler"
|
||||
IDS_LIFETIME_SIGNING "Livstidsignering"
|
||||
IDS_ANY_CERT_POLICY "Alle framgangsmåter for utsteding"
|
||||
}
|
|
@ -19,12 +19,53 @@
|
|||
#ifndef __CRYPT32_PRIVATE_H__
|
||||
#define __CRYPT32_PRIVATE_H__
|
||||
|
||||
/* The following aren't defined in wincrypt.h, as they're "reserved" */
|
||||
#define CERT_CERT_PROP_ID 32
|
||||
#define CERT_CRL_PROP_ID 33
|
||||
#define CERT_CTL_PROP_ID 34
|
||||
|
||||
/* Returns a handle to the default crypto provider; loads it if necessary.
|
||||
* Returns NULL on failure.
|
||||
*/
|
||||
HCRYPTPROV CRYPT_GetDefaultProvider(void);
|
||||
|
||||
void CRYPT_InitFunctionSets(void);
|
||||
void CRYPT_FreeFunctionSets(void);
|
||||
void crypt_oid_init(HINSTANCE hinst);
|
||||
void crypt_oid_free(void);
|
||||
|
||||
/* Helper function for store reading functions and
|
||||
* CertAddSerializedElementToStore. Returns a context of the appropriate type
|
||||
* if it can, or NULL otherwise. Doesn't validate any of the properties in
|
||||
* the serialized context (for example, bad hashes are retained.)
|
||||
* *pdwContentType is set to the type of the returned context.
|
||||
*/
|
||||
const void *CRYPT_ReadSerializedElement(const BYTE *pbElement,
|
||||
DWORD cbElement, DWORD dwContextTypeFlags, DWORD *pdwContentType);
|
||||
|
||||
/**
|
||||
* Context property list functions
|
||||
*/
|
||||
struct _CONTEXT_PROPERTY_LIST;
|
||||
typedef struct _CONTEXT_PROPERTY_LIST *PCONTEXT_PROPERTY_LIST;
|
||||
|
||||
PCONTEXT_PROPERTY_LIST ContextPropertyList_Create(void);
|
||||
|
||||
/* Searches for the property with ID id in the context. Returns TRUE if found,
|
||||
* and copies the property's length and a pointer to its data to blob.
|
||||
* Otherwise returns FALSE.
|
||||
*/
|
||||
BOOL ContextPropertyList_FindProperty(PCONTEXT_PROPERTY_LIST list, DWORD id,
|
||||
PCRYPT_DATA_BLOB blob);
|
||||
|
||||
BOOL ContextPropertyList_SetProperty(PCONTEXT_PROPERTY_LIST list, DWORD id,
|
||||
const BYTE *pbData, size_t cbData);
|
||||
|
||||
void ContextPropertyList_RemoveProperty(PCONTEXT_PROPERTY_LIST list, DWORD id);
|
||||
|
||||
DWORD ContextPropertyList_EnumPropIDs(PCONTEXT_PROPERTY_LIST list, DWORD id);
|
||||
|
||||
void ContextPropertyList_Copy(PCONTEXT_PROPERTY_LIST to,
|
||||
PCONTEXT_PROPERTY_LIST from);
|
||||
|
||||
void ContextPropertyList_Free(PCONTEXT_PROPERTY_LIST list);
|
||||
|
||||
#endif
|
||||
|
|
163
reactos/dll/win32/crypt32/cryptres.h
Normal file
163
reactos/dll/win32/crypt32/cryptres.h
Normal file
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* Copyright 2006 Juan Lang
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef __WINE_CRYPTRES_H__
|
||||
#define __WINE_CRYPTRES_H__
|
||||
|
||||
#define IDS_AUTHORITY_KEY_ID 1000
|
||||
#define IDS_KEY_ATTRIBUTES 1001
|
||||
#define IDS_KEY_USAGE_RESTRICTION 1002
|
||||
#define IDS_SUBJECT_ALT_NAME 1003
|
||||
#define IDS_ISSUER_ALT_NAME 1004
|
||||
#define IDS_BASIC_CONSTRAINTS 1005
|
||||
#define IDS_KEY_USAGE 1006
|
||||
#define IDS_CERT_POLICIES 1007
|
||||
#define IDS_SUBJECT_KEY_IDENTIFIER 1008
|
||||
#define IDS_CRL_REASON_CODE 1009
|
||||
#define IDS_CRL_DIST_POINTS 1010
|
||||
#define IDS_ENHANCED_KEY_USAGE 1011
|
||||
#define IDS_AUTHORITY_INFO_ACCESS 1012
|
||||
#define IDS_CERT_EXTENSIONS 1013
|
||||
#define IDS_NEXT_UPDATE_LOCATION 1014
|
||||
#define IDS_YES_OR_NO_TRUST 1015
|
||||
#define IDS_EMAIL_ADDRESS 1016
|
||||
#define IDS_UNSTRUCTURED_NAME 1017
|
||||
#define IDS_CONTENT_TYPE 1018
|
||||
#define IDS_MESSAGE_DIGEST 1019
|
||||
#define IDS_SIGNING_TIME 1020
|
||||
#define IDS_COUNTER_SIGN 1021
|
||||
#define IDS_CHALLENGE_PASSWORD 1022
|
||||
#define IDS_UNSTRUCTURED_ADDRESS 1023
|
||||
#define IDS_SMIME_CAPABILITIES 1024
|
||||
#define IDS_PREFER_SIGNED_DATA 1025
|
||||
#define IDS_CPS 1026
|
||||
#define IDS_USER_NOTICE 1027
|
||||
#define IDS_OCSP 1028
|
||||
#define IDS_CA_ISSUER 1029
|
||||
#define IDS_CERT_TEMPLATE_NAME 1030
|
||||
#define IDS_CERT_TYPE 1031
|
||||
#define IDS_CERT_MANIFOLD 1032
|
||||
#define IDS_NETSCAPE_CERT_TYPE 1033
|
||||
#define IDS_NETSCAPE_BASE_URL 1034
|
||||
#define IDS_NETSCAPE_REVOCATION_URL 1035
|
||||
#define IDS_NETSCAPE_CA_REVOCATION_URL 1036
|
||||
#define IDS_NETSCAPE_CERT_RENEWAL_URL 1037
|
||||
#define IDS_NETSCAPE_CA_POLICY_URL 1038
|
||||
#define IDS_NETSCAPE_SSL_SERVER_NAME 1039
|
||||
#define IDS_NETSCAPE_COMMENT 1040
|
||||
#define IDS_SPC_SP_AGENCY_INFO 1041
|
||||
#define IDS_SPC_FINANCIAL_CRITERIA 1042
|
||||
#define IDS_SPC_MINIMAL_CRITERIA 1043
|
||||
#define IDS_COUNTRY 1044
|
||||
#define IDS_ORGANIZATION 1045
|
||||
#define IDS_ORGANIZATIONAL_UNIT 1046
|
||||
#define IDS_COMMON_NAME 1047
|
||||
#define IDS_LOCALITY 1048
|
||||
#define IDS_STATE_OR_PROVINCE 1049
|
||||
#define IDS_TITLE 1050
|
||||
#define IDS_GIVEN_NAME 1051
|
||||
#define IDS_INITIALS 1052
|
||||
#define IDS_SUR_NAME 1053
|
||||
#define IDS_DOMAIN_COMPONENT 1054
|
||||
#define IDS_STREET_ADDRESS 1055
|
||||
#define IDS_SERIAL_NUMBER 1056
|
||||
#define IDS_CA_VERSION 1057
|
||||
#define IDS_CROSS_CA_VERSION 1058
|
||||
#define IDS_SERIALIZED_SIG_SERIAL_NUMBER 1059
|
||||
#define IDS_PRINCIPAL_NAME 1060
|
||||
#define IDS_WINDOWS_PRODUCT_UPDATE 1061
|
||||
#define IDS_ENROLLMENT_NAME_VALUE_PAIR 1062
|
||||
#define IDS_OS_VERSION 1063
|
||||
#define IDS_ENROLLMENT_CSP 1064
|
||||
#define IDS_CRL_NUMBER 1065
|
||||
#define IDS_DELTA_CRL_INDICATOR 1066
|
||||
#define IDS_ISSUING_DIST_POINT 1067
|
||||
#define IDS_FRESHEST_CRL 1068
|
||||
#define IDS_NAME_CONSTRAINTS 1069
|
||||
#define IDS_POLICY_MAPPINGS 1070
|
||||
#define IDS_POLICY_CONSTRAINTS 1071
|
||||
#define IDS_CROSS_CERT_DIST_POINTS 1072
|
||||
#define IDS_APPLICATION_POLICIES 1073
|
||||
#define IDS_APPLICATION_POLICY_MAPPINGS 1074
|
||||
#define IDS_APPLICATION_POLICY_CONSTRAINTS 1075
|
||||
#define IDS_CMC_DATA 1076
|
||||
#define IDS_CMC_RESPONSE 1077
|
||||
#define IDS_UNSIGNED_CMC_REQUEST 1078
|
||||
#define IDS_CMC_STATUS_INFO 1079
|
||||
#define IDS_CMC_EXTENSIONS 1080
|
||||
#define IDS_CMC_ATTRIBUTES 1081
|
||||
#define IDS_PKCS_7_DATA 1082
|
||||
#define IDS_PKCS_7_SIGNED 1083
|
||||
#define IDS_PKCS_7_ENVELOPED 1084
|
||||
#define IDS_PKCS_7_SIGNED_ENVELOPED 1085
|
||||
#define IDS_PKCS_7_DIGESTED 1086
|
||||
#define IDS_PKCS_7_ENCRYPTED 1087
|
||||
#define IDS_PREVIOUS_CA_CERT_HASH 1088
|
||||
#define IDS_CRL_VIRTUAL_BASE 1089
|
||||
#define IDS_CRL_NEXT_PUBLISH 1090
|
||||
#define IDS_CA_EXCHANGE 1091
|
||||
#define IDS_KEY_RECOVERY_AGENT 1092
|
||||
#define IDS_CERTIFICATE_TEMPLATE 1093
|
||||
#define IDS_ENTERPRISE_ROOT_OID 1094
|
||||
#define IDS_RDN_DUMMY_SIGNER 1095
|
||||
#define IDS_ARCHIVED_KEY_ATTR 1096
|
||||
#define IDS_CRL_SELF_CDP 1097
|
||||
#define IDS_REQUIRE_CERT_CHAIN_POLICY 1098
|
||||
#define IDS_TRANSACTION_ID 1099
|
||||
#define IDS_SENDER_NONCE 1100
|
||||
#define IDS_RECIPIENT_NONCE 1101
|
||||
#define IDS_REG_INFO 1102
|
||||
#define IDS_GET_CERTIFICATE 1103
|
||||
#define IDS_GET_CRL 1104
|
||||
#define IDS_REVOKE_REQUEST 1105
|
||||
#define IDS_QUERY_PENDING 1106
|
||||
#define IDS_SORTED_CTL 1107
|
||||
#define IDS_ARCHIVED_KEY_CERT_HASH 1108
|
||||
#define IDS_PRIVATE_KEY_USAGE_PERIOD 1109
|
||||
#define IDS_CLIENT_INFORMATION 1110
|
||||
#define IDS_SERVER_AUTHENTICATION 1111
|
||||
#define IDS_CLIENT_AUTHENTICATION 1112
|
||||
#define IDS_CODE_SIGNING 1113
|
||||
#define IDS_SECURE_EMAIL 1114
|
||||
#define IDS_TIME_STAMPING 1115
|
||||
#define IDS_MICROSOFT_TRUST_LIST_SIGNING 1116
|
||||
#define IDS_MICROSOFT_TIME_STAMPING 1117
|
||||
#define IDS_IPSEC_END_SYSTEM 1118
|
||||
#define IDS_IPSEC_TUNNEL 1119
|
||||
#define IDS_IPSEC_USER 1120
|
||||
#define IDS_EFS 1121
|
||||
#define IDS_WHQL_CRYPTO 1122
|
||||
#define IDS_NT5_CRYPTO 1123
|
||||
#define IDS_OEM_WHQL_CRYPTO 1124
|
||||
#define IDS_EMBEDDED_NT_CRYPTO 1125
|
||||
#define IDS_KEY_PACK_LICENSES 1126
|
||||
#define IDS_LICENSE_SERVER 1127
|
||||
#define IDS_SMART_CARD_LOGON 1128
|
||||
#define IDS_DIGITAL_RIGHTS 1129
|
||||
#define IDS_QUALIFIED_SUBORDINATION 1130
|
||||
#define IDS_KEY_RECOVERY 1131
|
||||
#define IDS_DOCUMENT_SIGNING 1132
|
||||
#define IDS_IPSEC_IKE_INTERMEDIATE 1133
|
||||
#define IDS_FILE_RECOVERY 1134
|
||||
#define IDS_ROOT_LIST_SIGNER 1135
|
||||
#define IDS_ANY_APPLICATION_POLICIES 1136
|
||||
#define IDS_DS_EMAIL_REPLICATION 1137
|
||||
#define IDS_ENROLLMENT_AGENT 1138
|
||||
#define IDS_LIFETIME_SIGNING 1139
|
||||
#define IDS_ANY_CERT_POLICY 1140
|
||||
|
||||
#endif /* ndef __WINE_CRYPTRES_H__ */
|
|
@ -30,6 +30,10 @@
|
|||
* MSDN, especially:
|
||||
* http://msdn.microsoft.com/library/en-us/seccrypto/security/constants_for_cryptencodeobject_and_cryptdecodeobject.asp
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "wine/port.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
@ -66,6 +70,12 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
||||
|
||||
struct GenericArray
|
||||
{
|
||||
DWORD cItems;
|
||||
BYTE *rgItems;
|
||||
};
|
||||
|
||||
typedef BOOL (WINAPI *CryptEncodeObjectFunc)(DWORD, LPCSTR, const void *,
|
||||
BYTE *, DWORD *);
|
||||
typedef BOOL (WINAPI *CryptEncodeObjectExFunc)(DWORD, LPCSTR, const void *,
|
||||
|
@ -80,10 +90,6 @@ typedef BOOL (WINAPI *CryptDecodeObjectExFunc)(DWORD, LPCSTR, const BYTE *,
|
|||
* built-in functions, but the parameters are retained to simplify
|
||||
* CryptEncodeObjectEx/CryptDecodeObjectEx, since they must call functions in
|
||||
* external DLLs that follow these signatures.
|
||||
* FIXME: some built-in functions are suitable to be called directly by
|
||||
* CryptEncodeObjectEx/CryptDecodeObjectEx (they implement exception handling
|
||||
* and memory allocation if requested), others are only suitable to be called
|
||||
* internally. Comment which are which.
|
||||
*/
|
||||
static BOOL WINAPI CRYPT_AsnEncodeOid(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
|
@ -91,6 +97,9 @@ static BOOL WINAPI CRYPT_AsnEncodeOid(DWORD dwCertEncodingType,
|
|||
static BOOL WINAPI CRYPT_AsnEncodeExtensions(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded);
|
||||
static BOOL WINAPI CRYPT_AsnEncodeSequenceOfAny(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded);
|
||||
static BOOL WINAPI CRYPT_AsnEncodeBool(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded);
|
||||
|
@ -122,7 +131,7 @@ static BOOL WINAPI CRYPT_AsnEncodeChoiceOfTime(DWORD dwCertEncodingType,
|
|||
static BOOL WINAPI CRYPT_AsnDecodeChoiceOfTime(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
|
||||
static BOOL WINAPI CRYPT_AsnDecodePubKeyInfo(DWORD dwCertEncodingType,
|
||||
static BOOL WINAPI CRYPT_AsnDecodePubKeyInfoInternal(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
|
||||
/* Like CRYPT_AsnDecodeExtensions, except assumes rgExtension is set ahead of
|
||||
|
@ -1442,6 +1451,46 @@ static BOOL WINAPI CRYPT_AsnEncodeAltName(DWORD dwCertEncodingType,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnEncodeBasicConstraints(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
__TRY
|
||||
{
|
||||
const CERT_BASIC_CONSTRAINTS_INFO *info =
|
||||
(const CERT_BASIC_CONSTRAINTS_INFO *)pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[3] = {
|
||||
{ &info->SubjectType, CRYPT_AsnEncodeBits, 0 },
|
||||
{ 0 }
|
||||
};
|
||||
DWORD cItem = 1;
|
||||
|
||||
if (info->fPathLenConstraint)
|
||||
{
|
||||
items[cItem].pvStructInfo = &info->dwPathLenConstraint;
|
||||
items[cItem].encodeFunc = CRYPT_AsnEncodeInt;
|
||||
cItem++;
|
||||
}
|
||||
if (info->cSubtreesConstraint)
|
||||
{
|
||||
items[cItem].pvStructInfo = &info->cSubtreesConstraint;
|
||||
items[cItem].encodeFunc = CRYPT_AsnEncodeSequenceOfAny;
|
||||
cItem++;
|
||||
}
|
||||
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, cItem,
|
||||
dwFlags, pEncodePara, pbEncoded, pcbEncoded);
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
SetLastError(STATUS_ACCESS_VIOLATION);
|
||||
ret = FALSE;
|
||||
}
|
||||
__ENDTRY
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnEncodeBasicConstraints2(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
|
@ -2191,6 +2240,70 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLDistPoints(DWORD dwCertEncodingType,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnEncodeEnhancedKeyUsage(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
__TRY
|
||||
{
|
||||
const CERT_ENHKEY_USAGE *usage =
|
||||
(const CERT_ENHKEY_USAGE *)pvStructInfo;
|
||||
DWORD bytesNeeded = 0, lenBytes, size, i;
|
||||
|
||||
ret = TRUE;
|
||||
for (i = 0; ret && i < usage->cUsageIdentifier; i++)
|
||||
{
|
||||
ret = CRYPT_AsnEncodeOid(dwCertEncodingType, NULL,
|
||||
usage->rgpszUsageIdentifier[i],
|
||||
dwFlags & ~CRYPT_ENCODE_ALLOC_FLAG, NULL, NULL, &size);
|
||||
if (ret)
|
||||
bytesNeeded += size;
|
||||
}
|
||||
CRYPT_EncodeLen(bytesNeeded, NULL, &lenBytes);
|
||||
bytesNeeded += 1 + lenBytes;
|
||||
if (ret)
|
||||
{
|
||||
if (!pbEncoded)
|
||||
*pcbEncoded = bytesNeeded;
|
||||
else
|
||||
{
|
||||
if ((ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara,
|
||||
pbEncoded, pcbEncoded, bytesNeeded)))
|
||||
{
|
||||
if (dwFlags & CRYPT_ENCODE_ALLOC_FLAG)
|
||||
pbEncoded = *(BYTE **)pbEncoded;
|
||||
*pbEncoded++ = ASN_SEQUENCEOF;
|
||||
CRYPT_EncodeLen(bytesNeeded - lenBytes - 1, pbEncoded,
|
||||
&lenBytes);
|
||||
pbEncoded += lenBytes;
|
||||
for (i = 0; ret && i < usage->cUsageIdentifier; i++)
|
||||
{
|
||||
size = bytesNeeded;
|
||||
ret = CRYPT_AsnEncodeOid(dwCertEncodingType, NULL,
|
||||
usage->rgpszUsageIdentifier[i],
|
||||
dwFlags & ~CRYPT_ENCODE_ALLOC_FLAG, NULL, pbEncoded,
|
||||
&size);
|
||||
if (ret)
|
||||
{
|
||||
pbEncoded += size;
|
||||
bytesNeeded -= size;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
SetLastError(STATUS_ACCESS_VIOLATION);
|
||||
ret = FALSE;
|
||||
}
|
||||
__ENDTRY
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
||||
const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara,
|
||||
void *pvEncoded, DWORD *pcbEncoded)
|
||||
|
@ -2244,6 +2357,9 @@ BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
case (WORD)X509_ALTERNATE_NAME:
|
||||
encodeFunc = CRYPT_AsnEncodeAltName;
|
||||
break;
|
||||
case (WORD)X509_BASIC_CONSTRAINTS:
|
||||
encodeFunc = CRYPT_AsnEncodeBasicConstraints;
|
||||
break;
|
||||
case (WORD)X509_BASIC_CONSTRAINTS2:
|
||||
encodeFunc = CRYPT_AsnEncodeBasicConstraints2;
|
||||
break;
|
||||
|
@ -2281,6 +2397,9 @@ BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
case (WORD)X509_CRL_DIST_POINTS:
|
||||
encodeFunc = CRYPT_AsnEncodeCRLDistPoints;
|
||||
break;
|
||||
case (WORD)X509_ENHANCED_KEY_USAGE:
|
||||
encodeFunc = CRYPT_AsnEncodeEnhancedKeyUsage;
|
||||
break;
|
||||
default:
|
||||
FIXME("%d: unimplemented\n", LOWORD(lpszStructType));
|
||||
}
|
||||
|
@ -2295,6 +2414,8 @@ BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
encodeFunc = CRYPT_AsnEncodeBits;
|
||||
else if (!strcmp(lpszStructType, szOID_SUBJECT_KEY_IDENTIFIER))
|
||||
encodeFunc = CRYPT_AsnEncodeOctets;
|
||||
else if (!strcmp(lpszStructType, szOID_BASIC_CONSTRAINTS))
|
||||
encodeFunc = CRYPT_AsnEncodeBasicConstraints;
|
||||
else if (!strcmp(lpszStructType, szOID_BASIC_CONSTRAINTS2))
|
||||
encodeFunc = CRYPT_AsnEncodeBasicConstraints2;
|
||||
else if (!strcmp(lpszStructType, szOID_ISSUER_ALT_NAME))
|
||||
|
@ -2307,6 +2428,10 @@ BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
encodeFunc = CRYPT_AsnEncodeAltName;
|
||||
else if (!strcmp(lpszStructType, szOID_SUBJECT_ALT_NAME2))
|
||||
encodeFunc = CRYPT_AsnEncodeAltName;
|
||||
else if (!strcmp(lpszStructType, szOID_CRL_DIST_POINTS))
|
||||
encodeFunc = CRYPT_AsnEncodeCRLDistPoints;
|
||||
else if (!strcmp(lpszStructType, szOID_ENHANCED_KEY_USAGE))
|
||||
encodeFunc = CRYPT_AsnEncodeEnhancedKeyUsage;
|
||||
else
|
||||
TRACE("OID %s not found or unimplemented, looking for DLL\n",
|
||||
debugstr_a(lpszStructType));
|
||||
|
@ -2704,12 +2829,6 @@ struct AsnArrayItemSize
|
|||
DWORD size;
|
||||
};
|
||||
|
||||
struct GenericArray
|
||||
{
|
||||
DWORD cItems;
|
||||
BYTE *rgItems;
|
||||
};
|
||||
|
||||
/* Decodes an array of like types into a struct GenericArray.
|
||||
* The layout and decoding of the array are described by a struct
|
||||
* AsnArrayDescriptor.
|
||||
|
@ -3063,12 +3182,9 @@ static BOOL WINAPI CRYPT_AsnDecodeCertInfo(DWORD dwCertEncodingType,
|
|||
{ 0, offsetof(CERT_INFO, Subject), CRYPT_AsnDecodeDerBlob,
|
||||
sizeof(CRYPT_DER_BLOB), FALSE, TRUE, offsetof(CERT_INFO,
|
||||
Subject.pbData) },
|
||||
/* jil FIXME: shouldn't this have an internal version, which expects
|
||||
* the pbData to be set?
|
||||
*/
|
||||
{ ASN_SEQUENCEOF, offsetof(CERT_INFO, SubjectPublicKeyInfo),
|
||||
CRYPT_AsnDecodePubKeyInfo, sizeof(CERT_PUBLIC_KEY_INFO), FALSE,
|
||||
TRUE, offsetof(CERT_INFO,
|
||||
CRYPT_AsnDecodePubKeyInfoInternal, sizeof(CERT_PUBLIC_KEY_INFO),
|
||||
FALSE, TRUE, offsetof(CERT_INFO,
|
||||
SubjectPublicKeyInfo.Algorithm.Parameters.pbData), 0 },
|
||||
{ ASN_BITSTRING, offsetof(CERT_INFO, IssuerUniqueId),
|
||||
CRYPT_AsnDecodeBitsInternal, sizeof(CRYPT_BIT_BLOB), TRUE, TRUE,
|
||||
|
@ -3554,8 +3670,11 @@ static BOOL WINAPI CRYPT_AsnDecodeRdnAttr(DWORD dwCertEncodingType,
|
|||
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, NULL,
|
||||
attr, pcbStructInfo, attr ? attr->pszObjId : NULL);
|
||||
if (attr)
|
||||
{
|
||||
TRACE("attr->pszObjId is %p (%s)\n", attr->pszObjId,
|
||||
debugstr_a(attr->pszObjId));
|
||||
TRACE("attr->dwValueType is %ld\n", attr->dwValueType);
|
||||
}
|
||||
TRACE("returning %d (%08lx)\n", ret, GetLastError());
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
|
@ -3578,9 +3697,10 @@ static BOOL WINAPI CRYPT_AsnDecodeRdn(DWORD dwCertEncodingType,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_CONSTRUCTOR | ASN_SETOF,
|
||||
CRYPT_AsnDecodeRdnAttr, sizeof(CERT_RDN_ATTR), TRUE,
|
||||
offsetof(CERT_RDN_ATTR, pszObjId) };
|
||||
PCERT_RDN rdn = (PCERT_RDN)pvStructInfo;
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, pcbStructInfo, NULL);
|
||||
pDecodePara, pvStructInfo, pcbStructInfo, rdn ? rdn->rgRDNAttr : NULL);
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
|
@ -3682,6 +3802,29 @@ static BOOL WINAPI CRYPT_AsnDecodeAlgorithmId(DWORD dwCertEncodingType,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnDecodePubKeyInfoInternal(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
|
||||
{
|
||||
BOOL ret = TRUE;
|
||||
struct AsnDecodeSequenceItem items[] = {
|
||||
{ ASN_SEQUENCEOF, offsetof(CERT_PUBLIC_KEY_INFO, Algorithm),
|
||||
CRYPT_AsnDecodeAlgorithmId, sizeof(CRYPT_ALGORITHM_IDENTIFIER),
|
||||
FALSE, TRUE, offsetof(CERT_PUBLIC_KEY_INFO,
|
||||
Algorithm.pszObjId) },
|
||||
{ ASN_BITSTRING, offsetof(CERT_PUBLIC_KEY_INFO, PublicKey),
|
||||
CRYPT_AsnDecodeBitsInternal, sizeof(CRYPT_BIT_BLOB), FALSE, TRUE,
|
||||
offsetof(CERT_PUBLIC_KEY_INFO, PublicKey.pbData) },
|
||||
};
|
||||
PCERT_PUBLIC_KEY_INFO info = (PCERT_PUBLIC_KEY_INFO)pvStructInfo;
|
||||
|
||||
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items,
|
||||
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, pcbStructInfo, info ?
|
||||
info->Algorithm.Parameters.pbData : NULL);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnDecodePubKeyInfo(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
|
||||
|
@ -3690,19 +3833,30 @@ static BOOL WINAPI CRYPT_AsnDecodePubKeyInfo(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
struct AsnDecodeSequenceItem items[] = {
|
||||
{ ASN_SEQUENCEOF, offsetof(CERT_PUBLIC_KEY_INFO, Algorithm),
|
||||
CRYPT_AsnDecodeAlgorithmId, sizeof(CRYPT_ALGORITHM_IDENTIFIER),
|
||||
FALSE, TRUE, offsetof(CERT_PUBLIC_KEY_INFO,
|
||||
Algorithm.pszObjId) },
|
||||
{ ASN_BITSTRING, offsetof(CERT_PUBLIC_KEY_INFO, PublicKey),
|
||||
CRYPT_AsnDecodeBitsInternal, sizeof(CRYPT_BIT_BLOB), FALSE, TRUE,
|
||||
offsetof(CERT_PUBLIC_KEY_INFO, PublicKey.pbData) },
|
||||
};
|
||||
DWORD bytesNeeded;
|
||||
|
||||
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items,
|
||||
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, pcbStructInfo, NULL);
|
||||
if ((ret = CRYPT_AsnDecodePubKeyInfoInternal(dwCertEncodingType,
|
||||
lpszStructType, pbEncoded, cbEncoded,
|
||||
dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, NULL, &bytesNeeded)))
|
||||
{
|
||||
if (!pvStructInfo)
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, pDecodePara,
|
||||
pvStructInfo, pcbStructInfo, bytesNeeded)))
|
||||
{
|
||||
PCERT_PUBLIC_KEY_INFO info;
|
||||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
info = (PCERT_PUBLIC_KEY_INFO)pvStructInfo;
|
||||
info->Algorithm.Parameters.pbData = (BYTE *)pvStructInfo +
|
||||
sizeof(CERT_PUBLIC_KEY_INFO);
|
||||
ret = CRYPT_AsnDecodePubKeyInfoInternal(dwCertEncodingType,
|
||||
lpszStructType, pbEncoded, cbEncoded,
|
||||
dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, pvStructInfo,
|
||||
&bytesNeeded);
|
||||
}
|
||||
}
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
|
@ -3958,6 +4112,60 @@ static BOOL WINAPI CRYPT_AsnDecodePathLenConstraint(DWORD dwCertEncodingType,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnDecodeSubtreeConstraints(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
|
||||
{
|
||||
BOOL ret;
|
||||
struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
|
||||
CRYPT_AsnDecodeCopyBytes, sizeof(CERT_NAME_BLOB), TRUE,
|
||||
offsetof(CERT_NAME_BLOB, pbData) };
|
||||
struct GenericArray *entries = (struct GenericArray *)pvStructInfo;
|
||||
|
||||
TRACE("%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, *pcbStructInfo);
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, pcbStructInfo,
|
||||
entries ? entries->rgItems : NULL);
|
||||
TRACE("Returning %d (%08lx)\n", ret, GetLastError());
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnDecodeBasicConstraints(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
__TRY
|
||||
{
|
||||
struct AsnDecodeSequenceItem items[] = {
|
||||
{ ASN_BITSTRING, offsetof(CERT_BASIC_CONSTRAINTS_INFO, SubjectType),
|
||||
CRYPT_AsnDecodeBitsInternal, sizeof(CRYPT_BIT_BLOB), FALSE, TRUE,
|
||||
offsetof(CERT_BASIC_CONSTRAINTS_INFO, SubjectType.pbData), 0 },
|
||||
{ ASN_INTEGER, offsetof(CERT_BASIC_CONSTRAINTS_INFO,
|
||||
fPathLenConstraint), CRYPT_AsnDecodePathLenConstraint,
|
||||
sizeof(struct PATH_LEN_CONSTRAINT), TRUE, FALSE, 0, 0 },
|
||||
{ ASN_SEQUENCEOF, offsetof(CERT_BASIC_CONSTRAINTS_INFO,
|
||||
cSubtreesConstraint), CRYPT_AsnDecodeSubtreeConstraints,
|
||||
sizeof(struct GenericArray), TRUE, TRUE,
|
||||
offsetof(CERT_BASIC_CONSTRAINTS_INFO, rgSubtreesConstraint), 0 },
|
||||
};
|
||||
|
||||
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items,
|
||||
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, pcbStructInfo, NULL);
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
SetLastError(STATUS_ACCESS_VIOLATION);
|
||||
ret = FALSE;
|
||||
}
|
||||
__ENDTRY
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnDecodeBasicConstraints2(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
|
||||
|
@ -5043,6 +5251,32 @@ static BOOL WINAPI CRYPT_AsnDecodeCRLDistPoints(DWORD dwCertEncodingType,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL WINAPI CRYPT_AsnDecodeEnhancedKeyUsage(DWORD dwCertEncodingType,
|
||||
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
TRACE("%p, %ld, %08lx, %p, %p, %ld\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, *pcbStructInfo);
|
||||
|
||||
__TRY
|
||||
{
|
||||
struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
|
||||
CRYPT_AsnDecodeOidWrapper, sizeof(LPSTR), TRUE, 0 };
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
pDecodePara, pvStructInfo, pcbStructInfo, NULL);
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
SetLastError(STATUS_ACCESS_VIOLATION);
|
||||
ret = FALSE;
|
||||
}
|
||||
__ENDTRY
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
||||
const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
|
||||
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
|
||||
|
@ -5106,6 +5340,9 @@ BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
case (WORD)X509_ALTERNATE_NAME:
|
||||
decodeFunc = CRYPT_AsnDecodeAltName;
|
||||
break;
|
||||
case (WORD)X509_BASIC_CONSTRAINTS:
|
||||
decodeFunc = CRYPT_AsnDecodeBasicConstraints;
|
||||
break;
|
||||
case (WORD)X509_BASIC_CONSTRAINTS2:
|
||||
decodeFunc = CRYPT_AsnDecodeBasicConstraints2;
|
||||
break;
|
||||
|
@ -5143,6 +5380,9 @@ BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
case (WORD)X509_CRL_DIST_POINTS:
|
||||
decodeFunc = CRYPT_AsnDecodeCRLDistPoints;
|
||||
break;
|
||||
case (WORD)X509_ENHANCED_KEY_USAGE:
|
||||
decodeFunc = CRYPT_AsnDecodeEnhancedKeyUsage;
|
||||
break;
|
||||
default:
|
||||
FIXME("%d: unimplemented\n", LOWORD(lpszStructType));
|
||||
}
|
||||
|
@ -5157,6 +5397,8 @@ BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
decodeFunc = CRYPT_AsnDecodeBits;
|
||||
else if (!strcmp(lpszStructType, szOID_SUBJECT_KEY_IDENTIFIER))
|
||||
decodeFunc = CRYPT_AsnDecodeOctets;
|
||||
else if (!strcmp(lpszStructType, szOID_BASIC_CONSTRAINTS))
|
||||
decodeFunc = CRYPT_AsnDecodeBasicConstraints;
|
||||
else if (!strcmp(lpszStructType, szOID_BASIC_CONSTRAINTS2))
|
||||
decodeFunc = CRYPT_AsnDecodeBasicConstraints2;
|
||||
else if (!strcmp(lpszStructType, szOID_ISSUER_ALT_NAME))
|
||||
|
@ -5169,6 +5411,10 @@ BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
decodeFunc = CRYPT_AsnDecodeAltName;
|
||||
else if (!strcmp(lpszStructType, szOID_SUBJECT_ALT_NAME2))
|
||||
decodeFunc = CRYPT_AsnDecodeAltName;
|
||||
else if (!strcmp(lpszStructType, szOID_CRL_DIST_POINTS))
|
||||
decodeFunc = CRYPT_AsnDecodeCRLDistPoints;
|
||||
else if (!strcmp(lpszStructType, szOID_ENHANCED_KEY_USAGE))
|
||||
decodeFunc = CRYPT_AsnDecodeEnhancedKeyUsage;
|
||||
else
|
||||
TRACE("OID %s not found or unimplemented, looking for DLL\n",
|
||||
debugstr_a(lpszStructType));
|
||||
|
|
|
@ -39,10 +39,11 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
|
|||
switch (fdwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
CRYPT_InitFunctionSets();
|
||||
DisableThreadLibraryCalls(hInstance);
|
||||
crypt_oid_init(hInstance);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
CRYPT_FreeFunctionSets();
|
||||
crypt_oid_free();
|
||||
if (hDefProv) CryptReleaseContext(hDefProv, 0);
|
||||
break;
|
||||
}
|
||||
|
@ -217,96 +218,6 @@ BOOL WINAPI CryptSIPLoad
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
struct OIDToAlgID
|
||||
{
|
||||
LPCSTR oid;
|
||||
DWORD algID;
|
||||
};
|
||||
|
||||
static const struct OIDToAlgID oidToAlgID[] = {
|
||||
{ szOID_RSA_RSA, CALG_RSA_KEYX },
|
||||
{ szOID_RSA_MD2RSA, CALG_MD2 },
|
||||
{ szOID_RSA_MD4RSA, CALG_MD4 },
|
||||
{ szOID_RSA_MD5RSA, CALG_MD5 },
|
||||
{ szOID_RSA_SHA1RSA, CALG_SHA },
|
||||
{ szOID_RSA_DH, CALG_DH_SF },
|
||||
{ szOID_RSA_SMIMEalgESDH, CALG_DH_EPHEM },
|
||||
{ szOID_RSA_SMIMEalgCMS3DESwrap, CALG_3DES },
|
||||
{ szOID_RSA_SMIMEalgCMSRC2wrap, CALG_RC2 },
|
||||
{ szOID_RSA_MD2, CALG_MD2 },
|
||||
{ szOID_RSA_MD4, CALG_MD4 },
|
||||
{ szOID_RSA_MD5, CALG_MD5 },
|
||||
{ szOID_RSA_RC2CBC, CALG_RC2 },
|
||||
{ szOID_RSA_RC4, CALG_RC4 },
|
||||
{ szOID_RSA_DES_EDE3_CBC, CALG_3DES },
|
||||
{ szOID_ANSI_X942_DH, CALG_DH_SF },
|
||||
{ szOID_X957_DSA, CALG_DSS_SIGN },
|
||||
{ szOID_X957_SHA1DSA, CALG_SHA },
|
||||
{ szOID_OIWSEC_md4RSA, CALG_MD4 },
|
||||
{ szOID_OIWSEC_md5RSA, CALG_MD5 },
|
||||
{ szOID_OIWSEC_md4RSA2, CALG_MD4 },
|
||||
{ szOID_OIWSEC_desCBC, CALG_DES },
|
||||
{ szOID_OIWSEC_dsa, CALG_DSS_SIGN },
|
||||
{ szOID_OIWSEC_shaDSA, CALG_SHA },
|
||||
{ szOID_OIWSEC_shaRSA, CALG_SHA },
|
||||
{ szOID_OIWSEC_sha, CALG_SHA },
|
||||
{ szOID_OIWSEC_rsaXchg, CALG_RSA_KEYX },
|
||||
{ szOID_OIWSEC_sha1, CALG_SHA },
|
||||
{ szOID_OIWSEC_dsaSHA1, CALG_SHA },
|
||||
{ szOID_OIWSEC_sha1RSASign, CALG_SHA },
|
||||
{ szOID_OIWDIR_md2RSA, CALG_MD2 },
|
||||
{ szOID_INFOSEC_mosaicUpdatedSig, CALG_SHA },
|
||||
{ szOID_INFOSEC_mosaicKMandUpdSig, CALG_DSS_SIGN },
|
||||
};
|
||||
|
||||
LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId)
|
||||
{
|
||||
switch (dwAlgId)
|
||||
{
|
||||
case CALG_RSA_KEYX:
|
||||
return szOID_RSA_RSA;
|
||||
case CALG_DH_EPHEM:
|
||||
return szOID_RSA_SMIMEalgESDH;
|
||||
case CALG_MD2:
|
||||
return szOID_RSA_MD2;
|
||||
case CALG_MD4:
|
||||
return szOID_RSA_MD4;
|
||||
case CALG_MD5:
|
||||
return szOID_RSA_MD5;
|
||||
case CALG_RC2:
|
||||
return szOID_RSA_RC2CBC;
|
||||
case CALG_RC4:
|
||||
return szOID_RSA_RC4;
|
||||
case CALG_3DES:
|
||||
return szOID_RSA_DES_EDE3_CBC;
|
||||
case CALG_DH_SF:
|
||||
return szOID_ANSI_X942_DH;
|
||||
case CALG_DSS_SIGN:
|
||||
return szOID_X957_DSA;
|
||||
case CALG_DES:
|
||||
return szOID_OIWSEC_desCBC;
|
||||
case CALG_SHA:
|
||||
return szOID_OIWSEC_sha1;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (pszObjId)
|
||||
{
|
||||
for (i = 0; i < sizeof(oidToAlgID) / sizeof(oidToAlgID[0]); i++)
|
||||
{
|
||||
if (!strcmp(pszObjId, oidToAlgID[i].oid))
|
||||
return oidToAlgID[i].algID;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
LPVOID WINAPI CryptMemAlloc(ULONG cbSize)
|
||||
{
|
||||
return HeapAlloc(GetProcessHeap(), 0, cbSize);
|
||||
|
@ -351,3 +262,44 @@ BOOL WINAPI I_CryptFreeTls(DWORD dwTlsIndex, DWORD unknown)
|
|||
TRACE("(%ld, %ld)\n", dwTlsIndex, unknown);
|
||||
return TlsFree(dwTlsIndex);
|
||||
}
|
||||
|
||||
BOOL WINAPI I_CryptGetOssGlobal(DWORD x)
|
||||
{
|
||||
FIXME("%08lx\n", x);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI I_CryptInstallOssGlobal(DWORD x, DWORD y, DWORD z)
|
||||
{
|
||||
FIXME("%08lx %08lx %08lx\n", x, y, z);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI I_CryptInstallAsn1Module(void *x, DWORD y, DWORD z)
|
||||
{
|
||||
FIXME("%p %08lx %08lx\n", x, y, z);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject,
|
||||
DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags,
|
||||
DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType,
|
||||
DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg,
|
||||
const void** ppvContext)
|
||||
{
|
||||
FIXME( "%08lx %p %08lx %08lx %08lx %p %p %p %p %p %p", dwObjectType,
|
||||
pvObject, dwExpectedContentTypeFlags, dwExpectedFormatTypeFlags,
|
||||
dwFlags, pdwMsgAndCertEncodingType, pdwContentType, pdwFormatType,
|
||||
phCertStore, phMsg, ppvContext);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI CryptVerifyMessageSignature(/*PCRYPT_VERIFY_MESSAGE_PARA*/ void* pVerifyPara,
|
||||
DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob,
|
||||
BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert)
|
||||
{
|
||||
FIXME("stub: %p, %ld, %p, %ld, %p, %p, %p\n",
|
||||
pVerifyPara, dwSignerIndex, pbSignedBlob, cbSignedBlob,
|
||||
pbDecoded, pcbDecoded, ppSignerCert);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright 2002 Mike McCormack for CodeWeavers
|
||||
* Copyright 2005 Juan Lang
|
||||
* Copyright 2005-2006 Juan Lang
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -18,17 +18,38 @@
|
|||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#define NONAMELESSUNION
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "wincrypt.h"
|
||||
#include "winreg.h"
|
||||
#include "winuser.h"
|
||||
#include "wine/debug.h"
|
||||
#include "wine/list.h"
|
||||
#include "crypt32_private.h"
|
||||
#include "cryptres.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
||||
|
||||
static const WCHAR DllW[] = { 'D','l','l',0 };
|
||||
|
||||
static void init_function_sets(void);
|
||||
static void init_oid_info(HINSTANCE hinst);
|
||||
static void free_function_sets(void);
|
||||
static void free_oid_info(void);
|
||||
|
||||
void crypt_oid_init(HINSTANCE hinst)
|
||||
{
|
||||
init_function_sets();
|
||||
init_oid_info(hinst);
|
||||
}
|
||||
|
||||
void crypt_oid_free(void)
|
||||
{
|
||||
free_function_sets();
|
||||
free_oid_info();
|
||||
}
|
||||
|
||||
CRITICAL_SECTION funcSetCS;
|
||||
struct list funcSets;
|
||||
|
||||
|
@ -47,13 +68,13 @@ struct OIDFunction
|
|||
struct list next;
|
||||
};
|
||||
|
||||
void CRYPT_InitFunctionSets(void)
|
||||
static void init_function_sets(void)
|
||||
{
|
||||
InitializeCriticalSection(&funcSetCS);
|
||||
list_init(&funcSets);
|
||||
}
|
||||
|
||||
void CRYPT_FreeFunctionSets(void)
|
||||
static void free_function_sets(void)
|
||||
{
|
||||
struct OIDFunctionSet *setCursor, *setNext;
|
||||
|
||||
|
@ -64,7 +85,6 @@ void CRYPT_FreeFunctionSets(void)
|
|||
|
||||
list_remove(&setCursor->next);
|
||||
CryptMemFree(setCursor->name);
|
||||
CryptMemFree(setCursor);
|
||||
LIST_FOR_EACH_ENTRY_SAFE(functionCursor, funcNext,
|
||||
&setCursor->functions, struct OIDFunction, next)
|
||||
{
|
||||
|
@ -72,6 +92,7 @@ void CRYPT_FreeFunctionSets(void)
|
|||
CryptMemFree(functionCursor);
|
||||
}
|
||||
DeleteCriticalSection(&setCursor->cs);
|
||||
CryptMemFree(setCursor);
|
||||
}
|
||||
DeleteCriticalSection(&funcSetCS);
|
||||
}
|
||||
|
@ -556,3 +577,555 @@ BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
|
|||
}
|
||||
return rc ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
CRITICAL_SECTION oidInfoCS;
|
||||
struct list oidInfo;
|
||||
|
||||
static const WCHAR tripledes[] = { '3','d','e','s',0 };
|
||||
static const WCHAR cms3deswrap[] = { 'C','M','S','3','D','E','S','w','r','a',
|
||||
'p',0 };
|
||||
static const WCHAR cmsrc2wrap[] = { 'C','M','S','R','C','2','w','r','a','p',0 };
|
||||
static const WCHAR des[] = { 'd','e','s',0 };
|
||||
static const WCHAR md2[] = { 'm','d','2',0 };
|
||||
static const WCHAR md4[] = { 'm','d','4',0 };
|
||||
static const WCHAR md5[] = { 'm','d','5',0 };
|
||||
static const WCHAR rc2[] = { 'r','c','2',0 };
|
||||
static const WCHAR rc4[] = { 'r','c','4',0 };
|
||||
static const WCHAR sha[] = { 's','h','a',0 };
|
||||
static const WCHAR sha1[] = { 's','h','a','1',0 };
|
||||
static const WCHAR RSA[] = { 'R','S','A',0 };
|
||||
static const WCHAR RSA_KEYX[] = { 'R','S','A','_','K','E','Y','X',0 };
|
||||
static const WCHAR RSA_SIGN[] = { 'R','S','A','_','S','I','G','N',0 };
|
||||
static const WCHAR DSA[] = { 'D','S','A',0 };
|
||||
static const WCHAR DSA_SIGN[] = { 'D','S','A','_','S','I','G','N',0 };
|
||||
static const WCHAR DH[] = { 'D','H',0 };
|
||||
static const WCHAR DSS[] = { 'D','S','S',0 };
|
||||
static const WCHAR mosaicKMandUpdSig[] =
|
||||
{ 'm','o','s','a','i','c','K','M','a','n','d','U','p','d','S','i','g',0 };
|
||||
static const WCHAR ESDH[] = { 'E','S','D','H',0 };
|
||||
static const WCHAR NO_SIGN[] = { 'N','O','S','I','G','N',0 };
|
||||
static const WCHAR dsaSHA1[] = { 'd','s','a','S','H','A','1',0 };
|
||||
static const WCHAR md2RSA[] = { 'm','d','2','R','S','A',0 };
|
||||
static const WCHAR md4RSA[] = { 'm','d','4','R','S','A',0 };
|
||||
static const WCHAR md5RSA[] = { 'm','d','5','R','S','A',0 };
|
||||
static const WCHAR shaDSA[] = { 's','h','a','D','S','A',0 };
|
||||
static const WCHAR sha1DSA[] = { 's','h','a','1','D','S','A',0 };
|
||||
static const WCHAR shaRSA[] = { 's','h','a','R','S','A',0 };
|
||||
static const WCHAR sha1RSA[] = { 's','h','a','1','R','S','A',0 };
|
||||
static const WCHAR mosaicUpdatedSig[] =
|
||||
{ 'm','o','s','a','i','c','U','p','d','a','t','e','d','S','i','g',0 };
|
||||
static const WCHAR CN[] = { 'C','N',0 };
|
||||
static const WCHAR L[] = { 'L',0 };
|
||||
static const WCHAR O[] = { 'O',0 };
|
||||
static const WCHAR OU[] = { 'O','U',0 };
|
||||
static const WCHAR E[] = { 'E',0 };
|
||||
static const WCHAR C[] = { 'C',0 };
|
||||
static const WCHAR S[] = { 'S',0 };
|
||||
static const WCHAR ST[] = { 'S','T',0 };
|
||||
static const WCHAR STREET[] = { 'S','T','R','E','E','T',0 };
|
||||
static const WCHAR T[] = { 'T',0 };
|
||||
static const WCHAR Title[] = { 'T','i','t','l','e',0 };
|
||||
static const WCHAR G[] = { 'G',0 };
|
||||
static const WCHAR GivenName[] = { 'G','i','v','e','n','N','a','m','e',0 };
|
||||
static const WCHAR I[] = { 'I',0 };
|
||||
static const WCHAR Initials[] = { 'I','n','i','t','i','a','l','s',0 };
|
||||
static const WCHAR SN[] = { 'S','N',0 };
|
||||
static const WCHAR DC[] = { 'D','C',0 };
|
||||
static const WCHAR Description[] =
|
||||
{ 'D','e','s','c','r','i','p','t','i','o','n',0 };
|
||||
static const WCHAR PostalCode[] = { 'P','o','s','t','a','l','C','o','d','e',0 };
|
||||
static const WCHAR POBox[] = { 'P','O','B','o','x',0 };
|
||||
static const WCHAR Phone[] = { 'P','h','o','n','e',0 };
|
||||
static const WCHAR X21Address[] = { 'X','2','1','A','d','d','r','e','s','s',0 };
|
||||
static const WCHAR dnQualifier[] =
|
||||
{ 'd','n','Q','u','a','l','i','f','i','e','r',0 };
|
||||
static const WCHAR Email[] = { 'E','m','a','i','l',0 };
|
||||
static const WCHAR GN[] = { 'G','N',0 };
|
||||
|
||||
static const DWORD noNullFlag = CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG;
|
||||
static const DWORD mosaicFlags = CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG |
|
||||
CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG;
|
||||
static const CRYPT_DATA_BLOB noNullBlob = { sizeof(noNullFlag),
|
||||
(LPBYTE)&noNullFlag };
|
||||
static const CRYPT_DATA_BLOB mosaicFlagsBlob = { sizeof(mosaicFlags),
|
||||
(LPBYTE)&mosaicFlags };
|
||||
|
||||
static const DWORD rsaSign = CALG_RSA_SIGN;
|
||||
static const DWORD dssSign[2] = { CALG_DSS_SIGN,
|
||||
CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG };
|
||||
static const DWORD mosaicSign[2] = { CALG_DSS_SIGN,
|
||||
CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG |
|
||||
CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG };
|
||||
static const CRYPT_DATA_BLOB rsaSignBlob = { sizeof(rsaSign),
|
||||
(LPBYTE)&rsaSign };
|
||||
static const CRYPT_DATA_BLOB dssSignBlob = { sizeof(dssSign),
|
||||
(LPBYTE)dssSign };
|
||||
static const CRYPT_DATA_BLOB mosaicSignBlob = { sizeof(mosaicSign),
|
||||
(LPBYTE)mosaicSign };
|
||||
|
||||
static const DWORD ia5String[] = { CERT_RDN_IA5_STRING, 0 };
|
||||
static const DWORD numericString[] = { CERT_RDN_NUMERIC_STRING, 0 };
|
||||
static const DWORD printableString[] = { CERT_RDN_PRINTABLE_STRING, 0 };
|
||||
static const DWORD domainCompTypes[] = { CERT_RDN_IA5_STRING,
|
||||
CERT_RDN_UTF8_STRING, 0 };
|
||||
static const CRYPT_DATA_BLOB ia5StringBlob = { sizeof(ia5String),
|
||||
(LPBYTE)ia5String };
|
||||
static const CRYPT_DATA_BLOB numericStringBlob = { sizeof(numericString),
|
||||
(LPBYTE)numericString };
|
||||
static const CRYPT_DATA_BLOB printableStringBlob = { sizeof(printableString),
|
||||
(LPBYTE)printableString };
|
||||
static const CRYPT_DATA_BLOB domainCompTypesBlob = { sizeof(domainCompTypes),
|
||||
(LPBYTE)domainCompTypes };
|
||||
|
||||
struct OIDInfoConstructor {
|
||||
DWORD dwGroupId;
|
||||
LPCSTR pszOID;
|
||||
UINT Algid;
|
||||
LPCWSTR pwszName;
|
||||
const CRYPT_DATA_BLOB *blob;
|
||||
} oidInfoConstructors[] = {
|
||||
{ 1, szOID_OIWSEC_sha1, CALG_SHA1, sha1, NULL },
|
||||
{ 1, szOID_OIWSEC_sha1, CALG_SHA1, sha, NULL },
|
||||
{ 1, szOID_OIWSEC_sha, CALG_SHA, sha, NULL },
|
||||
{ 1, szOID_RSA_MD5, CALG_MD5, md5, NULL },
|
||||
{ 1, szOID_RSA_MD4, CALG_MD4, md4, NULL },
|
||||
{ 1, szOID_RSA_MD2, CALG_MD2, md2, NULL },
|
||||
|
||||
{ 2, szOID_OIWSEC_desCBC, CALG_DES, des, NULL },
|
||||
{ 2, szOID_RSA_DES_EDE3_CBC, CALG_3DES, tripledes, NULL },
|
||||
{ 2, szOID_RSA_RC2CBC, CALG_RC2, rc2, NULL },
|
||||
{ 2, szOID_RSA_RC4, CALG_RC4, rc4, NULL },
|
||||
{ 2, szOID_RSA_SMIMEalgCMS3DESwrap, CALG_3DES, cms3deswrap, NULL },
|
||||
{ 2, szOID_RSA_SMIMEalgCMSRC2wrap, CALG_RC2, cmsrc2wrap, NULL },
|
||||
|
||||
{ 3, szOID_RSA_RSA, CALG_RSA_KEYX, RSA, NULL },
|
||||
{ 3, szOID_X957_DSA, CALG_DSS_SIGN, DSA, &noNullBlob },
|
||||
{ 3, szOID_ANSI_X942_DH, CALG_DH_SF, DH, &noNullBlob },
|
||||
{ 3, szOID_RSA_RSA, CALG_RSA_KEYX, RSA_KEYX, NULL },
|
||||
{ 3, szOID_RSA_RSA, CALG_RSA_SIGN, RSA, NULL },
|
||||
{ 3, szOID_RSA_RSA, CALG_RSA_SIGN, RSA_SIGN, NULL },
|
||||
{ 3, szOID_OIWSEC_dsa, CALG_DSS_SIGN, DSA, &noNullBlob },
|
||||
{ 3, szOID_OIWSEC_dsa, CALG_DSS_SIGN, DSS, &noNullBlob },
|
||||
{ 3, szOID_OIWSEC_dsa, CALG_DSS_SIGN, DSA_SIGN, &noNullBlob },
|
||||
{ 3, szOID_RSA_DH, CALG_DH_SF, DH, &noNullBlob },
|
||||
{ 3, szOID_OIWSEC_rsaXchg, CALG_RSA_KEYX, RSA_KEYX, NULL },
|
||||
{ 3, szOID_INFOSEC_mosaicKMandUpdSig, CALG_DSS_SIGN, mosaicKMandUpdSig,
|
||||
&mosaicFlagsBlob },
|
||||
{ 3, szOID_RSA_SMIMEalgESDH, CALG_DH_EPHEM, ESDH, &noNullBlob },
|
||||
{ 3, szOID_PKIX_NO_SIGNATURE, CALG_NO_SIGN, NO_SIGN, NULL },
|
||||
|
||||
{ 4, szOID_RSA_SHA1RSA, CALG_SHA1, sha1RSA, &rsaSignBlob },
|
||||
{ 4, szOID_RSA_MD5RSA, CALG_MD5, md5RSA, &rsaSignBlob },
|
||||
{ 4, szOID_X957_SHA1DSA, CALG_SHA1, sha1DSA, &dssSignBlob },
|
||||
{ 4, szOID_OIWSEC_sha1RSASign, CALG_SHA1, sha1RSA, &rsaSignBlob },
|
||||
{ 4, szOID_OIWSEC_sha1RSASign, CALG_SHA1, shaRSA, &rsaSignBlob },
|
||||
{ 4, szOID_OIWSEC_shaRSA, CALG_SHA1, shaRSA, &rsaSignBlob },
|
||||
{ 4, szOID_OIWSEC_md5RSA, CALG_MD5, md5RSA, &rsaSignBlob },
|
||||
{ 4, szOID_RSA_MD2RSA, CALG_MD2, md2RSA, &rsaSignBlob },
|
||||
{ 4, szOID_RSA_MD4RSA, CALG_MD4, md4RSA, &rsaSignBlob },
|
||||
{ 4, szOID_OIWSEC_md4RSA, CALG_MD4, md4RSA, &rsaSignBlob },
|
||||
{ 4, szOID_OIWSEC_md4RSA2, CALG_MD4, md4RSA, &rsaSignBlob },
|
||||
{ 4, szOID_OIWDIR_md2RSA, CALG_MD2, md2RSA, &rsaSignBlob },
|
||||
{ 4, szOID_OIWSEC_shaDSA, CALG_SHA1, sha1DSA, &dssSignBlob },
|
||||
{ 4, szOID_OIWSEC_shaDSA, CALG_SHA1, shaDSA, &dssSignBlob },
|
||||
{ 4, szOID_OIWSEC_dsaSHA1, CALG_SHA1, dsaSHA1, &dssSignBlob },
|
||||
{ 4, szOID_INFOSEC_mosaicUpdatedSig, CALG_SHA1, mosaicUpdatedSig,
|
||||
&mosaicSignBlob },
|
||||
|
||||
{ 5, szOID_COMMON_NAME, 0, CN, NULL },
|
||||
{ 5, szOID_LOCALITY_NAME, 0, L, NULL },
|
||||
{ 5, szOID_ORGANIZATION_NAME, 0, O, NULL },
|
||||
{ 5, szOID_ORGANIZATIONAL_UNIT_NAME, 0, OU, NULL },
|
||||
{ 5, szOID_RSA_emailAddr, 0, E, &ia5StringBlob },
|
||||
{ 5, szOID_RSA_emailAddr, 0, Email, &ia5StringBlob },
|
||||
{ 5, szOID_COUNTRY_NAME, 0, C, &printableStringBlob },
|
||||
{ 5, szOID_STATE_OR_PROVINCE_NAME, 0, S, NULL },
|
||||
{ 5, szOID_STATE_OR_PROVINCE_NAME, 0, ST, NULL },
|
||||
{ 5, szOID_STREET_ADDRESS, 0, STREET, NULL },
|
||||
{ 5, szOID_TITLE, 0, T, NULL },
|
||||
{ 5, szOID_TITLE, 0, Title, NULL },
|
||||
{ 5, szOID_GIVEN_NAME, 0, G, NULL },
|
||||
{ 5, szOID_GIVEN_NAME, 0, GN, NULL },
|
||||
{ 5, szOID_GIVEN_NAME, 0, GivenName, NULL },
|
||||
{ 5, szOID_INITIALS, 0, I, NULL },
|
||||
{ 5, szOID_INITIALS, 0, Initials, NULL },
|
||||
{ 5, szOID_SUR_NAME, 0, SN, NULL },
|
||||
{ 5, szOID_DOMAIN_COMPONENT, 0, DC, &domainCompTypesBlob },
|
||||
{ 5, szOID_DESCRIPTION, 0, Description, NULL },
|
||||
{ 5, szOID_POSTAL_CODE, 0, PostalCode, NULL },
|
||||
{ 5, szOID_POST_OFFICE_BOX, 0, POBox, NULL },
|
||||
{ 5, szOID_TELEPHONE_NUMBER, 0, Phone, &printableStringBlob },
|
||||
{ 5, szOID_X21_ADDRESS, 0, X21Address, &numericStringBlob },
|
||||
{ 5, szOID_DN_QUALIFIER, 0, dnQualifier, NULL },
|
||||
|
||||
{ 6, szOID_AUTHORITY_KEY_IDENTIFIER2, 0, (LPCWSTR)IDS_AUTHORITY_KEY_ID, NULL },
|
||||
{ 6, szOID_AUTHORITY_KEY_IDENTIFIER, 0, (LPCWSTR)IDS_AUTHORITY_KEY_ID, NULL },
|
||||
{ 6, szOID_KEY_ATTRIBUTES, 0, (LPCWSTR)IDS_KEY_ATTRIBUTES, NULL },
|
||||
{ 6, szOID_KEY_USAGE_RESTRICTION, 0, (LPCWSTR)IDS_KEY_USAGE_RESTRICTION, NULL },
|
||||
{ 6, szOID_SUBJECT_ALT_NAME2, 0, (LPCWSTR)IDS_SUBJECT_ALT_NAME, NULL },
|
||||
{ 6, szOID_SUBJECT_ALT_NAME, 0, (LPCWSTR)IDS_SUBJECT_ALT_NAME, NULL },
|
||||
{ 6, szOID_ISSUER_ALT_NAME2, 0, (LPCWSTR)IDS_ISSUER_ALT_NAME, NULL },
|
||||
{ 6, szOID_ISSUER_ALT_NAME2, 0, (LPCWSTR)IDS_ISSUER_ALT_NAME, NULL },
|
||||
{ 6, szOID_BASIC_CONSTRAINTS2, 0, (LPCWSTR)IDS_BASIC_CONSTRAINTS, NULL },
|
||||
{ 6, szOID_BASIC_CONSTRAINTS, 0, (LPCWSTR)IDS_BASIC_CONSTRAINTS, NULL },
|
||||
{ 6, szOID_KEY_USAGE, 0, (LPCWSTR)IDS_KEY_USAGE, NULL },
|
||||
{ 6, szOID_CERT_POLICIES, 0, (LPCWSTR)IDS_CERT_POLICIES, NULL },
|
||||
{ 6, szOID_SUBJECT_KEY_IDENTIFIER, 0, (LPCWSTR)IDS_SUBJECT_KEY_IDENTIFIER, NULL },
|
||||
{ 6, szOID_CRL_REASON_CODE, 0, (LPCWSTR)IDS_CRL_REASON_CODE, NULL },
|
||||
{ 6, szOID_CRL_DIST_POINTS, 0, (LPCWSTR)IDS_CRL_DIST_POINTS, NULL },
|
||||
{ 6, szOID_ENHANCED_KEY_USAGE, 0, (LPCWSTR)IDS_ENHANCED_KEY_USAGE, NULL },
|
||||
{ 6, szOID_AUTHORITY_INFO_ACCESS, 0, (LPCWSTR)IDS_AUTHORITY_INFO_ACCESS, NULL },
|
||||
{ 6, szOID_CERT_EXTENSIONS, 0, (LPCWSTR)IDS_CERT_EXTENSIONS, NULL },
|
||||
{ 6, szOID_RSA_certExtensions, 0, (LPCWSTR)IDS_CERT_EXTENSIONS, NULL },
|
||||
{ 6, szOID_NEXT_UPDATE_LOCATION, 0, (LPCWSTR)IDS_NEXT_UPDATE_LOCATION, NULL },
|
||||
{ 6, szOID_YESNO_TRUST_ATTR, 0, (LPCWSTR)IDS_YES_OR_NO_TRUST, NULL },
|
||||
{ 6, szOID_RSA_emailAddr, 0, (LPCWSTR)IDS_EMAIL_ADDRESS, NULL },
|
||||
{ 6, szOID_RSA_unstructName, 0, (LPCWSTR)IDS_UNSTRUCTURED_NAME, NULL },
|
||||
{ 6, szOID_RSA_contentType, 0, (LPCWSTR)IDS_CONTENT_TYPE, NULL },
|
||||
{ 6, szOID_RSA_messageDigest, 0, (LPCWSTR)IDS_MESSAGE_DIGEST, NULL },
|
||||
{ 6, szOID_RSA_signingTime, 0, (LPCWSTR)IDS_SIGNING_TIME, NULL },
|
||||
{ 6, szOID_RSA_counterSign, 0, (LPCWSTR)IDS_COUNTER_SIGN, NULL },
|
||||
{ 6, szOID_RSA_challengePwd, 0, (LPCWSTR)IDS_CHALLENGE_PASSWORD, NULL },
|
||||
{ 6, szOID_RSA_unstructAddr, 0, (LPCWSTR)IDS_UNSTRUCTURED_ADDRESS, NULL },
|
||||
{ 6, szOID_RSA_SMIMECapabilities, 0, (LPCWSTR)IDS_SMIME_CAPABILITIES, NULL },
|
||||
{ 6, szOID_RSA_preferSignedData, 0, (LPCWSTR)IDS_PREFER_SIGNED_DATA, NULL },
|
||||
{ 6, szOID_PKIX_POLICY_QUALIFIER_CPS, 0, (LPCWSTR)IDS_CPS, NULL },
|
||||
{ 6, szOID_PKIX_POLICY_QUALIFIER_USERNOTICE, 0, (LPCWSTR)IDS_USER_NOTICE, NULL },
|
||||
{ 6, szOID_PKIX_OCSP, 0, (LPCWSTR)IDS_OCSP, NULL },
|
||||
{ 6, szOID_PKIX_CA_ISSUERS, 0, (LPCWSTR)IDS_CA_ISSUER, NULL },
|
||||
{ 6, szOID_ENROLL_CERTTYPE_EXTENSION, 0, (LPCWSTR)IDS_CERT_TEMPLATE_NAME, NULL },
|
||||
{ 6, szOID_ENROLL_CERTTYPE_EXTENSION, 0, (LPCWSTR)IDS_CERT_TYPE, NULL },
|
||||
{ 6, szOID_CERT_MANIFOLD, 0, (LPCWSTR)IDS_CERT_MANIFOLD, NULL },
|
||||
{ 6, szOID_NETSCAPE_CERT_TYPE, 0, (LPCWSTR)IDS_NETSCAPE_CERT_TYPE, NULL },
|
||||
{ 6, szOID_NETSCAPE_BASE_URL, 0, (LPCWSTR)IDS_NETSCAPE_BASE_URL, NULL },
|
||||
{ 6, szOID_NETSCAPE_REVOCATION_URL, 0, (LPCWSTR)IDS_NETSCAPE_REVOCATION_URL, NULL },
|
||||
{ 6, szOID_NETSCAPE_CA_REVOCATION_URL, 0, (LPCWSTR)IDS_NETSCAPE_CA_REVOCATION_URL, NULL },
|
||||
{ 6, szOID_NETSCAPE_CERT_RENEWAL_URL, 0, (LPCWSTR)IDS_NETSCAPE_CERT_RENEWAL_URL, NULL },
|
||||
{ 6, szOID_NETSCAPE_CA_POLICY_URL, 0, (LPCWSTR)IDS_NETSCAPE_CA_POLICY_URL, NULL },
|
||||
{ 6, szOID_NETSCAPE_SSL_SERVER_NAME, 0, (LPCWSTR)IDS_NETSCAPE_SSL_SERVER_NAME, NULL },
|
||||
{ 6, szOID_NETSCAPE_COMMENT, 0, (LPCWSTR)IDS_NETSCAPE_COMMENT, NULL },
|
||||
{ 6, "1.3.6.1.4.1.311.2.1.10", 0, (LPCWSTR)IDS_SPC_SP_AGENCY_INFO, NULL },
|
||||
{ 6, "1.3.6.1.4.1.311.2.1.27", 0, (LPCWSTR)IDS_SPC_FINANCIAL_CRITERIA, NULL },
|
||||
{ 6, "1.3.6.1.4.1.311.2.1.26", 0, (LPCWSTR)IDS_SPC_MINIMAL_CRITERIA, NULL },
|
||||
{ 6, szOID_COUNTRY_NAME, 0, (LPCWSTR)IDS_COUNTRY, NULL },
|
||||
{ 6, szOID_ORGANIZATION_NAME, 0, (LPCWSTR)IDS_ORGANIZATION, NULL },
|
||||
{ 6, szOID_ORGANIZATIONAL_UNIT_NAME, 0, (LPCWSTR)IDS_ORGANIZATIONAL_UNIT, NULL },
|
||||
{ 6, szOID_COMMON_NAME, 0, (LPCWSTR)IDS_COMMON_NAME, NULL },
|
||||
{ 6, szOID_LOCALITY_NAME, 0, (LPCWSTR)IDS_LOCALITY, NULL },
|
||||
{ 6, szOID_STATE_OR_PROVINCE_NAME, 0, (LPCWSTR)IDS_STATE_OR_PROVINCE, NULL },
|
||||
{ 6, szOID_TITLE, 0, (LPCWSTR)IDS_TITLE, NULL },
|
||||
{ 6, szOID_GIVEN_NAME, 0, (LPCWSTR)IDS_GIVEN_NAME, NULL },
|
||||
{ 6, szOID_INITIALS, 0, (LPCWSTR)IDS_INITIALS, NULL },
|
||||
{ 6, szOID_SUR_NAME, 0, (LPCWSTR)IDS_SUR_NAME, NULL },
|
||||
{ 6, szOID_DOMAIN_COMPONENT, 0, (LPCWSTR)IDS_DOMAIN_COMPONENT, NULL },
|
||||
{ 6, szOID_STREET_ADDRESS, 0, (LPCWSTR)IDS_STREET_ADDRESS, NULL },
|
||||
{ 6, szOID_DEVICE_SERIAL_NUMBER, 0, (LPCWSTR)IDS_SERIAL_NUMBER, NULL },
|
||||
{ 6, szOID_CERTSRV_CA_VERSION, 0, (LPCWSTR)IDS_CA_VERSION, NULL },
|
||||
{ 6, szOID_CERTSRV_CROSSCA_VERSION, 0, (LPCWSTR)IDS_CROSS_CA_VERSION, NULL },
|
||||
{ 6, szOID_SERIALIZED, 0, (LPCWSTR)IDS_SERIALIZED_SIG_SERIAL_NUMBER, NULL },
|
||||
{ 6, szOID_NT_PRINCIPAL_NAME, 0, (LPCWSTR)IDS_PRINCIPAL_NAME, NULL },
|
||||
{ 6, szOID_PRODUCT_UPDATE, 0, (LPCWSTR)IDS_WINDOWS_PRODUCT_UPDATE, NULL },
|
||||
{ 6, szOID_ENROLLMENT_NAME_VALUE_PAIR, 0, (LPCWSTR)IDS_ENROLLMENT_NAME_VALUE_PAIR, NULL },
|
||||
{ 6, szOID_OS_VERSION, 0, (LPCWSTR)IDS_OS_VERSION, NULL },
|
||||
{ 6, szOID_ENROLLMENT_CSP_PROVIDER, 0, (LPCWSTR)IDS_ENROLLMENT_CSP, NULL },
|
||||
{ 6, szOID_CRL_NUMBER, 0, (LPCWSTR)IDS_CRL_NUMBER, NULL },
|
||||
{ 6, szOID_DELTA_CRL_INDICATOR, 0, (LPCWSTR)IDS_DELTA_CRL_INDICATOR, NULL },
|
||||
{ 6, szOID_ISSUING_DIST_POINT, 0, (LPCWSTR)IDS_ISSUING_DIST_POINT, NULL },
|
||||
{ 6, szOID_FRESHEST_CRL, 0, (LPCWSTR)IDS_FRESHEST_CRL, NULL },
|
||||
{ 6, szOID_NAME_CONSTRAINTS, 0, (LPCWSTR)IDS_NAME_CONSTRAINTS, NULL },
|
||||
{ 6, szOID_POLICY_MAPPINGS, 0, (LPCWSTR)IDS_POLICY_MAPPINGS, NULL },
|
||||
{ 6, szOID_LEGACY_POLICY_MAPPINGS, 0, (LPCWSTR)IDS_POLICY_MAPPINGS, NULL },
|
||||
{ 6, szOID_POLICY_CONSTRAINTS, 0, (LPCWSTR)IDS_POLICY_CONSTRAINTS, NULL },
|
||||
{ 6, szOID_CROSS_CERT_DIST_POINTS, 0, (LPCWSTR)IDS_CROSS_CERT_DIST_POINTS, NULL },
|
||||
{ 6, szOID_APPLICATION_CERT_POLICIES, 0, (LPCWSTR)IDS_APPLICATION_POLICIES, NULL },
|
||||
{ 6, szOID_APPLICATION_POLICY_MAPPINGS, 0, (LPCWSTR)IDS_APPLICATION_POLICY_MAPPINGS, NULL },
|
||||
{ 6, szOID_APPLICATION_POLICY_CONSTRAINTS, 0, (LPCWSTR)IDS_APPLICATION_POLICY_CONSTRAINTS, NULL },
|
||||
{ 6, szOID_CT_PKI_DATA, 0, (LPCWSTR)IDS_CMC_DATA, NULL },
|
||||
{ 6, szOID_CT_PKI_RESPONSE, 0, (LPCWSTR)IDS_CMC_RESPONSE, NULL },
|
||||
{ 6, szOID_CMC, 0, (LPCWSTR)IDS_UNSIGNED_CMC_REQUEST, NULL },
|
||||
{ 6, szOID_CMC_STATUS_INFO, 0, (LPCWSTR)IDS_CMC_STATUS_INFO, NULL },
|
||||
{ 6, szOID_CMC_ADD_EXTENSIONS, 0, (LPCWSTR)IDS_CMC_EXTENSIONS, NULL },
|
||||
{ 6, szOID_CTL, 0, (LPCWSTR)IDS_CMC_ATTRIBUTES, NULL },
|
||||
{ 6, szOID_RSA_data, 0, (LPCWSTR)IDS_PKCS_7_DATA, NULL },
|
||||
{ 6, szOID_RSA_signedData, 0, (LPCWSTR)IDS_PKCS_7_SIGNED, NULL },
|
||||
{ 6, szOID_RSA_envelopedData, 0, (LPCWSTR)IDS_PKCS_7_ENVELOPED, NULL },
|
||||
{ 6, szOID_RSA_signEnvData, 0, (LPCWSTR)IDS_PKCS_7_SIGNED_ENVELOPED, NULL },
|
||||
{ 6, szOID_RSA_digestedData, 0, (LPCWSTR)IDS_PKCS_7_DIGESTED, NULL },
|
||||
{ 6, szOID_RSA_encryptedData, 0, (LPCWSTR)IDS_PKCS_7_ENCRYPTED, NULL },
|
||||
{ 6, szOID_CERTSRV_PREVIOUS_CERT_HASH, 0, (LPCWSTR)IDS_PREVIOUS_CA_CERT_HASH, NULL },
|
||||
{ 6, szOID_CRL_VIRTUAL_BASE, 0, (LPCWSTR)IDS_CRL_VIRTUAL_BASE, NULL },
|
||||
{ 6, szOID_CRL_NEXT_PUBLISH, 0, (LPCWSTR)IDS_CRL_NEXT_PUBLISH, NULL },
|
||||
{ 6, szOID_KP_CA_EXCHANGE, 0, (LPCWSTR)IDS_CA_EXCHANGE, NULL },
|
||||
{ 6, szOID_KP_KEY_RECOVERY_AGENT, 0, (LPCWSTR)IDS_KEY_RECOVERY_AGENT, NULL },
|
||||
{ 6, szOID_CERTIFICATE_TEMPLATE, 0, (LPCWSTR)IDS_CERTIFICATE_TEMPLATE, NULL },
|
||||
{ 6, szOID_ENTERPRISE_OID_ROOT, 0, (LPCWSTR)IDS_ENTERPRISE_ROOT_OID, NULL },
|
||||
{ 6, szOID_RDN_DUMMY_SIGNER, 0, (LPCWSTR)IDS_RDN_DUMMY_SIGNER, NULL },
|
||||
{ 6, szOID_ARCHIVED_KEY_ATTR, 0, (LPCWSTR)IDS_ARCHIVED_KEY_ATTR, NULL },
|
||||
{ 6, szOID_CRL_SELF_CDP, 0, (LPCWSTR)IDS_CRL_SELF_CDP, NULL },
|
||||
{ 6, szOID_REQUIRE_CERT_CHAIN_POLICY, 0, (LPCWSTR)IDS_REQUIRE_CERT_CHAIN_POLICY, NULL },
|
||||
{ 6, szOID_CMC_TRANSACTION_ID, 0, (LPCWSTR)IDS_TRANSACTION_ID, NULL },
|
||||
{ 6, szOID_CMC_SENDER_NONCE, 0, (LPCWSTR)IDS_SENDER_NONCE, NULL },
|
||||
{ 6, szOID_CMC_RECIPIENT_NONCE, 0, (LPCWSTR)IDS_RECIPIENT_NONCE, NULL },
|
||||
{ 6, szOID_CMC_REG_INFO, 0, (LPCWSTR)IDS_REG_INFO, NULL },
|
||||
{ 6, szOID_CMC_GET_CERT, 0, (LPCWSTR)IDS_GET_CERTIFICATE, NULL },
|
||||
{ 6, szOID_CMC_GET_CRL, 0, (LPCWSTR)IDS_GET_CRL, NULL },
|
||||
{ 6, szOID_CMC_REVOKE_REQUEST, 0, (LPCWSTR)IDS_REVOKE_REQUEST, NULL },
|
||||
{ 6, szOID_CMC_QUERY_PENDING, 0, (LPCWSTR)IDS_QUERY_PENDING, NULL },
|
||||
{ 6, szOID_SORTED_CTL, 0, (LPCWSTR)IDS_SORTED_CTL, NULL },
|
||||
{ 6, szOID_ARCHIVED_KEY_CERT_HASH, 0, (LPCWSTR)IDS_ARCHIVED_KEY_CERT_HASH, NULL },
|
||||
{ 6, szOID_PRIVATEKEY_USAGE_PERIOD, 0, (LPCWSTR)IDS_PRIVATE_KEY_USAGE_PERIOD, NULL },
|
||||
{ 6, szOID_REQUEST_CLIENT_INFO, 0, (LPCWSTR)IDS_CLIENT_INFORMATION, NULL },
|
||||
|
||||
{ 7, szOID_PKIX_KP_SERVER_AUTH, 0, (LPCWSTR)IDS_SERVER_AUTHENTICATION, NULL },
|
||||
{ 7, szOID_PKIX_KP_CLIENT_AUTH, 0, (LPCWSTR)IDS_CLIENT_AUTHENTICATION, NULL },
|
||||
{ 7, szOID_PKIX_KP_CODE_SIGNING, 0, (LPCWSTR)IDS_CODE_SIGNING, NULL },
|
||||
{ 7, szOID_PKIX_KP_EMAIL_PROTECTION, 0, (LPCWSTR)IDS_SECURE_EMAIL, NULL },
|
||||
{ 7, szOID_PKIX_KP_TIMESTAMP_SIGNING, 0, (LPCWSTR)IDS_TIME_STAMPING, NULL },
|
||||
{ 7, szOID_KP_CTL_USAGE_SIGNING, 0, (LPCWSTR)IDS_MICROSOFT_TRUST_LIST_SIGNING, NULL },
|
||||
{ 7, szOID_KP_TIME_STAMP_SIGNING, 0, (LPCWSTR)IDS_MICROSOFT_TIME_STAMPING, NULL },
|
||||
{ 7, szOID_PKIX_KP_IPSEC_END_SYSTEM, 0, (LPCWSTR)IDS_IPSEC_END_SYSTEM, NULL },
|
||||
{ 7, szOID_PKIX_KP_IPSEC_TUNNEL, 0, (LPCWSTR)IDS_IPSEC_TUNNEL, NULL },
|
||||
{ 7, szOID_PKIX_KP_IPSEC_USER, 0, (LPCWSTR)IDS_IPSEC_USER, NULL },
|
||||
{ 7, szOID_KP_EFS, 0, (LPCWSTR)IDS_EFS, NULL },
|
||||
{ 7, szOID_WHQL_CRYPTO, 0, (LPCWSTR)IDS_WHQL_CRYPTO, NULL },
|
||||
{ 7, szOID_NT5_CRYPTO, 0, (LPCWSTR)IDS_NT5_CRYPTO, NULL },
|
||||
{ 7, szOID_OEM_WHQL_CRYPTO, 0, (LPCWSTR)IDS_OEM_WHQL_CRYPTO, NULL },
|
||||
{ 7, szOID_EMBEDDED_NT_CRYPTO, 0, (LPCWSTR)IDS_EMBEDDED_NT_CRYPTO, NULL },
|
||||
{ 7, szOID_LICENSES, 0, (LPCWSTR)IDS_KEY_PACK_LICENSES, NULL },
|
||||
{ 7, szOID_LICENSE_SERVER, 0, (LPCWSTR)IDS_LICENSE_SERVER, NULL },
|
||||
{ 7, szOID_KP_SMARTCARD_LOGON, 0, (LPCWSTR)IDS_SMART_CARD_LOGON, NULL },
|
||||
{ 7, szOID_DRM, 0, (LPCWSTR)IDS_DIGITAL_RIGHTS, NULL },
|
||||
{ 7, szOID_KP_QUALIFIED_SUBORDINATION, 0, (LPCWSTR)IDS_QUALIFIED_SUBORDINATION, NULL },
|
||||
{ 7, szOID_KP_KEY_RECOVERY, 0, (LPCWSTR)IDS_KEY_RECOVERY, NULL },
|
||||
{ 7, szOID_KP_DOCUMENT_SIGNING, 0, (LPCWSTR)IDS_DOCUMENT_SIGNING, NULL },
|
||||
{ 7, szOID_IPSEC_KP_IKE_INTERMEDIATE, 0, (LPCWSTR)IDS_IPSEC_IKE_INTERMEDIATE, NULL },
|
||||
{ 7, szOID_EFS_RECOVERY, 0, (LPCWSTR)IDS_FILE_RECOVERY, NULL },
|
||||
{ 7, szOID_ROOT_LIST_SIGNER, 0, (LPCWSTR)IDS_ROOT_LIST_SIGNER, NULL },
|
||||
{ 7, szOID_ANY_APPLICATION_POLICY, 0, (LPCWSTR)IDS_ANY_APPLICATION_POLICIES, NULL },
|
||||
{ 7, szOID_DS_EMAIL_REPLICATION, 0, (LPCWSTR)IDS_DS_EMAIL_REPLICATION, NULL },
|
||||
{ 7, szOID_ENROLLMENT_AGENT, 0, (LPCWSTR)IDS_ENROLLMENT_AGENT, NULL },
|
||||
{ 7, szOID_KP_KEY_RECOVERY_AGENT, 0, (LPCWSTR)IDS_KEY_RECOVERY_AGENT, NULL },
|
||||
{ 7, szOID_KP_CA_EXCHANGE, 0, (LPCWSTR)IDS_CA_EXCHANGE, NULL },
|
||||
{ 7, szOID_KP_LIFETIME_SIGNING, 0, (LPCWSTR)IDS_LIFETIME_SIGNING, NULL },
|
||||
|
||||
{ 8, szOID_ANY_CERT_POLICY, 0, (LPCWSTR)IDS_ANY_CERT_POLICY, NULL },
|
||||
};
|
||||
|
||||
struct OIDInfo {
|
||||
CRYPT_OID_INFO info;
|
||||
struct list entry;
|
||||
};
|
||||
|
||||
static void init_oid_info(HINSTANCE hinst)
|
||||
{
|
||||
DWORD i;
|
||||
|
||||
InitializeCriticalSection(&oidInfoCS);
|
||||
list_init(&oidInfo);
|
||||
for (i = 0; i < sizeof(oidInfoConstructors) /
|
||||
sizeof(oidInfoConstructors[0]); i++)
|
||||
{
|
||||
if (HIWORD(oidInfoConstructors[i].pwszName))
|
||||
{
|
||||
struct OIDInfo *info;
|
||||
|
||||
/* The name is a static string, so just use the same pointer */
|
||||
info = CryptMemAlloc(sizeof(struct OIDInfo));
|
||||
if (info)
|
||||
{
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->info.cbSize = sizeof(CRYPT_OID_INFO);
|
||||
info->info.pszOID = oidInfoConstructors[i].pszOID;
|
||||
info->info.pwszName = oidInfoConstructors[i].pwszName;
|
||||
info->info.dwGroupId = oidInfoConstructors[i].dwGroupId;
|
||||
info->info.u.Algid = oidInfoConstructors[i].Algid;
|
||||
if (oidInfoConstructors[i].blob)
|
||||
{
|
||||
info->info.ExtraInfo.cbData =
|
||||
oidInfoConstructors[i].blob->cbData;
|
||||
info->info.ExtraInfo.pbData =
|
||||
oidInfoConstructors[i].blob->pbData;
|
||||
}
|
||||
list_add_tail(&oidInfo, &info->entry);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int len = LoadStringW(hinst, (UINT)oidInfoConstructors[i].pwszName,
|
||||
NULL, 0);
|
||||
|
||||
if (len)
|
||||
{
|
||||
struct OIDInfo *info = CryptMemAlloc(sizeof(struct OIDInfo) +
|
||||
(len + 1) * sizeof(WCHAR));
|
||||
|
||||
if (info)
|
||||
{
|
||||
memset(info, 0, sizeof(*info));
|
||||
info->info.cbSize = sizeof(CRYPT_OID_INFO);
|
||||
info->info.pszOID = oidInfoConstructors[i].pszOID;
|
||||
info->info.pwszName =
|
||||
(LPWSTR)((LPBYTE)info + sizeof(struct OIDInfo));
|
||||
info->info.dwGroupId = oidInfoConstructors[i].dwGroupId;
|
||||
info->info.u.Algid = oidInfoConstructors[i].Algid;
|
||||
LoadStringW(hinst, (UINT)oidInfoConstructors[i].pwszName,
|
||||
(LPWSTR)info->info.pwszName, len + 1);
|
||||
if (oidInfoConstructors[i].blob)
|
||||
{
|
||||
info->info.ExtraInfo.cbData =
|
||||
oidInfoConstructors[i].blob->cbData;
|
||||
info->info.ExtraInfo.pbData =
|
||||
oidInfoConstructors[i].blob->pbData;
|
||||
}
|
||||
list_add_tail(&oidInfo, &info->entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void free_oid_info(void)
|
||||
{
|
||||
struct OIDInfo *info, *next;
|
||||
|
||||
LIST_FOR_EACH_ENTRY_SAFE(info, next, &oidInfo, struct OIDInfo, entry)
|
||||
{
|
||||
list_remove(&info->entry);
|
||||
CryptMemFree(info);
|
||||
}
|
||||
DeleteCriticalSection(&oidInfoCS);
|
||||
}
|
||||
|
||||
BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg,
|
||||
PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo)
|
||||
{
|
||||
BOOL ret = TRUE;
|
||||
struct OIDInfo *info;
|
||||
|
||||
TRACE("(%ld, %08lx, %p, %p)\n", dwGroupId, dwFlags, pvArg,
|
||||
pfnEnumOIDInfo);
|
||||
|
||||
EnterCriticalSection(&oidInfoCS);
|
||||
LIST_FOR_EACH_ENTRY(info, &oidInfo, struct OIDInfo, entry)
|
||||
{
|
||||
if (!dwGroupId || dwGroupId == info->info.dwGroupId)
|
||||
{
|
||||
ret = pfnEnumOIDInfo(&info->info, pvArg);
|
||||
if (!ret)
|
||||
break;
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&oidInfoCS);
|
||||
return ret;
|
||||
}
|
||||
|
||||
PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
|
||||
DWORD dwGroupId)
|
||||
{
|
||||
PCCRYPT_OID_INFO ret = NULL;
|
||||
|
||||
TRACE("(%ld, %p, %ld)\n", dwKeyType, pvKey, dwGroupId);
|
||||
|
||||
switch(dwKeyType)
|
||||
{
|
||||
case CRYPT_OID_INFO_ALGID_KEY:
|
||||
{
|
||||
struct OIDInfo *info;
|
||||
|
||||
EnterCriticalSection(&oidInfoCS);
|
||||
LIST_FOR_EACH_ENTRY(info, &oidInfo, struct OIDInfo, entry)
|
||||
{
|
||||
if (info->info.u.Algid == *(DWORD *)pvKey &&
|
||||
(!dwGroupId || info->info.dwGroupId == dwGroupId))
|
||||
{
|
||||
ret = &info->info;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&oidInfoCS);
|
||||
break;
|
||||
}
|
||||
case CRYPT_OID_INFO_NAME_KEY:
|
||||
{
|
||||
struct OIDInfo *info;
|
||||
|
||||
EnterCriticalSection(&oidInfoCS);
|
||||
LIST_FOR_EACH_ENTRY(info, &oidInfo, struct OIDInfo, entry)
|
||||
{
|
||||
if (!lstrcmpW(info->info.pwszName, (LPWSTR)pvKey) &&
|
||||
(!dwGroupId || info->info.dwGroupId == dwGroupId))
|
||||
{
|
||||
ret = &info->info;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&oidInfoCS);
|
||||
break;
|
||||
}
|
||||
case CRYPT_OID_INFO_OID_KEY:
|
||||
{
|
||||
struct OIDInfo *info;
|
||||
LPSTR oid = (LPSTR)pvKey;
|
||||
|
||||
EnterCriticalSection(&oidInfoCS);
|
||||
LIST_FOR_EACH_ENTRY(info, &oidInfo, struct OIDInfo, entry)
|
||||
{
|
||||
if (!lstrcmpA(info->info.pszOID, oid) &&
|
||||
(!dwGroupId || info->info.dwGroupId == dwGroupId))
|
||||
{
|
||||
ret = &info->info;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&oidInfoCS);
|
||||
break;
|
||||
}
|
||||
case CRYPT_OID_INFO_SIGN_KEY:
|
||||
{
|
||||
struct OIDInfo *info;
|
||||
|
||||
EnterCriticalSection(&oidInfoCS);
|
||||
LIST_FOR_EACH_ENTRY(info, &oidInfo, struct OIDInfo, entry)
|
||||
{
|
||||
if (info->info.u.Algid == *(DWORD *)pvKey &&
|
||||
info->info.ExtraInfo.cbData >= sizeof(DWORD) &&
|
||||
*(DWORD *)info->info.ExtraInfo.pbData ==
|
||||
*(DWORD *)((LPBYTE)pvKey + sizeof(DWORD)) &&
|
||||
(!dwGroupId || info->info.dwGroupId == dwGroupId))
|
||||
{
|
||||
ret = &info->info;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&oidInfoCS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId)
|
||||
{
|
||||
LPCSTR ret;
|
||||
PCCRYPT_OID_INFO info = CryptFindOIDInfo(CRYPT_OID_INFO_ALGID_KEY,
|
||||
&dwAlgId, 0);
|
||||
|
||||
if (info)
|
||||
ret = info->pszOID;
|
||||
else
|
||||
ret = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId)
|
||||
{
|
||||
DWORD ret;
|
||||
PCCRYPT_OID_INFO info = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY,
|
||||
(void *)pszObjId, 0);
|
||||
|
||||
if (info)
|
||||
ret = info->u.Algid;
|
||||
else
|
||||
ret = 0;
|
||||
return ret;
|
||||
}
|
||||
|
|
215
reactos/dll/win32/crypt32/proplist.c
Normal file
215
reactos/dll/win32/crypt32/proplist.c
Normal file
|
@ -0,0 +1,215 @@
|
|||
/*
|
||||
* Copyright 2004-2006 Juan Lang
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "wincrypt.h"
|
||||
#include "wine/debug.h"
|
||||
#include "wine/list.h"
|
||||
#include "crypt32_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
||||
|
||||
typedef struct _CONTEXT_PROPERTY_LIST
|
||||
{
|
||||
CRITICAL_SECTION cs;
|
||||
struct list properties;
|
||||
} CONTEXT_PROPERTY_LIST;
|
||||
|
||||
typedef struct _CONTEXT_PROPERTY
|
||||
{
|
||||
DWORD propID;
|
||||
DWORD cbData;
|
||||
LPBYTE pbData;
|
||||
struct list entry;
|
||||
} CONTEXT_PROPERTY, *PCONTEXT_PROPERTY;
|
||||
|
||||
PCONTEXT_PROPERTY_LIST ContextPropertyList_Create(void)
|
||||
{
|
||||
PCONTEXT_PROPERTY_LIST list = CryptMemAlloc(sizeof(CONTEXT_PROPERTY_LIST));
|
||||
|
||||
if (list)
|
||||
{
|
||||
InitializeCriticalSection(&list->cs);
|
||||
list_init(&list->properties);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
void ContextPropertyList_Free(PCONTEXT_PROPERTY_LIST list)
|
||||
{
|
||||
PCONTEXT_PROPERTY prop, next;
|
||||
|
||||
LIST_FOR_EACH_ENTRY_SAFE(prop, next, &list->properties, CONTEXT_PROPERTY,
|
||||
entry)
|
||||
{
|
||||
list_remove(&prop->entry);
|
||||
CryptMemFree(prop->pbData);
|
||||
CryptMemFree(prop);
|
||||
}
|
||||
DeleteCriticalSection(&list->cs);
|
||||
CryptMemFree(list);
|
||||
}
|
||||
|
||||
BOOL ContextPropertyList_FindProperty(PCONTEXT_PROPERTY_LIST list, DWORD id,
|
||||
PCRYPT_DATA_BLOB blob)
|
||||
{
|
||||
PCONTEXT_PROPERTY prop;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("(%p, %ld, %p)\n", list, id, blob);
|
||||
|
||||
EnterCriticalSection(&list->cs);
|
||||
LIST_FOR_EACH_ENTRY(prop, &list->properties, CONTEXT_PROPERTY, entry)
|
||||
{
|
||||
if (prop->propID == id)
|
||||
{
|
||||
blob->cbData = prop->cbData;
|
||||
blob->pbData = prop->pbData;
|
||||
ret = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&list->cs);
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL ContextPropertyList_SetProperty(PCONTEXT_PROPERTY_LIST list, DWORD id,
|
||||
const BYTE *pbData, size_t cbData)
|
||||
{
|
||||
LPBYTE data;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (cbData)
|
||||
{
|
||||
data = CryptMemAlloc(cbData);
|
||||
if (data)
|
||||
memcpy(data, pbData, cbData);
|
||||
}
|
||||
else
|
||||
data = NULL;
|
||||
if (!cbData || data)
|
||||
{
|
||||
PCONTEXT_PROPERTY prop;
|
||||
BOOL found = FALSE;
|
||||
|
||||
EnterCriticalSection(&list->cs);
|
||||
LIST_FOR_EACH_ENTRY(prop, &list->properties, CONTEXT_PROPERTY, entry)
|
||||
{
|
||||
if (prop->propID == id)
|
||||
{
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found)
|
||||
{
|
||||
CryptMemFree(prop->pbData);
|
||||
prop->cbData = cbData;
|
||||
prop->pbData = data;
|
||||
ret = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
prop = CryptMemAlloc(sizeof(CONTEXT_PROPERTY));
|
||||
if (prop)
|
||||
{
|
||||
prop->propID = id;
|
||||
prop->cbData = cbData;
|
||||
list_init(&prop->entry);
|
||||
prop->pbData = data;
|
||||
list_add_tail(&list->properties, &prop->entry);
|
||||
ret = TRUE;
|
||||
}
|
||||
else
|
||||
CryptMemFree(data);
|
||||
}
|
||||
LeaveCriticalSection(&list->cs);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ContextPropertyList_RemoveProperty(PCONTEXT_PROPERTY_LIST list, DWORD id)
|
||||
{
|
||||
PCONTEXT_PROPERTY prop, next;
|
||||
|
||||
EnterCriticalSection(&list->cs);
|
||||
LIST_FOR_EACH_ENTRY_SAFE(prop, next, &list->properties, CONTEXT_PROPERTY,
|
||||
entry)
|
||||
{
|
||||
if (prop->propID == id)
|
||||
{
|
||||
list_remove(&prop->entry);
|
||||
CryptMemFree(prop->pbData);
|
||||
CryptMemFree(prop);
|
||||
}
|
||||
}
|
||||
LeaveCriticalSection(&list->cs);
|
||||
}
|
||||
|
||||
/* Since the properties are stored in a list, this is a tad inefficient
|
||||
* (O(n^2)) since I have to find the previous position every time.
|
||||
*/
|
||||
DWORD ContextPropertyList_EnumPropIDs(PCONTEXT_PROPERTY_LIST list, DWORD id)
|
||||
{
|
||||
DWORD ret;
|
||||
|
||||
EnterCriticalSection(&list->cs);
|
||||
if (id)
|
||||
{
|
||||
PCONTEXT_PROPERTY cursor = NULL;
|
||||
|
||||
LIST_FOR_EACH_ENTRY(cursor, &list->properties, CONTEXT_PROPERTY, entry)
|
||||
{
|
||||
if (cursor->propID == id)
|
||||
break;
|
||||
}
|
||||
if (cursor)
|
||||
{
|
||||
if (cursor->entry.next != &list->properties)
|
||||
ret = LIST_ENTRY(cursor->entry.next, CONTEXT_PROPERTY,
|
||||
entry)->propID;
|
||||
else
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
ret = 0;
|
||||
}
|
||||
else if (!list_empty(&list->properties))
|
||||
ret = LIST_ENTRY(list->properties.next, CONTEXT_PROPERTY,
|
||||
entry)->propID;
|
||||
else
|
||||
ret = 0;
|
||||
LeaveCriticalSection(&list->cs);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ContextPropertyList_Copy(PCONTEXT_PROPERTY_LIST to,
|
||||
PCONTEXT_PROPERTY_LIST from)
|
||||
{
|
||||
PCONTEXT_PROPERTY prop;
|
||||
|
||||
EnterCriticalSection(&from->cs);
|
||||
LIST_FOR_EACH_ENTRY(prop, &from->properties, CONTEXT_PROPERTY, entry)
|
||||
{
|
||||
ContextPropertyList_SetProperty(to, prop->propID, prop->pbData,
|
||||
prop->cbData);
|
||||
}
|
||||
LeaveCriticalSection(&from->cs);
|
||||
}
|
515
reactos/dll/win32/crypt32/serialize.c
Normal file
515
reactos/dll/win32/crypt32/serialize.c
Normal file
|
@ -0,0 +1,515 @@
|
|||
/*
|
||||
* Copyright 2004-2006 Juan Lang
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "wincrypt.h"
|
||||
#include "wine/debug.h"
|
||||
#include "excpt.h"
|
||||
#include "wine/exception.h"
|
||||
#include "crypt32_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
||||
|
||||
/* Some typedefs that make it easier to abstract which type of context we're
|
||||
* working with.
|
||||
*/
|
||||
typedef const void *(WINAPI *CreateContextFunc)(DWORD dwCertEncodingType,
|
||||
const BYTE *pbCertEncoded, DWORD cbCertEncoded);
|
||||
typedef BOOL (WINAPI *AddContextToStoreFunc)(HCERTSTORE hCertStore,
|
||||
const void *context, DWORD dwAddDisposition, const void **ppStoreContext);
|
||||
typedef BOOL (WINAPI *AddEncodedContextToStoreFunc)(HCERTSTORE hCertStore,
|
||||
DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded,
|
||||
DWORD dwAddDisposition, const void **ppContext);
|
||||
typedef const void *(WINAPI *EnumContextsInStoreFunc)(HCERTSTORE hCertStore,
|
||||
const void *pPrevContext);
|
||||
typedef BOOL (WINAPI *GetContextPropertyFunc)(const void *context,
|
||||
DWORD dwPropID, void *pvData, DWORD *pcbData);
|
||||
typedef BOOL (WINAPI *SetContextPropertyFunc)(const void *context,
|
||||
DWORD dwPropID, DWORD dwFlags, const void *pvData);
|
||||
typedef BOOL (WINAPI *SerializeElementFunc)(const void *context, DWORD dwFlags,
|
||||
BYTE *pbElement, DWORD *pcbElement);
|
||||
typedef BOOL (WINAPI *FreeContextFunc)(const void *context);
|
||||
typedef BOOL (WINAPI *DeleteContextFunc)(const void *context);
|
||||
|
||||
/* An abstract context (certificate, CRL, or CTL) interface */
|
||||
typedef struct _WINE_CONTEXT_INTERFACE
|
||||
{
|
||||
CreateContextFunc create;
|
||||
AddContextToStoreFunc addContextToStore;
|
||||
AddEncodedContextToStoreFunc addEncodedToStore;
|
||||
EnumContextsInStoreFunc enumContextsInStore;
|
||||
GetContextPropertyFunc getProp;
|
||||
SetContextPropertyFunc setProp;
|
||||
SerializeElementFunc serialize;
|
||||
FreeContextFunc free;
|
||||
DeleteContextFunc deleteFromStore;
|
||||
} WINE_CONTEXT_INTERFACE, *PWINE_CONTEXT_INTERFACE;
|
||||
|
||||
static const WINE_CONTEXT_INTERFACE gCertInterface = {
|
||||
(CreateContextFunc)CertCreateCertificateContext,
|
||||
(AddContextToStoreFunc)CertAddCertificateContextToStore,
|
||||
(AddEncodedContextToStoreFunc)CertAddEncodedCertificateToStore,
|
||||
(EnumContextsInStoreFunc)CertEnumCertificatesInStore,
|
||||
(GetContextPropertyFunc)CertGetCertificateContextProperty,
|
||||
(SetContextPropertyFunc)CertSetCertificateContextProperty,
|
||||
(SerializeElementFunc)CertSerializeCertificateStoreElement,
|
||||
(FreeContextFunc)CertFreeCertificateContext,
|
||||
(DeleteContextFunc)CertDeleteCertificateFromStore,
|
||||
};
|
||||
|
||||
static const WINE_CONTEXT_INTERFACE gCRLInterface = {
|
||||
(CreateContextFunc)CertCreateCRLContext,
|
||||
(AddContextToStoreFunc)CertAddCRLContextToStore,
|
||||
(AddEncodedContextToStoreFunc)CertAddEncodedCRLToStore,
|
||||
(EnumContextsInStoreFunc)CertEnumCRLsInStore,
|
||||
(GetContextPropertyFunc)CertGetCRLContextProperty,
|
||||
(SetContextPropertyFunc)CertSetCRLContextProperty,
|
||||
(SerializeElementFunc)CertSerializeCRLStoreElement,
|
||||
(FreeContextFunc)CertFreeCRLContext,
|
||||
(DeleteContextFunc)CertDeleteCRLFromStore,
|
||||
};
|
||||
|
||||
static const WINE_CONTEXT_INTERFACE gCTLInterface = {
|
||||
(CreateContextFunc)CertCreateCTLContext,
|
||||
(AddContextToStoreFunc)CertAddCTLContextToStore,
|
||||
(AddEncodedContextToStoreFunc)CertAddEncodedCTLToStore,
|
||||
(EnumContextsInStoreFunc)CertEnumCTLsInStore,
|
||||
(GetContextPropertyFunc)CertGetCTLContextProperty,
|
||||
(SetContextPropertyFunc)CertSetCTLContextProperty,
|
||||
(SerializeElementFunc)CertSerializeCTLStoreElement,
|
||||
(FreeContextFunc)CertFreeCTLContext,
|
||||
(DeleteContextFunc)CertDeleteCTLFromStore,
|
||||
};
|
||||
|
||||
/* An extended certificate property in serialized form is prefixed by this
|
||||
* header.
|
||||
*/
|
||||
typedef struct _WINE_CERT_PROP_HEADER
|
||||
{
|
||||
DWORD propID;
|
||||
DWORD unknown; /* always 1 */
|
||||
DWORD cb;
|
||||
} WINE_CERT_PROP_HEADER, *PWINE_CERT_PROP_HEADER;
|
||||
|
||||
BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,
|
||||
DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
|
||||
{
|
||||
FIXME("(%p, %08lx, %p, %p): stub\n", pCrlContext, dwFlags, pbElement,
|
||||
pcbElement);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,
|
||||
DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
|
||||
{
|
||||
FIXME("(%p, %08lx, %p, %p): stub\n", pCtlContext, dwFlags, pbElement,
|
||||
pcbElement);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,
|
||||
DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
TRACE("(%p, %08lx, %p, %p)\n", pCertContext, dwFlags, pbElement,
|
||||
pcbElement);
|
||||
|
||||
if (pCertContext)
|
||||
{
|
||||
DWORD bytesNeeded = sizeof(WINE_CERT_PROP_HEADER) +
|
||||
pCertContext->cbCertEncoded;
|
||||
DWORD prop = 0;
|
||||
|
||||
ret = TRUE;
|
||||
do {
|
||||
prop = CertEnumCertificateContextProperties(pCertContext, prop);
|
||||
if (prop)
|
||||
{
|
||||
DWORD propSize = 0;
|
||||
|
||||
ret = CertGetCertificateContextProperty(pCertContext,
|
||||
prop, NULL, &propSize);
|
||||
if (ret)
|
||||
bytesNeeded += sizeof(WINE_CERT_PROP_HEADER) + propSize;
|
||||
}
|
||||
} while (ret && prop != 0);
|
||||
|
||||
if (!pbElement)
|
||||
{
|
||||
*pcbElement = bytesNeeded;
|
||||
ret = TRUE;
|
||||
}
|
||||
else if (*pcbElement < bytesNeeded)
|
||||
{
|
||||
*pcbElement = bytesNeeded;
|
||||
SetLastError(ERROR_MORE_DATA);
|
||||
ret = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
PWINE_CERT_PROP_HEADER hdr;
|
||||
DWORD bufSize = 0;
|
||||
LPBYTE buf = NULL;
|
||||
|
||||
prop = 0;
|
||||
do {
|
||||
prop = CertEnumCertificateContextProperties(pCertContext, prop);
|
||||
if (prop)
|
||||
{
|
||||
DWORD propSize = 0;
|
||||
|
||||
ret = CertGetCertificateContextProperty(pCertContext,
|
||||
prop, NULL, &propSize);
|
||||
if (ret)
|
||||
{
|
||||
if (bufSize < propSize)
|
||||
{
|
||||
if (buf)
|
||||
buf = CryptMemRealloc(buf, propSize);
|
||||
else
|
||||
buf = CryptMemAlloc(propSize);
|
||||
bufSize = propSize;
|
||||
}
|
||||
if (buf)
|
||||
{
|
||||
ret = CertGetCertificateContextProperty(
|
||||
pCertContext, prop, buf, &propSize);
|
||||
if (ret)
|
||||
{
|
||||
hdr = (PWINE_CERT_PROP_HEADER)pbElement;
|
||||
hdr->propID = prop;
|
||||
hdr->unknown = 1;
|
||||
hdr->cb = propSize;
|
||||
pbElement += sizeof(WINE_CERT_PROP_HEADER);
|
||||
if (propSize)
|
||||
{
|
||||
memcpy(pbElement, buf, propSize);
|
||||
pbElement += propSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = FALSE;
|
||||
}
|
||||
}
|
||||
} while (ret && prop != 0);
|
||||
CryptMemFree(buf);
|
||||
|
||||
hdr = (PWINE_CERT_PROP_HEADER)pbElement;
|
||||
hdr->propID = CERT_CERT_PROP_ID;
|
||||
hdr->unknown = 1;
|
||||
hdr->cb = pCertContext->cbCertEncoded;
|
||||
memcpy(pbElement + sizeof(WINE_CERT_PROP_HEADER),
|
||||
pCertContext->pbCertEncoded, pCertContext->cbCertEncoded);
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = FALSE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Looks for the property with ID propID in the buffer buf. Returns a pointer
|
||||
* to its header if a valid header is found, NULL if not. Valid means the
|
||||
* length of thte property won't overrun buf, and the unknown field is 1.
|
||||
*/
|
||||
static const WINE_CERT_PROP_HEADER *CRYPT_findPropID(const BYTE *buf,
|
||||
DWORD size, DWORD propID)
|
||||
{
|
||||
const WINE_CERT_PROP_HEADER *ret = NULL;
|
||||
BOOL done = FALSE;
|
||||
|
||||
while (size && !ret && !done)
|
||||
{
|
||||
if (size < sizeof(WINE_CERT_PROP_HEADER))
|
||||
{
|
||||
SetLastError(CRYPT_E_FILE_ERROR);
|
||||
done = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
const WINE_CERT_PROP_HEADER *hdr =
|
||||
(const WINE_CERT_PROP_HEADER *)buf;
|
||||
|
||||
size -= sizeof(WINE_CERT_PROP_HEADER);
|
||||
buf += sizeof(WINE_CERT_PROP_HEADER);
|
||||
if (size < hdr->cb)
|
||||
{
|
||||
SetLastError(HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER));
|
||||
done = TRUE;
|
||||
}
|
||||
else if (!hdr->propID)
|
||||
{
|
||||
/* assume a zero prop ID means the data are uninitialized, so
|
||||
* stop looking.
|
||||
*/
|
||||
done = TRUE;
|
||||
}
|
||||
else if (hdr->unknown != 1)
|
||||
{
|
||||
SetLastError(ERROR_FILE_NOT_FOUND);
|
||||
done = TRUE;
|
||||
}
|
||||
else if (hdr->propID == propID)
|
||||
ret = hdr;
|
||||
else
|
||||
{
|
||||
buf += hdr->cb;
|
||||
size -= hdr->cb;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
const void *CRYPT_ReadSerializedElement(const BYTE *pbElement, DWORD cbElement,
|
||||
DWORD dwContextTypeFlags, DWORD *pdwContentType)
|
||||
{
|
||||
const void *context;
|
||||
|
||||
TRACE("(%p, %ld, %08lx, %p)\n", pbElement, cbElement, dwContextTypeFlags,
|
||||
pdwContentType);
|
||||
|
||||
if (!cbElement)
|
||||
{
|
||||
SetLastError(ERROR_END_OF_MEDIA);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
__TRY
|
||||
{
|
||||
const WINE_CONTEXT_INTERFACE *contextInterface = NULL;
|
||||
const WINE_CERT_PROP_HEADER *hdr = NULL;
|
||||
DWORD type = 0;
|
||||
BOOL ret;
|
||||
|
||||
ret = TRUE;
|
||||
context = NULL;
|
||||
if (dwContextTypeFlags == CERT_STORE_ALL_CONTEXT_FLAG)
|
||||
{
|
||||
hdr = CRYPT_findPropID(pbElement, cbElement, CERT_CERT_PROP_ID);
|
||||
if (hdr)
|
||||
type = CERT_STORE_CERTIFICATE_CONTEXT;
|
||||
else
|
||||
{
|
||||
hdr = CRYPT_findPropID(pbElement, cbElement, CERT_CRL_PROP_ID);
|
||||
if (hdr)
|
||||
type = CERT_STORE_CRL_CONTEXT;
|
||||
else
|
||||
{
|
||||
hdr = CRYPT_findPropID(pbElement, cbElement,
|
||||
CERT_CTL_PROP_ID);
|
||||
if (hdr)
|
||||
type = CERT_STORE_CTL_CONTEXT;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (dwContextTypeFlags & CERT_STORE_CERTIFICATE_CONTEXT_FLAG)
|
||||
{
|
||||
hdr = CRYPT_findPropID(pbElement, cbElement, CERT_CERT_PROP_ID);
|
||||
type = CERT_STORE_CERTIFICATE_CONTEXT;
|
||||
}
|
||||
else if (dwContextTypeFlags & CERT_STORE_CRL_CONTEXT_FLAG)
|
||||
{
|
||||
hdr = CRYPT_findPropID(pbElement, cbElement, CERT_CRL_PROP_ID);
|
||||
type = CERT_STORE_CRL_CONTEXT;
|
||||
}
|
||||
else if (dwContextTypeFlags & CERT_STORE_CTL_CONTEXT_FLAG)
|
||||
{
|
||||
hdr = CRYPT_findPropID(pbElement, cbElement, CERT_CTL_PROP_ID);
|
||||
type = CERT_STORE_CTL_CONTEXT;
|
||||
}
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case CERT_STORE_CERTIFICATE_CONTEXT:
|
||||
contextInterface = &gCertInterface;
|
||||
break;
|
||||
case CERT_STORE_CRL_CONTEXT:
|
||||
contextInterface = &gCRLInterface;
|
||||
break;
|
||||
case CERT_STORE_CTL_CONTEXT:
|
||||
contextInterface = &gCTLInterface;
|
||||
break;
|
||||
default:
|
||||
SetLastError(HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER));
|
||||
ret = FALSE;
|
||||
}
|
||||
if (!hdr)
|
||||
ret = FALSE;
|
||||
|
||||
if (ret)
|
||||
context = contextInterface->create(X509_ASN_ENCODING,
|
||||
(BYTE *)hdr + sizeof(WINE_CERT_PROP_HEADER), hdr->cb);
|
||||
if (ret && context)
|
||||
{
|
||||
BOOL noMoreProps = FALSE;
|
||||
|
||||
while (!noMoreProps && ret)
|
||||
{
|
||||
if (cbElement < sizeof(WINE_CERT_PROP_HEADER))
|
||||
ret = FALSE;
|
||||
else
|
||||
{
|
||||
const WINE_CERT_PROP_HEADER *hdr =
|
||||
(const WINE_CERT_PROP_HEADER *)pbElement;
|
||||
|
||||
TRACE("prop is %ld\n", hdr->propID);
|
||||
cbElement -= sizeof(WINE_CERT_PROP_HEADER);
|
||||
pbElement += sizeof(WINE_CERT_PROP_HEADER);
|
||||
if (cbElement < hdr->cb)
|
||||
{
|
||||
SetLastError(HRESULT_FROM_WIN32(
|
||||
ERROR_INVALID_PARAMETER));
|
||||
ret = FALSE;
|
||||
}
|
||||
else if (!hdr->propID)
|
||||
{
|
||||
/* Like in CRYPT_findPropID, stop if the propID is zero
|
||||
*/
|
||||
noMoreProps = TRUE;
|
||||
}
|
||||
else if (hdr->unknown != 1)
|
||||
{
|
||||
SetLastError(ERROR_FILE_NOT_FOUND);
|
||||
ret = FALSE;
|
||||
}
|
||||
else if (hdr->propID != CERT_CERT_PROP_ID &&
|
||||
hdr->propID != CERT_CRL_PROP_ID && hdr->propID !=
|
||||
CERT_CTL_PROP_ID)
|
||||
{
|
||||
/* Have to create a blob for most types, but not
|
||||
* for all.. arghh.
|
||||
*/
|
||||
switch (hdr->propID)
|
||||
{
|
||||
case CERT_AUTO_ENROLL_PROP_ID:
|
||||
case CERT_CTL_USAGE_PROP_ID:
|
||||
case CERT_DESCRIPTION_PROP_ID:
|
||||
case CERT_FRIENDLY_NAME_PROP_ID:
|
||||
case CERT_HASH_PROP_ID:
|
||||
case CERT_KEY_IDENTIFIER_PROP_ID:
|
||||
case CERT_MD5_HASH_PROP_ID:
|
||||
case CERT_NEXT_UPDATE_LOCATION_PROP_ID:
|
||||
case CERT_PUBKEY_ALG_PARA_PROP_ID:
|
||||
case CERT_PVK_FILE_PROP_ID:
|
||||
case CERT_SIGNATURE_HASH_PROP_ID:
|
||||
case CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID:
|
||||
case CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID:
|
||||
case CERT_ENROLLMENT_PROP_ID:
|
||||
case CERT_CROSS_CERT_DIST_POINTS_PROP_ID:
|
||||
case CERT_RENEWAL_PROP_ID:
|
||||
{
|
||||
CRYPT_DATA_BLOB blob = { hdr->cb,
|
||||
(LPBYTE)pbElement };
|
||||
|
||||
ret = contextInterface->setProp(context,
|
||||
hdr->propID, 0, &blob);
|
||||
break;
|
||||
}
|
||||
case CERT_DATE_STAMP_PROP_ID:
|
||||
ret = contextInterface->setProp(context,
|
||||
hdr->propID, 0, pbElement);
|
||||
break;
|
||||
default:
|
||||
FIXME("prop ID %ld: stub\n", hdr->propID);
|
||||
}
|
||||
}
|
||||
pbElement += hdr->cb;
|
||||
cbElement -= hdr->cb;
|
||||
if (!cbElement)
|
||||
noMoreProps = TRUE;
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
{
|
||||
if (pdwContentType)
|
||||
*pdwContentType = type;
|
||||
}
|
||||
else
|
||||
{
|
||||
contextInterface->free(context);
|
||||
context = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
__EXCEPT_PAGE_FAULT
|
||||
{
|
||||
SetLastError(STATUS_ACCESS_VIOLATION);
|
||||
context = NULL;
|
||||
}
|
||||
__ENDTRY
|
||||
return context;
|
||||
}
|
||||
|
||||
BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,
|
||||
const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags,
|
||||
DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext)
|
||||
{
|
||||
const void *context;
|
||||
DWORD type;
|
||||
BOOL ret;
|
||||
|
||||
TRACE("(%p, %p, %ld, %08lx, %08lx, %08lx, %p, %p)\n", hCertStore,
|
||||
pbElement, cbElement, dwAddDisposition, dwFlags, dwContextTypeFlags,
|
||||
pdwContentType, ppvContext);
|
||||
|
||||
/* Call the internal function, then delete the hashes. Tests show this
|
||||
* function uses real hash values, not whatever's stored in the hash
|
||||
* property.
|
||||
*/
|
||||
context = CRYPT_ReadSerializedElement(pbElement, cbElement,
|
||||
dwContextTypeFlags, &type);
|
||||
if (context)
|
||||
{
|
||||
const WINE_CONTEXT_INTERFACE *contextInterface = NULL;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case CERT_STORE_CERTIFICATE_CONTEXT:
|
||||
contextInterface = &gCertInterface;
|
||||
break;
|
||||
case CERT_STORE_CRL_CONTEXT:
|
||||
contextInterface = &gCRLInterface;
|
||||
break;
|
||||
case CERT_STORE_CTL_CONTEXT:
|
||||
contextInterface = &gCTLInterface;
|
||||
break;
|
||||
default:
|
||||
SetLastError(HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER));
|
||||
}
|
||||
if (contextInterface)
|
||||
{
|
||||
contextInterface->setProp(context, CERT_HASH_PROP_ID, 0, NULL);
|
||||
contextInterface->setProp(context, CERT_MD5_HASH_PROP_ID, 0, NULL);
|
||||
contextInterface->setProp(context, CERT_SIGNATURE_HASH_PROP_ID, 0,
|
||||
NULL);
|
||||
if (pdwContentType)
|
||||
*pdwContentType = type;
|
||||
ret = contextInterface->addContextToStore(hCertStore, context,
|
||||
dwAddDisposition, ppvContext);
|
||||
contextInterface->free(context);
|
||||
}
|
||||
else
|
||||
ret = FALSE;
|
||||
}
|
||||
else
|
||||
ret = FALSE;
|
||||
return ret;
|
||||
}
|
2666
reactos/dll/win32/crypt32/store.c
Normal file
2666
reactos/dll/win32/crypt32/store.c
Normal file
File diff suppressed because it is too large
Load diff
441
reactos/dll/win32/crypt32/str.c
Normal file
441
reactos/dll/win32/crypt32/str.c
Normal file
|
@ -0,0 +1,441 @@
|
|||
/*
|
||||
* Copyright 2006 Juan Lang for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winnls.h"
|
||||
#include "wincrypt.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
||||
|
||||
DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
|
||||
LPSTR psz, DWORD csz)
|
||||
{
|
||||
DWORD ret = 0;
|
||||
|
||||
TRACE("(%ld, %p, %p, %ld)\n", dwValueType, pValue, psz, csz);
|
||||
|
||||
switch (dwValueType)
|
||||
{
|
||||
case CERT_RDN_ANY_TYPE:
|
||||
break;
|
||||
case CERT_RDN_PRINTABLE_STRING:
|
||||
case CERT_RDN_IA5_STRING:
|
||||
if (!psz || !csz)
|
||||
ret = pValue->cbData;
|
||||
else
|
||||
{
|
||||
DWORD chars = min(pValue->cbData, csz - 1);
|
||||
|
||||
if (chars)
|
||||
{
|
||||
memcpy(psz, pValue->pbData, chars);
|
||||
ret += chars;
|
||||
csz -= chars;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FIXME("string type %ld unimplemented\n", dwValueType);
|
||||
}
|
||||
if (psz && csz)
|
||||
{
|
||||
*(psz + ret) = '\0';
|
||||
csz--;
|
||||
ret++;
|
||||
}
|
||||
else
|
||||
ret++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
|
||||
LPWSTR psz, DWORD csz)
|
||||
{
|
||||
DWORD ret = 0;
|
||||
|
||||
TRACE("(%ld, %p, %p, %ld)\n", dwValueType, pValue, psz, csz);
|
||||
|
||||
switch (dwValueType)
|
||||
{
|
||||
case CERT_RDN_ANY_TYPE:
|
||||
break;
|
||||
case CERT_RDN_PRINTABLE_STRING:
|
||||
case CERT_RDN_IA5_STRING:
|
||||
if (!psz || !csz)
|
||||
ret = pValue->cbData;
|
||||
else
|
||||
{
|
||||
DWORD chars = min(pValue->cbData, csz - 1);
|
||||
|
||||
if (chars)
|
||||
{
|
||||
DWORD i;
|
||||
|
||||
for (i = 0; i < chars; i++)
|
||||
psz[i] = pValue->pbData[i];
|
||||
ret += chars;
|
||||
csz -= chars;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FIXME("string type %ld unimplemented\n", dwValueType);
|
||||
}
|
||||
if (psz && csz)
|
||||
{
|
||||
*(psz + ret) = '\0';
|
||||
csz--;
|
||||
ret++;
|
||||
}
|
||||
else
|
||||
ret++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
|
||||
DWORD dwStrType, LPSTR psz, DWORD csz)
|
||||
{
|
||||
static const DWORD unsupportedFlags = CERT_NAME_STR_NO_QUOTING_FLAG |
|
||||
CERT_NAME_STR_REVERSE_FLAG | CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG;
|
||||
static const char commaSep[] = ", ";
|
||||
static const char semiSep[] = "; ";
|
||||
static const char crlfSep[] = "\r\n";
|
||||
static const char plusSep[] = " + ";
|
||||
static const char spaceSep[] = " ";
|
||||
DWORD ret = 0, bytes = 0;
|
||||
BOOL bRet;
|
||||
CERT_NAME_INFO *info;
|
||||
|
||||
TRACE("(%ld, %p, %08lx, %p, %ld)\n", dwCertEncodingType, pName, dwStrType,
|
||||
psz, csz);
|
||||
if (dwStrType & unsupportedFlags)
|
||||
FIXME("unsupported flags: %08lx\n", dwStrType & unsupportedFlags);
|
||||
|
||||
bRet = CryptDecodeObjectEx(dwCertEncodingType, X509_NAME, pName->pbData,
|
||||
pName->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &bytes);
|
||||
if (bRet)
|
||||
{
|
||||
DWORD i, j, sepLen, rdnSepLen;
|
||||
LPCSTR sep, rdnSep;
|
||||
|
||||
if (dwStrType & CERT_NAME_STR_SEMICOLON_FLAG)
|
||||
sep = semiSep;
|
||||
else if (dwStrType & CERT_NAME_STR_CRLF_FLAG)
|
||||
sep = crlfSep;
|
||||
else
|
||||
sep = commaSep;
|
||||
sepLen = strlen(sep);
|
||||
if (dwStrType & CERT_NAME_STR_NO_PLUS_FLAG)
|
||||
rdnSep = spaceSep;
|
||||
else
|
||||
rdnSep = plusSep;
|
||||
rdnSepLen = strlen(rdnSep);
|
||||
for (i = 0; ret < csz && i < info->cRDN; i++)
|
||||
{
|
||||
for (j = 0; ret < csz && j < info->rgRDN[i].cRDNAttr; j++)
|
||||
{
|
||||
DWORD chars;
|
||||
|
||||
if ((dwStrType & 0x000000ff) == CERT_OID_NAME_STR)
|
||||
{
|
||||
/* - 1 is needed to account for the NULL terminator. */
|
||||
chars = min(
|
||||
lstrlenA(info->rgRDN[i].rgRDNAttr[j].pszObjId),
|
||||
csz - ret - 1);
|
||||
if (psz && chars)
|
||||
memcpy(psz + ret, info->rgRDN[i].rgRDNAttr[j].pszObjId,
|
||||
chars);
|
||||
ret += chars;
|
||||
csz -= chars;
|
||||
if (csz > 1)
|
||||
{
|
||||
if (psz)
|
||||
*(psz + ret) = '=';
|
||||
ret++;
|
||||
csz--;
|
||||
}
|
||||
}
|
||||
/* FIXME: handle quoting */
|
||||
chars = CertRDNValueToStrA(
|
||||
info->rgRDN[i].rgRDNAttr[j].dwValueType,
|
||||
&info->rgRDN[i].rgRDNAttr[j].Value, psz ? psz + ret : NULL,
|
||||
csz - ret - 1);
|
||||
if (chars)
|
||||
ret += chars - 1;
|
||||
if (j < info->rgRDN[i].cRDNAttr - 1)
|
||||
{
|
||||
if (psz && ret < csz - rdnSepLen - 1)
|
||||
memcpy(psz + ret, rdnSep, rdnSepLen);
|
||||
ret += rdnSepLen;
|
||||
}
|
||||
}
|
||||
if (i < info->cRDN - 1)
|
||||
{
|
||||
if (psz && ret < csz - sepLen - 1)
|
||||
memcpy(psz + ret, sep, sepLen);
|
||||
ret += sepLen;
|
||||
}
|
||||
}
|
||||
LocalFree(info);
|
||||
}
|
||||
if (psz && csz)
|
||||
{
|
||||
*(psz + ret) = '\0';
|
||||
csz--;
|
||||
ret++;
|
||||
}
|
||||
else
|
||||
ret++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
|
||||
DWORD dwStrType, LPWSTR psz, DWORD csz)
|
||||
{
|
||||
static const DWORD unsupportedFlags = CERT_NAME_STR_NO_QUOTING_FLAG |
|
||||
CERT_NAME_STR_REVERSE_FLAG | CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG;
|
||||
static const WCHAR commaSep[] = { ',',' ',0 };
|
||||
static const WCHAR semiSep[] = { ';',' ',0 };
|
||||
static const WCHAR crlfSep[] = { '\r','\n',0 };
|
||||
static const WCHAR plusSep[] = { ' ','+',' ',0 };
|
||||
static const WCHAR spaceSep[] = { ' ',0 };
|
||||
DWORD ret = 0, bytes = 0;
|
||||
BOOL bRet;
|
||||
CERT_NAME_INFO *info;
|
||||
|
||||
TRACE("(%ld, %p, %08lx, %p, %ld)\n", dwCertEncodingType, pName, dwStrType,
|
||||
psz, csz);
|
||||
if (dwStrType & unsupportedFlags)
|
||||
FIXME("unsupported flags: %08lx\n", dwStrType & unsupportedFlags);
|
||||
|
||||
bRet = CryptDecodeObjectEx(dwCertEncodingType, X509_NAME, pName->pbData,
|
||||
pName->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &bytes);
|
||||
if (bRet)
|
||||
{
|
||||
DWORD i, j, sepLen, rdnSepLen;
|
||||
LPCWSTR sep, rdnSep;
|
||||
|
||||
if (dwStrType & CERT_NAME_STR_SEMICOLON_FLAG)
|
||||
sep = semiSep;
|
||||
else if (dwStrType & CERT_NAME_STR_CRLF_FLAG)
|
||||
sep = crlfSep;
|
||||
else
|
||||
sep = commaSep;
|
||||
sepLen = lstrlenW(sep);
|
||||
if (dwStrType & CERT_NAME_STR_NO_PLUS_FLAG)
|
||||
rdnSep = spaceSep;
|
||||
else
|
||||
rdnSep = plusSep;
|
||||
rdnSepLen = lstrlenW(rdnSep);
|
||||
for (i = 0; ret < csz && i < info->cRDN; i++)
|
||||
{
|
||||
for (j = 0; ret < csz && j < info->rgRDN[i].cRDNAttr; j++)
|
||||
{
|
||||
DWORD chars;
|
||||
|
||||
if ((dwStrType & 0x000000ff) == CERT_OID_NAME_STR)
|
||||
{
|
||||
/* - 1 is needed to account for the NULL terminator. */
|
||||
chars = min(
|
||||
lstrlenA(info->rgRDN[i].rgRDNAttr[j].pszObjId),
|
||||
csz - ret - 1);
|
||||
if (psz && chars)
|
||||
{
|
||||
DWORD k;
|
||||
|
||||
for (k = 0; k < chars; k++)
|
||||
*(psz + ret + k) =
|
||||
info->rgRDN[i].rgRDNAttr[j].pszObjId[k];
|
||||
}
|
||||
ret += chars;
|
||||
csz -= chars;
|
||||
if (csz > 1)
|
||||
{
|
||||
if (psz)
|
||||
*(psz + ret) = '=';
|
||||
ret++;
|
||||
csz--;
|
||||
}
|
||||
}
|
||||
/* FIXME: handle quoting */
|
||||
chars = CertRDNValueToStrW(
|
||||
info->rgRDN[i].rgRDNAttr[j].dwValueType,
|
||||
&info->rgRDN[i].rgRDNAttr[j].Value, psz ? psz + ret : NULL,
|
||||
csz - ret - 1);
|
||||
if (chars)
|
||||
ret += chars - 1;
|
||||
if (j < info->rgRDN[i].cRDNAttr - 1)
|
||||
{
|
||||
if (psz && ret < csz - rdnSepLen - 1)
|
||||
memcpy(psz + ret, rdnSep, rdnSepLen * sizeof(WCHAR));
|
||||
ret += rdnSepLen;
|
||||
}
|
||||
}
|
||||
if (i < info->cRDN - 1)
|
||||
{
|
||||
if (psz && ret < csz - sepLen - 1)
|
||||
memcpy(psz + ret, sep, sepLen * sizeof(WCHAR));
|
||||
ret += sepLen;
|
||||
}
|
||||
}
|
||||
LocalFree(info);
|
||||
}
|
||||
if (psz && csz)
|
||||
{
|
||||
*(psz + ret) = '\0';
|
||||
csz--;
|
||||
ret++;
|
||||
}
|
||||
else
|
||||
ret++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
||||
DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString)
|
||||
{
|
||||
DWORD ret;
|
||||
|
||||
TRACE("(%p, %ld, %08lx, %p, %p, %ld)\n", pCertContext, dwType, dwFlags,
|
||||
pvTypePara, pszNameString, cchNameString);
|
||||
|
||||
if (pszNameString)
|
||||
{
|
||||
LPWSTR wideName;
|
||||
DWORD nameLen;
|
||||
|
||||
nameLen = CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara,
|
||||
NULL, 0);
|
||||
wideName = CryptMemAlloc(nameLen * sizeof(WCHAR));
|
||||
if (wideName)
|
||||
{
|
||||
CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara,
|
||||
wideName, nameLen);
|
||||
nameLen = WideCharToMultiByte(CP_ACP, 0, wideName, nameLen,
|
||||
pszNameString, cchNameString, NULL, NULL);
|
||||
if (nameLen <= cchNameString)
|
||||
ret = nameLen;
|
||||
else
|
||||
{
|
||||
pszNameString[cchNameString - 1] = '\0';
|
||||
ret = cchNameString;
|
||||
}
|
||||
CryptMemFree(wideName);
|
||||
}
|
||||
else
|
||||
{
|
||||
*pszNameString = '\0';
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara,
|
||||
NULL, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
||||
DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString)
|
||||
{
|
||||
DWORD ret;
|
||||
PCERT_NAME_BLOB name;
|
||||
LPCSTR altNameOID;
|
||||
|
||||
TRACE("(%p, %ld, %08lx, %p, %p, %ld)\n", pCertContext, dwType,
|
||||
dwFlags, pvTypePara, pszNameString, cchNameString);
|
||||
|
||||
if (dwFlags & CERT_NAME_ISSUER_FLAG)
|
||||
{
|
||||
name = &pCertContext->pCertInfo->Issuer;
|
||||
altNameOID = szOID_ISSUER_ALT_NAME;
|
||||
}
|
||||
else
|
||||
{
|
||||
name = &pCertContext->pCertInfo->Subject;
|
||||
altNameOID = szOID_SUBJECT_ALT_NAME;
|
||||
}
|
||||
|
||||
switch (dwType)
|
||||
{
|
||||
case CERT_NAME_SIMPLE_DISPLAY_TYPE:
|
||||
{
|
||||
static const LPCSTR simpleAttributeOIDs[] = { szOID_COMMON_NAME,
|
||||
szOID_ORGANIZATIONAL_UNIT_NAME, szOID_ORGANIZATION_NAME,
|
||||
szOID_RSA_emailAddr };
|
||||
CERT_NAME_INFO *info = NULL;
|
||||
PCERT_RDN_ATTR nameAttr = NULL;
|
||||
DWORD bytes = 0, i;
|
||||
|
||||
if (CryptDecodeObjectEx(pCertContext->dwCertEncodingType, X509_NAME,
|
||||
name->pbData, name->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &info,
|
||||
&bytes))
|
||||
{
|
||||
for (i = 0; !nameAttr && i < sizeof(simpleAttributeOIDs) /
|
||||
sizeof(simpleAttributeOIDs[0]); i++)
|
||||
nameAttr = CertFindRDNAttr(simpleAttributeOIDs[i], info);
|
||||
}
|
||||
else
|
||||
ret = 0;
|
||||
if (!nameAttr)
|
||||
{
|
||||
PCERT_EXTENSION ext = CertFindExtension(altNameOID,
|
||||
pCertContext->pCertInfo->cExtension,
|
||||
pCertContext->pCertInfo->rgExtension);
|
||||
|
||||
if (ext)
|
||||
{
|
||||
for (i = 0; !nameAttr && i < sizeof(simpleAttributeOIDs) /
|
||||
sizeof(simpleAttributeOIDs[0]); i++)
|
||||
nameAttr = CertFindRDNAttr(simpleAttributeOIDs[i], info);
|
||||
if (!nameAttr)
|
||||
{
|
||||
/* FIXME: gotta then look for a rfc822Name choice in ext.
|
||||
* Failing that, look for the first attribute.
|
||||
*/
|
||||
FIXME("CERT_NAME_SIMPLE_DISPLAY_TYPE: stub\n");
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = CertRDNValueToStrW(nameAttr->dwValueType, &nameAttr->Value,
|
||||
pszNameString, cchNameString);
|
||||
if (info)
|
||||
LocalFree(info);
|
||||
break;
|
||||
}
|
||||
case CERT_NAME_FRIENDLY_DISPLAY_TYPE:
|
||||
{
|
||||
DWORD cch = cchNameString;
|
||||
|
||||
if (CertGetCertificateContextProperty(pCertContext,
|
||||
CERT_FRIENDLY_NAME_PROP_ID, pszNameString, &cch))
|
||||
ret = cch;
|
||||
else
|
||||
ret = CertGetNameStringW(pCertContext,
|
||||
CERT_NAME_SIMPLE_DISPLAY_TYPE, dwFlags, pvTypePara, pszNameString,
|
||||
cchNameString);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
FIXME("unimplemented for type %ld\n", dwType);
|
||||
ret = 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
|
@ -41,7 +41,7 @@ reactos/dll/win32/avifil32 # Synced to Wine-0_9_5
|
|||
reactos/dll/win32/cabinet # Synced to Wine-0_9_10
|
||||
reactos/dll/win32/comctl32 # Synced to Wine-20060328
|
||||
reactos/dll/win32/comdlg32 # Synced to Wine-0_9_5
|
||||
reactos/dll/win32/crypt32 # Synced to Wine-0_9_5
|
||||
reactos/dll/win32/crypt32 # Synced to Wine-0_9_10
|
||||
reactos/dll/win32/dbghelp #
|
||||
reactos/dll/win32/icmp # Synced to Wine-0_9_5
|
||||
reactos/dll/win32/imm32 # Synced to Wine-0_9_10
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue