1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @author Boris Kuznetsov 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @version $Revision$ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.security.pkcs7; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.security.auth.x500.X500Principal; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Implicit; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Integer; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1OctetString; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Sequence; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1SetOf; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Type; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.asn1.BerInputStream; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.internal.nls.Messages; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.x501.AttributeTypeAndValue; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.x501.Name; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.x509.AlgorithmIdentifier; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * As defined in PKCS #7: Cryptographic Message Syntax Standard 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (http://www.ietf.org/rfc/rfc2315.txt) 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * SignerInfo ::= SEQUENCE { 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * version Version, 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * issuerAndSerialNumber IssuerAndSerialNumber, 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * digestAlgorithm DigestAlgorithmIdentifier, 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * authenticatedAttributes 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * [0] IMPLICIT Attributes OPTIONAL, 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * digestEncryptionAlgorithm 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * DigestEncryptionAlgorithmIdentifier, 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * encryptedDigest EncryptedDigest, 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * unauthenticatedAttributes 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * [1] IMPLICIT Attributes OPTIONAL 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * } 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class SignerInfo { 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private int version; 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private X500Principal issuer; 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private BigInteger serialNumber; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private AlgorithmIdentifier digestAlgorithm; 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private AuthenticatedAttributes authenticatedAttributes; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private AlgorithmIdentifier digestEncryptionAlgorithm; 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private byte[] encryptedDigest; 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private List unauthenticatedAttributes; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SignerInfo(int version, 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object[] issuerAndSerialNumber, 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmIdentifier digestAlgorithm, 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AuthenticatedAttributes authenticatedAttributes, 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmIdentifier digestEncryptionAlgorithm, 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encryptedDigest, 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List unauthenticatedAttributes 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.version = version; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.issuer = ((Name)issuerAndSerialNumber[0]).getX500Principal(); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-changed 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.serialNumber = ASN1Integer.toBigIntegerValue(issuerAndSerialNumber[1]); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-changed 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.digestAlgorithm = digestAlgorithm; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.authenticatedAttributes = authenticatedAttributes; 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.digestEncryptionAlgorithm = digestEncryptionAlgorithm; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.encryptedDigest = encryptedDigest; 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.unauthenticatedAttributes = unauthenticatedAttributes; 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public X500Principal getIssuer() { 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return issuer; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public BigInteger getSerialNumber() { 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return serialNumber; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getDigestAlgorithm() { 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return digestAlgorithm.getAlgorithm(); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getdigestAlgorithm() { 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return digestAlgorithm.getAlgorithm(); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getDigestEncryptionAlgorithm() { 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return digestEncryptionAlgorithm.getAlgorithm(); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public List getAuthenticatedAttributes() { 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (authenticatedAttributes == null) { 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return authenticatedAttributes.getAttributes(); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] getEncodedAuthenticatedAttributes() { 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (authenticatedAttributes == null) { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return authenticatedAttributes.getEncoded(); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] getEncryptedDigest() { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return encryptedDigest; 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer res = new StringBuffer(); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("-- SignerInfo:"); //$NON-NLS-1$ 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("\n version : "); //$NON-NLS-1$ 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(version); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("\nissuerAndSerialNumber: "); //$NON-NLS-1$ 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(issuer); 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(" "); //$NON-NLS-1$ 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(serialNumber); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("\ndigestAlgorithm: "); //$NON-NLS-1$ 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(digestAlgorithm.toString()); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("\nauthenticatedAttributes: "); //$NON-NLS-1$ 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (authenticatedAttributes != null) { 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(authenticatedAttributes.toString()); 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("\ndigestEncryptionAlgorithm: "); //$NON-NLS-1$ 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(digestEncryptionAlgorithm.toString()); 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("\nunauthenticatedAttributes: "); //$NON-NLS-1$ 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (unauthenticatedAttributes != null) { 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append(unauthenticatedAttributes.toString()); 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project res.append("\n-- SignerInfo End\n"); //$NON-NLS-1$ 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return res.toString(); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final ASN1Sequence ISSUER_AND_SERIAL_NUMBER = 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ASN1Sequence(new ASN1Type[] { 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Name.ASN1, // issuer 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ASN1Integer.getInstance(), // serialNumber 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // method to encode 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void getValues(Object object, Object[] values) { 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object [] issAndSerial = (Object[])object; 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[0] = issAndSerial[0]; 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[1] = issAndSerial[1]; 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final ASN1Sequence ASN1 = 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ASN1Sequence(new ASN1Type[] { 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ASN1Integer.getInstance(), //version 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ISSUER_AND_SERIAL_NUMBER, 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmIdentifier.ASN1, //digestAlgorithm 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ASN1Implicit(0, AuthenticatedAttributes.ASN1),//authenticatedAttributes 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmIdentifier.ASN1, //digestEncryptionAlgorithm 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ASN1OctetString.getInstance(), //encryptedDigest 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ASN1Implicit(1, new ASN1SetOf( 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AttributeTypeAndValue.ASN1)),//unauthenticatedAttributes 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) { 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setOptional(3); // authenticatedAttributes is optional 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setOptional(6); // unauthenticatedAttributes is optional 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void getValues(Object object, Object[] values) { 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SignerInfo si = (SignerInfo) object; 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[0] = new byte[] {(byte)si.version}; 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[1] = new Object[] { new Name(si.issuer.getName()), 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project si.serialNumber.toByteArray() }; 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // The exception is never thrown, because si.issuer 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // is created using Name.getX500Principal(). 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Throw a RuntimeException just to be safe. 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException( 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Msg: "Failed to encode issuer name 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Messages.getString("security.1A2"), e); 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[2] = si.digestAlgorithm; 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[3] = si.authenticatedAttributes; 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[4] = si.digestEncryptionAlgorithm; 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[5] = si.encryptedDigest; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project values[6] = si.unauthenticatedAttributes; 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected Object getDecodedObject(BerInputStream in) { 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object[] values = (Object[]) in.content; 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SignerInfo( 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ASN1Integer.toIntValue(values[0]), 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (Object[]) values[1], 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (AlgorithmIdentifier) values[2], 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (AuthenticatedAttributes) values[3], 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (AlgorithmIdentifier) values[4], 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte[]) values[5], 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (List) values[6] 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ); 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 223