vauth.h revision e3149cc1cf501b46caba8d47652ac90b95c78eac
1#ifndef HEADER_CURL_VAUTH_H 2#define HEADER_CURL_VAUTH_H 3/*************************************************************************** 4 * _ _ ____ _ 5 * Project ___| | | | _ \| | 6 * / __| | | | |_) | | 7 * | (__| |_| | _ <| |___ 8 * \___|\___/|_| \_\_____| 9 * 10 * Copyright (C) 2014 - 2016, Steve Holme, <steve_holme@hotmail.com>. 11 * 12 * This software is licensed as described in the file COPYING, which 13 * you should have received as part of this distribution. The terms 14 * are also available at https://curl.haxx.se/docs/copyright.html. 15 * 16 * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17 * copies of the Software, and permit persons to whom the Software is 18 * furnished to do so, under the terms of the COPYING file. 19 * 20 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21 * KIND, either express or implied. 22 * 23 ***************************************************************************/ 24 25#include <curl/curl.h> 26 27struct Curl_easy; 28 29#if !defined(CURL_DISABLE_CRYPTO_AUTH) 30struct digestdata; 31#endif 32 33#if defined(USE_NTLM) 34struct ntlmdata; 35#endif 36 37#if defined(USE_KERBEROS5) 38struct kerberos5data; 39#endif 40 41#if (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)) && defined(USE_SPNEGO) 42struct negotiatedata; 43#endif 44 45#if defined(USE_WINDOWS_SSPI) 46#define GSS_ERROR(status) (status & 0x80000000) 47#endif 48 49/* This is used to build a SPN string */ 50#if !defined(USE_WINDOWS_SSPI) 51char *Curl_auth_build_spn(const char *service, const char *host, 52 const char *realm); 53#else 54TCHAR *Curl_auth_build_spn(const char *service, const char *host, 55 const char *realm); 56#endif 57 58/* This is used to generate a base64 encoded PLAIN cleartext message */ 59CURLcode Curl_auth_create_plain_message(struct Curl_easy *data, 60 const char *userp, 61 const char *passwdp, 62 char **outptr, size_t *outlen); 63 64/* This is used to generate a base64 encoded LOGIN cleartext message */ 65CURLcode Curl_auth_create_login_message(struct Curl_easy *data, 66 const char *valuep, char **outptr, 67 size_t *outlen); 68 69/* This is used to generate a base64 encoded EXTERNAL cleartext message */ 70CURLcode Curl_auth_create_external_message(struct Curl_easy *data, 71 const char *user, char **outptr, 72 size_t *outlen); 73 74#if !defined(CURL_DISABLE_CRYPTO_AUTH) 75/* This is used to decode a CRAM-MD5 challenge message */ 76CURLcode Curl_auth_decode_cram_md5_message(const char *chlg64, char **outptr, 77 size_t *outlen); 78 79/* This is used to generate a CRAM-MD5 response message */ 80CURLcode Curl_auth_create_cram_md5_message(struct Curl_easy *data, 81 const char *chlg, 82 const char *userp, 83 const char *passwdp, 84 char **outptr, size_t *outlen); 85 86/* This is used to generate a base64 encoded DIGEST-MD5 response message */ 87CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data, 88 const char *chlg64, 89 const char *userp, 90 const char *passwdp, 91 const char *service, 92 char **outptr, size_t *outlen); 93 94/* This is used to decode a HTTP DIGEST challenge message */ 95CURLcode Curl_auth_decode_digest_http_message(const char *chlg, 96 struct digestdata *digest); 97 98/* This is used to generate a HTTP DIGEST response message */ 99CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data, 100 const char *userp, 101 const char *passwdp, 102 const unsigned char *request, 103 const unsigned char *uri, 104 struct digestdata *digest, 105 char **outptr, size_t *outlen); 106 107/* This is used to clean up the digest specific data */ 108void Curl_auth_digest_cleanup(struct digestdata *digest); 109#endif /* !CURL_DISABLE_CRYPTO_AUTH */ 110 111#if defined(USE_NTLM) 112/* This is used to generate a base64 encoded NTLM type-1 message */ 113CURLcode Curl_auth_create_ntlm_type1_message(const char *userp, 114 const char *passwdp, 115 struct ntlmdata *ntlm, 116 char **outptr, 117 size_t *outlen); 118 119/* This is used to decode a base64 encoded NTLM type-2 message */ 120CURLcode Curl_auth_decode_ntlm_type2_message(struct Curl_easy *data, 121 const char *type2msg, 122 struct ntlmdata *ntlm); 123 124/* This is used to generate a base64 encoded NTLM type-3 message */ 125CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data, 126 const char *userp, 127 const char *passwdp, 128 struct ntlmdata *ntlm, 129 char **outptr, size_t *outlen); 130 131/* This is used to clean up the NTLM specific data */ 132void Curl_auth_ntlm_cleanup(struct ntlmdata *ntlm); 133#endif /* USE_NTLM */ 134 135/* This is used to generate a base64 encoded OAuth 2.0 message */ 136CURLcode Curl_auth_create_oauth_bearer_message(struct Curl_easy *data, 137 const char *user, 138 const char *host, 139 const long port, 140 const char *bearer, 141 char **outptr, size_t *outlen); 142#if defined(USE_KERBEROS5) 143/* This is used to generate a base64 encoded GSSAPI (Kerberos V5) user token 144 message */ 145CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data, 146 const char *userp, 147 const char *passwdp, 148 const char *service, 149 const char *host, 150 const bool mutual, 151 const char *chlg64, 152 struct kerberos5data *krb5, 153 char **outptr, size_t *outlen); 154 155/* This is used to generate a base64 encoded GSSAPI (Kerberos V5) security 156 token message */ 157CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data, 158 const char *input, 159 struct kerberos5data *krb5, 160 char **outptr, 161 size_t *outlen); 162 163/* This is used to clean up the GSSAPI specific data */ 164void Curl_auth_gssapi_cleanup(struct kerberos5data *krb5); 165#endif /* USE_KERBEROS5 */ 166 167#if defined(USE_SPNEGO) 168/* This is used to decode a base64 encoded SPNEGO (Negotiate) challenge 169 message */ 170CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, 171 const char *user, 172 const char *passwood, 173 const char *service, 174 const char *host, 175 const char *chlg64, 176 struct negotiatedata *nego); 177 178/* This is used to generate a base64 encoded SPNEGO (Negotiate) response 179 message */ 180CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data, 181 struct negotiatedata *nego, 182 char **outptr, size_t *outlen); 183 184/* This is used to clean up the SPNEGO specifiec data */ 185void Curl_auth_spnego_cleanup(struct negotiatedata *nego); 186 187#endif /* USE_SPNEGO */ 188 189#endif /* HEADER_CURL_VAUTH_H */ 190