2 * Copyright 2016 Michael Müller
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #ifndef __BCRYPT_INTERNAL_H
21 #define __BCRYPT_INTERNAL_H
24 #ifdef HAVE_GNUTLS_CIPHER_INIT
25 #include <gnutls/gnutls.h>
26 #include <gnutls/crypto.h>
27 #include <gnutls/abstract.h>
28 #elif HAVE_COMMONCRYPTO_COMMONCRYPTOR_H
29 #include <AvailabilityMacros.h>
30 #include <CommonCrypto/CommonCryptor.h>
44 void sha256_init(SHA256_CTX
*ctx
) DECLSPEC_HIDDEN
;
45 void sha256_update(SHA256_CTX
*ctx
, const UCHAR
*buffer
, ULONG len
) DECLSPEC_HIDDEN
;
46 void sha256_finalize(SHA256_CTX
*ctx
, UCHAR
*buffer
) DECLSPEC_HIDDEN
;
55 void sha512_init(SHA512_CTX
*ctx
) DECLSPEC_HIDDEN
;
56 void sha512_update(SHA512_CTX
*ctx
, const UCHAR
*buffer
, ULONG len
) DECLSPEC_HIDDEN
;
57 void sha512_finalize(SHA512_CTX
*ctx
, UCHAR
*buffer
) DECLSPEC_HIDDEN
;
59 void sha384_init(SHA512_CTX
*ctx
) DECLSPEC_HIDDEN
;
60 #define sha384_update sha512_update
61 void sha384_finalize(SHA512_CTX
*ctx
, UCHAR
*buffer
) DECLSPEC_HIDDEN
;
64 unsigned char chksum
[16], X
[48], buf
[16];
68 void md2_init(MD2_CTX
*ctx
) DECLSPEC_HIDDEN
;
69 void md2_update(MD2_CTX
*ctx
, const unsigned char *buf
, ULONG len
) DECLSPEC_HIDDEN
;
70 void md2_finalize(MD2_CTX
*ctx
, unsigned char *hash
) DECLSPEC_HIDDEN
;
72 /* Definitions from advapi32 */
73 typedef struct tagMD4_CTX
{
77 unsigned char digest
[16];
80 VOID WINAPI
MD4Init(MD4_CTX
*ctx
);
81 VOID WINAPI
MD4Update(MD4_CTX
*ctx
, const unsigned char *buf
, unsigned int len
);
82 VOID WINAPI
MD4Final(MD4_CTX
*ctx
);
89 unsigned char digest
[16];
92 VOID WINAPI
MD5Init(MD5_CTX
*ctx
);
93 VOID WINAPI
MD5Update(MD5_CTX
*ctx
, const unsigned char *buf
, unsigned int len
);
94 VOID WINAPI
MD5Final(MD5_CTX
*ctx
);
104 VOID WINAPI
A_SHAInit(SHA_CTX
*ctx
);
105 VOID WINAPI
A_SHAUpdate(SHA_CTX
*ctx
, const UCHAR
*buffer
, UINT size
);
106 VOID WINAPI
A_SHAFinal(SHA_CTX
*ctx
, PULONG result
);
108 #define MAGIC_ALG (('A' << 24) | ('L' << 16) | ('G' << 8) | '0')
109 #define MAGIC_HASH (('H' << 24) | ('A' << 16) | ('S' << 8) | 'H')
110 #define MAGIC_KEY (('K' << 24) | ('E' << 16) | ('Y' << 8) | '0')
147 #if defined(HAVE_GNUTLS_CIPHER_INIT)
152 gnutls_cipher_hd_t handle
;
157 struct key_asymmetric
169 struct key_symmetric s
;
170 struct key_asymmetric a
;
173 #elif defined(HAVE_COMMONCRYPTO_COMMONCRYPTOR_H) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
178 CCCryptorRef ref_encrypt
;
179 CCCryptorRef ref_decrypt
;
184 struct key_asymmetric
196 struct key_symmetric s
;
197 struct key_asymmetric a
;
207 NTSTATUS
get_alg_property( const struct algorithm
*, const WCHAR
*, UCHAR
*, ULONG
, ULONG
* ) DECLSPEC_HIDDEN
;
209 NTSTATUS
key_set_property( struct key
*, const WCHAR
*, UCHAR
*, ULONG
, ULONG
) DECLSPEC_HIDDEN
;
210 NTSTATUS
key_symmetric_init( struct key
*, struct algorithm
*, const UCHAR
*, ULONG
) DECLSPEC_HIDDEN
;
211 NTSTATUS
key_symmetric_set_params( struct key
*, UCHAR
*, ULONG
) DECLSPEC_HIDDEN
;
212 NTSTATUS
key_symmetric_set_auth_data( struct key
*, UCHAR
*, ULONG
) DECLSPEC_HIDDEN
;
213 NTSTATUS
key_symmetric_encrypt( struct key
*, const UCHAR
*, ULONG
, UCHAR
*, ULONG
) DECLSPEC_HIDDEN
;
214 NTSTATUS
key_symmetric_decrypt( struct key
*, const UCHAR
*, ULONG
, UCHAR
*, ULONG
) DECLSPEC_HIDDEN
;
215 NTSTATUS
key_symmetric_get_tag( struct key
*, UCHAR
*, ULONG
) DECLSPEC_HIDDEN
;
216 NTSTATUS
key_asymmetric_init( struct key
*, struct algorithm
*, const UCHAR
*, ULONG
) DECLSPEC_HIDDEN
;
217 NTSTATUS
key_asymmetric_verify( struct key
*, void *, UCHAR
*, ULONG
, UCHAR
*, ULONG
, DWORD
) DECLSPEC_HIDDEN
;
218 NTSTATUS
key_destroy( struct key
* ) DECLSPEC_HIDDEN
;
219 BOOL
key_is_symmetric( struct key
* ) DECLSPEC_HIDDEN
;
221 BOOL
gnutls_initialize(void) DECLSPEC_HIDDEN
;
222 void gnutls_uninitialize(void) DECLSPEC_HIDDEN
;
224 #endif /* __BCRYPT_INTERNAL_H */