<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      skf接口規(guī)范

       

       

      #ifndef __SKF_TYPE_DEF_H__
      #define __SKF_TYPE_DEF_H__
      #include "base_type.h"
      
      
      #ifndef _WINDOWS
      #define PACKED_ST(st) __attribute__((packed, aligned(1))) st
      #else
      #pragma pack(push, skf, 1)
      #define PACKED_ST(st) st
      #endif
      
      /*
          6.4.1 版本
          主版本號和次版本號以"."分隔,
          例如  Version 1.0,主版本號為 1,此版本號為 0;
          Version 2.10,主版本號為 2,此版本號為 10;
      */
      typedef struct version_st 
      {
          BYTE major; //主版本號
          BYTE minor; //次版本號
      }PACKED_ST(VERSION);
      
      /*
          6.4.2 設(shè)備信息
      */
      typedef struct devinfo_st 
      { 
          VERSION Version;          //版本號。數(shù)據(jù)結(jié)構(gòu)版本號,本結(jié)構(gòu)的版本號為1.0
          CHAR Manufacturer[64];    //設(shè)備廠商信息。以 "\0" 為結(jié)束符的 ASCII 字符串
          CHAR Issuer[64];          //發(fā)行廠商信息。以 "\0" 為結(jié)束符的 ASCII 字符串
          CHAR Label[32];           //設(shè)備標簽信息。以 "\0" 為結(jié)束符的 ASCII 字符串
          CHAR SerialNumber[32];    //設(shè)備序列號。以 "\0" 為結(jié)束符的 ASCII 字符串
          VERSION HWVersion;        //設(shè)備硬件版本
          VERSION FirmwareVersion;  //設(shè)備固件版本
          ULONG AlgSymCap;          //分組密碼算法標識
          ULONG AlgAsymCap;         //非對稱密碼算法標識
          ULONG AlgHashCap;         //密碼雜湊算法標識
          ULONG DevAuthAlgId;       //設(shè)備認證使用的分組密碼算法標識
          ULONG TotalSpace;         //設(shè)備總空間大小
          ULONG FreeSpace;          //用戶可用空間大小
          ULONG MaxECCBufferSize;   //能夠處理的 ECC 加密數(shù)據(jù)大小
          ULONG MaxBufferSize;      //能夠處理的分組運算和雜湊運算的數(shù)據(jù)大小
          BYTE Reserved[56];        //保留擴展  //todo 國芯協(xié)議,不支持2012版本接口規(guī)范,他們支持的規(guī)范版本是2010
      }PACKED_ST(DEVINFO); 
      typedef DEVINFO * PDEVINFO;
      
      
      
      #define MAX_RSA_MODULUS_LEN        256  // 算法模數(shù)的最大長度
      #define    MAX_RSA_EXPONENT_LEN    4    // 算法指數(shù)的最大長度
      /*
          6.4.3 RAS公鑰數(shù)據(jù)結(jié)構(gòu)
      */
      typedef struct rsapubkeyblob_st 
      {
          ULONG AlgID;    //算法標識號
          ULONG BitLen;   //模數(shù)的實際位長度,必須是 8 的倍數(shù)
          BYTE Modulus[MAX_RSA_MODULUS_LEN];  //模數(shù)  n = p * q,實際長度為 Bitlen/8 字節(jié).
          BYTE PublicExponent[MAX_RSA_EXPONENT_LEN]; //公鑰秘鑰,一般為 00010001
      }PACKED_ST(RSAPUBLICKEYBLOB);
      typedef RSAPUBLICKEYBLOB * PRSAPUBLICKEYBLOB;
      
      
      /*
          6.4.4 RSA 私鑰數(shù)據(jù)結(jié)構(gòu)
      */
      typedef struct rsaprivkeyblob_st 
      {
          ULONG AlgID;    //算法標識號
          ULONG BitLen;   //模數(shù)的實際位長度,必須是 8 的倍數(shù)
          BYTE Modulus[MAX_RSA_MODULUS_LEN];  // 模數(shù) n = p * q,實際長度為 Bitlen/8 字節(jié)
          BYTE PublicExponent[MAX_RSA_EXPONENT_LEN]; //公鑰秘鑰e,一般為 00010001
          BYTE PrivateExponent[MAX_RSA_MODULUS_LEN]; // 私鑰秘鑰d,實際長度為 Bitlen/8 字節(jié)
          BYTE Prime1[MAX_RSA_MODULUS_LEN/2];  // 素數(shù)p,實際長度為 Bitlen/16 字節(jié)
          BYTE Prime2[MAX_RSA_MODULUS_LEN/2];  // 素數(shù)q,實際長度為 Bitlen/16 字節(jié)
          BYTE Prime1Exponent[MAX_RSA_MODULUS_LEN/2]; //d, 模數(shù)模p的逆元,實際長度為 Bitlen/16 字節(jié)
          BYTE Prime2Exponent[MAX_RSA_MODULUS_LEN/2]; //d, 模數(shù)模q的逆元,實際長度為 Bitlen/16 字節(jié)
          BYTE Coefficient[MAX_RSA_MODULUS_LEN/2]; // q模p 的乘法逆元,實際長度為 Bitlen/16 字節(jié)
      }PACKED_ST(RSAPRIVATEKEYBLOB);
      typedef RSAPRIVATEKEYBLOB * PRSAPRIVATEKEYBLOB;
      
      #define ECC_MAX_XCOORDINATE_BITS_LEN        512   // ECC算法 X 坐標的最大長度
      #define ECC_MAX_YCOORDINATE_BITS_LEN        ECC_MAX_XCOORDINATE_BITS_LEN   // ECC算法 Y 坐標的最大長度
      #define ECC_MAX_MODULUS_BITS_LEN            ECC_MAX_XCOORDINATE_BITS_LEN   // ECC算法 模數(shù)的最大長度
      /*
          6.4.5 ECC 公鑰數(shù)據(jù)結(jié)構(gòu)
      */
      typedef struct eccpubkeyblob_st 
      {
          ULONG BitLen;  //模數(shù)的實際位長度,必須是 8 的倍數(shù)
          BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN / 8];  //曲線上點的 X 坐標(64位)
          BYTE YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN / 8];  //曲線上點的 y 坐標(64位)
      }PACKED_ST(ECCPUBLICKEYBLOB);
      typedef ECCPUBLICKEYBLOB * PECCPUBLICKEYBLOB;
      
      /*
          6.4.6 ECC 私鑰數(shù)據(jù)結(jié)構(gòu)
      */
      typedef struct eccprivkeyblob_st 
      {
          ULONG BitLen;   //模數(shù)的實際位長度,必須是 8 的倍數(shù)
          BYTE PrivateKey[ECC_MAX_MODULUS_BITS_LEN / 8]; //私有秘鑰(64位)
      }PACKED_ST(ECCPRIVATEKEYBLOB);
      typedef ECCPRIVATEKEYBLOB  * PECCPRIVATEKEYBLOB; 
      
      /*
          6.4.7 ECC 密文數(shù)據(jù)結(jié)構(gòu)
      */
      typedef struct ecccipherblob_st
      { 
          BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN / 8];  //與y組成橢圓 曲線上的點(x,y)
          BYTE YCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN / 8];  //與x組成橢圓 曲線上的點(x,y)
          BYTE HASH[32]; //明文的雜湊值
          ULONG CipherLen;  //密文數(shù)據(jù)長度
          BYTE Cipher[1]; //密文數(shù)據(jù), 實際長度為 CipherLen 字節(jié)...這種變長,最不好處理了.
      } PACKED_ST(ECCCIPHERBLOB);
      typedef ECCCIPHERBLOB  * PECCCIPHERBLOB; 
      
      /*
          6.4.8 ECC簽名數(shù)據(jù)結(jié)構(gòu)
      */
      typedef struct eccsignatureblob_st
      { 
          BYTE r[ECC_MAX_XCOORDINATE_BITS_LEN / 8];  //簽名結(jié)果的 r 部分 (64 Byte)
          BYTE s[ECC_MAX_XCOORDINATE_BITS_LEN / 8];  //簽名結(jié)果的 s 部分 (64 Byte)
      }PACKED_ST(ECCSIGNATUREBLOB); 
      typedef ECCSIGNATUREBLOB  * PECCSIGNATUREBLOB;
      
      #define    MAX_IV_LEN            32   // 初始向量的最大長度
      
      /*
          6.4.9 分組密碼參數(shù)
      */
      typedef struct blockcipherparam_st 
      { 
          BYTE IV[MAX_IV_LEN];  //初始向量
          ULONG IVLen; //初始向量實際長度(按字節(jié)計算)
          ULONG PaddingType; //填充方式,0表示不填充,1表示按照 PSCK#5 方式進行填充
          ULONG FeedBitLen; //反饋值的位長度(按位計算),只針對 OFB, CFB 模式
      } PACKED_ST(BLOCKCIPHERPARAM); 
      typedef BLOCKCIPHERPARAM  *  PBLOCKCIPHERPARAM;
      
      /*
          6.4.10 ECC加密秘鑰對 保護結(jié)構(gòu)
      */
      typedef struct SKF_ENVELOPEDKEYBLOB{
          ULONG Version;  //當前版本為1
          ULONG ulSymmAlgID; //對稱算法標識,限定 ECB模式
          ULONG ulBits;   //加密秘鑰對的秘鑰位長度
          BYTE cbEncryptedPriKey[64];  //加密秘鑰對私鑰的密文
          ECCPUBLICKEYBLOB PubKey;   //加密秘鑰對的公鑰
          ECCCIPHERBLOB ECCCipherBlob; //用保護公鑰加密的對稱秘鑰密文
      }PACKED_ST(ENVELOPEDKEYBLOB);
      typedef ENVELOPEDKEYBLOB  *  PENVELOPEDKEYBLOB;
      
      
      /*
          6.4.11 文件屬性
      */
      typedef struct fileattr_st 
      {
          CHAR FileName[32];  // 文件名。以 "\0" 結(jié)束的 ASCII 字符串,最大長度是32
          ULONG FileSize;   //文件大小。創(chuàng)建文件時定義的文件大小
          ULONG ReadRights;  //讀取權(quán)限。讀取文件需要的權(quán)限
          ULONG WriteRights; //寫入權(quán)限。寫入文件需要的權(quán)限
      }PACKED_ST(FILEATTRIBUTE); 
      typedef FILEATTRIBUTE  *  PFILEATTRIBUTE;
      
      
      #define V_FPF_FEARURE  0x00
      #define V_FPF_IMAGE    0x01
      #define V_FPF_RECOVER  0x100
      #define V_FPF_BEGIN    0x200
      typedef struct __fp_id_name
      {
          ULONG uId;
          char szName[32];
          ULONG uAttr;
      }PACKED_ST(FP_ID_NAME);
      
      typedef struct __fp_info
      {
          ULONG uType;
          ULONG uRegCount;
          ULONG uMaxFP;
          FP_ID_NAME *pIdName;
          ULONG uCount;
      }PACKED_ST(FP_INFO);
      
      //Flags for CIPHER_PARAM
      #define CIPHER_NO_PADDING     0x0000
      #define CIPHER_PKCS5_PADDING  0x0001
      #define CIPHER_ENCRYPT        0x0000
      #define CIPHER_DECRYPT        0x0010
      #define CIPHER_FEED_BITS_MASK 0xFF00
      typedef struct __cipher_param
      {
          ULONG uAlgo;
          ULONG uFlags;
          int cbIV;
          BYTE  pbIV[32];
          int cbKey;
          BYTE  pbKey[128];
      }PACKED_ST(CIPHER_PARAM);
      
      typedef struct blockcipherdata_st {
          ULONG num;
          BYTE **buf;
          ULONG *bufLen;
      }PACKED_ST(BLOCKCIPHERDATA);
      typedef BLOCKCIPHERDATA *PBLOCKCIPHERDATA;
      
      typedef struct init_param_st
      {
          char* token;/* the length MUST BE less than 32 bytes */
          BYTE* k_external;/* the length MUST BE 16 bytes, CAN be NULL */
      
          char *app_name; /* app name */
          char* k_sopin;/* the length MUST BE less than 16 bytes */
          char* k_userpin;/* the length MUST BE less than 16 bytes */
          int so_retry;/* value 1-15 */
          int user_retry;/* value 1-15 */
      }PACKED_ST(INIT_PARAM);
      
      #define        V_SGD_SIGN    (0x100)
      #define        V_SGD_KEYX    (0x400)
      
      // 以下宏用于V_GenerateKey函數(shù)ulAlgId參數(shù)
      #define GENERATE_KEY_USAGE_SIGN        0x00001000
      #define GENERATE_KEY_USAGE_ENCRYPT    0x00002000
      #define GENERATE_KEY_USAGE_MASK        0x00003000
      #define GENERATE_KEY_SRAM           0x00010000
      #define GENERATE_KEY_EFLASH          0x00020000
      #define GENERATE_KEY_SAVE_MASK      0x00030000
      #define GENERATE_KEY_ALGO_RSA        0x00000100
      #define GENERATE_KEY_ALGO_SM2        0x00000200
      #define GENERATE_KEY_ALGO_SM9        0x00000300
      #define GENERATE_KEY_ASYM_ALGO_MASK 0x00000300
      #define GENERATE_KEY_SYM_MODE_ECB   0x00000001
      #define GENERATE_KEY_SYM_MODE_CBC   0x00000002
      #define GENERATE_KEY_SYM_MODE_CFB   0x00000003
      #define GENERATE_KEY_SYM_MODE_OFB   0x00000004
      #define GENERATE_KEY_SYM_MODE_MAC   0x00000005
      #define GENERATE_KEY_SYM_MODE_MASK  0x00000007
      #define GENERATE_KEY_ALGO_DES        0x00000010
      #define GENERATE_KEY_ALGO_AES        0x00000020
      #define GENERATE_KEY_ALGO_SM1        0x00000030
      #define GENERATE_KEY_ALGO_SM4        0x00000040
      #define GENERATE_KEY_ALGO_SM6        0x00000050
      #define GENERATE_KEY_ALGO_SSF33        0x00000060
      #define GENERATE_KEY_SYM_ALGO_MASK  0x00000070
      #define GENERATE_KEY_BIT_64            0x00400000      
      #define GENERATE_KEY_BIT_128        0x00800000  
      #define GENERATE_KEY_BIT_256        0x01000000      
      #define GENERATE_KEY_BIT_512        0x02000000       
      #define GENERATE_KEY_BIT_1024        0x04000000      
      #define GENERATE_KEY_BIT_2048        0x08000000       
      #define GENERATE_KEY_BIT_MASK        0x0FF00000
      
      #if defined(_WINDOWS)
      #pragma pack(pop, skf) 
      #endif
      
      #define MAX_CONTAINER_NAME_LEN            64
      #define MAX_APPLICATION_NAME_LEN        16
      
      /* algorithm */
      #define SGD_SM1_ECB            0x00000101       //SM1 算法 ECB 加密模式 
      #define SGD_SM1_CBC            0x00000102       //SM1 算法 CBC 加密模式 
      #define SGD_SM1_CFB            0x00000104       //SM1 算法 CFB 加密模式 
      #define SGD_SM1_OFB            0x00000108       //SM1 算法 OFB 加密模式 
      #define SGD_SM1_MAC            0x00000110       //SM1 算法 MAC 運算 
      #define SGD_SSF33_ECB       0x00000201       //SSF33 算法 ECB 加密模式 
      #define SGD_SSF33_CBC       0x00000202       //SSF33 算法 CBC 加密模式 
      #define SGD_SSF33_CFB       0x00000204       //SSF33 算法 CFB 加密模式 
      #define SGD_SSF33_OFB       0x00000208       //SSF33 算法 OFB 加密模式 
      #define SGD_SSF33_MAC       0x00000210       //SSF33 算法 MAC 運算 
      #define SGD_SMS4_ECB        0x00000401       //SMS4 算法 ECB 加密模式 
      #define SGD_SMS4_CBC        0x00000402       //SMS4 算法 CBC 加密模式 
      #define SGD_SMS4_CFB        0x00000404       //SMS4 算法 CFB 加密模式 
      #define SGD_SMS4_OFB        0x00000408       //SMS4 算法 OFB 加密模式 
      #define SGD_SMS4_MAC        0x00000410       //SMS4 算法 MAC 運算 
      
      #define SGD_RSA                0x00010000       //RSA 算法 
      #define SGD_SM2                0x00020000       //SM2 算法 
      #define SGD_SM2_1            0x00020100       //橢圓曲線簽名算法 
      #define SGD_SM2_2            0x00020200       //橢圓曲線密鑰交換協(xié)議 
      #define SGD_SM2_3            0x00020400       //橢圓曲線加密算法 
      
      #define SGD_SM3                0x00000001       //SM3 雜湊算法 
      #define SGD_SHA1            0x00000002       //SHA1 雜湊算法 
      #define SGD_SHA256            0x00000004       //SHA256 雜湊算法 
      
      
      ////////////////////////////VENDOR DEFINED/////////////////////////////////////
      #define SGD_DES_ECB            0x80000101       //DES 算法 ECB 加密模式 
      #define SGD_DES_CBC            0x80000102       //DES 算法 CBC 加密模式 
      #define SGD_DES_CFB            0x80000104       //DES 算法 CFB 加密模式 
      #define SGD_DES_OFB            0x80000108       //DES 算法 OFB 加密模式 
      #define SGD_DES_MAC            0x80000110       //DES 算法 MAC 運算 
      
      #define SGD_AES_ECB            0x80000201       //AES-128 算法 ECB 加密模式 
      #define SGD_AES_CBC            0x80000202       //AES-128 算法 CBC 加密模式 
      #define SGD_AES_CFB            0x80000204       //AES-128 算法 CFB 加密模式 
      #define SGD_AES_OFB            0x80000208       //AES-128 算法 OFB 加密模式 
      #define SGD_AES_MAC            0x80000210       //AES-128 算法 MAC 運算 
      
      #define SGD_SM6_ECB            0x80000301       //SM6 算法 ECB 加密模式 
      #define SGD_SM6_CBC            0x80000302       //SM6 算法 CBC 加密模式 
      #define SGD_SM6_CFB            0x80000304       //SM6 算法 CFB 加密模式 
      #define SGD_SM6_OFB            0x80000308       //SM6 算法 OFB 加密模式 
      #define SGD_SM6_MAC            0x80000310       //SM6 算法 MAC 運算 
      ////////////////////////////VENDOR DEFINED/////////////////////////////////////
      
      #ifndef TRUE
      #define TRUE                1                //布爾值為真 
      #endif
      #ifndef FALSE
      #define FALSE                0                //布爾值為假 
      #endif
      
      #ifndef NULL
      #define NULL                0
      #endif
      
      #define ADMIN_TYPE            0                //管理員 PIN 類型 
      #define USER_TYPE            1                //用戶 PIN 類型 
      
      
      /* account */
      // 6.4.12 權(quán)限類型
      #define SECURE_NEVER_ACCOUNT    0x00        //不允許 
      #define SECURE_ADM_ACCOUNT        0x01        //管理員權(quán)限 
      #define SECURE_USER_ACCOUNT        0x10        //用戶權(quán)限 
      #define SECURE_ANYONE_ACCOUNT    0xFF        //任何人 
      
      #ifndef MIN_PIN_LEN
      #define MIN_PIN_LEN                0x06
      #endif
      #ifndef MAX_PIN_LEN
      #ifdef MAX_PIN_LEN
      #undef MAX_PIN_LEN
      #endif
      #define MAX_PIN_LEN                0x10
      #endif
      
      
      // 6.4.13 設(shè)備狀態(tài)
      #define DEV_ABSENT_STATE        0x00000000      //設(shè)備不存在       
      #define DEV_PRESENT_STATE        0x00000001    //設(shè)備存在        
      #define DEV_UNKNOW_STATE        0x00000002    //設(shè)備狀態(tài)未知    
      
      #ifndef PKCS5_PADDING
      #define PKCS5_PADDING            1
      #endif
      
      #ifndef NO_PADDING
      #define NO_PADDING                0
      #endif
      
      #define CTNF_NOSET                0
      #define CTNF_RSA                1
      #define CTNF_ECC                2
      
      #define HLF_DEV                    0x1
      #define HLF_APP                    0x2
      #define HLF_CTN                    0x4
      #define HLF_KEY                    0x8
      #define HLF_HASH                0x10
      #define HLF_ECCWRAP_KEY            0x20
      
      /* return value */
      #define SAR_OK                            0x00000000  //成功
      #define SAR_FAIL                        0x0A000001  //失敗
      #define SAR_UNKOWNERR                    0x0A000002  //異常錯誤
      #define SAR_NOTSUPPORTYETERR            0x0A000003  //不支持的服務(wù)
      #define SAR_FILEERR                        0x0A000004  //文件錯誤
      #define SAR_INVALIDHANDLEERR            0x0A000005  //無效句柄
      #define SAR_INVALIDPARAMERR                0x0A000006  //無效參數(shù)
      #define SAR_READFILEERR                    0x0A000007  //讀取文件錯誤
      #define SAR_WRITEFILEERR                0x0A000008  //寫入文件錯誤
      #define SAR_NAMELENERR                    0x0A000009  //名稱長度錯誤
      #define SAR_KEYUSAGEERR                    0x0A00000A  //秘鑰用途錯誤
      #define SAR_MODULUSLENERR                0x0A00000B  //模的長度錯誤
      #define SAR_NOTINITIALIZEERR            0x0A00000C  //未初始化
      #define SAR_OBJERR                        0x0A00000D  //對象錯誤
      #define SAR_MEMORYERR                    0x0A00000E  //內(nèi)存錯誤
      #define SAR_TIMEOUTERR                    0x0A00000F  //超時
      #define SAR_INDATALENERR                0x0A000010  //輸入數(shù)據(jù)長度錯誤
      #define SAR_INDATAERR                    0x0A000011  //輸入數(shù)據(jù)錯誤
      #define SAR_GENRANDERR                    0x0A000012  //生成隨機數(shù)錯誤
      #define SAR_HASHOBJERR                    0x0A000013  //HASH 對象錯誤
      #define SAR_HASHERR                        0x0A000014  //HASH 運算錯誤
      #define SAR_GENRSAKEYERR                0x0A000015  //產(chǎn)生 RSA 秘鑰錯誤
      #define SAR_RSAMODULUSLENERR            0x0A000016  //RSA 秘鑰模的長度錯誤
      #define SAR_CSPIMPRTPUBKEYERR            0x0A000017  //CSP服務(wù)導(dǎo)入公鑰錯誤
      #define SAR_RSAENCERR                    0x0A000018  //RSA 加密錯誤
      #define SAR_RSADECERR                    0x0A000019  //RSA 解密錯誤
      #define SAR_HASHNOTEQUALERR                0x0A00001A  //HASH 不相等錯誤
      #define SAR_KEYNOTFOUNTERR                0x0A00001B  //秘鑰未找到錯誤
      #define SAR_CERTNOTFOUNTERR                0x0A00001C  //證書未找到錯誤
      #define SAR_NOTEXPORTERR                0x0A00001D   //對象未導(dǎo)出
      #define SAR_DECRYPTPADERR                0x0A00001E  //解密時做補丁錯誤
      #define SAR_MACLENERR                    0x0A00001F  //MAC 長度錯誤
      #define SAR_BUFFER_TOO_SMALL            0x0A000020  //緩沖區(qū)不足
      #define SAR_KEYINFOTYPEERR                0x0A000021  //秘鑰類型錯誤
      #define SAR_NOT_EVENTERR                0x0A000022  //無事件錯誤
      #define SAR_DEVICE_REMOVED                0x0A000023  //設(shè)備已移除
      #define SAR_PIN_INCORRECT                0x0A000024  //PIN 不正確
      #define SAR_PIN_LOCKED                    0x0A000025  //PIN 被鎖死
      #define SAR_PIN_INVALID                    0x0A000026  //PIN 無效
      #define SAR_PIN_LEN_RANGE                0x0A000027  //PIN 長度錯誤
      #define SAR_USER_ALREADY_LOGGED_IN        0x0A000028  //用戶已經(jīng)登錄
      #define SAR_USER_PIN_NOT_INITIALIZED    0x0A000029  //沒有初始化用戶口令
      #define SAR_USER_TYPE_INVALID            0x0A00002A  //PIN 類型錯誤
      #define SAR_APPLICATION_NAME_INVALID    0x0A00002B  //應(yīng)用名稱錯誤
      #define SAR_APPLICATION_EXISTS            0x0A00002C  //應(yīng)用已經(jīng)存在
      #define SAR_USER_NOT_LOGGED_IN            0x0A00002D  //用戶沒有登錄
      #define SAR_APPLICATION_NOT_EXISTS        0x0A00002E  //應(yīng)用不存在
      #define SAR_FILE_ALREADY_EXIST            0x0A00002F  //文件已經(jīng)存在
      #define SAR_NO_ROOM                        0x0A000030  //空間不足
      #define SAR_FILE_NOT_EXIST                0x0A000031  //文件不存在
      #define SAR_REACH_MAX_CONTAINER_COUNT    0x0A000032  //已達到最大可管理容器數(shù)
      
      #define VR_FP_ID_INVALIED               0x0B000001  
      #define VR_FP_IMAGE_ERROR               0x0B000002  
      #define VR_FP_MATCH_ERROR               0x0B000003  
      #define VR_FP_NOT_LEAVE                 0x0B000004  
      #define VR_FP_NOT_TOUCH                 0x0B000005  
      #define VR_OP_NOT_FOUND                    0x0B000006  
      
      
      
      
      // 容器類型
      static const ULONG CONTIANER_TYPE_NULL = 0;   // 0:未定義、尚未分配類型或者為空容器
      static const ULONG CONTIANER_TYPE_RSA  = 1;   // 1:RSA容器
      static const ULONG CONTIANER_TYPE_ECC  = 2;   // 2:ECC容器
      
      
      
      
      
          
      
      #endif /*__SKF_TYPE_DEF_H__*/

       

      ### 7.6 密碼服務(wù) 系列函數(shù)
      |函數(shù)指針 | 注釋|
      |----------|----------|
      SKF_FUN_INFO(SKF_GenRandom, (DEVHANDLE hDev,BYTE* pbRandom,ULONG ulRandom));  | 生成隨機數(shù)
      SKF_FUN_INFO(SKF_GenECCKeyPair, (HCONTAINER hContainer, ULONG ulAlgId, PECCPUBLICKEYBLOB pBlob));  |  生成ECC簽名密鑰對
      SKF_FUN_INFO(SKF_ImportECCKeyPair, (HCONTAINER hContainer, PENVELOPEDKEYBLOB blob)); |  導(dǎo)入ECC加密密鑰對
      SKF_FUN_INFO(SKF_ECCSignData, (HCONTAINER hContainer, BYTE *pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)); |  ECC 簽名
      SKF_FUN_INFO(SKF_ECCVerify, (DEVHANDLE hDev , PECCPUBLICKEYBLOB pECCPubKeyBlob, BYTE *pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)); |  ECC 驗簽
      SKF_FUN_INFO(SKF_ECCExportSessionKey, (HCONTAINER hContainer, ULONG ulAlgId, PECCPUBLICKEYBLOB pPubKey, PECCCIPHERBLOB pData, HANDLE *phSessionKey)); |  ECC 生成并導(dǎo)出會話密鑰
      SKF_FUN_INFO(SKF_ExtECCEncrypt, (DEVHANDLE hDev, PECCPUBLICKEYBLOB pECCPubKeyBlob, BYTE* pbPlainText, ULONG ulPlainTextLen, PECCCIPHERBLOB pCipherText)); |  ECC 外來公鑰加密
      SKF_FUN_INFO(SKF_ExtECCDecrypt, (DEVHANDLE hDev, PECCPRIVATEKEYBLOB pECCPriKeyBlob, PECCCIPHERBLOB pCipherText, BYTE* pbPlainText, ULONG* pulPlainTextLen)); |  ECC 外來私鑰解密
      SKF_FUN_INFO(SKF_ExtECCSign, (DEVHANDLE hDev, PECCPRIVATEKEYBLOB pECCPriKeyBlob, BYTE* pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)); |  ECC 外來私鑰簽名
      SKF_FUN_INFO(SKF_ExtECCVerify, (DEVHANDLE hDev, PECCPUBLICKEYBLOB pECCPubKeyBlob, BYTE* pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)); |  ECC 外來公鑰驗簽
      SKF_FUN_INFO(SKF_GenerateAgreementDataWithECC, (HCONTAINER hContainer, ULONG ulAlgId,        PECCPUBLICKEYBLOB pTempECCPubKeyBlob,BYTE* pbID, ULONG ulIDLen,        HANDLE *phAgreementHandle)); |  ECC 生成密鑰協(xié)商參數(shù)并輸出
      SKF_FUN_INFO(SKF_GenerateAgreementDataAndKeyWithECC, (HANDLE hContainer, ULONG ulAlgId,    PECCPUBLICKEYBLOB pSponsorECCPubKeyBlob, PECCPUBLICKEYBLOB pSponsorTempECCPubKeyBlob,    PECCPUBLICKEYBLOB pTempECCPubKeyBlob, BYTE* pbID, ULONG ulIDLen, BYTE *pbSponsorID,    ULONG ulSponsorIDLen, HANDLE *phKeyHandle)); |  ECC產(chǎn)生協(xié)商數(shù)據(jù)并計算會話密鑰
      SKF_FUN_INFO(SKF_GenerateKeyWithECC, (HANDLE hAgreementHandle, PECCPUBLICKEYBLOB pECCPubKeyBlob,    PECCPUBLICKEYBLOB pTempECCPubKeyBlob, BYTE* pbID, ULONG ulIDLen, HANDLE *phKeyHandle)); |  ECC計算會話密鑰
      SKF_FUN_INFO(SKF_ExportPublicKey, (HCONTAINER hContainer, BOOL bSignFlag, BYTE* pbBlob, ULONG* pulBlobLen));  |  導(dǎo)出公鑰
      SKF_FUN_INFO(SKF_ImportSessionKey, (HCONTAINER hContainer, ULONG ulAlgId,BYTE *pbWrapedData, ULONG ulWrapedLen, HANDLE *phKey));  |  導(dǎo)入會話密鑰
      SKF_FUN_INFO(SKF_SetSymmKey, (DEVHANDLE hDev, BYTE* pbKey, ULONG ulAlgID, HANDLE* phKey));  |  明文導(dǎo)入會話密鑰   | todo 2012版本已經(jīng)沒有這個方法
      SKF_FUN_INFO(SKF_EncryptInit, (HANDLE hKey, BLOCKCIPHERPARAM Param));  |  加密初始化
      SKF_FUN_INFO(SKF_Encrypt, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbEncrypt, ULONG* pulEncryptLen)); | 單組數(shù)據(jù)加碼
      SKF_FUN_INFO(SKF_EncryptUpdate, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbEncrypt, ULONG* pulEncryptLen)); | 多組數(shù)據(jù)加密
      SKF_FUN_INFO(SKF_EncryptFinal, (HANDLE hKey, BYTE*pbEncrypt,ULONG* pulEncryptLen)); | 結(jié)束加密
      SKF_FUN_INFO(SKF_DecryptInit, (HANDLE hKey, BLOCKCIPHERPARAM Param));  |  解密初始化
      SKF_FUN_INFO(SKF_Decrypt, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbDecrypt, ULONG* pulDecryptLen)); | 單組數(shù)據(jù)解密
      SKF_FUN_INFO(SKF_DecryptUpdate, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbDecrypt, ULONG* pulDecryptLen)); | 多組數(shù)據(jù)解密
      SKF_FUN_INFO(SKF_DecryptFinal, (HANDLE hKey, BYTE*pbDecrypt, ULONG* pulDecryptLen));  |  結(jié)束解密
      SKF_FUN_INFO(SKF_DigestInit, (DEVHANDLE hDev, ULONG ulAlgID,  PECCPUBLICKEYBLOB pPubKey, BYTE *pucID, ULONG ulIDLen, HANDLE *phHash)); | 密碼雜湊初始化
      SKF_FUN_INFO(SKF_Digest, (HANDLE hHash, BYTE* pbData, ULONG ulDataLen, BYTE* pbDigest, ULONG* pulDigestLen)); | 單組數(shù)據(jù)密碼雜湊
      SKF_FUN_INFO(SKF_DigestUpdate, (HANDLE hHash, BYTE* pbData, ULONG ulDataLen)); | 多組數(shù)據(jù)密碼雜湊
      SKF_FUN_INFO(SKF_DigestFinal, (HANDLE hHash, BYTE* pbDigest, ULONG* pulDigestLen)); | 結(jié)束密碼雜湊
      SKF_FUN_INFO(SKF_MacInit, (HANDLE hKey, BLOCKCIPHERPARAM* pMacParam, HANDLE* phMac)); | 消息鑒別碼運算初始化
      SKF_FUN_INFO(SKF_Mac, (HANDLE hMac, BYTE* pbData, ULONG ulDataLen, BYTE* pbMac, ULONG* pulMacLen)); |  單組數(shù)據(jù)消息鑒別碼運算
      SKF_FUN_INFO(SKF_MacUpdate, (HANDLE hMac, BYTE* pbData, ULONG ulDataLen)); | 多組數(shù)據(jù)消息鑒別碼運算
      SKF_FUN_INFO(SKF_MacFinal, (HANDLE hMac, BYTE* pbMac, ULONG* pulMacLen));  | 結(jié)束消息鑒別碼運算
      SKF_FUN_INFO(SKF_CloseHandle, (HANDLE hHandle));  |  關(guān)閉密碼對象句柄

       

      ## 函數(shù)介紹
      
      ### 7.6.11 生成ECC簽名密鑰對
      (SKF_GenECCKeyPair, (HCONTAINER hContainer, ULONG ulAlgId, PECCPUBLICKEYBLOB pBlob))
      
      功能描述:生成 ECC 簽名 密鑰對并輸出 簽名公鑰。
      
      hContainer: [IN] 容器句柄
      ulAlgId: [IN] 算法標識,只支持 SGD_SM2_1 算法
      pBlob: [OUT] 返回ECC公鑰數(shù)據(jù)結(jié)構(gòu)體
      
      
      
      ### 7.6.12 導(dǎo)入ECC加密密鑰對
      (SKF_ImportECCKeyPair, (HCONTAINER hContainer, PENVELOPEDKEYBLOB blob))
      
      功能描述:導(dǎo)入 ECC 公私鑰對。
      
      hContainer: [IN] 密鑰容器句柄
      blob: [IN] 受保護的加密密鑰對
      
      
      ### 7.6.13 ECC簽名
      (SKF_ECCSignData, (HCONTAINER hContainer, BYTE *pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature))
      
      功能描述:ECC 數(shù)字簽名。采用 ECC算法 和指定私鑰 hKey ,對指定數(shù)據(jù) pbData進行數(shù)字簽名。簽名后的結(jié)果存放到 pSignature中。
      
      hContainer: [IN] 密鑰容器句柄
      pbData: [IN] 待簽名的數(shù)據(jù)
      ulDataLen: [IN] 待簽名的數(shù)據(jù)長度,必須小于密鑰模長度
      pSignature: [OUT] 簽名值
      備注:輸入數(shù)據(jù)位待處理的雜湊值。 先對需要處理的數(shù)據(jù),用SM3雜湊算法計算(得到摘要),然后再用ECC簽名算法簽名(使用私鑰對摘要內(nèi)容加密)。
      
      
      ### 7.6.14 ECC驗簽
      (SKF_ECCVerify, (DEVHANDLE hDev , PECCPUBLICKEYBLOB pECCPubKeyBlob, BYTE *pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature))
      
      功能描述:使用 ECC 公鑰對數(shù)據(jù)進行驗簽。
      
      hDev: [IN] 設(shè)備句柄
      pECCPubKeyBlob: [IN] ECC公鑰數(shù)據(jù)結(jié)構(gòu)體
      pbData: [IN] 待驗簽的數(shù)據(jù)
      ulDataLen: [IN] 待驗簽的數(shù)據(jù)長度,必須小于密鑰模長度
      pSignature: [IN] 簽名值
      備注:輸入數(shù)據(jù)位待處理的雜湊值。 先對需要處理的數(shù)據(jù),用SM3雜湊算法計算(得到摘要),然后再用ECC驗簽算法驗簽(使用公鑰對摘要內(nèi)容解密)。
      
      
      ### 7.6.15 生成并導(dǎo)出會話密鑰
      SKF_ECCExportSessionKey, (HCONTAINER hContainer, ULONG ulAlgId, PECCPUBLICKEYBLOB pPubKey, PECCCIPHERBLOB pData, HANDLE *phSessionKey)
      
      功能描述:生成會話密鑰并用外部公鑰加密導(dǎo)出
      
      hContainer: [IN] 容器句柄
      ulAlgId: [IN] 會話密鑰算法標識, (廠家提供的示例里面,這里是用的 SGD_SM1_ECB 對稱加密算法)
      pPubKey: [IN] 外部輸入的公鑰結(jié)構(gòu)
      pData: [OUT] 會話密鑰密文
      phSessionKey: [OUT] 返回會話密鑰句柄
      .....................---------------需要研究這里第4個參數(shù),和容器本身自己的 公鑰,是什么關(guān)系;是不是加解密關(guān)系
      
      
      ### 7.6.16  ECC 外來公鑰加密
      SKF_ExtECCEncrypt, (DEVHANDLE hDev, PECCPUBLICKEYBLOB pECCPubKeyBlob, BYTE* pbPlainText, ULONG ulPlainTextLen, PECCCIPHERBLOB pCipherText)
      
      功能描述:使用外部傳入的 ECC 公鑰對輸入的數(shù)據(jù)做加密運算并輸出結(jié)果。
      
      hDev: [IN] 設(shè)備句柄
      pECCPubKeyBlob: [IN] ECC公鑰數(shù)據(jù)結(jié)構(gòu)
      pbPlainText: [IN] 待加密的明文數(shù)據(jù)
      ulPlainTextLen: [IN] 待加密的明文數(shù)據(jù)長度
      pCipherText: [OUT] 加密后的密文數(shù)據(jù)
      -----------------------------------這里2個接口都涉及到了 PECCCIPHERBLOB 這個結(jié)構(gòu)體,這個結(jié)構(gòu)體各個字段的含義,需要研究一下
      
      
      ### 7.6.17 ECC 外來私鑰解密  [IN/OUT] ======  僅僅用于測試和調(diào)試 ======
      SKF_ExtECCDecrypt, (DEVHANDLE hDev, PECCPRIVATEKEYBLOB pECCPriKeyBlob, PECCCIPHERBLOB pCipherText, BYTE* pbPlainText, ULONG* pulPlainTextLen)
      
      功能描述:使用外部傳入的 ECC 私鑰對輸入的數(shù)據(jù)做解密運算并輸出結(jié)果。
      
      hDev: [IN] 設(shè)備句柄
      pECCPriKeyBlob: [IN] ECC私鑰數(shù)據(jù)結(jié)構(gòu)
      pCipherText: [IN] 待解密的密文數(shù)據(jù)
      pbPlainText: [OUT] 返回明文數(shù)據(jù),如果該參數(shù)為NULL,則由 pulPlainTextLen 返回明文數(shù)據(jù)的實際長度
      -------------------- 特別留意這里的 [IN/OUT]
      pulPlainTextLen: [IN/OUT] 輸入時表示pbPlainText換沖區(qū)的長度; 輸出時表示明文數(shù)據(jù)的實際長度
      
      備注:本函數(shù)僅用于測試和調(diào)試,不建議用于實際的密碼服務(wù)。
      
      
      ### 7.6.18 ECC 外來私鑰簽名 ======  僅僅用于測試和調(diào)試 ======
      (SKF_ExtECCSign, (DEVHANDLE hDev, PECCPRIVATEKEYBLOB pECCPriKeyBlob, BYTE* pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature))
      
      功能描述:使用外部傳入的 ECC 私鑰對輸入的數(shù)據(jù)做簽名運算并計算結(jié)果。
      
      hDev: [IN] 設(shè)備句柄
      pECCPriKeyBlob: [IN] ECC私鑰數(shù)據(jù)結(jié)構(gòu)
      pbData: [IN] 待簽名的數(shù)據(jù)
      ulDataLen: [IN] 待簽名的數(shù)據(jù)長度
      pSignature: [OUT] 簽名值
      備注:輸入數(shù)據(jù)為待簽數(shù)據(jù)的雜湊值。
      備注:本函數(shù)僅用于測試和調(diào)試,不建議用于實際的密碼服務(wù)。
      
      
      ### 7.6.19 ECC 外來公鑰驗簽
      SKF_ExtECCVerify, (DEVHANDLE hDev, PECCPUBLICKEYBLOB pECCPubKeyBlob, BYTE* pbData, ULONG ulDataLen, PECCSIGNATUREBLOB pSignature)
      
      功能描述:使用外部傳入的 ECC 公鑰做簽名驗證
      
      hDev: [IN] 設(shè)備句柄
      pECCPubKeyBlob: [IN] ECC公鑰數(shù)據(jù)結(jié)構(gòu)
      pbData: [IN] 待驗簽的數(shù)據(jù)
      ulDataLen: [IN] 待驗簽的數(shù)據(jù)長度
      pSignature: [IN] 簽名值
      備注:輸入數(shù)據(jù)為待驗簽的數(shù)據(jù)的雜湊值。
      
      ### 7.6.20 ECC 生成密鑰協(xié)商參數(shù)并輸出
      SKF_GenerateAgreementDataWithECC, (HCONTAINER hContainer, ULONG ulAlgId, PECCPUBLICKEYBLOB pTempECCPubKeyBlob,BYTE* pbID, ULONG ulIDLen, HANDLE *phAgreementHandle)
      
      功能描述:使用 ECC 密鑰協(xié)商算法,為計算會話密鑰而產(chǎn)生協(xié)商參數(shù),臨時返回 ECC 密鑰對的公鑰及協(xié)商句柄。
      
      hContainer: [IN] 容器句柄
      ulAlgId: [IN] 會話密鑰算法標識
      pTempECCPubKeyBlob: [OUT] 發(fā)起方的臨時 ECC 公鑰
      pbID: [IN] 發(fā)起方的 ID
      ulIDLen: [IN] 發(fā)起方 ID 的長度,不大于32 
      phAgreementHandle: [OUT] 返回的密鑰協(xié)商句柄
      備注:為協(xié)商會話密鑰,協(xié)商的發(fā)起方應(yīng)首先調(diào)用本函數(shù)
      
      
      ### 7.6.21 ECC產(chǎn)生協(xié)商數(shù)據(jù)并計算會話密鑰
      SKF_GenerateAgreementDataAndKeyWithECC, (HANDLE hContainer, ULONG ulAlgId, PECCPUBLICKEYBLOB pSponsorECCPubKeyBlob, PECCPUBLICKEYBLOB pSponsorTempECCPubKeyBlob,    PECCPUBLICKEYBLOB pTempECCPubKeyBlob, BYTE* pbID, ULONG ulIDLen, BYTE *pbSponsorID, ULONG ulSponsorIDLen, HANDLE *phKeyHandle)
      
      功能描述:使用 ECC 密鑰協(xié)商算法,產(chǎn)生協(xié)商參數(shù)并計算會話密鑰,臨時輸出 ECC密鑰對公鑰,并返回 產(chǎn)生的密鑰句柄。
      
      hContainer: [IN] 容器句柄
      ulAlgId: [IN] 會話密鑰算法標識
      pSponsorECCPubKeyBlob: [IN] 發(fā)起方的 ECC 公鑰
      pSponsorTempECCPubKeyBlob: [IN] 發(fā)起方的臨時 ECC 公鑰
      pTempECCPubKeyBlob: [OUT] 響應(yīng)方的臨時 ECC 公鑰
      pbID: [IN] 響應(yīng)方的 ID
      ulIDLen: [IN] 響應(yīng)方 ID 的長度,不大于32
      pbSponsorID: [IN] 發(fā)起方的 ID
      ulSponsorIDLen: [IN] 發(fā)起方 ID 的長度,不大于32
      phKeyHandle: [OUT] 返回的 【對稱算法】密鑰句柄
      備注:本函數(shù)由響應(yīng)方調(diào)用
      
      
      ### 7.6.22 ECC計算會話密鑰
      SKF_GenerateKeyWithECC, (HANDLE hAgreementHandle, PECCPUBLICKEYBLOB pECCPubKeyBlob,    PECCPUBLICKEYBLOB pTempECCPubKeyBlob, BYTE* pbID, ULONG ulIDLen, HANDLE *phKeyHandle)
      
      功能描述:使用 ECC 密鑰協(xié)商算法,使用自身協(xié)商句柄和響應(yīng)方的協(xié)商參數(shù)計算會話密鑰,同時返回會話密鑰句柄。
      
      hAgreementHandle: [IN] 密鑰協(xié)商句柄
      pECCPubKeyBlob: [IN] 外部輸入的響應(yīng)方 ECC 公鑰
      pTempECCPubKeyBlob: [IN] 外部輸入的響應(yīng)方臨時 ECC 公鑰
      pbID: [IN] 響應(yīng)方的 ID
      ulIDLen: [IN] 響應(yīng)方 ID 的長度,不大于32
      phKeyHandle: [OUT] 返回的 密鑰句柄
      備注:協(xié)商的發(fā)起方獲得響應(yīng)的協(xié)商參數(shù)后調(diào)用本函數(shù),計算會話密鑰。計算過程遵循GM/T AAAA。
      
      ### 7.6.23 導(dǎo)出公鑰 [IN/OUT]
      SKF_ExportPublicKey, (HCONTAINER hContainer, BOOL bSignFlag, BYTE* pbBlob, ULONG* pulBlobLen)
      
      功能描述:導(dǎo)出容器中的簽名公鑰或者加密公鑰。
      
      hContainer: [IN] 密鑰容器句柄
      bSignFlag: [IN] TRUE表示導(dǎo)出簽名公鑰,F(xiàn)ALSE表示導(dǎo)出加密公鑰
      pbBlob: [OUT] 指向RSA公鑰結(jié)構(gòu)(RSAPUBLICKEYBLOB結(jié)構(gòu)體)或ECC公鑰結(jié)構(gòu)(ECCPUBLICKEYBLOB),如果此參數(shù)為NULL時,由pulBlobLen返回 pbBlob 實際長度
      -------------------- 特別留意這里的 [IN/OUT]---這個參數(shù)決定了是 RSA 還是 ECC
      pulBlobLen: [IN/OUT] 輸入時表示pbBlob緩沖區(qū)的長度; 輸出時表示導(dǎo)出公鑰結(jié)構(gòu)體的大小
      
      
      ### 7.6.24 導(dǎo)入會話密鑰
      SKF_ImportSessionKey, (HCONTAINER hContainer, ULONG ulAlgId,BYTE *pbWrapedData, ULONG ulWrapedLen, HANDLE *phKey)
      
      功能描述:導(dǎo)入會話密鑰密文,使用容器中的加密私鑰解密得到會話密鑰。
      
      hContainer: [IN] 容器句柄
      ulAlgId: [IN] 會話密鑰算法標識
      pbWrapedData: [IN] 要導(dǎo)入的會話密鑰密文。當容器為 ECC 類型時,此參數(shù)為 ECCCIPHERBLOB密文數(shù)據(jù);當容器為 RSA 類型時,此參數(shù)為 RSA 公鑰加密后的數(shù)據(jù)
      pulWrapedLen: [IN] 會話密鑰密文長度
      phKey: [OUT] 返回會話密鑰句柄
      
      
      ### 7.6.25 明文導(dǎo)入會話密鑰   ======  僅僅用于測試和調(diào)試 ======
      SKF_SetSymmKey, (DEVHANDLE hDev, BYTE* pbKey, ULONG ulAlgID, HANDLE* phKey)
      
      功能描述:設(shè)置明文對稱密鑰,返回密鑰句柄
      
      hDev: [IN] 設(shè)備句柄
      pbKey: [IN] 指向會話密鑰值的緩沖區(qū)
      ulAlgID: [IN] 會話密鑰算法標識
      phKey: [OUT] 返回會話密鑰句柄
      備注:本函數(shù)僅用于測試和調(diào)試,不建議用于實際的密碼服務(wù)。
      
      
      ### 7.6.26 加密初始化
      SKF_EncryptInit, (HANDLE hKey, BLOCKCIPHERPARAM Param)
      
      功能描述:數(shù)據(jù)加密初始化。設(shè)置數(shù)據(jù)加密的算法相關(guān)參數(shù)。
      
      hKey: [IN] 加密密鑰句柄
      Param: [IN] 分組加密算法相關(guān)參數(shù):初始向量、初始向量長度、填充方法、反饋值的位長度
      
      
      ### 7.6.27 單組數(shù)據(jù)加密
      SKF_Encrypt, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbEncrypt, ULONG* pulEncryptLen)
      
      功能描述:單一分組數(shù)據(jù)的加密操作。用指定加密密鑰對指定數(shù)據(jù)進行加密,被加密的數(shù)據(jù)只包含一個分組,加密后的密文保存到指定的緩沖區(qū)中。SKF_Encrypt 只對單個分組數(shù)據(jù)進行加密,在調(diào)用 SKF_Encrypt 之前,必須調(diào)用 SKF_EncryptInit 進行初始化加密操作。
      
      hKey: [IN] 加密密鑰句柄
      pbData: [IN] 待加密數(shù)據(jù)
      ulDataLen: [IN] 待加密數(shù)據(jù)的長度
      pbEncrypt: [OUT] 加密后的數(shù)據(jù)緩沖區(qū)指針,可以為 NULL,用于獲得加密后數(shù)據(jù)長度 
      --------------------特別留意這里的 [IN/OUT]
      pulEncryptLen: [IN/OUT] 輸入時表示 結(jié)果緩沖區(qū)的長度; 輸出時表示加密后數(shù)據(jù)長度
      
      
      ### 7.6.28 多組數(shù)據(jù)加密
      (SKF_EncryptUpdate, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbEncrypt, ULONG* pulEncryptLen))
      
      功能描述:多個分組數(shù)據(jù)的加密操作。
      
      hKey: [IN] 加密密鑰句柄
      pbData: [IN] 待加密數(shù)據(jù)
      ulDataLen: [IN] 待加密數(shù)據(jù)的長度
      pbEncrypt: [OUT] 加密后的數(shù)據(jù)緩沖區(qū)指針
      pulEncryptLen: [OUT] 返回加密后數(shù)據(jù)長度
      
      
      ### 7.6.29 結(jié)束加密
      (SKF_EncryptFinal, (HANDLE hKey, BYTE*pbEncrypt,ULONG* pulEncryptLen))
      
      功能描述:結(jié)束多個分組數(shù)據(jù)的加密,返回剩余加密結(jié)果。
      
      hKey: [IN] 加密密鑰句柄
      pbEncrypt: [OUT] 加密結(jié)果的緩沖區(qū)
      pulEncryptLen: [OUT] 加密結(jié)果的長度
      
      
      ### 7.6.30 解密初始化
      (SKF_DecryptInit, (HANDLE hKey, BLOCKCIPHERPARAM Param))
      
      功能描述:數(shù)據(jù)解密初始化,設(shè)置解密密鑰相關(guān)參數(shù)。調(diào)用 SKF_DecryptInit 之后,可以調(diào)用SKF_Decrypt 對單個分組數(shù)據(jù)進行解密,也可以多次調(diào)用 SKF_DecryptUpdate 之后,再調(diào)用 SKF_DecryptFinal 完成對多個分組數(shù)據(jù)的解密。
      
      hKey: [IN] 解密密鑰句柄
      Param: [IN] 分組加密算法相關(guān)參數(shù):初始向量、初始向量長度、填充方法、反饋值的位長度
      
      
      ### 7.6.31 單組數(shù)據(jù)解密
      (SKF_Decrypt, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbDecrypt, ULONG* pulDecryptLen))
      
      功能描述:單個分組數(shù)據(jù)的解密操作。用指定解密密鑰對指定數(shù)據(jù)進行解密,被解密的數(shù)據(jù)為單個分組,解密后的明文保存到指定的緩沖區(qū)中。 SKF_Decrypt 對單個分組數(shù)據(jù)進行解密,在調(diào)用 SKF_Decrypt 之前,必須調(diào)用 SKF_DecryptInit 初始化解密操作;SKF_Decypt等價于 先調(diào)用 SKF_DecryptUpdate 再調(diào)用 SKF_DecryptFinal。
      
      hKey: [IN] 解密密鑰句柄
      pbData: [IN] 待解密數(shù)據(jù)
      ulDataLen: [IN] 待解密數(shù)據(jù)的長度
      pbDecrypt: [OUT] 解密后的數(shù)據(jù)緩沖區(qū)指針,可以為 NULL,用于獲得解密后數(shù)據(jù)長度
      --------------------特別留意這里的 [IN/OUT]
      pulDecryptLen: [IN/OUT] 輸入時表示結(jié)果數(shù)據(jù)緩沖區(qū)長度, 輸出時表示結(jié)果數(shù)據(jù)實際長度
      
      
      
      ### 7.6.32 多組數(shù)據(jù)解密
      (SKF_DecryptUpdate, (HANDLE hKey, BYTE* pbData, ULONG ulDataLen, BYTE*pbDecrypt, ULONG* pulDecryptLen))
      
      功能描述:多個分組數(shù)據(jù)的解密操作。用指定解密密鑰對指定數(shù)據(jù)進行解密,被解密的數(shù)據(jù)包含多個分組,解密后的明文保存到指定的緩沖區(qū)中。 SKF_DecryptUpdate 對多個分組數(shù)據(jù)進行解密,在調(diào)用 SKF_DecryptUpdate 之前,必須調(diào)用 SKF_DecryptInit 初始化解密操作;在調(diào)用 SKF_DecryptUpdate 之后,必須調(diào)用 SKF_DecryptFinal 結(jié)束解密操作。
      
      hKey: [IN] 解密密鑰句柄
      pbData: [IN] 待解密數(shù)據(jù)
      ulDataLen: [IN] 待解密數(shù)據(jù)的長度
      pbDecrypt: [OUT] 解密后的數(shù)據(jù)緩沖區(qū)指針
      --------------------特別留意這里的 [IN/OUT]
      pulDecryptLen: [IN/OUT] 輸入時表示結(jié)果數(shù)據(jù)緩沖區(qū)長度, 輸出時表示結(jié)果數(shù)據(jù)實際長度
      
      
      
      ### 7.6.33 結(jié)束解密
      (SKF_DecryptFinal, (HANDLE hKey, BYTE*pbDecrypt, ULONG* pulDecryptLen))
      
      功能描述:結(jié)束多個分組數(shù)據(jù)的解密。先調(diào)用 SKF_DecryptInit 初始化解密操作,再調(diào)用 SKF_DecryptUpdate 分段解密數(shù)據(jù),最后調(diào)用 SKF_DecryptFinal 結(jié)束多個分組數(shù)據(jù)的解密操作。
      
      hKey: [IN] 解密密鑰句柄
      pbDecrypt: [OUT] 指向解密結(jié)果的緩沖區(qū),如果此參數(shù)為 NULL時,由 pulDecryptLen返回解密結(jié)果的長度
      --------------------特別留意這里的 [IN/OUT]
      pulDecryptLen: [IN/OUT] 輸入時表示 pbDecrypt緩沖區(qū)的長度; 輸出時表示解密結(jié)果的長度
      
      
      ### 7.6.34 密碼雜湊初始化
      (SKF_DigestInit, (DEVHANDLE hDev, ULONG ulAlgID,  PECCPUBLICKEYBLOB pPubKey, BYTE *pucID, ULONG ulIDLen, HANDLE *phHash))
      
      功能描述:初始化密碼雜湊計算操作,指定計算密碼雜湊的算法。
      
      hDev: [IN] 連接設(shè)備時返回的設(shè)備句柄
      ulAlgID: [IN] 密碼雜湊算法標識
      pPubKey: [IN] 簽名者公鑰。當 ulAlgID 為 SGD_SM3 時有效
      pucID: [IN] 簽名者ID值。當 ulAlgID 為 SGD_SM3 時有效
      pulIDLen: [IN] 簽名者ID長度。當 ulAlgID 為 SGD_SM3 時有效
      phHash: [OUT] 返回密碼雜湊對象句柄
      備注:當ulAlgID 為 SGD_SM3 且 ulIDLen 不為0的情況下 pPubkey, pucID有效,執(zhí)行 SM2算法前面預(yù)處理1操作。
      
      
      ### 7.6.35 單組數(shù)據(jù)密碼雜湊 [IN/OUT]
      (SKF_Digest, (HANDLE hHash, BYTE* pbData, ULONG ulDataLen, BYTE* pbDigest, ULONG* pulDigestLen))
      
      功能描述:對單一分組消息進行密碼雜湊計算。調(diào)用 SKF_Digest 之前,必須調(diào)用 SKF_DigestInit 初始化密碼雜湊計算操作; 調(diào)用 SKF_Digest 等價于多次調(diào)用 SKF_DigestUpdate之后再調(diào)用SKF_DigestFinal。
      
      hHash: [IN] 密碼雜湊對象句柄
      pbData: [IN] 指向消息數(shù)據(jù)的緩沖區(qū)
      ulDataLen: [IN] 消息數(shù)據(jù)的長度
      pbDigest: [OUT] 密碼雜湊數(shù)據(jù)緩沖區(qū)指針,當此參數(shù)為 NULL時,由 pulDigestLen 返回密碼雜湊結(jié)果的長度
      --------------------特別留意這里的 [IN/OUT]
      pulDigestLen: [IN/OUT] 輸入時表示 結(jié)果緩沖區(qū)的長度; 輸出時表示密碼雜湊結(jié)果的長度
      
      
      
      
      ### 7.6.36 多組數(shù)據(jù)密碼雜湊
      (SKF_DigestUpdate, (HANDLE hHash, BYTE* pbData, ULONG ulDataLen))
      
      功能描述:對多個分組的消息進行密碼雜湊計算。調(diào)用 SKF_DigestUpdate 之前,必須調(diào)用 SKF_DigestInit 初始化密碼雜湊計算操作; 調(diào)用 SKF_DigestUpdate 之后,必須調(diào)用 SKF_DigestFinal 結(jié)束密碼雜湊計算操作。
      
      hHash: [IN] 密碼雜湊對象句柄
      pbData: [IN] 指向消息數(shù)據(jù)的緩沖區(qū)
      ulDataLen: [IN] 消息數(shù)據(jù)的長度
      
      
      ### 7.6.37 結(jié)束密碼雜湊
      (SKF_DigestFinal, (HANDLE hHash, BYTE* pbDigest, ULONG* pulDigestLen))
      
      功能描述:結(jié)束多個分組消息的密碼雜湊計算操作,將密碼雜湊結(jié)果保存到指定的緩沖區(qū)。
      
      hHash: [IN] 密碼雜湊對象句柄
      pbDigest: [OUT] 返回的密碼雜湊結(jié)果緩沖區(qū)指針,當此參數(shù)為 NULL時,由 pulDigestLen 返回密碼雜湊結(jié)果的長度
      --------------------特別留意這里的 [IN/OUT]
      pulDigestLen: [IN/OUT] 輸入時表示 結(jié)果緩沖區(qū)的長度; 輸出時表示密碼雜湊結(jié)果的長度
      
      備注: SKF_DigestFinal 必須 用于 SKF_DigestUpdate 之后。
      
      
      
      ### 7.6.38 消息鑒別碼運算初始化
      (SKF_MacInit, (HANDLE hKey, BLOCKCIPHERPARAM* pMacParam, HANDLE* phMac))
      
      功能描述:初始化消息鑒別碼計算操作,設(shè)置計算消息鑒別碼的所需參數(shù),并返回消息鑒別碼句柄。
      
      hKey: [IN] 計算消息鑒別碼的密鑰句柄
      pMacParam: [IN] 消息認證計算相關(guān)參數(shù),包括 初始向量、初始向量長度、填充方法、反饋值的位長度
      phMac: [OUT] 消息鑒別碼對象句柄
      
      備注:消息鑒別碼計算采用分組加密算法的 CBC 模式,將加密結(jié)果的最后一塊作為計算結(jié)果。待計算數(shù)據(jù)的長度必須是分組加密算法塊長的倍數(shù),接口內(nèi)部不坐數(shù)據(jù)填充。
      
      
      ### 7.6.39 單組數(shù)據(jù)消息鑒別碼運算
      (SKF_Mac, (HANDLE hMac, BYTE* pbData, ULONG ulDataLen, BYTE* pbMac, ULONG* pulMacLen))
      
      功能描述:計算單一分組數(shù)據(jù)的消息鑒別碼
      
      hMac: [IN] 消息鑒別碼對象句柄
      pbData: [IN] 指向待計算數(shù)據(jù)的緩沖區(qū)
      ulDataLen: [IN] 待計算數(shù)據(jù)的長度
      pbMac: [OUT] 指向計算后的 Mac結(jié)果,當此參數(shù)為 NULL時,由 pulMacLen 返回計算結(jié)果的長度
      --------------------特別留意這里的 [IN/OUT]
      pulMacLen: [IN/OUT] 輸入時表示 結(jié)果緩沖區(qū)的長度; 輸出時表示計算結(jié)果的長度
      
      備注:調(diào)用  SKF_Mac 之前,必須調(diào)用 SKF_MacInit 初始化消息鑒別碼計算操作。 SKF_Mac 等價于多次調(diào)用 SKF_MacUpdate 之后再調(diào)用 SKF_MacFinal。
      
      
      ### 7.6.40 多組數(shù)據(jù)消息鑒別碼運算
      (SKF_MacUpdate, (HANDLE hMac, BYTE* pbData, ULONG ulDataLen))
      
      功能描述:計算多個分組數(shù)據(jù)的消息鑒別碼
      
      hMac: [IN] 消息鑒別碼對象句柄
      pbData: [IN] 指向待計算數(shù)據(jù)的緩沖區(qū)
      ulDataLen: [IN] 待計算數(shù)據(jù)的長度
      
      備注:調(diào)用 SKF_MacUpdate 之前,必須調(diào)用 SKF_MacInit 初始化消息鑒別碼計算操作;調(diào)用 SKF_MacUpdate 之后,必須調(diào)用 SKF_MacFinal 結(jié)束多個分組數(shù)據(jù)的消息鑒別碼計算操作。
      
      
      ### 7.6.41 結(jié)束消息鑒別碼運算 [IN/OUT]
      (SKF_MacFinal, (HANDLE hMac, BYTE* pbMac, ULONG* pulMacLen))
      
      功能描述:結(jié)束多個分組數(shù)據(jù)的消息鑒別碼計算操作
      
      hMac: [IN] 消息鑒別碼對象句柄
      pbMac: [OUT] 指向計算后的 Mac結(jié)果,當此參數(shù)為 NULL時,由 pulMacLen 返回計算結(jié)果的長度
      --------------------特別留意這里的 [IN/OUT]
      pulMacLen [IN/OUT] 調(diào)用時表示消息鑒別碼結(jié)果緩沖區(qū)的長度;返回時表示計算結(jié)果的長度
      
      
      
      ### 7.6.42 關(guān)閉密碼對象句柄
      (SKF_CloseHandle, (HANDLE hHandle))
      
      功能描述:關(guān)閉會話密鑰、密碼雜湊對象、消息鑒別碼對象、ECC密鑰協(xié)商等句柄
      
      hHandle: [IN] 待關(guān)閉的句柄

       

      posted @ 2024-08-25 16:55  He_LiangLiang  閱讀(619)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 熟女精品国产一区二区三区| 亚洲欧洲∨国产一区二区三区| 日韩中文免费一区二区| 亚洲男人的天堂网站| 99久久国产综合精品成人影院| 国产95在线 | 欧美| 成人麻豆日韩在无码视频| 色道久久综合亚洲精品蜜桃| 偷拍专区一区二区三区| 亚洲一区成人av在线| 日本一区二区三区在线 |观看| 成人免费无码大片A毛片抽搐色欲| 激情综合色综合久久综合| 伊人久久精品无码麻豆一区| 国产涩涩视频在线观看| 在线观看潮喷失禁大喷水无码| 无码人妻久久一区二区三区app| 深水埗区| 精品一卡2卡三卡4卡乱码精品视频| 狠狠色综合久久狠狠色综合 | 色狠狠色婷婷丁香五月| 国产不卡精品视频男人的天堂| 日本内射精品一区二区视频| 精品国产乱码久久久久APP下载| 日韩精品 在线 国产 丝袜| 漳浦县| 国产精品国产自产拍高清| 国产99视频精品免费视频36| 欧洲精品久久久AV无码电影| 亚洲天堂成人一区二区三区| 国内精品久久人妻互换| 亚洲女人天堂成人av在线| 色猫咪av在线网址| 亚洲精品一区二区动漫| 国产精品自拍中文字幕| 亚洲丰满熟女一区二区蜜桃| 热久久美女精品天天吊色| 精品国产人妻一区二区三区久久| 亚洲精品无码久久久影院相关影片| 四虎成人在线观看免费| 国产精品午夜福利视频|