Tpm2Lib.Tpm2.SequenceComplete C# (CSharp) Method

SequenceComplete() private method

private SequenceComplete ( TpmHandle sequenceHandle, byte buffer, TpmHandle hierarchy, [ validation ) : byte[]
sequenceHandle TpmHandle
buffer byte
hierarchy TpmHandle
validation [
return byte[]
        public byte[] SequenceComplete(
            TpmHandle sequenceHandle,
            byte[] buffer,
            TpmHandle hierarchy,
            [SuppressMessage("Microsoft.Design", "CA1021")]
            out TkHashcheck validation
        )
        {
            Tpm2SequenceCompleteRequest inS = new Tpm2SequenceCompleteRequest();
            inS.sequenceHandle = sequenceHandle;
            inS.buffer = buffer;
            inS.hierarchy = hierarchy;
            TpmStructureBase outSBase;
            DispatchMethod(TpmCc.SequenceComplete, (TpmStructureBase) inS, typeof(Tpm2SequenceCompleteResponse), out outSBase, 1, 0);
            Tpm2SequenceCompleteResponse outS = (Tpm2SequenceCompleteResponse) outSBase;
            validation = outS.validation;
            return outS.result;
        }
        /// <summary>

Usage Example

Exemplo n.º 1
0
        public Byte[] SignHmac(Byte[] dataToSign)
        {
            TpmHandle hmacKeyHandle = new TpmHandle(AIOTH_PERSISTED_KEY_HANDLE + logicalDeviceId);
            int dataIndex = 0;
            Byte[] iterationBuffer;
            Byte[] hmac = { };

            if (dataToSign.Length <= 1024)
            {
                try
                {
                    // Open the TPM
                    Tpm2Device tpmDevice = new TbsDevice();
                    tpmDevice.Connect();
                    var tpm = new Tpm2(tpmDevice);

                    // Calculate the HMAC in one shot
                    hmac = tpm.Hmac(hmacKeyHandle, dataToSign, TpmAlgId.Sha256);

                    // Dispose of the TPM
                    tpm.Dispose();
                }
                catch
                {
                    return hmac;
                }
            }
            else
            {
                try
                {
                    // Open the TPM
                    Tpm2Device tpmDevice = new TbsDevice();
                    tpmDevice.Connect();
                    var tpm = new Tpm2(tpmDevice);

                    // Start the HMAC sequence
                    Byte[] hmacAuth = new byte[0];
                    TpmHandle hmacHandle = tpm.HmacStart(hmacKeyHandle, hmacAuth, TpmAlgId.Sha256);
                    while (dataToSign.Length > dataIndex + 1024)
                    {
                        // Repeat to update the hmac until we only hace <=1024 bytes left
                        iterationBuffer = new Byte[1024];
                        Array.Copy(dataToSign, dataIndex, iterationBuffer, 0, 1024);
                        tpm.SequenceUpdate(hmacHandle, iterationBuffer);
                        dataIndex += 1024;
                    }
                    // Finalize the hmac with the remainder of the data
                    iterationBuffer = new Byte[dataToSign.Length - dataIndex];
                    Array.Copy(dataToSign, dataIndex, iterationBuffer, 0, dataToSign.Length - dataIndex);
                    TkHashcheck nullChk;
                    hmac = tpm.SequenceComplete(hmacHandle, iterationBuffer, TpmHandle.RhNull, out nullChk);

                    // Dispose of the TPM
                    tpm.Dispose();
                }
                catch
                {
                    return hmac;
                }
            }

            return hmac;
        }
Tpm2