Patch title: Release 94 bulk changes
Abstract:
File: /pliant/util/crypto/cipher.pli
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "rc4.pli"
module "random.pli"
module "/pliant/language/type/misc/blob.pli"

constant cipher_seed_bits 128
constant cipher_rc4_laps 100


function cipher clear password seed_bits laps -> ciphered
  arg Str clear password ; arg Int seed_bits laps ; arg Str ciphered
  if password=""
    return clear
  rc4_init (var RC4Ctx ctx) password laps
  ciphered := (random_string seed_bits\8)+clear
  rc4_cipher ctx ciphered:characters ciphered:characters ciphered:len

function cipher clear password -> ciphered
  arg Str clear password ciphered
  ciphered := cipher clear password cipher_seed_bits cipher_rc4_laps

function cipher clear password -> ciphered
  arg Blob clear ; arg Str password ; arg Blob ciphered
  addressof:ciphered map Str := cipher (addressof:clear map Str) password

function uncipher ciphered password seed_bits laps -> clear
  arg Str ciphered password ; arg Int seed_bits laps ; arg Str clear
  if password=""
    return ciphered
  rc4_init (var RC4Ctx ctx) password laps
  clear := ciphered
  rc4_cipher ctx clear:characters clear:characters clear:len
  clear := clear seed_bits\8 clear:len

function uncipher ciphered password -> clear
  arg Str ciphered password clear
  clear := uncipher ciphered password cipher_seed_bits cipher_rc4_laps

function uncipher ciphered password -> clear
  arg Blob ciphered ; arg Str password ; arg Blob clear
  addressof:clear map Str := uncipher (addressof:ciphered map Str) password

export cipher uncipher