118f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// Copyright 2016 The Android Open Source Project
218f27ade48405475ed610ee0067faa773211d598Janis Danisevskis//
318f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// Licensed under the Apache License, Version 2.0 (the "License");
418f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// you may not use this file except in compliance with the License.
518f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// You may obtain a copy of the License at
618f27ade48405475ed610ee0067faa773211d598Janis Danisevskis//
718f27ade48405475ed610ee0067faa773211d598Janis Danisevskis//      http://www.apache.org/licenses/LICENSE-2.0
818f27ade48405475ed610ee0067faa773211d598Janis Danisevskis//
918f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// Unless required by applicable law or agreed to in writing, software
1018f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// distributed under the License is distributed on an "AS IS" BASIS,
1118f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1218f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// See the License for the specific language governing permissions and
1318f27ade48405475ed610ee0067faa773211d598Janis Danisevskis// limitations under the License.
1418f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
1518f27ade48405475ed610ee0067faa773211d598Janis Danisevskis#ifndef KEYSTORE_INCLUDE_KEYSTORE_KEYATTESTATIONAPPLICATIONID_H_
1618f27ade48405475ed610ee0067faa773211d598Janis Danisevskis#define KEYSTORE_INCLUDE_KEYSTORE_KEYATTESTATIONAPPLICATIONID_H_
1718f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
1818f27ade48405475ed610ee0067faa773211d598Janis Danisevskis#include <memory>
1918f27ade48405475ed610ee0067faa773211d598Janis Danisevskis#include <vector>
2018f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
218845a098c91d75b3d079e9ee6aafba919f7a9c66Shawn Willden#include <binder/Parcelable.h>
228845a098c91d75b3d079e9ee6aafba919f7a9c66Shawn Willden
23a447b3c9af62540abcc2d01a4d62124838ffe89dDmitry Dementyev#include "KeyAttestationPackageInfo.h"
24a447b3c9af62540abcc2d01a4d62124838ffe89dDmitry Dementyev
2518f27ade48405475ed610ee0067faa773211d598Janis Danisevskisnamespace android {
2618f27ade48405475ed610ee0067faa773211d598Janis Danisevskisnamespace security {
2718f27ade48405475ed610ee0067faa773211d598Janis Danisevskisnamespace keymaster {
2818f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
2918f27ade48405475ed610ee0067faa773211d598Janis Danisevskisclass KeyAttestationApplicationId : public Parcelable {
3018f27ade48405475ed610ee0067faa773211d598Janis Danisevskis  public:
3118f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    typedef SharedNullableIterator<const KeyAttestationPackageInfo, std::vector>
3218f27ade48405475ed610ee0067faa773211d598Janis Danisevskis        ConstKeyAttestationPackageInfoIterator;
33ea47d3f78bd6902e406f5faf84a5477112f10e3eEran Messeri    KeyAttestationApplicationId();
34ea47d3f78bd6902e406f5faf84a5477112f10e3eEran Messeri    KeyAttestationApplicationId(std::unique_ptr<KeyAttestationPackageInfo> package);
3518f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
3618f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    status_t writeToParcel(Parcel*) const override;
3718f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    status_t readFromParcel(const Parcel* parcel) override;
3818f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
3918f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    ConstKeyAttestationPackageInfoIterator pinfos_begin() const {
4018f27ade48405475ed610ee0067faa773211d598Janis Danisevskis        return ConstKeyAttestationPackageInfoIterator(packageInfos_);
4118f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    }
4218f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    ConstKeyAttestationPackageInfoIterator pinfos_end() const {
4318f27ade48405475ed610ee0067faa773211d598Janis Danisevskis        return ConstKeyAttestationPackageInfoIterator();
4418f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    }
4518f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
4618f27ade48405475ed610ee0067faa773211d598Janis Danisevskis  private:
4718f27ade48405475ed610ee0067faa773211d598Janis Danisevskis    std::shared_ptr<std::vector<std::unique_ptr<KeyAttestationPackageInfo>>> packageInfos_;
4818f27ade48405475ed610ee0067faa773211d598Janis Danisevskis};
4918f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
5018f27ade48405475ed610ee0067faa773211d598Janis Danisevskis}  // namespace keymaster
5118f27ade48405475ed610ee0067faa773211d598Janis Danisevskis}  // namespace security
52a447b3c9af62540abcc2d01a4d62124838ffe89dDmitry Dementyev}  // namespace android
5318f27ade48405475ed610ee0067faa773211d598Janis Danisevskis
5418f27ade48405475ed610ee0067faa773211d598Janis Danisevskis#endif  // KEYSTORE_INCLUDE_KEYSTORE_KEYATTESTATIONAPPLICATIONID_H_
55