gsasl  2.2.1
digest-md5/tokens.h
Go to the documentation of this file.
1 /* tokens.h --- Types for DIGEST-MD5 tokens.
2  * Copyright (C) 2004-2024 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, write to the Free
18  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #ifndef DIGEST_MD5_TOKENS_H
24 # define DIGEST_MD5_TOKENS_H
25 
26 /* Get size_t. */
27 # include <stddef.h>
28 
29 /* Length of MD5 output. */
30 # define DIGEST_MD5_LENGTH 16
31 
32 /* Quality of Protection types. */
34 {
38 };
39 typedef enum digest_md5_qop digest_md5_qop;
40 
41 /* Cipher types. */
43 {
50 };
52 
53 /*
54  * digest-challenge =
55  * 1#( realm | nonce | qop-options | stale | server_maxbuf | charset
56  * algorithm | cipher-opts | auth-param )
57  *
58  * realm = "realm" "=" <"> realm-value <">
59  * realm-value = qdstr-val
60  * nonce = "nonce" "=" <"> nonce-value <">
61  * nonce-value = *qdtext
62  * qop-options = "qop" "=" <"> qop-list <">
63  * qop-list = 1#qop-value
64  * qop-value = "auth" | "auth-int" | "auth-conf" | qop-token
65  * ;; qop-token is reserved for identifying future
66  * ;; extensions to DIGEST-MD5
67  * qop-token = token
68  * stale = "stale" "=" "true"
69  * server_maxbuf = "maxbuf" "=" maxbuf-value
70  * maxbuf-value = 1*DIGIT
71  * charset = "charset" "=" "utf-8"
72  * algorithm = "algorithm" "=" "md5-sess"
73  * cipher-opts = "cipher" "=" <"> 1#cipher-value <">
74  * cipher-value = "3des" | "des" | "rc4-40" | "rc4" |
75  * "rc4-56" | "aes-cbc" | cipher-token
76  * ;; "des" and "3des" ciphers are obsolete.
77  * ;; cipher-token is reserved for new ciphersuites
78  * cipher-token = token
79  * auth-param = token "=" ( token | quoted-string )
80  *
81  */
83 {
84  size_t nrealms;
85  char **realms;
86  char *nonce;
87  int qops;
88  int stale;
89  unsigned long servermaxbuf;
90  int utf8;
91  int ciphers;
92 };
94 
95 # define DIGEST_MD5_RESPONSE_LENGTH 32
96 
97 /*
98  * digest-response = 1#( username | realm | nonce | cnonce |
99  * nonce-count | qop | digest-uri | response |
100  * client_maxbuf | charset | cipher | authzid |
101  * auth-param )
102  *
103  * username = "username" "=" <"> username-value <">
104  * username-value = qdstr-val
105  * cnonce = "cnonce" "=" <"> cnonce-value <">
106  * cnonce-value = *qdtext
107  * nonce-count = "nc" "=" nc-value
108  * nc-value = 8LHEX
109  * client_maxbuf = "maxbuf" "=" maxbuf-value
110  * qop = "qop" "=" qop-value
111  * digest-uri = "digest-uri" "=" <"> digest-uri-value <">
112  * digest-uri-value = serv-type "/" host [ "/" serv-name ]
113  * serv-type = 1*ALPHA
114  * serv-name = host
115  * response = "response" "=" response-value
116  * response-value = 32LHEX
117  * LHEX = "0" | "1" | "2" | "3" |
118  * "4" | "5" | "6" | "7" |
119  * "8" | "9" | "a" | "b" |
120  * "c" | "d" | "e" | "f"
121  * cipher = "cipher" "=" cipher-value
122  * authzid = "authzid" "=" <"> authzid-value <">
123  * authzid-value = qdstr-val
124  *
125  */
127 {
128  char *username;
129  char *realm;
130  char *nonce;
131  char *cnonce;
132  unsigned long nc;
134  char *digesturi;
135  unsigned long clientmaxbuf;
136  int utf8;
138  char *authzid;
140 };
142 
143 /*
144  * response-auth = "rspauth" "=" response-value
145  */
147 {
149 };
150 typedef struct digest_md5_finish digest_md5_finish;
151 
152 #endif /* DIGEST_MD5_TOKENS_H */
digest_md5_qop
@ DIGEST_MD5_QOP_AUTH_INT
@ DIGEST_MD5_QOP_AUTH_CONF
@ DIGEST_MD5_QOP_AUTH
digest_md5_cipher
@ DIGEST_MD5_CIPHER_RC4_56
@ DIGEST_MD5_CIPHER_3DES
@ DIGEST_MD5_CIPHER_DES
@ DIGEST_MD5_CIPHER_AES_CBC
@ DIGEST_MD5_CIPHER_RC4
@ DIGEST_MD5_CIPHER_RC4_40
#define DIGEST_MD5_RESPONSE_LENGTH
unsigned long servermaxbuf
char rspauth[DIGEST_MD5_RESPONSE_LENGTH+1]
digest_md5_cipher cipher
char response[DIGEST_MD5_RESPONSE_LENGTH+1]
unsigned long clientmaxbuf