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);