18ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis/*
28ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * Copyright (C) 2016 The Android Open Source Project
38ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis *
48ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * Licensed under the Apache License, Version 2.0 (the "License");
58ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * you may not use this file except in compliance with the License.
68ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * You may obtain a copy of the License at
78ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis *
88ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis *      http://www.apache.org/licenses/LICENSE-2.0
98ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis *
108ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * Unless required by applicable law or agreed to in writing, software
118ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * distributed under the License is distributed on an "AS IS" BASIS,
128ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * See the License for the specific language governing permissions and
148ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * limitations under the License.
158ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis */
168ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
178ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskispackage android.security.keymaster;
188ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
198ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskisimport android.content.pm.Signature;
208ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskisimport android.os.Parcel;
218ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskisimport android.os.Parcelable;
228ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
238ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis/**
248ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * @hide
258ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * This class constitutes and excerpt from the PackageManager's PackageInfo for the purpose of
268ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * key attestation. It is part of the KeyAttestationApplicationId, which is used by
278ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis * keystore to identify the caller of the keystore API towards a remote party.
288ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis */
298ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskispublic class KeyAttestationPackageInfo implements Parcelable {
308ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    private final String mPackageName;
318ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    private final int mPackageVersionCode;
328ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    private final Signature[] mPackageSignatures;
338ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
348ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    /**
358ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     * @param mPackageName
368ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     * @param mPackageVersionCode
378ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     * @param mPackageSignatures
388ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     */
398ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    public KeyAttestationPackageInfo(
408ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis            String mPackageName, int mPackageVersionCode, Signature[] mPackageSignatures) {
418ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        super();
428ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        this.mPackageName = mPackageName;
438ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        this.mPackageVersionCode = mPackageVersionCode;
448ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        this.mPackageSignatures = mPackageSignatures;
458ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    }
468ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    /**
478ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     * @return the mPackageName
488ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     */
498ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    public String getPackageName() {
508ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        return mPackageName;
518ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    }
528ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    /**
538ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     * @return the mPackageVersionCode
548ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     */
558ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    public int getPackageVersionCode() {
568ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        return mPackageVersionCode;
578ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    }
588ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    /**
598ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     * @return the mPackageSignatures
608ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis     */
618ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    public Signature[] getPackageSignatures() {
628ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        return mPackageSignatures;
638ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    }
648ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
658ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    @Override
668ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    public int describeContents() {
678ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        return 0;
688ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    }
698ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
708ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    @Override
718ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    public void writeToParcel(Parcel dest, int flags) {
728ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        dest.writeString(mPackageName);
738ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        dest.writeInt(mPackageVersionCode);
748ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        dest.writeTypedArray(mPackageSignatures, flags);
758ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    }
768ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
778ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    public static final Parcelable.Creator<KeyAttestationPackageInfo> CREATOR
788ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis            = new Parcelable.Creator<KeyAttestationPackageInfo>() {
798ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        @Override
808ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        public KeyAttestationPackageInfo createFromParcel(Parcel source) {
818ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis            return new KeyAttestationPackageInfo(source);
828ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        }
838ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
848ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        @Override
858ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        public KeyAttestationPackageInfo[] newArray(int size) {
868ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis            return new KeyAttestationPackageInfo[size];
878ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        }
888ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    };
898ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis
908ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    private KeyAttestationPackageInfo(Parcel source) {
918ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        mPackageName = source.readString();
928ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        mPackageVersionCode = source.readInt();
938ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis        mPackageSignatures = source.createTypedArray(Signature.CREATOR);
948ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis    }
958ff1e193acc1d9946f877332547c7706cfcf12f4Janis Danisevskis}
96