aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOle Herman Schumacher Elgesem <[email protected]>2018-02-14 02:08:01 +0100
committerOle Herman Schumacher Elgesem <[email protected]>2018-02-14 02:08:01 +0100
commit041d473c0a24439684b9976c7affebcaafc3efcf (patch)
tree78c2e245583cdfedf473907fee1ef4157afe0e8b
parentRelease openssl 0.10.3 and openssl-sys 0.9.25 (diff)
downloadrust-openssl-041d473c0a24439684b9976c7affebcaafc3efcf.tar.xz
rust-openssl-041d473c0a24439684b9976c7affebcaafc3efcf.zip
Added binding for PEM_read_bio_RSAPublicKey
Signed-off-by: Ole Herman Schumacher Elgesem <[email protected]>
-rw-r--r--openssl-sys/src/lib.rs8
-rw-r--r--openssl/src/rsa.rs27
-rw-r--r--openssl/test/pkcs1.pem.pub8
3 files changed, 43 insertions, 0 deletions
diff --git a/openssl-sys/src/lib.rs b/openssl-sys/src/lib.rs
index a260e2a9..52b5eda4 100644
--- a/openssl-sys/src/lib.rs
+++ b/openssl-sys/src/lib.rs
@@ -2111,6 +2111,14 @@ extern "C" {
callback: Option<PasswordCallback>,
user_data: *mut c_void,
) -> *mut RSA;
+
+ pub fn PEM_read_bio_RSAPublicKey(
+ bio: *mut BIO,
+ rsa: *mut *mut RSA,
+ callback: Option<PasswordCallback>,
+ user_data: *mut c_void,
+ ) -> *mut RSA;
+
pub fn PEM_read_bio_RSA_PUBKEY(
bio: *mut BIO,
rsa: *mut *mut RSA,
diff --git a/openssl/src/rsa.rs b/openssl/src/rsa.rs
index 472ca94f..dfa56d70 100644
--- a/openssl/src/rsa.rs
+++ b/openssl/src/rsa.rs
@@ -428,6 +428,19 @@ impl Rsa<Public> {
ffi::PEM_read_bio_RSA_PUBKEY
}
+ from_pem! {
+ /// Decodes a PEM-encoded PKCS#1 RSAPublicKey structure.
+ ///
+ /// The input should have a header of `-----BEGIN RSA PUBLIC KEY-----`.
+ ///
+ /// This corresponds to [`PEM_read_bio_RSAPublicKey`].
+ ///
+ /// [`PEM_read_bio_RSAPublicKey`]: https://www.openssl.org/docs/man1.0.2/crypto/PEM_read_bio_RSAPublicKey.html
+ public_key_from_pem_pkcs1,
+ Rsa<Public>,
+ ffi::PEM_read_bio_RSAPublicKey
+ }
+
from_der! {
/// Decodes a DER-encoded SubjectPublicKeyInfo structure containing an RSA key.
///
@@ -732,4 +745,18 @@ mod test {
.unwrap();
assert_eq!(msg, &dmesg[..len]);
}
+
+ #[test]
+ fn test_public_key_from_pem_pkcs1() {
+ let key = include_bytes!("../test/pkcs1.pem.pub");
+ Rsa::public_key_from_pem_pkcs1(key).unwrap();
+ }
+
+ #[test]
+ #[should_panic]
+ fn test_public_key_from_pem_pkcs1_panic() {
+ let key = include_bytes!("../test/key.pem.pub");
+ Rsa::public_key_from_pem_pkcs1(key).unwrap();
+ }
+
}
diff --git a/openssl/test/pkcs1.pem.pub b/openssl/test/pkcs1.pem.pub
new file mode 100644
index 00000000..4d557048
--- /dev/null
+++ b/openssl/test/pkcs1.pem.pub
@@ -0,0 +1,8 @@
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAyrcf7lv42BCoiDd3LYmF8eaGO4rhmGzGgi+NSZowkEuLhibHGQle
+FkZC7h1VKsxKFgy7Fx+GYHkv9OLm9H5fdp3HhYlo19bZVGvSJ66OJe/Bc4S02bBb
+Y8vwpc/N5O77m5J/nHLuL7XJtpfSKkX+3NPiX1X2L99iipt7F0a7hNws3G3Lxg6t
+P3Yc55TPjXzXvDIgjt/fag6iF8L/bR3augJJdDhLzNucR8A5HcvPtIVo51R631Zq
+MCh+dZvgz9zGCXwsvSky/iOJTHN3wnpsWuCAzS1iJMfjR783Tfv6sWFs19FH7pHP
+xBA3b2enPM9KBzINGOly0eM4h0fh+VBltQIDAQAB
+-----END RSA PUBLIC KEY-----