2 * Copyright 1989 by the Massachusetts Institute of Technology.
4 * For copying and distribution information, please see the file
7 * Under U.S. law, this software may not be exported outside the US
8 * without license from the U.S. Commerce department.
10 * These routines form the library interface to the DES facilities.
12 * Originally written 8/85 by Steve Miller, MIT Project Athena.
15 #include <afsconfig.h>
16 #include <afs/param.h>
24 #include "des_internal.h"
25 #include "des_prototypes.h"
36 * The following are the weak DES keys:
38 static const des_cblock weak[16] = {
40 {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
41 {0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe},
42 {0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e},
43 {0xe0, 0xe0, 0xe0, 0xe0, 0xf1, 0xf1, 0xf1, 0xf1},
46 {0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe},
47 {0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01},
49 {0x1f, 0xe0, 0x1f, 0xe0, 0x0e, 0xf1, 0x0e, 0xf1},
50 {0xe0, 0x1f, 0xe0, 0x1f, 0xf1, 0x0e, 0xf1, 0x0e},
52 {0x01, 0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1},
53 {0xe0, 0x01, 0xe0, 0x01, 0xf1, 0x01, 0xf1, 0x01},
55 {0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe},
56 {0xfe, 0x1f, 0xfe, 0x1f, 0xfe, 0x0e, 0xfe, 0x0e},
58 {0x01, 0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e},
59 {0x1f, 0x01, 0x1f, 0x01, 0x0e, 0x01, 0x0e, 0x01},
61 {0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1, 0xfe},
62 {0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf1, 0xfe, 0xf1}
66 * des_is_weak_key: returns true iff key is a [semi-]weak des key.
68 * Requires: key has correct odd parity.
71 des_is_weak_key(des_cblock key)
74 const des_cblock *weak_p = weak;
76 for (i = 0; i < (sizeof(weak) / sizeof(des_cblock)); i++) {
77 if (!memcmp((char *)weak_p++, (char *)key, sizeof(des_cblock)))