- Reindented everything, so the layout is up to date again.
This commit is contained in:
parent
4d1362cb1b
commit
71c658051e
@ -14,7 +14,8 @@ int cTod = 0;
|
||||
*@param tb The attack buffer.
|
||||
*@param ev The reference event index.
|
||||
*/
|
||||
void markback(const System sys, struct tracebuf *tb, int ev)
|
||||
void
|
||||
markback (const System sys, struct tracebuf *tb, int ev)
|
||||
{
|
||||
int run = tb->run[ev];
|
||||
|
||||
@ -53,7 +54,8 @@ void markback(const System sys, struct tracebuf *tb, int ev)
|
||||
}
|
||||
|
||||
//! Minimize the attack.
|
||||
void attackMinimize(const System sys, struct tracebuf *tb)
|
||||
void
|
||||
attackMinimize (const System sys, struct tracebuf *tb)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
@ -61,7 +63,7 @@ void attackMinimize(const System sys, struct tracebuf *tb)
|
||||
cUnk = 0;
|
||||
cTod = 0;
|
||||
|
||||
for (i=0; i < tb->length; i++)
|
||||
for (i = 0; i < tb->length; i++)
|
||||
{
|
||||
switch (tb->status[i])
|
||||
{
|
||||
@ -76,7 +78,7 @@ void attackMinimize(const System sys, struct tracebuf *tb)
|
||||
}
|
||||
}
|
||||
|
||||
markback(sys, tb, tb->violatedclaim);
|
||||
markback (sys, tb, tb->violatedclaim);
|
||||
|
||||
while (cUnk + cTod > 0)
|
||||
{
|
||||
@ -90,26 +92,26 @@ void attackMinimize(const System sys, struct tracebuf *tb)
|
||||
}
|
||||
if (i == tb->length)
|
||||
{
|
||||
printf("Some step error.\n");
|
||||
exit(1);
|
||||
printf ("Some step error.\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
j = i;
|
||||
while (j >= 0 && inKnowledge(tb->know[j], tb->event[i]->message))
|
||||
while (j >= 0 && inKnowledge (tb->know[j], tb->event[i]->message))
|
||||
{
|
||||
// zoek waar m in de kennis komt
|
||||
j--;
|
||||
}
|
||||
tb->status[i] = S_OKE;
|
||||
cTod--;
|
||||
if (j>=0)
|
||||
if (j >= 0)
|
||||
{
|
||||
markback(sys,tb,j);
|
||||
markback (sys, tb, j);
|
||||
}
|
||||
}
|
||||
while (cTod == 0 && cUnk > 0)
|
||||
{
|
||||
for (i = tb->length-1; i>=0; i--)
|
||||
for (i = tb->length - 1; i >= 0; i--)
|
||||
// pak laatste i
|
||||
{
|
||||
if (tb->status[i] == S_UNK)
|
||||
@ -117,19 +119,19 @@ void attackMinimize(const System sys, struct tracebuf *tb)
|
||||
}
|
||||
if (i < 0)
|
||||
{
|
||||
printf("Some i<0 error.\n");
|
||||
exit(1);
|
||||
printf ("Some i<0 error.\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
tb->status[i] = S_RED;
|
||||
cUnk--;
|
||||
tb->reallength--;
|
||||
|
||||
j = tracebufRebuildKnow(tb);
|
||||
if (j>-1)
|
||||
j = tracebufRebuildKnow (tb);
|
||||
if (j > -1)
|
||||
{
|
||||
tb->reallength++;
|
||||
markback(sys,tb,i);
|
||||
markback (sys, tb, i);
|
||||
if (j < tb->length)
|
||||
{
|
||||
tb->link[j] = (tb->link[j] > i ? tb->link[j] : i);
|
||||
|
@ -1 +1 @@
|
||||
void attackMinimize(const System sys, struct tracebuf *tb);
|
||||
void attackMinimize (const System sys, struct tracebuf *tb);
|
||||
|
61
src/claim.c
61
src/claim.c
@ -20,7 +20,8 @@
|
||||
#ifdef OKIDEBUG
|
||||
int indac = 0;
|
||||
|
||||
void indact ()
|
||||
void
|
||||
indact ()
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -48,19 +49,18 @@ events_match (const System sys, const int i, const int j)
|
||||
isTermEqual (rdi->from, rdj->from) &&
|
||||
isTermEqual (rdi->to, rdj->to) &&
|
||||
isTermEqual (rdi->label, rdj->label) &&
|
||||
!(rdi->internal || rdj->internal)
|
||||
)
|
||||
!(rdi->internal || rdj->internal))
|
||||
{
|
||||
if (rdi->type == SEND && rdj->type == READ)
|
||||
{
|
||||
if (i<j)
|
||||
if (i < j)
|
||||
return MATCH_ORDER;
|
||||
else
|
||||
return MATCH_REVERSE;
|
||||
}
|
||||
if (rdi->type == READ && rdj->type == SEND)
|
||||
{
|
||||
if (i>j)
|
||||
if (i > j)
|
||||
return MATCH_ORDER;
|
||||
else
|
||||
return MATCH_REVERSE;
|
||||
@ -99,7 +99,8 @@ oki_nisynch_full (const System sys, const Termmap label_to_index)
|
||||
|
||||
//! Evaluate claims or internal reads (chooses)
|
||||
__inline__ int
|
||||
oki_nisynch_other (const System sys, const int trace_index, const Termmap role_to_run, const Termmap label_to_index)
|
||||
oki_nisynch_other (const System sys, const int trace_index,
|
||||
const Termmap role_to_run, const Termmap label_to_index)
|
||||
{
|
||||
int result;
|
||||
|
||||
@ -108,7 +109,7 @@ oki_nisynch_other (const System sys, const int trace_index, const Termmap role_t
|
||||
printf ("Exploring further assuming this (claim) run is not involved.\n");
|
||||
indac++;
|
||||
#endif
|
||||
result = oki_nisynch (sys, trace_index-1, role_to_run, label_to_index);
|
||||
result = oki_nisynch (sys, trace_index - 1, role_to_run, label_to_index);
|
||||
#ifdef OKIDEBUG
|
||||
indact ();
|
||||
printf (">%i<\n", result);
|
||||
@ -119,7 +120,8 @@ oki_nisynch_other (const System sys, const int trace_index, const Termmap role_t
|
||||
|
||||
//! Evaluate reads
|
||||
__inline__ int
|
||||
oki_nisynch_read (const System sys, const int trace_index, const Termmap role_to_run, const Termmap label_to_index)
|
||||
oki_nisynch_read (const System sys, const int trace_index,
|
||||
const Termmap role_to_run, const Termmap label_to_index)
|
||||
{
|
||||
/*
|
||||
* Read is only relevant for already involved runs, and labels in prec
|
||||
@ -144,13 +146,16 @@ oki_nisynch_read (const System sys, const int trace_index, const Termmap role_to
|
||||
int result;
|
||||
|
||||
label_to_index_buf = termmapDuplicate (label_to_index);
|
||||
label_to_index_buf = termmapSet (label_to_index_buf, rd->label, trace_index);
|
||||
label_to_index_buf =
|
||||
termmapSet (label_to_index_buf, rd->label, trace_index);
|
||||
#ifdef OKIDEBUG
|
||||
indact ();
|
||||
printf ("Exploring because this (read) run is involved.\n");
|
||||
indac++;
|
||||
#endif
|
||||
result = oki_nisynch (sys, trace_index-1, role_to_run, label_to_index_buf);
|
||||
result =
|
||||
oki_nisynch (sys, trace_index - 1, role_to_run,
|
||||
label_to_index_buf);
|
||||
#ifdef OKIDEBUG
|
||||
indact ();
|
||||
printf (">%i<\n", result);
|
||||
@ -168,7 +173,7 @@ oki_nisynch_read (const System sys, const int trace_index, const Termmap role_to
|
||||
printf ("Exploring further assuming this (read) run is not involved.\n");
|
||||
indac++;
|
||||
#endif
|
||||
result = oki_nisynch (sys, trace_index-1, role_to_run, label_to_index);
|
||||
result = oki_nisynch (sys, trace_index - 1, role_to_run, label_to_index);
|
||||
#ifdef OKIDEBUG
|
||||
indac--;
|
||||
#endif
|
||||
@ -178,7 +183,8 @@ oki_nisynch_read (const System sys, const int trace_index, const Termmap role_to
|
||||
|
||||
//! Evaluate sends
|
||||
__inline__ int
|
||||
oki_nisynch_send (const System sys, const int trace_index, const Termmap role_to_run, const Termmap label_to_index)
|
||||
oki_nisynch_send (const System sys, const int trace_index,
|
||||
const Termmap role_to_run, const Termmap label_to_index)
|
||||
{
|
||||
Roledef rd;
|
||||
int rid;
|
||||
@ -197,7 +203,7 @@ oki_nisynch_send (const System sys, const int trace_index, const Termmap role_to
|
||||
printf ("Exploring further assuming (send) run %i is not involved.\n", rid);
|
||||
indac++;
|
||||
#endif
|
||||
result = oki_nisynch (sys, trace_index-1, role_to_run, label_to_index);
|
||||
result = oki_nisynch (sys, trace_index - 1, role_to_run, label_to_index);
|
||||
#ifdef OKIDEBUG
|
||||
indact ();
|
||||
printf (">%i<\n", result);
|
||||
@ -241,15 +247,20 @@ oki_nisynch_send (const System sys, const int trace_index, const Termmap role_to
|
||||
role_to_run_buf = termmapDuplicate (role_to_run);
|
||||
role_to_run_buf = termmapSet (role_to_run_buf, rolename, rid);
|
||||
label_to_index_buf = termmapDuplicate (label_to_index);
|
||||
label_to_index_buf = termmapSet (label_to_index_buf, rd->label, LABEL_GOOD);
|
||||
label_to_index_buf =
|
||||
termmapSet (label_to_index_buf, rd->label, LABEL_GOOD);
|
||||
#ifdef OKIDEBUG
|
||||
indact ();
|
||||
printf ("In NI-Synch scan, assuming %i run is involved.\n", rid);
|
||||
printf ("In NI-Synch scan, assuming %i run is involved.\n",
|
||||
rid);
|
||||
indact ();
|
||||
printf ("Exploring further assuming this matching, which worked.\n");
|
||||
printf
|
||||
("Exploring further assuming this matching, which worked.\n");
|
||||
indac++;
|
||||
#endif
|
||||
result = oki_nisynch (sys, trace_index-1, role_to_run_buf, label_to_index_buf);
|
||||
result =
|
||||
oki_nisynch (sys, trace_index - 1, role_to_run_buf,
|
||||
label_to_index_buf);
|
||||
#ifdef OKIDEBUG
|
||||
indact ();
|
||||
printf (">%i<\n", result);
|
||||
@ -274,7 +285,8 @@ oki_nisynch_send (const System sys, const int trace_index, const Termmap role_to
|
||||
*@returns 1 iff the claim is allright, 0 iff it is violated.
|
||||
*/
|
||||
int
|
||||
oki_nisynch (const System sys, const int trace_index, const Termmap role_to_run, const Termmap label_to_index)
|
||||
oki_nisynch (const System sys, const int trace_index,
|
||||
const Termmap role_to_run, const Termmap label_to_index)
|
||||
{
|
||||
int type;
|
||||
|
||||
@ -318,7 +330,7 @@ check_claim_nisynch (const System sys, const int i)
|
||||
Roledef rd;
|
||||
int result;
|
||||
int rid;
|
||||
Termmap f,g;
|
||||
Termmap f, g;
|
||||
Term label;
|
||||
Claimlist cl;
|
||||
Termlist tl;
|
||||
@ -342,7 +354,7 @@ check_claim_nisynch (const System sys, const int i)
|
||||
/*
|
||||
* Check claim
|
||||
*/
|
||||
result = oki_nisynch(sys, i, f, g);
|
||||
result = oki_nisynch (sys, i, f, g);
|
||||
if (!result)
|
||||
{
|
||||
cl->failed = statesIncrease (cl->failed);
|
||||
@ -355,7 +367,7 @@ check_claim_nisynch (const System sys, const int i)
|
||||
eprintf (" with prec set ");
|
||||
termlistPrint (cl->prec);
|
||||
eprintf ("\n");
|
||||
eprintf ("i: %i\nf: ",i);
|
||||
eprintf ("i: %i\nf: ", i);
|
||||
termmapPrint (f);
|
||||
eprintf ("\ng: ");
|
||||
termmapPrint (g);
|
||||
@ -380,7 +392,7 @@ check_claim_niagree (const System sys, const int i)
|
||||
Roledef rd;
|
||||
int result;
|
||||
int rid;
|
||||
Termmap f,g;
|
||||
Termmap f, g;
|
||||
Term label;
|
||||
Claimlist cl;
|
||||
Termlist tl;
|
||||
@ -404,7 +416,7 @@ check_claim_niagree (const System sys, const int i)
|
||||
/*
|
||||
* Check claim
|
||||
*/
|
||||
result = oki_nisynch(sys, i, f, g);
|
||||
result = oki_nisynch (sys, i, f, g);
|
||||
if (!result)
|
||||
{
|
||||
cl->failed = statesIncrease (cl->failed);
|
||||
@ -416,7 +428,7 @@ check_claim_niagree (const System sys, const int i)
|
||||
printf (" with prec set ");
|
||||
termlistPrint (cl->prec);
|
||||
printf ("\n");
|
||||
printf ("i: %i\nf: ",i);
|
||||
printf ("i: %i\nf: ", i);
|
||||
termmapPrint (f);
|
||||
printf ("\ng: ");
|
||||
termmapPrint (g);
|
||||
@ -428,4 +440,3 @@ check_claim_niagree (const System sys, const int i)
|
||||
termmapDelete (g);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
131
src/compiler.c
131
src/compiler.c
@ -243,7 +243,8 @@ symbolFind (Symbol s)
|
||||
}
|
||||
|
||||
//! Yield a basic global constant term (we suppose it exists) or NULL, given a string
|
||||
Term findGlobalConstant (const char *s)
|
||||
Term
|
||||
findGlobalConstant (const char *s)
|
||||
{
|
||||
return levelFind (lookup (s), 0);
|
||||
}
|
||||
@ -286,7 +287,9 @@ defineUsertype (Tac tcdu)
|
||||
else
|
||||
{
|
||||
/* that's not right! */
|
||||
error ("Conflicting definitions in usertype definition on line %i.", tc->lineno);
|
||||
error
|
||||
("Conflicting definitions in usertype definition on line %i.",
|
||||
tc->lineno);
|
||||
}
|
||||
}
|
||||
tc = tc->next;
|
||||
@ -303,7 +306,8 @@ levelTacDeclaration (Tac tc, int isVar)
|
||||
tscan = tc->t2.tac;
|
||||
if (!isVar && tscan->next != NULL)
|
||||
{
|
||||
error ("Multiple type definition for constant on line %i.", tscan->lineno);
|
||||
error ("Multiple type definition for constant on line %i.",
|
||||
tscan->lineno);
|
||||
}
|
||||
while (tscan != NULL && tscan->op == TAC_STRING)
|
||||
{
|
||||
@ -319,7 +323,8 @@ levelTacDeclaration (Tac tc, int isVar)
|
||||
{
|
||||
if (!inTermlist (t->stype, TERM_Type))
|
||||
{
|
||||
error ("Non-type constant in type declaration on line %i.", tscan->lineno);
|
||||
error ("Non-type constant in type declaration on line %i.",
|
||||
tscan->lineno);
|
||||
}
|
||||
}
|
||||
typetl = termlistAdd (typetl, t);
|
||||
@ -385,7 +390,8 @@ commEvent (int event, Tac tc)
|
||||
/* now parse tuple info */
|
||||
if (trip == NULL || trip->next == NULL)
|
||||
{
|
||||
error ("Problem with claim %i event on line %i.", event, tc->lineno);
|
||||
error ("Problem with claim %i event on line %i.", event,
|
||||
tc->lineno);
|
||||
}
|
||||
fromrole = tacTerm (trip);
|
||||
claimbig = tacTerm (tacTuple ((trip->next)));
|
||||
@ -394,8 +400,7 @@ commEvent (int event, Tac tc)
|
||||
torole = claim;
|
||||
|
||||
/* check for ignored claim types */
|
||||
if (sys->switchClaimToCheck != NULL &&
|
||||
sys->switchClaimToCheck != claim)
|
||||
if (sys->switchClaimToCheck != NULL && sys->switchClaimToCheck != claim)
|
||||
{
|
||||
/* abort the construction of the node */
|
||||
return;
|
||||
@ -426,7 +431,8 @@ commEvent (int event, Tac tc)
|
||||
msg = deVar (claimbig)->right.op2;
|
||||
if (tupleCount (msg) != n)
|
||||
{
|
||||
error ("Problem with claim tuple unfolding at line %i.", trip->next->lineno);
|
||||
error ("Problem with claim tuple unfolding at line %i.",
|
||||
trip->next->lineno);
|
||||
}
|
||||
}
|
||||
|
||||
@ -441,7 +447,7 @@ commEvent (int event, Tac tc)
|
||||
/**
|
||||
*@todo This should not error exit, but automatically generate a fresh claim label.
|
||||
*/
|
||||
error ("Claim label is not unique at line %i.",tc->lineno);
|
||||
error ("Claim label is not unique at line %i.", tc->lineno);
|
||||
}
|
||||
cl = cl->next;
|
||||
}
|
||||
@ -462,7 +468,9 @@ commEvent (int event, Tac tc)
|
||||
{
|
||||
if (n == 0)
|
||||
{
|
||||
error ("Secrecy claim requires a list of terms to be secret on line %i.",trip->next->lineno);
|
||||
error
|
||||
("Secrecy claim requires a list of terms to be secret on line %i.",
|
||||
trip->next->lineno);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -470,7 +478,8 @@ commEvent (int event, Tac tc)
|
||||
{
|
||||
if (n != 0)
|
||||
{
|
||||
error ("NISYNCH claim requires no parameters at line %i.", trip->next->lineno);
|
||||
error ("NISYNCH claim requires no parameters at line %i.",
|
||||
trip->next->lineno);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -478,7 +487,8 @@ commEvent (int event, Tac tc)
|
||||
{
|
||||
if (n != 0)
|
||||
{
|
||||
error ("NIAGREE claim requires no parameters at line %i.", trip->next->lineno);
|
||||
error ("NIAGREE claim requires no parameters at line %i.",
|
||||
trip->next->lineno);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -518,7 +528,8 @@ normalDeclaration (Tac tc)
|
||||
knowledgeAddTermlist (sys->know, tacTermlist (tc->t1.tac));
|
||||
break;
|
||||
case TAC_INVERSEKEYS:
|
||||
knowledgeAddInverse (sys->know, tacTerm (tc->t1.tac), tacTerm (tc->t2.tac));
|
||||
knowledgeAddInverse (sys->know, tacTerm (tc->t1.tac),
|
||||
tacTerm (tc->t2.tac));
|
||||
break;
|
||||
default:
|
||||
/* abort with false */
|
||||
@ -802,26 +813,23 @@ compute_prec_sets (const System sys)
|
||||
Term *eventlabels; // array: maps events to labels
|
||||
int *prec; // array: maps event*event to precedence
|
||||
int size; // temp constant: rolecount * roleeventmax
|
||||
int r1,r2,ev1,ev2; // some counters
|
||||
int i,j;
|
||||
int r1, r2, ev1, ev2; // some counters
|
||||
int i, j;
|
||||
Claimlist cl;
|
||||
|
||||
// Assist: compute index from role, lev
|
||||
int
|
||||
index (int r, int lev)
|
||||
int index (int r, int lev)
|
||||
{
|
||||
return r * sys->roleeventmax + lev;
|
||||
}
|
||||
|
||||
// Assist: compute matrix index from i*i
|
||||
int
|
||||
index2 (int i1, int i2)
|
||||
int index2 (int i1, int i2)
|
||||
{
|
||||
return i1 * size + i2;
|
||||
}
|
||||
// Assist: yield roledef from r, lev
|
||||
Roledef
|
||||
roledef_re (int r, int lev)
|
||||
Roledef roledef_re (int r, int lev)
|
||||
{
|
||||
Protocol pr;
|
||||
Role ro;
|
||||
@ -863,8 +871,7 @@ compute_prec_sets (const System sys)
|
||||
}
|
||||
|
||||
// Assist: print matrix
|
||||
void
|
||||
show_matrix (void)
|
||||
void show_matrix (void)
|
||||
{
|
||||
int r1, r2, ev1, ev2;
|
||||
|
||||
@ -874,14 +881,15 @@ compute_prec_sets (const System sys)
|
||||
ev1 = 0;
|
||||
while (ev1 < sys->roleeventmax)
|
||||
{
|
||||
printf ("prec %i,%i: ", r1,ev1);
|
||||
printf ("prec %i,%i: ", r1, ev1);
|
||||
r2 = 0;
|
||||
while (r2 < sys->rolecount)
|
||||
{
|
||||
ev2 = 0;
|
||||
while (ev2 < sys->roleeventmax)
|
||||
{
|
||||
printf ("%i ", prec[index2 (index (r2,ev2), index (r1, ev1))]);
|
||||
printf ("%i ",
|
||||
prec[index2 (index (r2, ev2), index (r1, ev1))]);
|
||||
ev2++;
|
||||
}
|
||||
printf (" ");
|
||||
@ -902,8 +910,8 @@ compute_prec_sets (const System sys)
|
||||
//printf ("Rolecount: %i\n", sys->rolecount);
|
||||
//printf ("Maxevent : %i\n", sys->roleeventmax);
|
||||
size = sys->rolecount * sys->roleeventmax;
|
||||
eventlabels = memAlloc (size * sizeof(Term));
|
||||
prec = memAlloc (size * size * sizeof(int));
|
||||
eventlabels = memAlloc (size * sizeof (Term));
|
||||
prec = memAlloc (size * size * sizeof (int));
|
||||
// Clear tables
|
||||
i = 0;
|
||||
while (i < size)
|
||||
@ -912,7 +920,7 @@ compute_prec_sets (const System sys)
|
||||
j = 0;
|
||||
while (j < size)
|
||||
{
|
||||
prec[index2(i,j)] = 0;
|
||||
prec[index2 (i, j)] = 0;
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
@ -927,7 +935,7 @@ compute_prec_sets (const System sys)
|
||||
rd = roledef_re (r1, ev1);
|
||||
while (rd != NULL)
|
||||
{
|
||||
eventlabels[index(r1,ev1)] = rd->label;
|
||||
eventlabels[index (r1, ev1)] = rd->label;
|
||||
//termPrint (rd->label);
|
||||
//printf ("\t");
|
||||
ev1++;
|
||||
@ -943,7 +951,7 @@ compute_prec_sets (const System sys)
|
||||
ev1 = 0;
|
||||
while (ev1 < (sys->roleeventmax - 1))
|
||||
{
|
||||
prec[index2 (index (r1,ev1),index (r1,ev1+1))] = 1;
|
||||
prec[index2 (index (r1, ev1), index (r1, ev1 + 1))] = 1;
|
||||
ev1++;
|
||||
}
|
||||
r1++;
|
||||
@ -957,7 +965,7 @@ compute_prec_sets (const System sys)
|
||||
{
|
||||
Roledef rd1;
|
||||
|
||||
rd1 = roledef_re(r1,ev1);
|
||||
rd1 = roledef_re (r1, ev1);
|
||||
if (rd1 != NULL && rd1->type == SEND)
|
||||
{
|
||||
r2 = 0;
|
||||
@ -968,10 +976,11 @@ compute_prec_sets (const System sys)
|
||||
{
|
||||
Roledef rd2;
|
||||
|
||||
rd2 = roledef_re(r2,ev2);
|
||||
if (rd2 != NULL && rd2->type == READ && isTermEqual(rd1->label, rd2->label))
|
||||
rd2 = roledef_re (r2, ev2);
|
||||
if (rd2 != NULL && rd2->type == READ
|
||||
&& isTermEqual (rd1->label, rd2->label))
|
||||
{
|
||||
prec[index2(index(r1,ev1),index(r2,ev2))] = 1;
|
||||
prec[index2 (index (r1, ev1), index (r2, ev2))] = 1;
|
||||
}
|
||||
ev2++;
|
||||
}
|
||||
@ -995,16 +1004,16 @@ compute_prec_sets (const System sys)
|
||||
j = 0;
|
||||
while (j < size)
|
||||
{
|
||||
if (prec[index2 (j,i)] == 1)
|
||||
if (prec[index2 (j, i)] == 1)
|
||||
{
|
||||
int k;
|
||||
|
||||
k = 0;
|
||||
while (k < size)
|
||||
{
|
||||
if (prec[index2 (k,j)] == 1)
|
||||
if (prec[index2 (k, j)] == 1)
|
||||
{
|
||||
prec[index2 (k,i)] = 1;
|
||||
prec[index2 (k, i)] = 1;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
@ -1039,15 +1048,18 @@ compute_prec_sets (const System sys)
|
||||
r1++;
|
||||
}
|
||||
}
|
||||
while (r1 < sys->rolecount && !isTermEqual (label, eventlabels[index(r1,ev1)]));
|
||||
while (r1 < sys->rolecount
|
||||
&& !isTermEqual (label, eventlabels[index (r1, ev1)]));
|
||||
if (r1 == sys->rolecount)
|
||||
{
|
||||
error ("Prec() setup: Could not find the event corresponding to a claim label.");
|
||||
error
|
||||
("Prec() setup: Could not find the event corresponding to a claim label.");
|
||||
}
|
||||
rd = roledef_re (r1,ev1);
|
||||
rd = roledef_re (r1, ev1);
|
||||
if (rd->type != CLAIM)
|
||||
{
|
||||
error ("Prec() setup: First event with claim label doesn't seem to be a claim.");
|
||||
error
|
||||
("Prec() setup: First event with claim label doesn't seem to be a claim.");
|
||||
}
|
||||
// Store in claimlist structure
|
||||
cl->r = r1;
|
||||
@ -1057,17 +1069,17 @@ compute_prec_sets (const System sys)
|
||||
* Now we compute the preceding label set
|
||||
*/
|
||||
cl->prec = NULL; // clear first
|
||||
claim_index = index (r1,ev1);
|
||||
claim_index = index (r1, ev1);
|
||||
r2 = 0;
|
||||
while (r2 < sys->rolecount)
|
||||
{
|
||||
Roledef rd2;
|
||||
|
||||
ev2 = 0;
|
||||
rd = roledef_re (r2,ev2);
|
||||
rd = roledef_re (r2, ev2);
|
||||
while (rd != NULL)
|
||||
{
|
||||
if (prec[index2 (index (r2,ev2),claim_index)] == 1)
|
||||
if (prec[index2 (index (r2, ev2), claim_index)] == 1)
|
||||
{
|
||||
// This event precedes the claim
|
||||
|
||||
@ -1096,7 +1108,8 @@ compute_prec_sets (const System sys)
|
||||
tl_scan = cl->prec;
|
||||
while (tl_scan != NULL)
|
||||
{
|
||||
sys->synchronising_labels = termlistAddNew (sys->synchronising_labels, tl_scan->term);
|
||||
sys->synchronising_labels =
|
||||
termlistAddNew (sys->synchronising_labels, tl_scan->term);
|
||||
tl_scan = tl_scan->next;
|
||||
}
|
||||
}
|
||||
@ -1125,11 +1138,12 @@ compute_prec_sets (const System sys)
|
||||
while (ev_scan < sys->roleeventmax)
|
||||
{
|
||||
// if this event preceds the claim, replace the label term
|
||||
if (prec[index2 (index (r_scan, ev_scan), claim_index)] == 1)
|
||||
if (prec[index2 (index (r_scan, ev_scan), claim_index)]
|
||||
== 1)
|
||||
{
|
||||
Roledef rd;
|
||||
|
||||
rd = roledef_re (r_scan,ev_scan);
|
||||
rd = roledef_re (r_scan, ev_scan);
|
||||
if (rd->label != NULL)
|
||||
{
|
||||
t_buf = rd->label;
|
||||
@ -1140,7 +1154,8 @@ compute_prec_sets (const System sys)
|
||||
// Store only the last label
|
||||
if (t_buf != NULL)
|
||||
{
|
||||
sys->synchronising_labels = termlistAddNew(sys->synchronising_labels, t_buf);
|
||||
sys->synchronising_labels =
|
||||
termlistAddNew (sys->synchronising_labels, t_buf);
|
||||
}
|
||||
}
|
||||
r_scan++;
|
||||
@ -1153,15 +1168,17 @@ compute_prec_sets (const System sys)
|
||||
{
|
||||
termlistDelete (sys->synchronising_labels);
|
||||
sys->synchronising_labels = NULL;
|
||||
warning ("Emptied synchronising labels set manually because --pp=100.");
|
||||
warning
|
||||
("Emptied synchronising labels set manually because --pp=100.");
|
||||
}
|
||||
#endif
|
||||
// Check for empty stuff
|
||||
//@todo This is for debugging, mainly.
|
||||
if (cl->prec == NULL)
|
||||
{
|
||||
fprintf (stderr, "Warning: claim with empty prec() set at r:%i, ev:%i\n",
|
||||
r1,ev1);
|
||||
fprintf (stderr,
|
||||
"Warning: claim with empty prec() set at r:%i, ev:%i\n",
|
||||
r1, ev1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1177,11 +1194,11 @@ compute_prec_sets (const System sys)
|
||||
/*
|
||||
* Cleanup
|
||||
*/
|
||||
memFree (eventlabels, size * sizeof(Term));
|
||||
memFree (prec, size * size * sizeof(int));
|
||||
memFree (eventlabels, size * sizeof (Term));
|
||||
memFree (prec, size * size * sizeof (int));
|
||||
|
||||
#ifdef DEBUG
|
||||
if (DEBUGL(2))
|
||||
if (DEBUGL (2))
|
||||
{
|
||||
printf ("Synchronising labels set: ");
|
||||
termlistPrint (sys->synchronising_labels);
|
||||
@ -1198,10 +1215,10 @@ preprocess (const System sys)
|
||||
/*
|
||||
* init some counters
|
||||
*/
|
||||
sys->rolecount = compute_rolecount(sys);
|
||||
sys->roleeventmax = compute_roleeventmax(sys);
|
||||
sys->rolecount = compute_rolecount (sys);
|
||||
sys->roleeventmax = compute_roleeventmax (sys);
|
||||
/*
|
||||
* compute preceding label sets
|
||||
*/
|
||||
compute_prec_sets(sys);
|
||||
compute_prec_sets (sys);
|
||||
}
|
||||
|
10
src/error.c
10
src/error.c
@ -6,7 +6,7 @@
|
||||
void
|
||||
error_die (void)
|
||||
{
|
||||
exit(1);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
//! Print error message header
|
||||
@ -26,7 +26,7 @@ error_pre (void)
|
||||
* Input is comparable to printf, only end of line is not required.
|
||||
*/
|
||||
void
|
||||
error_post (char *fmt, ... )
|
||||
error_post (char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
@ -34,7 +34,7 @@ error_post (char *fmt, ... )
|
||||
vfprintf (stderr, fmt, args);
|
||||
fprintf (stderr, "\n");
|
||||
va_end (args);
|
||||
exit(1);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
//! Print error message and die.
|
||||
@ -43,7 +43,7 @@ error_post (char *fmt, ... )
|
||||
* Input is comparable to printf, only end of line is not required.
|
||||
*/
|
||||
void
|
||||
error (char *fmt, ... )
|
||||
error (char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
@ -60,7 +60,7 @@ error (char *fmt, ... )
|
||||
* Input is comparable to printf, only end of line is not required.
|
||||
*/
|
||||
void
|
||||
warning (char *fmt, ... )
|
||||
warning (char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
|
||||
void error_die (void);
|
||||
void error_pre (void);
|
||||
void error_post (char *fmt, ... );
|
||||
void error (char *fmt, ... );
|
||||
void warning (char *fmt, ... );
|
||||
void error_post (char *fmt, ...);
|
||||
void error (char *fmt, ...);
|
||||
void warning (char *fmt, ...);
|
||||
|
||||
#endif
|
||||
|
@ -285,7 +285,8 @@ inKnowledge (const Knowledge know, Term term)
|
||||
if (term->type == ENCRYPT)
|
||||
{
|
||||
return inTermlist (know->encrypt, term) ||
|
||||
(inKnowledge (know, term->right.key) && inKnowledge (know, term->left.op));
|
||||
(inKnowledge (know, term->right.key)
|
||||
&& inKnowledge (know, term->left.op));
|
||||
}
|
||||
if (term->type == TUPLE)
|
||||
{
|
||||
@ -440,7 +441,8 @@ knowledgeGetInverses (const Knowledge know)
|
||||
__inline__ Termlist
|
||||
knowledgeGetBasics (const Knowledge know)
|
||||
{
|
||||
return termlistAddBasics (termlistAddBasics(NULL, know->basic), know->encrypt);
|
||||
return termlistAddBasics (termlistAddBasics (NULL, know->basic),
|
||||
know->encrypt);
|
||||
}
|
||||
|
||||
//! check whether any substitutions where made in a knowledge set.
|
||||
|
17
src/latex.c
17
src/latex.c
@ -176,15 +176,15 @@ latexTermTuplePrint (Term term, Termlist hl)
|
||||
printf ("Empty term");
|
||||
return;
|
||||
}
|
||||
term = deVar(term);
|
||||
term = deVar (term);
|
||||
while (realTermTuple (term))
|
||||
{
|
||||
// To remove any brackets, change this into latexTermTuplePrint.
|
||||
latexTermPrint (term->left.op1, hl);
|
||||
printf (",");
|
||||
term = deVar(term->right.op2);
|
||||
term = deVar (term->right.op2);
|
||||
}
|
||||
latexTermPrint(term, hl);
|
||||
latexTermPrint (term, hl);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -293,8 +293,8 @@ latexDeclInst (const System sys, int run)
|
||||
printf (", ");
|
||||
else
|
||||
first = 0;
|
||||
termPrint (agentOfRunRole(sys,run,roles->term));
|
||||
printf(": ");
|
||||
termPrint (agentOfRunRole (sys, run, roles->term));
|
||||
printf (": ");
|
||||
termPrint (roles->term);
|
||||
}
|
||||
roles = roles->next;
|
||||
@ -305,7 +305,7 @@ latexDeclInst (const System sys, int run)
|
||||
/* display agent and role */
|
||||
printf ("$\\mathbf{");
|
||||
termPrint (myAgent);
|
||||
printf("}: ");
|
||||
printf ("}: ");
|
||||
termPrint (myRole);
|
||||
|
||||
printf ("$}\n");
|
||||
@ -896,7 +896,7 @@ attackDisplayLatex (const System sys)
|
||||
|
||||
for (pass = 1; pass <= 2; pass++)
|
||||
{
|
||||
printf ("%% Pass %i\n\n",pass);
|
||||
printf ("%% Pass %i\n\n", pass);
|
||||
|
||||
if (pass == 1)
|
||||
{
|
||||
@ -1044,7 +1044,8 @@ attackDisplayLatex (const System sys)
|
||||
|
||||
if (tb->link[i] != -1 && i < tb->length)
|
||||
{
|
||||
latexMessagePrintHighlight (tb, i, tb->link[i], highlights);
|
||||
latexMessagePrintHighlight (tb, i, tb->link[i],
|
||||
highlights);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
16
src/latex.h
16
src/latex.h
@ -7,14 +7,14 @@
|
||||
|
||||
#include "system.h"
|
||||
|
||||
void latexInit(const System sys, int argc, char **argv);
|
||||
void latexDone(const System sys);
|
||||
void latexTimers(const System sys);
|
||||
void latexMSCStart();
|
||||
void latexMSCEnd();
|
||||
void latexLearnComment(const System sys, Termlist tl);
|
||||
void latexTracePrint(const System sys);
|
||||
void attackDisplayLatex(const System sys);
|
||||
void latexInit (const System sys, int argc, char **argv);
|
||||
void latexDone (const System sys);
|
||||
void latexTimers (const System sys);
|
||||
void latexMSCStart ();
|
||||
void latexMSCEnd ();
|
||||
void latexLearnComment (const System sys, Termlist tl);
|
||||
void latexTracePrint (const System sys);
|
||||
void attackDisplayLatex (const System sys);
|
||||
void latexTermPrint (Term term, Termlist hl);
|
||||
void latexTermTuplePrint (Term term, Termlist hl);
|
||||
|
||||
|
118
src/main.c
118
src/main.c
@ -82,13 +82,16 @@ main (int argc, char **argv)
|
||||
{
|
||||
System sys;
|
||||
|
||||
struct arg_file *infile = arg_file0(NULL,NULL,"FILE", "input file ('-' for stdin)");
|
||||
struct arg_file *outfile = arg_file0("o","output","FILE", "output file (default is stdout)");
|
||||
struct arg_str *switch_check = arg_str0(NULL,"check","CLAIM","claim type to check (default is all)");
|
||||
struct arg_int *switch_scenario =
|
||||
arg_int0 ("s", "scenario", NULL, "select a scenario instance 1-n (-1 to count)");
|
||||
struct arg_int *switch_scenario_size =
|
||||
arg_int0 ("S", "scenario-size", NULL, "scenario size (fixed trace prefix length)");
|
||||
struct arg_file *infile =
|
||||
arg_file0 (NULL, NULL, "FILE", "input file ('-' for stdin)");
|
||||
struct arg_file *outfile = arg_file0 ("o", "output", "FILE",
|
||||
"output file (default is stdout)");
|
||||
struct arg_str *switch_check = arg_str0 (NULL, "check", "CLAIM",
|
||||
"claim type to check (default is all)");
|
||||
struct arg_int *switch_scenario = arg_int0 ("s", "scenario", NULL,
|
||||
"select a scenario instance 1-n (-1 to count)");
|
||||
struct arg_int *switch_scenario_size = arg_int0 ("S", "scenario-size", NULL,
|
||||
"scenario size (fixed trace prefix length)");
|
||||
struct arg_int *switch_traversal_method = arg_int0 ("t", "traverse", NULL,
|
||||
"set traversal method, partial order reduction (default is 12)");
|
||||
struct arg_int *switch_match_method =
|
||||
@ -97,30 +100,47 @@ main (int argc, char **argv)
|
||||
arg_lit0 ("c", "cl", "use constraint logic, non-associative");
|
||||
struct arg_int *switch_pruning_method = arg_int0 ("p", "prune", NULL,
|
||||
"pruning method (default is 2)");
|
||||
struct arg_int *switch_prune_trace_length = arg_int0 ("l", "max-length", NULL,
|
||||
struct arg_int *switch_prune_trace_length =
|
||||
arg_int0 ("l", "max-length", NULL,
|
||||
"prune traces longer than <int> events");
|
||||
struct arg_lit *switch_incremental_trace_length = arg_lit0 (NULL, "increment-traces",
|
||||
struct arg_lit *switch_incremental_trace_length =
|
||||
arg_lit0 (NULL, "increment-traces",
|
||||
"incremental search using the length of the traces.");
|
||||
struct arg_int *switch_maximum_runs =
|
||||
arg_int0 ("r", "max-runs", NULL, "create at most <int> runs");
|
||||
struct arg_lit *switch_incremental_runs = arg_lit0 (NULL, "increment-runs",
|
||||
"incremental search using the number of runs");
|
||||
struct arg_lit *switch_latex_output = arg_lit0 (NULL, "latex", "output attacks in LaTeX format");
|
||||
struct arg_lit *switch_latex_output =
|
||||
arg_lit0 (NULL, "latex", "output attacks in LaTeX format");
|
||||
struct arg_lit *switch_empty =
|
||||
arg_lit0 ("e", "empty", "do not generate output");
|
||||
struct arg_lit *switch_progress_bar = arg_lit0 ("b", "progress-bar", "show progress bar");
|
||||
struct arg_lit *switch_state_space_graph = arg_lit0 (NULL, "state-space", "output state space graph");
|
||||
struct arg_lit *switch_implicit_choose = arg_lit0 (NULL, "implicit-choose", "allow implicit choose events (useful for few runs)");
|
||||
struct arg_lit *switch_choose_first = arg_lit0 (NULL, "choose-first", "priority to any choose events");
|
||||
struct arg_lit *switch_enable_read_symmetries = arg_lit0 (NULL, "read-symm", "enable read symmetry reductions");
|
||||
struct arg_lit *switch_disable_agent_symmetries = arg_lit0 (NULL, "no-agent-symm", "disable agent symmetry reductions");
|
||||
struct arg_lit *switch_enable_symmetry_order = arg_lit0 (NULL, "symm-order", "enable ordering symmetry reductions");
|
||||
struct arg_lit *switch_disable_noclaims_reductions = arg_lit0 (NULL, "no-noclaims-red", "disable no more claims reductions");
|
||||
struct arg_lit *switch_disable_endgame_reductions = arg_lit0 (NULL, "no-endgame-red", "disable endgame reductions");
|
||||
struct arg_lit *switch_summary = arg_lit0 (NULL, "summary", "show summary on stdout instead of stderr");
|
||||
struct arg_lit *switch_echo = arg_lit0 ("E", "echo", "echo command line to stdout");
|
||||
struct arg_lit *switch_progress_bar =
|
||||
arg_lit0 ("b", "progress-bar", "show progress bar");
|
||||
struct arg_lit *switch_state_space_graph =
|
||||
arg_lit0 (NULL, "state-space", "output state space graph");
|
||||
struct arg_lit *switch_implicit_choose = arg_lit0 (NULL, "implicit-choose",
|
||||
"allow implicit choose events (useful for few runs)");
|
||||
struct arg_lit *switch_choose_first =
|
||||
arg_lit0 (NULL, "choose-first", "priority to any choose events");
|
||||
struct arg_lit *switch_enable_read_symmetries =
|
||||
arg_lit0 (NULL, "read-symm", "enable read symmetry reductions");
|
||||
struct arg_lit *switch_disable_agent_symmetries =
|
||||
arg_lit0 (NULL, "no-agent-symm",
|
||||
"disable agent symmetry reductions");
|
||||
struct arg_lit *switch_enable_symmetry_order = arg_lit0 (NULL, "symm-order",
|
||||
"enable ordering symmetry reductions");
|
||||
struct arg_lit *switch_disable_noclaims_reductions =
|
||||
arg_lit0 (NULL, "no-noclaims-red",
|
||||
"disable no more claims reductions");
|
||||
struct arg_lit *switch_disable_endgame_reductions =
|
||||
arg_lit0 (NULL, "no-endgame-red", "disable endgame reductions");
|
||||
struct arg_lit *switch_summary = arg_lit0 (NULL, "summary",
|
||||
"show summary on stdout instead of stderr");
|
||||
struct arg_lit *switch_echo =
|
||||
arg_lit0 ("E", "echo", "echo command line to stdout");
|
||||
#ifdef DEBUG
|
||||
struct arg_int *switch_por_parameter = arg_int0 (NULL, "pp", NULL, "POR parameter");
|
||||
struct arg_int *switch_por_parameter =
|
||||
arg_int0 (NULL, "pp", NULL, "POR parameter");
|
||||
struct arg_lit *switch_debug_indent = arg_lit0 ("I", "debug-indent",
|
||||
"indent the debug output using trace length");
|
||||
struct arg_int *switch_debug_level =
|
||||
@ -212,7 +232,8 @@ main (int argc, char **argv)
|
||||
{
|
||||
printf ("'%s' model checker for security protocols.\n", progname);
|
||||
printf ("%s release.\n", releasetag);
|
||||
printf ("$Rev$ $Date$\n");
|
||||
printf
|
||||
("$Rev$ $Date$\n");
|
||||
#ifdef DEBUG
|
||||
printf ("Compiled with debugging support.\n");
|
||||
#endif
|
||||
@ -232,10 +253,10 @@ main (int argc, char **argv)
|
||||
}
|
||||
|
||||
/* special case: uname with no command line options induces brief help */
|
||||
if (argc==1)
|
||||
if (argc == 1)
|
||||
{
|
||||
printf("Try '%s --help' for more information.\n",progname);
|
||||
exitcode=0;
|
||||
printf ("Try '%s --help' for more information.\n", progname);
|
||||
exitcode = 0;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
@ -247,11 +268,13 @@ main (int argc, char **argv)
|
||||
/* Lutger-tries-to-test-with-broken-methods detector */
|
||||
if (switch_clp->count > 0)
|
||||
{
|
||||
fprintf (stderr, "For the time being, this method is not supported, \n");
|
||||
fprintf (stderr,
|
||||
"For the time being, this method is not supported, \n");
|
||||
fprintf (stderr, "as too many changes have been made to the normal \n");
|
||||
fprintf (stderr, "matching logic, and CL simply isn't reliable in \nmany ");
|
||||
fprintf (stderr,
|
||||
"matching logic, and CL simply isn't reliable in \nmany ");
|
||||
fprintf (stderr, "ways. Try again in a few weeks.\n");
|
||||
exit(0);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/* redirect in- and output according to supplied filenames */
|
||||
@ -261,20 +284,22 @@ main (int argc, char **argv)
|
||||
/* try to open */
|
||||
if (!freopen (outfile->filename[0], "w", stdout))
|
||||
{
|
||||
fprintf(stderr, "Could not create output file '%s'.\n", outfile->filename[0]);
|
||||
exit(1);
|
||||
fprintf (stderr, "Could not create output file '%s'.\n",
|
||||
outfile->filename[0]);
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
/* input */
|
||||
if (infile->count > 0)
|
||||
{
|
||||
/* check for the single dash */
|
||||
if (strcmp(infile->filename[0],"-"))
|
||||
if (strcmp (infile->filename[0], "-"))
|
||||
{
|
||||
if (!freopen (infile->filename[0], "r", stdin))
|
||||
{
|
||||
fprintf(stderr, "Could not open input file '%s'.\n", infile->filename[0]);
|
||||
exit(1);
|
||||
fprintf (stderr, "Could not open input file '%s'.\n",
|
||||
infile->filename[0]);
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -328,7 +353,8 @@ main (int argc, char **argv)
|
||||
if (switch_enable_read_symmetries->count > 0)
|
||||
{
|
||||
if (switch_enable_symmetry_order->count > 0)
|
||||
error ("--read-symm and --symm-order cannot be used at the same time.");
|
||||
error
|
||||
("--read-symm and --symm-order cannot be used at the same time.");
|
||||
sys->switchReadSymm = 1;
|
||||
}
|
||||
if (switch_enable_symmetry_order->count > 0)
|
||||
@ -363,11 +389,11 @@ main (int argc, char **argv)
|
||||
if (sys->switchScenario != 0 && sys->switchScenarioSize == 0)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
warning ("Scenario selection without trace prefix length implies --choose-first.");
|
||||
warning
|
||||
("Scenario selection without trace prefix length implies --choose-first.");
|
||||
#endif
|
||||
sys->switchChooseFirst = 1;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
sys->porparam = switch_por_parameter->ival[0];
|
||||
#endif
|
||||
@ -381,7 +407,7 @@ main (int argc, char **argv)
|
||||
Term claim;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (lookup(switch_check->sval[0]) == NULL)
|
||||
if (lookup (switch_check->sval[0]) == NULL)
|
||||
{
|
||||
globalError++;
|
||||
warning ("Could not find this string at all in:");
|
||||
@ -486,8 +512,7 @@ main (int argc, char **argv)
|
||||
if (switch_incremental_runs->count > 0 ||
|
||||
switch_incremental_trace_length->count > 0)
|
||||
{
|
||||
if (sys->output != ATTACK &&
|
||||
sys->output != EMPTY)
|
||||
if (sys->output != ATTACK && sys->output != EMPTY)
|
||||
{
|
||||
error ("Incremental traversal only for empty or attack output.");
|
||||
}
|
||||
@ -497,7 +522,6 @@ main (int argc, char **argv)
|
||||
{
|
||||
warning ("-m2 is only supported for constraint logic programming.");
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
warning ("Selected output method is %i", sys->output);
|
||||
#endif
|
||||
@ -538,7 +562,7 @@ main (int argc, char **argv)
|
||||
{
|
||||
if (sys->output == ATTACK)
|
||||
{
|
||||
attackDisplay(sys);
|
||||
attackDisplay (sys);
|
||||
}
|
||||
/* mark exit code */
|
||||
exitcode = 3;
|
||||
@ -648,7 +672,7 @@ timersPrint (const System sys)
|
||||
else
|
||||
{
|
||||
if (sys->failed != STATES0)
|
||||
eprintf ("L:%i\n", attackLength(sys->attack));
|
||||
eprintf ("L:%i\n", attackLength (sys->attack));
|
||||
else
|
||||
eprintf ("None\n");
|
||||
}
|
||||
@ -740,7 +764,8 @@ MC_incRuns (const System sys)
|
||||
systemReset (sys);
|
||||
sys->maxruns = runs;
|
||||
systemRuns (sys);
|
||||
fprintf (stderr, "%i of %i runs in incremental runs search.\n", runs, maxruns);
|
||||
fprintf (stderr, "%i of %i runs in incremental runs search.\n",
|
||||
runs, maxruns);
|
||||
res = modelCheck (sys);
|
||||
fprintf (stderr, "\n");
|
||||
if (res)
|
||||
@ -794,7 +819,8 @@ MC_incTraces (const System sys)
|
||||
systemReset (sys);
|
||||
sys->maxtracelength = tracelen;
|
||||
systemRuns (sys);
|
||||
fprintf (stderr, "%i of %i trace length in incremental trace length search.\n",
|
||||
fprintf (stderr,
|
||||
"%i of %i trace length in incremental trace length search.\n",
|
||||
tracelen, maxtracelen);
|
||||
res = modelCheck (sys);
|
||||
fprintf (stderr, "\n");
|
||||
@ -873,5 +899,3 @@ modelCheck (const System sys)
|
||||
}
|
||||
return (sys->failed != STATES0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@ candidates (const Knowledge know)
|
||||
|
||||
struct fvpass
|
||||
{
|
||||
int (*solution)();
|
||||
int (*solution) ();
|
||||
|
||||
System sys;
|
||||
int run;
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
struct solvepass
|
||||
{
|
||||
int (*solution)();
|
||||
int (*solution) ();
|
||||
|
||||
System sys;
|
||||
int run;
|
||||
@ -384,7 +384,8 @@ sendAdd_clp (const System sys, const int run, const Termlist tl)
|
||||
/* simple case: no variable inside */
|
||||
knowledgeAddTerm (sys->know, t);
|
||||
tl2 = termlistShallow (tl->next);
|
||||
if (inKnowledge (sys->know, invkey) && hasTermVariable (t->left.op))
|
||||
if (inKnowledge (sys->know, invkey)
|
||||
&& hasTermVariable (t->left.op))
|
||||
tl2 = termlistAdd (tl2, t->left.op);
|
||||
sendAdd_clp (sys, run, tl2);
|
||||
termlistDelete (tl2);
|
||||
|
@ -203,7 +203,7 @@ executeStep (const System sys, const int run)
|
||||
sys->states = statesIncrease (sys->states);
|
||||
|
||||
/* what about scenario exploration? */
|
||||
if (sys->switchScenario && sys->step+1 > sys->switchScenarioSize)
|
||||
if (sys->switchScenario && sys->step + 1 > sys->switchScenarioSize)
|
||||
{
|
||||
/* count states within scenario */
|
||||
sys->statesScenario = statesIncrease (sys->statesScenario);
|
||||
@ -213,7 +213,8 @@ executeStep (const System sys, const int run)
|
||||
if (sys->switchS > 0)
|
||||
{
|
||||
sys->interval = statesIncrease (sys->interval);
|
||||
if (!statesSmallerThan (sys->interval, (unsigned long int) sys->switchS))
|
||||
if (!statesSmallerThan
|
||||
(sys->interval, (unsigned long int) sys->switchS))
|
||||
{
|
||||
globalError++;
|
||||
sys->interval = STATES0;
|
||||
@ -227,7 +228,8 @@ executeStep (const System sys, const int run)
|
||||
/* store new node numbder */
|
||||
sys->traceNode[sys->step] = sys->states;
|
||||
/* the construction below always assumes MAX_GRAPH_STATES to be smaller than the unsigned long it, which seems realistic. */
|
||||
if (sys->output == STATESPACE && statesSmallerThan (sys->states, MAX_GRAPH_STATES))
|
||||
if (sys->output == STATESPACE
|
||||
&& statesSmallerThan (sys->states, MAX_GRAPH_STATES))
|
||||
{
|
||||
/* display graph */
|
||||
graphNode (sys);
|
||||
@ -240,7 +242,8 @@ executeStep (const System sys, const int run)
|
||||
*
|
||||
*@todo "What is interesting" relies on the fact that there are only secrecy, sychnr and agreement properties.
|
||||
*/
|
||||
Roledef removeIrrelevant (const System sys, const int run, Roledef rd)
|
||||
Roledef
|
||||
removeIrrelevant (const System sys, const int run, Roledef rd)
|
||||
{
|
||||
Roledef rdkill;
|
||||
int killclaims;
|
||||
@ -284,7 +287,8 @@ Roledef removeIrrelevant (const System sys, const int run, Roledef rd)
|
||||
*\sa tryChoiceSend()
|
||||
*/
|
||||
void
|
||||
unblock_synchronising_labels (const System sys, const int run, const Roledef rd)
|
||||
unblock_synchronising_labels (const System sys, const int run,
|
||||
const Roledef rd)
|
||||
{
|
||||
if (rd->type != READ || rd->internal)
|
||||
return;
|
||||
@ -390,7 +394,7 @@ explorify (const System sys, const int run)
|
||||
/* are claims in this run evaluated anyway? */
|
||||
if (!untrustedAgent (sys, sys->runs[rid].agents))
|
||||
{ /* possibly claims to be checked in this run */
|
||||
rdscan = runPointerGet(sys, rid);
|
||||
rdscan = runPointerGet (sys, rid);
|
||||
while (rdscan != NULL)
|
||||
{
|
||||
if (rdscan->type == CLAIM)
|
||||
@ -485,7 +489,8 @@ explorify (const System sys, const int run)
|
||||
error ("firstNonAgentRead is not a read?!");
|
||||
}
|
||||
ridSymm = sys->runs[run].prevSymmRun;
|
||||
if (isTermlistEqual (sys->runs[run].agents, sys->runs[ridSymm].agents))
|
||||
if (isTermlistEqual
|
||||
(sys->runs[run].agents, sys->runs[ridSymm].agents))
|
||||
{
|
||||
/* same agents, so relevant */
|
||||
if (myStep > 0 && sys->runs[ridSymm].step < myStep)
|
||||
@ -540,7 +545,8 @@ explorify (const System sys, const int run)
|
||||
ridSymm = sys->runs[run].prevSymmRun;
|
||||
/* equal runs? */
|
||||
|
||||
if (isTermlistEqual (sys->runs[run].agents, sys->runs[ridSymm].agents))
|
||||
if (isTermlistEqual
|
||||
(sys->runs[run].agents, sys->runs[ridSymm].agents))
|
||||
{
|
||||
/* so, we have an identical partner */
|
||||
/* is our partner there already? */
|
||||
@ -567,8 +573,7 @@ explorify (const System sys, const int run)
|
||||
if (sys->switchScenarioSize == 0)
|
||||
{
|
||||
/* only after chooses */
|
||||
if (myStep == 0 &&
|
||||
rd->type == READ)
|
||||
if (myStep == 0 && rd->type == READ)
|
||||
{
|
||||
if (run == sys->lastChooseRun)
|
||||
{
|
||||
@ -605,7 +610,7 @@ explorify (const System sys, const int run)
|
||||
/* scenario size is not zero */
|
||||
|
||||
//!@todo Optimization: if the good scenario is already traversed, other trace prefixes need not be explored any further.
|
||||
if (sys->step+1 == sys->switchScenarioSize)
|
||||
if (sys->step + 1 == sys->switchScenarioSize)
|
||||
{
|
||||
/* Now, the prefix has been set. Count it */
|
||||
if (sys->countScenario < INT_MAX)
|
||||
@ -915,9 +920,7 @@ lastActiveRun (const System sys)
|
||||
__inline__ int
|
||||
isChooseRoledef (const System sys, const int run, const Roledef rd)
|
||||
{
|
||||
return (rd == sys->runs[run].start &&
|
||||
rd->type == READ &&
|
||||
rd->internal);
|
||||
return (rd == sys->runs[run].start && rd->type == READ && rd->internal);
|
||||
}
|
||||
|
||||
//! Explore possible chooses first
|
||||
@ -1066,7 +1069,7 @@ propertyCheck (const System sys)
|
||||
if (sys->traceEvent[i]->type == CLAIM &&
|
||||
sys->traceEvent[i]->to == CLAIM_Secret)
|
||||
{
|
||||
Termlist tl = secrecyUnfolding(scan->term, sys->know);
|
||||
Termlist tl = secrecyUnfolding (scan->term, sys->know);
|
||||
if (tl != NULL)
|
||||
{
|
||||
/* This was indeed a violated claim */
|
||||
@ -1079,17 +1082,18 @@ propertyCheck (const System sys)
|
||||
if (claimev == -1)
|
||||
{
|
||||
/* weird, should not occur */
|
||||
fprintf(stderr, "Violation, but cannot locate claim.\n");
|
||||
printf("A secrecy claim was supposed to be violated on term ");
|
||||
termPrint(scan->term);
|
||||
printf(" but we couldn't find the corresponding claim.\n");
|
||||
exit(1);
|
||||
fprintf (stderr, "Violation, but cannot locate claim.\n");
|
||||
printf
|
||||
("A secrecy claim was supposed to be violated on term ");
|
||||
termPrint (scan->term);
|
||||
printf (" but we couldn't find the corresponding claim.\n");
|
||||
exit (1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* fine. so it's violated */
|
||||
violateClaim(sys, sys->step, claimev, tl);
|
||||
termlistDelete(tl);
|
||||
violateClaim (sys, sys->step, claimev, tl);
|
||||
termlistDelete (tl);
|
||||
flag = 0;
|
||||
}
|
||||
}
|
||||
@ -1163,13 +1167,12 @@ secrecyUnfolding (Term t, const Knowledge know)
|
||||
{
|
||||
t = deVar (t);
|
||||
if (isTermTuple (t))
|
||||
return termlistConcat (secrecyUnfolding(t->left.op1,know),
|
||||
secrecyUnfolding(t->right.op2,know)
|
||||
);
|
||||
return termlistConcat (secrecyUnfolding (t->left.op1, know),
|
||||
secrecyUnfolding (t->right.op2, know));
|
||||
else
|
||||
{
|
||||
if (inKnowledge(know, t))
|
||||
return termlistAdd(NULL, t);
|
||||
if (inKnowledge (know, t))
|
||||
return termlistAdd (NULL, t);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@ -1187,12 +1190,14 @@ secrecyUnfolding (Term t, const Knowledge know)
|
||||
*/
|
||||
|
||||
Termlist
|
||||
claimViolationDetails (const System sys, const int run, const Roledef rd, const Knowledge know)
|
||||
claimViolationDetails (const System sys, const int run, const Roledef rd,
|
||||
const Knowledge know)
|
||||
{
|
||||
if (rd->type != CLAIM)
|
||||
{
|
||||
fprintf(stderr, "Trying to determine details of something other than a claim!\n");
|
||||
exit(-1);
|
||||
fprintf (stderr,
|
||||
"Trying to determine details of something other than a claim!\n");
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
/* cases */
|
||||
@ -1203,12 +1208,12 @@ claimViolationDetails (const System sys, const int run, const Roledef rd, const
|
||||
if (untrustedAgent (sys, sys->runs[run].agents))
|
||||
{
|
||||
/* claim was skipped */
|
||||
return (Termlist) -1;
|
||||
return (Termlist) - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* construct violating subterms list */
|
||||
return secrecyUnfolding(rd->message, know);
|
||||
return secrecyUnfolding (rd->message, know);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
@ -1240,8 +1245,8 @@ violateClaim (const System sys, int length, int claimev, Termlist reqt)
|
||||
/* Copy the current trace to the buffer, if the new one is shorter than the previous one. */
|
||||
if (sys->attack == NULL || length < sys->attack->reallength)
|
||||
{
|
||||
tracebufDone(sys->attack);
|
||||
sys->attack = tracebufSet(sys, length, claimev);
|
||||
tracebufDone (sys->attack);
|
||||
sys->attack = tracebufSet (sys, length, claimev);
|
||||
attackMinimize (sys, sys->attack);
|
||||
sys->shortestattack = sys->attack->reallength;
|
||||
|
||||
@ -1376,10 +1381,10 @@ executeTry (const System sys, int run)
|
||||
Termlist tl;
|
||||
|
||||
runPoint->claiminfo->failed++;
|
||||
tl = claimViolationDetails(sys,run,runPoint,sys->know);
|
||||
if (violateClaim (sys,sys->step+1, sys->step, tl ))
|
||||
tl = claimViolationDetails (sys, run, runPoint, sys->know);
|
||||
if (violateClaim (sys, sys->step + 1, sys->step, tl))
|
||||
flag = explorify (sys, run);
|
||||
termlistDelete(tl);
|
||||
termlistDelete (tl);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1400,7 +1405,7 @@ executeTry (const System sys, int run)
|
||||
if (!flag)
|
||||
{
|
||||
/* violation */
|
||||
if (violateClaim (sys,sys->step+1, sys->step, NULL ))
|
||||
if (violateClaim (sys, sys->step + 1, sys->step, NULL))
|
||||
flag = explorify (sys, run);
|
||||
}
|
||||
else
|
||||
@ -1418,7 +1423,7 @@ executeTry (const System sys, int run)
|
||||
if (!flag)
|
||||
{
|
||||
/* violation */
|
||||
if (violateClaim (sys,sys->step+1, sys->step, NULL ))
|
||||
if (violateClaim (sys, sys->step + 1, sys->step, NULL))
|
||||
flag = explorify (sys, run);
|
||||
}
|
||||
else
|
||||
@ -1433,4 +1438,3 @@ executeTry (const System sys, int run)
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
46
src/output.c
46
src/output.c
@ -497,7 +497,8 @@ attackDisplay (const System sys)
|
||||
*-------------------------------------------
|
||||
*/
|
||||
|
||||
void graphInit (const System sys)
|
||||
void
|
||||
graphInit (const System sys)
|
||||
{
|
||||
Termlist tl;
|
||||
|
||||
@ -524,7 +525,8 @@ void graphInit (const System sys)
|
||||
printf ("\tconcentrate=true;\n");
|
||||
|
||||
/* node/edge defaults */
|
||||
printf ("\tnode [shape=\"point\",fontsize=\"4\",fontname=\"Helvetica\"];\n");
|
||||
printf
|
||||
("\tnode [shape=\"point\",fontsize=\"4\",fontname=\"Helvetica\"];\n");
|
||||
printf ("\tedge [fontsize=\"4\",fontname=\"Helvetica\"];\n");
|
||||
|
||||
/* start with initial node 0 */
|
||||
@ -537,13 +539,15 @@ void graphInit (const System sys)
|
||||
printf ("\"];\n");
|
||||
}
|
||||
|
||||
void graphDone (const System sys)
|
||||
void
|
||||
graphDone (const System sys)
|
||||
{
|
||||
/* drawing state space. close up. */
|
||||
printf ("}\n");
|
||||
}
|
||||
|
||||
void graphNode (const System sys)
|
||||
void
|
||||
graphNode (const System sys)
|
||||
{
|
||||
Termlist newtl;
|
||||
states_t thisNode, parentNode;
|
||||
@ -563,7 +567,7 @@ void graphNode (const System sys)
|
||||
statesFormat (thisNode);
|
||||
printf (" [");
|
||||
|
||||
newtl = knowledgeNew (sys->traceKnow[index], sys->traceKnow[index+1]);
|
||||
newtl = knowledgeNew (sys->traceKnow[index], sys->traceKnow[index + 1]);
|
||||
if (newtl != NULL)
|
||||
{
|
||||
/* knowledge added */
|
||||
@ -578,11 +582,11 @@ void graphNode (const System sys)
|
||||
if (sys->switchScenario != 0 &&
|
||||
rd != NULL &&
|
||||
rd == sys->runs[run].start &&
|
||||
rd->type == READ &&
|
||||
run == sys->lastChooseRun)
|
||||
rd->type == READ && run == sys->lastChooseRun)
|
||||
{
|
||||
/* last choose; scenario selected */
|
||||
printf ("shape=box,height=0.2,label=\"Scenario %i: ", sys->countScenario);
|
||||
printf ("shape=box,height=0.2,label=\"Scenario %i: ",
|
||||
sys->countScenario);
|
||||
scenarioPrint (sys);
|
||||
printf ("\"");
|
||||
}
|
||||
@ -602,7 +606,7 @@ void graphNode (const System sys)
|
||||
printf (" [label=\"");
|
||||
|
||||
// Print step
|
||||
printf ("%i:",sys->runs[run].step-1);
|
||||
printf ("%i:", sys->runs[run].step - 1);
|
||||
|
||||
if (rd->type == CLAIM && untrustedAgent (sys, sys->runs[run].agents))
|
||||
{
|
||||
@ -628,7 +632,8 @@ void graphNode (const System sys)
|
||||
printf (";\n");
|
||||
}
|
||||
|
||||
void graphNodePath (const System sys, const int length, const char* nodepar)
|
||||
void
|
||||
graphNodePath (const System sys, const int length, const char *nodepar)
|
||||
{
|
||||
int i;
|
||||
states_t thisNode;
|
||||
@ -647,7 +652,8 @@ void graphNodePath (const System sys, const int length, const char* nodepar)
|
||||
}
|
||||
}
|
||||
|
||||
void graphEdgePath (const System sys, const int length, const char* edgepar)
|
||||
void
|
||||
graphEdgePath (const System sys, const int length, const char *edgepar)
|
||||
{
|
||||
int i;
|
||||
states_t thisNode, prevNode;
|
||||
@ -657,7 +663,7 @@ void graphEdgePath (const System sys, const int length, const char* edgepar)
|
||||
while (i < length)
|
||||
{
|
||||
/* determine node number */
|
||||
thisNode = sys->traceNode[i+1];
|
||||
thisNode = sys->traceNode[i + 1];
|
||||
|
||||
/* color edge */
|
||||
printf ("\tn");
|
||||
@ -670,10 +676,11 @@ void graphEdgePath (const System sys, const int length, const char* edgepar)
|
||||
}
|
||||
}
|
||||
|
||||
void graphPath (const System sys, int length)
|
||||
void
|
||||
graphPath (const System sys, int length)
|
||||
{
|
||||
graphNodePath (sys,length,"style=bold,color=red");
|
||||
graphEdgePath (sys,length-1,"style=bold,color=red");
|
||||
graphNodePath (sys, length, "style=bold,color=red");
|
||||
graphEdgePath (sys, length - 1, "style=bold,color=red");
|
||||
}
|
||||
|
||||
//! Scenario for graph; bit of a hack
|
||||
@ -682,17 +689,14 @@ graphScenario (const System sys, const int run, const Roledef rd)
|
||||
{
|
||||
/* Add scenario node */
|
||||
printf ("\ts%i [shape=box,height=0.2,label=\"Scenario %i: ",
|
||||
sys->countScenario,
|
||||
sys->countScenario);
|
||||
sys->countScenario, sys->countScenario);
|
||||
scenarioPrint (sys);
|
||||
printf ("\"];\n");
|
||||
|
||||
/* draw edge */
|
||||
printf ("\tn%i -> s%i",
|
||||
sys->traceNode[sys->step],
|
||||
sys->countScenario);
|
||||
printf ("\tn%i -> s%i", sys->traceNode[sys->step], sys->countScenario);
|
||||
printf (" [color=blue,label=\"");
|
||||
printf ("%i:",sys->runs[run].step);
|
||||
printf ("%i:", sys->runs[run].step);
|
||||
roledefPrint (rd);
|
||||
printf ("#%i", run);
|
||||
printf ("\"];\n");
|
||||
|
10
src/output.h
10
src/output.h
@ -3,15 +3,13 @@
|
||||
|
||||
#include "system.h"
|
||||
|
||||
void tracePrint(const System sys);
|
||||
void attackDisplay(const System sys);
|
||||
void tracePrint (const System sys);
|
||||
void attackDisplay (const System sys);
|
||||
void graphInit (const System sys);
|
||||
void graphDone (const System sys);
|
||||
void graphNode (const System sys);
|
||||
void graphNodePath (const System sys, const int length, const char*
|
||||
nodepar);
|
||||
void graphEdgePath (const System sys, const int length, const char*
|
||||
edgepar);
|
||||
void graphNodePath (const System sys, const int length, const char *nodepar);
|
||||
void graphEdgePath (const System sys, const int length, const char *edgepar);
|
||||
void graphPath (const System sys, int length);
|
||||
void graphScenario (const System sys, const int run, const Roledef rd);
|
||||
|
||||
|
@ -39,7 +39,7 @@ reportMid (const System sys)
|
||||
indent ();
|
||||
printf ("Trace length %i.\n", 1 + sys->step);
|
||||
if (globalLatex)
|
||||
printf("\n");
|
||||
printf ("\n");
|
||||
tracePrint (sys);
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ reportSecrecy (const System sys, Term t)
|
||||
termPrint (t);
|
||||
printf ("$\n");
|
||||
if (globalLatex)
|
||||
printf("\n");
|
||||
printf ("\n");
|
||||
reportMid (sys);
|
||||
reportEnd (sys);
|
||||
}
|
||||
|
@ -166,7 +166,8 @@ roledefInit (int type, Term label, Term from, Term to, Term msg, Claimlist cl)
|
||||
*\sa roledefInit()
|
||||
*/
|
||||
Roledef
|
||||
roledefAdd (Roledef rd, int type, Term label, Term from, Term to, Term msg, Claimlist cl)
|
||||
roledefAdd (Roledef rd, int type, Term label, Term from, Term to, Term msg,
|
||||
Claimlist cl)
|
||||
{
|
||||
Roledef scan;
|
||||
|
||||
@ -235,5 +236,3 @@ rolesPrint (Role r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
10
src/role.h
10
src/role.h
@ -8,7 +8,8 @@
|
||||
#include "constraint.h"
|
||||
#include "states.h"
|
||||
|
||||
enum eventtype { READ, SEND, CLAIM };
|
||||
enum eventtype
|
||||
{ READ, SEND, CLAIM };
|
||||
|
||||
//! The container for the claim info list
|
||||
struct claimlist
|
||||
@ -110,11 +111,12 @@ Roledef roledefDuplicate1 (const Roledef rd);
|
||||
Roledef roledefDuplicate (Roledef rd);
|
||||
void roledefDelete (Roledef rd);
|
||||
void roledefDestroy (Roledef rd);
|
||||
Roledef roledefInit (int type, Term label, Term from, Term to, Term msg, Claimlist cl);
|
||||
Roledef roledefAdd (Roledef rd, int type, Term label, Term from, Term to, Term msg, Claimlist cl);
|
||||
Roledef roledefInit (int type, Term label, Term from, Term to, Term msg,
|
||||
Claimlist cl);
|
||||
Roledef roledefAdd (Roledef rd, int type, Term label, Term from, Term to,
|
||||
Term msg, Claimlist cl);
|
||||
Role roleCreate (Term nameterm);
|
||||
void rolePrint (Role r);
|
||||
void rolesPrint (Role r);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
__inline__ states_t
|
||||
statesIncrease (const states_t states)
|
||||
{
|
||||
return states+1;
|
||||
return states + 1;
|
||||
}
|
||||
|
||||
__inline__ double
|
||||
|
@ -14,7 +14,8 @@ typedef unsigned long int states_t;
|
||||
|
||||
__inline__ states_t statesIncrease (const states_t states);
|
||||
__inline__ double statesDouble (const states_t states);
|
||||
__inline__ int statesSmallerThan (const states_t states, unsigned long int reflint);
|
||||
__inline__ int statesSmallerThan (const states_t states,
|
||||
unsigned long int reflint);
|
||||
__inline__ void statesFormat (const states_t states);
|
||||
|
||||
#endif
|
||||
|
@ -212,7 +212,7 @@ symbolSysConst (const char *str)
|
||||
*\sa globalError
|
||||
*/
|
||||
void
|
||||
eprintf (char *fmt, ... )
|
||||
eprintf (char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
|
@ -6,7 +6,8 @@
|
||||
*/
|
||||
#define HASHSIZE 997
|
||||
|
||||
enum symboltypes { T_UNDEF = -1, T_PROTOCOL, T_CONST, T_VAR, T_SYSCONST };
|
||||
enum symboltypes
|
||||
{ T_UNDEF = -1, T_PROTOCOL, T_CONST, T_VAR, T_SYSCONST };
|
||||
|
||||
#define EOS 0
|
||||
|
||||
@ -41,7 +42,7 @@ void symbolPrint (const Symbol s);
|
||||
void symbolPrintAll (void);
|
||||
Symbol symbolSysConst (const char *str);
|
||||
|
||||
void eprintf (char *fmt, ... );
|
||||
void eprintf (char *fmt, ...);
|
||||
|
||||
extern int globalError;
|
||||
|
||||
|
70
src/system.c
70
src/system.c
@ -51,7 +51,7 @@ systemInit ()
|
||||
/* initially, no trace ofcourse */
|
||||
sys->step = 0;
|
||||
sys->shortestattack = INT_MAX;
|
||||
sys->attack = tracebufInit();
|
||||
sys->attack = tracebufInit ();
|
||||
|
||||
/* switches */
|
||||
sys->output = ATTACK; // default is to show the attacks
|
||||
@ -157,9 +157,7 @@ systemRuns (const System sys)
|
||||
Roledef rd;
|
||||
|
||||
rd = runPointerGet (sys, run);
|
||||
if (rd != NULL &&
|
||||
rd->internal &&
|
||||
rd->type == READ)
|
||||
if (rd != NULL && rd->internal && rd->type == READ)
|
||||
{
|
||||
/* increasing run traversal, so this yields max */
|
||||
sys->lastChooseRun = run;
|
||||
@ -168,7 +166,7 @@ systemRuns (const System sys)
|
||||
#ifdef DEBUG
|
||||
if (sys->switchScenario < 0)
|
||||
{
|
||||
warning ("Last run with a choose: %i",sys->lastChooseRun);
|
||||
warning ("Last run with a choose: %i", sys->lastChooseRun);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -217,7 +215,7 @@ statesPrint (const System sys)
|
||||
statesFormat (sys->states);
|
||||
eprintf (" states traversed.\n");
|
||||
if (globalLatex)
|
||||
eprintf("\n");
|
||||
eprintf ("\n");
|
||||
}
|
||||
|
||||
//! Destroy a system memory block and system::runs
|
||||
@ -318,13 +316,13 @@ Term
|
||||
agentOfRunRole (const System sys, const int run, const Term role)
|
||||
{
|
||||
Termlist roles = sys->runs[run].protocol->rolenames;
|
||||
Termlist agents= sys->runs[run].agents;
|
||||
Termlist agents = sys->runs[run].agents;
|
||||
|
||||
/* TODO stupid reversed order, lose that soon */
|
||||
agents = termlistForward(agents);
|
||||
agents = termlistForward (agents);
|
||||
while (agents != NULL && roles != NULL)
|
||||
{
|
||||
if (isTermEqual(roles->term, role))
|
||||
if (isTermEqual (roles->term, role))
|
||||
{
|
||||
return agents->term;
|
||||
}
|
||||
@ -342,7 +340,7 @@ agentOfRunRole (const System sys, const int run, const Term role)
|
||||
Term
|
||||
agentOfRun (const System sys, const int run)
|
||||
{
|
||||
return agentOfRunRole(sys,run,sys->runs[run].role->nameterm);
|
||||
return agentOfRunRole (sys, run, sys->runs[run].role->nameterm);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -353,7 +351,8 @@ agentOfRun (const System sys, const int run)
|
||||
*
|
||||
* Return -1 if there is no such symmetry.
|
||||
*/
|
||||
int staticRunSymmetry (const System sys,const int rid)
|
||||
int
|
||||
staticRunSymmetry (const System sys, const int rid)
|
||||
{
|
||||
int ridSymm; // previous symmetrical run
|
||||
Termlist agents; // list of agents for rid
|
||||
@ -364,7 +363,7 @@ int staticRunSymmetry (const System sys,const int rid)
|
||||
agents = runs[rid].agents;
|
||||
while (agents != NULL)
|
||||
{
|
||||
if (isTermVariable(agents->term))
|
||||
if (isTermVariable (agents->term))
|
||||
ridSymm = rid - 1;
|
||||
agents = agents->next;
|
||||
}
|
||||
@ -394,7 +393,8 @@ int staticRunSymmetry (const System sys,const int rid)
|
||||
/* case 1: variable, should match type */
|
||||
if (isTermVariable (alSymm->term))
|
||||
{
|
||||
if (!isTermlistEqual (al->term->stype, alSymm->term->stype))
|
||||
if (!isTermlistEqual
|
||||
(al->term->stype, alSymm->term->stype))
|
||||
isEqual = 0;
|
||||
}
|
||||
else
|
||||
@ -415,7 +415,8 @@ int staticRunSymmetry (const System sys,const int rid)
|
||||
{
|
||||
/* this candidate is allright */
|
||||
#ifdef DEBUG
|
||||
warning ("Symmetry detection. #%i can depend on #%i.",rid,ridSymm);
|
||||
warning ("Symmetry detection. #%i can depend on #%i.", rid,
|
||||
ridSymm);
|
||||
#endif
|
||||
return ridSymm;
|
||||
}
|
||||
@ -429,7 +430,8 @@ int staticRunSymmetry (const System sys,const int rid)
|
||||
/**
|
||||
*@todo For now, we assume it is simply the first read after the choose, if there is one.
|
||||
*/
|
||||
int firstNonAgentRead (const System sys, int rid)
|
||||
int
|
||||
firstNonAgentRead (const System sys, int rid)
|
||||
{
|
||||
int step;
|
||||
Roledef rd;
|
||||
@ -449,7 +451,9 @@ int firstNonAgentRead (const System sys, int rid)
|
||||
if (rd != NULL && !rd->internal && rd->type == READ) // assumes lazy LR eval
|
||||
{
|
||||
#ifdef DEBUG
|
||||
warning ("First read %i with dependency on symmetrical found in run %i.", step, rid);
|
||||
warning
|
||||
("First read %i with dependency on symmetrical found in run %i.",
|
||||
step, rid);
|
||||
#endif
|
||||
return step;
|
||||
}
|
||||
@ -505,7 +509,9 @@ roleInstance (const System sys, const Protocol protocol, const Role role,
|
||||
/* newvar is apparently new, but it might occur
|
||||
* in the first event if it's a read, in which
|
||||
* case we forget it */
|
||||
if (sys->switchForceChoose || !(rd->type == READ && termOccurs (rd->message, scanfrom->term)))
|
||||
if (sys->switchForceChoose
|
||||
|| !(rd->type == READ
|
||||
&& termOccurs (rd->message, scanfrom->term)))
|
||||
{
|
||||
/* this term is forced as a choose, or it does not occur in the (first) read event */
|
||||
/* TODO scan might be more complex, but
|
||||
@ -809,18 +815,18 @@ agentsOfRunPrint (const System sys, const int run)
|
||||
Term role = sys->runs[run].role->nameterm;
|
||||
Termlist roles = sys->runs[run].protocol->rolenames;
|
||||
|
||||
termPrint(role);
|
||||
printf("(");
|
||||
termPrint (role);
|
||||
printf ("(");
|
||||
while (roles != NULL)
|
||||
{
|
||||
termPrint(agentOfRunRole(sys,run,roles->term));
|
||||
termPrint (agentOfRunRole (sys, run, roles->term));
|
||||
roles = roles->next;
|
||||
if (roles != NULL)
|
||||
{
|
||||
printf(",");
|
||||
printf (",");
|
||||
}
|
||||
}
|
||||
printf(")");
|
||||
printf (")");
|
||||
}
|
||||
|
||||
//! Explain a violated claim at point i in the trace.
|
||||
@ -828,7 +834,7 @@ agentsOfRunPrint (const System sys, const int run)
|
||||
void
|
||||
violatedClaimPrint (const System sys, const int i)
|
||||
{
|
||||
printf("Claim stuk");
|
||||
printf ("Claim stuk");
|
||||
}
|
||||
|
||||
//! Yield the real length of an attack.
|
||||
@ -837,9 +843,10 @@ violatedClaimPrint (const System sys, const int i)
|
||||
* the redundant events but also the choose events.
|
||||
*/
|
||||
|
||||
int attackLength(struct tracebuf* tb)
|
||||
int
|
||||
attackLength (struct tracebuf *tb)
|
||||
{
|
||||
int len,i;
|
||||
int len, i;
|
||||
|
||||
len = 0;
|
||||
i = 0;
|
||||
@ -860,7 +867,7 @@ int attackLength(struct tracebuf* tb)
|
||||
}
|
||||
|
||||
void
|
||||
commandlinePrint (FILE *stream, const System sys)
|
||||
commandlinePrint (FILE * stream, const System sys)
|
||||
{
|
||||
/* print command line */
|
||||
int i;
|
||||
@ -870,7 +877,8 @@ commandlinePrint (FILE *stream, const System sys)
|
||||
}
|
||||
|
||||
//! Get the number of roles in the system.
|
||||
int compute_rolecount (const System sys)
|
||||
int
|
||||
compute_rolecount (const System sys)
|
||||
{
|
||||
Protocol pr;
|
||||
int n;
|
||||
@ -879,14 +887,15 @@ int compute_rolecount (const System sys)
|
||||
pr = sys->protocols;
|
||||
while (pr != NULL)
|
||||
{
|
||||
n = n + termlistLength(pr->rolenames);
|
||||
n = n + termlistLength (pr->rolenames);
|
||||
pr = pr->next;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
//! Compute the maximum number of events in a single role in the system.
|
||||
int compute_roleeventmax (const System sys)
|
||||
int
|
||||
compute_roleeventmax (const System sys)
|
||||
{
|
||||
Protocol pr;
|
||||
int maxev;
|
||||
@ -910,7 +919,8 @@ int compute_roleeventmax (const System sys)
|
||||
n++;
|
||||
rd = rd->next;
|
||||
}
|
||||
if (n > maxev) maxev = n;
|
||||
if (n > maxev)
|
||||
maxev = n;
|
||||
r = r->next;
|
||||
}
|
||||
pr = pr->next;
|
||||
|
@ -12,7 +12,8 @@
|
||||
#define runPointerGet(sys,run) sys->runs[run].index
|
||||
#define runPointerSet(sys,run,newp) sys->runs[run].index = newp
|
||||
|
||||
enum outputs { EMPTY, ATTACK, STATESPACE, SCENARIOS, SUMMARY };
|
||||
enum outputs
|
||||
{ EMPTY, ATTACK, STATESPACE, SCENARIOS, SUMMARY };
|
||||
|
||||
//! Protocol definition.
|
||||
struct protocol
|
||||
@ -180,7 +181,7 @@ struct system
|
||||
Constraintlist constraints; //!< Only needed for CLP match
|
||||
|
||||
//! Shortest attack storage.
|
||||
struct tracebuf* attack;
|
||||
struct tracebuf *attack;
|
||||
|
||||
//! Command line arguments
|
||||
int argc;
|
||||
@ -217,8 +218,8 @@ int untrustedAgent (const System sys, Termlist agents);
|
||||
int getMaxTraceLength (const System sys);
|
||||
void agentsOfRunPrint (const System sys, const int run);
|
||||
void violatedClaimPrint (const System sys, int i);
|
||||
int attackLength(struct tracebuf* tb);
|
||||
void commandlinePrint (FILE *stream, const System sys);
|
||||
int attackLength (struct tracebuf *tb);
|
||||
void commandlinePrint (FILE * stream, const System sys);
|
||||
|
||||
int compute_rolecount (const System sys);
|
||||
int compute_roleeventmax (const System sys);
|
||||
|
@ -7,7 +7,8 @@
|
||||
* TAC instructions
|
||||
*/
|
||||
|
||||
enum tactypes {
|
||||
enum tactypes
|
||||
{
|
||||
TAC_UNDEF,
|
||||
TAC_SYM,
|
||||
TAC_TUPLE,
|
||||
|
81
src/term.c
81
src/term.c
@ -159,22 +159,25 @@ hasTermVariable (Term term)
|
||||
else
|
||||
{
|
||||
if (realTermTuple (term))
|
||||
return (hasTermVariable (term->left.op1) || hasTermVariable (term->right.op2));
|
||||
return (hasTermVariable (term->left.op1)
|
||||
|| hasTermVariable (term->right.op2));
|
||||
else
|
||||
return (hasTermVariable (term->left.op) || hasTermVariable (term->right.key));
|
||||
return (hasTermVariable (term->left.op)
|
||||
|| hasTermVariable (term->right.key));
|
||||
}
|
||||
}
|
||||
|
||||
//! Safe wrapper for isTermEqual
|
||||
|
||||
int isTermEqualDebug (Term t1, Term t2)
|
||||
int
|
||||
isTermEqualDebug (Term t1, Term t2)
|
||||
{
|
||||
int test1, test2;
|
||||
|
||||
t1 = deVar (t1);
|
||||
t2 = deVar (t2);
|
||||
|
||||
test1 = isTermEqualFn (t1,t2);
|
||||
test1 = isTermEqualFn (t1, t2);
|
||||
if (!(realTermLeaf (t1) && realTermLeaf (t2)))
|
||||
{
|
||||
return test1;
|
||||
@ -218,7 +221,8 @@ isTermEqualFn (Term term1, Term term2)
|
||||
#ifdef DEBUG
|
||||
int test;
|
||||
|
||||
test = (term1->left.symb == term2->left.symb && term1->right.runid == term2->right.runid);
|
||||
test = (term1->left.symb == term2->left.symb
|
||||
&& term1->right.runid == term2->right.runid);
|
||||
if (test)
|
||||
{
|
||||
error ("Strange node equality detected, should not occur.");
|
||||
@ -267,7 +271,8 @@ termOccurs (Term t, Term tsub)
|
||||
if (realTermLeaf (t))
|
||||
return 0;
|
||||
if (realTermTuple (t))
|
||||
return (termOccurs (t->left.op1, tsub) || termOccurs (t->right.op2, tsub));
|
||||
return (termOccurs (t->left.op1, tsub)
|
||||
|| termOccurs (t->right.op2, tsub));
|
||||
else
|
||||
return (termOccurs (t->left.op, tsub) || termOccurs (t->right.key, tsub));
|
||||
}
|
||||
@ -319,7 +324,7 @@ termPrint (Term term)
|
||||
if (realTermTuple (term))
|
||||
{
|
||||
eprintf ("(");
|
||||
termTuplePrint(term);
|
||||
termTuplePrint (term);
|
||||
eprintf (")");
|
||||
return;
|
||||
}
|
||||
@ -370,15 +375,15 @@ termTuplePrint (Term term)
|
||||
eprintf ("Empty term");
|
||||
return;
|
||||
}
|
||||
term = deVar(term);
|
||||
term = deVar (term);
|
||||
while (realTermTuple (term))
|
||||
{
|
||||
// To remove any brackets, change this into termTuplePrint.
|
||||
termPrint (term->left.op1);
|
||||
eprintf (",");
|
||||
term = deVar(term->right.op2);
|
||||
term = deVar (term->right.op2);
|
||||
}
|
||||
termPrint(term);
|
||||
termPrint (term);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -709,27 +714,27 @@ tupleProject (Term tt, int n)
|
||||
*/
|
||||
|
||||
int
|
||||
termSize(Term t)
|
||||
termSize (Term t)
|
||||
{
|
||||
if (t == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
t = deVar(t);
|
||||
if (realTermLeaf(t))
|
||||
t = deVar (t);
|
||||
if (realTermLeaf (t))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (realTermEncrypt(t))
|
||||
if (realTermEncrypt (t))
|
||||
{
|
||||
return 1 + termSize(t->left.op) + termSize(t->right.key);
|
||||
return 1 + termSize (t->left.op) + termSize (t->right.key);
|
||||
}
|
||||
else
|
||||
{
|
||||
return termSize(t->left.op1) + termSize(t->right.op2);
|
||||
return termSize (t->left.op1) + termSize (t->right.op2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -741,20 +746,20 @@ termSize(Term t)
|
||||
*/
|
||||
|
||||
float
|
||||
termDistance(Term t1, Term t2)
|
||||
termDistance (Term t1, Term t2)
|
||||
{
|
||||
int t1s;
|
||||
int t2s;
|
||||
|
||||
/* First the special cases: no equal subterms, completely equal */
|
||||
if (isTermEqual(t1,t2))
|
||||
if (isTermEqual (t1, t2))
|
||||
return 1;
|
||||
|
||||
t1 = deVar(t1);
|
||||
t2 = deVar(t2);
|
||||
t1 = deVar (t1);
|
||||
t2 = deVar (t2);
|
||||
|
||||
t1s = termSize(t1);
|
||||
t2s = termSize(t2);
|
||||
t1s = termSize (t1);
|
||||
t2s = termSize (t2);
|
||||
|
||||
if (t1 == NULL || t2 == NULL)
|
||||
{
|
||||
@ -763,11 +768,11 @@ termDistance(Term t1, Term t2)
|
||||
if (t1->type != t2->type)
|
||||
{
|
||||
/* unequal type, maybe one is a subterm of the other? */
|
||||
if (t1s > t2s && termOccurs(t1,t2))
|
||||
if (t1s > t2s && termOccurs (t1, t2))
|
||||
{
|
||||
return (float) t2s / t1s;
|
||||
}
|
||||
if (t2s > t1s && termOccurs(t2,t1))
|
||||
if (t2s > t1s && termOccurs (t2, t1))
|
||||
{
|
||||
return (float) t1s / t2s;
|
||||
}
|
||||
@ -776,7 +781,7 @@ termDistance(Term t1, Term t2)
|
||||
else
|
||||
{
|
||||
/* equal types */
|
||||
if (isTermLeaf(t1))
|
||||
if (isTermLeaf (t1))
|
||||
{
|
||||
/* we had established before that they are not equal */
|
||||
return 0;
|
||||
@ -784,14 +789,16 @@ termDistance(Term t1, Term t2)
|
||||
else
|
||||
{
|
||||
/* non-leaf recurse */
|
||||
if (isTermEncrypt(t1))
|
||||
if (isTermEncrypt (t1))
|
||||
{
|
||||
/* encryption */
|
||||
return (termDistance(t1->left.op, t2->left.op) + termDistance(t1->right.key, t2->right.key)) / 2;
|
||||
return (termDistance (t1->left.op, t2->left.op) +
|
||||
termDistance (t1->right.key, t2->right.key)) / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (termDistance(t1->left.op1, t2->left.op1) + termDistance(t1->right.op2, t2->right.op2)) / 2;
|
||||
return (termDistance (t1->left.op1, t2->left.op1) +
|
||||
termDistance (t1->right.op2, t2->right.op2)) / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -801,14 +808,15 @@ termDistance(Term t1, Term t2)
|
||||
* Enforce a (arbitrary) ordering on terms
|
||||
* <0 means a<b, 0 means a=b, >0 means a>b.
|
||||
*/
|
||||
int termOrder (Term t1, Term t2)
|
||||
int
|
||||
termOrder (Term t1, Term t2)
|
||||
{
|
||||
char* name1;
|
||||
char* name2;
|
||||
char *name1;
|
||||
char *name2;
|
||||
|
||||
t1 = deVar (t1);
|
||||
t2 = deVar (t2);
|
||||
if (isTermEqual (t1,t2))
|
||||
if (isTermEqual (t1, t2))
|
||||
{
|
||||
/* equal terms */
|
||||
return 0;
|
||||
@ -832,9 +840,7 @@ int termOrder (Term t1, Term t2)
|
||||
/* compare names */
|
||||
int comp;
|
||||
|
||||
comp = strcmp (t1->left.symb->text,
|
||||
t2->left.symb->text
|
||||
);
|
||||
comp = strcmp (t1->left.symb->text, t2->left.symb->text);
|
||||
if (comp != 0)
|
||||
{
|
||||
/* names differ */
|
||||
@ -845,7 +851,8 @@ int termOrder (Term t1, Term t2)
|
||||
/* equal names, compare run identifiers */
|
||||
if (t1->right.runid == t2->right.runid)
|
||||
{
|
||||
error ("termOrder: two terms seem to be identical although local precondition says they aren't.");
|
||||
error
|
||||
("termOrder: two terms seem to be identical although local precondition says they aren't.");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -859,7 +866,7 @@ int termOrder (Term t1, Term t2)
|
||||
else
|
||||
{
|
||||
/* non-leaf */
|
||||
int compL,compR;
|
||||
int compL, compR;
|
||||
|
||||
if (isTermEncrypt (t1))
|
||||
{
|
||||
|
@ -4,7 +4,8 @@
|
||||
#include "symbol.h"
|
||||
|
||||
// type <= LEAF means it's a leaf, nkay?
|
||||
enum termtypes { GLOBAL, VARIABLE, LEAF, ENCRYPT, TUPLE };
|
||||
enum termtypes
|
||||
{ GLOBAL, VARIABLE, LEAF, ENCRYPT, TUPLE };
|
||||
|
||||
//! The most basic datatype in the modelchecker.
|
||||
/**
|
||||
@ -160,8 +161,8 @@ void termNormalize (Term term);
|
||||
Term termRunid (Term term, int runid);
|
||||
int tupleCount (Term tt);
|
||||
Term tupleProject (Term tt, int n);
|
||||
int termSize(Term t);
|
||||
float termDistance(Term t1, Term t2);
|
||||
int termSize (Term t);
|
||||
float termDistance (Term t1, Term t2);
|
||||
int termOrder (Term t1, Term t2);
|
||||
|
||||
#endif
|
||||
|
@ -361,7 +361,7 @@ termlistPrint (Termlist tl)
|
||||
termPrint (tl->term);
|
||||
tl = tl->next;
|
||||
if (tl != NULL)
|
||||
eprintf(", ");
|
||||
eprintf (", ");
|
||||
}
|
||||
eprintf ("]");
|
||||
}
|
||||
@ -394,7 +394,8 @@ termlistAddVariables (Termlist tl, Term t)
|
||||
t->right.key);
|
||||
else
|
||||
return
|
||||
termlistAddVariables (termlistAddVariables (tl, t->left.op1), t->right.op2);
|
||||
termlistAddVariables (termlistAddVariables (tl, t->left.op1),
|
||||
t->right.op2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -417,12 +418,12 @@ termlistAddRealVariables (Termlist tl, Term t)
|
||||
{
|
||||
Term tbuf = t->subst;
|
||||
t->subst = NULL;
|
||||
if (!inTermlist (tl,t))
|
||||
if (!inTermlist (tl, t))
|
||||
{
|
||||
tl = termlistAdd (tl,t);
|
||||
tl = termlistAdd (tl, t);
|
||||
}
|
||||
t->subst = tbuf;
|
||||
return termlistAddRealVariables (tl,t->subst);
|
||||
return termlistAddRealVariables (tl, t->subst);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -436,7 +437,8 @@ termlistAddRealVariables (Termlist tl, Term t)
|
||||
t->right.key);
|
||||
else
|
||||
return
|
||||
termlistAddVariables (termlistAddVariables (tl, t->left.op1), t->right.op2);
|
||||
termlistAddVariables (termlistAddVariables (tl, t->left.op1),
|
||||
t->right.op2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -455,9 +457,11 @@ termlistAddBasic (Termlist tl, Term t)
|
||||
if (!isTermLeaf (t))
|
||||
{
|
||||
if (isTermEncrypt (t))
|
||||
return termlistAddBasic (termlistAddBasic (tl, t->left.op), t->right.key);
|
||||
return termlistAddBasic (termlistAddBasic (tl, t->left.op),
|
||||
t->right.key);
|
||||
else
|
||||
return termlistAddBasic (termlistAddBasic (tl, t->left.op1), t->right.op2);
|
||||
return termlistAddBasic (termlistAddBasic (tl, t->left.op1),
|
||||
t->right.op2);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -622,13 +626,17 @@ termLocal (const Term t, Termlist fromlist, Termlist tolist,
|
||||
Term newt = termDuplicate (t);
|
||||
if (realTermTuple (t))
|
||||
{
|
||||
newt->left.op1 = termLocal (t->left.op1, fromlist, tolist, locals, runid);
|
||||
newt->right.op2 = termLocal (t->right.op2, fromlist, tolist, locals, runid);
|
||||
newt->left.op1 =
|
||||
termLocal (t->left.op1, fromlist, tolist, locals, runid);
|
||||
newt->right.op2 =
|
||||
termLocal (t->right.op2, fromlist, tolist, locals, runid);
|
||||
}
|
||||
else
|
||||
{
|
||||
newt->left.op = termLocal (t->left.op, fromlist, tolist, locals, runid);
|
||||
newt->right.key = termLocal (t->right.key, fromlist, tolist, locals, runid);
|
||||
newt->left.op =
|
||||
termLocal (t->left.op, fromlist, tolist, locals, runid);
|
||||
newt->right.key =
|
||||
termLocal (t->right.key, fromlist, tolist, locals, runid);
|
||||
}
|
||||
return newt;
|
||||
}
|
||||
@ -755,7 +763,8 @@ termlistForward (Termlist tl)
|
||||
/**
|
||||
* Compare two termlists containing only basic terms, and yield ordering.
|
||||
*/
|
||||
int termlistOrder (Termlist tl1, Termlist tl2)
|
||||
int
|
||||
termlistOrder (Termlist tl1, Termlist tl2)
|
||||
{
|
||||
int order;
|
||||
|
||||
@ -775,5 +784,3 @@ int termlistOrder (Termlist tl1, Termlist tl2)
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -107,7 +107,8 @@ termmapDelete (const Termmap f)
|
||||
}
|
||||
|
||||
//! Print a function
|
||||
void termmapPrint (Termmap f)
|
||||
void
|
||||
termmapPrint (Termmap f)
|
||||
{
|
||||
if (f != NULL)
|
||||
{
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
int
|
||||
tracebufRebuildKnow(struct tracebuf *tb)
|
||||
tracebufRebuildKnow (struct tracebuf *tb)
|
||||
{
|
||||
Knowledge k;
|
||||
Roledef rd;
|
||||
@ -31,7 +31,7 @@ tracebufRebuildKnow(struct tracebuf *tb)
|
||||
}
|
||||
|
||||
flag = -1;
|
||||
k = knowledgeDuplicate(tb->know[0]);
|
||||
k = knowledgeDuplicate (tb->know[0]);
|
||||
i = 0;
|
||||
while (i < tb->length)
|
||||
{
|
||||
@ -60,8 +60,8 @@ tracebufRebuildKnow(struct tracebuf *tb)
|
||||
}
|
||||
}
|
||||
/* write the new knowledge, overwriting old stuff */
|
||||
knowledgeDelete (tb->know[i+1]);
|
||||
tb->know[i+1] = knowledgeDuplicate (k);
|
||||
knowledgeDelete (tb->know[i + 1]);
|
||||
tb->know[i + 1] = knowledgeDuplicate (k);
|
||||
|
||||
i++;
|
||||
}
|
||||
@ -74,7 +74,7 @@ tracebufRebuildKnow(struct tracebuf *tb)
|
||||
}
|
||||
tl = tl->next;
|
||||
}
|
||||
knowledgeDelete(k);
|
||||
knowledgeDelete (k);
|
||||
return flag;
|
||||
}
|
||||
|
||||
@ -84,10 +84,11 @@ tracebufRebuildKnow(struct tracebuf *tb)
|
||||
* initializes the trace buffer.
|
||||
*/
|
||||
|
||||
struct tracebuf*
|
||||
struct tracebuf *
|
||||
tracebufInit (void)
|
||||
{
|
||||
struct tracebuf *tb = (struct tracebuf *) memAlloc(sizeof(struct tracebuf));
|
||||
struct tracebuf *tb =
|
||||
(struct tracebuf *) memAlloc (sizeof (struct tracebuf));
|
||||
tb->length = 0;
|
||||
tb->reallength = 0;
|
||||
tb->event = NULL;
|
||||
@ -118,28 +119,28 @@ tracebufDone (struct tracebuf *tb)
|
||||
|
||||
i = 0;
|
||||
/* note: knowledge domain is length+1 */
|
||||
knowledgeDelete(tb->know[0]);
|
||||
knowledgeDelete (tb->know[0]);
|
||||
while (i < tb->length)
|
||||
{
|
||||
rd = tb->event[i];
|
||||
termDelete (rd->from);
|
||||
termDelete (rd->to);
|
||||
termDelete (rd->message);
|
||||
roledefDelete(rd);
|
||||
knowledgeDelete(tb->know[i+1]);
|
||||
roledefDelete (rd);
|
||||
knowledgeDelete (tb->know[i + 1]);
|
||||
i++;
|
||||
}
|
||||
|
||||
memFree(tb->know, (i+1) * sizeof (struct knowledge*));
|
||||
memFree(tb->event, i * sizeof (struct roledef*));
|
||||
memFree(tb->run, i * sizeof(int));
|
||||
memFree(tb->status, i * sizeof(int));
|
||||
memFree(tb->link, i * sizeof(int));
|
||||
memFree (tb->know, (i + 1) * sizeof (struct knowledge *));
|
||||
memFree (tb->event, i * sizeof (struct roledef *));
|
||||
memFree (tb->run, i * sizeof (int));
|
||||
memFree (tb->status, i * sizeof (int));
|
||||
memFree (tb->link, i * sizeof (int));
|
||||
}
|
||||
memFree(tb, sizeof(tracebuf));
|
||||
memFree (tb, sizeof (tracebuf));
|
||||
}
|
||||
|
||||
struct tracebuf*
|
||||
struct tracebuf *
|
||||
tracebufSet (const System sys, int length, int claimev)
|
||||
{
|
||||
struct tracebuf *tb;
|
||||
@ -150,7 +151,7 @@ tracebufSet (const System sys, int length, int claimev)
|
||||
* any constant from the constraint for a variable.
|
||||
*/
|
||||
|
||||
tb = tracebufInit();
|
||||
tb = tracebufInit ();
|
||||
if (length == 0)
|
||||
{
|
||||
return tb;
|
||||
@ -158,11 +159,12 @@ tracebufSet (const System sys, int length, int claimev)
|
||||
tb->length = length;
|
||||
tb->reallength = length;
|
||||
tb->variables = (Varbuf) varbufInit (sys);
|
||||
tb->event = (Roledef *) memAlloc(length * sizeof(struct roledef*));
|
||||
tb->status = (int *) memAlloc(length * sizeof(int));
|
||||
tb->link = (int *) memAlloc(length * sizeof(int));
|
||||
tb->run = (int *) memAlloc(length * sizeof(int));
|
||||
tb->know = (Knowledge *) memAlloc((length + 1) * sizeof (struct knowledge*));
|
||||
tb->event = (Roledef *) memAlloc (length * sizeof (struct roledef *));
|
||||
tb->status = (int *) memAlloc (length * sizeof (int));
|
||||
tb->link = (int *) memAlloc (length * sizeof (int));
|
||||
tb->run = (int *) memAlloc (length * sizeof (int));
|
||||
tb->know =
|
||||
(Knowledge *) memAlloc ((length + 1) * sizeof (struct knowledge *));
|
||||
|
||||
/* when duplicating the knowledge, we want to instantiate the variables as well
|
||||
*/
|
||||
@ -175,8 +177,8 @@ tracebufSet (const System sys, int length, int claimev)
|
||||
rd = roledefDuplicate1 (sys->traceEvent[i]);
|
||||
if (rd == NULL)
|
||||
{
|
||||
printf("Empty event in trace at %i of %i?\n",i,length);
|
||||
exit(1);
|
||||
printf ("Empty event in trace at %i of %i?\n", i, length);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/* make a copy without variables */
|
||||
@ -188,7 +190,7 @@ tracebufSet (const System sys, int length, int claimev)
|
||||
tb->link[i] = -1;
|
||||
tb->status[i] = S_UNK;
|
||||
tb->run[i] = sys->traceRun[i];
|
||||
tb->know[i+1] = NULL;
|
||||
tb->know[i + 1] = NULL;
|
||||
i++;
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,8 @@
|
||||
#include "system.h"
|
||||
|
||||
/* STATUS symbols */
|
||||
enum statussymbols {
|
||||
enum statussymbols
|
||||
{
|
||||
S_UNK, // UNKnown : unprocessed.
|
||||
S_OKE, // OKE : done, but required for the attack.
|
||||
S_RED, // REDundant : is not needed for attack, we're sure.
|
||||
@ -19,10 +20,10 @@ enum statussymbols {
|
||||
* tracebuf struct is defined in system.h to avoid loops.
|
||||
*/
|
||||
|
||||
int tracebufRebuildKnow(struct tracebuf *tb);
|
||||
struct tracebuf* tracebufInit (void);
|
||||
int tracebufRebuildKnow (struct tracebuf *tb);
|
||||
struct tracebuf *tracebufInit (void);
|
||||
void tracebufDone (struct tracebuf *tb);
|
||||
struct tracebuf* tracebufSet (const System sys, int length, int claimev);
|
||||
struct tracebuf *tracebufSet (const System sys, int length, int claimev);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -19,14 +19,14 @@ varbufInit (const System sys)
|
||||
Termlist tl;
|
||||
Term termfrom, termto;
|
||||
|
||||
vb = (Varbuf) memAlloc(sizeof(struct varbuf));
|
||||
vb = (Varbuf) memAlloc (sizeof (struct varbuf));
|
||||
vb->from = NULL;
|
||||
vb->to = NULL;
|
||||
vb->empty = NULL;
|
||||
tl = sys->variables;
|
||||
while (tl != NULL)
|
||||
{
|
||||
if (realTermVariable(tl->term))
|
||||
if (realTermVariable (tl->term))
|
||||
{
|
||||
/* this is actually a variable */
|
||||
if (tl->term->subst == NULL)
|
||||
@ -87,8 +87,6 @@ varbufDone (Varbuf vb)
|
||||
termlistDelete (vb->from);
|
||||
termlistDelete (vb->to);
|
||||
termlistDelete (vb->empty);
|
||||
memFree(vb, sizeof(struct varbuf));
|
||||
memFree (vb, sizeof (struct varbuf));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user