View | Details | Raw Unified | Return to bug 2101 | Differences between
and this patch

Collapse All | Expand All

(-)old/mac.c (-7 / +10 lines)
Lines 152-163 Link Here
152
u_char *
152
u_char *
153
mac_compute(Mac *mac, u_int32_t seqno, u_char *data, int datalen)
153
mac_compute(Mac *mac, u_int32_t seqno, u_char *data, int datalen)
154
{
154
{
155
	static u_char m[EVP_MAX_MD_SIZE];
155
	static union {
156
		u_char m[EVP_MAX_MD_SIZE];
157
		u_int64_t for_align;
158
	} u;
156
	u_char b[4], nonce[8];
159
	u_char b[4], nonce[8];
157
160
158
	if (mac->mac_len > sizeof(m))
161
	if (mac->mac_len > sizeof(u))
159
		fatal("mac_compute: mac too long %u %lu",
162
		fatal("mac_compute: mac too long %u %lu",
160
		    mac->mac_len, (u_long)sizeof(m));
163
		    mac->mac_len, (u_long)sizeof(u));
161
164
162
	switch (mac->type) {
165
	switch (mac->type) {
163
	case SSH_EVP:
166
	case SSH_EVP:
Lines 166-187 Link Here
166
		HMAC_Init(&mac->evp_ctx, NULL, 0, NULL);
169
		HMAC_Init(&mac->evp_ctx, NULL, 0, NULL);
167
		HMAC_Update(&mac->evp_ctx, b, sizeof(b));
170
		HMAC_Update(&mac->evp_ctx, b, sizeof(b));
168
		HMAC_Update(&mac->evp_ctx, data, datalen);
171
		HMAC_Update(&mac->evp_ctx, data, datalen);
169
		HMAC_Final(&mac->evp_ctx, m, NULL);
172
		HMAC_Final(&mac->evp_ctx, u.m, NULL);
170
		break;
173
		break;
171
	case SSH_UMAC:
174
	case SSH_UMAC:
172
		put_u64(nonce, seqno);
175
		put_u64(nonce, seqno);
173
		umac_update(mac->umac_ctx, data, datalen);
176
		umac_update(mac->umac_ctx, data, datalen);
174
		umac_final(mac->umac_ctx, m, nonce);
177
		umac_final(mac->umac_ctx, u.m, nonce);
175
		break;
178
		break;
176
	case SSH_UMAC128:
179
	case SSH_UMAC128:
177
		put_u64(nonce, seqno);
180
		put_u64(nonce, seqno);
178
		umac128_update(mac->umac_ctx, data, datalen);
181
		umac128_update(mac->umac_ctx, data, datalen);
179
		umac128_final(mac->umac_ctx, m, nonce);
182
		umac128_final(mac->umac_ctx, u.m, nonce);
180
		break;
183
		break;
181
	default:
184
	default:
182
		fatal("mac_compute: unknown MAC type");
185
		fatal("mac_compute: unknown MAC type");
183
	}
186
	}
184
	return (m);
187
	return (u.m);
185
}
188
}
186
189
187
void
190
void

Return to bug 2101