Annotation of src/usr.bin/ssh/hmac.c, Revision 1.1
1.1 ! markus 1: /*
! 2: * Copyright (c) 2000 Markus Friedl. All rights reserved.
! 3: *
! 4: * Redistribution and use in source and binary forms, with or without
! 5: * modification, are permitted provided that the following conditions
! 6: * are met:
! 7: * 1. Redistributions of source code must retain the above copyright
! 8: * notice, this list of conditions and the following disclaimer.
! 9: * 2. Redistributions in binary form must reproduce the above copyright
! 10: * notice, this list of conditions and the following disclaimer in the
! 11: * documentation and/or other materials provided with the distribution.
! 12: * 3. All advertising materials mentioning features or use of this software
! 13: * must display the following acknowledgement:
! 14: * This product includes software developed by Markus Friedl.
! 15: * 4. The name of the author may not be used to endorse or promote products
! 16: * derived from this software without specific prior written permission.
! 17: *
! 18: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 19: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 20: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 21: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
! 22: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
! 23: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
! 24: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
! 25: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
! 26: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
! 27: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 28: */
! 29:
! 30: #include "includes.h"
! 31: RCSID("$Id: hmac.c,v 1.2 2000/02/02 23:20:15 markus Exp $");
! 32:
! 33: #include "xmalloc.h"
! 34: #include "ssh.h"
! 35: #include "getput.h"
! 36:
! 37: #include <ssl/hmac.h>
! 38:
! 39: unsigned char *
! 40: hmac(
! 41: EVP_MD *evp_md,
! 42: unsigned int seqno,
! 43: unsigned char *data, int datalen,
! 44: unsigned char *key, int keylen)
! 45: {
! 46: HMAC_CTX c;
! 47: static unsigned char m[EVP_MAX_MD_SIZE];
! 48: unsigned char b[4];
! 49:
! 50: if (key == NULL)
! 51: fatal("hmac: no key");
! 52: HMAC_Init(&c, key, keylen, evp_md);
! 53: PUT_32BIT(b, seqno);
! 54: HMAC_Update(&c, b, sizeof b);
! 55: HMAC_Update(&c, data, datalen);
! 56: HMAC_Final(&c, m, NULL);
! 57: HMAC_cleanup(&c);
! 58: return(m);
! 59: }