unit SKF;
interface
uses
Windows, Commctrl;
const
//6.3 常量定义
TRUE = longbool($00000001);
FALSE = longbool($00000000);
// DEVAPI = _stdcall;
ADMIN_TYPE = 0;
USER_TYPE = 1;
//附录A 错误代码定义
SAR_OK = $00000000;
SAR_FAIL = $0A000001;
SAR_UNKNOWNERR = $0A000002;
SAR_NOTSUPPORTYETERR = $0A000003;
SAR_FILEERR = $0A000004;
SAR_INVALIDHANDLEERR = $0A000005;
SAR_INVALIDPARAMERR = $0A000006;
SAR_READFILEERR = $0A000007;
SAR_WRITEFILEERR = $0A000008;
SAR_NAMELENERR = $0A000009;
SAR_KEYUSAGEERR = $0A00000A;
SAR_MODULUSLENERR = $0A00000B;
SAR_NOTINITIALIZEERR = $0A00000C;
SAR_OBJERR = $0A00000D;
SAR_MEMORYERR = $0A00000E;
SAR_TIMEOUTERR = $0A00000F;
SAR_INDATALENERR = $0A000010;
SAR_INDATAERR = $0A000011;
SAR_GENRANDERR = $0A000012;
SAR_HASHOBJERR = $0A000013;
SAR_HASHERR = $0A000014;
SAR_GENRSAKEYERR = $0A000015;
SAR_RSAMODULUSLENERR = $0A000016;
SAR_CSPIMPRTPUBKEYERR = $0A000017;
SAR_RSAENCERR = $0A000018;
SAR_RSADECERR = $0A000019;
SAR_HASHNOTEQUALERR = $0A00001A;
SAR_KEYNOTFOUNTERR = $0A00001B;
SAR_CERTNOTFOUNTERR = $0A00001C;
SAR_NOTEXPORTERR = $0A00001D;
SAR_DECRYPTPADERR = $0A00001E;
SAR_MACLENERR = $0A00001F;
SAR_BUFFER_TOO_SMALL = $0A000020;
SAR_KEYINFOTYPEERR = $0A000021;
SAR_NOT_EVENTERR = $0A000022;
SAR_DEVICE_REMOVED = $0A000023;
SAR_PIN_INCORRECT = $0A000024;
SAR_PIN_LOCKED = $0A000025;
SAR_PIN_INVALID = $0A000026;
SAR_PIN_LEN_RANGE = $0A000027;
SAR_USER_ALREADY_LOGGED_IN = $0A000028;
SAR_USER_PIN_NOT_INITIALIZED = $0A000029;
SAR_USER_TYPE_INVALID = $0A00002A;
SAR_APPLICATION_NAME_INVALID = $0A00002B;
SAR_APPLICATION_EXISTS = $0A00002C;
SAR_USER_NOT_LOGGED_IN = $0A00002D;
SAR_APPLICATION_NOT_EXISTS = $0A00002E;
SAR_FILE_ALREADY_EXIST = $0A00002F;
SAR_NO_ROOM = $0A000030;
SAR_FILE_NOT_EXIST = $0A000031;
SAR_REACH_MAX_CONTAINER_COUNT = $0A000032;
//6.4.3.2
MAX_RSA_MODULUS_LEN = 256;
MAX_RSA_EXPONENT_LEN = 4;
//6.4.5.2
ECC_MAX_XCOORDINATE_BITS_LEN = 512;
ECC_MAX_YCOORDINATE_BITS_LEN = 512;
//6.4.6.2
ECC_MAX_MODULUS_BITS_LEN = 512;
//6.4.9.2
MAX_IV_LEN = 32;
//6.4.11.2
MAX_FILE_NAME_SIZE = 32;
//6.4.12
SECURE_NEVER_ACCOUNT = $00000000;
SECURE_ADM_ACCOUNT = $00000001;
SECURE_USER_ACCOUNT = $00000010;
SECURE_ANYONE_ACCOUNT = $000000FF;
//6.4.13
DEV_ABSENT_STATE = $00000000;
DEV_PRESENT_STATE = $00000001;
DEV_UNKNOW_STATE = $00000002;
type
//6.2 基本数据类型
INT8 = shortint;
INT16 = smallint;
INT32 = longint;
UINT8 = Byte;
UINT16 = word;
UINT32 = longword;
BOOL = longbool; // TRUE = 0x00000001 FALSE = 0x00000000
BYTE = UINT8;
CHAR = UINT8;
SHORT = INT16;
USHORT = UINT16;
LONG = INT32;
ULONG = UINT32;
UINT = UINT32;
WORD = UINT16;
DWORD = UINT32;
FLAGS = UINT32;
LPSTR = Pchar; //UTF8 string
HANDLE = pointer;
DEVHANDLE = HANDLE;
HAPPLICATION = HANDLE;
HCONTAINER = HANDLE;
//6.4 复合数据类型
//6.4.1
Struct_Version = packed record
major: BYTE;
minor: BYTE;
end;
TVERSION = Struct_Version;
//6.4.2
Struct_DEVINFO = packed record
Version: TVERSION;
Manufacturer: array[0..63] of CHAR;
Issuer: array[0..63] of CHAR;
_label: array[0..31] of CHAR;
SerialNumber: array[0..31] of CHAR;
HWVersion: TVERSION;
FirmwareVersion: TVERSION;
AlgSymCap: ULONG;
AlgAsymCap: ULONG;
AlgHashCap: ULONG;
DevAuthAlgId: ULONG;
TotalSpace: ULONG;
FreeSpace: ULONG;
MaxECCBufferSize: ULONG;
MaxBufferSize: ULONG;
Reserved: array[0..63] of BYTE;
end;
TDEVINFO = Struct_DEVINFO;
PDEVINFO = ^TDEVINFO;
//6.4.3
Struct_RSAPUBLICKEYBLOB = packed record
AlgID: ULONG;
BitLen: ULONG;
Modulus: array[0..MAX_RSA_MODULUS_LEN - 1] of BYTE;
PublicExponent: array[0..MAX_RSA_EXPONENT_LEN - 1] of BYTE;
end;
TRSAPUBLICKEYBLOB = Struct_RSAPUBLICKEYBLOB;
PRSAPUBLICKEYBLOB = ^TRSAPUBLICKEYBLOB;
//6.4.4
Struct_RSAPRIVATEKEYBLOB = packed record
AlgID: ULONG;
BitLen: ULONG;
Modulus: array[0..MAX_RSA_MODULUS_LEN - 1] of BYTE;
PublicExponent: array[0..MAX_RSA_EXPONENT_LEN - 1] of BYTE;
PrivateExponent: array[0..MAX_RSA_MODULUS_LEN - 1] of BYTE;
Prime1: array[0..MAX_RSA_MODULUS_LEN div 2 - 1] of BYTE;
Prime2: array[0..MAX_RSA_MODULUS_LEN div 2 - 1] of BYTE;
Prime1Exponent: array[0..MAX_RSA_MODULUS_LEN div 2 - 1] of BYTE;
Prime2Exponent: array[0..MAX_RSA_MODULUS_LEN div 2 - 1] of BYTE;
Coefficient: array[0..MAX_RSA_MODULUS_LEN div 2 - 1] of BYTE;
end;
TRSAPRIVATEKEYBLOB = Struct_RSAPRIVATEKEYBLOB;
PRSAPRIVATEKEYBLOB = ^TRSAPRIVATEKEYBLOB;
//6.4.5
Struct_ECCPUBLICKEYBLOB = packed record
BitLen: ULONG;
XCoordinate: array[0..ECC_MAX_XCOORDINATE_BITS_LEN div 8 - 1] of BYTE;
YCoordinate: array[0..ECC_MAX_YCOORDINATE_BITS_LEN div 8 - 1] of BYTE;
end;
TECCPUBLICKEYBLOB = Struct_ECCPUBLICKEYBLOB;
PECCPUBLICKEYBLOB = ^TECCPUBLICKEYBLOB;
//6.4.6
Struct_ECCPRIVATEKEYBLOB = packed record
BitLen: ULONG;
PrivateKey: array[0..ECC_MAX_MODULUS_BITS_LEN div 8 - 1] of BYTE;
end;
TECCPRIVATEKEYBLOB = Struct_ECCPRIVATEKEYBLOB;
PECCPRIVATEKEYBLOB = ^TECCPRIVATEKEYBLOB;
//6.4.7
Struct_ECCCIPHERBLOB = packed record
XCoordinate: array[0..ECC_MAX_XCOORDINATE_BITS_LEN div 8 - 1] of BYTE;
YCoordinate: array[0..ECC_MAX_XCOORDINATE_BITS_LEN div 8 - 1] of BYTE;
HASH: array[0..31] of BYTE;
CipherLen: ULONG;
Cipher: BYTE;
end;
TECCCIPHERBLOB = Struct_ECCCIPHERBLOB;
PECCCIPHERBLOB = ^TECCCIPHERBLOB;
//6.4.8
Struct_ECCSIGNATUREBLOB = packed record
r: array[0..ECC_MAX_XCOORDINATE_BITS_LEN div 8 - 1] of BYTE;
s: array[0..ECC_MAX_XCOORDINATE_BITS_LEN div 8 - 1] of BYTE;
end;
TECCSIGNATUREBLOB = Struct_ECCSIGNATUREBLOB;
PECCSIGNATUREBLOB = ^TECCSIGNATUREBLOB;
//6.4.9
Struct_BLOCKCIPHERPARAM = packed record
IV: array[0..MAX_IV_LEN - 1] of BYTE;
IVLen: ULONG;
PaddingType: ULONG;
FeedBitLen: ULONG;
end;
TBLOCKCIPHERPARAM = Struct_BLOCKCIPHERPARAM;
PBLOCKCIPHERPARAM = ^TBLOCKCIPHERPARAM;
//6.4.10
SKF_ENVELOPEDKEYBLOB = packed record
Version: ULONG;
ulSymmAlgID: ULONG;
ulBits: ULONG;
bEncryptedPriKey: array[0..63] of BYTE;
PubKey: TECCPUBLICKEYBLOB;
ECCCipherBlob: TECCCIPHERBLOB;
end;
TENVELOPEDKEYBLOB = SKF_ENVELOPEDKEYBLOB;
PENVELOPEDKEYBLOB = ^TENVELOPEDKEYBLOB;
//6.4.11
Struct_FILEATTRIBUTE = packed record
FileName: array[0..MAX_FILE_NAME_SIZE - 1] of CHAR;
FileSize: ULONG;
ReadRights: ULONG;
WriteRights: ULONG;
end;
TFILEATTRIBUTE = Struct_FILEATTRIBUTE;
PFILEATTRIBUTE = ^TFILEATTRIBUTE;
//7.1.2
TSKF_WaitForDevEvent = function(
szDevName: LPSTR;
pulDevNameLen: pointer {ULONG};
pulEvent: pointer {ULONG}
): ULONG; stdcall;
//7.1.3
TSKF_CancelWaitForDevEvent = function(
): ULONG; stdcall;
//7.1.4
TSKF_EnumDev = function(
bPresent: BOOL;
szNameList: LPSTR;
pulSize: pointer {ULONG}
): ULONG; stdcall;
//7.1.5
TSKF_ConnectDev = function(
szName: LPSTR;
phDev: pointer {DEVHANDLE}
): ULONG; stdcall;
//7.1.6
TSKF_DisConnectDev = function(
hDev: DEVHANDLE
): ULONG; stdcall;
//7.1.7
TSKF_GetDevState = function(
szDevName: LPSTR;
pulDevState: pointer {ULONG}
): ULONG; stdcall;
//7.1.8
TSKF_SetLabel = function(
hDev: DEVHANDLE;
szLabel: LPSTR
): ULONG; stdcall;
//7.1.9
TSKF_GetDevInfo = function(
hDev: DEVHANDLE;
pDevInfo: PDEVINFO
): ULONG; stdcall; //
//7.1.10
TSKF_LockDev = function(
hDev: DEVHANDLE;
ulTimeOut: ULONG
): ULONG; stdcall;
//7.1.11
TSKF_UnlockDev = function(
hDev: DEVHANDLE
): ULONG; stdcall;
//7.1.12
TSKF_Transmit = function(
hDev: DEVHANDLE;
pbCommand: pointer {BYTE};
ulCommandLen: ULONG;
pbData: pointer {BYTE};
pulDataLen: pointer {ULONG}
): ULONG; stdcall;
//7.2.2
TSKF_ChangeDevAuthKey = function(
hDev: DEVHANDLE;
pbKeyValue: pointer {BYTE};
ulKeyLen: ULONG
): ULONG; stdcall;
//7.2.3
TSKF_DevAuth = function(
hDev: DEVHANDLE;
pbAuthData: pointer {BYTE};
ulLen: ULONG
): ULONG; stdcall;
//7.2.4
TSKF_ChangePIN = function(
hApplication: HAPPLICATION;
ulPINType: ULONG;
szOldPin: LPSTR;
szNewPin: LPSTR;
pulRetryCount: pointer {ULONG}
): ULONG; stdcall;
//7.2.5
TSKF_GetPINInfo = function(
hApplication: HAPPLICATION;
ulPINType: ULONG;
pulMaxRetryCount: pointer {ULONG};
pulRemainRetryCount: pointer {ULONG};
pbDefaultPin: pointer {BOOL}
): LONG; stdcall;
//7.2.6
TSKF_VerifyPIN = function(
hApplication: HAPPLICATION;
ulPINType: ULONG;
szPIN: LPSTR;
pulRetryCount: pointer {ULONG}
): ULONG; stdcall;
//7.2.7
TSKF_UnblockPIN = function(
hApplication: HAPPLICATION;
szAdminPIN: LPSTR;
szNewUserPIN: LPSTR;
pulRetryCount: pointer {ULONG}
): ULONG; stdcall;
//7.2.8
TSKF_ClearSecureState = function(
hApplication: HAPPLICATION
): ULONG; stdcall;
//7.3.2
TSKF_CreateApplication = function(
hDev: DEVHANDLE;
szAppName: LPSTR;
szAdminPin: LPSTR;
dwAdminPinRetryCount: DWORD;
szUserPin: LPSTR;
dwUserPinRetryCount: DWORD;
dwCreateFileRights: DWORD;
phApplication: pointer {HAPPLICATION}
): ULONG; stdcall;
//7.3.3
TSKF_EnumApplication = function(
hDev: DEVHANDLE;
szAppName: LPSTR;
pulSize: pointer {ULONG}
): ULONG; stdcall;
//7.3.4
TSKF_DeleteApplication = function(
hDev: DEVHANDLE;
szAppName: LPSTR
): ULONG; stdcall;
//7.3.5
TSKF_OpenApplication = function(
hDev: DEVHANDLE;
szAppName: LPSTR;
phApplication: pointer {HAPPLICATION}
): ULONG; stdcall;
//7.3.6
TSKF_CloseApplication = function(
hApplication: HAPPLICATION
): ULONG; stdcall;
//7.4.2
TSKF_CreateFile = function(
hApplication: HAPPLICATION;
szFileName: LPSTR;
ulFileSize: ULONG;
ulReadRights: ULONG;
ulWriteRights: ULONG
): ULONG; stdcall;
//7.4.3
TSKF_DeleteFile = function(
hApplication: HAPPLICATION;
szFileName: LPSTR
): ULONG; stdcall;
//7.4.4
TSKF_EnumFiles = function(
hApplication: HAPPLICATION;
szFileList: LPSTR;
pulSize: pointer {ULONG}
): ULONG; stdcall;
//7.4.5
TSKF_GetFileInfo = function(
hApplication: HAPPLICATION;
szFileName: LPSTR;
pFileInfo: pointer {FILEATTRIBUTE}
): ULONG; stdcall;
//7.4.6
TSKF_ReadFile = function(
hApplication: HAPPLICATION;
szFileName: LPSTR;
ulOffset: ULONG;
ulSize: ULONG;
pbOutData: pointer {BYTE};
pulOutLen: pointer {ULONG}
): ULONG; stdcall;
//7.4.7
TSKF_WriteFile = function(
hApplication: HAPPLICATION;
szFileName: LPSTR;
ulOffset: ULONG;
pbData: pointer {BYTE};
ulSize: ULONG
): ULONG; stdcall;
//7.5.2
TSKF_CreateContainer = function(
hApplication: HAPPLICATION;
szContainerName: LPSTR;
phContainer: pointer {HCONTAINER}
): ULONG; stdcall;
//7.5.3
TSKF_DeleteContainer = function(
hApplication: HAPPLICATION;
szContainerName: LPSTR
): ULONG; stdcall;
//7.5.4
TSKF_OpenContainer = function(
hApplication: HAPPLICATION;
szContainerName: LPSTR;
phContainer: pointer {HCONTAINER}
): ULONG; stdcall;
//7.5.5
TSKF_CloseContainer = function(
hContainer: HCONTAINER
): ULONG; stdcall;
//7.5.6
TSKF_EnumContainer = function(
hApplication: HAPPLICATION;
szContainerName: LPSTR;
pulSize: pointer {ULONG}
): ULONG; stdcall;
//7.5.7
TSKF_GetContainerType = function(
hContainer: HCONTAINER;
pulContainerType: pointer {ULONG}
): ULONG; stdcall;
//7.5.8
TSKF_ImportCertificate = function(
hContainer: HCONTAINER;
bExportSignKey: BOOL;
pbCert: pointer {BYTE};
ulCertLen: ULONG
): ULONG; stdcall;
//7.5.9
TSKF_ExportCertificate = function(
hContainer: HCONTAINER;
bSignFlag: BOOL;
pbCert: pointer {BYTE};
pulCertLen: pointer {ULONG}
): ULONG; stdcall;
//7.6
//一大堆。。。。
//7.6.2
TSKF_GenRandom = function(
hDev: DEVHANDLE;
pbRandom: pointer {BYTE};
ulRandomLen: ULONG
): ULONG; stdcall;
//7.6.3
TSKF_GenExtRSAKey = function(
hDev: DEVHANDLE;
ulBitsLen: ULONG;
pBlob: pointer {RSAPRIVATEKEYBLOB}
): ULONG; stdcall;
//7.6.4
TSKF_GenRSAKeyPair = function(
hContainer: HCONTAINER;
ulBitsLen: ULONG;
pBlob: pointer {RSAPRIVATEKEYBLOB}
): ULONG; stdcall;
//7.6.5
TSKF_ImportRSAKeyPair = function(
hContainer: HCONTAINER;
ulSymAlgId: ULONG;
pbWrappedKey: pointer {BYTE};
ulWrappedKeyLen: ULONG;
pbEncryptedData: pointer {BYTE};
ulEncryptedDataLen: ULONG
): ULONG; stdcall;
//7.6.6
TSKF_RSASignData = function(
hContainer: HCONTAINER;
pbData: pointer {BYTE};
ulDataLen: ULONG;
pbSignature: pointer {BYTE};
pulSignLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.7
TSKF_RSAVerify = function(
hDev: DEVHANDLE;
pRSAPubKeyBlob: pointer {RSAPUBLICKEYBLOB};
pbData: pointer {BYTE};
ulDataLen: ULONG;
pbSignature: pointer {BYTE};
ulSignLen: ULONG
): ULONG; stdcall;
//7.6.8
TSKF_RSAExportSessionKey = function(
hContainer: HCONTAINER;
ulAlgId: ULONG;
pPubKey: pointer {RSAPUBLICKEYBLOB};
pbData: pointer {BYTE};
pulDataLen: pointer {ULONG};
phSessionKey: HANDLE
): ULONG; stdcall;
//7.6.9
TSKF_ExtRSAPubKeyOperation = function(
hDev: DEVHANDLE;
pRSAPubKeyBlob: pointer {RSAPUBLICKEYBLOB};
pbInput: pointer {BYTE};
ulInputLen: ULONG;
pbOutput: pointer {BYTE};
pulOutputLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.10
TSKF_ExtRSAPriKeyOperation = function(
hDev: DEVHANDLE;
pRSAPriKeyBlob: pointer {RSAPRIVATEKEYBLOB};
pbInput: pointer {BYTE};
ulInputLen: ULONG;
pbOutput: pointer {BYTE};
pulOutputLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.11
TSKF_GenECCKeyPair = function(
hContainer: HCONTAINER;
ulAlgId: ULONG;
pBlob: pointer {ECCPUBLICKEYBLOB}
): ULONG; stdcall;
//7.6.12
TSKF_ImportECCKeyPair = function(
hContainer: HCONTAINER;
pEnvelopedKeyBlob: pointer {ENVELOPEDKEYBLOB}
): ULONG; stdcall;
//7.6.13
TSKF_ECCSignData = function(
hContainer: HCONTAINER;
pbDigest: pointer {BYTE};
ulDigestLen: ULONG;
pSignature: pointer {ECCSIGNATUREBLOB}
): ULONG; stdcall;
//TSKF_ECCDecrypt = function(
// hContainer: HCONTAINER;
// pCipherBlob: pointer {ECCCIPHERBLOB};
// pbPlainText: pointer {BYTE};
// pulPlainTextLen: pointer {ULONG}
// ): ULONG; stdcall;
//7.6.14
TSKF_ECCVerify = function(
hDev: DEVHANDLE;
pECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pbData: pointer {BYTE};
ulDataLen: ULONG;
pSignature: pointer {ECCSIGNATUREBLOB}
): ULONG; stdcall;
//7.6.15
TSKF_ECCExportSessionKey = function(
hContainer: HCONTAINER;
ulAlgId: ULONG;
pPubKey: pointer {ECCPUBLICKEYBLOB};
pData: pointer {ECCCIPHERBLOB};
phSessionKey: pointer {HANDLE}
): ULONG; stdcall;
//7.6.16
TSKF_ExtECCEncrypt = function(
hDev: DEVHANDLE;
pECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pbPlainText: pointer {BYTE};
ulPlainTextLen: ULONG;
pCipherText: pointer {ECCCIPHERBLOB}
): ULONG; stdcall;
//7.6.17
TSKF_ExtECCDecrypt = function(
hDev: DEVHANDLE;
pECCPriKeyBlob: pointer {ECCPRIVATEKEYBLOB};
pCipherText: pointer {ECCCIPHERBLOB};
pbPlainText: pointer {BYTE};
pulPlainTextLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.18
TSKF_ExtECCSign = function(
hDev: DEVHANDLE;
pECCPriKeyBlob: pointer {ECCPRIVATEKEYBLOB};
pbData: pointer {BYTE};
ulDataLen: ULONG;
pSignature: pointer {ECCSIGNATUREBLOB}
): ULONG; stdcall;
//7.6.19
TSKF_ExtECCVerify = function(
hDev: DEVHANDLE;
pECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pbData: pointer {BYTE};
ulDataLen: ULONG;
pSignature: pointer {ECCSIGNATUREBLOB}
): ULONG; stdcall;
//7.6.20
TSKF_GenerateAgreementDataWithECC = function(
hContainer: HCONTAINER;
ulAlgId: ULONG;
pTempECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pbID: pointer {BYTE};
ulIDLen: ULONG;
phAgreementHandle: pointer {HANDLE}
): ULONG; stdcall;
//7.6.21
TSKF_GenerateAgreementDataAndKeyWithECC = function(
hContainer: HCONTAINER;
ulAlgId: ULONG;
pSponsorECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pSponsorTempECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pTempECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pbID: pointer {BYTE};
ulIDLen: ULONG;
pbSponsorID: pointer {BYTE};
ulSponsorIDLen: ULONG;
phKeyHandle: pointer {HANDLE}
): ULONG; stdcall;
//7.6.22
TSKF_GenerateKeyWithECC = function(
hAgreementHandle: HANDLE;
pECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pTempECCPubKeyBlob: pointer {ECCPUBLICKEYBLOB};
pbID: pointer {BYTE};
ulIDLen: ULONG;
phKeyHandle: pointer {HANDLE}
): ULONG; stdcall;
//7.6.23
TSKF_ExportPublicKey = function(
hContainer: HCONTAINER;
bSignFlag: BOOL;
pbBlob: pointer {BYTE};
pulBlobLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.24
TSKF_ImportSessionKey = function(
hContainer: HCONTAINER;
ulAlgId: ULONG;
pbWrapedData: pointer {BYTE};
ulWrapedLen: ULONG;
phKey: pointer {HANDLE}
): ULONG; stdcall;
//7.6.25
TSKF_SetSymmKey = function(
hDev: DEVHANDLE;
pbKey: pointer {BYTE};
ulAlgID: ULONG;
phKey: pointer {HANDLE}
): ULONG; stdcall;
//7.6.26
TSKF_EncryptInit = function(
hKey: HANDLE;
EncryptParam: TBLOCKCIPHERPARAM
): ULONG; stdcall;
//7.6.27
TSKF_Encrypt = function(
hKey: HANDLE;
pbData: pointer {BYTE};
ulDataLen: ULONG;
pbEncryptedData: pointer {BYTE};
pulEncryptedLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.28
TSKF_EncryptUpdate = function(
hKey: HANDLE;
pbData: pointer {BYTE};
ulDataLen: ULONG;
pbEncryptedData: pointer {BYTE};
pulEncryptedLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.29
TSKF_EncryptFinal = function(
hKey: HANDLE;
pbEncryptedData: pointer {BYTE};
pulEncryptedDataLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.30
TSKF_DecryptInit = function(
hKey: HANDLE;
DecryptParam: TBLOCKCIPHERPARAM
): ULONG; stdcall;
//7.6.31
TSKF_Decrypt = function(
hKey: HANDLE;
pbEncryptedData: pointer {BYTE};
ulEncryptedLen: ULONG;
pbData: pointer {BYTE};
pulDataLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.32
TSKF_DecryptUpdate = function(
hKey: HANDLE;
pbEncryptedData: pointer {BYTE};
ulEncryptedLen: ULONG;
pbData: pointer {BYTE};
pulDataLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.33
TSKF_DecryptFinal = function(
hKey: HANDLE;
pbDecryptedData: pointer {BYTE};
pulDecryptedDataLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.34
TSKF_DigestInit = function(
hDev: DEVHANDLE;
ulAlgID: ULONG;
pPubKey: pointer {ECCPUBLICKEYBLOB};
pbID: pointer {BYTE};
ulIDLen: ULONG;
phHash: pointer {HANDLE}
): ULONG; stdcall;
//7.6.35
TSKF_Digest = function(
hHash: HANDLE;
pbData: pointer {BYTE};
ulDataLen: ULONG;
pbHashData: pointer {BYTE};
pulHashLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.36
TSKF_DigestUpdate = function(
hHash: HANDLE;
pbData: pointer {BYTE};
ulDataLen: ULONG
): ULONG; stdcall;
//7.6.37
TSKF_DigestFinal = function(
hHash: HANDLE;
pHashData: pointer {BYTE};
pulHashLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.38
TSKF_MacInit = function(
hKey: HANDLE;
pMacParam: pointer {BLOCKCIPHERPARAM};
phMac: pointer {HANDLE}
): ULONG; stdcall;
//7.6.39
TSKF_Mac = function(
hMac: HANDLE;
pbData: pointer {BYTE};
ulDataLen: ULONG;
pbMacData: pointer {BYTE};
pulMacLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.40
TSKF_MacUpdate = function(
hMac: HANDLE;
pbData: pointer {BYTE};
ulDataLen: ULONG
): ULONG; stdcall;
//7.6.41
TSKF_MacFinal = function(
hMac: HANDLE;
pbMacData: pointer {BYTE};
pulMacDataLen: pointer {ULONG}
): ULONG; stdcall;
//7.6.42
TSKF_CloseHandle = function(
hHandle: HANDLE
): ULONG; stdcall;
implementation
end.
文章浏览阅读1.6k次,点赞12次,收藏7次。大家好!大四的同学们毕业设计即将开始了,你们做好准备了吗?学长给大家精心整理了最新的计算机毕业设计选题,希望能为你们提供帮助。如果在选题过程中有任何疑问,都可以随时问我,我会尽力帮助大家。在选择毕业设计选题时,有几个要点需要考虑。首先,选题应与计算机专业密切相关,并且符合当前行业的发展趋势。选择与专业紧密结合的选题,可以使你们更好地运用所学知识,并为未来的职业发展奠定基础。要考虑选题的实际可行性和创新性。选题应具备一定的实践意义和应用前景,能够解决实际问题或改善现有技术。
文章浏览阅读3.4k次。摘要:随着电信业务的发展和电信企业经营方式的转变,DCN网络的定位发生了重大的演变。本文基于这种变化,重点讨论DCN网络的规划方法和运维管理方法。Digest: With the development oftelecommunication bussiness and the change of management of telecomcarrier , DCN’s role will cha..._电信dcn
文章浏览阅读442次。深度学习一部分矩阵求导知识的搬运总结_向量变元是什么
文章浏览阅读8次。近期,裁员的公司越来越多今天想和大家聊聊职场人的新出路。作为席卷全球的新概念ESG已然成为当前各个行业关注的最热风口目前,国内官方发布了一项ESG新证书含金量五颗星、中文ESG证书、完整ESG考试体系、名师主讲...而ESG又是与人力资源直接相关甚至在行业圈内成为大佬们的热门话题...当前行业下行,裁员的公司也越来越多大家还是冲一冲这个新兴领域01 ESG为什么重要?在双碳的大背景下,ESG已然成...
文章浏览阅读356次。云计算快速渗透到众多的行业,使中小企业受益于技术变革。最近微软SMB的一项研究发现,到今年年底,78%的中小企业将以某种方式使用云。企业希望投入少、收益高,来取得更大的发展机会。云计算将中小企业信息化的成本大幅降低,它们不必再建本地互联网基础设施,节省时间和资金,降低了企业经营风险。科技创新已成时代的潮流,中小企业上云是创新前提。云平台稳定、安全、便捷的IT环境,提升企业经营效率的同时,也为企业..._系统上云的前后对比
文章浏览阅读899次。出现选网卡的时候无法选中,这里应该是一个bug。3.保存退出,重启虚拟机即可。1.先随便选择一个网卡。2.勾先取消再重新勾选。_esxi虚拟机无法联网
文章浏览阅读913次。在LaTeX中,可在.tex文件的同一级目录下创建egbib.bib文件,所有的参考文件信息可以统一写在egbib.bib文件中,然后在.tex文件的\end{document}前加入如下几行代码:{\small\bibliographystyle{IEEEtran}\bibliography{egbib}}即可在文章中用~\cite{}宏命令便捷的插入文内引用,且文章的Reference部分会自动排序、编号。..._egbib
文章浏览阅读950次。目录:Unity Shader - 知识点目录(先占位,后续持续更新)原文:Predefined Shader preprocessor macros版本:2019.1Predefined Shader preprocessor macros着色器预处理宏Unity 编译 shader programs 期间的一些预处理宏。(本篇的宏介绍随便看看就好,要想深入了解,还是直接看Unity...
文章浏览阅读195次。本文目录:一、大数据时代还需要数据治理吗?二、如何面向用户开展大数据治理?三、面向用户的自服务大数据治理架构四、总结一、大数据时代还需要数据治理吗?数据平台发展过程中随处可见的数据问题大数据不是凭空而来,1981年第一个数据仓库诞生,到现在已经有了近40年的历史,相对数据仓库来说我还是个年轻人。而国内企业数据平台的建设大概从90年代末就开始了,从第一代架构出现到..._数据治理从0搭建
文章浏览阅读2.2k次,点赞4次,收藏12次。高手请一笑而过。物理实验课别人已经做过3、4个了,自己一个还没做呢。不是咱不想做,而是咱不想起那么早,并且仅有的一次起得早,但是哈工大的服务器竟然超负荷,不停刷新还是不行,不禁感慨这才是真正的“万马争过独木桥“啊!服务器不给力啊……好了,废话少说。其实,我的想法很简单。写一个三重循环,不停地提交,直到所有的数据都accepted。其中最关键的是提交最后一个页面,因为提交用户名和密码后不需要再访问其..._哈尔滨工业大学抢课脚本
文章浏览阅读4.9k次。一些别人收集的英文站点 http://www.lifeinchina.cn (nice) http://www.huaren.us/ (nice) http://www.hindu.com (okay) http://www.italki.com www.talkdatalk.com (transfer)http://www.en8848.com.cn/yingyu/index._study english html
文章浏览阅读5.5k次,点赞19次,收藏78次。什么是栈?在谈M3堆栈之前我们先回忆一下数据结构中的栈。栈是一种先进后出的数据结构(类似于枪支的弹夹,先放入的子弹最后打出,后放入的子弹先打出)。M3内核的堆栈也不例外,也是先进后出的。栈的作用?局部变量内存的开销,函数的调用都离不开栈。了解了栈的概念和基本作用后我们来看M3的双堆栈栈cortex-M3内核使用了双堆栈,即MSP和PSP,这极大的方便了OS的设计。MSP的含义是Main..._stm32 msp psp