@@ -54,11 +54,10 @@ module Base64Lemmas {
5454 requires Is1Padding (s[(|s| - 4).. ])
5555 ensures Encode (DecodeValid(s)) == s
5656 {
57+ DecodeValidEncode1PaddingHelper (s);
5758 calc {
5859 Encode (DecodeValid(s));
5960 ==
60- assert |DecodeValid (s)| % 3 == 2;
61- assert 2 <= |DecodeValid (s)|;
6261 EncodeUnpadded (DecodeValid(s)[.. (|DecodeValid (s)| - 2)]) + Encode1Padding (DecodeValid(s)[(|DecodeValid (s)| - 2).. ]);
6362 == { DecodeValidUnpaddedPartialFrom1PaddedSeq (s); }
6463 assert IsUnpaddedBase64String (s[..(|s| - 4)]) by {
@@ -76,6 +75,16 @@ module Base64Lemmas {
7675 }
7776 }
7877
78+ lemma DecodeValidEncode1PaddingHelper (s: seq <char >)
79+ requires IsBase64String (s)
80+ requires |s| >= 4
81+ requires Is1Padding (s[(|s| - 4).. ])
82+ {
83+ assert |DecodeValid (s)| % 3 == 2;
84+ assert 2 <= |DecodeValid (s)|;
85+ }
86+
87+
7988 lemma DecodeValidUnpaddedPartialFrom2PaddedSeq (s: seq <char >)
8089 requires IsBase64String (s)
8190 requires |s| >= 4
@@ -96,11 +105,10 @@ module Base64Lemmas {
96105 requires Is2Padding (s[(|s| - 4).. ])
97106 ensures Encode (DecodeValid(s)) == s
98107 {
108+ DecodeValid2PaddingPropertiesHelper (s);
99109 calc {
100110 Encode (DecodeValid(s));
101111 ==
102- assert |DecodeUnpadded (s[..|s|-4])| % 3 == 0;
103- assert |DecodeValid (s)| % 3 == 1;
104112 EncodeUnpadded (DecodeValid(s)[.. (|DecodeValid (s)| - 1)]) + Encode2Padding (DecodeValid(s)[(|DecodeValid (s)| - 1).. ]);
105113 == { DecodeValidUnpaddedPartialFrom2PaddedSeq (s); }
106114 EncodeUnpadded (DecodeUnpadded(s[..(|s| - 4)])) + Encode2Padding (DecodeValid(s)[(|DecodeValid (s)| - 1).. ]);
@@ -115,6 +123,15 @@ module Base64Lemmas {
115123 }
116124 }
117125
126+ lemma DecodeValid2PaddingPropertiesHelper (s: seq <char >)
127+ requires IsBase64String (s)
128+ requires |s| >= 4
129+ requires Is2Padding (s[(|s| - 4).. ])
130+ {
131+ assert |DecodeUnpadded (s[..|s|-4])| % 3 == 0;
132+ assert |DecodeValid (s)| % 3 == 1;
133+ }
134+
118135 lemma DecodeValidEncode (s: seq <char >)
119136 requires IsBase64String (s)
120137 ensures Encode (DecodeValid(s)) == s
0 commit comments