Revision 01534004

View differences:

src/info/guardianproject/trustedintents/ApkSignaturePin.java
6 6
import java.math.BigInteger;
7 7
import java.security.MessageDigest;
8 8
import java.security.NoSuchAlgorithmException;
9
import java.util.Arrays;
9 10

  
10 11
public abstract class ApkSignaturePin {
11 12

  
13
    protected String[] fingerprints; // hex-encoded SHA-256 hashes of the certs
12 14
    protected byte[][] certificates; // array of DER-encoded X.509 certificates
13 15
    private Signature[] signatures;
14 16

  
......
66 68
    public String getSHA256Fingerprint(byte[] input) {
67 69
        return getFingerprint("SHA-256");
68 70
    }
71

  
72
    /**
73
     * Compares the calculated SHA-256 cert fingerprint to the stored one.
74
     *
75
     * @return the result of the comparison
76
     */
77
    public boolean doFingerprintsMatchCertificates() {
78
        if (fingerprints == null || certificates == null)
79
            return false;
80
        String[] calcedFingerprints = new String[certificates.length];
81
        for (int i = 0; i < calcedFingerprints.length; i++)
82
            calcedFingerprints[i] = getSHA256Fingerprint(certificates[i]);
83
        if (fingerprints.length == 0 || calcedFingerprints.length == 0)
84
            return false;
85
        return Arrays.equals(fingerprints, calcedFingerprints);
86
    }
69 87
}
test/src/com/android/AndroidIncludedAppsPin.java
6 6
public final class AndroidIncludedAppsPin extends ApkSignaturePin {
7 7

  
8 8
    public AndroidIncludedAppsPin() {
9
        fingerprints = new String[] {
10
                "a40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc",
11
        };
9 12
        certificates = new byte[][] {
10 13
                {
11 14
                        48, -126, 4, -88, 48, -126, 3, -112, -96, 3, 2, 1, 2, 2, 9, 0, -109, 110,
......
77 80
                        -122, 8, 124, -13, 79, 45, -20, 33, -30, 69, -54, 108, 43, -80, 22, -26,
78 81
                        -125, 99, -128, 80, -46, -60, 48, -18, -89, -62, 106, 28, 73, -45, 118, 10,
79 82
                        88, -85, 127, 26, -126, -52, -109, -117, 72, 49, 56, 67, 36, -67, 4, 1, -6,
80
                       18, 22, 58, 80, 87, 14, 104, 77
83
                        18, 22, 58, 80, 87, 14, 104, 77
81 84
            },
82 85
        };
83 86
    }
test/src/com/android/AndroidSystemPin.java
6 6
public final class AndroidSystemPin extends ApkSignaturePin {
7 7

  
8 8
    public AndroidSystemPin() {
9
        fingerprints = new String[] {
10
                "c8a2e9bccf597c2fb6dc66bee293fc13f2fc47ec77bc6b2b0d52c11f51192ab8",
11
        };
9 12
        certificates = new byte[][] {
10 13
                {
11 14
                        48, -126, 4, -88, 48, -126, 3, -112, -96, 3, 2, 1, 2, 2, 9, 0, -77, -103,
......
79 82
                        -115, -43, -72, 57, -110, 3, -38, -82, 46, -44, 70, 35, 46, 79, -23, -67,
80 83
                        -106, 19, -108, -58, 48, 14, 81, 56, -29, -49, -46, -123, -26, -28, -28,
81 84
                        -125, 83, -116, -72, -79, -77, 87
82
            },
85
                },
83 86
        };
84 87
    }
85 88
}
test/src/info/guardianproject/trustedintents/test/ApkSignaturePinTests.java
17 17

  
18 18
    public void testFingerprints() {
19 19
        ApkSignaturePin android = new AndroidSystemPin();
20
        assertTrue(android.doFingerprintsMatchCertificates());
20 21
        Log.i(TAG, androidSystemFingerprint + " == " + android.getSHA1Fingerprint());
21 22
        assertEquals(androidSystemFingerprint, android.getSHA1Fingerprint());
23

  
22 24
        ApkSignaturePin comAndroid = new AndroidIncludedAppsPin();
25
        assertTrue(comAndroid.doFingerprintsMatchCertificates());
23 26
        Log.i(TAG, androidIncludedAppsFingerprint + " == " + comAndroid.getSHA1Fingerprint());
24 27
        assertEquals(androidIncludedAppsFingerprint, comAndroid.getSHA1Fingerprint());
25 28
    }

Also available in: Unified diff