Loading wifi/java/android/net/wifi/hotspot2/pps/Credential.java +12 −1 Original line number Diff line number Diff line Loading @@ -448,6 +448,16 @@ public final class Credential implements Parcelable { return new UserCredential[size]; } }; /** * Get a unique identifier for UserCredential. * * @hide * @return a Unique identifier for a UserCredential object */ public int getUniqueId() { return Objects.hash(mUsername); } } private UserCredential mUserCredential = null; /** Loading Loading @@ -1037,7 +1047,8 @@ public final class Credential implements Parcelable { * @return a Unique identifier for a Credential object */ public int getUniqueId() { return Objects.hash(mUserCredential, mCertCredential, mSimCredential, mRealm); return Objects.hash(mUserCredential != null ? mUserCredential.getUniqueId() : 0, mCertCredential, mSimCredential, mRealm); } @Override Loading wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java +1 −3 Original line number Diff line number Diff line Loading @@ -313,9 +313,7 @@ public final class HomeSp implements Parcelable { * @return a Unique identifier for a HomeSp object */ public int getUniqueId() { return Objects.hash(mFqdn, mFriendlyName, mHomeNetworkIds, Arrays.hashCode(mMatchAllOis), Arrays.hashCode(mMatchAnyOis), Arrays.hashCode(mOtherHomePartners), Arrays.hashCode(mRoamingConsortiumOis)); return Objects.hash(mFqdn); } Loading wifi/tests/src/android/net/wifi/FakeKeys.java +29 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,35 @@ public class FakeKeys { }; public static final PrivateKey RSA_KEY1 = loadPrivateRSAKey(FAKE_RSA_KEY_1); private static final String CLIENT_SUITE_B_RSA3072_CERT_STRING = "-----BEGIN CERTIFICATE-----\n" + "MIIERzCCAq8CFDopjyNgaj+c2TN2k06h7okEWpHJMA0GCSqGSIb3DQEBDAUAMF4x\n" + "CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEMMAoGA1UEBwwDTVRWMRAwDgYDVQQK\n" + "DAdBbmRyb2lkMQ4wDAYDVQQLDAVXaS1GaTESMBAGA1UEAwwJdW5pdGVzdENBMB4X\n" + "DTIwMDcyMTAyMjkxMVoXDTMwMDUzMDAyMjkxMVowYjELMAkGA1UEBhMCVVMxCzAJ\n" + "BgNVBAgMAkNBMQwwCgYDVQQHDANNVFYxEDAOBgNVBAoMB0FuZHJvaWQxDjAMBgNV\n" + "BAsMBVdpLUZpMRYwFAYDVQQDDA11bml0ZXN0Q2xpZW50MIIBojANBgkqhkiG9w0B\n" + "AQEFAAOCAY8AMIIBigKCAYEAwSK3C5K5udtCKTnE14e8z2cZvwmB4Xe+a8+7QLud\n" + "Hooc/lQzClgK4MbVUC0D3FE+U32C78SxKoTaRWtvPmNm+UaFT8KkwyUno/dv+2XD\n" + "pd/zARQ+3FwAfWopAhEyCVSxwsCa+slQ4juRIMIuUC1Mm0NaptZyM3Tj/ICQEfpk\n" + "o9qVIbiK6eoJMTkY8EWfAn7RTFdfR1OLuO0mVOjgLW9/+upYv6hZ19nAMAxw4QTJ\n" + "x7lLwALX7B+tDYNEZHDqYL2zyvQWAj2HClere8QYILxkvktgBg2crEJJe4XbDH7L\n" + "A3rrXmsiqf1ZbfFFEzK9NFqovL+qGh+zIP+588ShJFO9H/RDnDpiTnAFTWXQdTwg\n" + "szSS0Vw2PB+JqEABAa9DeMvXT1Oy+NY3ItPHyy63nQZVI2rXANw4NhwS0Z6DF+Qs\n" + "TNrj+GU7e4SG/EGR8SvldjYfQTWFLg1l/UT1hOOkQZwdsaW1zgKyeuiFB2KdMmbA\n" + "Sq+Ux1L1KICo0IglwWcB/8nnAgMBAAEwDQYJKoZIhvcNAQEMBQADggGBAMYwJkNw\n" + "BaCviKFmReDTMwWPRy4AMNViEeqAXgERwDEKwM7efjsaj5gctWfKsxX6UdLzkhgg\n" + "6S/T6PxVWKzJ6l7SoOuTa6tMQOZp+h3R1mdfEQbw8B5cXBxZ+batzAai6Fiy1FKS\n" + "/ka3INbcGfYuIYghfTrb4/NJKN06ZaQ1bpPwq0e4gN7800T2nbawvSf7r+8ZLcG3\n" + "6bGCjRMwDSIipNvOwoj3TG315XC7TccX5difQ4sKOY+d2MkVJ3RiO0Ciw2ZbEW8d\n" + "1FH5vUQJWnBUfSFznosGzLwH3iWfqlP+27jNE+qB2igEwCRFgVAouURx5ou43xuX\n" + "qf6JkdI3HTJGLIWxkp7gOeln4dEaYzKjYw+P0VqJvKVqQ0IXiLjHgE0J9p0vgyD6\n" + "HVVcP7U8RgqrbIjL1QgHU4KBhGi+WSUh/mRplUCNvHgcYdcHi/gHpj/j6ubwqIGV\n" + "z4iSolAHYTmBWcLyE0NgpzE6ntp+53r2KaUJA99l2iGVzbWTwqPSm0XAVw==\n" + "-----END CERTIFICATE-----\n"; public static final X509Certificate CLIENT_SUITE_B_RSA3072_CERT = loadCertificate(CLIENT_SUITE_B_RSA3072_CERT_STRING); private static X509Certificate loadCertificate(String blob) { try { final CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); Loading wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java +185 −7 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import android.net.wifi.EAPConstants; import android.net.wifi.FakeKeys; import android.net.wifi.hotspot2.pps.Credential; import android.net.wifi.hotspot2.pps.HomeSp; import android.os.Parcel; Loading @@ -32,6 +34,11 @@ import androidx.test.filters.SmallTest; import org.junit.Test; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; import java.util.Arrays; import java.util.HashMap; import java.util.Map; Loading Loading @@ -383,19 +390,39 @@ public class PasspointConfigurationTest { } /** * Verify that the unique identifier generated is different for two instances with different * HomeSp node * Verify that the unique identifier generated is the same for two instances with different * HomeSp node but same FQDN * * @throws Exception */ @Test public void validateUniqueIdDifferentHomeSp() throws Exception { public void validateUniqueIdDifferentHomeSpSameFqdn() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's RCOIs to a different set of values // Modify config2's RCOIs and friendly name to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); HomeSp homeSp = config2.getHomeSp(); homeSp.setRoamingConsortiumOis(new long[] {0xaa, 0xbb}); homeSp.setFriendlyName("Some other name"); config2.setHomeSp(homeSp); assertEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with the same * HomeSp node but different FQDN * * @throws Exception */ @Test public void validateUniqueIdSameHomeSpDifferentFqdn() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's FQDN to a different value PasspointConfiguration config2 = PasspointTestUtils.createConfig(); HomeSp homeSp = config2.getHomeSp(); homeSp.setFqdn("fqdn2.com"); config2.setHomeSp(homeSp); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); Loading @@ -403,15 +430,15 @@ public class PasspointConfigurationTest { /** * Verify that the unique identifier generated is different for two instances with different * Credential node * SIM Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentCredential() throws Exception { public void validateUniqueIdDifferentSimCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's RCOIs to a different set of values // Modify config2's realm and SIM credential to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); Credential credential = config2.getCredential(); credential.setRealm("realm2.example.com"); Loading @@ -421,6 +448,157 @@ public class PasspointConfigurationTest { assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with different * Realm in the Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentRealm() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's realm to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); Credential credential = config2.getCredential(); credential.setRealm("realm2.example.com"); config2.setCredential(credential); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is the same for two instances with different * password and same username in the User Credential node * * @throws Exception */ @Test public void validateUniqueIdSameUserInUserCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); Credential credential = createCredentialWithUserCredential("user", "passwd"); config1.setCredential(credential); // Modify config2's Passpowrd to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); credential = createCredentialWithUserCredential("user", "newpasswd"); config2.setCredential(credential); assertEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with different * username in the User Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentUserCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); Credential credential = createCredentialWithUserCredential("user", "passwd"); config1.setCredential(credential); // Modify config2's username to a different value PasspointConfiguration config2 = PasspointTestUtils.createConfig(); credential = createCredentialWithUserCredential("user2", "passwd"); config2.setCredential(credential); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with different * Cert Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentCertCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); Credential credential = createCredentialWithCertificateCredential(true, true); config1.setCredential(credential); // Modify config2's cert credential to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); credential = createCredentialWithCertificateCredential(false, false); config2.setCredential(credential); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Helper function for generating certificate credential for testing. * * @return {@link Credential} */ private static Credential createCredentialWithCertificateCredential(Boolean useCaCert0, Boolean useCert0) throws NoSuchAlgorithmException, CertificateEncodingException { Credential.CertificateCredential certCred = new Credential.CertificateCredential(); certCred.setCertType("x509v3"); if (useCert0) { certCred.setCertSha256Fingerprint( MessageDigest.getInstance("SHA-256").digest(FakeKeys.CLIENT_CERT.getEncoded())); } else { certCred.setCertSha256Fingerprint(MessageDigest.getInstance("SHA-256") .digest(FakeKeys.CLIENT_SUITE_B_RSA3072_CERT.getEncoded())); } return createCredential(null, certCred, null, new X509Certificate[] {FakeKeys.CLIENT_CERT}, FakeKeys.RSA_KEY1, useCaCert0 ? FakeKeys.CA_CERT0 : FakeKeys.CA_CERT1); } /** * Helper function for generating user credential for testing. * * @return {@link Credential} */ private static Credential createCredentialWithUserCredential(String username, String password) { Credential.UserCredential userCred = new Credential.UserCredential(); userCred.setUsername(username); userCred.setPassword(password); userCred.setMachineManaged(true); userCred.setAbleToShare(true); userCred.setSoftTokenApp("TestApp"); userCred.setEapType(EAPConstants.EAP_TTLS); userCred.setNonEapInnerMethod("MS-CHAP"); return createCredential(userCred, null, null, null, null, FakeKeys.CA_CERT0); } /** * Helper function for generating Credential for testing. * * @param userCred Instance of UserCredential * @param certCred Instance of CertificateCredential * @param simCred Instance of SimCredential * @param clientCertificateChain Chain of client certificates * @param clientPrivateKey Client private key * @param caCerts CA certificates * @return {@link Credential} */ private static Credential createCredential(Credential.UserCredential userCred, Credential.CertificateCredential certCred, Credential.SimCredential simCred, X509Certificate[] clientCertificateChain, PrivateKey clientPrivateKey, X509Certificate... caCerts) { Credential cred = new Credential(); cred.setCreationTimeInMillis(123455L); cred.setExpirationTimeInMillis(2310093L); cred.setRealm("realm"); cred.setCheckAaaServerCertStatus(true); cred.setUserCredential(userCred); cred.setCertCredential(certCred); cred.setSimCredential(simCred); if (caCerts != null && caCerts.length == 1) { cred.setCaCertificate(caCerts[0]); } else { cred.setCaCertificates(caCerts); } cred.setClientCertificateChain(clientCertificateChain); cred.setClientPrivateKey(clientPrivateKey); return cred; } /** * Verify that the unique identifier API generates an exception if HomeSP is not initialized. * Loading wifi/tests/src/android/net/wifi/hotspot2/pps/CredentialTest.java +20 −3 Original line number Diff line number Diff line Loading @@ -593,10 +593,10 @@ public class CredentialTest { } /** * Verify that unique identifiers are different for a credential with different values * Verify that unique identifiers are different for a credential with different username */ @Test public void testUniqueIdDifferentForUserCredentialsWithDifferentValues() throws Exception { public void testUniqueIdDifferentForUserCredentialsWithDifferentUsername() throws Exception { Credential userCred1 = createCredentialWithUserCredential(); Credential userCred2 = createCredentialWithUserCredential(); userCred2.getUserCredential().setUsername("anotheruser"); Loading @@ -605,7 +605,24 @@ public class CredentialTest { } /** * Verify that unique identifiers are different for a credential with different values * Verify that unique identifiers are different for a credential with different password and * other values other than username */ @Test public void testUniqueIdSameForUserCredentialsWithDifferentPassword() throws Exception { Credential userCred1 = createCredentialWithUserCredential(); Credential userCred2 = createCredentialWithUserCredential(); userCred2.getUserCredential().setPassword("someotherpassword!"); userCred2.getUserCredential().setMachineManaged(false); userCred2.getUserCredential().setAbleToShare(false); userCred2.getUserCredential().setSoftTokenApp("TestApp2"); userCred2.getUserCredential().setNonEapInnerMethod("PAP"); assertEquals(userCred1.getUniqueId(), userCred2.getUniqueId()); } /** * Verify that unique identifiers are different for a cert credential with different values */ @Test public void testUniqueIdDifferentForCertCredentialsWithDifferentValues() throws Exception { Loading Loading
wifi/java/android/net/wifi/hotspot2/pps/Credential.java +12 −1 Original line number Diff line number Diff line Loading @@ -448,6 +448,16 @@ public final class Credential implements Parcelable { return new UserCredential[size]; } }; /** * Get a unique identifier for UserCredential. * * @hide * @return a Unique identifier for a UserCredential object */ public int getUniqueId() { return Objects.hash(mUsername); } } private UserCredential mUserCredential = null; /** Loading Loading @@ -1037,7 +1047,8 @@ public final class Credential implements Parcelable { * @return a Unique identifier for a Credential object */ public int getUniqueId() { return Objects.hash(mUserCredential, mCertCredential, mSimCredential, mRealm); return Objects.hash(mUserCredential != null ? mUserCredential.getUniqueId() : 0, mCertCredential, mSimCredential, mRealm); } @Override Loading
wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java +1 −3 Original line number Diff line number Diff line Loading @@ -313,9 +313,7 @@ public final class HomeSp implements Parcelable { * @return a Unique identifier for a HomeSp object */ public int getUniqueId() { return Objects.hash(mFqdn, mFriendlyName, mHomeNetworkIds, Arrays.hashCode(mMatchAllOis), Arrays.hashCode(mMatchAnyOis), Arrays.hashCode(mOtherHomePartners), Arrays.hashCode(mRoamingConsortiumOis)); return Objects.hash(mFqdn); } Loading
wifi/tests/src/android/net/wifi/FakeKeys.java +29 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,35 @@ public class FakeKeys { }; public static final PrivateKey RSA_KEY1 = loadPrivateRSAKey(FAKE_RSA_KEY_1); private static final String CLIENT_SUITE_B_RSA3072_CERT_STRING = "-----BEGIN CERTIFICATE-----\n" + "MIIERzCCAq8CFDopjyNgaj+c2TN2k06h7okEWpHJMA0GCSqGSIb3DQEBDAUAMF4x\n" + "CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEMMAoGA1UEBwwDTVRWMRAwDgYDVQQK\n" + "DAdBbmRyb2lkMQ4wDAYDVQQLDAVXaS1GaTESMBAGA1UEAwwJdW5pdGVzdENBMB4X\n" + "DTIwMDcyMTAyMjkxMVoXDTMwMDUzMDAyMjkxMVowYjELMAkGA1UEBhMCVVMxCzAJ\n" + "BgNVBAgMAkNBMQwwCgYDVQQHDANNVFYxEDAOBgNVBAoMB0FuZHJvaWQxDjAMBgNV\n" + "BAsMBVdpLUZpMRYwFAYDVQQDDA11bml0ZXN0Q2xpZW50MIIBojANBgkqhkiG9w0B\n" + "AQEFAAOCAY8AMIIBigKCAYEAwSK3C5K5udtCKTnE14e8z2cZvwmB4Xe+a8+7QLud\n" + "Hooc/lQzClgK4MbVUC0D3FE+U32C78SxKoTaRWtvPmNm+UaFT8KkwyUno/dv+2XD\n" + "pd/zARQ+3FwAfWopAhEyCVSxwsCa+slQ4juRIMIuUC1Mm0NaptZyM3Tj/ICQEfpk\n" + "o9qVIbiK6eoJMTkY8EWfAn7RTFdfR1OLuO0mVOjgLW9/+upYv6hZ19nAMAxw4QTJ\n" + "x7lLwALX7B+tDYNEZHDqYL2zyvQWAj2HClere8QYILxkvktgBg2crEJJe4XbDH7L\n" + "A3rrXmsiqf1ZbfFFEzK9NFqovL+qGh+zIP+588ShJFO9H/RDnDpiTnAFTWXQdTwg\n" + "szSS0Vw2PB+JqEABAa9DeMvXT1Oy+NY3ItPHyy63nQZVI2rXANw4NhwS0Z6DF+Qs\n" + "TNrj+GU7e4SG/EGR8SvldjYfQTWFLg1l/UT1hOOkQZwdsaW1zgKyeuiFB2KdMmbA\n" + "Sq+Ux1L1KICo0IglwWcB/8nnAgMBAAEwDQYJKoZIhvcNAQEMBQADggGBAMYwJkNw\n" + "BaCviKFmReDTMwWPRy4AMNViEeqAXgERwDEKwM7efjsaj5gctWfKsxX6UdLzkhgg\n" + "6S/T6PxVWKzJ6l7SoOuTa6tMQOZp+h3R1mdfEQbw8B5cXBxZ+batzAai6Fiy1FKS\n" + "/ka3INbcGfYuIYghfTrb4/NJKN06ZaQ1bpPwq0e4gN7800T2nbawvSf7r+8ZLcG3\n" + "6bGCjRMwDSIipNvOwoj3TG315XC7TccX5difQ4sKOY+d2MkVJ3RiO0Ciw2ZbEW8d\n" + "1FH5vUQJWnBUfSFznosGzLwH3iWfqlP+27jNE+qB2igEwCRFgVAouURx5ou43xuX\n" + "qf6JkdI3HTJGLIWxkp7gOeln4dEaYzKjYw+P0VqJvKVqQ0IXiLjHgE0J9p0vgyD6\n" + "HVVcP7U8RgqrbIjL1QgHU4KBhGi+WSUh/mRplUCNvHgcYdcHi/gHpj/j6ubwqIGV\n" + "z4iSolAHYTmBWcLyE0NgpzE6ntp+53r2KaUJA99l2iGVzbWTwqPSm0XAVw==\n" + "-----END CERTIFICATE-----\n"; public static final X509Certificate CLIENT_SUITE_B_RSA3072_CERT = loadCertificate(CLIENT_SUITE_B_RSA3072_CERT_STRING); private static X509Certificate loadCertificate(String blob) { try { final CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); Loading
wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java +185 −7 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import android.net.wifi.EAPConstants; import android.net.wifi.FakeKeys; import android.net.wifi.hotspot2.pps.Credential; import android.net.wifi.hotspot2.pps.HomeSp; import android.os.Parcel; Loading @@ -32,6 +34,11 @@ import androidx.test.filters.SmallTest; import org.junit.Test; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; import java.util.Arrays; import java.util.HashMap; import java.util.Map; Loading Loading @@ -383,19 +390,39 @@ public class PasspointConfigurationTest { } /** * Verify that the unique identifier generated is different for two instances with different * HomeSp node * Verify that the unique identifier generated is the same for two instances with different * HomeSp node but same FQDN * * @throws Exception */ @Test public void validateUniqueIdDifferentHomeSp() throws Exception { public void validateUniqueIdDifferentHomeSpSameFqdn() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's RCOIs to a different set of values // Modify config2's RCOIs and friendly name to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); HomeSp homeSp = config2.getHomeSp(); homeSp.setRoamingConsortiumOis(new long[] {0xaa, 0xbb}); homeSp.setFriendlyName("Some other name"); config2.setHomeSp(homeSp); assertEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with the same * HomeSp node but different FQDN * * @throws Exception */ @Test public void validateUniqueIdSameHomeSpDifferentFqdn() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's FQDN to a different value PasspointConfiguration config2 = PasspointTestUtils.createConfig(); HomeSp homeSp = config2.getHomeSp(); homeSp.setFqdn("fqdn2.com"); config2.setHomeSp(homeSp); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); Loading @@ -403,15 +430,15 @@ public class PasspointConfigurationTest { /** * Verify that the unique identifier generated is different for two instances with different * Credential node * SIM Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentCredential() throws Exception { public void validateUniqueIdDifferentSimCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's RCOIs to a different set of values // Modify config2's realm and SIM credential to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); Credential credential = config2.getCredential(); credential.setRealm("realm2.example.com"); Loading @@ -421,6 +448,157 @@ public class PasspointConfigurationTest { assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with different * Realm in the Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentRealm() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); // Modify config2's realm to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); Credential credential = config2.getCredential(); credential.setRealm("realm2.example.com"); config2.setCredential(credential); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is the same for two instances with different * password and same username in the User Credential node * * @throws Exception */ @Test public void validateUniqueIdSameUserInUserCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); Credential credential = createCredentialWithUserCredential("user", "passwd"); config1.setCredential(credential); // Modify config2's Passpowrd to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); credential = createCredentialWithUserCredential("user", "newpasswd"); config2.setCredential(credential); assertEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with different * username in the User Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentUserCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); Credential credential = createCredentialWithUserCredential("user", "passwd"); config1.setCredential(credential); // Modify config2's username to a different value PasspointConfiguration config2 = PasspointTestUtils.createConfig(); credential = createCredentialWithUserCredential("user2", "passwd"); config2.setCredential(credential); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Verify that the unique identifier generated is different for two instances with different * Cert Credential node * * @throws Exception */ @Test public void validateUniqueIdDifferentCertCredential() throws Exception { PasspointConfiguration config1 = PasspointTestUtils.createConfig(); Credential credential = createCredentialWithCertificateCredential(true, true); config1.setCredential(credential); // Modify config2's cert credential to a different set of values PasspointConfiguration config2 = PasspointTestUtils.createConfig(); credential = createCredentialWithCertificateCredential(false, false); config2.setCredential(credential); assertNotEquals(config1.getUniqueId(), config2.getUniqueId()); } /** * Helper function for generating certificate credential for testing. * * @return {@link Credential} */ private static Credential createCredentialWithCertificateCredential(Boolean useCaCert0, Boolean useCert0) throws NoSuchAlgorithmException, CertificateEncodingException { Credential.CertificateCredential certCred = new Credential.CertificateCredential(); certCred.setCertType("x509v3"); if (useCert0) { certCred.setCertSha256Fingerprint( MessageDigest.getInstance("SHA-256").digest(FakeKeys.CLIENT_CERT.getEncoded())); } else { certCred.setCertSha256Fingerprint(MessageDigest.getInstance("SHA-256") .digest(FakeKeys.CLIENT_SUITE_B_RSA3072_CERT.getEncoded())); } return createCredential(null, certCred, null, new X509Certificate[] {FakeKeys.CLIENT_CERT}, FakeKeys.RSA_KEY1, useCaCert0 ? FakeKeys.CA_CERT0 : FakeKeys.CA_CERT1); } /** * Helper function for generating user credential for testing. * * @return {@link Credential} */ private static Credential createCredentialWithUserCredential(String username, String password) { Credential.UserCredential userCred = new Credential.UserCredential(); userCred.setUsername(username); userCred.setPassword(password); userCred.setMachineManaged(true); userCred.setAbleToShare(true); userCred.setSoftTokenApp("TestApp"); userCred.setEapType(EAPConstants.EAP_TTLS); userCred.setNonEapInnerMethod("MS-CHAP"); return createCredential(userCred, null, null, null, null, FakeKeys.CA_CERT0); } /** * Helper function for generating Credential for testing. * * @param userCred Instance of UserCredential * @param certCred Instance of CertificateCredential * @param simCred Instance of SimCredential * @param clientCertificateChain Chain of client certificates * @param clientPrivateKey Client private key * @param caCerts CA certificates * @return {@link Credential} */ private static Credential createCredential(Credential.UserCredential userCred, Credential.CertificateCredential certCred, Credential.SimCredential simCred, X509Certificate[] clientCertificateChain, PrivateKey clientPrivateKey, X509Certificate... caCerts) { Credential cred = new Credential(); cred.setCreationTimeInMillis(123455L); cred.setExpirationTimeInMillis(2310093L); cred.setRealm("realm"); cred.setCheckAaaServerCertStatus(true); cred.setUserCredential(userCred); cred.setCertCredential(certCred); cred.setSimCredential(simCred); if (caCerts != null && caCerts.length == 1) { cred.setCaCertificate(caCerts[0]); } else { cred.setCaCertificates(caCerts); } cred.setClientCertificateChain(clientCertificateChain); cred.setClientPrivateKey(clientPrivateKey); return cred; } /** * Verify that the unique identifier API generates an exception if HomeSP is not initialized. * Loading
wifi/tests/src/android/net/wifi/hotspot2/pps/CredentialTest.java +20 −3 Original line number Diff line number Diff line Loading @@ -593,10 +593,10 @@ public class CredentialTest { } /** * Verify that unique identifiers are different for a credential with different values * Verify that unique identifiers are different for a credential with different username */ @Test public void testUniqueIdDifferentForUserCredentialsWithDifferentValues() throws Exception { public void testUniqueIdDifferentForUserCredentialsWithDifferentUsername() throws Exception { Credential userCred1 = createCredentialWithUserCredential(); Credential userCred2 = createCredentialWithUserCredential(); userCred2.getUserCredential().setUsername("anotheruser"); Loading @@ -605,7 +605,24 @@ public class CredentialTest { } /** * Verify that unique identifiers are different for a credential with different values * Verify that unique identifiers are different for a credential with different password and * other values other than username */ @Test public void testUniqueIdSameForUserCredentialsWithDifferentPassword() throws Exception { Credential userCred1 = createCredentialWithUserCredential(); Credential userCred2 = createCredentialWithUserCredential(); userCred2.getUserCredential().setPassword("someotherpassword!"); userCred2.getUserCredential().setMachineManaged(false); userCred2.getUserCredential().setAbleToShare(false); userCred2.getUserCredential().setSoftTokenApp("TestApp2"); userCred2.getUserCredential().setNonEapInnerMethod("PAP"); assertEquals(userCred1.getUniqueId(), userCred2.getUniqueId()); } /** * Verify that unique identifiers are different for a cert credential with different values */ @Test public void testUniqueIdDifferentForCertCredentialsWithDifferentValues() throws Exception { Loading