18effa36ca6440604cf10bbc34fba2b60ff304f54Alex Klyubin/* 28effa36ca6440604cf10bbc34fba2b60ff304f54Alex Klyubin * Copyright (C) 2015 The Android Open Source Project 345ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * 445ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * Licensed under the Apache License, Version 2.0 (the "License"); 545ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * you may not use this file except in compliance with the License. 645ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * You may obtain a copy of the License at 745ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * 88effa36ca6440604cf10bbc34fba2b60ff304f54Alex Klyubin * http://www.apache.org/licenses/LICENSE-2.0 945ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * 1045ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * Unless required by applicable law or agreed to in writing, software 1145ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * distributed under the License is distributed on an "AS IS" BASIS, 1245ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1345ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * See the License for the specific language governing permissions and 1445ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * limitations under the License. 1545ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker */ 1645ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 1745ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubakerpackage android.security.keymaster; 1845ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 1945ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubakerimport android.os.IBinder; 2045ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubakerimport android.os.Parcel; 2145ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubakerimport android.os.Parcelable; 2245ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 2345ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker/** 2445ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * Class for handling the parceling of return values from keymaster crypto operations 2545ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * (begin/update/finish). 2645ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker * @hide 2745ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker */ 2845ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubakerpublic class OperationResult implements Parcelable { 2945ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public final int resultCode; 3045ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public final IBinder token; 314cd8e50690aebcb65472c549ef97044303f383e7Chad Brubaker public final long operationHandle; 3245ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public final int inputConsumed; 3345ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public final byte[] output; 34966486e134c901ea61195b352fdd81476b3639b4Chad Brubaker public final KeymasterArguments outParams; 3545ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 3645ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public static final Parcelable.Creator<OperationResult> CREATOR = new 3745ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker Parcelable.Creator<OperationResult>() { 3800af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin @Override 3945ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public OperationResult createFromParcel(Parcel in) { 4045ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker return new OperationResult(in); 4145ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker } 4245ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 4300af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin @Override 4445ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public OperationResult[] newArray(int length) { 4545ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker return new OperationResult[length]; 4645ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker } 4745ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker }; 4845ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 4900af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin public OperationResult( 5000af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin int resultCode, IBinder token, long operationHandle, int inputConsumed, byte[] output, 5100af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin KeymasterArguments outParams) { 5200af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin this.resultCode = resultCode; 5300af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin this.token = token; 5400af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin this.operationHandle = operationHandle; 5500af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin this.inputConsumed = inputConsumed; 5600af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin this.output = output; 5700af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin this.outParams = outParams; 5800af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin } 5900af27b7d9010eb41e45959dab7c4ff6de119897Alex Klyubin 6045ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker protected OperationResult(Parcel in) { 6145ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker resultCode = in.readInt(); 6245ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker token = in.readStrongBinder(); 634cd8e50690aebcb65472c549ef97044303f383e7Chad Brubaker operationHandle = in.readLong(); 6445ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker inputConsumed = in.readInt(); 6545ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker output = in.createByteArray(); 66966486e134c901ea61195b352fdd81476b3639b4Chad Brubaker outParams = KeymasterArguments.CREATOR.createFromParcel(in); 6745ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker } 6845ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 6945ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker @Override 7045ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public int describeContents() { 7145ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker return 0; 7245ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker } 7345ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker 7445ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker @Override 7545ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker public void writeToParcel(Parcel out, int flags) { 7645ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker out.writeInt(resultCode); 7745ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker out.writeStrongBinder(token); 784cd8e50690aebcb65472c549ef97044303f383e7Chad Brubaker out.writeLong(operationHandle); 7945ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker out.writeInt(inputConsumed); 8045ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker out.writeByteArray(output); 81966486e134c901ea61195b352fdd81476b3639b4Chad Brubaker outParams.writeToParcel(out, flags); 8245ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker } 8345ff13ea28005b5af0caa80dbdeb09d49bd73fafChad Brubaker} 84