Revision c130f64d

View differences:

src/info/guardianproject/checkey/MainActivity.java
178 178
    private void generatePin(AppEntry appEntry, Intent intent) {
179 179
        String packageName = appEntry.getPackageName();
180 180
        try {
181
            for (X509Certificate x509 : Utils.getX509Certificates(this, packageName)) {
182
                Properties prop = new Properties();
183
                prop.load(new StringBufferInputStream(x509.getSubjectDN().getName()
184
                        .replaceAll(",", "\n")));
185
                prop.list(System.out);
186
                String name;
187
                if (prop.containsKey("OU") && prop.containsKey("O"))
188
                    name = (String) prop.get("OU") + prop.get("O");
189
                else if (prop.containsKey("O"))
190
                    name = (String) prop.get("O");
191
                else if (prop.containsKey("OU"))
192
                    name = (String) prop.get("OU");
193
                else if (prop.containsKey("CN"))
194
                    name = (String) prop.get("CN");
195
                else
196
                    name = "Unknown";
197
                name = name.replaceAll("[^A-Za-z0-9]", "");
198
                String fileName = name + "Pin.java";
199

  
181
            X509Certificate[] certs = Utils.getX509Certificates(this, packageName);
182
            Properties prop = new Properties();
183
            prop.load(new StringBufferInputStream(certs[0].getSubjectDN().getName()
184
                    .replaceAll(",", "\n")));
185
            prop.list(System.out);
186
            String name;
187
            if (prop.containsKey("OU") && prop.containsKey("O"))
188
                name = (String) prop.get("OU") + prop.get("O");
189
            else if (prop.containsKey("O"))
190
                name = (String) prop.get("O");
191
            else if (prop.containsKey("OU"))
192
                name = (String) prop.get("OU");
193
            else if (prop.containsKey("CN"))
194
                name = (String) prop.get("CN");
195
            else
196
                name = "Unknown";
197
            name = name.replaceAll("[^A-Za-z0-9]", "");
198
            String fileName = name + "Pin.java";
199

  
200
            final FileOutputStream os = openFileOutput(fileName,
201
                    Context.MODE_WORLD_READABLE);
202
            os.write(("\npackage " + packageName + ";\n\n"
203
                    + "import info.guardianproject.trustedintents.ApkSignaturePin;\n\n"
204
                    + "public final class "
205
                    + name
206
                    + "Pin extends ApkSignaturePin {\n\n"
207
                    + "public " + name + "Pin() {\n"
208
                    + "\t\tcertificates = new byte[][] {\n").getBytes());
209
            for (X509Certificate x509 : certs) {
200 210
                Log.i("AppListFragment", "subjectdn: " + x509.getSubjectDN().getName());
201
                final FileOutputStream os = openFileOutput(fileName,
202
                        Context.MODE_WORLD_READABLE);
203
                os.write(("\n\n"
204
                        + "import info.guardianproject.secureintents.CertificatePin;\n\n"
205
                        + "public final class "
206
                        + name
207
                        + "Pin extends CertificatePin {\n\n"
208
                        + "\tprotected final static byte[] certificate = ").getBytes());
209 211
                os.write(Arrays.toString(x509.getEncoded())
210
                        .replaceAll("\\[", "{").replaceAll("\\]", "}")
212
                        .replaceFirst("\\[", "{").replaceFirst("\\]", "},")
211 213
                        .getBytes());
212
                os.write(";\n}\n".getBytes());
213
                os.close();
214
                Log.i("AppListFragment", "wrote " + fileName);
215

  
216
                String subject = packageName + " - " + x509.getIssuerDN().getName()
217
                        + " - " + x509.getNotAfter();
218
                Uri uri = Uri.fromFile(getFileStreamPath(fileName));
219
                Intent i = new Intent(Intent.ACTION_SEND);
220
                i.setType("text/x-java-source");
221
                i.putExtra(Intent.EXTRA_STREAM, uri);
222
                i.putExtra(Intent.EXTRA_TITLE, subject);
223
                i.putExtra(Intent.EXTRA_SUBJECT, subject);
224
                startActivity(Intent.createChooser(i, getString(R.string.save_cert_using)));
225 214
            }
215
            os.write("\t\t};\n\t}\n}\n".getBytes());
216
            os.close();
217
            Log.i("AppListFragment", "wrote " + fileName);
218

  
219
            String subject = packageName + " - " + certs[0].getIssuerDN().getName()
220
                    + " - " + certs[0].getNotAfter();
221
            Uri uri = Uri.fromFile(getFileStreamPath(fileName));
222
            Intent i = new Intent(Intent.ACTION_SEND);
223
            i.setType("text/x-java-source");
224
            i.putExtra(Intent.EXTRA_STREAM, uri);
225
            i.putExtra(Intent.EXTRA_TITLE, subject);
226
            i.putExtra(Intent.EXTRA_SUBJECT, subject);
227
            startActivity(Intent.createChooser(i, getString(R.string.save_cert_using)));
228

  
226 229
        } catch (CertificateException e) {
227 230
            e.printStackTrace();
228 231
        } catch (FileNotFoundException e) {

Also available in: Unified diff