/*
 * This version has been further modified by Rich Felker, primary author
 * and maintainer of musl libc, to remove table generation code and
 * replaced all runtime-generated constant tables with static-initialized
 * tables in the binary, in the interest of minimizing non-shareable
 * memory usage and stack size requirements.
 */
/*
 * This version is derived from the original implementation of FreeSec
 * (release 1.1) by David Burren.  I've made it reentrant, reduced its memory
 * usage from about 70 KB to about 7 KB (with only minimal performance impact
 * and keeping code size about the same), made the handling of invalid salts
 * mostly UFC-crypt compatible, added a quick runtime self-test (which also
 * serves to zeroize the stack from sensitive data), and added optional tests.
 * - Solar Designer <solar at openwall.com>
 */

/*
 * FreeSec: libcrypt for NetBSD
 *
 * Copyright (c) 1994 David Burren
 * Copyright (c) 2000,2002,2010,2012 Solar Designer
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the author nor the names of other contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *      $Owl: Owl/packages/glibc/crypt_freesec.c,v 1.6 2010/02/20 14:45:06 solar
 *Exp $
 *      $Id: crypt.c,v 1.15 1994/09/13 04:58:49 davidb Exp $
 *
 * This is an original implementation of the DES and the crypt(3) interfaces
 * by David Burren.  It has been heavily re-worked by Solar Designer.
 */

#include <stdint.h>
#include <string.h>

struct expanded_key {
  uint32_t l[16], r[16];
};

#define _PASSWORD_EFMT1 '_'

static const unsigned char key_shifts[16] = {1, 1, 2, 2, 2, 2, 2, 2,
                                             1, 2, 2, 2, 2, 2, 2, 1};

