6.4 復合數據類型
6.4 復合數據類型
6.4.1 版本
a) 類型定義
typedef struct Struct_Version{
BYTE major;
BYTE minor;
b) 數據項描述參見表3:

6.4.2 設備信息
a) 類型定義
typedef struct Struct_DEVINFO{
VERSION Version;
CHAR Manufacturer[64];
CHAR Issuer[64];
CHAR Label[32];
CHAR SerialNumber[32];
VERSION HWVersion;
VERSION FirmwareVersion;
ULONG AlgSymCap;
ULONG AlgAsymCap;
ULONG AlgHashCap;
ULONG DevAuthAlgId;
ULONG TotalSpace;
ULONG FreeSpace;
ULONG MaxECCBufferSize;
ULONG MaxBufferSize;
BYTE Reserved[64];
} DEVINFO_SKF,*PDEVINFO_SKF;

6.4.3 RSA公鑰數據結構
a) 類型定義
typedef struct Struct_RSAPUBLICKEYBLOB{
ULONG AlgID;
ULONG BitLen;
BYTE Modulus[MAX_RSA_MODULUS_LEN];
BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];
}RSAPUBLICKEYBLOB, *PRSAPUBLICKEYBLOB;
MAX_RSA_MODULUS_LEN為算法模數的最大長度;
MAX_RSA_EXPONENT_LEN為算法指數的最大長度。

RSA私鑰數據結構
a) 類型定義
typedef struct Struct_RSAPRIVATEKEYBLOB{
ULONG AlgID;
ULONG BitLen;
BYTE Modulus[MAX_RSA_MODULUS_LEN];
BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];
BYTE PrivateExponent[MAX_RSA_MODULUS_LEN];
BYTE Prime1[MAX_RSA_MODULUS_LEN/2];
BYTE Prime2[MAX_RSA_MODULUS_LEN/2];
BYTE Prime1Exponent[MAX_RSA_MODULUS_LEN/2];
BYTE Prime2Exponent[MAX_RSA_MODULUS_LEN/2];
BYTE Coefficient[MAX_RSA_MODULUS_LEN/2];
}RSAPRIVATEKEYBLOB, *PRSAPRIVATEKEYBLOB;
MAX_RSA_MODULUS_LEN為RSA算法模數的最大長度;


a) 類型定義
typedef struct Struct_ECCPUBLICKEYBLOB{
ULONG BitLen;
BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
BYTE YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];
}ECCPUBLICKEYBLOB, *PECCPUBLICKEYBLOB;
ECC_MAX_XCOORDINATE_LEN為ECC算法X坐標的最大長度;
ECC_MAX_YCOORDINATE_LEN為ECC算法Y坐標的最大長度。

a) 類型定義
typedef struct Struct_ECCPRIVATEKEYBLOB{
ULONG BitLen;
BYTE PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];
}ECCPRIVATEKEYBLOB, *PECCPRIVATEKEYBLOB;
ECC_MAX_MODULUS_BITS_LEN為ECC算法模數的最大長度。
b) 數據項描述參見表8:

a) 類型定義
typedef struct Struct_ECCCIPHERBLOB{
BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
BYTE YCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
BYTE HASH[32];
ULONG CipherLen;
BYTE Cipher[1];
} ECCCIPHERBLOB, *PECCCIPHERBLOB;

a) 類型定義
typedef struct Struct_ECCSIGNATUREBLOB{
BYTE r[ECC_MAX_XCOORDINATE_BITS_LEN/8];
BYTE s[ECC_MAX_XCOORDINATE_BITS_LEN/8];
} ECCSIGNATUREBLOB, *PECCSIGNATUREBLOB;
ECC_MAX_MODULUS_BITS_LEN為ECC算法模數的最大長度;

a) 類型定義
typedef struct Struct_BLOCKCIPHERPARAM{
BYTE IV[MAX_IV_LEN];
ULONG IVLen;
ULONG PaddingType;
ULONG FeedBitLen;
} BLOCKCIPHERPARAM, *PBLOCKCIPHERPARAM;


a) 類型定義
typedef struct SKF_ENVELOPEDKEYBLOB{
ULONG Version; // 當前版本為1
ULONG ulSymmAlgID; // 對稱算法標識,限定ECB模式
ULONG ulBits; // 加密密鑰對的密鑰位長度
BYTE cbEncryptedPriKey[64]; // 加密密鑰對私鑰的密文
ECCPUBLICKEYBLOB PubKey; // 加密密鑰對的公鑰
ECCCIPHERBLOB ECCCipherBlob; // 用保護公鑰加密的對稱密鑰密文。
}ENVELOPEDKEYBLOB, *PENVELOPEDKEYBLOB;
私鑰密文結構中64字節,有效密文分組從0偏移量字節開始,順序解密密文分組后將明文連接得到加密密鑰對的私鑰的明文。

a) 類型定義
typedef struct Struct_FILEATTRIBUTE{
CHAR FileName[32];
ULONG FileSize;
ULONG ReadRights;
ULONG WriteRights;
} FILEATTRIBUTE, *PFILEATTRIBUTE;

權限類型的定義參見表14:

設備狀態的定義參見表15:

GB/T 35291-2017 信息安全技術 智能密碼鑰匙應用接口規范
推薦文章: