| 52 |
}; |
}; |
| 53 |
|
|
| 54 |
const EVP_CIPHER * evp_ssh1_3des(void); |
const EVP_CIPHER * evp_ssh1_3des(void); |
|
int ssh1_3des_iv(EVP_CIPHER_CTX *, int, u_char *, int); |
|
| 55 |
|
|
| 56 |
static int ssh1_3des_init(EVP_CIPHER_CTX *ctx, const u_char *key, const u_char *iv, int enc) |
static int ssh1_3des_init(EVP_CIPHER_CTX *ctx, const u_char *key, const u_char *iv, int enc) |
| 57 |
{ |
{ |
| 123 |
return 1; |
return 1; |
| 124 |
} |
} |
| 125 |
|
|
|
// ssh1_3des_iv は未使用。 |
|
|
int ssh1_3des_iv(EVP_CIPHER_CTX *evp, int doset, u_char *iv, int len) |
|
|
{ |
|
|
struct ssh1_3des_ctx *c; |
|
|
|
|
|
if (len != 24) { |
|
|
//fatal("%s: bad 3des iv length: %d", __func__, len); |
|
|
return SSH_ERR_INVALID_ARGUMENT; |
|
|
} |
|
|
|
|
|
if ((c = EVP_CIPHER_CTX_get_app_data(evp)) == NULL) { |
|
|
//fatal("%s: no 3des context", __func__); |
|
|
return SSH_ERR_INTERNAL_ERROR; |
|
|
} |
|
|
|
|
|
if (doset) { |
|
|
//debug3("%s: Installed 3DES IV", __func__); |
|
|
memcpy(EVP_CIPHER_CTX_iv_noconst(c->k1), iv, 8); |
|
|
memcpy(EVP_CIPHER_CTX_iv_noconst(c->k2), iv + 8, 8); |
|
|
memcpy(EVP_CIPHER_CTX_iv_noconst(c->k3), iv + 16, 8); |
|
|
} else { |
|
|
//debug3("%s: Copying 3DES IV", __func__); |
|
|
memcpy(iv, EVP_CIPHER_CTX_iv(c->k1), 8); |
|
|
memcpy(iv + 8, EVP_CIPHER_CTX_iv(c->k2), 8); |
|
|
memcpy(iv + 16, EVP_CIPHER_CTX_iv(c->k3), 8); |
|
|
} |
|
|
return 0; |
|
|
} |
|
|
|
|
| 126 |
const EVP_CIPHER *evp_ssh1_3des(void) |
const EVP_CIPHER *evp_ssh1_3des(void) |
| 127 |
{ |
{ |
| 128 |
|
#ifndef LIBRESSL_VERSION_NUMBER |
| 129 |
static EVP_CIPHER *p = NULL; |
static EVP_CIPHER *p = NULL; |
| 130 |
|
|
| 131 |
if (p == NULL) { |
if (p == NULL) { |
| 140 |
EVP_CIPHER_meth_set_flags(p, EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH); |
EVP_CIPHER_meth_set_flags(p, EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH); |
| 141 |
} |
} |
| 142 |
return (p); |
return (p); |
| 143 |
|
#else |
| 144 |
|
static EVP_CIPHER ssh1_3des; |
| 145 |
|
|
| 146 |
|
memset(&ssh1_3des, 0, sizeof(EVP_CIPHER)); |
| 147 |
|
ssh1_3des.nid = NID_undef; |
| 148 |
|
ssh1_3des.block_size = 8; |
| 149 |
|
ssh1_3des.iv_len = 0; |
| 150 |
|
ssh1_3des.key_len = 16; |
| 151 |
|
ssh1_3des.init = ssh1_3des_init; |
| 152 |
|
ssh1_3des.cleanup = ssh1_3des_cleanup; |
| 153 |
|
ssh1_3des.do_cipher = ssh1_3des_cbc; |
| 154 |
|
ssh1_3des.flags = EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH; |
| 155 |
|
return (&ssh1_3des); |
| 156 |
|
#endif |
| 157 |
} |
} |