version 1.2, 2005/05/29 09:10:23 |
version 1.3, 2014/04/16 05:16:39 |
|
|
extern int sign_passwd_cb(char *, int, int, void *); |
extern int sign_passwd_cb(char *, int, int, void *); |
|
|
struct des3_state { |
struct des3_state { |
des_key_schedule k1, k2, k3; |
DES_key_schedule k1, k2, k3; |
des_cblock iv1, iv2, iv3; |
DES_cblock iv1, iv2, iv3; |
}; |
}; |
|
|
static int |
static int |
|
|
if ((state = malloc(sizeof(*state))) == NULL) |
if ((state = malloc(sizeof(*state))) == NULL) |
return (NULL); |
return (NULL); |
|
|
des_set_key((void *)sesskey, state->k1); |
DES_set_key((const_DES_cblock *)sesskey, &state->k1); |
des_set_key((void *)(sesskey + 8), state->k2); |
DES_set_key((const_DES_cblock *)(sesskey + 8), &state->k2); |
|
|
if (len <= 16) |
if (len <= 16) |
des_set_key((void *)sesskey, state->k3); |
DES_set_key((const_DES_cblock *)sesskey, &state->k3); |
else |
else |
des_set_key((void *)(sesskey + 16), state->k3); |
DES_set_key((const_DES_cblock *)(sesskey + 16), &state->k3); |
|
|
memset(state->iv1, 0, 8); |
memset(state->iv1, 0, 8); |
memset(state->iv2, 0, 8); |
memset(state->iv2, 0, 8); |
|
|
dstate = (struct des3_state *)state; |
dstate = (struct des3_state *)state; |
memcpy(dstate->iv1, dstate->iv2, 8); |
memcpy(dstate->iv1, dstate->iv2, 8); |
|
|
des_ncbc_encrypt(src, dst, len, dstate->k3, &dstate->iv3, DES_DECRYPT); |
DES_ncbc_encrypt(src, dst, len, &dstate->k3, &dstate->iv3, DES_DECRYPT); |
des_ncbc_encrypt(dst, dst, len, dstate->k2, &dstate->iv2, DES_ENCRYPT); |
DES_ncbc_encrypt(dst, dst, len, &dstate->k2, &dstate->iv2, DES_ENCRYPT); |
des_ncbc_encrypt(dst, dst, len, dstate->k1, &dstate->iv1, DES_DECRYPT); |
DES_ncbc_encrypt(dst, dst, len, &dstate->k1, &dstate->iv1, DES_DECRYPT); |
} |
} |
|
|
static int |
static int |