version 1.32, 2015/01/15 18:32:54 |
version 1.33, 2016/07/08 03:44:42 |
|
|
} |
} |
|
|
int |
int |
mac_compute(struct sshmac *mac, u_int32_t seqno, const u_char *data, int datalen, |
mac_compute(struct sshmac *mac, u_int32_t seqno, |
|
const u_char *data, int datalen, |
u_char *digest, size_t dlen) |
u_char *digest, size_t dlen) |
{ |
{ |
static union { |
static union { |
|
|
dlen = mac->mac_len; |
dlen = mac->mac_len; |
memcpy(digest, u.m, dlen); |
memcpy(digest, u.m, dlen); |
} |
} |
|
return 0; |
|
} |
|
|
|
int |
|
mac_check(struct sshmac *mac, u_int32_t seqno, |
|
const u_char *data, size_t dlen, |
|
const u_char *theirmac, size_t mlen) |
|
{ |
|
u_char ourmac[SSH_DIGEST_MAX_LENGTH]; |
|
int r; |
|
|
|
if (mac->mac_len > mlen) |
|
return SSH_ERR_INVALID_ARGUMENT; |
|
if ((r = mac_compute(mac, seqno, data, dlen, |
|
ourmac, sizeof(ourmac))) != 0) |
|
return r; |
|
if (timingsafe_bcmp(ourmac, theirmac, mac->mac_len) != 0) |
|
return SSH_ERR_MAC_INVALID; |
return 0; |
return 0; |
} |
} |
|
|