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