@@ -14,29 +14,28 @@ use pyo3::exceptions::PyException;
1414use pyo3:: prelude:: * ;
1515use pyo3:: types:: PyBytes ;
1616
17- create_exception ! ( rsmime, ReadCertificateError , PyException ) ;
18- create_exception ! ( rsmime, LoadCertificateError , PyException ) ;
17+ create_exception ! ( rsmime, CertificateError , PyException ) ;
1918create_exception ! ( rsmime, SignError , PyException ) ;
2019create_exception ! ( rsmime, VerifyError , PyException ) ;
2120
2221fn _sign ( cert_file : & str , key_file : & str , data_to_sign : & [ u8 ] ) -> PyResult < Vec < u8 > > {
23- let certs = Stack :: new ( ) . expect ( "Failed to create stack" ) ;
22+ let certs = Stack :: new ( ) . unwrap ( ) ;
2423
2524 if data_to_sign. is_empty ( ) {
2625 return Err ( SignError :: new_err ( "Cannot sign empty data" ) ) ;
2726 }
2827
2928 let cert_data =
30- std:: fs:: read ( cert_file) . map_err ( |err| ReadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
29+ std:: fs:: read ( cert_file) . map_err ( |err| CertificateError :: new_err ( err. to_string ( ) ) ) ?;
3130 let key_data =
32- std:: fs:: read ( key_file) . map_err ( |err| ReadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
31+ std:: fs:: read ( key_file) . map_err ( |err| CertificateError :: new_err ( err. to_string ( ) ) ) ?;
3332
3433 let cert =
35- X509 :: from_pem ( & cert_data) . map_err ( |err| LoadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
34+ X509 :: from_pem ( & cert_data) . map_err ( |err| CertificateError :: new_err ( err. to_string ( ) ) ) ?;
3635 let rsa = Rsa :: private_key_from_pem ( & key_data)
37- . map_err ( |err| LoadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
36+ . map_err ( |err| CertificateError :: new_err ( err. to_string ( ) ) ) ?;
3837 let pkey =
39- pkey:: PKey :: from_rsa ( rsa) . map_err ( |err| LoadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
38+ pkey:: PKey :: from_rsa ( rsa) . map_err ( |err| CertificateError :: new_err ( err. to_string ( ) ) ) ?;
4039
4140 let pkcs7 = Pkcs7 :: sign (
4241 cert. as_ref ( ) ,
@@ -73,28 +72,18 @@ fn validate_expiry(certs: &StackRef<X509>) -> Result<(), Error> {
7372 Ok ( ( ) )
7473}
7574
76- fn _verify ( cert_file : & str , data_to_verify : & [ u8 ] , throw_on_expiry : bool ) -> PyResult < Vec < u8 > > {
77- let cert_data =
78- std:: fs:: read ( cert_file) . map_err ( |err| ReadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
79- let cert =
80- X509 :: from_pem ( & cert_data) . map_err ( |err| LoadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
81-
82- let mut certs = Stack :: new ( ) . expect ( "Failed to create stack" ) ;
83- certs
84- . push ( cert)
85- . map_err ( |err| LoadCertificateError :: new_err ( err. to_string ( ) ) ) ?;
86-
87- let mut out: Vec < u8 > = Vec :: new ( ) ;
75+ fn _verify ( data_to_verify : & [ u8 ] , throw_on_expiry : bool ) -> PyResult < Vec < u8 > > {
76+ let certs = Stack :: new ( ) . unwrap ( ) ;
8877 let store = X509StoreBuilder :: new ( ) . unwrap ( ) . build ( ) ;
8978
90- let x = Pkcs7 :: from_smime ( data_to_verify) ;
91- let x = x. map_err ( |err| VerifyError :: new_err ( err. to_string ( ) ) ) ?;
92- let ( pkcs7, _) = x;
79+ let ( pkcs7, _) =
80+ Pkcs7 :: from_smime ( data_to_verify) . map_err ( |err| VerifyError :: new_err ( err. to_string ( ) ) ) ?;
9381
9482 if throw_on_expiry {
9583 validate_expiry ( certs. as_ref ( ) ) . map_err ( |err| VerifyError :: new_err ( err. to_string ( ) ) ) ?;
9684 }
9785
86+ let mut out: Vec < u8 > = Vec :: new ( ) ;
9887 pkcs7
9988 . verify (
10089 certs. as_ref ( ) ,
@@ -117,29 +106,17 @@ fn sign(py: Python, cert_file: &str, key_file: &str, data_to_sign: Vec<u8>) -> P
117106}
118107
119108#[ pyfunction]
120- #[ pyo3( signature = ( cert_file, data_to_verify, * , throw_on_expiry = false ) ) ]
121- fn verify (
122- py : Python ,
123- cert_file : & str ,
124- data_to_verify : Vec < u8 > ,
125- throw_on_expiry : bool ,
126- ) -> PyResult < PyObject > {
127- match _verify ( cert_file, & data_to_verify, throw_on_expiry) {
109+ #[ pyo3( signature = ( data_to_verify, * , throw_on_expiry = false ) ) ]
110+ fn verify ( py : Python , data_to_verify : Vec < u8 > , throw_on_expiry : bool ) -> PyResult < PyObject > {
111+ match _verify ( & data_to_verify, throw_on_expiry) {
128112 Ok ( data) => Ok ( PyBytes :: new ( py, & data) . into ( ) ) ,
129113 Err ( err) => Err ( err) ,
130114 }
131115}
132116
133117#[ pymodule]
134118fn rsmime ( py : Python , m : & PyModule ) -> PyResult < ( ) > {
135- m. add (
136- "ReadCertificateError" ,
137- py. get_type :: < ReadCertificateError > ( ) ,
138- ) ?;
139- m. add (
140- "LoadCertificateError" ,
141- py. get_type :: < LoadCertificateError > ( ) ,
142- ) ?;
119+ m. add ( "CertificateError" , py. get_type :: < CertificateError > ( ) ) ?;
143120 m. add ( "SignError" , py. get_type :: < SignError > ( ) ) ?;
144121 m. add ( "VerifyError" , py. get_type :: < VerifyError > ( ) ) ?;
145122 m. add_function ( wrap_pyfunction ! ( sign, m) ?) ?;
0 commit comments