KRB5_DIGEST(3)

πŸ’– KRB5_DIGEST β€” remote digest support, bestie edition πŸ’–

okay so you know how this is from the Library Functions Manual? yeah. it's the one and only KRB5_DIGEST(3). sit down, hydrate, we're doing remote digest (HTTP-DIGEST, SASL, CHAP) support together 🫢


✨ NAME ✨

krb5_digest, krb5_digest_alloc, krb5_digest_free, krb5_digest_set_server_cb, krb5_digest_set_type, krb5_digest_set_hostname, krb5_digest_get_server_nonce, krb5_digest_set_server_nonce, krb5_digest_get_opaque, krb5_digest_set_opaque, krb5_digest_get_identifier, krb5_digest_set_identifier, krb5_digest_init_request, krb5_digest_set_client_nonce, krb5_digest_set_digest, krb5_digest_set_username, krb5_digest_set_authid, krb5_digest_set_authentication_user, krb5_digest_set_realm, krb5_digest_set_method, krb5_digest_set_uri, krb5_digest_set_nonceCount, krb5_digest_set_qop, krb5_digest_request, krb5_digest_get_responseData, krb5_digest_get_rsp, krb5_digest_get_tickets, krb5_digest_get_client_binding, krb5_digest_get_a1_hash

…and what do they all do? remote digest (HTTP-DIGEST, SASL, CHAP) support. that's the whole vibe. no cap. πŸ’…


πŸ“š LIBRARY πŸ“š

Kerberos 5 Library (libkrb5, -lkrb5) β€” that's the one you link against, mwah πŸ’œ


πŸŽ€ SYNOPSIS πŸŽ€

like, here's literally every single signature, verbatim, because I am not about to paraphrase function prototypes and break your build, bestie 😭

#include <krb5.h>

typedef struct krb5_digest *krb5_digest;

krb5_error_code
krb5_digest_alloc(krb5_context context, krb5_digest *digest);

void
krb5_digest_free(krb5_digest digest);

krb5_error_code
krb5_digest_set_type(krb5_context context, krb5_digest digest,
    const char *type);

krb5_error_code
krb5_digest_set_server_cb(krb5_context context, krb5_digest digest,
    const char *type, const char *binding);

krb5_error_code
krb5_digest_set_hostname(krb5_context context, krb5_digest digest,
    const char *hostname);

const char *
krb5_digest_get_server_nonce(krb5_context context, krb5_digest digest);

krb5_error_code
krb5_digest_set_server_nonce(krb5_context context, krb5_digest digest,
    const char *nonce);

const char *
krb5_digest_get_opaque(krb5_context context, krb5_digest digest);

krb5_error_code
krb5_digest_set_opaque(krb5_context context, krb5_digest digest,
    const char *opaque);

const char *
krb5_digest_get_identifier(krb5_context context, krb5_digest digest);

krb5_error_code
krb5_digest_set_identifier(krb5_context context, krb5_digest digest,
    const char *id);

krb5_error_code
krb5_digest_init_request(krb5_context context, krb5_digest digest,
    krb5_realm realm, krb5_ccache ccache);

krb5_error_code
krb5_digest_set_client_nonce(krb5_context context, krb5_digest digest,
    const char *nonce);

krb5_error_code
krb5_digest_set_digest(krb5_context context, krb5_digest digest,
    const char *dgst);

krb5_error_code
krb5_digest_set_username(krb5_context context, krb5_digest digest,
    const char *username);

krb5_error_code
krb5_digest_set_authid(krb5_context context, krb5_digest digest,
    const char *authid);

krb5_error_code
krb5_digest_set_authentication_user(krb5_context context,
    krb5_digest digest, krb5_principal authentication_user);

krb5_error_code
krb5_digest_set_realm(krb5_context context, krb5_digest digest,
    const char *realm);

krb5_error_code
krb5_digest_set_method(krb5_context context, krb5_digest digest,
    const char *method);

krb5_error_code
krb5_digest_set_uri(krb5_context context, krb5_digest digest,
    const char *uri);

krb5_error_code
krb5_digest_set_nonceCount(krb5_context context, krb5_digest digest,
    const char *nonce_count);

krb5_error_code
krb5_digest_set_qop(krb5_context context, krb5_digest digest,
    const char *qop);

krb5_error_code
krb5_digest_request(krb5_context context, krb5_digest digest,
    krb5_realm realm, krb5_ccache ccache);

const char *
krb5_digest_get_responseData(krb5_context context, krb5_digest digest);

const char *
krb5_digest_get_rsp(krb5_context context, krb5_digest digest);

krb5_error_code
krb5_digest_get_tickets(krb5_context context, krb5_digest digest,
    Ticket **tickets);

krb5_error_code
krb5_digest_get_client_binding(krb5_context context, krb5_digest digest,
    char **type, char **binding);

krb5_error_code
krb5_digest_get_a1_hash(krb5_context context, krb5_digest digest,
    krb5_data *data);

🌸 DESCRIPTION 🌸

ok so here's the tea. there are only three things this page actually explains in prose, and I'm giving you all of them, no gatekeeping πŸ™ˆ

  • krb5_digest_alloc() β€” this one allocates the digest structure. that's it, that's the job. and bestie, listen: when you're done with it, you must free it with krb5_digest_free(). don't be the person who leaks. don't be them. 🫢
  • krb5_digest_alloc() returns 0 to say success ✨ otherwise it hands you back a Kerberos error code, and the pointer that digest points to gets set to NULL. so like, no dangling nonsense, she's tidy like that πŸ’…
  • krb5_digest_free() β€” frees the structure digest. that's the whole sentence. short, sweet, iconic. πŸ‘‘
lowkey a reminder: alloc without free is giving "I'll text back later" energy and we both know how that ends 😭

πŸ‘€ SEE ALSO πŸ‘€

iykyk β€” go read those next, they're the supporting cast πŸ¦‹


and that's the whole page, bestie!! this was HEIMDAL, dated February 18, 2007 β€” yeah she's an elder but she ate and left no crumbs 🌈⭐ go free your digest structs. periodt. πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from