TPMI_ALG_HASH_Unmarshal-SM3

代码示例展示了在客户端使用TPM生成SM2主密钥的过程,涉及ECDSA和RSA密钥模板。在IBMTPM1682的CommandDispatcher.c文件中,针对ALG_SM3_256的处理未被正确设置,导致哈希错误。当尝试将ALG_SM3_256设为ALG_YES时,编译出现错误。
摘要由CSDN通过智能技术生成
@Test
    public void doSM2primaryKey(){

        byte[] authPolicy = HexUtils.toByteArray("167860A35F2C5C3567F9C927AC56C032F3B3A6462F8D037998E7A10F77FA454A");
// Do the same thing with an ECDSA key
        // Create an RSA signing public key in the owner hierarchy
        TPMT_PUBLIC eccTemplate = new TPMT_PUBLIC(
                TPM_ALG_ID.SM3_256,
                new TPMA_OBJECT(TPMA_OBJECT.fixedTPM,TPMA_OBJECT.fixedParent, TPMA_OBJECT.sensitiveDataOrigin, TPMA_OBJECT.userWithAuth, TPMA_OBJECT.adminWithPolicy, TPMA_OBJECT.restricted, TPMA_OBJECT.decrypt),
                authPolicy,
                new TPMS_ECC_PARMS
                        (
                         //new TPMT_SYM_DEF_OBJECT(TPM_ALG_ID.NULL,  0, TPM_ALG_ID.NULL),
                       new TPMT_SYM_DEF_OBJECT(TPM_ALG_ID.SM4,  128, TPM_ALG_ID.CFB),
                        new TPMS_SIG_SCHEME_ECDSA(TPM_ALG_ID.NULL),
                        TPM_ECC_CURVE.SM2_P256,
                        new TPMS_NULL_KDF_SCHEME()
                ),

                new TPMS_ECC_POINT());

        // Tell the TPM to make a key with a non-null auth value.
        TPMS_SENSITIVE_CREATE eccSens = new TPMS_SENSITIVE_CREATE(Helpers.RandomBytes(10), new byte[0]);

        CreatePrimaryResponse eccPrimary = tpm.CreatePrimary(TPM_HANDLE.from(TPM_RH.OWNER), eccSens,
                eccTemplate, new byte[0], new TPMS_PCR_SELECTION[0]);

        System.out.println("SM2 Primary Key: \n" + eccPrimary.toString());
        System.out.println("SM2 EK: " + eccPrimary.outPublic.toString());
    }

上面是客户端代码

          

ibmtpm1682\src\CommandDispatcher.c :

 FlagFunction        *f = unmarshalArray[dType];
            result = f(&commandIn[offset], &command->parameterBuffer,
                   &command->parameterSize,
                   (type & 0x80) != 0);

TPMT_PUBLIC_Unmarshal(TPMT_PUBLIC *target, BYTE **buffer, INT32 *size, BOOL allowNull)

 TPMI_ALG_HASH_Unmarshal(TPMI_ALG_HASH *target, BYTE **buffer, INT32 *size, BOOL allowNull)

#ifndef ALG_SM3_256
#define ALG_SM3_256                     ALG_NO
#endif

改为 ALG_YES

否则出现异常错误:

tss.TpmException: TPM Exception: {HASH}

加上后编译报错了:

 

调用堆栈:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值