X509_DIGEST(3ossl)
π X509_DIGEST β the OpenSSL manual, but make it cute
okay bestie, welcome to X509_DIGEST(3ossl), straight out of the OpenSSL manual set. this one is all about grabbing digests of various objects β certs, CRLs, pubkeys, names, requests, and that one PKCS7 struct that's always lurking. let's go π¦
β¨ NAME β¨
X509_digest, X509_digest_sig, X509_CRL_digest, X509_pubkey_digest, X509_NAME_digest, X509_REQ_digest, PKCS7_ISSUER_AND_SERIAL_digest β get digest of various objects π
πΈ SYNOPSIS πΈ
#include <openssl/x509.h>
int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md,
unsigned int *len);
ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert,
EVP_MD **md_used, int *md_is_fallback);
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md,
unsigned int *len);
int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
unsigned char *md, unsigned int *len);
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
unsigned char *md, unsigned int *len);
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
unsigned char *md, unsigned int *len);
#include <openssl/pkcs7.h>
int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,
const EVP_MD *type, unsigned char *md,
unsigned int *len);
π DESCRIPTION π
the special one: X509_digest_sig() π
X509_digest_sig() calculates a digest of the given certificate cert using the same hash algorithm as in its signature, if the digest is an integral part of the certificate signature algorithm identifier. that's the slay case. β¨
otherwise? fallback time, and the fallback hash algorithm is determined like this, fr fr:
SHA512if the signature algorithm isED25519SHAKE256if it isED448- otherwise
SHA256
the output parameters get assigned as follows, and yes this part matters:
- Unless md_used is
NULL, the hash algorithm used is provided in*md_usedand must be freed by the caller (if it is notNULL). yes bestie, you own that memory, no ghosting it π - Unless md_is_fallback is
NULL,*md_is_fallbackis set to1if the hash algorithm used is a fallback, otherwise to0.
the pubkey one ποΈ
X509_pubkey_digest() returns a digest of the DER representation of the public key in the specified X509 data object.
everybody else π
All other functions described here return a digest of the DER representation of their entire data objects. the whole thing. not just a piece. periodt.
the params, aka the group chat rules π±
- The type parameter specifies the digest to be used, such as
EVP_sha1(). - The md is a pointer to the buffer where the digest will be copied and is assumed to be large enough; the constant
EVP_MAX_MD_SIZEis suggested. - The len parameter, if not
NULL, points to a place where the digest size will be stored.
π«Ά RETURN VALUES π«Ά
X509_digest_sig()returns anASN1_OCTET_STRINGpointer on success, elseNULL.- All other functions described here return
1for success and0for failure.
ngl, 0 for failure is such a mood. check your return values, bestie, don't just vibe past them π
π₯ SEE ALSO π₯
β HISTORY β
The X509_digest_sig() function was added in OpenSSL 3.0. she's not an OG, she's new-ish and we love her anyway π
π COPYRIGHT π
Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
and that's the whole page, bestie π¦ mwah. this one's from OpenSSL 3.5.9, dated 2026-09-29 β go forth and digest responsibly, ilysm πβ¨πΈ
π¦ where this page comes from
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms