Skip to main content

rite_model/params/
pki.rs

1//! Params for the certificate actions.
2
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6use crate::CertProfile;
7
8/// Params for `generate_csr` action.
9#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
10#[serde(deny_unknown_fields)]
11#[non_exhaustive]
12pub struct GenerateCsrParams {
13    /// Subject as RFC 4514 DN string: `"CN=example.com,O=Acme,C=US"`
14    pub subject: String,
15    /// Subject Alternative Names: `"DNS:foo.com"`, `"IP:1.2.3.4"`, `"email:u@example.com"`
16    #[serde(default)]
17    pub san: Option<Vec<String>>,
18}
19
20/// Params for `issue_certificate` action.
21#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
22#[serde(deny_unknown_fields)]
23#[non_exhaustive]
24pub struct IssueCertificateParams {
25    /// Certificate profile controlling extensions. `sub_ca` is also
26    /// accepted as `intermediate_ca`.
27    //
28    // The least privileged shape is the default.
29    #[serde(default = "end_entity")]
30    pub profile: CertProfile,
31    /// Certificate validity period in days, about ten years by default.
32    #[serde(default = "ten_years")]
33    pub validity_days: u32,
34    /// Issuer Common Name override (as `CN=<value>`) when no `issuer_cert`
35    /// input is provided. Defaults to the CSR subject, producing a
36    /// self-issued certificate.
37    #[serde(default)]
38    pub issuer_cn: Option<String>,
39    /// `pathLenConstraint` for `sub_ca` profile (default: 0).
40    #[serde(default)]
41    pub path_len: Option<u8>,
42}
43
44fn end_entity() -> CertProfile {
45    CertProfile::EndEntity
46}
47
48fn ten_years() -> u32 {
49    3650
50}
51
52impl Default for IssueCertificateParams {
53    fn default() -> Self {
54        Self {
55            profile: end_entity(),
56            validity_days: ten_years(),
57            issuer_cn: None,
58            path_len: None,
59        }
60    }
61}