Go to the documentation of this file.
32 int key_len,
char **dest,
int *dest_len)
34 if (!strncmp(
key,
"realm=", key_len)) {
36 *dest_len =
sizeof(
state->realm);
41 int key_len,
char **dest,
int *dest_len)
45 if (!strncmp(
key,
"realm=", key_len)) {
47 *dest_len =
sizeof(
state->realm);
48 }
else if (!strncmp(
key,
"nonce=", key_len)) {
49 *dest = digest->
nonce;
50 *dest_len =
sizeof(digest->
nonce);
51 }
else if (!strncmp(
key,
"opaque=", key_len)) {
53 *dest_len =
sizeof(digest->
opaque);
54 }
else if (!strncmp(
key,
"algorithm=", key_len)) {
57 }
else if (!strncmp(
key,
"qop=", key_len)) {
59 *dest_len =
sizeof(digest->
qop);
60 }
else if (!strncmp(
key,
"stale=", key_len)) {
61 *dest = digest->
stale;
62 *dest_len =
sizeof(digest->
stale);
67 int key_len,
char **dest,
int *dest_len)
71 if (!strncmp(
key,
"nextnonce=", key_len)) {
72 *dest = digest->
nonce;
73 *dest_len =
sizeof(digest->
nonce);
79 char *ptr = strstr(qop,
"auth");
80 char *end = ptr + strlen(
"auth");
82 if (ptr && (!*end ||
av_isspace(*end) || *end ==
',') &&
83 (ptr == qop ||
av_isspace(ptr[-1]) || ptr[-1] ==
',')) {
111 sizeof(
state->digest_params.qop));
126 va_start(vl, md5ctx);
128 const char* str = va_arg(vl,
const char*);
138 const char *password,
const char *uri,
143 uint32_t cnonce_buf[2];
147 char A1hash[33], A2hash[33], response[33];
148 struct AVMD5 *md5ctx;
156 for (
i = 0;
i < 2;
i++)
158 ff_data_to_hex(cnonce, (
const uint8_t*) cnonce_buf,
sizeof(cnonce_buf), 1);
170 }
else if (!strcmp(digest->
algorithm,
"MD5-sess")) {
188 if (!strcmp(digest->
qop,
"auth") || !strcmp(digest->
qop,
"auth-int")) {
197 if (!strcmp(digest->
qop,
"") || !strcmp(digest->
qop,
"auth")) {
198 }
else if (!strcmp(digest->
qop,
"auth-int")) {
206 len = strlen(username) + strlen(
state->realm) + strlen(digest->
nonce) +
207 strlen(uri) + strlen(response) + strlen(digest->
algorithm) +
208 strlen(digest->
opaque) + strlen(digest->
qop) + strlen(cnonce) +
229 if (digest->
qop[0]) {
241 const char *path,
const char *method)
243 char *authstr =
NULL;
248 if (!auth || !strchr(auth,
':'))
252 int auth_b64_len,
len;
259 len = auth_b64_len + 30;
268 ptr = authstr + strlen(authstr);
278 if ((password = strchr(username,
':'))) {
@ HTTP_AUTH_BASIC
HTTP 1.0 Basic auth from RFC 1945 (also in RFC 2617)
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
static av_const int av_isspace(int c)
Locale-independent conversion of ASCII isspace.
static char * make_digest_auth(HTTPAuthState *state, const char *username, const char *password, const char *uri, const char *method)
static void update_md5_strings(struct AVMD5 *md5ctx,...)
char * ff_http_auth_create_response(HTTPAuthState *state, const char *auth, const char *path, const char *method)
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
char * ff_urldecode(const char *url, int decode_plus_sign)
Decodes an URL from its percent-encoded form back into normal representation.
char qop[30]
Quality of protection, containing the one that we've chosen to use, from the alternatives that the se...
@ HTTP_AUTH_DIGEST
HTTP 1.1 Digest auth from RFC 2617.
int av_stristart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str independent of case.
void ff_http_auth_handle_header(HTTPAuthState *state, const char *key, const char *value)
static void handle_digest_params(HTTPAuthState *state, const char *key, int key_len, char **dest, int *dest_len)
char nonce[300]
Server specified nonce.
static void choose_qop(char *qop, int size)
HTTP Authentication state structure.
char stale[10]
The server indicated that the auth was ok, but needs to be redone with a new, non-stale nonce.
static void handle_digest_update(HTTPAuthState *state, const char *key, int key_len, char **dest, int *dest_len)
void av_md5_init(AVMD5 *ctx)
Initialize MD5 hashing.
#define AV_BASE64_SIZE(x)
Calculate the output size needed to base64-encode x bytes to a null-terminated string.
#define i(width, name, range_min, range_max)
static void handle_basic_params(HTTPAuthState *state, const char *key, int key_len, char **dest, int *dest_len)
char opaque[300]
A server-specified string that should be included in authentication responses, not included in the ac...
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
void av_md5_final(AVMD5 *ctx, uint8_t *dst)
Finish hashing and output digest value.
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes,...
void * av_malloc(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int nc
Nonce count, the number of earlier replies where this particular nonce has been used.
struct AVMD5 * av_md5_alloc(void)
Allocate an AVMD5 context.
char * av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
Encode data to base64 and null-terminate.
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
void av_md5_update(AVMD5 *ctx, const uint8_t *src, size_t len)
Update hash value.
char algorithm[10]
Server specified digest algorithm.
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.