Added X509ReqRef.subject_name and X509ReqRef.version
This commit is contained in:
parent
3f4a78f06f
commit
557b936e27
|
|
@ -51,7 +51,6 @@ pub enum X509_CRL {}
|
|||
pub enum X509_EXTENSION {}
|
||||
pub enum X509_NAME {}
|
||||
pub enum X509_NAME_ENTRY {}
|
||||
pub enum X509_REQ {}
|
||||
pub enum X509_STORE {}
|
||||
pub enum X509_STORE_CTX {}
|
||||
pub enum bio_st {}
|
||||
|
|
@ -1387,6 +1386,7 @@ extern {
|
|||
pub fn AES_set_decrypt_key(userKey: *const c_uchar, bits: c_int, key: *mut AES_KEY) -> c_int;
|
||||
pub fn AES_ige_encrypt(in_: *const c_uchar, out: *mut c_uchar, length: size_t, key: *const AES_KEY, ivec: *mut c_uchar, enc: c_int);
|
||||
|
||||
pub fn ASN1_INTEGER_get(dest: *mut ASN1_INTEGER) -> c_long;
|
||||
pub fn ASN1_INTEGER_set(dest: *mut ASN1_INTEGER, value: c_long) -> c_int;
|
||||
pub fn ASN1_GENERALIZEDTIME_free(tm: *mut ASN1_GENERALIZEDTIME);
|
||||
pub fn ASN1_GENERALIZEDTIME_print(b: *mut BIO, tm: *const ASN1_GENERALIZEDTIME) -> c_int;
|
||||
|
|
@ -1918,6 +1918,8 @@ extern {
|
|||
pub fn ASN1_STRING_free(x: *mut ASN1_STRING);
|
||||
pub fn ASN1_STRING_length(x: *const ASN1_STRING) -> c_int;
|
||||
|
||||
pub fn ASN1_INTEGER_free(x: *mut ASN1_INTEGER);
|
||||
|
||||
pub fn X509_STORE_new() -> *mut X509_STORE;
|
||||
pub fn X509_STORE_free(store: *mut X509_STORE);
|
||||
pub fn X509_STORE_add_cert(store: *mut X509_STORE, x: *mut X509) -> c_int;
|
||||
|
|
|
|||
|
|
@ -298,6 +298,23 @@ pub struct X509_VAL {
|
|||
pub notAfter: *mut ::ASN1_TIME,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct X509_REQ_INFO {
|
||||
pub enc: ASN1_ENCODING,
|
||||
pub version: *mut ::ASN1_INTEGER,
|
||||
pub subject: *mut ::X509_NAME,
|
||||
pub pubkey: *mut c_void,
|
||||
pub attributes: *mut stack_st_X509_ATTRIBUTE
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct X509_REQ {
|
||||
pub req_info: *mut X509_REQ_INFO,
|
||||
pub sig_alg: *mut c_void,
|
||||
pub signature: *mut c_void,
|
||||
references: c_int
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct SSL {
|
||||
version: c_int,
|
||||
|
|
|
|||
|
|
@ -305,6 +305,23 @@ pub struct X509_VAL {
|
|||
pub notAfter: *mut ::ASN1_TIME,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct X509_REQ_INFO {
|
||||
pub enc: ASN1_ENCODING,
|
||||
pub version: *mut ::ASN1_INTEGER,
|
||||
pub subject: *mut ::X509_NAME,
|
||||
pub pubkey: *mut c_void,
|
||||
pub attributes: *mut stack_st_X509_ATTRIBUTE
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct X509_REQ {
|
||||
pub req_info: *mut X509_REQ_INFO,
|
||||
pub sig_alg: *mut c_void,
|
||||
pub signature: *mut c_void,
|
||||
references: c_int
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct SSL {
|
||||
version: c_int,
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ pub enum stack_st_X509_EXTENSION {}
|
|||
pub enum stack_st_SSL_CIPHER {}
|
||||
pub enum X509 {}
|
||||
pub enum X509_VERIFY_PARAM {}
|
||||
pub enum X509_REQ {}
|
||||
|
||||
pub const SSL_OP_MICROSOFT_SESS_ID_BUG: c_ulong = 0x00000000;
|
||||
pub const SSL_OP_NETSCAPE_CHALLENGE_BUG: c_ulong = 0x00000000;
|
||||
|
|
@ -191,4 +192,9 @@ extern {
|
|||
iter: c_int,
|
||||
mac_iter: c_int,
|
||||
keytype: c_int) -> *mut PKCS12;
|
||||
pub fn X509_REQ_get_version(req: *const X509_REQ) -> c_long;
|
||||
pub fn X509_REQ_set_version(x: *mut X509_REQ, version: c_long) -> c_int;
|
||||
pub fn X509_REQ_get_subject_name(req: *const X509_REQ) -> *mut ::X509_NAME;
|
||||
pub fn X509_REQ_set_subject_name(req: *mut X509_REQ, name: *mut ::X509_NAME) -> c_int;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,6 +75,28 @@ impl Asn1StringRef {
|
|||
}
|
||||
}
|
||||
|
||||
type_!(Asn1Integer, Asn1IntegerRef, ffi::ASN1_INTEGER, ffi::ASN1_INTEGER_free);
|
||||
|
||||
impl Asn1IntegerRef {
|
||||
pub fn get(&self) -> i64 {
|
||||
unsafe {
|
||||
return ::ffi::ASN1_INTEGER_get(self.as_ptr());
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set(&self, value: i64) -> Result<(), ErrorStack>
|
||||
{
|
||||
unsafe {
|
||||
let res = ::ffi::ASN1_INTEGER_set(self.as_ptr(), value);
|
||||
if res < 0 {
|
||||
return Err(ErrorStack::get());
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(ossl101, ossl102))]
|
||||
use ffi::ASN1_STRING_data;
|
||||
|
||||
|
|
|
|||
|
|
@ -599,6 +599,21 @@ impl X509Req {
|
|||
impl X509ReqRef {
|
||||
to_pem!(ffi::PEM_write_bio_X509_REQ);
|
||||
to_der!(ffi::i2d_X509_REQ);
|
||||
|
||||
pub fn version(&self) -> i64
|
||||
{
|
||||
unsafe {
|
||||
let version = compat::X509_REQ_get_version(self.as_ptr());
|
||||
version
|
||||
}
|
||||
}
|
||||
|
||||
pub fn subject_name(&self) -> &X509NameRef {
|
||||
unsafe {
|
||||
let name = compat::X509_REQ_get_subject_name(self.as_ptr());
|
||||
X509NameRef::from_ptr(name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A collection of X.509 extensions.
|
||||
|
|
@ -779,6 +794,8 @@ mod compat {
|
|||
pub use ffi::X509_getm_notBefore as X509_get_notBefore;
|
||||
pub use ffi::X509_up_ref;
|
||||
pub use ffi::X509_get0_extensions;
|
||||
pub use ffi::X509_REQ_get_version;
|
||||
pub use ffi::X509_REQ_get_subject_name;
|
||||
}
|
||||
|
||||
#[cfg(ossl10x)]
|
||||
|
|
@ -812,4 +829,14 @@ mod compat {
|
|||
(*info).extensions
|
||||
}
|
||||
}
|
||||
|
||||
pub unsafe fn X509_REQ_get_version(x: *mut ffi::X509_REQ) -> ::libc::c_long
|
||||
{
|
||||
::ffi::ASN1_INTEGER_get((*(*x).req_info).version)
|
||||
}
|
||||
|
||||
pub unsafe fn X509_REQ_get_subject_name(x: *mut ffi::X509_REQ) -> *mut ::ffi::X509_NAME
|
||||
{
|
||||
(*(*x).req_info).subject
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use nid::X9_62_PRIME256V1;
|
|||
use pkey::PKey;
|
||||
use rsa::Rsa;
|
||||
use ssl::{SslMethod, SslContextBuilder};
|
||||
use x509::{X509, X509Generator};
|
||||
use x509::{X509, X509Generator, X509Req};
|
||||
use x509::extension::Extension::{KeyUsage, ExtKeyUsage, SubjectAltName, OtherNid, OtherStr};
|
||||
use x509::extension::AltNameOption as SAN;
|
||||
use x509::extension::KeyUsageOption::{DigitalSignature, KeyEncipherment};
|
||||
|
|
@ -75,7 +75,12 @@ fn test_req_gen() {
|
|||
let pkey = pkey();
|
||||
|
||||
let req = get_generator().request(&pkey).unwrap();
|
||||
req.to_pem().unwrap();
|
||||
let reqpem = req.to_pem().unwrap();
|
||||
|
||||
let req = X509Req::from_pem(&reqpem).ok().expect("Failed to load PEM");
|
||||
let cn = (*req).subject_name().entries_by_nid(nid::COMMONNAME).next().unwrap();
|
||||
assert_eq!(0, (*req).version());
|
||||
assert_eq!(cn.data().as_slice(), b"test_me");
|
||||
|
||||
// FIXME: check data in result to be correct, needs implementation
|
||||
// of X509_REQ getters
|
||||
|
|
|
|||
Loading…
Reference in New Issue