modexp := proc(message::nonnegint, expkey::nonnegint, modkey::nonnegint) description `modular exponentiation of message`; local result, wrk, rest, shift: result := 0: wrk := message: shift := 1: while wrk > 0 do rest := wrk mod modkey: result := (rest&^expkey mod modkey)*shift + result: wrk := (wrk - rest)/modkey: shift := shift*modkey: end do: return result: end proc: