add DES_set_key_checked
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14636 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -81,6 +81,43 @@ DES_set_odd_parity(DES_cblock *key)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* FIPS 74 */
|
||||||
|
static DES_cblock weak_keys[] = {
|
||||||
|
{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, /* weak keys */
|
||||||
|
{0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE},
|
||||||
|
{0x1F,0x1F,0x1F,0x1F,0x0E,0x0E,0x0E,0x0E},
|
||||||
|
{0xE0,0xE0,0xE0,0xE0,0xF1,0xF1,0xF1,0xF1},
|
||||||
|
{0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE}, /* semi-weak keys */
|
||||||
|
{0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01},
|
||||||
|
{0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1},
|
||||||
|
{0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E},
|
||||||
|
{0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1},
|
||||||
|
{0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01},
|
||||||
|
{0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE},
|
||||||
|
{0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E},
|
||||||
|
{0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E},
|
||||||
|
{0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01},
|
||||||
|
{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
|
||||||
|
{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}
|
||||||
|
};
|
||||||
|
|
||||||
|
int
|
||||||
|
DES_is_weak_key(DES_cblock *key)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(weak_keys)/sizeof(weak_keys[0]); i++) {
|
||||||
|
if (memcmp(weak_keys[i], key, DES_CBLOCK_LEN) == 0)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -145,36 +182,18 @@ DES_set_key(DES_cblock *key, DES_key_schedule *ks)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIPS 74 */
|
/*
|
||||||
static DES_cblock weak_keys[] = {
|
*
|
||||||
{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, /* weak keys */
|
*/
|
||||||
{0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE},
|
|
||||||
{0x1F,0x1F,0x1F,0x1F,0x0E,0x0E,0x0E,0x0E},
|
|
||||||
{0xE0,0xE0,0xE0,0xE0,0xF1,0xF1,0xF1,0xF1},
|
|
||||||
{0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE}, /* semi-weak keys */
|
|
||||||
{0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01},
|
|
||||||
{0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1},
|
|
||||||
{0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E},
|
|
||||||
{0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1},
|
|
||||||
{0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01},
|
|
||||||
{0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE},
|
|
||||||
{0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E},
|
|
||||||
{0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E},
|
|
||||||
{0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01},
|
|
||||||
{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
|
|
||||||
{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}
|
|
||||||
};
|
|
||||||
|
|
||||||
int
|
int
|
||||||
DES_is_weak_key(DES_cblock *key)
|
DES_set_key_checked(DES_cblock *key, DES_key_schedule *ks)
|
||||||
{
|
{
|
||||||
int i;
|
if (DES_is_weak_key(key)) {
|
||||||
|
memset(ks, 0, sizeof(*ks));
|
||||||
for (i = 0; i < sizeof(weak_keys)/sizeof(weak_keys[0]); i++) {
|
|
||||||
if (memcmp(weak_keys[i], key, DES_CBLOCK_LEN) == 0)
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return DES_set_key(key, ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -51,6 +51,7 @@ typedef struct DES_key_schedule
|
|||||||
int DES_set_odd_parity(DES_cblock *);
|
int DES_set_odd_parity(DES_cblock *);
|
||||||
int DES_is_weak_key(DES_cblock *);
|
int DES_is_weak_key(DES_cblock *);
|
||||||
int DES_set_key(DES_cblock *, DES_key_schedule *);
|
int DES_set_key(DES_cblock *, DES_key_schedule *);
|
||||||
|
int DES_set_key_checked(DES_cblock *, DES_key_schedule *);
|
||||||
int DES_new_random_key(DES_cblock *);
|
int DES_new_random_key(DES_cblock *);
|
||||||
void DES_string_to_key(const char *, DES_cblock *);
|
void DES_string_to_key(const char *, DES_cblock *);
|
||||||
int DES_read_password(DES_cblock *, char *, int);
|
int DES_read_password(DES_cblock *, char *, int);
|
||||||
|
Reference in New Issue
Block a user