gsasl  2.2.2
gsasl.h
Go to the documentation of this file.
1 /* gsasl.h --- Header file for GNU SASL Library.
2  * Copyright (C) 2002-2025 Simon Josefsson
3  *
4  * This file is part of GNU SASL Library.
5  *
6  * GNU SASL Library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public License
8  * as published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * GNU SASL Library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with GNU SASL Library; if not, see
18  * <https://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef GSASL_H
23 # define GSASL_H
24 
33 # include <stdio.h> /* FILE */
34 # include <stddef.h> /* size_t */
35 # include <sys/types.h> /* ssize_t */
36 
37 /* Get version symbols. */
38 # include <gsasl-version.h>
39 
40 # ifndef _GSASL_API
41 # if defined GSASL_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY
42 # define _GSASL_API __attribute__((__visibility__("default")))
43 # elif defined GSASL_BUILDING && defined _MSC_VER && ! defined GSASL_STATIC
44 # define _GSASL_API __declspec(dllexport)
45 # elif defined _MSC_VER && ! defined GSASL_STATIC
46 # define _GSASL_API __declspec(dllimport)
47 # else
48 # define _GSASL_API
49 # endif
50 # endif
51 
52 # ifdef __cplusplus
53 extern "C"
54 {
55 # endif
56 
62  typedef struct Gsasl Gsasl;
63 
69  typedef struct Gsasl_session Gsasl_session;
70 
126  typedef enum
127  {
128  GSASL_OK = 0,
155  /* Mechanism specific errors. */
172  /* When adding new values, note that integers are not necessarily
173  assigned monotonously increasingly. */
175 
220  typedef enum
221  {
222  /* Information properties, e.g., username. */
232  GSASL_PIN = 10,
236  GSASL_QOP = 14,
248  /* Client callbacks. */
251  /* Server validation callback properties. */
260 
285  typedef int (*Gsasl_callback_function) (Gsasl * ctx, Gsasl_session * sctx,
286  Gsasl_property prop);
287 
297  typedef enum
298  {
302 
315  typedef enum
316  {
321 
329  typedef enum
330  {
333 
334  /* Library entry and exit points: version.c, init.c, done.c */
335  extern _GSASL_API int gsasl_init (Gsasl ** ctx);
336  extern _GSASL_API void gsasl_done (Gsasl * ctx);
337  extern _GSASL_API const char *gsasl_check_version (const char *req_version);
338 
339  /* Callback handling: callback.c */
340  extern _GSASL_API void gsasl_callback_set (Gsasl * ctx,
342  extern _GSASL_API int gsasl_callback (Gsasl * ctx, Gsasl_session * sctx,
343  Gsasl_property prop);
344 
345  extern _GSASL_API void gsasl_callback_hook_set (Gsasl * ctx, void *hook);
346  extern _GSASL_API void *gsasl_callback_hook_get (Gsasl * ctx);
347 
348  extern _GSASL_API void gsasl_session_hook_set (Gsasl_session * sctx,
349  void *hook);
350  extern _GSASL_API void *gsasl_session_hook_get (Gsasl_session * sctx);
351 
352  /* Property handling: property.c */
353  extern _GSASL_API int gsasl_property_set (Gsasl_session * sctx,
354  Gsasl_property prop,
355  const char *data);
357  Gsasl_property prop,
358  const char *data, size_t len);
359  extern _GSASL_API void gsasl_property_free (Gsasl_session * sctx,
360  Gsasl_property prop);
361  extern _GSASL_API const char *gsasl_property_get (Gsasl_session * sctx,
362  Gsasl_property prop);
363  extern _GSASL_API const char *gsasl_property_fast (Gsasl_session * sctx,
364  Gsasl_property prop);
365 
366  /* Mechanism handling: listmech.c, supportp.c, suggest.c */
367  extern _GSASL_API int gsasl_client_mechlist (Gsasl * ctx, char **out);
369  const char *name);
370  extern _GSASL_API const char *gsasl_client_suggest_mechanism (Gsasl * ctx,
371  const char
372  *mechlist);
373 
374  extern _GSASL_API int gsasl_server_mechlist (Gsasl * ctx, char **out);
376  const char *name);
377  extern _GSASL_API int gsasl_mechanism_name_p (const char *mech);
378 
379  /* Authentication functions: xstart.c, xstep.c, xfinish.c */
380  extern _GSASL_API int gsasl_client_start (Gsasl * ctx, const char *mech,
381  Gsasl_session ** sctx);
382  extern _GSASL_API int gsasl_server_start (Gsasl * ctx, const char *mech,
383  Gsasl_session ** sctx);
384  extern _GSASL_API int gsasl_step (Gsasl_session * sctx,
385  const char *input, size_t input_len,
386  char **output, size_t *output_len);
387  extern _GSASL_API int gsasl_step64 (Gsasl_session * sctx,
388  const char *b64input, char **b64output);
389  extern _GSASL_API void gsasl_finish (Gsasl_session * sctx);
390 
391  /* Session functions: xcode.c, mechname.c */
392  extern _GSASL_API int gsasl_encode (Gsasl_session * sctx,
393  const char *input, size_t input_len,
394  char **output, size_t *output_len);
395  extern _GSASL_API int gsasl_decode (Gsasl_session * sctx,
396  const char *input, size_t input_len,
397  char **output, size_t *output_len);
398  extern _GSASL_API const char *gsasl_mechanism_name (Gsasl_session * sctx);
399 
400  /* Error handling: error.c */
401  extern _GSASL_API const char *gsasl_strerror (int err);
402  extern _GSASL_API const char *gsasl_strerror_name (int err);
403 
404  /* Internationalized string processing: stringprep.c */
405  extern _GSASL_API int gsasl_saslprep (const char *in,
406  Gsasl_saslprep_flags flags,
407  char **out, int *stringpreprc);
408 
409  /* Crypto functions: crypto.c */
410 
426  typedef enum
427  {
428  /* Hash algorithm identifiers. */
431  } Gsasl_hash;
432 
446  typedef enum
447  {
448  /* Output sizes of hashes. */
453 
454  extern _GSASL_API int gsasl_nonce (char *data, size_t datalen);
455  extern _GSASL_API int gsasl_random (char *data, size_t datalen);
456 
457  extern _GSASL_API size_t gsasl_hash_length (Gsasl_hash hash);
458 
459  extern _GSASL_API int
461  const char *salted_password,
462  char *client_key,
463  char *server_key,
464  char *stored_key);
465  extern _GSASL_API int
467  const char *password,
468  unsigned int iteration_count,
469  const char *salt,
470  size_t saltlen,
471  char *salted_password,
472  char *client_key,
473  char *server_key, char *stored_key);
474 
475  /* Utilities: md5pwd.c, base64.c, free.c */
476  extern _GSASL_API int gsasl_simple_getpass (const char *filename,
477  const char *username,
478  char **key);
479  extern _GSASL_API int gsasl_base64_to (const char *in, size_t inlen,
480  char **out, size_t *outlen);
481  extern _GSASL_API int gsasl_base64_from (const char *in, size_t inlen,
482  char **out, size_t *outlen);
483  extern _GSASL_API int gsasl_hex_to (const char *in, size_t inlen,
484  char **out, size_t *outlen);
485  extern _GSASL_API int gsasl_hex_from (const char *in, char **out,
486  size_t *outlen);
487  extern _GSASL_API void gsasl_free (void *ptr);
488 
489  /* Get the mechanism API. */
490 # include <gsasl-mech.h>
491 
492 # ifdef __cplusplus
493 }
494 # endif
495 
496 #endif /* GSASL_H */
const char * name
Definition: error.c:37
_GSASL_API int gsasl_encode(Gsasl_session *sctx, const char *input, size_t input_len, char **output, size_t *output_len)
Definition: xcode.c:65
_GSASL_API int gsasl_scram_secrets_from_password(Gsasl_hash hash, const char *password, unsigned int iteration_count, const char *salt, size_t saltlen, char *salted_password, char *client_key, char *server_key, char *stored_key)
Definition: crypto.c:155
_GSASL_API int gsasl_init(Gsasl **ctx)
Definition: init.c:157
_GSASL_API size_t gsasl_hash_length(Gsasl_hash hash)
Definition: crypto.c:72
Gsasl_saslprep_flags
Definition: gsasl.h:330
@ GSASL_ALLOW_UNASSIGNED
Definition: gsasl.h:331
_GSASL_API const char * gsasl_strerror_name(int err)
Definition: error.c:222
_GSASL_API const char * gsasl_client_suggest_mechanism(Gsasl *ctx, const char *mechlist)
Definition: suggest.c:87
_GSASL_API int gsasl_base64_to(const char *in, size_t inlen, char **out, size_t *outlen)
Definition: base64.c:44
_GSASL_API int gsasl_server_mechlist(Gsasl *ctx, char **out)
Definition: listmech.c:93
_GSASL_API int gsasl_mechanism_name_p(const char *mech)
Definition: suggest.c:52
_GSASL_API void gsasl_callback_hook_set(Gsasl *ctx, void *hook)
Definition: callback.c:99
Gsasl_qop
Definition: gsasl.h:316
@ GSASL_QOP_AUTH_CONF
Definition: gsasl.h:319
@ GSASL_QOP_AUTH
Definition: gsasl.h:317
@ GSASL_QOP_AUTH_INT
Definition: gsasl.h:318
_GSASL_API int gsasl_nonce(char *data, size_t datalen)
Definition: crypto.c:38
_GSASL_API const char * gsasl_strerror(int err)
Definition: error.c:184
Gsasl_hash
Definition: gsasl.h:427
@ GSASL_HASH_SHA1
Definition: gsasl.h:429
@ GSASL_HASH_SHA256
Definition: gsasl.h:430
_GSASL_API int gsasl_hex_from(const char *in, char **out, size_t *outlen)
Definition: base64.c:143
#define _GSASL_API
Definition: gsasl.h:48
int(* Gsasl_callback_function)(Gsasl *ctx, Gsasl_session *sctx, Gsasl_property prop)
Definition: gsasl.h:285
_GSASL_API void gsasl_property_free(Gsasl_session *sctx, Gsasl_property prop)
Definition: property.c:158
Gsasl_rc
Definition: gsasl.h:127
@ GSASL_GSSAPI_UNWRAP_ERROR
Definition: gsasl.h:160
@ GSASL_NO_CLIENT_CODE
Definition: gsasl.h:139
@ GSASL_NO_CALLBACK
Definition: gsasl.h:141
@ GSASL_GSSAPI_IMPORT_NAME_ERROR
Definition: gsasl.h:157
@ GSASL_GSSAPI_RELEASE_OID_SET_ERROR
Definition: gsasl.h:171
@ GSASL_OK
Definition: gsasl.h:128
@ GSASL_SECURID_SERVER_NEED_ADDITIONAL_PASSCODE
Definition: gsasl.h:165
@ GSASL_GSSAPI_RELEASE_BUFFER_ERROR
Definition: gsasl.h:156
@ GSASL_NO_CB_TLS_EXPORTER
Definition: gsasl.h:154
@ GSASL_GSSAPI_ACCEPT_SEC_CONTEXT_ERROR
Definition: gsasl.h:159
@ GSASL_BASE64_ERROR
Definition: gsasl.h:133
@ GSASL_NO_OPENID20_REDIRECT_URL
Definition: gsasl.h:153
@ GSASL_SECURID_SERVER_NEED_NEW_PIN
Definition: gsasl.h:166
@ GSASL_GSSAPI_INQUIRE_MECH_FOR_SASLNAME_ERROR
Definition: gsasl.h:169
@ GSASL_AUTHENTICATION_ERROR
Definition: gsasl.h:137
@ GSASL_NEEDS_MORE
Definition: gsasl.h:129
@ GSASL_GSSAPI_TEST_OID_SET_MEMBER_ERROR
Definition: gsasl.h:170
@ GSASL_MALLOC_ERROR
Definition: gsasl.h:132
@ GSASL_NO_PASSWORD
Definition: gsasl.h:145
@ GSASL_NO_SAML20_IDP_IDENTIFIER
Definition: gsasl.h:151
@ GSASL_GSSAPI_DISPLAY_NAME_ERROR
Definition: gsasl.h:163
@ GSASL_NO_PASSCODE
Definition: gsasl.h:146
@ GSASL_NO_SERVICE
Definition: gsasl.h:148
@ GSASL_GSSAPI_ENCAPSULATE_TOKEN_ERROR
Definition: gsasl.h:167
@ GSASL_NO_AUTHZID
Definition: gsasl.h:144
@ GSASL_GSSAPI_ACQUIRE_CRED_ERROR
Definition: gsasl.h:162
@ GSASL_MECHANISM_CALLED_TOO_MANY_TIMES
Definition: gsasl.h:131
@ GSASL_NO_HOSTNAME
Definition: gsasl.h:149
@ GSASL_NO_AUTHID
Definition: gsasl.h:143
@ GSASL_GSSAPI_WRAP_ERROR
Definition: gsasl.h:161
@ GSASL_MECHANISM_PARSE_ERROR
Definition: gsasl.h:136
@ GSASL_NO_PIN
Definition: gsasl.h:147
@ GSASL_CRYPTO_ERROR
Definition: gsasl.h:134
@ GSASL_SASLPREP_ERROR
Definition: gsasl.h:135
@ GSASL_GSSAPI_DECAPSULATE_TOKEN_ERROR
Definition: gsasl.h:168
@ GSASL_NO_ANONYMOUS_TOKEN
Definition: gsasl.h:142
@ GSASL_NO_SERVER_CODE
Definition: gsasl.h:140
@ GSASL_NO_SAML20_REDIRECT_URL
Definition: gsasl.h:152
@ GSASL_INTEGRITY_ERROR
Definition: gsasl.h:138
@ GSASL_UNKNOWN_MECHANISM
Definition: gsasl.h:130
@ GSASL_GSSAPI_INIT_SEC_CONTEXT_ERROR
Definition: gsasl.h:158
@ GSASL_NO_CB_TLS_UNIQUE
Definition: gsasl.h:150
@ GSASL_GSSAPI_UNSUPPORTED_PROTECTION_ERROR
Definition: gsasl.h:164
_GSASL_API int gsasl_property_set_raw(Gsasl_session *sctx, Gsasl_property prop, const char *data, size_t len)
Definition: property.c:217
_GSASL_API int gsasl_hex_to(const char *in, size_t inlen, char **out, size_t *outlen)
Definition: base64.c:110
_GSASL_API int gsasl_base64_from(const char *in, size_t inlen, char **out, size_t *outlen)
Definition: base64.c:74
_GSASL_API int gsasl_step(Gsasl_session *sctx, const char *input, size_t input_len, char **output, size_t *output_len)
Definition: xstep.c:51
_GSASL_API void gsasl_session_hook_set(Gsasl_session *sctx, void *hook)
Definition: callback.c:139
_GSASL_API int gsasl_property_set(Gsasl_session *sctx, Gsasl_property prop, const char *data)
Definition: property.c:188
_GSASL_API int gsasl_server_start(Gsasl *ctx, const char *mech, Gsasl_session **sctx)
Definition: xstart.c:137
_GSASL_API const char * gsasl_check_version(const char *req_version)
Definition: version.c:45
_GSASL_API void * gsasl_session_hook_get(Gsasl_session *sctx)
Definition: callback.c:159
_GSASL_API int gsasl_step64(Gsasl_session *sctx, const char *b64input, char **b64output)
Definition: xstep.c:86
_GSASL_API int gsasl_random(char *data, size_t datalen)
Definition: crypto.c:54
_GSASL_API const char * gsasl_property_get(Gsasl_session *sctx, Gsasl_property prop)
Definition: property.c:291
_GSASL_API const char * gsasl_mechanism_name(Gsasl_session *sctx)
Definition: mechname.c:38
_GSASL_API void gsasl_free(void *ptr)
Definition: src/free.c:40
_GSASL_API void * gsasl_callback_hook_get(Gsasl *ctx)
Definition: callback.c:119
_GSASL_API void gsasl_done(Gsasl *ctx)
Definition: done.c:33
Gsasl_hash_length
Definition: gsasl.h:447
@ GSASL_HASH_SHA1_SIZE
Definition: gsasl.h:449
@ GSASL_HASH_MAX_SIZE
Definition: gsasl.h:451
@ GSASL_HASH_SHA256_SIZE
Definition: gsasl.h:450
_GSASL_API int gsasl_client_start(Gsasl *ctx, const char *mech, Gsasl_session **sctx)
Definition: xstart.c:119
Gsasl_property
Definition: gsasl.h:221
@ GSASL_DIGEST_MD5_HASHED_PASSWORD
Definition: gsasl.h:234
@ GSASL_SCRAM_STOREDKEY
Definition: gsasl.h:241
@ GSASL_SAML20_AUTHENTICATE_IN_BROWSER
Definition: gsasl.h:249
@ GSASL_HOSTNAME
Definition: gsasl.h:228
@ GSASL_AUTHZID
Definition: gsasl.h:224
@ GSASL_VALIDATE_GSSAPI
Definition: gsasl.h:255
@ GSASL_OPENID20_AUTHENTICATE_IN_BROWSER
Definition: gsasl.h:250
@ GSASL_SCRAM_SALT
Definition: gsasl.h:238
@ GSASL_QOP
Definition: gsasl.h:236
@ GSASL_CB_TLS_UNIQUE
Definition: gsasl.h:242
@ GSASL_SERVICE
Definition: gsasl.h:227
@ GSASL_GSSAPI_DISPLAY_NAME
Definition: gsasl.h:229
@ GSASL_VALIDATE_SIMPLE
Definition: gsasl.h:252
@ GSASL_VALIDATE_EXTERNAL
Definition: gsasl.h:253
@ GSASL_OPENID20_OUTCOME_DATA
Definition: gsasl.h:246
@ GSASL_SAML20_IDP_IDENTIFIER
Definition: gsasl.h:243
@ GSASL_SCRAM_SALTED_PASSWORD
Definition: gsasl.h:239
@ GSASL_VALIDATE_OPENID20
Definition: gsasl.h:258
@ GSASL_VALIDATE_SAML20
Definition: gsasl.h:257
@ GSASL_QOPS
Definition: gsasl.h:235
@ GSASL_PASSWORD
Definition: gsasl.h:225
@ GSASL_REALM
Definition: gsasl.h:233
@ GSASL_SCRAM_ITER
Definition: gsasl.h:237
@ GSASL_PASSCODE
Definition: gsasl.h:230
@ GSASL_AUTHID
Definition: gsasl.h:223
@ GSASL_SAML20_REDIRECT_URL
Definition: gsasl.h:244
@ GSASL_PIN
Definition: gsasl.h:232
@ GSASL_VALIDATE_SECURID
Definition: gsasl.h:256
@ GSASL_VALIDATE_ANONYMOUS
Definition: gsasl.h:254
@ GSASL_ANONYMOUS_TOKEN
Definition: gsasl.h:226
@ GSASL_SCRAM_SERVERKEY
Definition: gsasl.h:240
@ GSASL_CB_TLS_EXPORTER
Definition: gsasl.h:247
@ GSASL_SUGGESTED_PIN
Definition: gsasl.h:231
@ GSASL_OPENID20_REDIRECT_URL
Definition: gsasl.h:245
_GSASL_API int gsasl_simple_getpass(const char *filename, const char *username, char **key)
Definition: md5pwd.c:47
_GSASL_API void gsasl_callback_set(Gsasl *ctx, Gsasl_callback_function cb)
Definition: callback.c:44
_GSASL_API void gsasl_finish(Gsasl_session *sctx)
Definition: xfinish.c:33
_GSASL_API int gsasl_client_support_p(Gsasl *ctx, const char *name)
Definition: supportp.c:49
_GSASL_API int gsasl_scram_secrets_from_salted_password(Gsasl_hash hash, const char *salted_password, char *client_key, char *server_key, char *stored_key)
Definition: crypto.c:103
_GSASL_API int gsasl_callback(Gsasl *ctx, Gsasl_session *sctx, Gsasl_property prop)
Definition: callback.c:70
_GSASL_API const char * gsasl_property_fast(Gsasl_session *sctx, Gsasl_property prop)
Definition: property.c:261
_GSASL_API int gsasl_server_support_p(Gsasl *ctx, const char *name)
Definition: supportp.c:66
_GSASL_API int gsasl_client_mechlist(Gsasl *ctx, char **out)
Definition: listmech.c:74
Gsasl_mechname_limits
Definition: gsasl.h:298
@ GSASL_MIN_MECHANISM_SIZE
Definition: gsasl.h:299
@ GSASL_MAX_MECHANISM_SIZE
Definition: gsasl.h:300
_GSASL_API int gsasl_saslprep(const char *in, Gsasl_saslprep_flags flags, char **out, int *stringpreprc)
_GSASL_API int gsasl_decode(Gsasl_session *sctx, const char *input, size_t input_len, char **output, size_t *output_len)
Definition: xcode.c:98
Gsasl_mechanism * mech
Definition: internal.h:51
Gsasl * ctx
Definition: internal.h:49
char * password
Definition: internal.h:59
Definition: internal.h:36