Perform a sequence of full rounds.
(full-rounds stat constants alpha partial-first-p mds prime) → new-stat
The number of full rounds in the sequence is determined by the length of the list of lists of constants passed as input.
Function:
(defun full-rounds (stat constants alpha partial-first-p mds prime) (declare (xargs :guard (and (integerp alpha) (booleanp partial-first-p) (primep prime) (fe-listp stat prime) (fe-list-listp constants prime) (fe-list-listp mds prime)))) (declare (xargs :guard (and (all-len-equal-p constants (len stat)) (all-len-equal-p mds (len stat)) (equal (len mds) (len stat))))) (let ((__function__ 'full-rounds)) (declare (ignorable __function__)) (b* (((when (endp constants)) stat) (stat (round stat (car constants) alpha partial-first-p mds prime t))) (full-rounds stat (cdr constants) alpha partial-first-p mds prime))))
Theorem:
(defthm fe-listp-of-full-rounds (implies (and (primep prime) (fe-listp stat prime)) (b* ((new-stat (full-rounds stat constants alpha partial-first-p mds prime))) (fe-listp new-stat prime))) :rule-classes :rewrite)
Theorem:
(defthm len-of-full-rounds (implies (equal (len mds) (len stat)) (b* ((?new-stat (full-rounds stat constants alpha partial-first-p mds prime))) (equal (len new-stat) (len stat)))))