Commit ca6f97d8 authored by Steven Fackler's avatar Steven Fackler
Browse files

cleanups to asn1 types

parent 1dd71add
Loading
Loading
Loading
Loading
+41 −63
Original line number Diff line number Diff line
@@ -83,99 +83,77 @@ impl fmt::Display for Asn1GeneralizedTimeRef {
    }
}

/// An ASN.1 tag value
/// The type of an ASN.1 value.
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct Asn1Tag(c_int);
pub struct Asn1Type(c_int);

impl Asn1Tag {
    /// Return the underlying c_int value
    pub fn as_c_int(&self) -> c_int {
        self.0
    }
#[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);

    /// Equivalent to OpenSSL Constant: V_ASN1_EOC
    pub const EOC: Asn1Tag = Asn1Tag(ffi::V_ASN1_EOC);
    pub const INTEGER: Asn1Type = Asn1Type(ffi::V_ASN1_INTEGER);

    /// Equivalent to OpenSSL Constant: V_ASN1_BOOLEAN
    pub const BOOLEAN: Asn1Tag = Asn1Tag(ffi::V_ASN1_BOOLEAN);
    pub const BIT_STRING: Asn1Type = Asn1Type(ffi::V_ASN1_BIT_STRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_INTEGER
    pub const INTEGER: Asn1Tag = Asn1Tag(ffi::V_ASN1_INTEGER);
    pub const OCTET_STRING: Asn1Type = Asn1Type(ffi::V_ASN1_OCTET_STRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_BIT_STRING
    pub const BIT_STRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_BIT_STRING);
    pub const NULL: Asn1Type = Asn1Type(ffi::V_ASN1_NULL);

    /// Equivalent to OpenSSL Constant: V_ASN1_OCTET_STRING
    pub const OCTET_STRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_OCTET_STRING);
    pub const OBJECT: Asn1Type = Asn1Type(ffi::V_ASN1_OBJECT);

    /// Equivalent to OpenSSL Constant: V_ASN1_NULL
    pub const NULL: Asn1Tag = Asn1Tag(ffi::V_ASN1_NULL);
    pub const OBJECT_DESCRIPTOR: Asn1Type = Asn1Type(ffi::V_ASN1_OBJECT_DESCRIPTOR);

    /// Equivalent to OpenSSL Constant: V_ASN1_OBJECT
    pub const OBJECT: Asn1Tag = Asn1Tag(ffi::V_ASN1_OBJECT);
    pub const EXTERNAL: Asn1Type = Asn1Type(ffi::V_ASN1_EXTERNAL);

    /// Equivalent to OpenSSL Constant: V_ASN1_OBJECT_DESCRIPTOR
    pub const OBJECT_DESCRIPTOR: Asn1Tag = Asn1Tag(ffi::V_ASN1_OBJECT_DESCRIPTOR);
    pub const REAL: Asn1Type = Asn1Type(ffi::V_ASN1_REAL);

    /// Equivalent to OpenSSL Constant: V_ASN1_EXTERNAL
    pub const EXTERNAL: Asn1Tag = Asn1Tag(ffi::V_ASN1_EXTERNAL);
    pub const ENUMERATED: Asn1Type = Asn1Type(ffi::V_ASN1_ENUMERATED);

    /// Equivalent to OpenSSL Constant: V_ASN1_REAL
    pub const REAL: Asn1Tag = Asn1Tag(ffi::V_ASN1_REAL);
    pub const UTF8STRING: Asn1Type = Asn1Type(ffi::V_ASN1_UTF8STRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_ENUMERATED
    pub const ENUMERATED: Asn1Tag = Asn1Tag(ffi::V_ASN1_ENUMERATED);
    pub const SEQUENCE: Asn1Type = Asn1Type(ffi::V_ASN1_SEQUENCE);

    /// Equivalent to OpenSSL Constant: V_ASN1_UTF8STRING
    pub const UTF8STRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_UTF8STRING);
    pub const SET: Asn1Type = Asn1Type(ffi::V_ASN1_SET);

