/***** abac_attr.java To demonstrate how to use ABAC's api in java call: abac_attr IceCream_ID.pem IceCream_private.pem IceCream_attr.der Chocolate_ID.pem This program will generate 2 principal credentials, (IceCream, Chocolate) and an attribute rule, write it out to an external file and also load it into the context (prolog db) [keyid:IceCream].delicious <- [Keyid:Chocolate] Then, a query is made against the context to see if it is populated correctly. Note: Chocolate's principal is loaded without it private key. It does not need to because it is not being used to generate attribute credential ***/ import java.io.*; import java.util.*; import net.deterlab.abac.*; public class abac_attr { static { System.loadLibrary("jABAC"); } public static void main(String[] args) { Context ctxt=new Context(); ID iceID=new ID("IceCream",0); iceID.id_write_cert("IceCream_ID.pem"); iceID.id_write_privkey("IceCream_private.pem"); ID chocoID=new ID("Chocolate",0); chocoID.id_write_cert("Chocolate_ID.pem"); chocoID.id_write_privkey("Chocolate_private.pem"); ctxt.load_id(chocoID); ctxt.load_id_chunks(iceID.id_cert_chunk(), iceID.id_privkey_chunk()); /*or, ctxt.load_id(iceID); */ /* create an attribute cert iceCream.delicous <- chocolate */ Role head= new Role(iceID.id_keyid(),"delicious"); Role tail= new Role(chocoID.id_keyid()); Attribute attr = new Attribute(head, 1800); attr.attribute_add_tail(tail); attr.attribute_bake(); /* write it out */ attr.attribute_write_cert("IceCream_attr.der"); /* load attribute cert into the context */ ctxt.load_attribute_chunk(attr.cert_chunk()); /* or, ctxt.load_attribute(attr); */ /* what is in prolog db ctxt.dump_yap_db(); */ AttributeVector credentials = ctxt.query(head, tail); long sz=credentials.size(); if(sz > 0) System.out.println("prover success!!"); else System.out.println("prover failed!!"); for(int i=0; i