text: /* Copyright (C) 2009, 2010 Simon Josefsson
   * Copyright (C) 2006, 2007 The Written Word, Inc.  All rights reserved.
   * Copyright (C) 2010 Daniel Stenberg
   *
   * Redistribution and use in source and binary forms,
   * with or without modification, are permitted provided
   * that the following conditions are met:
   *
   *   Redistributions of source code must retain the above
   *   copyright notice, this list of conditions and the
   *   following disclaimer.
   *
   *   Redistributions in binary form must reproduce the above
   *   copyright notice, this list of conditions and the following
   *   disclaimer in the documentation and/or other materials
   *   provided with the distribution.
   *
   *   Neither the name of the copyright holder nor the names
   *   of any other contributors may be used to endorse or
   *   promote products derived from this software without
   *   specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
   * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
   * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
   * OF SUCH DAMAGE.
   */
  #ifndef LIBSSH2_CRYPTO_H
  #define LIBSSH2_CRYPTO_H
  
  #ifdef LIBSSH2_OPENSSL
  #include "openssl.h"
  #endif
  
  #ifdef LIBSSH2_LIBGCRYPT
  #include "libgcrypt.h"
  #endif
  
  #ifdef LIBSSH2_WINCNG
  #include "wincng.h"
  #endif
  
  #ifdef LIBSSH2_OS400QC3
  #include "os400qc3.h"
  #endif
  
  #ifdef LIBSSH2_MBEDTLS
  #include "mbedtls.h"
  #endif
  
  int _libssh2_rsa_new(libssh2_rsa_ctx ** rsa,
                       const unsigned char *edata,
                       unsigned long elen,
                       const unsigned char *ndata,
                       unsigned long nlen,
                       const unsigned char *ddata,
                       unsigned long dlen,
                       const unsigned char *pdata,
                       unsigned long plen,
                       const unsigned char *qdata,
                       unsigned long qlen,
                       const unsigned char *e1data,
                       unsigned long e1len,
                       const unsigned char *e2data,
                       unsigned long e2len,
                       const unsigned char *coeffdata, unsigned long coefflen);
  int _libssh2_rsa_new_private(libssh2_rsa_ctx ** rsa,
                               LIBSSH2_SESSION * session,
                               const char *filename,
                               unsigned const char *passphrase);
  int _libssh2_rsa_sha1_verify(libssh2_rsa_ctx * rsa,
                               const unsigned char *sig,
                               unsigned long sig_len,
                               const unsigned char *m, unsigned long m_len);
  int _libssh2_rsa_sha1_sign(LIBSSH2_SESSION * session,
                             libssh2_rsa_ctx * rsactx,
                             const unsigned char *hash,
                             size_t hash_len,
                             unsigned char **signature,
                             size_t *signature_len);
  int _libssh2_rsa_new_private_frommemory(libssh2_rsa_ctx ** rsa,
                                          LIBSSH2_SESSION * session,
                                          const char *filedata, size_t filedata_len,
                                          unsigned const char *passphrase);
  
  #if LIBSSH2_DSA
  int _libssh2_dsa_new(libssh2_dsa_ctx ** dsa,
                       const unsigned char *pdata,
                       unsigned long plen,
                       const unsigned char *qdata,
                       unsigned long qlen,
                       const unsigned char *gdata,
                       unsigned long glen,
                       const unsigned char *ydata,
                       unsigned long ylen,
                       const unsigned char *x, unsigned long x_len);
  int _libssh2_dsa_new_private(libssh2_dsa_ctx ** dsa,
                               LIBSSH2_SESSION * session,
                               const char *filename,
                               unsigned const char *passphrase);
  int _libssh2_dsa_sha1_verify(libssh2_dsa_ctx * dsactx,
                               const unsigned char *sig,
                               const unsigned char *m, unsigned long m_len);
  int _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx,
                             const unsigned char *hash,
                             unsigned long hash_len, unsigned char *sig);
  int _libssh2_dsa_new_private_frommemory(libssh2_dsa_ctx ** dsa,
                                          LIBSSH2_SESSION * session,
                                          const char *filedata, size_t filedata_len,
                                          unsigned const char *passphrase);
  #endif
  
  int _libssh2_cipher_init(_libssh2_cipher_ctx * h,
                           _libssh2_cipher_type(algo),
                           unsigned char *iv,
                           unsigned char *secret, int encrypt);
  
  int _libssh2_cipher_crypt(_libssh2_cipher_ctx * ctx,
                            _libssh2_cipher_type(algo),
                            int encrypt, unsigned char *block, size_t blocksize);
  
  int _libssh2_pub_priv_keyfile(LIBSSH2_SESSION *session,
                                unsigned char **method,
                                size_t *method_len,
                                unsigned char **pubkeydata,
                                size_t *pubkeydata_len,
                                const char *privatekey,
                                const char *passphrase);
  int _libssh2_pub_priv_keyfilememory(LIBSSH2_SESSION *session,
                                      unsigned char **method,
                                      size_t *method_len,
                                      unsigned char **pubkeydata,
                                      size_t *pubkeydata_len,
                                      const char *privatekeydata,
                                      size_t privatekeydata_len,
                                      const char *passphrase);
  
  void _libssh2_init_aes_ctr(void);
  
  #endif
  