Apache2
md.h File Reference
#include <apr_time.h>
#include "md_time.h"
#include "md_version.h"
Include dependency graph for md.h:

Go to the source code of this file.

Data Structures

struct  md_t
 
struct  md_pubcert_t
 

Macros

#define MD_PKEY_RSA_BITS_MIN   2048
 
#define MD_PKEY_RSA_BITS_DEF   2048
 
#define MD_HSTS_HEADER   "Strict-Transport-Security"
 
#define MD_HSTS_MAX_AGE_DEFAULT   15768000
 
#define PROTO_ACME_TLS_1   "acme-tls/1"
 
#define MD_TIME_LIFE_NORM   (apr_time_from_sec(100 * MD_SECS_PER_DAY))
 
#define MD_TIME_RENEW_WINDOW_DEF   (apr_time_from_sec(33 * MD_SECS_PER_DAY))
 
#define MD_TIME_WARN_WINDOW_DEF   (apr_time_from_sec(10 * MD_SECS_PER_DAY))
 
#define MD_TIME_OCSP_KEEP_NORM   (apr_time_from_sec(7 * MD_SECS_PER_DAY))
 
#define MD_OTHER   "other"
 
#define MD_KEY_ACCOUNT   "account"
 
#define MD_KEY_ACME_TLS_1   "acme-tls/1"
 
#define MD_KEY_ACTIVATION_DELAY   "activation-delay"
 
#define MD_KEY_ACTIVITY   "activity"
 
#define MD_KEY_AGREEMENT   "agreement"
 
#define MD_KEY_AUTHORIZATIONS   "authorizations"
 
#define MD_KEY_BITS   "bits"
 
#define MD_KEY_CA   "ca"
 
#define MD_KEY_CA_URL   "ca-url"
 
#define MD_KEY_CERT   "cert"
 
#define MD_KEY_CERT_FILES   "cert-files"
 
#define MD_KEY_CERTIFICATE   "certificate"
 
#define MD_KEY_CHALLENGE   "challenge"
 
#define MD_KEY_CHALLENGES   "challenges"
 
#define MD_KEY_CMD_DNS01   "cmd-dns-01"
 
#define MD_KEY_DNS01_VERSION   "cmd-dns-01-version"
 
#define MD_KEY_COMPLETE   "complete"
 
#define MD_KEY_CONTACT   "contact"
 
#define MD_KEY_CONTACTS   "contacts"
 
#define MD_KEY_CSR   "csr"
 
#define MD_KEY_CURVE   "curve"
 
#define MD_KEY_DETAIL   "detail"
 
#define MD_KEY_DISABLED   "disabled"
 
#define MD_KEY_DIR   "dir"
 
#define MD_KEY_DOMAIN   "domain"
 
#define MD_KEY_DOMAINS   "domains"
 
#define MD_KEY_EAB   "eab"
 
#define MD_KEY_EAB_REQUIRED   "externalAccountRequired"
 
#define MD_KEY_ENTRIES   "entries"
 
#define MD_KEY_ERRORED   "errored"
 
#define MD_KEY_ERROR   "error"
 
#define MD_KEY_ERRORS   "errors"
 
#define MD_KEY_EXPIRES   "expires"
 
#define MD_KEY_FINALIZE   "finalize"
 
#define MD_KEY_FINISHED   "finished"
 
#define MD_KEY_FROM   "from"
 
#define MD_KEY_GOOD   "good"
 
#define MD_KEY_HMAC   "hmac"
 
#define MD_KEY_HTTP   "http"
 
#define MD_KEY_HTTPS   "https"
 
#define MD_KEY_ID   "id"
 
#define MD_KEY_IDENTIFIER   "identifier"
 
#define MD_KEY_KEY   "key"
 
#define MD_KEY_KID   "kid"
 
#define MD_KEY_KEYAUTHZ   "keyAuthorization"
 
#define MD_KEY_LAST   "last"
 
#define MD_KEY_LAST_RUN   "last-run"
 
#define MD_KEY_LOCATION   "location"
 
#define MD_KEY_LOG   "log"
 
#define MD_KEY_MDS   "managed-domains"
 
#define MD_KEY_MESSAGE   "message"
 
#define MD_KEY_MUST_STAPLE   "must-staple"
 
#define MD_KEY_NAME   "name"
 
#define MD_KEY_NEXT_RUN   "next-run"
 
#define MD_KEY_NOTIFIED   "notified"
 
#define MD_KEY_NOTIFIED_RENEWED   "notified-renewed"
 
#define MD_KEY_OCSP   "ocsp"
 
#define MD_KEY_OCSPS   "ocsps"
 
#define MD_KEY_ORDERS   "orders"
 
#define MD_KEY_PERMANENT   "permanent"
 
#define MD_KEY_PKEY   "privkey"
 
#define MD_KEY_PKEY_FILES   "pkey-files"
 
#define MD_KEY_PROBLEM   "problem"
 
#define MD_KEY_PROTO   "proto"
 
#define MD_KEY_READY   "ready"
 
#define MD_KEY_REGISTRATION   "registration"
 
#define MD_KEY_RENEW   "renew"
 
#define MD_KEY_RENEW_AT   "renew-at"
 
#define MD_KEY_RENEW_MODE   "renew-mode"
 
#define MD_KEY_RENEWAL   "renewal"
 
#define MD_KEY_RENEWING   "renewing"
 
#define MD_KEY_RENEW_WINDOW   "renew-window"
 
#define MD_KEY_REQUIRE_HTTPS   "require-https"
 
#define MD_KEY_RESOURCE   "resource"
 
#define MD_KEY_RESPONSE   "response"
 
#define MD_KEY_REVOKED   "revoked"
 
#define MD_KEY_SERIAL   "serial"
 
#define MD_KEY_SHA256_FINGERPRINT   "sha256-fingerprint"
 
#define MD_KEY_STAPLING   "stapling"
 
#define MD_KEY_STATE   "state"
 
#define MD_KEY_STATE_DESCR   "state-descr"
 
#define MD_KEY_STATUS   "status"
 
#define MD_KEY_STORE   "store"
 
#define MD_KEY_SUBPROBLEMS   "subproblems"
 
#define MD_KEY_TEMPORARY   "temporary"
 
#define MD_KEY_TOS   "termsOfService"
 
#define MD_KEY_TOKEN   "token"
 
#define MD_KEY_TOTAL   "total"
 
#define MD_KEY_TRANSITIVE   "transitive"
 
#define MD_KEY_TYPE   "type"
 
#define MD_KEY_UNKNOWN   "unknown"
 
#define MD_KEY_UNTIL   "until"
 
#define MD_KEY_URL   "url"
 
#define MD_KEY_URLS   "urls"
 
#define MD_KEY_URI   "uri"
 
#define MD_KEY_VALID   "valid"
 
#define MD_KEY_VALID_FROM   "valid-from"
 
#define MD_KEY_VALUE   "value"
 
#define MD_KEY_VERSION   "version"
 
#define MD_KEY_WATCHED   "watched"
 
#define MD_KEY_WHEN   "when"
 
#define MD_KEY_WARN_WINDOW   "warn-window"
 
#define MD_VAL_UPDATE(n, o, s)   ((n)->s != (o)->s)
 
#define MD_SVAL_UPDATE(n, o, s)   ((n)->s && (!(o)->s || strcmp((n)->s, (o)->s)))
 
#define MD_OK(c)   (APR_SUCCESS == (rv = c))
 

Typedefs

typedef struct md_t md_t
 
typedef apr_status_t md_job_notify_cb(struct md_job_t *job, const char *reason, struct md_result_t *result, apr_pool_t *p, void *baton)
 
typedef struct md_pubcert_t md_pubcert_t
 

Enumerations

enum  md_state_t {
  MD_S_UNKNOWN = 0 , MD_S_INCOMPLETE = 1 , MD_S_COMPLETE = 2 , MD_S_EXPIRED_DEPRECATED = 3 ,
  MD_S_ERROR = 4 , MD_S_MISSING_INFORMATION = 5
}
 
enum  md_require_t { MD_REQUIRE_UNSET = -1 , MD_REQUIRE_OFF , MD_REQUIRE_TEMPORARY , MD_REQUIRE_PERMANENT }
 
enum  md_renew_mode_t { MD_RENEW_DEFAULT = -1 , MD_RENEW_MANUAL , MD_RENEW_AUTO , MD_RENEW_ALWAYS }
 

Functions

int md_contains (const md_t *md, const char *domain, int case_sensitive)
 
int md_domains_overlap (const md_t *md1, const md_t *md2)
 
int md_equal_domains (const md_t *md1, const md_t *md2, int case_sensitive)
 
int md_contains_domains (const md_t *md1, const md_t *md2)
 
const char * md_common_name (const md_t *md1, const md_t *md2)
 
apr_size_t md_common_name_count (const md_t *md1, const md_t *md2)
 
md_tmd_get_by_name (struct apr_array_header_t *mds, const char *name)
 
md_tmd_get_by_domain (struct apr_array_header_t *mds, const char *domain)
 
md_tmd_get_by_dns_overlap (struct apr_array_header_t *mds, const md_t *md)
 
md_tmd_create_empty (apr_pool_t *p)
 
md_tmd_create (apr_pool_t *p, struct apr_array_header_t *domains)
 
md_tmd_clone (apr_pool_t *p, const md_t *src)
 
md_tmd_copy (apr_pool_t *p, const md_t *src)
 
struct md_json_tmd_to_json (const md_t *md, apr_pool_t *p)
 
md_tmd_from_json (struct md_json_t *json, apr_pool_t *p)
 
struct md_json_tmd_to_public_json (const md_t *md, apr_pool_t *p)
 
int md_is_covered_by_alt_names (const md_t *md, const struct apr_array_header_t *alt_names)
 
int md_cert_count (const md_t *md)
 
const char * md_get_ca_name_from_url (apr_pool_t *p, const char *url)
 
apr_status_t md_get_ca_url_from_name (const char **purl, apr_pool_t *p, const char *name)
 

Macro Definition Documentation

◆ MD_HSTS_HEADER

#define MD_HSTS_HEADER   "Strict-Transport-Security"

◆ MD_HSTS_MAX_AGE_DEFAULT

#define MD_HSTS_MAX_AGE_DEFAULT   15768000

◆ MD_KEY_ACCOUNT

#define MD_KEY_ACCOUNT   "account"

◆ MD_KEY_ACME_TLS_1

#define MD_KEY_ACME_TLS_1   "acme-tls/1"

◆ MD_KEY_ACTIVATION_DELAY

#define MD_KEY_ACTIVATION_DELAY   "activation-delay"

◆ MD_KEY_ACTIVITY

#define MD_KEY_ACTIVITY   "activity"

◆ MD_KEY_AGREEMENT

#define MD_KEY_AGREEMENT   "agreement"

◆ MD_KEY_AUTHORIZATIONS

#define MD_KEY_AUTHORIZATIONS   "authorizations"

◆ MD_KEY_BITS

#define MD_KEY_BITS   "bits"

◆ MD_KEY_CA

#define MD_KEY_CA   "ca"

◆ MD_KEY_CA_URL

#define MD_KEY_CA_URL   "ca-url"

◆ MD_KEY_CERT

#define MD_KEY_CERT   "cert"

◆ MD_KEY_CERT_FILES

#define MD_KEY_CERT_FILES   "cert-files"

◆ MD_KEY_CERTIFICATE

#define MD_KEY_CERTIFICATE   "certificate"

◆ MD_KEY_CHALLENGE

#define MD_KEY_CHALLENGE   "challenge"

◆ MD_KEY_CHALLENGES

#define MD_KEY_CHALLENGES   "challenges"

◆ MD_KEY_CMD_DNS01

#define MD_KEY_CMD_DNS01   "cmd-dns-01"

◆ MD_KEY_COMPLETE

#define MD_KEY_COMPLETE   "complete"

◆ MD_KEY_CONTACT

#define MD_KEY_CONTACT   "contact"

◆ MD_KEY_CONTACTS

#define MD_KEY_CONTACTS   "contacts"

◆ MD_KEY_CSR

#define MD_KEY_CSR   "csr"

◆ MD_KEY_CURVE

#define MD_KEY_CURVE   "curve"

◆ MD_KEY_DETAIL

#define MD_KEY_DETAIL   "detail"

◆ MD_KEY_DIR

#define MD_KEY_DIR   "dir"

◆ MD_KEY_DISABLED

#define MD_KEY_DISABLED   "disabled"

◆ MD_KEY_DNS01_VERSION

#define MD_KEY_DNS01_VERSION   "cmd-dns-01-version"

◆ MD_KEY_DOMAIN

#define MD_KEY_DOMAIN   "domain"

◆ MD_KEY_DOMAINS

#define MD_KEY_DOMAINS   "domains"

◆ MD_KEY_EAB

#define MD_KEY_EAB   "eab"

◆ MD_KEY_EAB_REQUIRED

#define MD_KEY_EAB_REQUIRED   "externalAccountRequired"

◆ MD_KEY_ENTRIES

#define MD_KEY_ENTRIES   "entries"

◆ MD_KEY_ERROR

#define MD_KEY_ERROR   "error"

◆ MD_KEY_ERRORED

#define MD_KEY_ERRORED   "errored"

◆ MD_KEY_ERRORS

#define MD_KEY_ERRORS   "errors"

◆ MD_KEY_EXPIRES

#define MD_KEY_EXPIRES   "expires"

◆ MD_KEY_FINALIZE

#define MD_KEY_FINALIZE   "finalize"

◆ MD_KEY_FINISHED

#define MD_KEY_FINISHED   "finished"

◆ MD_KEY_FROM

#define MD_KEY_FROM   "from"

◆ MD_KEY_GOOD

#define MD_KEY_GOOD   "good"

◆ MD_KEY_HMAC

#define MD_KEY_HMAC   "hmac"

◆ MD_KEY_HTTP

#define MD_KEY_HTTP   "http"

◆ MD_KEY_HTTPS

#define MD_KEY_HTTPS   "https"

◆ MD_KEY_ID

#define MD_KEY_ID   "id"

◆ MD_KEY_IDENTIFIER

#define MD_KEY_IDENTIFIER   "identifier"

◆ MD_KEY_KEY

#define MD_KEY_KEY   "key"

◆ MD_KEY_KEYAUTHZ

#define MD_KEY_KEYAUTHZ   "keyAuthorization"

◆ MD_KEY_KID

#define MD_KEY_KID   "kid"

◆ MD_KEY_LAST

#define MD_KEY_LAST   "last"

◆ MD_KEY_LAST_RUN

#define MD_KEY_LAST_RUN   "last-run"

◆ MD_KEY_LOCATION

#define MD_KEY_LOCATION   "location"

◆ MD_KEY_LOG

#define MD_KEY_LOG   "log"

◆ MD_KEY_MDS

#define MD_KEY_MDS   "managed-domains"

◆ MD_KEY_MESSAGE

#define MD_KEY_MESSAGE   "message"

◆ MD_KEY_MUST_STAPLE

#define MD_KEY_MUST_STAPLE   "must-staple"

◆ MD_KEY_NAME

#define MD_KEY_NAME   "name"

◆ MD_KEY_NEXT_RUN

#define MD_KEY_NEXT_RUN   "next-run"

◆ MD_KEY_NOTIFIED

#define MD_KEY_NOTIFIED   "notified"

◆ MD_KEY_NOTIFIED_RENEWED

#define MD_KEY_NOTIFIED_RENEWED   "notified-renewed"

◆ MD_KEY_OCSP

#define MD_KEY_OCSP   "ocsp"

◆ MD_KEY_OCSPS

#define MD_KEY_OCSPS   "ocsps"

◆ MD_KEY_ORDERS

#define MD_KEY_ORDERS   "orders"

◆ MD_KEY_PERMANENT

#define MD_KEY_PERMANENT   "permanent"

◆ MD_KEY_PKEY

#define MD_KEY_PKEY   "privkey"

◆ MD_KEY_PKEY_FILES

#define MD_KEY_PKEY_FILES   "pkey-files"

◆ MD_KEY_PROBLEM

#define MD_KEY_PROBLEM   "problem"

◆ MD_KEY_PROTO

#define MD_KEY_PROTO   "proto"

◆ MD_KEY_READY

#define MD_KEY_READY   "ready"

◆ MD_KEY_REGISTRATION

#define MD_KEY_REGISTRATION   "registration"

◆ MD_KEY_RENEW

#define MD_KEY_RENEW   "renew"

◆ MD_KEY_RENEW_AT

#define MD_KEY_RENEW_AT   "renew-at"

◆ MD_KEY_RENEW_MODE

#define MD_KEY_RENEW_MODE   "renew-mode"

◆ MD_KEY_RENEW_WINDOW

#define MD_KEY_RENEW_WINDOW   "renew-window"

◆ MD_KEY_RENEWAL

#define MD_KEY_RENEWAL   "renewal"

◆ MD_KEY_RENEWING

#define MD_KEY_RENEWING   "renewing"

◆ MD_KEY_REQUIRE_HTTPS

#define MD_KEY_REQUIRE_HTTPS   "require-https"

◆ MD_KEY_RESOURCE

#define MD_KEY_RESOURCE   "resource"

◆ MD_KEY_RESPONSE

#define MD_KEY_RESPONSE   "response"

◆ MD_KEY_REVOKED

#define MD_KEY_REVOKED   "revoked"

◆ MD_KEY_SERIAL

#define MD_KEY_SERIAL   "serial"

◆ MD_KEY_SHA256_FINGERPRINT

#define MD_KEY_SHA256_FINGERPRINT   "sha256-fingerprint"

◆ MD_KEY_STAPLING

#define MD_KEY_STAPLING   "stapling"

◆ MD_KEY_STATE

#define MD_KEY_STATE   "state"

◆ MD_KEY_STATE_DESCR

#define MD_KEY_STATE_DESCR   "state-descr"

◆ MD_KEY_STATUS

#define MD_KEY_STATUS   "status"

◆ MD_KEY_STORE

#define MD_KEY_STORE   "store"

◆ MD_KEY_SUBPROBLEMS

#define MD_KEY_SUBPROBLEMS   "subproblems"

◆ MD_KEY_TEMPORARY

#define MD_KEY_TEMPORARY   "temporary"

◆ MD_KEY_TOKEN

#define MD_KEY_TOKEN   "token"

◆ MD_KEY_TOS

#define MD_KEY_TOS   "termsOfService"

◆ MD_KEY_TOTAL

#define MD_KEY_TOTAL   "total"

◆ MD_KEY_TRANSITIVE

#define MD_KEY_TRANSITIVE   "transitive"

◆ MD_KEY_TYPE

#define MD_KEY_TYPE   "type"

◆ MD_KEY_UNKNOWN

#define MD_KEY_UNKNOWN   "unknown"

◆ MD_KEY_UNTIL

#define MD_KEY_UNTIL   "until"

◆ MD_KEY_URI

#define MD_KEY_URI   "uri"

◆ MD_KEY_URL

#define MD_KEY_URL   "url"

◆ MD_KEY_URLS

#define MD_KEY_URLS   "urls"

◆ MD_KEY_VALID

#define MD_KEY_VALID   "valid"

◆ MD_KEY_VALID_FROM

#define MD_KEY_VALID_FROM   "valid-from"

◆ MD_KEY_VALUE

#define MD_KEY_VALUE   "value"

◆ MD_KEY_VERSION

#define MD_KEY_VERSION   "version"

◆ MD_KEY_WARN_WINDOW

#define MD_KEY_WARN_WINDOW   "warn-window"

◆ MD_KEY_WATCHED

#define MD_KEY_WATCHED   "watched"

◆ MD_KEY_WHEN

#define MD_KEY_WHEN   "when"

◆ MD_OK

#define MD_OK (   c)    (APR_SUCCESS == (rv = c))

◆ MD_OTHER

#define MD_OTHER   "other"

◆ MD_PKEY_RSA_BITS_DEF

#define MD_PKEY_RSA_BITS_DEF   2048

◆ MD_PKEY_RSA_BITS_MIN

#define MD_PKEY_RSA_BITS_MIN   2048

◆ MD_SVAL_UPDATE

#define MD_SVAL_UPDATE (   n,
  o,
  s 
)    ((n)->s && (!(o)->s || strcmp((n)->s, (o)->s)))

◆ MD_TIME_LIFE_NORM

#define MD_TIME_LIFE_NORM   (apr_time_from_sec(100 * MD_SECS_PER_DAY))

◆ MD_TIME_OCSP_KEEP_NORM

#define MD_TIME_OCSP_KEEP_NORM   (apr_time_from_sec(7 * MD_SECS_PER_DAY))

◆ MD_TIME_RENEW_WINDOW_DEF

#define MD_TIME_RENEW_WINDOW_DEF   (apr_time_from_sec(33 * MD_SECS_PER_DAY))

◆ MD_TIME_WARN_WINDOW_DEF

#define MD_TIME_WARN_WINDOW_DEF   (apr_time_from_sec(10 * MD_SECS_PER_DAY))

◆ MD_VAL_UPDATE