    /// Equivalent to OpenSSL Constant: V_ASN1_SEQUENCE
    pub const SEQUENCE: Asn1Tag = Asn1Tag(ffi::V_ASN1_SEQUENCE);
    pub const NUMERICSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_NUMERICSTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_SET
    pub const SET: Asn1Tag = Asn1Tag(ffi::V_ASN1_SET);
    pub const PRINTABLESTRING: Asn1Type = Asn1Type(ffi::V_ASN1_PRINTABLESTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_NUMERICSTRING
    pub const NUMERICSTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_NUMERICSTRING);
    pub const T61STRING: Asn1Type = Asn1Type(ffi::V_ASN1_T61STRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_PRINTABLESTRING
    pub const PRINTABLESTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_PRINTABLESTRING);
    pub const TELETEXSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_TELETEXSTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_T61STRING
    pub const T61STRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_T61STRING);
    pub const VIDEOTEXSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_VIDEOTEXSTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_TELETEXSTRING
    pub const TELETEXSTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_TELETEXSTRING);
    pub const IA5STRING: Asn1Type = Asn1Type(ffi::V_ASN1_IA5STRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_VIDEOTEXSTRING
    pub const VIDEOTEXSTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_VIDEOTEXSTRING);
    pub const UTCTIME: Asn1Type = Asn1Type(ffi::V_ASN1_UTCTIME);

    /// Equivalent to OpenSSL Constant: V_ASN1_IA5STRING
    pub const IA5STRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_IA5STRING);
    pub const GENERALIZEDTIME: Asn1Type = Asn1Type(ffi::V_ASN1_GENERALIZEDTIME);

    /// Equivalent to OpenSSL Constant: V_ASN1_UTCTIME
    pub const UTCTIME: Asn1Tag = Asn1Tag(ffi::V_ASN1_UTCTIME);
    pub const GRAPHICSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_GRAPHICSTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_GENERALIZEDTIME
    pub const GENERALIZEDTIME: Asn1Tag = Asn1Tag(ffi::V_ASN1_GENERALIZEDTIME);
    pub const ISO64STRING: Asn1Type = Asn1Type(ffi::V_ASN1_ISO64STRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_GRAPHICSTRING
    pub const GRAPHICSTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_GRAPHICSTRING);
    pub const VISIBLESTRING: Asn1Type = Asn1Type(ffi::V_ASN1_VISIBLESTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_ISO64STRING
    pub const ISO64STRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_ISO64STRING);
    pub const GENERALSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_GENERALSTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_VISIBLESTRING
    pub const VISIBLESTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_VISIBLESTRING);
    pub const UNIVERSALSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_UNIVERSALSTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_GENERALSTRING
    pub const GENERALSTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_GENERALSTRING);
    pub const BMPSTRING: Asn1Type = Asn1Type(ffi::V_ASN1_BMPSTRING);

    /// Equivalent to OpenSSL Constant: V_ASN1_UNIVERSALSTRING
    pub const UNIVERSALSTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_UNIVERSALSTRING);
    /// Constructs an `Asn1Type` from a raw OpenSSL value.
    pub fn from_raw(value: c_int) -> Self {
        Asn1Type(value)
    }

    /// Equivalent to OpenSSL Constant: V_ASN1_BMPSTRING
    pub const BMPSTRING: Asn1Tag = Asn1Tag(ffi::V_ASN1_BMPSTRING);
    /// Returns the raw OpenSSL value represented by this type.
    pub fn as_raw(&self) -> c_int {
        self.0
    }
}

/// Difference between two ASN1 times.
+7 −7
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ use std::ptr;
use std::slice;
use std::str;

use asn1::{Asn1BitStringRef, Asn1IntegerRef, Asn1ObjectRef, Asn1StringRef, Asn1Tag, Asn1TimeRef};
use asn1::{Asn1BitStringRef, Asn1IntegerRef, Asn1ObjectRef, Asn1StringRef, Asn1TimeRef, Asn1Type};
use bio::MemBioSlice;
use conf::ConfRef;
use error::ErrorStack;
@@ -824,7 +824,7 @@ impl X509NameBuilder {
        }
    }

    /// Add a field entry by str with a specific type.  See [Asn1Tag](openssl::asn1::Asn1Tag)
    /// Add a field entry by str with a specific type.
    ///
    /// This corresponds to [`X509_NAME_add_entry_by_txt`].
    ///
@@ -833,7 +833,7 @@ impl X509NameBuilder {
        &mut self,
        field: &str,
        value: &str,
        ty: Asn1Tag,
        ty: Asn1Type,
    ) -> Result<(), ErrorStack> {
        unsafe {
            let field = CString::new(field).unwrap();
@@ -841,7 +841,7 @@ impl X509NameBuilder {
            cvt(ffi::X509_NAME_add_entry_by_txt(
                self.0.as_ptr(),
                field.as_ptr() as *mut _,
                ty.as_c_int(),
                ty.as_raw(),
                value.as_ptr(),
                value.len() as c_int,
                -1,
@@ -872,7 +872,7 @@ impl X509NameBuilder {
        }
    }

    /// Add a field entry by NID with a specific type.  See [Asn1Tag](openssl::asn1::Asn1Tag)
    /// Add a field entry by NID with a specific type.
    ///
    /// This corresponds to [`X509_NAME_add_entry_by_NID`].
    ///
@@ -881,14 +881,14 @@ impl X509NameBuilder {
        &mut self,
        field: Nid,
        value: &str,
        ty: Asn1Tag,
        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_c_int(),
                ty.as_raw(),
                value.as_ptr() as *mut _,
                value.len() as c_int,
                -1,