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)); }
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"); }
/// <summary> /// Generates a new nonce odd /// </summary> public void NewNonceOddOSAP() { NonceGenerator.GenerateByteNonce(_nonceOddOSAP); }
/// <summary> /// Generates a new nonce odd /// </summary> public void NewNonceOdd() { NonceGenerator.GenerateByteNonce(_nonceOdd); }