Commit 7d33b4c8 authored by Joshua Nitschke's avatar Joshua Nitschke
Browse files

Add additional function so that x509 name with specific type can be added

Fixes issue #1370
parent 624effd3
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -857,6 +857,28 @@ impl X509NameBuilder {
        }
    }

    /// Add a field entry by str with a specific type. (ex: 19 for V_ASN1_PRINTABLESTRING)
    ///
    /// This corresponds to [`X509_NAME_add_entry_by_txt`].
    ///
    /// [`X509_NAME_add_entry_by_txt`]: https://www.openssl.org/docs/man1.1.0/crypto/X509_NAME_add_entry_by_txt.html
    pub fn append_entry_by_text_with_type(&mut self, field: &str, value: &str, ty: i32) -> Result<(), ErrorStack> {
        unsafe {
            let field = CString::new(field).unwrap();
            assert!(value.len() <= c_int::max_value() as usize);
            cvt(ffi::X509_NAME_add_entry_by_txt(
                self.0.as_ptr(),
                field.as_ptr() as *mut _,
                ty,
                value.as_ptr(),
                value.len() as c_int,
                -1,
                0,
            ))
            .map(|_| ())
        }
    }

    /// Add a field entry by NID.
    ///
    /// This corresponds to [`X509_NAME_add_entry_by_NID`].
@@ -878,6 +900,27 @@ impl X509NameBuilder {
        }
    }

    /// Add a field entry by NID with a specific type. (ex: 19 for V_ASN1_PRINTABLESTRING)
    ///
    /// This corresponds to [`X509_NAME_add_entry_by_NID`].
    ///
    /// [`X509_NAME_add_entry_by_NID`]: https://www.openssl.org/docs/man1.1.0/crypto/X509_NAME_add_entry_by_NID.html
    pub fn append_entry_by_nid_with_type(&mut self, field: Nid, value: &str, ty: i32) -> Result<(), ErrorStack> {
        unsafe {
            assert!(value.len() <= c_int::max_value() as usize);
            cvt(ffi::X509_NAME_add_entry_by_NID(
                self.0.as_ptr(),
                field.as_raw(),
                ty,
                value.as_ptr() as *mut _,
                value.len() as c_int,
                -1,
                0,
            ))
            .map(|_| ())
        }
    }

    /// Return an `X509Name`.
    pub fn build(self) -> X509Name {
        self.0