1 1.1 christos /* $NetBSD: md-sha256.c,v 1.5 2017/04/18 18:41:46 christos Exp $ */ 2 1.1 christos /* $OpenBSD: md-sha256.c,v 1.5 2006/08/03 03:34:42 deraadt Exp $ */ 3 1.1 christos /* 4 1.1 christos * Copyright (c) 2005 Damien Miller <djm (at) openbsd.org> 5 1.1 christos * 6 1.1 christos * Permission to use, copy, modify, and distribute this software for any 7 1.1 christos * purpose with or without fee is hereby granted, provided that the above 8 1.1 christos * copyright notice and this permission notice appear in all copies. 9 1.1 christos * 10 1.1 christos * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 1.1 christos * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 1.1 christos * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 1.1 christos * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 1.1 christos * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 1.1 christos * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 1.1 christos * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 1.1 christos */ 18 1.1 christos 19 1.1 christos /* EVP wrapper for SHA256 */ 20 1.1 christos #include "includes.h" 21 1.1 christos __RCSID("$NetBSD: md-sha256.c,v 1.5 2017/04/18 18:41:46 christos Exp $"); 22 1.1 christos 23 1.1 christos #include <sys/types.h> 24 1.1 christos 25 1.1 christos #include <openssl/evp.h> 26 1.1 christos 27 1.1 christos #include <sys/sha2.h> 28 1.1 christos #include <string.h> 29 1.1 christos 30 1.1 christos const EVP_MD *evp_ssh_sha256(void); 31 1.1 christos 32 1.1 christos static int 33 1.1 christos ssh_sha256_init(EVP_MD_CTX *ctxt) 34 1.1 christos { 35 1.1 christos SHA256_Init(ctxt->md_data); 36 1.1 christos return (1); 37 1.1 christos } 38 1.1 christos 39 1.1 christos static int 40 1.1 christos ssh_sha256_update(EVP_MD_CTX *ctxt, const void *data, size_t len) 41 1.1 christos { 42 1.1 christos SHA256_Update(ctxt->md_data, data, len); 43 1.1 christos return (1); 44 1.1 christos } 45 1.1 christos 46 1.1 christos static int 47 1.1 christos ssh_sha256_final(EVP_MD_CTX *ctxt, unsigned char *digest) 48 1.1 christos { 49 1.1 christos SHA256_Final(digest, ctxt->md_data); 50 1.1 christos return (1); 51 1.1 christos } 52 1.1 christos 53 1.1 christos static int 54 1.1 christos ssh_sha256_cleanup(EVP_MD_CTX *ctxt) 55 1.1 christos { 56 1.1 christos memset(ctxt->md_data, 0, sizeof(SHA256_CTX)); 57 1.1 christos return (1); 58 1.1 christos } 59 1.1 christos 60 1.1 christos const EVP_MD * 61 1.1 christos evp_ssh_sha256(void) 62 1.1 christos { 63 1.1 christos static EVP_MD ssh_sha256; 64 1.1 christos 65 1.1 christos memset(&ssh_sha256, 0, sizeof(ssh_sha256)); 66 1.1 christos ssh_sha256.type = NID_undef; 67 1.1 christos ssh_sha256.md_size = SHA256_DIGEST_LENGTH; 68 1.1 christos ssh_sha256.init = ssh_sha256_init; 69 1.1 christos ssh_sha256.update = ssh_sha256_update; 70 1.1 christos ssh_sha256.final = ssh_sha256_final; 71 1.1 christos ssh_sha256.cleanup = ssh_sha256_cleanup; 72 1.1 christos ssh_sha256.block_size = SHA256_BLOCK_LENGTH; 73 1.1 christos ssh_sha256.ctx_size = sizeof(SHA256_CTX); 74 1.1 christos 75 1.1 christos return (&ssh_sha256); 76 1.1 christos } 77