#define MD_VAL_UPDATE (   n,
  o,
  s 
)    ((n)->s != (o)->s)

◆ PROTO_ACME_TLS_1

#define PROTO_ACME_TLS_1   "acme-tls/1"

Typedef Documentation

◆ md_job_notify_cb

typedef apr_status_t md_job_notify_cb(struct md_job_t *job, const char *reason, struct md_result_t *result, apr_pool_t *p, void *baton)

◆ md_pubcert_t

typedef struct md_pubcert_t md_pubcert_t

◆ md_t

typedef struct md_t md_t

Enumeration Type Documentation

◆ md_renew_mode_t

Enumerator
MD_RENEW_DEFAULT 
MD_RENEW_MANUAL 
MD_RENEW_AUTO 
MD_RENEW_ALWAYS 

◆ md_require_t

Enumerator
MD_REQUIRE_UNSET 
MD_REQUIRE_OFF 
MD_REQUIRE_TEMPORARY 
MD_REQUIRE_PERMANENT 

◆ md_state_t

enum md_state_t
Enumerator
MD_S_UNKNOWN 
MD_S_INCOMPLETE 
MD_S_COMPLETE 
MD_S_EXPIRED_DEPRECATED 
MD_S_ERROR 
MD_S_MISSING_INFORMATION 

Function Documentation

◆ md_cert_count()

int md_cert_count ( const md_t md)

◆ md_clone()

md_t* md_clone ( apr_pool_t p,
const md_t src 
)

Deep copy an md record into another pool.

◆ md_common_name()

const char* md_common_name ( const md_t md1,
const md_t md2 
)

Get one common domain name of the two managed domains or NULL.

◆ md_common_name_count()

apr_size_t md_common_name_count ( const md_t md1,
const md_t md2 
)

Get the number of common domains.

◆ md_contains()

int md_contains ( const md_t md,
const char *  domain,
int  case_sensitive 
)

Determine if the Managed Domain contains a specific domain name.

◆ md_contains_domains()

int md_contains_domains ( const md_t md1,
const md_t md2 
)

Determine if the domains in md1 contain all domains of md2.

◆ md_copy()

md_t* md_copy ( apr_pool_t p,
const md_t src 
)

Shallow copy an md record into another pool.

◆ md_create()

md_t* md_create ( apr_pool_t p,
struct apr_array_header_t domains 
)

Create a managed domain, given a list of domain names.

◆ md_create_empty()

md_t* md_create_empty ( apr_pool_t p)

Create and empty md record, structures initialized.

◆ md_domains_overlap()

int md_domains_overlap ( const md_t md1,
const md_t md2 
)

Determine if the names of the two managed domains overlap.

◆ md_equal_domains()

int md_equal_domains ( const md_t md1,
const md_t md2,
int  case_sensitive 
)

Determine if the domain names are equal.

◆ md_from_json()

md_t* md_from_json ( struct md_json_t json,
apr_pool_t p 
)

◆ md_get_by_dns_overlap()

md_t* md_get_by_dns_overlap ( struct apr_array_header_t mds,
const md_t md 
)

Find a managed domain, different from the given one, that has overlaps in the domain list.

◆ md_get_by_domain()

md_t* md_get_by_domain ( struct apr_array_header_t mds,
const char *  domain 
)

Look up a managed domain by a DNS name it contains.

◆ md_get_by_name()

md_t* md_get_by_name ( struct apr_array_header_t mds,
const char *  name 
)

Look up a managed domain by its name.

◆ md_get_ca_name_from_url()

const char* md_get_ca_name_from_url ( apr_pool_t p,
const char *  url 
)

◆ md_get_ca_url_from_name()

apr_status_t md_get_ca_url_from_name ( const char **  purl,
apr_pool_t p,
const char *  name 
)

◆ md_is_covered_by_alt_names()

int md_is_covered_by_alt_names ( const md_t md,
const struct apr_array_header_t alt_names 
)

◆ md_to_json()

struct md_json_t* md_to_json ( const md_t md,
apr_pool_t p 
)

Convert the managed domain into a JSON representation and vice versa.

This reads and writes the following information: name, domains, ca_url, ca_proto and state.

◆ md_to_public_json()

struct md_json_t* md_to_public_json ( const md_t md,
apr_pool_t p 
)

Same as md_to_json(), but with sensitive fields stripped.