void encrypt(char block[64], int edflag);
#define _XOPEN_SOURCE
#include <stdlib.h>
void setkey(const char *key);
#define _GNU_SOURCE
#include <crypt.h>
void setkey_r(const char *key, struct crypt_data *data);
void encrypt_r(char *block, int edflag, struct crypt_data *data);
encrypt() 関数は、 edflag が 0 の場合は暗号化し、1 が渡された場合は復号化するというように、 渡されたバッファを変更する。 引き数 key と同様に、 block はエンコードされた実際の値を表現するビットの配列である。 結果はこの同じ配列を使って返される。
これら 2 つの関数はリエントラント (reentrant) ではない。 つまり暗号鍵データは静的な領域に保存される。 関数 setkey_r() と encrypt_r() はリエントラントなバージョンである。 これらの関数は暗号鍵データを保持するために以下のような構造体を使う。
struct crypt_data {
    char     keysched[16 * 8];
    char     sb0[32768];
    char     sb1[32768];
    char     sb2[32768];
    char     sb3[32768];
    char     crypt_3_buf[14];
    char     current_salt[2];
    long int current_saltbits;
    int      direction;
    int      initialized;
};
setkey_r() を呼び出す前には、 data->initialized を 0 に設定すること。
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdlib.h>
int
main(void)
{
    char key[64];      /* bit pattern for key */
    char txt[64];      /* bit pattern for messages */
    setkey(key);
    encrypt(txt, 0);   /* encode */
    encrypt(txt, 1);   /* decode */
}