bool key_des_check (uint8_t *key, int key_len, int ndc) { int i; struct buffer b; buf_set_read (&b, key, key_len); for (i = 0; i < ndc; ++i) { DES_cblock *dc = (DES_cblock*) buf_read_alloc (&b, sizeof (DES_cblock)); if (!dc) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: check_key_DES: insufficient key material"); goto err; } if (DES_is_weak_key(dc)) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: check_key_DES: weak key detected"); goto err; } if (!DES_check_key_parity (dc)) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: check_key_DES: bad parity detected"); goto err; } } return true; err: ERR_clear_error (); return false; }
bool key_des_check (uint8_t *key, int key_len, int ndc) { int i; struct buffer b; buf_set_read (&b, key, key_len); for (i = 0; i < ndc; ++i) { unsigned char *key = buf_read_alloc(&b, DES_KEY_SIZE); if (!key) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: check_key_DES: insufficient key material"); goto err; } if (0 != des_key_check_weak(key)) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: check_key_DES: weak key detected"); goto err; } if (0 != des_key_check_key_parity(key)) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: check_key_DES: bad parity detected"); goto err; } } return true; err: return false; }
void key_des_fixup (uint8_t *key, int key_len, int ndc) { int i; struct buffer b; buf_set_read (&b, key, key_len); for (i = 0; i < ndc; ++i) { unsigned char *key = buf_read_alloc(&b, DES_KEY_SIZE); if (!key) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: fixup_key_DES: insufficient key material"); return; } des_key_set_parity(key); } }
void key_des_fixup (uint8_t *key, int key_len, int ndc) { int i; struct buffer b; buf_set_read (&b, key, key_len); for (i = 0; i < ndc; ++i) { DES_cblock *dc = (DES_cblock*) buf_read_alloc(&b, sizeof(DES_cblock)); if (!dc) { msg (D_CRYPT_ERRORS, "CRYPTO INFO: fixup_key_DES: insufficient key material"); ERR_clear_error (); return; } DES_set_odd_parity (dc); } }