static const uint32_t psbox[8][64] = {
    {
        0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202,
        0x00000002, 0x00008000, 0x00000200, 0x00808200, 0x00808202, 0x00000200,
        0x00800202, 0x00808002, 0x00800000, 0x00000002, 0x00000202, 0x00800200,
        0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202,
        0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202,
        0x00008202, 0x00800000, 0x00008000, 0x00808202, 0x00000002, 0x00808000,
        0x00808200, 0x00800000, 0x00800000, 0x00000200, 0x00808002, 0x00008000,
        0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202,
        0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202,
        0x00008202, 0x00808200, 0x00000202, 0x00800200, 0x00800200, 0x00000000,
        0x00008002, 0x00008200, 0x00000000, 0x00808002,
    },
    {
        0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010,
        0x40080010, 0x40004010, 0x40000010, 0x40084010, 0x40084000, 0x40000000,
        0x40004000, 0x00080000, 0x00000010, 0x40080010, 0x00084000, 0x00080010,
        0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000,
        0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000,
        0x40080000, 0x00004010, 0x00000000, 0x00084010, 0x40080010, 0x00080000,
        0x40004010, 0x40080000, 0x40084000, 0x00004000, 0x40080000, 0x40004000,
        0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000,
        0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010,
        0x40000010, 0x00080010, 0x00084000, 0x00000000, 0x40004000, 0x00004010,
        0x40000000, 0x40080010, 0x40084010, 0x00084000,
    },
    {
        0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000,
        0x00010104, 0x04000100, 0x00010004, 0x04000004, 0x04000004, 0x00010000,
        0x04010104, 0x00010004, 0x04010000, 0x00000104, 0x04000000, 0x00000004,
        0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104,
        0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104,
        0x00000100, 0x04000000, 0x04010100, 0x04000000, 0x00010004, 0x00000104,
        0x00010000, 0x04010100, 0x04000100, 0x00000000, 0x00000100, 0x00010004,
        0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004,
        0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104,
        0x00010100, 0x04000004, 0x04010000, 0x04000104, 0x00000104, 0x04010000,
        0x00010104, 0x00000004, 0x04010004, 0x00010100,
    },
    {
        0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040,
        0x80400000, 0x80001000, 0x00000000, 0x00401000, 0x00401000, 0x80401040,
        0x80000040, 0x00000000, 0x00400040, 0x80400000, 0x80000000, 0x00001000,
        0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040,
        0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040,
        0x80401040, 0x80000040, 0x00400040, 0x80400000, 0x00401000, 0x80401040,
        0x80000040, 0x00000000, 0x00000000, 0x00401000, 0x00001040, 0x00400040,
        0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040,
        0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000,
        0x00401040, 0x80400040, 0x80001000, 0x00001040, 0x00400000, 0x80401000,
        0x00000040, 0x00400000, 0x00001000, 0x00401040,
    },
    {
        0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080,
        0x20000000, 0x01040000, 0x20040080, 0x00040000, 0x01000080, 0x20040080,
        0x21000080, 0x21040000, 0x00040080, 0x20000000, 0x01000000, 0x20040000,
        0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080,
        0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000,
        0x21000000, 0x00040080, 0x00040000, 0x21000080, 0x00000080, 0x01000000,
        0x20000000, 0x01040000, 0x21000080, 0x20040080, 0x01000080, 0x20000000,
        0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000,
        0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000,
        0x20040000, 0x21000000, 0x00040080, 0x01000080, 0x20000080, 0x00040000,
        0x00000000, 0x20040000, 0x01040080, 0x20000080,
    },
    {
        0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008,
        0x10202008, 0x00200000, 0x10002000, 0x00202008, 0x00200000, 0x10000008,
        0x00200008, 0x10002000, 0x10000000, 0x00002008, 0x00000000, 0x00200008,
        0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008,
        0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000,
        0x10202000, 0x10000000, 0x10002000, 0x00000008, 0x10200008, 0x00202000,
        0x10202008, 0x00200000, 0x00002008, 0x10000008, 0x00200000, 0x10002000,
        0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000,
        0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000,
        0x10200000, 0x00202008, 0x00002000, 0x00200008, 0x10002008, 0x00000000,
        0x10202000, 0x10000000, 0x00200008, 0x10002008,
    },
    {
        0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401,
        0x00100401, 0x02100400, 0x02100401, 0x00100000, 0x00000000, 0x02000001,
        0x00000001, 0x02000000, 0x02100001, 0x00000401, 0x02000400, 0x00100401,
        0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001,
        0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001,
        0x02000000, 0x00100400, 0x02000000, 0x00100400, 0x00100000, 0x02000401,
        0x02000401, 0x02100001, 0x02100001, 0x00000001, 0x00100001, 0x02000000,
        0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400,
        0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000,
        0x00000001, 0x02100401, 0x00000000, 0x00100401, 0x02100000, 0x00000400,
        0x02000001, 0x02000400, 0x00000400, 0x00100001,
    },
    {
        0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820,
        0x00000020, 0x08000000, 0x00020020, 0x08020000, 0x08020820, 0x00020800,
        0x08020800, 0x00020820, 0x00000800, 0x00000020, 0x08020000, 0x08000020,
        0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800,
        0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800,
        0x00020820, 0x00020000, 0x00020820, 0x00020000, 0x08020800, 0x00000800,
        0x00000020, 0x08020020, 0x00000800, 0x00020820, 0x08000800, 0x00000020,
        0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820,
        0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800,
        0x08000820, 0x00000000, 0x08020820, 0x00020800, 0x00020800, 0x00000820,
        0x00000820, 0x00020020, 0x08000000, 0x08020800,
    },
};
static const uint32_t ip_maskl[16][16] = {
    {
        0x00000000, 0x00010000, 0x00000000, 0x00010000, 0x01000000, 0x01010000,
        0x01000000, 0x01010000, 0x00000000, 0x00010000, 0x00000000, 0x00010000,
        0x01000000, 0x01010000, 0x01000000, 0x01010000,
    },
    {
        0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000100, 0x00000101,
        0x00000100, 0x00000101, 0x00000000, 0x00000001, 0x00000000, 0x00000001,
        0x00000100, 0x00000101, 0x00000100, 0x00000101,
    },
    {
        0x00000000, 0x00020000, 0x00000000, 0x00020000, 0x02000000, 0x02020000,
        0x02000000, 0x02020000, 0x00000000, 0x00020000, 0x00000000, 0x00020000,
        0x02000000, 0x02020000, 0x02000000, 0x02020000,
    },
    {
        0x00000000, 0x00000002, 0x00000000, 0x00000002, 0x00000200, 0x00000202,
        0x00000200, 0x00000202, 0x00000000, 0x00000002, 0x00000000, 0x00000002,
        0x00000200, 0x00000202, 0x00000200, 0x00000202,
    },
    {
        0x00000000, 0x00040000, 0x00000000, 0x00040000, 0x04000000, 0x04040000,
        0x04000000, 0x04040000, 0x00000000, 0x00040000, 0x00000000, 0x00040000,
        0x04000000, 0x04040000, 0x04000000, 0x04040000,
    },
    {
        0x00000000, 0x00000004, 0x00000000, 0x00000004, 0x00000400, 0x00000404,
        0x00000400, 0x00000404, 0x00000000, 0x00000004, 0x00000000, 0x00000004,
        0x00000400, 0x00000404, 0x00000400, 0x00000404,
    },
    {
        0x00000000, 0x00080000, 0x00000000, 0x00080000, 0x08000000, 0x08080000,
        0x08000000, 0x08080000, 0x00000000, 0x00080000, 0x00000000, 0x00080000,
        0x08000000, 0x08080000, 0x08000000, 0x08080000,
    },
    {
        0x00000000, 0x00000008, 0x00000000, 0x00000008, 0x00000800, 0x00000808,
        0x00000800, 0x00000808, 0x00000000, 0x00000008, 0x00000000, 0x00000008,
        0x00000800, 0x00000808, 0x00000800, 0x00000808,
    },
    {
        0x00000000, 0x00100000, 0x00000000, 0x00100000, 0x10000000, 0x10100000,
        0x10000000, 0x10100000, 0x00000000, 0x00100000, 0x00000000, 0x00100000,
        0x10000000, 0x10100000, 0x10000000, 0x10100000,
    },
    {
        0x00000000, 0x00000010, 0x00000000, 0x00000010, 0x00001000, 0x00001010,
        0x00001000, 0x00001010, 0x00000000, 0x00000010, 0x00000000, 0x00000010,
        0x00001000, 0x00001010, 0x00001000, 0x00001010,
    },
    {
        0x00000000, 0x00200000, 0x00000000, 0x00200000, 0x20000000, 0x20200000,
        0x20000000, 0x20200000, 0x00000000, 0x00200000, 0x00000000, 0x00200000,
        0x20000000, 0x20200000, 0x20000000, 0x20200000,
    },
    {
        0x00000000, 0x00000020, 0x00000000, 0x00000020, 0x00002000, 0x00002020,
        0x00002000, 0x00002020, 0x00000000, 0x00000020, 0x00000000, 0x00000020,
        0x00002000, 0x00002020, 0x00002000, 0x00002020,
    },
    {
        0x00000000, 0x00400000, 0x00000000, 0x00400000, 0x40000000, 0x40400000,
        0x40000000, 0x40400000, 0x00000000, 0x00400000, 0x00000000, 0x00400000,
        0x40000000, 0x40400000, 0x40000000, 0x40400000,
    },
    {
        0x00000000, 0x00000040, 0x00000000, 0x00000040, 0x00004000, 0x00004040,
        0x00004000, 0x00004040, 0x00000000, 0x00000040, 0x00000000, 0x00000040,
        0x00004000, 0x00004040, 0x00004000, 0x00004040,
    },
    {
        0x00000000, 0x00800000, 0x00000000, 0x00800000, 0x80000000, 0x80800000,
        0x80000000, 0x80800000, 0x00000000, 0x00800000, 0x00000000, 0x00800000,
        0x80000000, 0x80800000, 0x80000000, 0x80800000,
    },
    {
        0x00000000, 0x00000080, 0x00000000, 0x00000080, 0x00008000, 0x00008080,
        0x00008000, 0x00008080, 0x00000000, 0x00000080, 0x00000000, 0x00000080,
        0x00008000, 0x00008080, 0x00008000, 0x00008080,
    },
};
static const uint32_t ip_maskr[16][16] = {
    {
        0x00000000, 0x00000000, 0x00010000, 0x00010000, 0x00000000, 0x00000000,
        0x00010000, 0x00010000, 0x01000000, 0x01000000, 0x01010000, 0x01010000,
        0x01000000, 0x01000000, 0x01010000, 0x01010000,
    },
    {
        0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000,
        0x00000001, 0x00000001, 0x00000100, 0x00000100, 0x00000101, 0x00000101,
        0x00000100, 0x00000100, 0x00000101, 0x00000101,
    },
    {
        0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000000, 0x00000000,
        0x00020000, 0x00020000, 0x02000000, 0x02000000, 0x02020000, 0x02020000,
        0x02000000, 0x02000000, 0x02020000, 0x02020000,
    },
    {
        0x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000000,
        0x00000002, 0x00000002, 0x00000200, 0x00000200, 0x00000202, 0x00000202,
        0x00000200, 0x00000200, 0x00000202, 0x00000202,
    },
    {
        0x00000000, 0x00000000, 0x00040000, 0x00040000, 0x00000000, 0x00000000,
        0x00040000, 0x00040000, 0x04000000, 0x04000000, 0x04040000, 0x04040000,
        0x04000000, 0x04000000, 0x04040000, 0x04040000,
    },
    {
        0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x00000000, 0x00000000,
        0x00000004, 0x00000004, 0x00000400, 0x00000400, 0x00000404, 0x00000404,
        0x00000400, 0x00000400, 0x00000404, 0x00000404,
    },
    {
        0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x00000000, 0x00000000,
        0x00080000, 0x00080000, 0x08000000, 0x08000000, 0x08080000, 0x08080000,
        0x08000000, 0x08000000, 0x08080000, 0x08080000,
    },
    {
        0x00000000, 0x00000000, 0x00000008, 0x00000008, 0x00000000, 0x00000000,
        0x00000008, 0x00000008, 0x00000800, 0x00000800, 0x00000808, 0x00000808,
        0x00000800, 0x00000800, 0x00000808, 0x00000808,
    },
    {
        0x00000000, 0x00000000, 0x00100000, 0x00100000, 0x00000000, 0x00000000,
        0x00100000, 0x00100000, 0x10000000, 0x10000000, 0x10100000, 0x10100000,
        0x10000000, 0x10000000, 0x10100000, 0x10100000,
    },
    {
        0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000000, 0x00000000,
        0x00000010, 0x00000010, 0x00001000, 0x00001000, 0x00001010, 0x00001010,
        0x00001000, 0x00001000, 0x00001010, 0x00001010,
    },
    {
        0x00000000, 0x00000000, 0x00200000, 0x00200000, 0x00000000, 0x00000000,
        0x00200000, 0x00200000, 0x20000000, 0x20000000, 0x20200000, 0x20200000,
        0x20000000, 0x20000000, 0x20200000, 0x20200000,
    },
    {
        0x00000000, 0x00000000, 0x00000020, 0x00000020, 0x00000000, 0x00000000,
        0x00000020, 0x00000020, 0x00002000, 0x00002000, 0x00002020, 0x00002020,
        0x00002000, 0x00002000, 0x00002020, 0x00002020,
    },
    {
        0x00000000, 0x00000000, 0x00400000, 0x00400000, 0x00000000, 0x00000000,
        0x00400000, 0x00400000, 0x40000000, 0x40000000, 0x40400000, 0x40400000,
        0x40000000, 0x40000000, 0x40400000, 0x40400000,
    },
    {
        0x00000000, 0x00000000, 0x00000040, 0x00000040, 0x00000000, 0x00000000,
        0x00000040, 0x00000040, 0x00004000, 0x00004000, 0x00004040, 0x00004040,
        0x00004000, 0x00004000, 0x00004040, 0x00004040,
    },
    {
        0x00000000, 0x00000000, 0x00800000, 0x00800000, 0x00000000, 0x00000000,
        0x00800000, 0x00800000, 0x80000000, 0x80000000, 0x80800000, 0x80800000,
        0x80000000, 0x80000000, 0x80800000, 0x80800000,
    },
    {
        0x00000000, 0x00000000, 0x00000080, 0x00000080, 0x00000000, 0x00000000,
        0x00000080, 0x00000080, 0x00008000, 0x00008000, 0x00008080, 0x00008080,
        0x00008000, 0x00008000, 0x00008080, 0x00008080,
    },
};
static const uint32_t fp_maskl[8][16] = {
    {
        0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00004000, 0x40004000,
        0x00404000, 0x40404000, 0x00000040, 0x40000040, 0x00400040, 0x40400040,
        0x00004040, 0x40004040, 0x00404040, 0x40404040,
    },
    {
        0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00001000, 0x10001000,
        0x00101000, 0x10101000, 0x00000010, 0x10000010, 0x00100010, 0x10100010,
        0x00001010, 0x10001010, 0x00101010, 0x10101010,
    },
    {
        0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00000400, 0x04000400,
        0x00040400, 0x04040400, 0x00000004, 0x04000004, 0x00040004, 0x04040004,
        0x00000404, 0x04000404, 0x00040404, 0x04040404,
    },
    {
        0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100,
        0x00010100, 0x01010100, 0x00000001, 0x01000001, 0x00010001, 0x01010001,
        0x00000101, 0x01000101, 0x00010101, 0x01010101,
    },
    {
        0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00008000, 0x80008000,
        0x00808000, 0x80808000, 0x00000080, 0x80000080, 0x00800080, 0x80800080,
        0x00008080, 0x80008080, 0x00808080, 0x80808080,
    },
    {
        0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00002000, 0x20002000,
        0x00202000, 0x20202000, 0x00000020, 0x20000020, 0x00200020, 0x20200020,
        0x00002020, 0x20002020, 0x00202020, 0x20202020,
    },
    {
        0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00000800, 0x08000800,
        0x00080800, 0x08080800, 0x00000008, 0x08000008, 0x00080008, 0x08080008,
        0x00000808, 0x08000808, 0x00080808, 0x08080808,
    },
    {
        0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00000200, 0x02000200,
        0x00020200, 0x02020200, 0x00000002, 0x02000002, 0x00020002, 0x02020002,
        0x00000202, 0x02000202, 0x00020202, 0x02020202,
    },
};
static const uint32_t fp_maskr[8][16] = {
    {
        0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00004000, 0x40004000,
        0x00404000, 0x40404000, 0x00000040, 0x40000040, 0x00400040, 0x40400040,
        0x00004040, 0x40004040, 0x00404040, 0x40404040,
    },
    {
        0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00001000, 0x10001000,
        0x00101000, 0x10101000, 0x00000010, 0x10000010, 0x00100010, 0x10100010,
        0x00001010, 0x10001010, 0x00101010, 0x10101010,
    },
    {
        0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00000400, 0x04000400,
        0x00040400, 0x04040400, 0x00000004, 0x04000004, 0x00040004, 0x04040004,
        0x00000404, 0x04000404, 0x00040404, 0x04040404,
    },
    {
        0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100,
        0x00010100, 0x01010100, 0x00000001, 0x01000001, 0x00010001, 0x01010001,
        0x00000101, 0x01000101, 0x00010101, 0x01010101,
    },
    {
        0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00008000, 0x80008000,
        0x00808000, 0x80808000, 0x00000080, 0x80000080, 0x00800080, 0x80800080,
        0x00008080, 0x80008080, 0x00808080, 0x80808080,
    },
    {
        0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00002000, 0x20002000,
        0x00202000, 0x20202000, 0x00000020, 0x20000020, 0x00200020, 0x20200020,
        0x00002020, 0x20002020, 0x00202020, 0x20202020,
    },
    {
        0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00000800, 0x08000800,
        0x00080800, 0x08080800, 0x00000008, 0x08000008, 0x00080008, 0x08080008,
        0x00000808, 0x08000808, 0x00080808, 0x08080808,
    },
    {
        0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00000200, 0x02000200,
        0x00020200, 0x02020200, 0x00000002, 0x02000002, 0x00020002, 0x02020002,
        0x00000202, 0x02000202, 0x00020202, 0x02020202,
    },
};
static const uint32_t key_perm_maskl[8][16] = {
    {
        0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00001000, 0x00001000,
        0x00001010, 0x00001010, 0x00100000, 0x00100000, 0x00100010, 0x00100010,
        0x00101000, 0x00101000, 0x00101010, 0x00101010,
    },
    {
        0x00000000, 0x00000000, 0x00000020, 0x00000020, 0x00002000, 0x00002000,
        0x00002020, 0x00002020, 0x00200000, 0x00200000, 0x00200020, 0x00200020,
        0x00202000, 0x00202000, 0x00202020, 0x00202020,
    },
    {
        0x00000000, 0x00000000, 0x00000040, 0x00000040, 0x00004000, 0x00004000,
        0x00004040, 0x00004040, 0x00400000, 0x00400000, 0x00400040, 0x00400040,
        0x00404000, 0x00404000, 0x00404040, 0x00404040,
    },
    {
        0x00000000, 0x00000000, 0x00000080, 0x00000080, 0x00008000, 0x00008000,
        0x00008080, 0x00008080, 0x00800000, 0x00800000, 0x00800080, 0x00800080,
        0x00808000, 0x00808000, 0x00808080, 0x00808080,
    },
    {
        0x00000000, 0x00000001, 0x00000100, 0x00000101, 0x00010000, 0x00010001,
        0x00010100, 0x00010101, 0x01000000, 0x01000001, 0x01000100, 0x01000101,
        0x01010000, 0x01010001, 0x01010100, 0x01010101,
    },
    {
        0x00000000, 0x00000002, 0x00000200, 0x00000202, 0x00020000, 0x00020002,
        0x00020200, 0x00020202, 0x02000000, 0x02000002, 0x02000200, 0x02000202,
        0x02020000, 0x02020002, 0x02020200, 0x02020202,
    },
    {
        0x00000000, 0x00000004, 0x00000400, 0x00000404, 0x00040000, 0x00040004,
        0x00040400, 0x00040404, 0x04000000, 0x04000004, 0x04000400, 0x04000404,
        0x04040000, 0x04040004, 0x04040400, 0x04040404,
    },
    {
        0x00000000, 0x00000008, 0x00000800, 0x00000808, 0x00080000, 0x00080008,
        0x00080800, 0x00080808, 0x08000000, 0x08000008, 0x08000800, 0x08000808,
        0x08080000, 0x08080008, 0x08080800, 0x08080808,
    },
};
static const uint32_t key_perm_maskr[12][16] = {
    {
        0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001,
        0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001,
        0x00000000, 0x00000001, 0x00000000, 0x00000001,
    },
    {
        0x00000000, 0x00000000, 0x00100000, 0x00100000, 0x00001000, 0x00001000,
        0x00101000, 0x00101000, 0x00000010, 0x00000010, 0x00100010, 0x00100010,
        0x00001010, 0x00001010, 0x00101010, 0x00101010,
    },
    {
        0x00000000, 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000002,
        0x00000000, 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000002,
        0x00000000, 0x00000002, 0x00000000, 0x00000002,
    },
    {
        0x00000000, 0x00000000, 0x00200000, 0x00200000, 0x00002000, 0x00002000,
        0x00202000, 0x00202000, 0x00000020, 0x00000020, 0x00200020, 0x00200020,
        0x00002020, 0x00002020, 0x00202020, 0x00202020,
    },
    {
        0x00000000, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0x00000004,
        0x00000000, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0x00000004,
        0x00000000, 0x00000004, 0x00000000, 0x00000004,
    },
    {
        0x00000000, 0x00000000, 0x00400000, 0x00400000, 0x00004000, 0x00004000,
        0x00404000, 0x00404000, 0x00000040, 0x00000040, 0x00400040, 0x00400040,
        0x00004040, 0x00004040, 0x00404040, 0x00404040,
    },
    {
        0x00000000, 0x00000008, 0x00000000, 0x00000008, 0x00000000, 0x00000008,
        0x00000000, 0x00000008, 0x00000000, 0x00000008, 0x00000000, 0x00000008,
        0x00000000, 0x00000008, 0x00000000, 0x00000008,
    },
    {
        0x00000000, 0x00000000, 0x00800000, 0x00800000, 0x00008000, 0x00008000,
        0x00808000, 0x00808000, 0x00000080, 0x00000080, 0x00800080, 0x00800080,
        0x00008080, 0x00008080, 0x00808080, 0x00808080,
    },
    {
        0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x00010000, 0x00010000,
        0x01010000, 0x01010000, 0x00000100, 0x00000100, 0x01000100, 0x01000100,
        0x00010100, 0x00010100, 0x01010100, 0x01010100,
    },
    {
        0x00000000, 0x00000000, 0x02000000, 0x02000000, 0x00020000, 0x00020000,
        0x02020000, 0x02020000, 0x00000200, 0x00000200, 0x02000200, 0x02000200,
        0x00020200, 0x00020200, 0x02020200, 0x02020200,
    },
    {
        0x00000000, 0x00000000, 0x04000000, 0x04000000, 0x00040000, 0x00040000,
        0x04040000, 0x04040000, 0x00000400, 0x00000400, 0x04000400, 0x04000400,
        0x00040400, 0x00040400, 0x04040400, 0x04040400,
    },
    {
        0x00000000, 0x00000000, 0x08000000, 0x08000000, 0x00080000, 0x00080000,
        0x08080000, 0x08080000, 0x00000800, 0x00000800, 0x08000800, 0x08000800,
        0x00080800, 0x00080800, 0x08080800, 0x08080800,
    },
};
static const uint32_t comp_maskl0[4][8] = {
    {
        0x00000000, 0x00020000, 0x00000001, 0x00020001, 0x00080000, 0x000a0000,
        0x00080001, 0x000a0001,
    },
    {
        0x00000000, 0x00001000, 0x00000000, 0x00001000, 0x00000040, 0x00001040,
        0x00000040, 0x00001040,
    },
    {
        0x00000000, 0x00400000, 0x00000020, 0x00400020, 0x00008000, 0x00408000,
        0x00008020, 0x00408020,
    },
    {
        0x00000000, 0x00100000, 0x00000800, 0x00100800, 0x00000000, 0x00100000,
        0x00000800, 0x00100800,
    },
};
static const uint32_t comp_maskr0[4][8] = {
    {
        0x00000000, 0x00200000, 0x00020000, 0x00220000, 0x00000002, 0x00200002,
        0x00020002, 0x00220002,
    },
    {
        0x00000000, 0x00000000, 0x00100000, 0x00100000, 0x00000004, 0x00000004,
        0x00100004, 0x00100004,
    },
    {
        0x00000000, 0x00004000, 0x00000800, 0x00004800, 0x00000000, 0x00004000,
        0x00000800, 0x00004800,
    },
    {
        0x00000000, 0x00400000, 0x00008000, 0x00408000, 0x00000008, 0x00400008,
        0x00008008, 0x00408008,
    },
};
static const uint32_t comp_maskl1[4][16] = {
    {
        0x00000000, 0x00000010, 0x00004000, 0x00004010, 0x00040000, 0x00040010,
        0x00044000, 0x00044010, 0x00000100, 0x00000110, 0x00004100, 0x00004110,
        0x00040100, 0x00040110, 0x00044100, 0x00044110,
    },
    {
        0x00000000, 0x00800000, 0x00000002, 0x00800002, 0x00000200, 0x00800200,
        0x00000202, 0x00800202, 0x00200000, 0x00a00000, 0x00200002, 0x00a00002,
        0x00200200, 0x00a00200, 0x00200202, 0x00a00202,
    },
    {
        0x00000000, 0x00002000, 0x00000004, 0x00002004, 0x00000400, 0x00002400,
        0x00000404, 0x00002404, 0x00000000, 0x00002000, 0x00000004, 0x00002004,
        0x00000400, 0x00002400, 0x00000404, 0x00002404,
    },
    {
        0x00000000, 0x00010000, 0x00000008, 0x00010008, 0x00000080, 0x00010080,
        0x00000088, 0x00010088, 0x00000000, 0x00010000, 0x00000008, 0x00010008,
        0x00000080, 0x00010080, 0x00000088, 0x00010088,
    },
};
static const uint32_t comp_maskr1[4][16] = {
    {
        0x00000000, 0x00000000, 0x00000080, 0x00000080, 0x00002000, 0x00002000,
        0x00002080, 0x00002080, 0x00000001, 0x00000001, 0x00000081, 0x00000081,
        0x00002001, 0x00002001, 0x00002081, 0x00002081,
    },
    {
        0x00000000, 0x00000010, 0x00800000, 0x00800010, 0x00010000, 0x00010010,
        0x00810000, 0x00810010, 0x00000200, 0x00000210, 0x00800200, 0x00800210,
        0x00010200, 0x00010210, 0x00810200, 0x00810210,
    },
    {
        0x00000000, 0x00000400, 0x00001000, 0x00001400, 0x00080000, 0x00080400,
        0x00081000, 0x00081400, 0x00000020, 0x00000420, 0x00001020, 0x00001420,
        0x00080020, 0x00080420, 0x00081020, 0x00081420,
    },
    {
        0x00000000, 0x00000100, 0x00040000, 0x00040100, 0x00000000, 0x00000100,
        0x00040000, 0x00040100, 0x00000040, 0x00000140, 0x00040040, 0x00040140,
        0x00000040, 0x00000140, 0x00040040, 0x00040140,
    },
};

