Home | History | Annotate | Download | only in trunks
      1 //
      2 // Copyright (C) 2015 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #include "trunks/hmac_session_impl.h"
     18 
     19 #include <string>
     20 
     21 #include <base/logging.h>
     22 #include <base/macros.h>
     23 #include <base/stl_util.h>
     24 #include <openssl/rand.h>
     25 
     26 namespace trunks {
     27 
     28 HmacSessionImpl::HmacSessionImpl(const TrunksFactory& factory)
     29     : factory_(factory) {
     30   session_manager_ = factory_.GetSessionManager();
     31 }
     32 
     33 HmacSessionImpl::~HmacSessionImpl() {
     34   session_manager_->CloseSession();
     35 }
     36 
     37 AuthorizationDelegate* HmacSessionImpl::GetDelegate() {
     38   if (session_manager_->GetSessionHandle() == kUninitializedHandle) {
     39     return nullptr;
     40   }
     41   return &hmac_delegate_;
     42 }
     43 
     44 TPM_RC HmacSessionImpl::StartBoundSession(
     45     TPMI_DH_ENTITY bind_entity,
     46     const std::string& bind_authorization_value,
     47     bool enable_encryption) {
     48   return session_manager_->StartSession(TPM_SE_HMAC, bind_entity,
     49                                         bind_authorization_value,
     50                                         enable_encryption, &hmac_delegate_);
     51 }
     52 
     53 TPM_RC HmacSessionImpl::StartUnboundSession(bool enable_encryption) {
     54   // Starting an unbound session is the same as starting a session bound to
     55   // TPM_RH_NULL. In this case, the authorization is the zero length buffer.
     56   // We can therefore simply call StartBoundSession with TPM_RH_NULL as the
     57   // binding entity, and the empty string as the authorization.
     58   return StartBoundSession(TPM_RH_NULL, "", enable_encryption);
     59 }
     60 
     61 void HmacSessionImpl::SetEntityAuthorizationValue(const std::string& value) {
     62   hmac_delegate_.set_entity_authorization_value(value);
     63 }
     64 
     65 void HmacSessionImpl::SetFutureAuthorizationValue(const std::string& value) {
     66   hmac_delegate_.set_future_authorization_value(value);
     67 }
     68 
     69 }  // namespace trunks
     70