Esempio n. 1
0
        public override TPMCommandResponse Process()
        {
            byte[] nonce = NonceGenerator.GenerateByteNonce(20);

            TPMBlob requestBlob = new TPMBlob();

            requestBlob.WriteCmdHeader(TPMCmdTags.TPM_TAG_RQU_COMMAND, TPMOrdinals.TPM_ORD_ReadPubek);
            requestBlob.Write(nonce, 0, nonce.Length);
            requestBlob.WriteCmdSize();

            TPMBlob responseBlob = TransmitMe(requestBlob);

            responseBlob.SkipHeader();

            long          posStart = responseBlob.Position;
            TPMPubkeyCore pubkey   = TPMPubkeyCore.CreateFromTPMBlob(responseBlob);
            long          posEnd   = responseBlob.Position;

            Digest digest = new Digest(responseBlob, 20);

            if (digest.CompareTo(
                    new HashStreamDataProvider(responseBlob, posStart, posEnd - posStart, false),
                    new HashByteDataProvider(nonce)) == false)
            {
                throw new TPMResponseException("Local digest does not match remote digest");
            }

            Parameters responseParams = new Parameters();

            responseParams.AddValue(TPMPubkey.PARAM_TPM_PUBKEY, pubkey);

            return(new TPMCommandResponse(true, TPMCommandNames.TPM_CMD_ReadPubek, responseParams));
        }
Esempio n. 2
0
        public override void Init(Parameters param, TPMProvider tpmProvider, TPMWrapper tpmWrapper)
        {
            base.Init(param, tpmProvider, tpmWrapper);


            _digest         = null;
            _responseDigest = null;

            if (param.IsDefined <byte[]>("externalData"))
            {
                _nonce = param.GetValueOf <byte[]>("externalData");
            }
            else
            {
                _nonce = NonceGenerator.GenerateByteNonce(20);
            }

            object myType = param.GetValueOf <object>("targetPCR");

            _pcrSelection = param.GetValueOf <TPMPCRSelectionCore>("targetPCR");
        }
Esempio n. 3
0
 /// <summary>
 /// Generates a new nonce odd
 /// </summary>
 public void NewNonceOddOSAP()
 {
     NonceGenerator.GenerateByteNonce(_nonceOddOSAP);
 }
Esempio n. 4
0
 /// <summary>
 /// Generates a new nonce odd
 /// </summary>
 public void NewNonceOdd()
 {
     NonceGenerator.GenerateByteNonce(_nonceOdd);
 }