text: /*
   * Copyright (c) Edward Thomson.  All rights reserved.
   *
   * This file is part of ntlmclient, distributed under the MIT license.
   * For full terms and copyright information, and for third-party
   * copyright information, see the included LICENSE.txt file.
   */
  
  #ifndef PRIVATE_CRYPT_COMMON_H__
  #define PRIVATE_CRYPT_COMMON_H__
  
  #if defined(CRYPT_OPENSSL)
  # include "crypt_openssl.h"
  #elif defined(CRYPT_MBEDTLS)
  # include "crypt_mbedtls.h"
  #elif defined(CRYPT_COMMONCRYPTO)
  # include "crypt_commoncrypto.h"
  #else
  # error "no crypto support"
  #endif
  
  #define CRYPT_DES_BLOCKSIZE 8
  #define CRYPT_MD4_DIGESTSIZE 16
  #define CRYPT_MD5_DIGESTSIZE 16
  
  typedef unsigned char ntlm_des_block[CRYPT_DES_BLOCKSIZE];
  
  typedef struct ntlm_crypt_ctx ntlm_crypt_ctx;
  
  extern bool ntlm_crypt_init(ntlm_client *ntlm);
  
  extern bool ntlm_random_bytes(
  	unsigned char *out,
  	ntlm_client *ntlm,
  	size_t len);
  
  extern bool ntlm_des_encrypt(
  	ntlm_des_block *out,
  	ntlm_client *ntlm,
  	ntlm_des_block *plaintext,
  	ntlm_des_block *key);
  
  extern bool ntlm_md4_digest(
  	unsigned char out[CRYPT_MD4_DIGESTSIZE],
  	ntlm_client *ntlm,
  	const unsigned char *in,
  	size_t in_len);
  
  extern bool ntlm_hmac_md5_init(
  	ntlm_client *ntlm,
  	const unsigned char *key,
  	size_t key_len);
  
  extern bool ntlm_hmac_md5_update(
  	ntlm_client *ntlm,
  	const unsigned char *data,
  	size_t data_len);
  
  extern bool ntlm_hmac_md5_final(
  	unsigned char *out,
  	size_t *out_len,
  	ntlm_client *ntlm);
  
  extern void ntlm_crypt_shutdown(ntlm_client *ntlm);
  
  #endif /* PRIVATE_CRYPT_COMMON_H__ */
  