Changeset be05757


Ignore:
Timestamp:
Mar 14, 2011 12:32:34 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:
5cf72cc
Parents:
7ad0076
Message:

Read from diretory in Credentials.

Location:
java
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • java/GraphTest.java

    rf6789db rbe05757  
    1010import net.deterlab.abac.Identity;
    1111
    12 import org.bouncycastle.openssl.PEMReader;
    13 import org.bouncycastle.jce.provider.X509CertificateObject;
    1412import java.security.KeyPair;
    15 import java.security.PublicKey;
    16 // import org.bouncycastle.util.io.pem.PemObject;
    1713
    1814
     
    2218 */
    2319public class GraphTest {
    24 
    25     /**
    26      * Import a credential from a der file and add it to the credential graph.
    27      */
    28     protected static void importCred(File f, CredentialGraph g)
    29         throws Exception {
    30         Credential c = new Credential(f);
    31         g.add_credential(c);
    32     }
    33 
    34 
    3520    /**
    3621     * Import a directory full of files, using the suffixes as determinants.
     
    3924     */
    4025    protected static void importDir(File d, CredentialGraph g) {
    41         Vector<File> ids = new Vector<File>();
    42         Vector<File> creds = new Vector<File>();
     26    }
    4327
    44         for (File f: d.listFiles()) {
    45             if (f.getPath().endsWith(".pem")) ids.add(f);
    46             else if (f.getPath().endsWith(".der") ) creds.add(f);
    47             else System.out.println(f + " of unknown type");
    48         }
    49         for (File f: ids ){
    50             try {
    51                 Identity id = new Identity(f);
    52 
    53                 Credential.addIdentity(id);
    54             }
    55             catch (Exception e) {
    56                 System.err.println("Cannot add " + f + ": " + e);
    57             }
    58         }
    59 
    60         for (File f: creds) {
    61             try {
    62                 importCred(f, g);
    63             }
    64             catch (Exception e) {
    65                 System.err.println("Cannot add " + f + ": " + e);
    66             }
    67         }
    68     }
    6928    public static void main(String[] args) throws IOException {
    7029        if (args.length < 3) {
     
    7534
    7635        CredentialGraph graph = new CredentialGraph();
    77         TreeMap<String, String> nicknames = new TreeMap<String, String>();
    78         TreeMap<String, String> keys = new TreeMap<String, String>();
     36        Vector<KeyPair> kp = new Vector<KeyPair>();
     37        Map<File, Exception> errs = new HashMap<File, Exception>();
    7938
    8039        for (int i= 0; i < args.length-2; i++) {
     
    8342            try {
    8443                if (f.isDirectory())
    85                     importDir(f, graph);
    86                 else if (f.getPath().endsWith(".pem")) {
    87                     Identity id = new Identity(f);
    88                     Credential.addIdentity(id);
    89                 }
     44                    for (Credential c :Credential.readDirectory(f, kp, errs))
     45                        graph.add_credential(c);
     46                else if (f.getPath().endsWith(".pem"))
     47                    Credential.addIdentity(new Identity(f));
    9048                else if (f.getPath().endsWith(".der"))
    91                     importCred(f, graph);
     49                    graph.add_credential(new Credential(f));
    9250                else
    9351                    System.out.println(f + " of unknown type");
     
    9755            }
    9856        }
     57
     58        for (KeyPair k: kp) System.err.println(k);
     59        for (File f: errs.keySet()) System.err.println(f + " " + errs.get(f));
    9960
    10061        //
  • java/net/deterlab/abac/Credential.java

    r281158a rbe05757  
    5353        m_ac = (X509V2AttributeCertificate)parser.engineRead();
    5454        m_id = null;
     55
     56        if ( m_ac == null ) throw new IOException("Invalid Credential Format");
    5557
    5658        for (Identity id: s_ids) {
     
    204206    public boolean hasCertificate() { return m_ac != null; }
    205207
    206     private Role m_head, m_tail;
    207 
    208     private X509V2AttributeCertificate m_ac;
    209     private Identity m_id;
     208    /**
     209     * Import a directory full of files.  First import all the identities
     210     * (pem), then the credentials (der) into the credential graph then any
     211     * alias files into the two maps.  If keys is not null, any key pairs in
     212     * PEM files are put in there.  If errors is not null, errors reading files
     213     * are added indexed by filename.
     214     */
     215    static public Collection<Credential> readDirectory(File d,
     216            Collection<KeyPair> keys, Map<File, Exception> errors) {
     217        Vector<Credential> creds = new Vector<Credential>();
     218        Vector<File> derFiles = new Vector<File>();
     219
     220        for (File f: d.listFiles() ) {
     221            Object o = null;
     222            try {
     223                o = new PEMReader(new FileReader(f)).readObject();
     224            }
     225            catch (IOException e) {
     226                // PEMReader couldn't deal, so we assume it's a DER
     227                derFiles.add(f);
     228                continue;
     229            }
     230            try {
     231                if ( o == null ) {
     232                    // This shouldn't be, but assume it's a DER
     233                    derFiles.add(f);
     234                }
     235                else if (o instanceof X509CertificateObject) {
     236                    Credential.addIdentity(
     237                            new Identity((X509CertificateObject)o));
     238                }
     239                else if (o instanceof KeyPair ) {
     240                    if ( keys != null ) keys.add((KeyPair) o);
     241                }
     242                else {
     243                    throw new IOException("Unexpected PEM object: " +
     244                            o.getClass().getName());
     245                }
     246            }
     247            catch (Exception e ) {
     248                if (errors != null ) errors.put(f, e);
     249            }
     250        }
     251
     252        for ( File f : derFiles ) {
     253            try {
     254                creds.add(new Credential(f));
     255            }
     256            catch (Exception e ) {
     257                if (errors != null ) errors.put(f, e);
     258            }
     259        }
     260        return creds;
     261    }
     262
     263    static public Collection<Credential> readDirectory(File d) {
     264        return readDirectory(d, null, null);
     265    }
     266    static public Collection<Credential> readDirectory(File d,
     267            Map<File, Exception> errors) {
     268        return readDirectory(d, null, errors);
     269    }
     270    static public Collection<Credential> readDirectory(File d,
     271            Collection<KeyPair> keys) {
     272        return readDirectory(d, keys, null);
     273    }
     274
     275private Role m_head, m_tail;
     276
     277private X509V2AttributeCertificate m_ac;
     278private Identity m_id;
    210279
    211280    public static void addIdentity(Identity id) {
Note: See TracChangeset for help on using the changeset viewer.