Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7310f4f3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Keystore: Fix KeyGenParameterSpec parceling"

parents f8d1840f 47670548
Loading
Loading
Loading
Loading
+25 −10
Original line number Original line Diff line number Diff line
@@ -81,12 +81,16 @@ public final class ParcelableKeyGenParameterSpec implements Parcelable {
        }
        }
        out.writeByteArray(mSpec.getCertificateSubject().getEncoded());
        out.writeByteArray(mSpec.getCertificateSubject().getEncoded());
        out.writeByteArray(mSpec.getCertificateSerialNumber().toByteArray());
        out.writeByteArray(mSpec.getCertificateSerialNumber().toByteArray());
        writeOptionalDate(out, mSpec.getCertificateNotBefore());
        out.writeLong(mSpec.getCertificateNotBefore().getTime());
        writeOptionalDate(out, mSpec.getCertificateNotAfter());
        out.writeLong(mSpec.getCertificateNotAfter().getTime());
        writeOptionalDate(out, mSpec.getKeyValidityStart());
        writeOptionalDate(out, mSpec.getKeyValidityStart());
        writeOptionalDate(out, mSpec.getKeyValidityForOriginationEnd());
        writeOptionalDate(out, mSpec.getKeyValidityForOriginationEnd());
        writeOptionalDate(out, mSpec.getKeyValidityForConsumptionEnd());
        writeOptionalDate(out, mSpec.getKeyValidityForConsumptionEnd());
        if (mSpec.isDigestsSpecified()) {
            out.writeStringArray(mSpec.getDigests());
            out.writeStringArray(mSpec.getDigests());
        } else {
            out.writeStringArray(null);
        }
        out.writeStringArray(mSpec.getEncryptionPaddings());
        out.writeStringArray(mSpec.getEncryptionPaddings());
        out.writeStringArray(mSpec.getSignaturePaddings());
        out.writeStringArray(mSpec.getSignaturePaddings());
        out.writeStringArray(mSpec.getBlockModes());
        out.writeStringArray(mSpec.getBlockModes());
@@ -111,9 +115,15 @@ public final class ParcelableKeyGenParameterSpec implements Parcelable {
    private ParcelableKeyGenParameterSpec(Parcel in) {
    private ParcelableKeyGenParameterSpec(Parcel in) {
        String keystoreAlias = in.readString();
        String keystoreAlias = in.readString();
        int purposes = in.readInt();
        int purposes = in.readInt();
        KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(keystoreAlias, purposes);
        KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(
                keystoreAlias, purposes);
        builder.setUid(in.readInt());
        builder.setUid(in.readInt());
        builder.setKeySize(in.readInt());
        // KeySize is -1 by default, if the KeyGenParameterSpec previously parcelled had the default
        // value, do not set it as this will cause setKeySize to throw.
        int keySize = in.readInt();
        if (keySize >= 0) {
            builder.setKeySize(keySize);
        }


        int keySpecType = in.readInt();
        int keySpecType = in.readInt();
        AlgorithmParameterSpec algorithmSpec = null;
        AlgorithmParameterSpec algorithmSpec = null;
@@ -128,17 +138,22 @@ public final class ParcelableKeyGenParameterSpec implements Parcelable {
            algorithmSpec = new ECGenParameterSpec(stdName);
            algorithmSpec = new ECGenParameterSpec(stdName);
        } else {
        } else {
            throw new IllegalArgumentException(
            throw new IllegalArgumentException(
                    String.format("Unknown algorithm parameter spec: %d", algorithmSpec));
                    String.format("Unknown algorithm parameter spec: %d", keySpecType));
        }
        }
        if (algorithmSpec != null) {
            builder.setAlgorithmParameterSpec(algorithmSpec);
            builder.setAlgorithmParameterSpec(algorithmSpec);
        }
        builder.setCertificateSubject(new X500Principal(in.createByteArray()));
        builder.setCertificateSubject(new X500Principal(in.createByteArray()));
        builder.setCertificateSerialNumber(new BigInteger(in.createByteArray()));
        builder.setCertificateSerialNumber(new BigInteger(in.createByteArray()));
        builder.setCertificateNotBefore(readDateOrNull(in));
        builder.setCertificateNotBefore(new Date(in.readLong()));
        builder.setCertificateNotAfter(readDateOrNull(in));
        builder.setCertificateNotAfter(new Date(in.readLong()));
        builder.setKeyValidityStart(readDateOrNull(in));
        builder.setKeyValidityStart(readDateOrNull(in));
        builder.setKeyValidityForOriginationEnd(readDateOrNull(in));
        builder.setKeyValidityForOriginationEnd(readDateOrNull(in));
        builder.setKeyValidityForConsumptionEnd(readDateOrNull(in));
        builder.setKeyValidityForConsumptionEnd(readDateOrNull(in));
        builder.setDigests(in.createStringArray());
        String[] digests = in.createStringArray();
        if (digests != null) {
            builder.setDigests(digests);
        }
        builder.setEncryptionPaddings(in.createStringArray());
        builder.setEncryptionPaddings(in.createStringArray());
        builder.setSignaturePaddings(in.createStringArray());
        builder.setSignaturePaddings(in.createStringArray());
        builder.setBlockModes(in.createStringArray());
        builder.setBlockModes(in.createStringArray());