Added class to store trusted certificate entries for lists
authorTobias Brunner <tobias@strongswan.org>
Mon, 13 Aug 2012 16:41:34 +0000 (18:41 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 14 Aug 2012 10:01:40 +0000 (12:01 +0200)
src/frontends/android/src/org/strongswan/android/data/TrustedCertificateEntry.java [new file with mode: 0644]

diff --git a/src/frontends/android/src/org/strongswan/android/data/TrustedCertificateEntry.java b/src/frontends/android/src/org/strongswan/android/data/TrustedCertificateEntry.java
new file mode 100644 (file)
index 0000000..bedf06f
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2012 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+package org.strongswan.android.data;
+
+import java.security.cert.X509Certificate;
+
+import android.net.http.SslCertificate;
+
+public class TrustedCertificateEntry implements Comparable<TrustedCertificateEntry>
+{
+       private final X509Certificate mCert;
+       private final String mAlias;
+       private String mSubjectPrimary;
+       private String mSubjectSecondary = "";
+       private String mString;
+
+       /**
+        * Create an entry for certificate lists.
+        *
+        * @param alias alias of the certificate (as used in the KeyStore)
+        * @param cert certificate associated with that alias
+        */
+       public TrustedCertificateEntry(String alias, X509Certificate cert)
+       {
+               mCert = cert;
+               mAlias = alias;
+
+               SslCertificate ssl = new SslCertificate(mCert);
+               String o = ssl.getIssuedTo().getOName();
+               String ou = ssl.getIssuedTo().getUName();
+               String cn = ssl.getIssuedTo().getCName();
+               if (!o.isEmpty())
+               {
+                       mSubjectPrimary = o;
+                       if (!cn.isEmpty())
+                       {
+                               mSubjectSecondary = cn;
+                       }
+                       else if (!ou.isEmpty())
+                       {
+                               mSubjectSecondary = ou;
+                       }
+               }
+               else if (!cn.isEmpty())
+               {
+                       mSubjectPrimary = cn;
+               }
+               else
+               {
+                       mSubjectPrimary = ssl.getIssuedTo().getDName();
+               }
+       }
+
+       /**
+        * The main subject of this certificate (O, CN or the complete DN, whatever
+        * is found first).
+        *
+        * @return the main subject
+        */
+       public String getSubjectPrimary()
+       {
+               return mSubjectPrimary;
+       }
+
+       /**
+        * Get the secondary subject of this certificate (either CN or OU if primary
+        * subject is O, empty otherwise)
+        *
+        * @return the secondary subject
+        */
+       public String getSubjectSecondary()
+       {
+               return mSubjectSecondary;
+       }
+
+       /**
+        * The alias associated with this certificate.
+        *
+        * @return KeyStore alias of this certificate
+        */
+       public String getAlias()
+       {
+               return mAlias;
+       }
+
+       /**
+        * The certificate.
+        *
+        * @return certificate
+        */
+       public X509Certificate getCertificate()
+       {
+               return mCert;
+       }
+
+       @Override
+       public int compareTo(TrustedCertificateEntry another)
+       {
+               int diff = mSubjectPrimary.compareToIgnoreCase(another.mSubjectPrimary);
+               if (diff == 0)
+               {
+                       diff = mSubjectSecondary.compareToIgnoreCase(another.mSubjectSecondary);
+               }
+               return diff;
+       }
+}