Lines Matching refs:mac

1 /* $OpenBSD: mac.c,v 1.24 2013/06/03 00:03:18 dtucker Exp $ */
42 #include "mac.h"
114 mac_setup_by_alg(Mac *mac, const struct macalg *macalg)
118 mac->type = macalg->type;
119 if (mac->type == SSH_EVP) {
120 mac->evp_md = macalg->mdfunc();
121 if ((evp_len = EVP_MD_size(mac->evp_md)) <= 0)
122 fatal("mac %s len %d", mac->name, evp_len);
123 mac->key_len = mac->mac_len = (u_int)evp_len;
125 mac->mac_len = macalg->len / 8;
126 mac->key_len = macalg->key_len / 8;
127 mac->umac_ctx = NULL;
130 mac->mac_len = macalg->truncatebits / 8;
131 mac->etm = macalg->etm;
135 mac_setup(Mac *mac, char *name)
142 if (mac != NULL)
143 mac_setup_by_alg(mac, m);
152 mac_init(Mac *mac)
154 if (mac->key == NULL)
156 switch (mac->type) {
158 if (mac->evp_md == NULL)
160 HMAC_CTX_init(&mac->evp_ctx);
161 HMAC_Init(&mac->evp_ctx, mac->key, mac->key_len, mac->evp_md);
164 mac->umac_ctx = umac_new(mac->key);
167 mac->umac_ctx = umac128_new(mac->key);
175 mac_compute(Mac *mac, u_int32_t seqno, u_char *data, int datalen)
183 if (mac->mac_len > sizeof(u))
184 fatal("mac_compute: mac too long %u %lu",
185 mac->mac_len, (u_long)sizeof(u));
187 switch (mac->type) {
191 HMAC_Init(&mac->evp_ctx, NULL, 0, NULL);
192 HMAC_Update(&mac->evp_ctx, b, sizeof(b));
193 HMAC_Update(&mac->evp_ctx, data, datalen);
194 HMAC_Final(&mac->evp_ctx, u.m, NULL);
198 umac_update(mac->umac_ctx, data, datalen);
199 umac_final(mac->umac_ctx, u.m, nonce);
203 umac128_update(mac->umac_ctx, data, datalen);
204 umac128_final(mac->umac_ctx, u.m, nonce);
213 mac_clear(Mac *mac)
215 if (mac->type == SSH_UMAC) {
216 if (mac->umac_ctx != NULL)
217 umac_delete(mac->umac_ctx);
218 } else if (mac->type == SSH_UMAC128) {
219 if (mac->umac_ctx != NULL)
220 umac128_delete(mac->umac_ctx);
221 } else if (mac->evp_md != NULL)
222 HMAC_cleanup(&mac->evp_ctx);
223 mac->evp_md = NULL;
224 mac->umac_ctx = NULL;
240 debug("bad mac %s [%s]", p, names);
244 debug3("mac ok: %s [%s]", p, names);