Я пытаюсь зашифровать дайджест сертификата с помощью TPM 2.0 (в данном случае симулятор IBM). Когда я пробую его с дайджестом размером 898 байт, функция работает правильно, но когда я пробую его с дайджестом размером 2597 байт, я получаю сообщение об ошибке ниже от TPM. Я думаю, что эта ошибка связана со вторым описанием на этом изображении ( TPM2_EncryptDecrypt2 отвечает код ), но я не знаю, как ее решить.
Encrpyt/Decrypt Error - Tpm2Lib.TpmException: Error {Size} was returned for command EncryptDecrypt2.
Details:
[Code=TpmRc.Size],[RawCode=0x1D5,469]
[ErrorEntity=Parameter], [ParmNum=1]
[ParmName=inData]
at Tpm2Lib.Tpm2.ProcessError(TpmSt responseTag, UInt32 responseParamSize, TpmRc resultCode, TpmStructureBase inParms)
at Tpm2Lib.Tpm2.DispatchMethod(TpmCc ordinal, TpmStructureBase inParms, Type expectedResponseType, TpmStructureBase& outParms, Int32 numInHandlesNotUsed, Int32 numOutHandlesNotUsed)
at Tpm2Lib.Tpm2.EncryptDecrypt2(TpmHandle keyHandle, Byte[] inData, Byte decrypt, TpmAlgId mode, Byte[] ivIn, Byte[]& ivOut)
Определение моего ключа: SymDefObject(TpmAlgId.Aes, 256, TpmAlgId.Cfb)
Вот так я получаю дайджест сертификата: byte[] data = certificate.Export(X509ContentType.Pfx, "password");
Вот мой код:
public static byte[] EncryptDecrypt(AuthSession authSession, TpmHandle keyHandle, byte[] data, bool decryptMode = false)
{
try
{
byte[] iv = new byte[16];
byte[] ivOut;
if (decryptMode)
{
return tpm[authSession].EncryptDecrypt2(keyHandle, data, (byte)1, TpmAlgId.Cfb, iv, out ivOut);
}
return tpm[authSession].EncryptDecrypt2(keyHandle, data, (byte)0, TpmAlgId.Cfb, iv, out ivOut);
}
catch (TpmException ex)
{
Console.WriteLine("Encrpyt/Decrypt Error - {0}\n", ex);
return null;
}
}