static const unsigned char ascii64[] =
    "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
/*   0000000000111111111122222222223333333333444444444455555555556666 */
/*   0123456789012345678901234567890123456789012345678901234567890123 */

/*
 * We match the behavior of UFC-crypt on systems where "char" is signed by
 * default (the majority), regardless of char's signedness on our system.
 */
static uint32_t ascii_to_bin(int ch) {
  int sch = (ch < 0x80) ? ch : -(0x100 - ch);
  int retval;

  retval = sch - '.';
  if (sch >= 'A') {
    retval = sch - ('A' - 12);
    if (sch >= 'a')
      retval = sch - ('a' - 38);
  }
  retval &= 0x3f;

  return retval;
}

/*
 * When we choose to "support" invalid salts, nevertheless disallow those
 * containing characters that would violate the passwd file format.
 */
static inline int ascii_is_unsafe(unsigned char ch) {
  return !ch || ch == '\n' || ch == ':';
}

static uint32_t setup_salt(uint32_t salt) {
  uint32_t obit, saltbit, saltbits;
  unsigned int i;

  saltbits = 0;
  saltbit = 1;
  obit = 0x800000;
  for (i = 0; i < 24; i++) {
    if (salt & saltbit)
      saltbits |= obit;
    saltbit <<= 1;
    obit >>= 1;
  }

  return saltbits;
}

