cipher api参考海思半导体2017保留一切权利_第1页
cipher api参考海思半导体2017保留一切权利_第2页
cipher api参考海思半导体2017保留一切权利_第3页
cipher api参考海思半导体2017保留一切权利_第4页
cipher api参考海思半导体2017保留一切权利_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2017。保留一切权利。 何形式。商 注您的产品、服务或特性等应受海思公司商业合同和条款的约束,本文档中描述的全部或部分产市海思半导 客户服务传真客户服务邮箱 概CIPHER是海思数字处理平台提供的安全算法模块,它提供了AES、DES、3DES三种对称加算法,HASH及HMAC算法,随机数算法,以及RSA不对称算AESSM1、SM4,SHA224/384/512SM3算产品版读者对本文档(本指南)主要适用于以下工程师:符号约

符说符说表示能帮助您解决某个问题或节省您的时间修订记

00B01(2017-05- 概 概 HASH计 HMAC计 RSA加操作步 生成一个RSA私 API参 数据类 错误 Proc调试信 CIPHER状 图1-1Cipher应用场景1,每次调用都需要更新 图1-2Cipher应用场景2,只在第一次调用时配置 表4-1CIPHER模块的错误 概

CIPHER是海思数字 处理平台提供的安全算法模块,其提供了包括AES和DES/3DES等对称加 算法,RSA不对称加 HASH、HMAC等 码流进行加保护,用户认对称加算S:支持BFB/FBTRMM等工作模式,其中MM,模式下,结后需获一次AG值SM1:支持ECB/CBC/CFB/OFB,其中CFB模式支持的位宽可为SM4:支持DES/3DES:ECB/CBC/CFB/OFB,其中CFB和OFB模式支持的位宽可为以上算法除了CTR/CCM/GCM,其它算法、模式的数据长度必须按块大小对齐;CCM/GCM的N、A需要靠软件按标准把各个字段封装成块大小对齐的数据块;各种算,最多可以申请7个通道。不对称加算S:支持密钥位宽104826;支持带掩码计算,安全性更高RNG:支持DRGB,以更高速率获取随机数HA1M4/6/AM2;支持软件多通道,最多可以申请8AES算法的实现符合FIPS197ECB、CBC、1/8/128-CFB、128-OFB、CTR几种工作模式符合NISTspecial800-38a标准CCM工作模式符合NISTspecial800-38c标GCM工作模式符合NISTspecial800-38d 分组算法的实现符合国家管理局编制 分组标准,支ECB、CBC、CFB、OFBSM4分组算法符合GM/T0002-2012标准,支持ECB、CBC、CTR模DES/3DES算法的实现符合FIPS46-3支持ECB、CBC、1/8/64-CFB、1/8/64-OFB几种工作模式,符合FIPS-81标SM2椭圆曲线公钥算法的实现符合GM/T0003-2012标准,支持签名及验证、SM3杂凑算法的实现符合GM/T0004-2012标RSA支持公钥加密私钥、私钥加密公钥、签名及验签等功能,各种模式的数据填充方式符合PKCS#1标准RSA的加模式包括NOPADDING、BLOCKYTPE0、BLOCKYTPE1、BLOCKYTPE2、RSAESOAEPSHA1RSAESOAEPSHA224、RSAESOAEPSHA256、RSAESOAEPSHA384、RSAESOAEPSHA512、RSAESPKCS1V15等RSA的签名及验签模式包括RSASSAPKCS1V15SHA1,RSASSAPKCS1V15SHA224、RSASSAPKCS1V15SHA256、RSASSAPKCS1V15SHA384、RSASSAPKCS1V15SHA512、RSASSAPKCS1PSSSHA256、RSASSAPKCS1PSSSHA384、RSASSAPKCS1PSSSHA512等ECB(Electroniccodebook,电子本模式)、CBC(Cipherblockchaining,分组模式)、CFB(Cipherfeedback,密文反馈模式)、OFB(Outputfeedback,输出反馈模式)、CTR(Countermode,计数器模式)、CCM(counterwithCBCMAC,CTR加密模式和消息认证码CMAC算法的混合)、GCM(Galois/CounterMode,华域/计数器模式),主要由工作在计数器模式下的分组和在华域GF(2^128)上的哈希运算组成。CCM和GCM在加的同时生成CMAC检验值,时的CMAC要和时的CMAC一样才说明是正确的,常用在需要同时加密和认证的领域,欲了解算法的详细内ECB模式中,对每个块进行独立加密/,块与块之间没有依赖;非ECB模式中,块与块之间有依赖性,并且为了保证每条消息的唯一性,在第一个块中需要使用初始化向量IV使用流单包数据加场景说明

物理地址后在用户层调用CIPHER模块实现加/。工作流程对数据进行对称的DES/3DES/AES加的过程如下1.CIPHER设备初始化HIUNFCIPHERInit完成2.创建一路CIPHER,并获CIPHER句柄。调HIUNFCIPHER步骤3. 配置HR控制信息,包含密钥、初始向量、加密算法、工作模式等信息。调用接口HIFHRnfiae或HIFHRonfiaeEx完成。步骤4.对数据进行加。用户可以调用以下任一接口进行加单包加密--HIUNFCIPHER单包--HIUNFCIPHER5.如果是CCM、GCM模式HIUNFCIPHERGetTag获取TAG值,否则执行下步骤6.销毁CIPHER句柄。调用接口HIUNFCIPHERDestroyHandle完成。7.关闭CIPHER设备。调用接口HIUNFCIPHERDeinit完成。----注意事项

使用CIPHER模块时,请特别注意以下几点。该接口支持AES、DES/3DES、SM1、SM4、GCM、CMM对称加算法各算法支持ECB/CBC/CFB/OFB/CTR等工作模式。在进行加密、运算前必须先获取CIPHER句柄,当长时间不使用时可以释放,建议加密、各获取一个句柄,每个句柄只进行加密或者只进行操作。只支持对物理空间连续的内存数据进行加密、(用户可以通过海思HIMMZNew接口获取到物理内存,并使用HIMMZMap对物理内存进行虚地CIPHER内部采用DMA方式传输数据,所以调用HIUNFCIPHEREncrypt或HIUNFCIPHERDecrypt接口进行数据的加密或时,传入的地址参数为数据块buffer)进行数据的加密和。对称加操作中每个数据包的长度必须小于1MB。如果数据长度大于或等于使用非ECB模式进行CIPHER的加时,需要使用初始化向量IV(Initialector【场景1CIPHERIVstChangeFlags.bit1IV2,并正确配置IV值。HIUNFCIPHERConfigHandle() //shouldsetstChangeFlags.bit1IV andupdateu32IVHIUNFCIPHERHIUNFCIPHERConfigHandle() //shouldsetstChangeFlags.bit1IV andupdateu32IVHIUNFCIPHERHIUNFCIPHERConfigHandle() //shouldsetstChangeFlags.bit1IV andupdateu32IVHIUNFCIPHER图1-1Cipher应用场景1,每次调用都需要更新【场景2只需第一次调用CIPHERIVstChangeFlags.bit1IV1,且配置IV值。HIUNFCIPHERConfigHandle() //shouldsetstChangeFlags.bit1IV andupdateu32IVHIUNFCIPHERDecrypt()HIUNFCIPHERDecrypt()….HIUNFCIPHERDecrypt()请结合实际场景进行IV单包加的IV向量可继承。创建一路CIPHER,配置属性(假设配置的工作模式需要使用IV向量)之后,每次调用单包加接口时,IV向量会依次轮流使0,数据1a,b,c,d0之后,数据0的最后一个分块数据使用了IV向量中的b进行加理;此时,用户再加11IVc进行加密,然后依次为因此在加时,必须要保证两次向量使用的一致性。重新配置CIPHER控制信息将设置IV向量从第一个开始HIUNFCIPHERCTRLSbKeyByCAHIFALSE时,这是普通的使用模式,表示需要手动配置key进行数据的加,例如:详细用法请参考Ciphersample如果bKeyByCA设置为HITRUE,表示使用内置的Key进行数据的加解SM1,SM4,AES-CCM,AES-GCM只能使用HIUNFCIPHERConfigHandleEx进行配置,CCM、GCM在计算完成后需要获取TAG值,的TAG要和加密时示多包数据加场景说明

取物理地址后在用户层调用CIPHER模块实现加/。工作流程

对数据进行对称的DES/3DES/AES加的过程如下1.CIPHERHIUNFCIPHERInit2.创建一路CIPHER,并获取CIPHERHIUNFCIPHER3.CIPHER控制信息,包含密钥、初始向量、加密算法、工作模式等信息。调用接口HIUNFCIPHERConfigHandle或HIUNFCIPHERConfigHandleEx完成。步骤4.对数据进行加。用户可以调用以下任一接口进行加多包加密--HIUNFCIPHER多包--HIUNFCIPHER5.CIPHERHIUNFCIPHERDestroyHandle完成。步骤6.关闭CIPHER设备。调用接口HIUNFCIPHERDeinit完成。----注意事项

进行多包加时,最多支持同时加128个包HIUNFCIPHERConfigHandleHIUNFCIPHERConfigHandleEx配置的向量进行运算,IV作用域是可配置的,IVIV都是独立运算其它注意事项同“单包数据加”章节示具体示例请参见发布包sample:samplemulticipher.cHASH场景说明

值,可选择工作流程1.CIPHERHIUNFCIPHERInit步骤2.创建一路HASH,获取HASH句柄,选择HASHHIUNFCIPHERHashInit3.HASHHIUNFCIPHERHashUpdate完步骤4.如 步骤5.完成 计算,结束输入,获取计算结果。调用接口HIUNFCIPHERHashFinal完6.CIPHERHIUNFCIPHERDeinit----注意事项

支持软件多通道,可同时进行多个HASH运算,即执行步骤2启动一个HASH运个HASH运算,直到申请不到通道为止。8个HASH软件通道,8个通道可同时都被打开,但同一时间内只有一个示具体示例请参见发布包sample:samplehash.cHMAC场景说明

HMACHASH算法为SHA1、SHA224、SHA256、SHA384或SHA512。工作流程HMAC运算1.调用HIUNFCIPHERInit初始化CIPHER步骤2.调用HIUNFCIPHERHashInit选择使用的HASH算法HMAC计算的密钥,初始化HASH模块。步骤3.调用HIUNFCIPHERHashUpdate输入BLOCKBLOCK输步骤4.HIUNFCIPHERHashFinal结束输入,并输出HMAC值。5.调用HIUNFCIPHERDeinit去初始化CIPHER设备。----注意事项

支持软件多通道,可同时进行多个HMAC运算,即执行步骤2启动一个HMAC运算,在本次HMAC计算未完成(即未执行步骤5)之前,可申请一个新通道启动另一个HMAC运算,直到申请不到通道为止。HMAC和HASH共用8个软件通道,8个通道可同时都被打开,但同一时间内只有一个通道在进行运算。示具体示例请参见发布包sample:samplehash.c产生随机场景说明

工作流程

1.CIPHERHIUNFCIPHERInit2.32bitsHIUNFCIPHERGetRandomNumber完成。步骤3.关闭CIPHER设备。调用接口HIUNFCIPHERDeinit完成。----注意事项无示具体示例请参见发布包sample:samplerng.cRSA加操作步场景说明

该算法请参考:rfc3447.RSACryptographySpecifications工作流程对数据进行不对称的RSA加的过程如下1.CIPHERHIUNFCIPHERInit步骤2.对数据进行加或签名验证。根据使用的密钥不同,分为6个接口,用户可以调用公钥加密--HIUNFCIPHER私钥--HIUNFCIPHER私钥加密--HIUNFCIPHER公钥--HIUNFCIPHER私钥签名--HIUNFCIPHER公钥验证--HIUNFCIPHER生成密钥--HIUNFCIPHER步骤3.关闭CIPHER设备。调用接口HIUNFCIPHERDeinit完成----注意事项

RSA密钥位宽可选1024、2048、3072及4096。根据RSA算法原理,明文和密必须比公钥N小,所以待加的数据长度必须小于或等于密钥的长度,惯用作法是在待加的数据的补0等,使其长度和公钥N相等,但其值比公钥N小,PKCS#1标准定义了几种填充数据的方式,分别是BlockType0,BlockType1,BlockType2,RSAES-OAEP和RSAES-PKCS1-v15等。示具体示例请参见发布包sample:samplersaenc.c 签名及验签操作步场景说明

对数据进行RSA签名及验签时,使用私钥进行数据签名,使用公钥进行数据验签。该算法请参考:rfc3447.RSACryptographySpecifications。工作流程对数据进行不对称的RSA签名及步骤1.CIPHER设备初始化。调用接口HIUNFCIPHERInit完成。步骤2.对数据进行加或签名验证,调用以下接口签名验证。私钥签名--HIUNFCIPHER公钥验证--HIUNFCIPHER步骤3.关闭CIPHER设备。调用接口HIUNFCIPHERDeinit完成----注意事项

RSA密钥位宽可选1024、2048、3072及4096。根据RSA算法原理,明文和密必须比公钥小,所以待加的数据长度必须小于或等于密钥的长度,惯用作法是先计算待签名数据的HASH值,接着将HASH值填充成长度和公钥N相等但其值比公钥N小的数据,然后再进行加密,PKCS#1标准定义了几种填充数据的方式,分别是RSASSA-PSS和SES-PKS1-v15等。示具体示例请参见发布包sample:samplersasign.cRSA场景说明

生成一个RSA私钥。该算法请参考:rfc3447.RSACryptographySpecifications工作流程

生成一个RSA私钥的过程如下:步骤1.CIPHER设备初始化。调用接口HIUNFCIPHERInit完成。2.调用HIUNFCIPHERRsaGenKey步骤3.关闭CIPHER设备。调用接口HIUNFCIPHERDeinit完成----注意事项

示具体示例请参见发布包sample:samplersaenc.c 加操作步场景说明

对数据进行CCM加。该算法请参考:SP800-38Cupdated-July202007CCM.TheCCMModeforAuthenticationandity。对数据进行GCM加。该算法请参考:SP-800-38D-GCM.Galois/CounterMode(GCM)andGMAC。工作流程

对数据进行对称的CCM/GCM加的过程如下1.CIPHERHIUNFCIPHERInit完成。2.调用HIUNFCIPHERCreateHandleCIPHER句柄。3.HIUNFCIPHERConfigHandleExCIPHER参数。步骤4.对数据进行加。用户可以调用以下接口进行加/。加密--HIUNFCIPHER--HIUNFCIPHER5.HIUNFCIPHERGetTagCCM/GCMTAG数据。步骤6.调用HIUNFCIPHERDestroyHandle释放CIPHER句柄。7.HIUNFCIPHERDeinitCIPHER----注意事项

值必须和加密时一样,结果才是正确AES-CCM模式由AESCTR和AESCBC模式构成,既可以保证数据的性,CCMIVu32IVLen可取{7,8,9,10,11,1213}byte,IV存放算法标准中的NonceNnByte表示,且应满足条件:u32IVLen+n=15,,所以u32IVLen为13时,n为2,此时加密数据长度最长为65536byte,其它以此类推。CCM加密时的向量N、关联数据A取值必须与时保持一致AES-GCM模式由AESCTR和GHASH构成,既可以保证数据的性,也能保GCM算法原理,GCMIVu32IVLen可取范围为[1~16]GCM加密时的关联数据A取值必须与时保持一致示APICIPHER提供以下HIUNFCIPHERInit:初始化CIPHER模块HIUNFCIPHERDeinit:去初始化CIPHERHIUNFCIPHEROpen:打开CIPHER模块HIUNFCIPHERClose:关闭CIPHER模块HIUNFCIPHERCreateHandle:创建一路的Cipher句柄HIUNFCIPHERDestroyHandle:销毁已存在的CIPHERHIUNFCIPHERConfigHandle:配置CIPHERHIUNFCIPHERConfigHandleEx:配置CIPHER控制信息(扩展HIUNFCIPHEREncryptHIUNFCIPHERDecrypt:单包数据功能HIUNFCIPHEREncryptMultiHIUNFCIPHERDecryptMulti:多包数据功能HIUNFCIPHERHashInit:HASH、 计算初始化功能HIUNFCIPHERHashUpdate:HASH、 计算数据输入功能HIUNFCIPHERHashFinal:HASH、HMACHIUNFCIPHERGetRandomNumberHIUNFCIPHERGetTag:获TAGHIUNFCIPHERRsaPublicEncryptHIUNFCIPHERRsaPrivateDecrypt:使用私钥对密文进行HIUNFCIPHERRsaPrivateEncryptHIUNFCIPHERRsaPublicDecrypt:使用公钥对密文进行HIUNFCIPHERRsaSignHIUNFCIPHERRsaVerify:使用公钥对用户数据进行及完整性验证HIUNFCIPHERRsaGenKey:生成一个RSAHIUNFCIPHERKladEncryptKey:使用KLAD初始化CIPHERHIS32HIUNFCIPHERInit(HI返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi参考samplecipher.c去初始化CIPHERHIS32HIUNFCIPHERDeInit(HI返回描0成功返回描头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi参考samplecipher.c打开CIPHER#defineHIUNFCIPHEROpen(HIVOID)HIUNFCIPHERInit(HI返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi参考samplecipher.c关闭CIPHER#defineHIUNFCIPHERClose(HIVOID)HIUNFCIPHERDeInit(HI返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi参考samplecipher.c创建一路的CipherHIS32HIUNFCIPHERCreateHandle(HIHANDLE*描输入/CIPHER输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhiphCipher该句柄将用于数据加时的输入最大支持7路cipher参考samplecipher.c销毁一路CIPHERHIS32HIUNFCIPHERDestroyHandle(HIHANDLE描输入/CIPHER输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi参考samplecipher.c配置CIPHER控制信息。详细配置请参见结构体HIUNFCIPHERCTRLSHIS32HIUNFCIPHERConfigHandle(HIHANDLEhCipher,HIUNFCIPHERCTRLS*pstCtrl);描输入/CIPHER输输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi控制信息指针不能为空。参考samplecipher.c配置CIPHER控制信息。详细配置请参见结构体HIUNFCIPHERCTRLEXSHIS32HIUNFCIPHERConfigHandleEx(HIHANDLEhCipher,HIUNFCIPHERCTRLEXS*pstExCtrl);描输入/CIPHER输CIPHER输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhiCIPHER参考samplecipher.cHIS32HIUNFCIPHEREncrypt(HIHANDLEhCipher,HIU32u32SrcPhyAddr,HIU32u32DestPhyAddr,HIU32u32Byength);描输入/CIPHER输源数据(待加密的数据)的物理地址。输描输入/输数据的长度(单位:字节)输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhiCIPHER数据的长度至少为16字节,且不能大于或等于1024*1024参考samplecipher.c对数据进行HIS32HIUNFCIPHERDecrypt(HIHANDLEhCipher,HIU32u32SrcPhyAddr,HIU32u32DestPhyAddr,HIU32u32Byength);描输入/CIPHER输源数据(待的数据)的物理地址输存放结果的物理地址输数据的长度(单位:字节)输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhiCIPHER数据的长度至少为16字节,且不能大于或等于1024x1024参考samplecipher.c进行多个包数据的加密。HIS32HIUNFCIPHEREncryptMulti(HIHANDLEhCipher,HIUNFCIPHERDATA*pstDataPkg,HIU32描输入/CIPHER输输输返回描0成功返回描头文件:hierrormpi.h、hitype.h、hiunf库文件:libhiCIPHER每次加密的数据包个数最多不超过128对于多个包的操作,每个包都使用HIUNFCIPHERConfigHandle配置的向量进参考samplemulticiphe.c进行多个包数据的HIS32HIUNFCIPHERDecryptMulti(HIHANDLEhCipher,HIUNFCIPHERDATA*pstDataPkg,HIU32描输入/CIPHER输待的数据包输待的数据包个数输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhiCIPHER每次加密的数据包个数最多不超过128对于多个包的操作,每个包都使用HIUNFCIPHERConfigHandle配置的向量进参考samplemulticiphe.c初始化HASHHIS32HIUNFCIPHERHashInit(HIUNFCIPHERHASHATTSSHIHANDLE描输入/用于计算hash输输出的hash句柄输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi如果有其他程序正在使用HASHhash值HIS32HIUNFCIPHERHashUpdate(HIHANDLEhHashHandle,HI*pu8InputData,HIU32描输入/Hash输输输入数据的长度,单位:byte输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi输入数据块的长度必须是64字节对齐,最后一个block无此限制。Hash可以分多次调用,每次计算若干个blocksamplehash.chash值HIS32HIUNFCIPHERHashFinal(HIHANDLEhHashHandle,HI描输入/Hash输输出的hash输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplehash.cHIS32HIUNFCIPHERGetRandomNumber(HIU32描输入/输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplerng.cCCM/GCM模式加后获取TAG值HIS32HIUNFCIPHERGetTag(HIHANDLEhCipher,HIU8描输入/输TAG输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi只有在CCM、GCM参考samplecipher.c使用RSA公钥HIS32HIUNFCIPHERRsaPublicEncrypt(HIUNFCIPHERRSAPUBENC*pstRsaEnc,HIU8*pu8Input,HIU32u32InLen,HIU8*pu8Output,HI描输入/输输待加密的数据长度,单位:byte输输加密结果数据长度,单位:byte输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplersaenc.c使用RSA私钥一段密文HIS32HIUNFCIPHERRsaPrivateDecrypt(HIUNFCIPHERRSAPRIKEY*pstRsaDec,HIU8*pu8Input,HIU32u32InLen,HIU8*pu8Output,HI描输入/私钥属性结构体输待的数据输待的数据长度,单位:byte输输结果数据长度,单位:byte输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplersaenc.c使用RSAHIS32HIUNFCIPHERRsaPrivateEncrypt(HIUNFCIPHERRSAPRIKEY*pstRsaEnc,HIU8*pu8Input,HIU32u32InLen,HIU8*pu8Output,HI描输入/输输待加密的数据长度,单位:byte输输加密结果数据长度,单位:byte输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplersaenc.c使用RSA公钥一段密文HIS32HIUNFCIPHERRsaPrivateDecrypt(HIUNFCIPHERRSAPUBENC*pstRsaDec,HIU8*pu8Input,HIU32u32InLen,HIU8*pu8Output,HI描输入/公钥属性结构体输待的数据输待的数据长度,单位:byte输输结果数据长度,单位:byte输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplersaenc.c使用RSAHIS32HIUNFCIPHERRsaSign(HIUNFCIPHERRSASIGNS*pstRsaSign,HI*pu8InData,HIU32u32InDataLen,HIU8*pu8HashData,HIU8*pu8OutSign,HIU32*pu32OutSignLen);描输入/输待签名的数据如果pu8HashData不为空,则使用pu8HashData进行签名,该参数将被忽略。输待签名的数据长度,单位:byte输待签名文本的HASH 计算pu8InData的HASH 输输签名结果数据长度,单位:byte输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplersasign.cRSAHIS32HIUNFCIPHERRsaVerify(HIUNFCIPHERRSAVERIFY*pstRsaVerify,HIU8*pu8InData,HIU32u32InDataLen,HI*pu8HashData,HIU8*pu8InSign,HIU32描输入/输待验证的数据如果pu8HashData不为空,则使用pu8HashData进行验证,该参数将被忽略。输待验证的数据长度,单位:byte输待验证文本的的HASH 动计算pu8InData的HASH 输输待验证的签名数据长度,单位:byte输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhisamplersasign.c生成一个RSAHIS32HIUNFCIPHERRsaGenKey(HIU32u32NumBits,HIU32HIUNFCIPHERRSAPRIKEYS描输入/RSA密钥N的位宽输RSAE输RSA输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi使用KLADHIS32HIUNFCIPHERKladEncryptKey(HIUNFCIPHERCATYPEEenRootKey,HIUNFCIPHERKLADTARGETEenTarget,HIU8*pu8CleanKey,HI ryptKey,HIU32描输入/KLAD根密钥选择,只能选择EFUSEKey输输描输入/输输密钥的长度,必须是16整数输返回描0成功头文件:hierrormpi.h、hitype.h、hiunf库文件:libhi请参考cipher 下的samplersaHIHANDLE:定CIPHERHIUNFCIPHERWORKMODEE:定CIPHER工作模式HIUNFCIPHERALGE:定义CIPHER加密算法HIUNFCIPHERKEYLENGTHE:定义CIPHERHIUNFCIPHERBITWIDTHE:定义CIPHERHIUNFCIPHERCTRLCHANGEFLAGS:定义CIPHERCCM构体HIUNFCIPHERCATYPEE:定义CIPHERkey的来源HIUNFCIPHERKLADTARGETEKlad产生的KeyHIUNFCIPHERTYPEE:定义CIPHER加类型选择HIUNFCIPHERATTSS:定义CIPHER加类型结构HIUNFCIPHERSM1ROUNDE:SM1计算的轮数。HIUNFCIPHERCTRLS:定义CIPHERHIUNFCIPHERCTRLAESS:AESHIUNFCIPHERCTRLAESCCMGCMS:AES-CCM、AES-GCMHIUNFCIPHERCTRLDESS:DESHIUNFCIPHERCTRL3DESS:3DESHIUNFCIPHERCTRLSM1S:SM1HIUNFCIPHERCTRLSM4S:SM4HIUNFCIPHERCTRLEXS:加密控制信息扩展结构作为算法的参数HIUNFCIPHERDATAS:定义CIPHER加数据HIUNFCIPHERHASHTYPEE:定义CIPHERHIUNFCIPHERHASHATTSS:定义CIPHERHIUNFCIPHERRSAENCSCHEMEE:定义RSAHIUNFCIPHERRSASIGNSCHEMEE:定义RSA

HIUNFCIPHERRSAPUBKEYS:定义RSAHIUNFCIPHERRSAPRIKEYS:定义RSAHIUNFCIPHERRSAPUBENCS:定义RSA公钥加算法参数结构体HIUNFCIPHERRSAPRIENCS:定义RSA私钥算法参数结构体HIUNFCIPHERRSASIGNS:定义RSAHIUNFCIPHERRSAVERIFYS:定义RSACIPHERIVCHANGEONEPKG:CIPHER为数据包设置向量时,仅更新一个数据包的IV。CIPHERIVCHANGEALLPKG:CIPHER为数据包设置向量时,更新所有数据IV。定义CIPHER的句柄typedefHIU32HI定义CIPHER工作模式typedefenumhiHIUNFCIPHERWORKMODE{HIUNFCIPHERWORKMODEECB,HIUNFCIPHERWORKMODECBC,HIUNFCIPHERWORKMODECFB,HIUNFCIPHERWORKMODEOFB,HIUNFCIPHERWORKMODECTR,HIUNFCIPHERWORKMODECCM,HIUNFCIPHERWORKMODEGCM,HIUNFCIPHERWORKMODECBCHIUNFCIPHERWORKMODEHIUNFCIPHERWORKMODE }HIUNFCIPHERWORKMODE描ECB(ElectronicCodeBook)模CBC(CipherBlockChaining)CFB(CipherFeedBack)模式OFB(OutputFeedBack)CTR(Counter)模CCM(CounterwithCipherBlockChaining-MessageAuthentication)模式。GCM(Galois/CounterMode)模HIUNFCIPHERWORKMODECBCCHIUNFCIPHERWORKMODEINVAL值定义CIPHER加密算法typedefenumhiHIUNFCIPHERALG{HIUNFCIPHERALG HIUNFCIPHERALG HIUNFCIPHERALG HIUNFCIPHERALG HIUNFCIPHERALG HIUNFCIPHERALG HIUNFCIPHERALG HIUNFCIPHERALG }HIUNFCIPHERALG描HIUNFCIPHERALGDESHIUNFCIPHERALG3DESHIUNFCIPHERALGAESHIUNFCIPHERALGSM1HIUNFCIPHERALGSM4HIUNFCIPHERALGDMA直接拷贝,不做加运HIUNFCIPHERALGHIUNFCIPHERALG值定义CIPHER密钥typedefenumhiHIUNFCIPHERKEYLENGTH{HIUNFCIPHERKEYAES128BIT0x0,HIUNFCIPHERKEYAES192BIT0x1,HIUNFCIPHERKEYAES256BIT0x2,HIUNFCIPHERKEYDES3KEY0x2,HIUNFCIPHERKEYDES2KEY0x3,HIUNFCIPHERKEYDEFAULT0x0,HIUNFCIPHERKEYINVALID}HIUNFCIPHERKEYLENGTH描HIUNFCIPHERKEYAESAES运算方式下采用128bit密钥长度HIUNFCIPHERKEYAESAES运算方式下采用192bit密钥长度HIUNFCIPHERKEYAESAES运算方式下采用256bit密钥长度HIUNFCIPHERKEYDES3DES3HIUNFCIPHERKEYDES3DES2HIUNFCIPHERKEYkey长度,DES:8byte,SM1:48byte,SM4:16byteHIUNFCIPHERKEY值AES的密钥长度可以为128bit,192bit或256bit3DES23key,一个keyDES加密所用的密钥,它的长度为64bit。DES定义CIPHER加密位宽typedefenumhiHIUNFCIPHERBITWIDTH{HIUNFCIPHERBITWIDTH64BIT0x0,HIUNFCIPHERBITWIDTH8BIT0x1,HIUNFCIPHERBITWIDTH1BIT0x2,HIUNFCIPHERBITWIDTH128BIT0x3,HIUNFCIPHERBITWIDTHINVALID}HIUNFCIPHERBITWIDTH描HIUNFCIPHERBITWIDTH64bit描HIUNFCIPHERBITWIDTH8bitHIUNFCIPHERBITWIDTH1bitHIUNFCIPHERBITWIDTH128bitHIUNFCIPHERBITWIDTH值定义CIPHERCCM模式的信typedefstructhiUNFCIPHERCTRLCHANGEFLAG{HI HI bitsResv:}HIUNFCIPHERCTRLCHANGEFLAG描向量变更:0不变更;1只为第一个变更;2保定义CIPHERkey的来源typedefenumhiHIUNFCIPHERCATYPE{HIUNFCIPHERKEYSRCUSER0x0,HIUNFCIPHERKEYSRCKLAD0,HIUNFCIPHERKEYSRCKLAD1,HIUNFCIPHERKEYSRCKLAD2,HIUNFCIPHERKEYSRCKLAD3,HIUNFCIPHERKEYSRCBUTT,HIUNFCIPHERKEYSRCINVALID}HIUNFCIPHERCATYPE描HIUNFCIPHERKEYSRC用户配置的HIUNFCIPHERKEYSRCKLADKLAD1其RootKeyEfuse的第1组HIUNFCIPHERKEYSRCKLADKLAD2其RootKeyEfuse的第2组HIUNFCIPHERKEYSRCKLADKLAD3其RootKeyEfuse的第3组HIUNFCIPHERKEYSRCHIUNFCIPHERKEYSRC值定义Klad产生的Key送达的目标typedef{HIUNFCIPHERKLADTARGETAES,HIUNFCIPHERKLADTARGETRSA,HIUNFCIPHERKLADTARGETBUTT,}HIUNFCIPHERKLADTARGET描HIUNFCIPHERKLADTARGETKladKey送到HIUNFCIPHERKLADTARGETKladKey送到HIUNFCIPHERKLADTARGET定义CIPHER加类型选择typedef{HIUNFCIPHERTYPENORMAL HIUNFCIPHERTYPECOPYAVOID,HIUNFCIPHERTYPEBUTT,HIUNFCIPHERTYPE }HIUNFCIPHERTYPE描HIUNFCIPHERTYPE1-7通道DMAHIUNFCIPHERTYPECOPY0通道的CPUHIUNFCIPHERTYPEHIUNFCIPHERTYPE值定义CIPHER加类型结构typedef{HIUNFCIPHERTYPEE}HIUNFCIPHERATTS描SM1typedefenumhiHIUNFCIPHERSM1ROUND{HIUNFCIPHERSM1ROUND080x00,HIUNFCIPHERSM1ROUND100x01,HIUNFCIPHERSM1ROUND120x02,HIUNFCIPHERSM1ROUND140x03,HIUNFCIPHERSM1ROUNDBUTT,}HIUNFCIPHERSM1ROUND描HIUNFCIPHERSM1ROUNDSM18HIUNFCIPHERSM1ROUNDSM110HIUNFCIPHERSM1ROUNDSM112HIUNFCIPHERSM1ROUNDSM114HIUNFCIPHERSM1ROUND无效定义CIPHER控制信typedefstructhiHIUNFCIPHERCTRL{HIU32u32Key[8];HIU32u32IV[4];HIBOOLbKeyByCA;HIUNFCIPHERCATYPEEenCaType;HIUNFCIPHERALGEenAlg;HIUNFCIPHERBITWIDTHEenBitWidth;HIUNFCIPHERWORKMODEEenWorkMode;HIUNFCIPHERKEYLENGTHEenKeyLen;HIUNFCIPHERCTRLCHANGEFLAGS}HIUNFCIPHERCTRL描密描加密或的位更新标志位,表示IVECBAES加密控制信息结构扩展。typedefstructhiHIUNFCIPHERCTRLAES{HIU32u32EvenKey[8];HIU32u32OddKey[8];HIU32u32IV[4];HIUNFCIPHERBITWIDTHEenBitWidth;HIUNFCIPHERKEYLENGTHEenKeyLen;HIUNFCIPHERCTRLCHANGEFLAGS}HIUNFCIPHERCTRLAES描偶key(默认使用偶向key长描AES支持的工作模式为:ECB/CBC/CFB/OFB/CTR,其中CFB1、8、128bit,OFB模式仅支持128bit位宽。typedefstructhiHIUNFCIPHERCTRLAESCCMGCM{HIU32u32Key[8];HIU32u32IV[4];HIUNFCIPHERKEYLENGTHEenKeyLen;HIU32u32IVLen;HIU32HIU32HIU32}HIUNFCIPHERCTRLAESCCMGCM描key(默认使用偶向keyIVTagA关联数据ACCMIV长度u32IVLen可取{7,8,910,11,12,13}byte,IV存放算法标准中的Nonce数据N。加密数据的长度用n个Byte表示,且应满足条件:u32IVLen+n=15。因此,u32IVLen为13时,n为2,此时加密数据长度最长为65536byte,其它以此类推。Tag的长度u32TagLen可取{4,6,8,10,12,14,16}byte,CCM加密时的向量N、关联数据A取值必须与时保持一致对于GCM:向量IV长度u32IVLen可取范围为[1~16]byte,Tag的长度u32TagLen可为{12,13,14,15,16}byte4、8byte,GCMADES加密控制typedefstructhiHIUNFCIPHERCTRLDES{HIU32u32Key[2];HIU32u32IV[2];HIUNFCIPHERBITWIDTHEHIUNFCIPHERCTRLCHANGEFLAGS}HIUNFCIPHERCTRLDES描密向该算法不安全,不建议产品使用该种加算法3DES加密控制信息结构typedefstructhiHIUNFCIPHERCTRL3DES{HIU32u32Key[6];HIU32u32IV[2];HIUNFCIPHERBITWIDTHEenBitWidth;HIUNFCIPHERKEYLENGTHEenKeyLen;HIUNFCIPHERCTRLCHANGEFLAGS}HIUNFCIPHERCTRL3DES描密向加密key长3DES加密过程:使用3个不同的K1、K2、K3依次进行加密、 当第一次加密和最后时使用的key相等并且不等于第二次 的key时,即(K1=K3)!=K2,此时为使用2Key的情况,仅需设置K1,K2即可。DES/3DES支持的工作模式有:ECB、CBC、CFB、OFB,其中CFB和OFB支持的位宽可为1、8、64bitSM1加密控制信息结构。typedefstructhiHIUNFCIPHERCTRLSM1{HIU32u32EK[4];HIU32u32AK[4];HIU32u32SK[4];HIU32HIUNFCIPHERSM1ROUNDEHIUNFCIPHERCTRLCHANGEFLAGS}HIUNFCIPHERCTRLSM1描SM1keySM1keySM1key向SM1SM4typedefstructhiHIUNFCIPHERCTRLSM4{HIU32u32Key[4];HIU32u32IV[4];HIUNFCIPHERCTRLCHANGEFLAGS}HIUNFCIPHERCTRLSM4描描向合。新增的SM1、SM4、CCM、GCM等算法,不适合用HIUNFCIPHERCTRLStypedefstructhiHIUNFCIPHERCTRLEX{HIUNFCIPHERALGEHIUNFCIPHERWORKMODEEenWorkMode;HIBOOLbKeyByCA;HIVOID}HIUNFCIPHERCTRLEX描加算是否使用硬件指向各种算法的CIPHER控制信息结构HIUNFCIPHERConfigHandleExHIVOID*pParam参数分对于AES,指针应指向HIUNFCIPHERCTRLAES对于AESCCM或AESGCM,指针应指向HIUNFCIPHERCTRLAESCCMGCMS对于DES,指针应指向HIUNFCIPHERCTRLDESS对于3DES,指针应指向HIUNFCIPHERCTRL3DESS对于SM1,指针应指向HIUNFCIPHERCTRLSM1S对于SM4,指针应指向HIUNFCIPHERCTRLSM4S定义CIPHER加数据typedefstructhiHIUNFCIPHERDATA{HISIZETszSrcPhyAddr;HISIZETszDestPhyAddr;HIU32u32Byength;HIBOOLbOddKey;}HIUNFCIPHERDATA描加数据长是否使用奇偶key(默认使用偶定义CIPHER哈希算typedefenumhiHIUNFCIPHERHASHTYPE{HIUNFCIPHERHASHTYPESHA1,HIUNFCIPHERHASHTYPESHA224,HIUNFCIPHERHASHTYPESHA256,HIUNFCIPHERHASHTYPESHA384,HIUNFCIPHERHASHTYPEHIUNFCIPHERHASHTYPEHMACSHA1,HIUNFCIPHERHASHTYPEHMACSHA224,HIUNFCIPHERHASHTYPEHMACSHA256,HIUNFCIPHERHASHTYPEHMACSHA384,HIUNFCIPHERHASHTYPEHMACSHA512,HIUNFCIPHERHASHTYPESM3,HIUNFCIPHERHASHTYPEHIUNFCIPHERHASHTYPE }HIUNFCIPHERHASHTYPE描HIUNFCIPHERHASHTYPESHA1哈希HIUNFCIPHERHASHTYPESHA224哈希HIUNFCIPHERHASHTYPESHA256哈希HIUNFCIPHERHASHTYPESHA384哈希HIUNFCIPHERHASHTYPESHA512哈希HIUNFCIPHERHASHTYPEHMACHMACSHA1哈希算HIUNFCIPHERHASHTYPEHMACHMACSHA224哈希算HIUNFCIPHERHASHTYPEHMACHMACSHA256哈希算HIUNFCIPHERHASHTYPEHMACHMACSHA384哈希算HIUNFCIPHERHASHTYPEHMACHMACSHA512哈希算HIUNFCIPHERHASHTYPESM3杂凑HIUNFCIPHERHASHTYPEHIUNFCIPHERHASHTYPE值CIPHERtypedef{HIU8*pu8HMACKey;HIU32u32HMACKeyLen;HIUNFCIPHERHASHTYPEE}HIUNFCIPHERHASHATTS描HAMCHAMCRSAtypedefenumhiHIUNFCIPHERRSAENCSCHEME{HIUNFCIPHERRSAENCSCHEMENOPADDING,HIUNFCIPHERRSAENCSCHEMEBLOCKTYPE0,HIUNFCIPHERRSAENCSCHEMEBLOCKTYPE1,HIUNFCIPHERRSAENCSCHEMEBLOCKTYPE2,HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA1,HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA224,HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA256,HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA384,HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA512,HIUNFCIPHERRSAENCSCHEMERSAESPKCS1V15,HIUNFCIPHERRSAENCSCHEMEBUTT,HIUNFCIPHERRSAENCSCHEME }HIUNFCIPHERRSAENCSCHEME描HIUNFCIPHERRSAENCSCHEMENOPADDING不填HIUNFCIPHERRSAENCSCHEMEBLOCKTYPE0,PKCS#1blocktype0填充方HIUNFCIPHERRSAENCSCHEMEBLOCKTYPE1PKCS#1blocktype1填充方HIUNFCIPHERRSAENCSCHEMEBLOCKTYPE2PKCS#1blocktype2填充方HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA1PKCS#1的RSAES-OAEP-HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA224PKCS#1的RSAES-SHA224填充HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA256PKCS#1的RSAES-SHA256填充HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA384PKCS#1的RSAES-SHA384填充HIUNFCIPHERRSAENCSCHEMERSAESOAEPSHA512PKCS#1的RSAES-SHA512填充HIUNFCIPHERRSAENCSCHEMERSAESPKCS1V15PKCS#1的PKCS1V15方HIUNFCIPHERRSASCHEME无效HIUNFCIPHERRSAENCSCHEME值定义RSAtypedefenumhiHIUNFCIPHERRSASIGNSCHEME{HIUNFCIPHERRSASIGNSCHEMERSASSAPKCS1V15SHA1 HIUNFCIPHERRSASIGNSCHEMERSASSAPKCS1V15SHA224,HIUNFCIPHERRSASIGNSCHEMERSASSAPKCS1V15SHA256,HIUNFCIPHERRSASIGNSCHEMERSASSAPKCS1V15SHA384,HIUNFCIPHERRSASIGNSCHEMERSASSAPKCS1V15SHA512,HIU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论