/** ctxt_prover.c gcc -g -o ctxt_prover ctxt_prover.c -L/usr/local/lib -L/usr/local/lib/ipsec -labac -lYap -lreadline -lm -lstrongswan -lpthread -Wl,-rpath -Wl,/usr/local/lib/ipsec ./ctxt_prover env ABAC_CN=1 ./ctxt_prover **/ #include #include #include #include #include #include "abac_external.h" extern void abac_print_cred_info(abac_credential_t*, FILE*); extern void abac_print_prin_info(abac_id_credential_t*, FILE*); /* dump credentials from context */ void print_attrs(abac_context_t *ctxt, char *stub) { int i; abac_credential_t *cred=NULL; abac_credential_t **credentials=NULL; printf("\n\n"); puts("%s attrs :", stub); credentials = abac_context_credentials(ctxt); if (credentials != NULL) { for (i = 0; credentials[i] != NULL; ++i) { cred = credentials[i]; abac_print_typed_cred_info(cred,NULL); } } if(credentials) abac_free_credentials(credentials); } void print_ids(abac_context_t *ctxt, char *stub) { int i; abac_id_credential_t *id_cred=NULL; abac_id_credential_t **id_credentials=NULL; printf("\n\n"); puts("%s principals :", stub); id_credentials = abac_context_principals(ctxt); if (id_credentials != NULL) { for (i = 0; id_credentials[i] != NULL; ++i) { id_cred = id_credentials[i]; abac_print_prin_info(id_cred,NULL); } } if(id_credentials) abac_free_principals(id_credentials); } void query(abac_context_t *ctxt, char* who, char *what) { abac_credential_t *cred=NULL; abac_credential_t **credentials=NULL; int i, success=0; abac_aspect_t *query=abac_role_create(who,"foundingAlumni"); abac_aspect_t *with=abac_role_principal_create(what); credentials = abac_context_query_with_structure(ctxt, query, with, &success); if (success) puts("prover success!!"); else puts("prover failed!!"); if (credentials != NULL && success) { puts("credentials needed :"); for (i = 0; credentials[i] != NULL; ++i) { cred = credentials[i]; abac_print_cred_info(cred,NULL); } } if(credentials) abac_free_credentials(credentials); } int main(int argc, char **argv) { abac_context_t *ctxtA = abac_context_new(); /* abac_context_load_id_files(ctxtA,"StateU_ID.pem","StateU_private.pem"); */ abac_id_t *id; abac_id_t *stateid=abac_id_from_file("StateU_ID.pem"); abac_id_load_privkey_file(stateid,"StateU_private.pem"); char* stateU=abac_id_keyid(stateid); abac_context_load_id(ctxtA, stateid); /* abac_context_load_id_file(ctxtA,"Bob_ID.pem"); */ abac_id_t *bobid=abac_id_from_file("Bob_ID.pem"); char* bob=abac_id_keyid(bobid); abac_context_load_id(ctxtA, bobid); /* abac_context_load_id_file(ctxtA,"Mark_ID.pem"); */ abac_id_t *markid=abac_id_from_file("Mark_ID.pem"); char* mark=abac_id_keyid(markid); abac_context_load_id(ctxtA, markid); abac_context_load_attribute_file(ctxtA,"StateU_foundingAlumni__stateU_diploma_q_qY_attr.der"); abac_context_t *ctxtB = abac_context_dup(ctxtA); /* abac_context_load_id_file(ctxtB,"Joe_ID.pem"); */ abac_id_t *joeid=abac_id_from_file("Joe_ID.pem"); abac_context_load_id(ctxtA, joeid); /* abac_context_load_id_file(ctxtB,"Maryann_ID.pem"); */ abac_id_t *maryannid=abac_id_from_file("Maryann_ID.pem"); abac_context_load_id(ctxtA, maryannid); /* abac_context_load_id_file(ctxtB,"Jan_ID.pem"); */ abac_id_t *janid=abac_id_from_file("Jan_ID.pem"); abac_context_load_id(ctxtA, janid); abac_verifier_session_dump(); query(ctxtA, stateU, bob); query(ctxtB, stateU, bob); return 0; }