void __des_setkey(const unsigned char* key, struct expanded_key* ekey) {
  uint32_t k0, k1, rawkey0, rawkey1;
  unsigned int shifts, round, i, ibit;

  rawkey0 = (uint32_t)key[3] | ((uint32_t)key[2] << 8) |
            ((uint32_t)key[1] << 16) | ((uint32_t)key[0] << 24);
  rawkey1 = (uint32_t)key[7] | ((uint32_t)key[6] << 8) |
            ((uint32_t)key[5] << 16) | ((uint32_t)key[4] << 24);

  /*
   * Do key permutation and split into two 28-bit subkeys.
   */
  k0 = k1 = 0;
  for (i = 0, ibit = 28; i < 4; i++, ibit -= 4) {
    unsigned int j = i << 1;
    k0 |= key_perm_maskl[i][(rawkey0 >> ibit) & 0xf] |
          key_perm_maskl[i + 4][(rawkey1 >> ibit) & 0xf];
    k1 |= key_perm_maskr[j][(rawkey0 >> ibit) & 0xf];
    ibit -= 4;
    k1 |= key_perm_maskr[j + 1][(rawkey0 >> ibit) & 0xf] |
          key_perm_maskr[i + 8][(rawkey1 >> ibit) & 0xf];
  }

  /*
   * Rotate subkeys and do compression permutation.
   */
  shifts = 0;
  for (round = 0; round < 16; round++) {
    uint32_t t0, t1;
    uint32_t kl, kr;

    shifts += key_shifts[round];

    t0 = (k0 << shifts) | (k0 >> (28 - shifts));
    t1 = (k1 << shifts) | (k1 >> (28 - shifts));

    kl = kr = 0;
    ibit = 25;
    for (i = 0; i < 4; i++) {
      kl |= comp_maskl0[i][(t0 >> ibit) & 7];
      kr |= comp_maskr0[i][(t1 >> ibit) & 7];
      ibit -= 4;
      kl |= comp_maskl1[i][(t0 >> ibit) & 0xf];
      kr |= comp_maskr1[i][(t1 >> ibit) & 0xf];
      ibit -= 3;
    }
    ekey->l[round] = kl;
    ekey->r[round] = kr;
  }
}

