// // Copyright (C) 2015 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef TRUNKS_POLICY_SESSION_H_ #define TRUNKS_POLICY_SESSION_H_ #include <string> #include <vector> #include <base/macros.h> #include "trunks/tpm_generated.h" namespace trunks { class AuthorizationDelegate; // PolicySession is an interface for managing policy backed sessions for // authorization and parameter encryption. class PolicySession { public: PolicySession() {} virtual ~PolicySession() {} // Returns an authorization delegate for this session. Ownership of the // delegate pointer is retained by the session. virtual AuthorizationDelegate* GetDelegate() = 0; // Starts a salted session which is bound to |bind_entity| with // |bind_authorization_value|. Encryption is enabled if |enable_encryption| is // true. The session remains active until this object is destroyed or another // session is started with a call to Start*Session. virtual TPM_RC StartBoundSession( TPMI_DH_ENTITY bind_entity, const std::string& bind_authorization_value, bool enable_encryption) = 0; // Starts a salted, unbound session. Encryption is enabled if // |enable_encryption| is true. The session remains active until this object // is destroyed or another session is started with a call to Start*Session. virtual TPM_RC StartUnboundSession(bool enable_encryption) = 0; // This method is used to get the current PolicyDigest of the PolicySession. virtual TPM_RC GetDigest(std::string* digest) = 0; // This method is used to construct a complex policy. It takes a list // of policy digests. After the command is executed, the policy represented // by this session is the OR of the provided policies. virtual TPM_RC PolicyOR(const std::vector<std::string>& digests) = 0; // This method binds the PolicySession to a provided PCR value. If the empty // string is provided, the PolicySession is bound to the current PCR value. virtual TPM_RC PolicyPCR(uint32_t pcr_index, const std::string& pcr_value) = 0; // This method binds the PolicySession to a specified CommandCode. // Once called, this Session can only be used to authorize actions on the // provided CommandCode. virtual TPM_RC PolicyCommandCode(TPM_CC command_code) = 0; // This method specifies that Authorization Values need to be included in // HMAC computation done by the AuthorizationDelegate. virtual TPM_RC PolicyAuthValue() = 0; // Sets the current entity authorization value. This can be safely called // while the session is active and subsequent commands will use the value. virtual void SetEntityAuthorizationValue(const std::string& value) = 0; private: DISALLOW_COPY_AND_ASSIGN(PolicySession); }; } // namespace trunks #endif // TRUNKS_POLICY_SESSION_H_