Add additional function so that x509 name with specific type can be added
Originally added in https://github.com/sfackler/rust-openssl/pull/1371
This commit is contained in:
parent
4ce9c50b63
commit
f8e225e6a4
|
|
@ -78,6 +78,79 @@ impl fmt::Display for Asn1GeneralizedTimeRef {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The type of an ASN.1 value.
|
||||||
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||||
|
pub struct Asn1Type(c_int);
|
||||||
|
|
||||||
|
#[allow(missing_docs)] // no need to document the constants
|
||||||
|
impl Asn1Type {
|
||||||
|
pub const EOC: Asn1Type = Asn1Type(ffi::V_ASN1_EOC);
|
||||||
|
|
||||||
|
pub const BOOLEAN: Asn1Type = Asn1Type(ffi::V_ASN1_BOOLEAN);
|
||||||
|
|
||||||
|
pub const INTEGER: Asn1Type = Asn1Type(ffi::V_ASN1_INTEGER);
|
||||||
|
|
||||||
|
pub const BIT_STRING: Asn1Type = Asn1Type(ffi::V_ASN1_BIT_STRING);
|
||||||
|
|
||||||
|
pub const OCTET_STRING: Asn1Type = Asn1Type(ffi::V_ASN1_OCTET_STRING);
|
||||||
|
|
||||||
|
pub const NULL: Asn1Type = Asn1Type(ffi::V_ASN1_NULL);
|
||||||
|
|
||||||
|
pub const OBJECT: Asn1Type = Asn1Type(ffi::V_ASN1_OBJECT);
|
||||||
|
|
||||||
|
pub const OBJECT_DESCRIPTOR: Asn1Type = Asn1Type(ffi::V_ASN1_OBJECT_DESCRIPTOR);
|
||||||
|
|
||||||
|
pub const EXTERNAL: Asn1Type = Asn1Type(ffi::V_ASN1_EXTERNAL);
|
||||||
|
|
||||||
|
pub const REAL: Asn1Type = Asn1Type(ffi::V_ASN1_REAL);
|
||||||
|
|
||||||
|
pub const ENUMERATED: Asn1Type = Asn1Type(ffi::V_ASN1_ENUMERATED);
|
||||||
|
|
||||||
|
pub const UTF8STRING: Asn1Type = Asn1Type(ffi::V_ASN1_UTF8STRING);
|
||||||
|
|
||||||
|
pub const SEQUENCE: Asn1Type = Asn1Type(ffi::V_ASN1_SEQUENCE);
|
||||||
|
|
||||||
|
pub const SET: Asn1Type = Asn1Type(ffi::V_ASN1_SET);
|
||||||
|
|
||||||
|
pub const NUMERICSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_NUMERICSTRING);
|
||||||
|
|
||||||
|
pub const PRINTABLESTRING: Asn1Type = Asn1Type(ffi::V_ASN1_PRINTABLESTRING);
|
||||||
|
|
||||||
|
pub const T61STRING: Asn1Type = Asn1Type(ffi::V_ASN1_T61STRING);
|
||||||
|
|
||||||
|
pub const TELETEXSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_TELETEXSTRING);
|
||||||
|
|
||||||
|
pub const VIDEOTEXSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_VIDEOTEXSTRING);
|
||||||
|
|
||||||
|
pub const IA5STRING: Asn1Type = Asn1Type(ffi::V_ASN1_IA5STRING);
|
||||||
|
|
||||||
|
pub const UTCTIME: Asn1Type = Asn1Type(ffi::V_ASN1_UTCTIME);
|
||||||
|
|
||||||
|
pub const GENERALIZEDTIME: Asn1Type = Asn1Type(ffi::V_ASN1_GENERALIZEDTIME);
|
||||||
|
|
||||||
|
pub const GRAPHICSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_GRAPHICSTRING);
|
||||||
|
|
||||||
|
pub const ISO64STRING: Asn1Type = Asn1Type(ffi::V_ASN1_ISO64STRING);
|
||||||
|
|
||||||
|
pub const VISIBLESTRING: Asn1Type = Asn1Type(ffi::V_ASN1_VISIBLESTRING);
|
||||||
|
|
||||||
|
pub const GENERALSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_GENERALSTRING);
|
||||||
|
|
||||||
|
pub const UNIVERSALSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_UNIVERSALSTRING);
|
||||||
|
|
||||||
|
pub const BMPSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_BMPSTRING);
|
||||||
|
|
||||||
|
/// Constructs an `Asn1Type` from a raw OpenSSL value.
|
||||||
|
pub fn from_raw(value: c_int) -> Self {
|
||||||
|
Asn1Type(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the raw OpenSSL value represented by this type.
|
||||||
|
pub fn as_raw(&self) -> c_int {
|
||||||
|
self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Difference between two ASN1 times.
|
/// Difference between two ASN1 times.
|
||||||
///
|
///
|
||||||
/// This `struct` is created by the [`diff`] method on [`Asn1TimeRef`]. See its
|
/// This `struct` is created by the [`diff`] method on [`Asn1TimeRef`]. See its
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,9 @@ use std::ptr;
|
||||||
use std::slice;
|
use std::slice;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
use crate::asn1::{Asn1BitStringRef, Asn1IntegerRef, Asn1ObjectRef, Asn1StringRef, Asn1TimeRef};
|
use crate::asn1::{
|
||||||
|
Asn1BitStringRef, Asn1IntegerRef, Asn1ObjectRef, Asn1StringRef, Asn1TimeRef, Asn1Type,
|
||||||
|
};
|
||||||
use crate::bio::MemBioSlice;
|
use crate::bio::MemBioSlice;
|
||||||
use crate::conf::ConfRef;
|
use crate::conf::ConfRef;
|
||||||
use crate::error::ErrorStack;
|
use crate::error::ErrorStack;
|
||||||
|
|
@ -826,6 +828,33 @@ impl X509NameBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add a field entry by str with a specific type.
|
||||||
|
///
|
||||||
|
/// 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: Asn1Type,
|
||||||
|
) -> 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.as_raw(),
|
||||||
|
value.as_ptr(),
|
||||||
|
value.len() as c_int,
|
||||||
|
-1,
|
||||||
|
0,
|
||||||
|
))
|
||||||
|
.map(|_| ())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Add a field entry by NID.
|
/// Add a field entry by NID.
|
||||||
///
|
///
|
||||||
/// This corresponds to [`X509_NAME_add_entry_by_NID`].
|
/// This corresponds to [`X509_NAME_add_entry_by_NID`].
|
||||||
|
|
@ -847,6 +876,32 @@ impl X509NameBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add a field entry by NID with a specific type.
|
||||||
|
///
|
||||||
|
/// 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: Asn1Type,
|
||||||
|
) -> 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.as_raw(),
|
||||||
|
value.as_ptr() as *mut _,
|
||||||
|
value.len() as c_int,
|
||||||
|
-1,
|
||||||
|
0,
|
||||||
|
))
|
||||||
|
.map(|_| ())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Return an `X509Name`.
|
/// Return an `X509Name`.
|
||||||
pub fn build(self) -> X509Name {
|
pub fn build(self) -> X509Name {
|
||||||
self.0
|
self.0
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue