📄 auth_digest.h
字号:
/* * This file is part of the Sofia-SIP package * * Copyright (C) 2005 Nokia Corporation. * * Contact: Pekka Pessi <pekka.pessi@nokia.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * */#ifndef AUTH_DIGEST_H/** Defined when <sofia-sip/auth_digest.h> has been included. */#define AUTH_DIGEST_H/**@file sofia-sip/auth_digest.h * Datatypes and functions for Digest authentication. * * The structures and functions here follow the RFC 2617. * * @sa @RFC2617, * <i>"HTTP Authentication: Basic and Digest Access Authentication"</i>, * J. Franks et al, * June 1999. * * @sa @RFC3261 section 22 * * @author Pekka Pessi <Pekka.Pessi@nokia.com> * * @date Created: Thu Feb 22 12:25:55 2001 ppessi */#ifndef SU_ALLOC_H#include <sofia-sip/su_alloc.h>#endifSOFIA_BEGIN_DECLS/** Parameters for digest-challenge. * * The digest-challenge is sent by server or proxy to client. It can be * included in, e.g, WWW-Authenticate or Proxy-Authenticate headers. * * @code * challenge = "Digest" digest-challenge * digest-challenge = 1#( realm | [domain] | nonce | * [opaque] | [stale] | [algorithm] | * [qop-options] | [auth-param] ) * domain = "domain" "=" <"> URI ( 1*SP URI ) <"> * URI = absoluteURI | abs_path * nonce = "nonce" "=" nonce-value * nonce-value = quoted-string * opaque = "opaque" "=" quoted-string * stale = "stale" "=" ( "true" | "false" ) * algorithm = "algorithm" "=" ( "MD5" | "MD5-sess" | token ) * qop-options = "qop" "=" <"> 1#qop-value <"> * qop-value = "auth" | "auth-int" | token * @endcode * * @sa @RFC2617 */typedef struct { int ac_size; char const *ac_realm; /**< realm */ char const *ac_domain; /**< domain */ char const *ac_nonce; /**< nonce */ char const *ac_opaque; /**< opaque */ char const *ac_algorithm; /**< algorithm */ char const *ac_qop; /**< qop */ unsigned ac_stale : 1; /**< stale=true */ unsigned ac_md5 : 1; /**< algorithm=MS5 (or missing) */ unsigned ac_md5sess : 1; /**< algorithm=MD5-sess */ unsigned ac_sha1 : 1; /**< algorithm=sha1 (SSA Hash) */ unsigned ac_auth : 1; /**< qop=auth */ unsigned ac_auth_int : 1; /**< qop=auth-int */ unsigned : 0;} auth_challenge_t;/** Digest parameters for digest-response in Authorize. * * The digest-response is sent by the client to a server or a proxy. It can * be included in, e.g., Authorization or Proxy-Authorization headers. * * @code * credentials = "Digest" digest-response * digest-response = 1#( username | realm | nonce | digest-uri | * response | [ algorithm ] | [cnonce] | [opaque] | * [message-qop] | [nonce-count] | [auth-param] ) * username = "username" "=" username-value * username-value = quoted-string * digest-uri = "uri" "=" digest-uri-value * digest-uri-value = request-uri ; As specified by HTTP/1.1 * message-qop = "qop" "=" qop-value * cnonce = "cnonce" "=" cnonce-value * cnonce-value = nonce-value * nonce-count = "nc" "=" nc-value * nc-value = 8LHEX * response = "response" "=" request-digest * request-digest = <"> 32LHEX <"> * LHEX = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | * "8" | "9" | "a" | "b" | "c" | "d" | "e" | "f" * @endcode */typedef struct { int ar_size; char const *ar_username; char const *ar_realm; /**< realm */ char const *ar_nonce; /**< nonce */ char const *ar_uri; /**< uri */ char const *ar_response; /**< response */ char const *ar_algorithm; /**< algorithm */ char const *ar_cnonce; /**< cnonce */ char const *ar_opaque; /**< opaque */ char const *ar_qop; /**< qop */ char const *ar_nc; /**< nonce count */ unsigned ar_md5 : 1; /**< MS5 algorithm */ unsigned ar_md5sess : 1; /**< MD5-sess algorithm */ unsigned ar_sha1 : 1; /**< SHA1 algorithm */ unsigned ar_auth : 1; /**< qop=auth */ unsigned ar_auth_int : 1; /**< qop=auth-int */ unsigned : 0;} auth_response_t;typedef char auth_hexmd5_t[33];SOFIAPUBFUN issize_t auth_digest_challenge_get(su_home_t *, auth_challenge_t *, char const * const params[]);SOFIAPUBFUN void auth_digest_challenge_free_params(su_home_t *home, auth_challenge_t *ac);SOFIAPUBFUN issize_t auth_digest_response_get(su_home_t *, auth_response_t *, char const * const params[]);SOFIAPUBFUN int auth_digest_a1(auth_response_t *ar, auth_hexmd5_t ha1, char const *secret);SOFIAPUBFUN int auth_digest_a1sess(auth_response_t *ar, auth_hexmd5_t ha1sess, char const *ha1);SOFIAPUBFUN int auth_digest_sessionkey(auth_response_t *, auth_hexmd5_t ha1, char const *secret);SOFIAPUBFUN int auth_digest_response(auth_response_t *, auth_hexmd5_t response, auth_hexmd5_t const ha1, char const *method_name, void const *data, isize_t dlen);SOFIAPUBFUN int auth_struct_copy(void *dst, void const *src, isize_t s_size);SOFIAPUBFUN int auth_strcmp(char const *quoted, char const *unquoted);SOFIA_END_DECLS#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -