ENCRYPT(3)                                             ENCRYPT(3)

     NAME
          encrypt, decrypt, netcrypt - DES encryption

     SYNOPSIS
          #include <u.h>
          #include <libc.h>

          int  encrypt(void *key, void *data, int len)

          int  decrypt(void *key, void *data, int len)

          int  netcrypt(void *key, void *data)

     DESCRIPTION
          Encrypt and decrypt perform DES encryption and decryption.
          Key is an array of DESKEYLEN (defined as 7 in <auth.h>)
          bytes containing the encryption key.  Data is an array of
          len bytes; it must be at least 8 bytes long.  The bytes are
          encrypted or decrypted in place.

          The DES algorithm encrypts an individual 8-byte block of
          data.  Encrypt uses the following method to encrypt data
          longer than 8 bytes.  The first 8 bytes are encrypted as
          usual.  The last byte of the encrypted result is prefixed to
          the next 7 unencrypted bytes to make the next 8 bytes to
          encrypt.  This is repeated until fewer than 7 bytes remain
          unencrypted.  Any remaining unencrypted bytes are encrypted
          with enough of the preceding encrypted bytes to make a full
          8-byte block.  Decrypt uses the inverse algorithm.

          Netcrypt performs the same encryption as a SecureNet Key.
          Data points to an ASCII string of decimal digits with
          numeric value between 0 and 10000.  These digits are copied
          into an 8-byte buffer with trailing binary zero fill and
          encrypted as one DES block.  The first four bytes are each
          formatted as two digit ASCII hexadecimal numbers, and the
          string is copied into data.

     SOURCE
          /src/lib9

     DIAGNOSTICS
          These routines return 1 if the data was encrypted, and 0 if
          the encryption fails.  Encrypt and decrypt fail if the data
          passed is less than 8 bytes long.  Netcrypt can fail if it
          is passed invalid data.

     BUGS
          The implementation is broken in a way that makes it unsuit-
          able for anything but authentication.

     ENCRYPT(3)                                             ENCRYPT(3)

          To avoid name conflicts with the underlying system, encrypt
          and decrypt are preprocessor macros defined as p9encrypt and
          p9decrypt; see intro(3).