Import new random number generator files from harvey
[akaros.git] / kern / include / random / sha2.h
1 /*      contrib/pgcrypto/sha2.h */
2 /*      $OpenBSD: sha2.h,v 1.2 2004/04/28 23:11:57 millert Exp $        */
3
4 /*
5  * FILE:        sha2.h
6  * AUTHOR:      Aaron D. Gifford <me@aarongifford.com>
7  *
8  * Copyright (c) 2000-2001, Aaron D. Gifford
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *        notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *        notice, this list of conditions and the following disclaimer in the
18  *        documentation and/or other materials provided with the distribution.
19  * 3. Neither the name of the copyright holder nor the names of contributors
20  *        may be used to endorse or promote products derived from this software
21  *        without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED.      IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33  * SUCH DAMAGE.
34  *
35  * $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
36  */
37
38
39 /*** SHA-224/256/384/512 Various Length Definitions ***********************/
40 enum{
41         SHA224BlockLength               = 64,
42         SHA224DigestLength      = 28,
43         SHA224_digest_string_length = (SHA224DigestLength * 2 + 1),
44         SHA256BlockLength               = 64,
45         SHA256DigestLength      = 32,
46         SHA256DigestStringLength = (SHA256DigestLength * 2 + 1),
47         SHA384BlockLength               = 128,
48         SHA384DigestLength      = 48,
49         SHA384_digest_string_length = (SHA384DigestLength * 2 + 1),
50         SHA512_block_length             = 128,
51         SHA512DigestLength      = 64,
52         SHA512DigestStringLength = (SHA512DigestLength * 2 + 1)
53 };
54
55 /*** SHA-256/384/512 Context Structures *******************************/
56
57 typedef struct SHA256Ctx SHA256Ctx;
58 typedef struct SHA512Ctx SHA512Ctx;
59 typedef SHA256Ctx SHA224Ctx;
60 typedef SHA512Ctx SHA384Ctx;
61
62 struct SHA256Ctx
63 {
64         uint32_t                state[8];
65         uint64_t                bitcount;
66         uint8_t         buffer[SHA256BlockLength];
67 };
68
69
70
71 struct SHA512Ctx
72 {
73         uint64_t                state[8];
74         uint64_t                bitcount[2];
75         uint8_t         buffer[SHA512_block_length];
76 };
77
78
79 void            SHA224_Init(SHA224Ctx *);
80 void            SHA224_Update(SHA224Ctx *, const uint8_t *, size_t);
81 void            SHA224_Final(uint8_t[SHA224DigestLength], SHA224Ctx *);
82
83 void            SHA256_Init(SHA256Ctx *);
84 void            SHA256_Update(SHA256Ctx *, const uint8_t *, size_t);
85 void            SHA256_Final(uint8_t[SHA256DigestLength], SHA256Ctx *);
86
87 void            SHA384_Init(SHA384Ctx *);
88 void            SHA384_Update(SHA384Ctx *, const uint8_t *, size_t);
89 void            SHA384_Final(uint8_t[SHA384DigestLength], SHA384Ctx *);
90
91 void            SHA512_Init(SHA512Ctx *);
92 void            SHA512_Update(SHA512Ctx *, const uint8_t *, size_t);
93 void            SHA512_Final(uint8_t[SHA512DigestLength], SHA512Ctx *);
94