skf 国密库 delphi GMT 0016-2012_skf_lockdev-程序员宅基地

技术标签: 安全  linux  windows  

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.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhmmx/article/details/125551528

智能推荐

2024最新计算机毕业设计选题大全-程序员宅基地

文章浏览阅读1.6k次,点赞12次,收藏7次。大家好!大四的同学们毕业设计即将开始了,你们做好准备了吗?学长给大家精心整理了最新的计算机毕业设计选题,希望能为你们提供帮助。如果在选题过程中有任何疑问,都可以随时问我,我会尽力帮助大家。在选择毕业设计选题时,有几个要点需要考虑。首先,选题应与计算机专业密切相关,并且符合当前行业的发展趋势。选择与专业紧密结合的选题,可以使你们更好地运用所学知识,并为未来的职业发展奠定基础。要考虑选题的实际可行性和创新性。选题应具备一定的实践意义和应用前景,能够解决实际问题或改善现有技术。

dcn网络与公网_电信运营商DCN网络的演变与规划方法(The evolution and plan method of DCN)...-程序员宅基地

文章浏览阅读3.4k次。摘要:随着电信业务的发展和电信企业经营方式的转变,DCN网络的定位发生了重大的演变。本文基于这种变化,重点讨论DCN网络的规划方法和运维管理方法。Digest: With the development oftelecommunication bussiness and the change of management of telecomcarrier , DCN’s role will cha..._电信dcn

动手深度学习矩阵求导_向量变元是什么-程序员宅基地

文章浏览阅读442次。深度学习一部分矩阵求导知识的搬运总结_向量变元是什么

月薪已炒到15w?真心建议大家冲一冲数据新兴领域,人才缺口极大!-程序员宅基地

文章浏览阅读8次。近期,裁员的公司越来越多今天想和大家聊聊职场人的新出路。作为席卷全球的新概念ESG已然成为当前各个行业关注的最热风口目前,国内官方发布了一项ESG新证书含金量五颗星、中文ESG证书、完整ESG考试体系、名师主讲...而ESG又是与人力资源直接相关甚至在行业圈内成为大佬们的热门话题...当前行业下行,裁员的公司也越来越多大家还是冲一冲这个新兴领域01 ESG为什么重要?在双碳的大背景下,ESG已然成...

对比传统运营模式,为什么越拉越多的企业选择上云?_系统上云的前后对比-程序员宅基地

文章浏览阅读356次。云计算快速渗透到众多的行业,使中小企业受益于技术变革。最近微软SMB的一项研究发现,到今年年底,78%的中小企业将以某种方式使用云。企业希望投入少、收益高,来取得更大的发展机会。云计算将中小企业信息化的成本大幅降低,它们不必再建本地互联网基础设施,节省时间和资金,降低了企业经营风险。科技创新已成时代的潮流,中小企业上云是创新前提。云平台稳定、安全、便捷的IT环境,提升企业经营效率的同时,也为企业..._系统上云的前后对比

esxi网卡直通后虚拟机无网_esxi虚拟机无法联网-程序员宅基地

文章浏览阅读899次。出现选网卡的时候无法选中,这里应该是一个bug。3.保存退出,重启虚拟机即可。1.先随便选择一个网卡。2.勾先取消再重新勾选。_esxi虚拟机无法联网

随便推点

在LaTeX中使用.bib文件统一管理参考文献_egbib-程序员宅基地

文章浏览阅读913次。在LaTeX中,可在.tex文件的同一级目录下创建egbib.bib文件,所有的参考文件信息可以统一写在egbib.bib文件中,然后在.tex文件的\end{document}前加入如下几行代码:{\small\bibliographystyle{IEEEtran}\bibliography{egbib}}即可在文章中用~\cite{}宏命令便捷的插入文内引用,且文章的Reference部分会自动排序、编号。..._egbib

Unity Shader - Predefined Shader preprocessor macros 着色器预处理宏-程序员宅基地

文章浏览阅读950次。目录:Unity Shader - 知识点目录(先占位,后续持续更新)原文:Predefined Shader preprocessor macros版本:2019.1Predefined Shader preprocessor macros着色器预处理宏Unity 编译 shader programs 期间的一些预处理宏。(本篇的宏介绍随便看看就好,要想深入了解,还是直接看Unity...

大数据平台,从“治理”数据谈起-程序员宅基地

文章浏览阅读195次。本文目录:一、大数据时代还需要数据治理吗?二、如何面向用户开展大数据治理?三、面向用户的自服务大数据治理架构四、总结一、大数据时代还需要数据治理吗?数据平台发展过程中随处可见的数据问题大数据不是凭空而来,1981年第一个数据仓库诞生,到现在已经有了近40年的历史,相对数据仓库来说我还是个年轻人。而国内企业数据平台的建设大概从90年代末就开始了,从第一代架构出现到..._数据治理从0搭建

大学抢课python脚本_用彪悍的Python写了一个自动选课的脚本 | 学步园-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏12次。高手请一笑而过。物理实验课别人已经做过3、4个了,自己一个还没做呢。不是咱不想做,而是咱不想起那么早,并且仅有的一次起得早,但是哈工大的服务器竟然超负荷,不停刷新还是不行,不禁感慨这才是真正的“万马争过独木桥“啊!服务器不给力啊……好了,废话少说。其实,我的想法很简单。写一个三重循环,不停地提交,直到所有的数据都accepted。其中最关键的是提交最后一个页面,因为提交用户名和密码后不需要再访问其..._哈尔滨工业大学抢课脚本

english_html_study english html-程序员宅基地

文章浏览阅读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

Cortex-M3双堆栈MSP和PSP_stm32 msp psp-程序员宅基地

文章浏览阅读5.5k次,点赞19次,收藏78次。什么是栈?在谈M3堆栈之前我们先回忆一下数据结构中的栈。栈是一种先进后出的数据结构(类似于枪支的弹夹,先放入的子弹最后打出,后放入的子弹先打出)。M3内核的堆栈也不例外,也是先进后出的。栈的作用?局部变量内存的开销,函数的调用都离不开栈。了解了栈的概念和基本作用后我们来看M3的双堆栈栈cortex-M3内核使用了双堆栈,即MSP和PSP,这极大的方便了OS的设计。MSP的含义是Main..._stm32 msp psp

推荐文章

热门文章

相关标签