xref: /freebsd-src/sys/crypto/openssl/ossl_sha1.c (revision 685dc743dc3b5645e34836464128e1c0558b404b)
1*ba610be9SJohn Baldwin /*
2*ba610be9SJohn Baldwin  * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3*ba610be9SJohn Baldwin  *
4*ba610be9SJohn Baldwin  * Licensed under the OpenSSL license (the "License").  You may not use
5*ba610be9SJohn Baldwin  * this file except in compliance with the License.  You can obtain a copy
6*ba610be9SJohn Baldwin  * in the file LICENSE in the source distribution or at
7*ba610be9SJohn Baldwin  * https://www.openssl.org/source/license.html
8*ba610be9SJohn Baldwin  */
9*ba610be9SJohn Baldwin 
10*ba610be9SJohn Baldwin #include <sys/cdefs.h>
11*ba610be9SJohn Baldwin #include <sys/libkern.h>
12*ba610be9SJohn Baldwin #include <sys/malloc.h>
13*ba610be9SJohn Baldwin 
14*ba610be9SJohn Baldwin #include <opencrypto/cryptodev.h>
15*ba610be9SJohn Baldwin #include <opencrypto/xform_auth.h>
16*ba610be9SJohn Baldwin 
17*ba610be9SJohn Baldwin #include <crypto/openssl/ossl.h>
18*ba610be9SJohn Baldwin #include <crypto/openssl/ossl_sha.h>
19*ba610be9SJohn Baldwin 
20*ba610be9SJohn Baldwin /* sha1-x86_64.S */
21*ba610be9SJohn Baldwin void sha1_block_data_order(SHA_CTX *c, const void *p, size_t len);
22*ba610be9SJohn Baldwin 
23*ba610be9SJohn Baldwin /* From crypto/sha/sha_local.h */
24*ba610be9SJohn Baldwin #define DATA_ORDER_IS_BIG_ENDIAN
25*ba610be9SJohn Baldwin 
26*ba610be9SJohn Baldwin #define HASH_LONG               SHA_LONG
27*ba610be9SJohn Baldwin #define HASH_CTX                SHA_CTX
28*ba610be9SJohn Baldwin #define HASH_CBLOCK             SHA_CBLOCK
29*ba610be9SJohn Baldwin #define HASH_MAKE_STRING(c,s)   do {    \
30*ba610be9SJohn Baldwin         unsigned long ll;               \
31*ba610be9SJohn Baldwin         ll=(c)->h0; (void)HOST_l2c(ll,(s));     \
32*ba610be9SJohn Baldwin         ll=(c)->h1; (void)HOST_l2c(ll,(s));     \
33*ba610be9SJohn Baldwin         ll=(c)->h2; (void)HOST_l2c(ll,(s));     \
34*ba610be9SJohn Baldwin         ll=(c)->h3; (void)HOST_l2c(ll,(s));     \
35*ba610be9SJohn Baldwin         ll=(c)->h4; (void)HOST_l2c(ll,(s));     \
36*ba610be9SJohn Baldwin         } while (0)
37*ba610be9SJohn Baldwin 
38*ba610be9SJohn Baldwin #define HASH_UPDATE                     ossl_sha1_update
39*ba610be9SJohn Baldwin #define HASH_FINAL                      ossl_sha1_final
40*ba610be9SJohn Baldwin #define HASH_INIT                       ossl_sha1_init
41*ba610be9SJohn Baldwin #define HASH_BLOCK_DATA_ORDER           sha1_block_data_order
42*ba610be9SJohn Baldwin 
43*ba610be9SJohn Baldwin #define INIT_DATA_h0 0x67452301UL
44*ba610be9SJohn Baldwin #define INIT_DATA_h1 0xefcdab89UL
45*ba610be9SJohn Baldwin #define INIT_DATA_h2 0x98badcfeUL
46*ba610be9SJohn Baldwin #define INIT_DATA_h3 0x10325476UL
47*ba610be9SJohn Baldwin #define INIT_DATA_h4 0xc3d2e1f0UL
48*ba610be9SJohn Baldwin 
49*ba610be9SJohn Baldwin static void
HASH_INIT(void * c_)50*ba610be9SJohn Baldwin HASH_INIT(void *c_)
51*ba610be9SJohn Baldwin {
52*ba610be9SJohn Baldwin     SHA_CTX *c = c_;
53*ba610be9SJohn Baldwin     memset(c, 0, sizeof(*c));
54*ba610be9SJohn Baldwin     c->h0 = INIT_DATA_h0;
55*ba610be9SJohn Baldwin     c->h1 = INIT_DATA_h1;
56*ba610be9SJohn Baldwin     c->h2 = INIT_DATA_h2;
57*ba610be9SJohn Baldwin     c->h3 = INIT_DATA_h3;
58*ba610be9SJohn Baldwin     c->h4 = INIT_DATA_h4;
59*ba610be9SJohn Baldwin }
60*ba610be9SJohn Baldwin 
61*ba610be9SJohn Baldwin #include "ossl_hash.h"
62*ba610be9SJohn Baldwin 
63*ba610be9SJohn Baldwin struct auth_hash ossl_hash_sha1 = {
64*ba610be9SJohn Baldwin 	.type = CRYPTO_SHA1,
65*ba610be9SJohn Baldwin 	.name = "OpenSSL-SHA1",
66*ba610be9SJohn Baldwin 	.hashsize = SHA1_HASH_LEN,
67*ba610be9SJohn Baldwin 	.ctxsize = sizeof(SHA_CTX),
68*ba610be9SJohn Baldwin 	.blocksize = SHA1_BLOCK_LEN,
69*ba610be9SJohn Baldwin 	.Init = HASH_INIT,
70*ba610be9SJohn Baldwin 	.Update = HASH_UPDATE,
71*ba610be9SJohn Baldwin 	.Final = HASH_FINAL,
72*ba610be9SJohn Baldwin };
73*ba610be9SJohn Baldwin 
74*ba610be9SJohn Baldwin _Static_assert(sizeof(SHA_CTX) <= sizeof(struct ossl_hash_context),
75*ba610be9SJohn Baldwin     "ossl_hash_context too small");
76