@@ -6,7 +6,8 @@ import . "dh-gobra/library"
66//@ import ft "dh-gobra/verification/fact"
77//@ import pl "dh-gobra/verification/place"
88//@ import io "dh-gobra/verification/iospec"
9- //@ import tm "dh-gobra/verification/util"
9+ //@ import tm "dh-gobra/verification/utilterm"
10+ //@ import ay "dh-gobra/verification/utilbytes"
1011//@ import am "dh-gobra/verification/term"
1112//@ import p "dh-gobra/verification/pattern"
1213//@ import pub "dh-gobra/verification/pub"
@@ -27,13 +28,15 @@ pred (i *Initiator) Mem(skAT, skBT tm.Term) {
2728}
2829
2930ghost
31+ decreases
3032requires acc(i.Mem(skAT, skBT), _)
3133pure
3234func (i *Initiator) getIdA(skAT, skBT tm.Term) uint32 {
3335 return unfolding acc(i.Mem(skAT, skBT), _) in i.idA
3436}
3537
3638ghost
39+ decreases
3740requires acc(i.Mem(skAT, skBT), _)
3841pure
3942func (i *Initiator) getIdB(skAT, skBT tm.Term) uint32 {
@@ -43,14 +46,14 @@ func (i *Initiator) getIdB(skAT, skBT tm.Term) uint32 {
4346
4447//@ requires l.Mem()
4548//@ requires pl.token(t) && io.P_Alice(t, am.freshTerm(fresh.fr_integer32(rid)), mset[ft.Fact]{})
46- //@ requires rid != 0 && rid != 1
49+ //@ requires rid < 0 || 2 < rid
4750//@ ensures l.Mem()
4851func RunInitiator (l * LibState , rid uint32 /*@, ghost t pl.Place @*/ ) (err error ) {
4952 //@ ridT := tm.integer32(rid)
5053 //@ s := mset[ft.Fact]{}
5154
5255 //@ unfold io.P_Alice(t, ridT, s)
53- //@ unfold io.phiRF_Alice_5 (t, ridT, s)
56+ //@ unfold io.phiRF_Alice_7 (t, ridT, s)
5457 //@ assert acc(io.e_Setup_Alice(t, ridT))
5558 //@ skAT := io.get_e_Setup_Alice_r3(t, ridT)
5659 //@ skBT := io.get_e_Setup_Alice_r4(t, ridT)
@@ -74,7 +77,7 @@ func RunInitiator(l *LibState, rid uint32 /*@, ghost t pl.Place @*/) (err error)
7477
7578 // create x
7679 //@ unfold io.P_Alice(t1, ridT, s1)
77- //@ unfold io.phiRF_Alice_3 (t1, ridT, s1)
80+ //@ unfold io.phiRF_Alice_5 (t1, ridT, s1)
7881 //@ assert acc(io.e_FrFact(t1, ridT))
7982 //@ xT := io.get_e_FrFact_r1(t1, ridT)
8083 var x []byte
@@ -170,7 +173,7 @@ func (i *Initiator) sendMsg1(X []byte /*@, ghost skAT tm.Term, ghost skBT tm.Ter
170173 }
171174
172175 //@ unfold io.P_Alice(t1, ridT, s1)
173- //@ unfold io.phiRG_Alice_2 (t1, ridT, s1)
176+ //@ unfold io.phiRG_Alice_4 (t1, ridT, s1)
174177 //@ assert io.e_OutFact(t1, ridT, XT)
175178 err /*@, t1 @*/ = i .l .Send (msg1Data /*@, t1, ridT, XT @*/ )
176179 //@ s1 = s1 setminus mset[ft.Fact]{ ft.OutFact_Alice(ridT, XT) }
@@ -190,7 +193,7 @@ func (i *Initiator) sendMsg1(X []byte /*@, ghost skAT tm.Term, ghost skBT tm.Ter
190193func (i * Initiator ) recvMsg2 (X []byte , /*@ ghost skAT tm.Term, ghost skBT tm.Term, ghost xT tm.Term, ghost t pl.Place, ghost ridT tm.Term, ghost s mset[ft.Fact] @*/ ) (receivedY []byte , err error /*@, ghost YT tm.Term, ghost t1 pl.Place, ghost s1 mset[ft.Fact] @*/ ) {
191194 //@ unfold acc(i.Mem(skAT, skBT), 1/2)
192195 //@ unfold io.P_Alice(t, ridT, s)
193- //@ unfold io.phiRF_Alice_4 (t, ridT, s)
196+ //@ unfold io.phiRF_Alice_6 (t, ridT, s)
194197 //@ assert io.e_InFact(t, ridT)
195198 var signedMsg2 []byte
196199 //@ ghost var msg2T tm.Term
@@ -232,8 +235,9 @@ func (i *Initiator) recvMsg2(X []byte, /*@ ghost skAT tm.Term, ghost skBT tm.Ter
232235 //@ idBT := tm.integer32(i.getIdB(skAT, skBT))
233236 //@ XT := tm.exp(tm.generator(), xT)
234237 //@ YT := p.patternRequirement2(ridT, idAT, idBT, skAT, skBT, xT, by.oneTerm(Abs(receivedY)), msg2T, t1, s1)
235- // the following assert stmt is needed for triggering reasons:
236- //@ assert by.getMsgB(Abs(signedMsg2)) == Abs(msg2Data)
238+ // the following 2 assert stmts are needed for triggering reasons:
239+ //@ assert ay.getMsgB(Abs(signedMsg2)) == Abs(msg2Data)
240+ //@ assert by.ex55B(Abs(msg2Data)) == Abs(receivedY)
237241 //@ assert Abs(receivedY) == by.gamma(YT)
238242
239243 //@ unfold io.P_Alice(t1, ridT, s1)
@@ -246,7 +250,8 @@ func (i *Initiator) recvMsg2(X []byte, /*@ ghost skAT tm.Term, ghost skBT tm.Ter
246250 cl.IN_ALICE(YT, tm.tuple5(tm.integer32(Msg2Tag), idBT, idAT, XT, YT)),
247251 cl.Secret(idAT, idBT, tm.exp(YT, xT)),
248252 cl.Running(tm.idR(), tm.idI(), tm.tuple3(idAT, idBT, tm.exp(YT, xT))),
249- cl.Commit(tm.idI(), tm.idR(), tm.tuple3(idAT, idBT, tm.exp(YT, xT))) }
253+ cl.Commit(tm.idI(), tm.idR(), tm.tuple3(idAT, idBT, tm.exp(YT, xT))),
254+ cl.AliceHsDone(tm.exp(YT, xT)) }
250255 r := mset[ft.Fact]{ ft.St_Alice_2(ridT, idAT, idBT, skAT, skBT, xT, YT),
251256 ft.OutFact_Alice(ridT, msg3T) }
252257 @*/
@@ -287,7 +292,7 @@ func (i *Initiator) sendMsg3(X, receivedY []byte /*@, ghost skAT tm.Term, ghost
287292 //@ XT := tm.exp(tm.generator(), xT)
288293 //@ msgT := tm.sign(tm.tuple5(tm.integer32(Msg3Tag), idAT, idBT, YT, XT), skAT)
289294 //@ unfold io.P_Alice(t, ridT, s)
290- //@ unfold io.phiRG_Alice_2 (t, ridT, s)
295+ //@ unfold io.phiRG_Alice_4 (t, ridT, s)
291296 //@ assert acc(io.e_OutFact(t, ridT, msgT))
292297 err /*@, t1 @*/ = i .l .Send (signedMsg3 /*@, t, ridT, msgT @*/ )
293298 //@ s1 = s setminus mset[ft.Fact]{ ft.OutFact_Alice(ridT, msgT) }
0 commit comments