Changeset 5cf72cc


Ignore:
Timestamp:
Mar 14, 2011 1:45:42 PM (8 years ago)
Author:
Ted Faber <faber@…>
Branches:
abac0-leak, abac0-mei, compt_changes, gec13, master, mei-id, mei-rt0-n, mei_rt0, mei_rt2, mei_rt2_fix_1, meiyap-rt1, meiyap1, rt2, tvf-new-xml
Children:
e1c49ce
Parents:
be05757
Message:

Zipfile support

Location:
java
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • java/GraphTest.java

    rbe05757 r5cf72cc  
    11import java.io.*;
    22import java.util.*;
     3import java.util.zip.*;
    34
    45import edu.uci.ics.jung.graph.*;
     
    3536        CredentialGraph graph = new CredentialGraph();
    3637        Vector<KeyPair> kp = new Vector<KeyPair>();
    37         Map<File, Exception> errs = new HashMap<File, Exception>();
     38        Map<String, Exception> errs = new HashMap<String, Exception>();
    3839
    3940        for (int i= 0; i < args.length-2; i++) {
     
    4849                else if (f.getPath().endsWith(".der"))
    4950                    graph.add_credential(new Credential(f));
     51                else if (f.getPath().endsWith(".zip"))
     52                    for (Credential c :Credential.readZipFile(new ZipFile(f), kp, errs))
     53                        graph.add_credential(c);
    5054                else
    5155                    System.out.println(f + " of unknown type");
     
    5761
    5862        for (KeyPair k: kp) System.err.println(k);
    59         for (File f: errs.keySet()) System.err.println(f + " " + errs.get(f));
     63        for (String f: errs.keySet()) System.err.println(f + " " + errs.get(f));
    6064
    6165        //
     
    8286            i.write(fn + n++ + suf);
    8387        }
     88        Credential.writeZipFile(graph.credentials(),
     89                new File("./testout.zip"), true);
    8490    }
    8591}
  • java/net/deterlab/abac/Credential.java

    rbe05757 r5cf72cc  
    55
    66import java.util.*;
     7import java.util.zip.*;
    78import java.security.*;
    89import java.security.cert.*;
     
    206207    public boolean hasCertificate() { return m_ac != null; }
    207208
     209    public Identity getID() { return m_id; }
     210
     211    /**
     212     * Import a zip file.  First import all the identities
     213     * (pem), then the credentials (der) into the credential graph then any
     214     * alias files into the two maps.  If keys is not null, any key pairs in
     215     * PEM files are put in there.  If errors is not null, errors reading files
     216     * are added indexed by filename.
     217     */
     218    static public Collection<Credential> readZipFile(ZipFile z,
     219            Collection<KeyPair> keys, Map<String, Exception> errors) {
     220        Vector<Credential> creds = new Vector<Credential>();
     221        Vector<ZipEntry> derFiles = new Vector<ZipEntry>();
     222
     223        for (Enumeration<? extends ZipEntry> ze = z.entries();
     224                ze.hasMoreElements();) {
     225            ZipEntry  f = ze.nextElement();
     226            Object o = null;
     227            try {
     228                o = new PEMReader(new InputStreamReader(
     229                            z.getInputStream(f))).readObject();
     230            }
     231            catch (IOException e) {
     232                // PEMReader couldn't deal, so we assume it's a DER
     233                derFiles.add(f);
     234                continue;
     235            }
     236            try {
     237                if ( o == null ) {
     238                    // This shouldn't be, but assume it's a DER
     239                    derFiles.add(f);
     240                }
     241                else if (o instanceof X509CertificateObject) {
     242                    Credential.addIdentity(
     243                            new Identity((X509CertificateObject)o));
     244                }
     245                else if (o instanceof KeyPair ) {
     246                    if ( keys != null ) keys.add((KeyPair) o);
     247                }
     248                else {
     249                    throw new IOException("Unexpected PEM object: " +
     250                            o.getClass().getName());
     251                }
     252            }
     253            catch (Exception e ) {
     254                if (errors != null ) errors.put(f.getName(), e);
     255            }
     256        }
     257
     258        for ( ZipEntry f : derFiles ) {
     259            try {
     260                creds.add(new Credential(z.getInputStream(f)));
     261            }
     262            catch (Exception e ) {
     263                if (errors != null ) errors.put(f.getName(), e);
     264            }
     265        }
     266        return creds;
     267    }
     268
     269    static public Collection<Credential> readZipFile(ZipFile d) {
     270        return readZipFile(d, null, null);
     271    }
     272    static public Collection<Credential> readZipFile(ZipFile d,
     273            Map<String, Exception> errors) {
     274        return readZipFile(d, null, errors);
     275    }
     276    static public Collection<Credential> readZipFile(ZipFile d,
     277            Collection<KeyPair> keys) {
     278        return readZipFile(d, keys, null);
     279    }
     280
     281
    208282    /**
    209283     * Import a directory full of files.  First import all the identities
     
    214288     */
    215289    static public Collection<Credential> readDirectory(File d,
    216             Collection<KeyPair> keys, Map<File, Exception> errors) {
     290            Collection<KeyPair> keys, Map<String, Exception> errors) {
    217291        Vector<Credential> creds = new Vector<Credential>();
    218292        Vector<File> derFiles = new Vector<File>();
     
    246320            }
    247321            catch (Exception e ) {
    248                 if (errors != null ) errors.put(f, e);
     322                if (errors != null ) errors.put(f.getName(), e);
    249323            }
    250324        }
     
    255329            }
    256330            catch (Exception e ) {
    257                 if (errors != null ) errors.put(f, e);
     331                if (errors != null ) errors.put(f.getName(), e);
    258332            }
    259333        }
     
    265339    }
    266340    static public Collection<Credential> readDirectory(File d,
    267             Map<File, Exception> errors) {
     341            Map<String, Exception> errors) {
    268342        return readDirectory(d, null, errors);
    269343    }
     
    272346        return readDirectory(d, keys, null);
    273347    }
     348
     349    static public void writeZipFile(Collection<Credential> creds, File f,
     350            boolean allIDs)
     351            throws IOException {
     352        ZipOutputStream z = new ZipOutputStream(new FileOutputStream(f));
     353        Set<Identity> ids = allIDs ?
     354            new TreeSet(s_ids) : new TreeSet<Identity>();
     355
     356        int n = 0;
     357        for (Credential c: creds) {
     358            z.putNextEntry(new ZipEntry("attr" + n++  + ".der"));
     359            c.write(z);
     360            z.closeEntry();
     361            if ( c.getID() != null && !allIDs) ids.add(c.getID());
     362        }
     363        for (Identity i: ids) {
     364            z.putNextEntry(new ZipEntry(i.getName() + ".pem"));
     365            i.write(z);
     366            z.closeEntry();
     367        }
     368        z.close();
     369    }
     370
    274371
    275372private Role m_head, m_tail;
  • java/net/deterlab/abac/Identity.java

    r8a14e37 r5cf72cc  
    1717import org.bouncycastle.openssl.PEMWriter;
    1818
    19 public class Identity {
     19public class Identity implements Comparable {
    2020    private X509CertificateObject m_cert;
    2121    private String m_keyid;
     
    107107
    108108        pw.writeObject(m_cert);
    109         pw.close();
     109        pw.flush();
    110110    }
    111111
     
    160160    public String getName() { return m_cn; }
    161161    public String toString() { return m_keyid + " (" + m_cn + ")"; }
     162    public boolean equals(Object o) {
     163        if ( o == null ) return false;
     164        else if ( ! (o instanceof Identity) ) return false;
     165        else return getKeyID().equals(((Identity)o).getKeyID());
     166    }
     167    public int compareTo(Object o) {
     168        if ( ! (o instanceof Identity) ) return 1;
     169        else return getKeyID().compareTo(((Identity)o).getKeyID());
     170    }
    162171    public X509CertificateObject getCertificate() { return m_cert; }
    163172
Note: See TracChangeset for help on using the changeset viewer.