1d059297112922cabb0c674840589be8db821fd9aAdam Langley/* $OpenBSD: hmac.h,v 1.9 2014/06/24 01:13:21 djm Exp $ */ 2d059297112922cabb0c674840589be8db821fd9aAdam Langley/* 3d059297112922cabb0c674840589be8db821fd9aAdam Langley * Copyright (c) 2014 Markus Friedl. All rights reserved. 4d059297112922cabb0c674840589be8db821fd9aAdam Langley * 5d059297112922cabb0c674840589be8db821fd9aAdam Langley * Permission to use, copy, modify, and distribute this software for any 6d059297112922cabb0c674840589be8db821fd9aAdam Langley * purpose with or without fee is hereby granted, provided that the above 7d059297112922cabb0c674840589be8db821fd9aAdam Langley * copyright notice and this permission notice appear in all copies. 8d059297112922cabb0c674840589be8db821fd9aAdam Langley * 9d059297112922cabb0c674840589be8db821fd9aAdam Langley * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10d059297112922cabb0c674840589be8db821fd9aAdam Langley * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11d059297112922cabb0c674840589be8db821fd9aAdam Langley * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12d059297112922cabb0c674840589be8db821fd9aAdam Langley * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13d059297112922cabb0c674840589be8db821fd9aAdam Langley * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14d059297112922cabb0c674840589be8db821fd9aAdam Langley * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15d059297112922cabb0c674840589be8db821fd9aAdam Langley * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16d059297112922cabb0c674840589be8db821fd9aAdam Langley */ 17d059297112922cabb0c674840589be8db821fd9aAdam Langley 18d059297112922cabb0c674840589be8db821fd9aAdam Langley#ifndef _HMAC_H 19d059297112922cabb0c674840589be8db821fd9aAdam Langley#define _HMAC_H 20d059297112922cabb0c674840589be8db821fd9aAdam Langley 21d059297112922cabb0c674840589be8db821fd9aAdam Langley/* Returns the algorithm's digest length in bytes or 0 for invalid algorithm */ 22d059297112922cabb0c674840589be8db821fd9aAdam Langleysize_t ssh_hmac_bytes(int alg); 23d059297112922cabb0c674840589be8db821fd9aAdam Langley 24d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct sshbuf; 25d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct ssh_hmac_ctx; 26d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct ssh_hmac_ctx *ssh_hmac_start(int alg); 27d059297112922cabb0c674840589be8db821fd9aAdam Langley 28d059297112922cabb0c674840589be8db821fd9aAdam Langley/* Sets the state of the HMAC or resets the state if key == NULL */ 29d059297112922cabb0c674840589be8db821fd9aAdam Langleyint ssh_hmac_init(struct ssh_hmac_ctx *ctx, const void *key, size_t klen) 30d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((__bounded__(__buffer__, 2, 3))); 31d059297112922cabb0c674840589be8db821fd9aAdam Langleyint ssh_hmac_update(struct ssh_hmac_ctx *ctx, const void *m, size_t mlen) 32d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((__bounded__(__buffer__, 2, 3))); 33d059297112922cabb0c674840589be8db821fd9aAdam Langleyint ssh_hmac_update_buffer(struct ssh_hmac_ctx *ctx, const struct sshbuf *b); 34d059297112922cabb0c674840589be8db821fd9aAdam Langleyint ssh_hmac_final(struct ssh_hmac_ctx *ctx, u_char *d, size_t dlen) 35d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((__bounded__(__buffer__, 2, 3))); 36d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid ssh_hmac_free(struct ssh_hmac_ctx *ctx); 37d059297112922cabb0c674840589be8db821fd9aAdam Langley 38d059297112922cabb0c674840589be8db821fd9aAdam Langley#endif /* _HMAC_H */ 39