Ha, this is neat, I haven't seen the permutation table presented this way before, good stuff.
permute:
; Rather than permuting the 32-bit words stored in the
; COMPRESS_MSG array, we permute the 8-bit pointers stored
; in the MPTRS array.
;
; The permutation is defined to be:
; 2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8
;
; If we walk those assignments, we get two loops:
; 0<-2<-3<-10<-12<-9<-11<-5<-0
; 1<-6<-4<-7<-13<-14<-15<-8<-1