/*
 * l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format.
 */
void __do_des(uint32_t l_in,
              uint32_t r_in,
              uint32_t* l_out,
              uint32_t* r_out,
              uint32_t count,
              uint32_t saltbits,
              const struct expanded_key* ekey) {
  uint32_t l, r;

  /*
   * Do initial permutation (IP).
   */
  l = r = 0;
  if (l_in | r_in) {
    unsigned int i, ibit;
    for (i = 0, ibit = 28; i < 8; i++, ibit -= 4) {
      l |= ip_maskl[i][(l_in >> ibit) & 0xf] |
           ip_maskl[i + 8][(r_in >> ibit) & 0xf];
      r |= ip_maskr[i][(l_in >> ibit) & 0xf] |
           ip_maskr[i + 8][(r_in >> ibit) & 0xf];
    }
  }

  while (count--) {
    /*
     * Do each round.
     */
    unsigned int round = 16;
    const uint32_t* kl = ekey->l;
    const uint32_t* kr = ekey->r;
    uint32_t f;
    while (round--) {
      uint32_t r48l, r48r;
      /*
       * Expand R to 48 bits (simulate the E-box).
       */
      r48l = ((r & 0x00000001) << 23) | ((r & 0xf8000000) >> 9) |
             ((r & 0x1f800000) >> 11) | ((r & 0x01f80000) >> 13) |
             ((r & 0x001f8000) >> 15);

      r48r = ((r & 0x0001f800) << 7) | ((r & 0x00001f80) << 5) |
             ((r & 0x000001f8) << 3) | ((r & 0x0000001f) << 1) |
             ((r & 0x80000000) >> 31);
      /*
       * Do salting for crypt() and friends, and
       * XOR with the permuted key.
       */
      f = (r48l ^ r48r) & saltbits;
      r48l ^= f ^ *kl++;
      r48r ^= f ^ *kr++;
      /*
       * Do S-box lookups (which shrink it back to 32 bits)
       * and do the P-box permutation at the same time.
       */
      f = psbox[0][r48l >> 18] | psbox[1][(r48l >> 12) & 0x3f] |
          psbox[2][(r48l >> 6) & 0x3f] | psbox[3][r48l & 0x3f] |
          psbox[4][r48r >> 18] | psbox[5][(r48r >> 12) & 0x3f] |
          psbox[6][(r48r >> 6) & 0x3f] | psbox[7][r48r & 0x3f];
      /*
       * Now that we've permuted things, complete f().
       */
      f ^= l;
      l = r;
      r = f;
    }
    r = l;
    l = f;
  }

  /*
   * Do final permutation (inverse of IP).
   */
  {
    unsigned int i, ibit;
    uint32_t lo, ro;
    lo = ro = 0;
    for (i = 0, ibit = 28; i < 4; i++, ibit -= 4) {
      ro |= fp_maskr[i][(l >> ibit) & 0xf] | fp_maskr[i + 4][(r >> ibit) & 0xf];
      ibit -= 4;
      lo |= fp_maskl[i][(l >> ibit) & 0xf] | fp_maskl[i + 4][(r >> ibit) & 0xf];
    }
    *l_out = lo;
    *r_out = ro;
  }
}

