1706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings/* 2706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * Copyright (C) 2012 The Android Open Source Project 3706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * 4706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * Licensed under the Apache License, Version 2.0 (the "License"); 5706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * you may not use this file except in compliance with the License. 6706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * You may obtain a copy of the License at 7706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * 8706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * http://www.apache.org/licenses/LICENSE-2.0 9706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * 10706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * Unless required by applicable law or agreed to in writing, software 11706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * distributed under the License is distributed on an "AS IS" BASIS, 12706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * See the License for the specific language governing permissions and 14706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * limitations under the License. 15706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings */ 16706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 17706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningspackage android.content.pm; 18706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 19706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningsimport android.content.pm.ManifestDigest; 20706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningsimport android.net.Uri; 21706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningsimport android.os.Parcel; 22706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningsimport android.os.Parcelable; 23706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 24706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings/** 25706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * Represents verification parameters used to verify packages to be installed. 26706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * 27706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * @hide 28706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings */ 29706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningspublic class VerificationParams implements Parcelable { 3037d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver /** A constant used to indicate that a uid value is not present. */ 3137d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver public static final int NO_UID = -1; 3237d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver 33706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings /** What we print out first when toString() is called. */ 34706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings private static final String TO_STRING_PREFIX = "VerificationParams{"; 35706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 36706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings /** The location of the supplementary verification file. */ 37706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings private final Uri mVerificationURI; 38706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 39706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings /** URI referencing where the package was downloaded from. */ 40706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings private final Uri mOriginatingURI; 41706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 42706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings /** HTTP referrer URI associated with the originatingURI. */ 43706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings private final Uri mReferrer; 44706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 4537d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver /** UID of the application that the install request originated from. */ 4637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver private final int mOriginatingUid; 4737d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver 4813d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings /** UID of application requesting the install */ 4913d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings private int mInstallerUid; 5013d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings 51706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings /** 52706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * An object that holds the digest of the package which can be used to 53706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * verify ownership. 54706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings */ 55706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings private final ManifestDigest mManifestDigest; 56706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 57706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings /** 58706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * Creates verification specifications for installing with application verification. 59706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * 60706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * @param verificationURI The location of the supplementary verification 61706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * file. This can be a 'file:' or a 'content:' URI. May be {@code null}. 62706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * @param originatingURI URI referencing where the package was downloaded 63706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * from. May be {@code null}. 64706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * @param referrer HTTP referrer URI associated with the originatingURI. 65706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * May be {@code null}. 6637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver * @param originatingUid UID of the application that the install request originated 6737d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver * from, or NO_UID if not present 68706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * @param manifestDigest an object that holds the digest of the package 69706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings * which can be used to verify ownership. May be {@code null}. 70706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings */ 71706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public VerificationParams(Uri verificationURI, Uri originatingURI, Uri referrer, 7237d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver int originatingUid, ManifestDigest manifestDigest) { 73706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mVerificationURI = verificationURI; 74706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mOriginatingURI = originatingURI; 75706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mReferrer = referrer; 7637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver mOriginatingUid = originatingUid; 77706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mManifestDigest = manifestDigest; 7837d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver mInstallerUid = NO_UID; 79706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 80706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 81706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public Uri getVerificationURI() { 82706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return mVerificationURI; 83706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 84706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 85706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public Uri getOriginatingURI() { 86706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return mOriginatingURI; 87706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 88706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 89706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public Uri getReferrer() { 90706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return mReferrer; 91706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 92706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 9337d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver /** return NO_UID if not available */ 9437d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver public int getOriginatingUid() { 9537d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver return mOriginatingUid; 9637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } 9737d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver 98706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public ManifestDigest getManifestDigest() { 99706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return mManifestDigest; 100706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 101706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 10237d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver /** @return NO_UID when not set */ 10313d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings public int getInstallerUid() { 10413d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings return mInstallerUid; 10513d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings } 10613d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings 10713d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings public void setInstallerUid(int uid) { 10813d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings mInstallerUid = uid; 10913d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings } 11013d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings 111706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings @Override 112706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public int describeContents() { 113706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return 0; 114706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 115706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 116706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings @Override 117706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public boolean equals(Object o) { 118706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings if (this == o) { 119706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return true; 120706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 121706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 122706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings if (!(o instanceof VerificationParams)) { 123706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return false; 124706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 125706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 126706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings final VerificationParams other = (VerificationParams) o; 127706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 12837d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (mVerificationURI == null) { 12937d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (other.mVerificationURI != null) { 13037d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver return false; 13137d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } 13237d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } else if (!mVerificationURI.equals(other.mVerificationURI)) { 133706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return false; 134706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 135706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 13637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (mOriginatingURI == null) { 13737d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (other.mOriginatingURI != null) { 13837d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver return false; 13937d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } 14037d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } else if (!mOriginatingURI.equals(other.mOriginatingURI)) { 141706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return false; 142706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 143706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 14437d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (mReferrer == null) { 14537d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (other.mReferrer != null) { 14637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver return false; 14737d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } 14837d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } else if (!mReferrer.equals(other.mReferrer)) { 149706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return false; 150706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 151706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 15237d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (mOriginatingUid != other.mOriginatingUid) { 153706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return false; 154706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 15537d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver 15637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (mManifestDigest == null) { 15737d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver if (other.mManifestDigest != null) { 15837d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver return false; 15937d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } 16037d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver } else if (!mManifestDigest.equals(other.mManifestDigest)) { 161706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return false; 162706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 163706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 16413d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings if (mInstallerUid != other.mInstallerUid) { 16513d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings return false; 16613d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings } 16713d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings 168706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return true; 169706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 170706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 171706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings @Override 172706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public int hashCode() { 173706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings int hash = 3; 174706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 17537d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver hash += 5 * (mVerificationURI == null ? 1 : mVerificationURI.hashCode()); 17637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver hash += 7 * (mOriginatingURI == null ? 1 : mOriginatingURI.hashCode()); 17737d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver hash += 11 * (mReferrer == null ? 1 : mReferrer.hashCode()); 17837d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver hash += 13 * mOriginatingUid; 17937d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver hash += 17 * (mManifestDigest == null ? 1 : mManifestDigest.hashCode()); 18037d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver hash += 19 * mInstallerUid; 181706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 182706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return hash; 183706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 184706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 185706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings @Override 186706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public String toString() { 187706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings final StringBuilder sb = new StringBuilder(TO_STRING_PREFIX); 188706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 189706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append("mVerificationURI="); 190706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append(mVerificationURI.toString()); 191706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append(",mOriginatingURI="); 192706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append(mOriginatingURI.toString()); 193706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append(",mReferrer="); 194706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append(mReferrer.toString()); 19537d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver sb.append(",mOriginatingUid="); 19637d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver sb.append(mOriginatingUid); 197706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append(",mManifestDigest="); 198706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append(mManifestDigest.toString()); 19913d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings sb.append(",mInstallerUid="); 20013d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings sb.append(mInstallerUid); 201706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings sb.append('}'); 202706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 203706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return sb.toString(); 204706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 205706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 206706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings @Override 207706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public void writeToParcel(Parcel dest, int flags) { 208706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings dest.writeParcelable(mVerificationURI, 0); 209706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings dest.writeParcelable(mOriginatingURI, 0); 210706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings dest.writeParcelable(mReferrer, 0); 21137d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver dest.writeInt(mOriginatingUid); 212706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings dest.writeParcelable(mManifestDigest, 0); 21313d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings dest.writeInt(mInstallerUid); 214706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 215706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 216706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 217706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings private VerificationParams(Parcel source) { 218706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mVerificationURI = source.readParcelable(Uri.class.getClassLoader()); 219706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mOriginatingURI = source.readParcelable(Uri.class.getClassLoader()); 220706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mReferrer = source.readParcelable(Uri.class.getClassLoader()); 22137d83a3caf138e35fa1a355787d20c351f6b37a6Ben Gruver mOriginatingUid = source.readInt(); 222706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings mManifestDigest = source.readParcelable(ManifestDigest.class.getClassLoader()); 22313d428e8306d1bb1a3017045bc5d2f76edec32dfrich cannings mInstallerUid = source.readInt(); 224706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 225706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 226706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public static final Parcelable.Creator<VerificationParams> CREATOR = 227706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings new Parcelable.Creator<VerificationParams>() { 228706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public VerificationParams createFromParcel(Parcel source) { 229706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return new VerificationParams(source); 230706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 231706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 232706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings public VerificationParams[] newArray(int size) { 233706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings return new VerificationParams[size]; 234706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 235706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings }; 236706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings} 237