aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Schölling <[email protected]>2015-03-19 17:58:23 +0100
committerManuel Schölling <[email protected]>2015-04-03 14:34:24 +0200
commitb6c5c113f56d56723771efdbecfd54d2b2fdd8d5 (patch)
treec63b0bbbbbdc03553d6656f58aa41d0dacb00c30
parentAdd ability to load private keys from files and use raw keys and certificates... (diff)
downloadrust-openssl-b6c5c113f56d56723771efdbecfd54d2b2fdd8d5.tar.xz
rust-openssl-b6c5c113f56d56723771efdbecfd54d2b2fdd8d5.zip
Add SslContext::add_extra_chain_cert()
-rw-r--r--openssl-sys/src/lib.rs10
-rw-r--r--openssl/src/crypto/pkey.rs1
-rw-r--r--openssl/src/ssl/mod.rs9
3 files changed, 18 insertions, 2 deletions
diff --git a/openssl-sys/src/lib.rs b/openssl-sys/src/lib.rs
index 9f88ca23..a4accc29 100644
--- a/openssl-sys/src/lib.rs
+++ b/openssl-sys/src/lib.rs
@@ -132,6 +132,8 @@ pub const SSL_CTRL_OPTIONS: c_int = 32;
pub const SSL_CTRL_CLEAR_OPTIONS: c_int = 77;
pub const SSL_CTRL_SET_TLSEXT_HOSTNAME: c_int = 55;
+pub const SSL_CTRL_EXTRA_CHAIN_CERT: c_int = 14;
+
pub const SSL_ERROR_NONE: c_int = 0;
pub const SSL_ERROR_SSL: c_int = 1;
pub const SSL_ERROR_SYSCALL: c_int = 5;
@@ -276,6 +278,11 @@ pub unsafe fn SSL_CTX_clear_options(ssl: *mut SSL_CTX, op: c_long) -> c_long {
SSL_CTX_ctrl(ssl, SSL_CTRL_CLEAR_OPTIONS, (op), ptr::null_mut())
}
+pub unsafe fn SSL_CTX_add_extra_chain_cert(ssl: *mut SSL_CTX, cert: *mut X509) -> c_long {
+ SSL_CTX_ctrl(ssl, SSL_CTRL_EXTRA_CHAIN_CERT, 0, cert)
+}
+
+
// True functions
extern "C" {
pub fn ASN1_INTEGER_set(dest: *mut ASN1_INTEGER, value: c_long) -> c_int;
@@ -513,7 +520,8 @@ extern "C" {
pub fn SSL_CTX_get_ex_data(ctx: *mut SSL_CTX, idx: c_int) -> *mut c_void;
pub fn SSL_CTX_use_certificate_file(ctx: *mut SSL_CTX, cert_file: *const c_char, file_type: c_int) -> c_int;
- pub fn SSL_CTX_use_certificate(ctx: *mut SSL_CTX, cert_file: *mut X509) -> c_int;
+ pub fn SSL_CTX_use_certificate(ctx: *mut SSL_CTX, cert: *mut X509) -> c_int;
+
pub fn SSL_CTX_use_PrivateKey_file(ctx: *mut SSL_CTX, key_file: *const c_char, file_type: c_int) -> c_int;
pub fn SSL_CTX_use_PrivateKey(ctx: *mut SSL_CTX, key: *mut EVP_PKEY) -> c_int;
pub fn SSL_CTX_check_private_key(ctx: *mut SSL_CTX) -> c_int;
diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs
index a4c6fb12..8454f252 100644
--- a/openssl/src/crypto/pkey.rs
+++ b/openssl/src/crypto/pkey.rs
@@ -352,7 +352,6 @@ impl Drop for PKey {
#[cfg(test)]
mod tests {
- use std::io;
use std::path::Path;
use std::fs::File;
use crypto::hash::Type::{MD5, SHA1};
diff --git a/openssl/src/ssl/mod.rs b/openssl/src/ssl/mod.rs
index 578cfcd5..89abf59f 100644
--- a/openssl/src/ssl/mod.rs
+++ b/openssl/src/ssl/mod.rs
@@ -409,6 +409,15 @@ impl SslContext {
})
}
+ /// Adds a certificate to the certificate chain presented together with the
+ /// certificate specified using set_certificate()
+ pub fn add_extra_chain_cert(&mut self, cert: &X509) -> Option<SslError> {
+ wrap_ssl_result(
+ unsafe {
+ ffi::SSL_CTX_add_extra_chain_cert(*self.ctx, cert.get_handle()) as c_int
+ })
+ }
+
/// Specifies the file that contains private key
pub fn set_private_key_file(&mut self, file: &Path,
file_type: X509FileType) -> Option<SslError> {