c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

mod.rs (3094B)


      1 // Copyright 2022 Adobe. All rights reserved.
      2 // This file is licensed to you under the Apache License,
      3 // Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
      4 // or the MIT license (http://opensource.org/licenses/MIT),
      5 // at your option.
      6 
      7 // Unless required by applicable law or agreed to in writing,
      8 // this software is distributed on an "AS IS" BASIS, WITHOUT
      9 // WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or
     10 // implied. See the LICENSE-MIT and LICENSE-APACHE files for the
     11 // specific language governing permissions and limitations under
     12 // each license.
     13 
     14 #[cfg(feature = "openssl_sign")]
     15 mod rsa_signer;
     16 #[cfg(feature = "openssl_sign")]
     17 pub(crate) use rsa_signer::RsaSigner;
     18 
     19 #[cfg(feature = "openssl")]
     20 mod rsa_validator;
     21 #[cfg(feature = "openssl")]
     22 pub(crate) use rsa_validator::RsaValidator;
     23 
     24 #[cfg(feature = "openssl_sign")]
     25 mod ec_signer;
     26 #[cfg(feature = "openssl_sign")]
     27 pub(crate) use ec_signer::EcSigner;
     28 
     29 #[cfg(feature = "openssl")]
     30 mod ec_validator;
     31 #[cfg(feature = "openssl")]
     32 pub(crate) use ec_validator::EcValidator;
     33 
     34 #[cfg(feature = "openssl_sign")]
     35 mod ed_signer;
     36 #[cfg(feature = "openssl_sign")]
     37 pub(crate) use ed_signer::EdSigner;
     38 
     39 #[cfg(feature = "openssl")]
     40 mod ed_validator;
     41 #[cfg(feature = "openssl")]
     42 pub(crate) use ed_validator::EdValidator;
     43 
     44 #[cfg(feature = "openssl")]
     45 mod openssl_trust_handler;
     46 #[cfg(test)]
     47 pub(crate) mod temp_signer;
     48 
     49 #[cfg(feature = "openssl")]
     50 pub(crate) use openssl_trust_handler::verify_trust;
     51 #[cfg(feature = "openssl")]
     52 pub(crate) use openssl_trust_handler::OpenSSLTrustHandlerConfig;
     53 
     54 #[cfg(test)]
     55 pub(crate) mod temp_signer_async;
     56 
     57 #[cfg(feature = "openssl")]
     58 use openssl::x509::X509;
     59 #[cfg(test)]
     60 #[allow(unused_imports)]
     61 #[cfg(feature = "openssl")]
     62 pub(crate) use temp_signer_async::AsyncSignerAdapter;
     63 #[cfg(feature = "openssl")]
     64 pub(crate) fn check_chain_order(certs: &[X509]) -> bool {
     65     {
     66         if certs.len() > 1 {
     67             for (i, c) in certs.iter().enumerate() {
     68                 if let Some(next_c) = certs.get(i + 1) {
     69                     if let Ok(pkey) = next_c.public_key() {
     70                         if let Ok(verified) = c.verify(&pkey) {
     71                             if !verified {
     72                                 return false;
     73                             }
     74                         } else {
     75                             return false;
     76                         }
     77                     } else {
     78                         return false;
     79                     }
     80                 }
     81             }
     82         }
     83         true
     84     }
     85 }
     86 
     87 #[cfg(not(feature = "openssl"))]
     88 pub(crate) fn check_chain_order(certs: &[X509]) -> bool {
     89     true
     90 }
     91 
     92 #[cfg(feature = "openssl")]
     93 #[allow(dead_code)]
     94 pub(crate) fn check_chain_order_der(cert_ders: &[Vec<u8>]) -> bool {
     95     let mut certs: Vec<X509> = Vec::new();
     96     for cert_der in cert_ders {
     97         if let Ok(cert) = X509::from_der(cert_der) {
     98             certs.push(cert);
     99         } else {
    100             return false;
    101         }
    102     }
    103 
    104     check_chain_order(&certs)
    105 }
    106 
    107 #[cfg(not(feature = "openssl"))]
    108 pub(crate) fn check_chain_order_der(cert_ders: &[Vec<u8>]) -> bool {
    109     true
    110 }