/// <summary> /// Handles a HMAC generation request from the server /// </summary> /// <param name="subsystem"></param> /// <param name="requestContext"></param> private void HandleGenerateHMACRequest(TPMClientSubsystem subsystem, RequestContext <GenerateHMACRequest, GenerateHMACResponse> requestContext) { TPMSession session = MyClientContext.TPMClient.FindSession(requestContext.Request.TpmSessionIdentifier); GenerateHMACResponse response = requestContext.CreateResponse(); if (session == null) { _logger.WarnFormat("Received HMAC request for tpm session with id #{0}, but this id is not associated with an active session!", requestContext.Request.TpmSessionIdentifier); response.Succeeded = false; response.SetKnownErrorCode(GenerateHMACResponse.ErrorCodeEnum.TPMSessionNotFound); response.Execute(); return; } _logger.DebugFormat("Requesting password: {0}", requestContext.Request.KeyInfo.KeyType); ProtectedPasswordStorage pw = session.RequestSecret(requestContext.Request.KeyInfo); if (pw == null) { response.Succeeded = false; response.SetKnownErrorCode(GenerateHMACResponse.ErrorCodeEnum.HMACSecretMissing); response.Execute(); return; } HMACProvider hmacProvider = new HMACProvider(pw); response.Succeeded = true; response.TpmAuthData = hmacProvider.Hash(requestContext.Request.HMACDataProviders); response.Execute(); }
/// <summary> /// Gets the key data (which is needed to load the key) /// </summary> /// <param name="subsystem"></param> /// <param name="requestContext"></param> private void HandleGetKeyDataRequest(TPMClientSubsystem subsystem, RequestContext <GetKeyDataRequest, GetKeyDataResponse> requestContext) { TPMSession session = MyClientContext.TPMClient.FindSession(requestContext.Request.TpmSessionIdentifier); GetKeyDataResponse response = requestContext.CreateResponse(); if (session == null) { _logger.WarnFormat("Received HMAC request for tpm session with id #{0}, but this id is not associated with an active session!", requestContext.Request.TpmSessionIdentifier); response.Succeeded = false; response.SetKnownErrorCode(TPMClientSubsystemResponseBase.ErrorCodeEnum.TPMSessionNotFound); response.Execute(); return; } if (session.Keystore.ContainsIdentifier(requestContext.Request.Identifier) == false) { response.SetKnownErrorCode(TPMClientSubsystemResponseBase.ErrorCodeEnum.KeyIdentifierMissing); response.Succeeded = false; response.Execute(); return; } response.KeyData = session.Keystore.GetKeyBlob(requestContext.Request.Identifier); response.Execute(); }