📄 wincrypt.pas
字号:
{******************************************************************}
{ }
{ Borland Delphi Runtime Library }
{ Windows Cryptography interface unit }
{ }
{ Portions created by Microsoft are }
{ Copyright (C) 1995-1999 Microsoft Corporation. }
{ All Rights Reserved. }
{ }
{ The original file is: wincrypt.h, released June 2000. }
{ The original Pascal code is: WinCrypt.pas, released Dec 2000 }
{ The initial developer of the Pascal code is Marcel van Brakel }
{ (brakelm@bart.nl). }
{ }
{ Portions created by Marcel van Brakel are }
{ Copyright (C) 1999 Marcel van Brakel. }
{ }
{ Obtained through: }
{ Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project }
{ JEDI home page, located at http://delphi-jedi.org }
{ }
{ The contents of this file are used with permission, subject to }
{ the Mozilla Public License Version 1.1 (the "License"); you may }
{ not use this file except in compliance with the License. You may }
{ obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an }
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or }
{ implied. See the License for the specific language governing }
{ rights and limitations under the License. }
{ }
{******************************************************************}
unit WinCrypt;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include <WinCrypt.h>'}
{$HPPEMIT ''}
{$HPPEMIT 'typedef HCRYPTPROV *PHCRYPTPROV'}
{$HPPEMIT 'typedef HCRYPTKEY *PHCRYPTKEY'}
{$HPPEMIT 'typedef HCRYPTHASH *PHCRYPTHASH'}
{$HPPEMIT 'typedef PROV_ENUMALGS *PPROV_ENUMALGS'}
{$HPPEMIT 'typedef PROV_ENUMALGS_EX *PPROV_ENUMALGS_EX'}
{$HPPEMIT 'typedef PUBLICKEYSTRUC *PPUBLICKEYSTRUC'}
{$HPPEMIT 'typedef RSAPUBKEY *PRSAPUBKEY'}
{$HPPEMIT 'typedef DSSSEED *PDSSSEED'}
{$HPPEMIT 'typedef PUBKEYVER3 *PPUBKEYVER3'}
{$HPPEMIT 'typedef DHPRIVKEY_VER3 *PPRIVKEYVER3'}
{$HPPEMIT 'typedef CERT_FORTEZZA_DATA_PROP *PCERT_FORTEZZA_DATA_PROP'}
{$HPPEMIT 'typedef HCRYPTMSG *PHCRYPTMSG'}
{$HPPEMIT 'typedef CMSG_RECIPIENT_ENCODE_INFO *PCMSG_RECIPIENT_ENCODE_INFO'}
{$HPPEMIT 'typedef _CMSG_RECIPIENT_ENCODE_INFO CMSG_RECIPIENT_ENCODE_INFO'}
{$HPPEMIT 'typedef PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO *PPCMSG_KEY_AGREE_KEY_ENCRYPT_INFO'}
{$HPPEMIT 'typedef HCERTSTORE *PHCERTSTORE'}
{$HPPEMIT 'typedef PCCERT_CONTEXT *PPCCERT_CONTEXT'}
{$HPPEMIT 'typedef PCCRL_CONTEXT *PPCCRL_CONTEXT'}
{$HPPEMIT 'typedef PCERT_CHAIN_CONTEXT *PPCCERT_CHAIN_CONTEXT'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
WinBase, WinType;
//
// Algorithm IDs and Flags
//
// ALG_ID crackers
function GET_ALG_CLASS(x: DWORD): DWORD;
{$EXTERNALSYM GET_ALG_CLASS}
function GET_ALG_TYPE(x: DWORD): DWORD;
{$EXTERNALSYM GET_ALG_TYPE}
function GET_ALG_SID(x: DWORD): DWORD;
{$EXTERNALSYM GET_ALG_SID}
// Algorithm classes
const
ALG_CLASS_ANY = (0);
{$EXTERNALSYM ALG_CLASS_ANY}
ALG_CLASS_SIGNATURE = (1 shl 13);
{$EXTERNALSYM ALG_CLASS_SIGNATURE}
ALG_CLASS_MSG_ENCRYPT = (2 shl 13);
{$EXTERNALSYM ALG_CLASS_MSG_ENCRYPT}
ALG_CLASS_DATA_ENCRYPT = (3 shl 13);
{$EXTERNALSYM ALG_CLASS_DATA_ENCRYPT}
ALG_CLASS_HASH = (4 shl 13);
{$EXTERNALSYM ALG_CLASS_HASH}
ALG_CLASS_KEY_EXCHANGE = (5 shl 13);
{$EXTERNALSYM ALG_CLASS_KEY_EXCHANGE}
ALG_CLASS_ALL = (7 shl 13);
{$EXTERNALSYM ALG_CLASS_ALL}
// Algorithm types
ALG_TYPE_ANY = (0);
{$EXTERNALSYM ALG_TYPE_ANY}
ALG_TYPE_DSS = (1 shl 9);
{$EXTERNALSYM ALG_TYPE_DSS}
ALG_TYPE_RSA = (2 shl 9);
{$EXTERNALSYM ALG_TYPE_RSA}
ALG_TYPE_BLOCK = (3 shl 9);
{$EXTERNALSYM ALG_TYPE_BLOCK}
ALG_TYPE_STREAM = (4 shl 9);
{$EXTERNALSYM ALG_TYPE_STREAM}
ALG_TYPE_DH = (5 shl 9);
{$EXTERNALSYM ALG_TYPE_DH}
ALG_TYPE_SECURECHANNEL = (6 shl 9);
{$EXTERNALSYM ALG_TYPE_SECURECHANNEL}
// Generic sub-ids
ALG_SID_ANY = (0);
{$EXTERNALSYM ALG_SID_ANY}
// Some RSA sub-ids
ALG_SID_RSA_ANY = 0;
{$EXTERNALSYM ALG_SID_RSA_ANY}
ALG_SID_RSA_PKCS = 1;
{$EXTERNALSYM ALG_SID_RSA_PKCS}
ALG_SID_RSA_MSATWORK = 2;
{$EXTERNALSYM ALG_SID_RSA_MSATWORK}
ALG_SID_RSA_ENTRUST = 3;
{$EXTERNALSYM ALG_SID_RSA_ENTRUST}
ALG_SID_RSA_PGP = 4;
{$EXTERNALSYM ALG_SID_RSA_PGP}
// Some DSS sub-ids
//
ALG_SID_DSS_ANY = 0;
{$EXTERNALSYM ALG_SID_DSS_ANY}
ALG_SID_DSS_PKCS = 1;
{$EXTERNALSYM ALG_SID_DSS_PKCS}
ALG_SID_DSS_DMS = 2;
{$EXTERNALSYM ALG_SID_DSS_DMS}
// Block cipher sub ids
// DES sub_ids
ALG_SID_DES = 1;
{$EXTERNALSYM ALG_SID_DES}
ALG_SID_3DES = 3;
{$EXTERNALSYM ALG_SID_3DES}
ALG_SID_DESX = 4;
{$EXTERNALSYM ALG_SID_DESX}
ALG_SID_IDEA = 5;
{$EXTERNALSYM ALG_SID_IDEA}
ALG_SID_CAST = 6;
{$EXTERNALSYM ALG_SID_CAST}
ALG_SID_SAFERSK64 = 7;
{$EXTERNALSYM ALG_SID_SAFERSK64}
ALG_SID_SAFERSK128 = 8;
{$EXTERNALSYM ALG_SID_SAFERSK128}
ALG_SID_3DES_112 = 9;
{$EXTERNALSYM ALG_SID_3DES_112}
ALG_SID_CYLINK_MEK = 12;
{$EXTERNALSYM ALG_SID_CYLINK_MEK}
ALG_SID_RC5 = 13;
{$EXTERNALSYM ALG_SID_RC5}
// Fortezza sub-ids
ALG_SID_SKIPJACK = 10;
{$EXTERNALSYM ALG_SID_SKIPJACK}
ALG_SID_TEK = 11;
{$EXTERNALSYM ALG_SID_TEK}
// KP_MODE
CRYPT_MODE_CBCI = 6; // ANSI CBC Interleaved
{$EXTERNALSYM CRYPT_MODE_CBCI}
CRYPT_MODE_CFBP = 7; // ANSI CFB Pipelined
{$EXTERNALSYM CRYPT_MODE_CFBP}
CRYPT_MODE_OFBP = 8; // ANSI OFB Pipelined
{$EXTERNALSYM CRYPT_MODE_OFBP}
CRYPT_MODE_CBCOFM = 9; // ANSI CBC + OF Masking
{$EXTERNALSYM CRYPT_MODE_CBCOFM}
CRYPT_MODE_CBCOFMI = 10; // ANSI CBC + OFM Interleaved
{$EXTERNALSYM CRYPT_MODE_CBCOFMI}
// RC2 sub-ids
ALG_SID_RC2 = 2;
{$EXTERNALSYM ALG_SID_RC2}
// Stream cipher sub-ids
ALG_SID_RC4 = 1;
{$EXTERNALSYM ALG_SID_RC4}
ALG_SID_SEAL = 2;
{$EXTERNALSYM ALG_SID_SEAL}
// Diffie-Hellman sub-ids
ALG_SID_DH_SANDF = 1;
{$EXTERNALSYM ALG_SID_DH_SANDF}
ALG_SID_DH_EPHEM = 2;
{$EXTERNALSYM ALG_SID_DH_EPHEM}
ALG_SID_AGREED_KEY_ANY = 3;
{$EXTERNALSYM ALG_SID_AGREED_KEY_ANY}
ALG_SID_KEA = 4;
{$EXTERNALSYM ALG_SID_KEA}
// Hash sub ids
ALG_SID_MD2 = 1;
{$EXTERNALSYM ALG_SID_MD2}
ALG_SID_MD4 = 2;
{$EXTERNALSYM ALG_SID_MD4}
ALG_SID_MD5 = 3;
{$EXTERNALSYM ALG_SID_MD5}
ALG_SID_SHA = 4;
{$EXTERNALSYM ALG_SID_SHA}
ALG_SID_SHA1 = 4;
{$EXTERNALSYM ALG_SID_SHA1}
ALG_SID_MAC = 5;
{$EXTERNALSYM ALG_SID_MAC}
ALG_SID_RIPEMD = 6;
{$EXTERNALSYM ALG_SID_RIPEMD}
ALG_SID_RIPEMD160 = 7;
{$EXTERNALSYM ALG_SID_RIPEMD160}
ALG_SID_SSL3SHAMD5 = 8;
{$EXTERNALSYM ALG_SID_SSL3SHAMD5}
ALG_SID_HMAC = 9;
{$EXTERNALSYM ALG_SID_HMAC}
ALG_SID_TLS1PRF = 10;
{$EXTERNALSYM ALG_SID_TLS1PRF}
// secure channel sub ids
ALG_SID_SSL3_MASTER = 1;
{$EXTERNALSYM ALG_SID_SSL3_MASTER}
ALG_SID_SCHANNEL_MASTER_HASH = 2;
{$EXTERNALSYM ALG_SID_SCHANNEL_MASTER_HASH}
ALG_SID_SCHANNEL_MAC_KEY = 3;
{$EXTERNALSYM ALG_SID_SCHANNEL_MAC_KEY}
ALG_SID_PCT1_MASTER = 4;
{$EXTERNALSYM ALG_SID_PCT1_MASTER}
ALG_SID_SSL2_MASTER = 5;
{$EXTERNALSYM ALG_SID_SSL2_MASTER}
ALG_SID_TLS1_MASTER = 6;
{$EXTERNALSYM ALG_SID_TLS1_MASTER}
ALG_SID_SCHANNEL_ENC_KEY = 7;
{$EXTERNALSYM ALG_SID_SCHANNEL_ENC_KEY}
// Our silly example sub-id
ALG_SID_EXAMPLE = 80;
{$EXTERNALSYM ALG_SID_EXAMPLE}
type
ALG_ID = Cardinal;
{$EXTERNALSYM ALG_ID}
// algorithm identifier definitions
const
CALG_MD2 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_MD2);
{$EXTERNALSYM CALG_MD2}
CALG_MD4 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_MD4);
{$EXTERNALSYM CALG_MD4}
CALG_MD5 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_MD5);
{$EXTERNALSYM CALG_MD5}
CALG_SHA = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_SHA);
{$EXTERNALSYM CALG_SHA}
CALG_SHA1 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_SHA1);
{$EXTERNALSYM CALG_SHA1}
CALG_MAC = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_MAC);
{$EXTERNALSYM CALG_MAC}
CALG_RSA_SIGN = (ALG_CLASS_SIGNATURE or ALG_TYPE_RSA or ALG_SID_RSA_ANY);
{$EXTERNALSYM CALG_RSA_SIGN}
CALG_DSS_SIGN = (ALG_CLASS_SIGNATURE or ALG_TYPE_DSS or ALG_SID_DSS_ANY);
{$EXTERNALSYM CALG_DSS_SIGN}
CALG_RSA_KEYX = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_RSA or ALG_SID_RSA_ANY);
{$EXTERNALSYM CALG_RSA_KEYX}
CALG_DES = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_DES);
{$EXTERNALSYM CALG_DES}
CALG_3DES_112 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_3DES_112);
{$EXTERNALSYM CALG_3DES_112}
CALG_3DES = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_3DES);
{$EXTERNALSYM CALG_3DES}
CALG_DESX = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_DESX);
{$EXTERNALSYM CALG_DESX}
CALG_RC2 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_RC2);
{$EXTERNALSYM CALG_RC2}
CALG_RC4 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_STREAM or ALG_SID_RC4);
{$EXTERNALSYM CALG_RC4}
CALG_SEAL = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_STREAM or ALG_SID_SEAL);
{$EXTERNALSYM CALG_SEAL}
CALG_DH_SF = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH or ALG_SID_DH_SANDF);
{$EXTERNALSYM CALG_DH_SF}
CALG_DH_EPHEM = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH or ALG_SID_DH_EPHEM);
{$EXTERNALSYM CALG_DH_EPHEM}
CALG_AGREEDKEY_ANY = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH or ALG_SID_AGREED_KEY_ANY);
{$EXTERNALSYM CALG_AGREEDKEY_ANY}
CALG_KEA_KEYX = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH or ALG_SID_KEA);
{$EXTERNALSYM CALG_KEA_KEYX}
CALG_HUGHES_MD5 = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_ANY or ALG_SID_MD5);
{$EXTERNALSYM CALG_HUGHES_MD5}
CALG_SKIPJACK = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_SKIPJACK);
{$EXTERNALSYM CALG_SKIPJACK}
CALG_TEK = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_TEK);
{$EXTERNALSYM CALG_TEK}
CALG_CYLINK_MEK = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_CYLINK_MEK);
{$EXTERNALSYM CALG_CYLINK_MEK}
CALG_SSL3_SHAMD5 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_SSL3SHAMD5);
{$EXTERNALSYM CALG_SSL3_SHAMD5}
CALG_SSL3_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL or ALG_SID_SSL3_MASTER);
{$EXTERNALSYM CALG_SSL3_MASTER}
CALG_SCHANNEL_MASTER_HASH = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL or ALG_SID_SCHANNEL_MASTER_HASH);
{$EXTERNALSYM CALG_SCHANNEL_MASTER_HASH}
CALG_SCHANNEL_MAC_KEY = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL or ALG_SID_SCHANNEL_MAC_KEY);
{$EXTERNALSYM CALG_SCHANNEL_MAC_KEY}
CALG_SCHANNEL_ENC_KEY = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL or ALG_SID_SCHANNEL_ENC_KEY);
{$EXTERNALSYM CALG_SCHANNEL_ENC_KEY}
CALG_PCT1_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL or ALG_SID_PCT1_MASTER);
{$EXTERNALSYM CALG_PCT1_MASTER}
CALG_SSL2_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL or ALG_SID_SSL2_MASTER);
{$EXTERNALSYM CALG_SSL2_MASTER}
CALG_TLS1_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL or ALG_SID_TLS1_MASTER);
{$EXTERNALSYM CALG_TLS1_MASTER}
CALG_RC5 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK or ALG_SID_RC5);
{$EXTERNALSYM CALG_RC5}
CALG_HMAC = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_HMAC);
{$EXTERNALSYM CALG_HMAC}
CALG_TLS1PRF = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_TLS1PRF);
{$EXTERNALSYM CALG_TLS1PRF}
// resource number for signatures in the CSP
SIGNATURE_RESOURCE_NUMBER = $29A;
{$EXTERNALSYM SIGNATURE_RESOURCE_NUMBER}
type
PVTableProvStruc = ^VTableProvStruc;
_VTableProvStruc = record
Version: DWORD;
FuncVerifyImage: FARPROC;
FuncReturnhWnd: FARPROC;
dwProvType: DWORD;
pbContextInfo: LPBYTE;
cbContextInfo: DWORD;
pszProvName: LPSTR;
end;
{$EXTERNALSYM _VTableProvStruc}
VTableProvStruc = _VTableProvStruc;
{$EXTERNALSYM VTableProvStruc}
TVTableProvStruc = VTableProvStruc;
HCRYPTPROV = ULONG_PTR;
{$EXTERNALSYM HCRYPTPROV}
HCRYPTKEY = ULONG_PTR;
{$EXTERNALSYM HCRYPTKEY}
HCRYPTHASH = ULONG_PTR;
{$EXTERNALSYM HCRYPTHASH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -