17a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker/**
27a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * Copyright (c) 2015, The Android Open Source Project
37a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker *
47a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * Licensed under the Apache License, Version 2.0 (the "License");
57a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * you may not use this file except in compliance with the License.
67a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * You may obtain a copy of the License at
77a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker *
87a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker *     http://www.apache.org/licenses/LICENSE-2.0
97a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker *
107a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * Unless required by applicable law or agreed to in writing, software
117a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * distributed under the License is distributed on an "AS IS" BASIS,
127a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * See the License for the specific language governing permissions and
147a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * limitations under the License.
157a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker */
167a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
177a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubakerpackage android.security;
187a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
197a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubakerimport android.os.Parcel;
207a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubakerimport android.os.Parcelable;
217a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
227a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker/**
237a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * Class for handling the additional arguments to some keystore binder calls.
247a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * This must be kept in sync with the deserialization code in system/security/keystore.
257a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker * @hide
267a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker */
277a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubakerpublic class KeystoreArguments implements Parcelable {
287a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    public byte[][] args;
297a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
307a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    public static final Parcelable.Creator<KeystoreArguments> CREATOR = new
317a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker            Parcelable.Creator<KeystoreArguments>() {
327a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker                public KeystoreArguments createFromParcel(Parcel in) {
337a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker                    return new KeystoreArguments(in);
347a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker                }
357a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker                public KeystoreArguments[] newArray(int size) {
367a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker                    return new KeystoreArguments[size];
377a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker                }
387a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker            };
397a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
407a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    public KeystoreArguments() {
417a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        args = null;
427a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    }
437a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
447a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    public KeystoreArguments(byte[][] args) {
457a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        this.args = args;
467a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    }
477a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
487a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    private KeystoreArguments(Parcel in) {
497a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        readFromParcel(in);
507a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    }
517a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
527a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    @Override
537a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    public void writeToParcel(Parcel out, int flags) {
547a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        if (args == null) {
557a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker            out.writeInt(0);
567a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        } else {
577a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker            out.writeInt(args.length);
587a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker            for (byte[] arg : args) {
597a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker                out.writeByteArray(arg);
607a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker            }
617a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        }
627a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    }
637a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
647a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    private void readFromParcel(Parcel in) {
657a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        int length = in.readInt();
667a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        args = new byte[length][];
677a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        for (int i = 0; i < length; i++) {
687a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker            args[i] = in.createByteArray();
697a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        }
707a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    }
717a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker
727a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    @Override
737a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    public int describeContents() {
747a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker        return 0;
757a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker    }
767a2c973db7756a60f1cdd6cf67411115c1576081Chad Brubaker}
77