1 /* $OpenBSD: sm3.h,v 1.1 2018/11/11 06:53:31 tb Exp $ */ 2 /* 3 * Copyright (c) 2018, Ribose Inc 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 module libressl_d.openssl.sm3; 18 19 20 public import core.stdc.stddef; 21 public import libressl_d.openssl.opensslconf; 22 23 extern (C): 24 nothrow @nogc: 25 26 version (OPENSSL_NO_SM3) { 27 static assert(false, "SM3 is disabled."); 28 } 29 30 enum SM3_DIGEST_LENGTH = 32; 31 alias SM3_WORD = uint; 32 33 enum SM3_CBLOCK = 64; 34 enum SM3_LBLOCK = .SM3_CBLOCK / 4; 35 36 struct SM3state_st 37 { 38 .SM3_WORD A; 39 .SM3_WORD B; 40 .SM3_WORD C; 41 .SM3_WORD D; 42 .SM3_WORD E; 43 .SM3_WORD F; 44 .SM3_WORD G; 45 .SM3_WORD H; 46 .SM3_WORD Nl; 47 .SM3_WORD Nh; 48 .SM3_WORD[.SM3_LBLOCK] data; 49 uint num; 50 } 51 52 alias SM3_CTX = .SM3state_st; 53 54 int SM3_Init(.SM3_CTX* c); 55 int SM3_Update(.SM3_CTX* c, const (void)* data, size_t len); 56 int SM3_Final(ubyte* md, .SM3_CTX* c);