From 041d473c0a24439684b9976c7affebcaafc3efcf Mon Sep 17 00:00:00 2001 From: Ole Herman Schumacher Elgesem Date: Wed, 14 Feb 2018 02:08:01 +0100 Subject: [PATCH] Added binding for PEM_read_bio_RSAPublicKey Signed-off-by: Ole Herman Schumacher Elgesem --- openssl-sys/src/lib.rs | 8 ++++++++ openssl/src/rsa.rs | 27 +++++++++++++++++++++++++++ openssl/test/pkcs1.pem.pub | 8 ++++++++ 3 files changed, 43 insertions(+) create mode 100644 openssl/test/pkcs1.pem.pub 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, user_data: *mut c_void, ) -> *mut RSA; + + pub fn PEM_read_bio_RSAPublicKey( + bio: *mut BIO, + rsa: *mut *mut RSA, + callback: Option, + 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 { 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, + 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-----