static void des_cipher(const unsigned char* in,
                       unsigned char* out,
                       uint32_t count,
                       uint32_t saltbits,
                       const struct expanded_key* ekey) {
  uint32_t l_out, r_out, rawl, rawr;

  rawl = (uint32_t)in[3] | ((uint32_t)in[2] << 8) | ((uint32_t)in[1] << 16) |
         ((uint32_t)in[0] << 24);
  rawr = (uint32_t)in[7] | ((uint32_t)in[6] << 8) | ((uint32_t)in[5] << 16) |
         ((uint32_t)in[4] << 24);

  __do_des(rawl, rawr, &l_out, &r_out, count, saltbits, ekey);

  out[0] = l_out >> 24;
  out[1] = l_out >> 16;
  out[2] = l_out >> 8;
  out[3] = l_out;
  out[4] = r_out >> 24;
  out[5] = r_out >> 16;
  out[6] = r_out >> 8;
  out[7] = r_out;
}

static char* _crypt_extended_r_uut(const char* _key,
                                   const char* _setting,
                                   char* output) {
  const unsigned char* key = (const unsigned char*)_key;
  const unsigned char* setting = (const unsigned char*)_setting;
  struct expanded_key ekey;
  unsigned char keybuf[8];
  unsigned char *p, *q;
  uint32_t count, salt, l, r0, r1;
  unsigned int i;

  /*
   * Copy the key, shifting each character left by one bit and padding
   * with zeroes.
   */
  q = keybuf;
  while (q <= &keybuf[sizeof(keybuf) - 1]) {
    *q++ = *key << 1;
    if (*key)
      key++;
  }
  __des_setkey(keybuf, &ekey);

  if (*setting == _PASSWORD_EFMT1) {
    /*
     * "new"-style:
     *   setting - underscore, 4 chars of count, 4 chars of salt
     *   key - unlimited characters
     */
    for (i = 1, count = 0; i < 5; i++) {
      uint32_t value = ascii_to_bin(setting[i]);
      if (ascii64[value] != setting[i])
        return NULL;
      count |= value << (i - 1) * 6;
    }
    if (!count)
      return NULL;

    for (i = 5, salt = 0; i < 9; i++) {
      uint32_t value = ascii_to_bin(setting[i]);
      if (ascii64[value] != setting[i])
        return NULL;
      salt |= value << (i - 5) * 6;
    }

    while (*key) {
      /*
       * Encrypt the key with itself.
       */
      des_cipher(keybuf, keybuf, 1, 0, &ekey);
      /*
       * And XOR with the next 8 characters of the key.
       */
      q = keybuf;
      while (q <= &keybuf[sizeof(keybuf) - 1] && *key)
        *q++ ^= *key++ << 1;
      __des_setkey(keybuf, &ekey);
    }

    memcpy(output, setting, 9);
    output[9] = '\0';
    p = (unsigned char*)output + 9;
  } else {
    /*
     * "old"-style:
     *   setting - 2 chars of salt
     *   key - up to 8 characters
     */
    count = 25;

    if (ascii_is_unsafe(setting[0]) || ascii_is_unsafe(setting[1]))
      return NULL;

    salt = (ascii_to_bin(setting[1]) << 6) | ascii_to_bin(setting[0]);

    output[0] = setting[0];
    output[1] = setting[1];
    p = (unsigned char*)output + 2;
  }

  /*
   * Do it.
   */
  __do_des(0, 0, &r0, &r1, count, setup_salt(salt), &ekey);

  /*
   * Now encode the result...
   */
  l = (r0 >> 8);
  *p++ = ascii64[(l >> 18) & 0x3f];
  *p++ = ascii64[(l >> 12) & 0x3f];
  *p++ = ascii64[(l >> 6) & 0x3f];
  *p++ = ascii64[l & 0x3f];

  l = (r0 << 16) | ((r1 >> 16) & 0xffff);
  *p++ = ascii64[(l >> 18) & 0x3f];
  *p++ = ascii64[(l >> 12) & 0x3f];
  *p++ = ascii64[(l >> 6) & 0x3f];
  *p++ = ascii64[l & 0x3f];

  l = r1 << 2;
  *p++ = ascii64[(l >> 12) & 0x3f];
  *p++ = ascii64[(l >> 6) & 0x3f];
  *p++ = ascii64[l & 0x3f];
  *p = 0;

  return output;
}

char* __crypt_des(const char* key, const char* setting, char* output) {
  const char* test_key =
      "\x80\xff\x80\x01 "
      "\x7f\x81\x80\x80\x0d\x0a\xff\x7f \x81 test";
  const char* test_setting = "_0.../9Zz";
  const char* test_hash = "_0.../9ZzX7iSJNd21sU";
  char test_buf[21];
  char* retval;
  const char* p;

  if (*setting != _PASSWORD_EFMT1) {
    test_setting = "\x80x";
    test_hash = "\x80x22/wK52ZKGA";
  }

  /*
   * Hash the supplied password.
   */
  retval = _crypt_extended_r_uut(key, setting, output);

  /*
   * Perform a quick self-test.  It is important that we make both calls
   * to _crypt_extended_r_uut() from the same scope such that they likely
   * use the same stack locations, which makes the second call overwrite
   * the first call's sensitive data on the stack and makes it more
   * likely that any alignment related issues would be detected.
   */
  p = _crypt_extended_r_uut(test_key, test_setting, test_buf);
  if (p && !strcmp(p, test_hash) && retval)
    return retval;

  return (setting[0] == '*') ? "x" : "*";
}
