-
Notifications
You must be signed in to change notification settings - Fork 92
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
932 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,263 @@ | ||
//! Cryptographic Message Syntax support | ||
use std::os::raw::c_void; | ||
|
||
use core_foundation_sys::array::CFArrayRef; | ||
use core_foundation_sys::base::{Boolean, CFTypeID, CFTypeRef, OSStatus}; | ||
use core_foundation_sys::data::CFDataRef; | ||
use core_foundation_sys::date::CFAbsoluteTime; | ||
use core_foundation_sys::string::CFStringRef; | ||
|
||
use crate::base::SecCertificateRef; | ||
use crate::trust::SecTrustRef; | ||
|
||
pub enum OpaqueCMSEncoderRef {} | ||
pub type CMSEncoderRef = *mut OpaqueCMSEncoderRef; | ||
|
||
pub enum OpaqueCMSDecoderRef {} | ||
pub type CMSDecoderRef = *mut OpaqueCMSEncoderRef; | ||
|
||
#[repr(i32)] | ||
#[derive(Copy, Clone, Eq, PartialEq, Debug)] | ||
pub enum CMSSignerStatus { | ||
kCMSSignerUnsigned = 0, | ||
kCMSSignerValid = 1, | ||
kCMSSignerNeedsDetachedContent = 2, | ||
kCMSSignerInvalidSignature = 3, | ||
kCMSSignerInvalidCert = 4, | ||
kCMSSignerInvalidIndex = 5, | ||
} | ||
|
||
pub type CMSSignedAttributes = u32; | ||
pub const kCMSAttrNone: CMSSignedAttributes = 0x0000; | ||
pub const kCMSAttrSmimeCapabilities: CMSSignedAttributes = 0x0001; | ||
pub const kCMSAttrSmimeEncryptionKeyPrefs: CMSSignedAttributes = 0x0002; | ||
pub const kCMSAttrSmimeMSEncryptionKeyPrefs: CMSSignedAttributes = 0x0004; | ||
pub const kCMSAttrSigningTime: CMSSignedAttributes = 0x0008; | ||
pub const kCMSAttrAppleCodesigningHashAgility: CMSSignedAttributes = 0x0010; | ||
pub const kCMSAttrAppleCodesigningHashAgilityV2: CMSSignedAttributes = 0x0020; | ||
pub const kCMSAttrAppleExpirationTime: CMSSignedAttributes = 0x0040; | ||
|
||
#[repr(i32)] | ||
#[derive(Copy, Clone, Eq, PartialEq, Debug)] | ||
pub enum CMSCertificateChainMode { | ||
kCMSCertificateNone = 0, | ||
kCMSCertificateSignerOnly = 1, | ||
kCMSCertificateChain = 2, | ||
kCMSCertificateChainWithRoot = 3, | ||
kCMSCertificateChainWithRootOrFail = 4, | ||
} | ||
|
||
extern "C" { | ||
|
||
// CMS decoder | ||
|
||
pub fn CMSDecoderGetTypeID() -> CFTypeID; | ||
|
||
pub fn CMSDecoderCreate(output: *mut CMSDecoderRef) -> OSStatus; | ||
|
||
pub fn CMSDecoderUpdateMessage( | ||
decoder: CMSDecoderRef, | ||
msg_bytes: *const c_void, | ||
msg_bytes_len: usize, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderFinalizeMessage(decoder: CMSDecoderRef) -> OSStatus; | ||
|
||
pub fn CMSDecoderSetDetachedContent( | ||
decoder: CMSDecoderRef, | ||
detached_content: CFDataRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopyDetachedContent( | ||
decoder: CMSDecoderRef, | ||
detached_content_out: *mut CFDataRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderGetNumSigners( | ||
decoder: CMSDecoderRef, | ||
num_signers_out: *mut usize, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopySignerStatus( | ||
decoder: CMSDecoderRef, | ||
signer_index: usize, | ||
policy_or_array: CFTypeRef, | ||
evaluate_sec_trust: Boolean, | ||
signer_status_out: *mut CMSSignerStatus, | ||
sec_trust_out: *mut SecTrustRef, | ||
cert_verify_result_code_out: *mut OSStatus, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopySignerEmailAddress( | ||
decoder: CMSDecoderRef, | ||
signer_index: usize, | ||
signer_email_address_out: *mut CFStringRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopySignerCert( | ||
decoder: CMSDecoderRef, | ||
signer_index: usize, | ||
signer_cert_out: *mut SecCertificateRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderIsContentEncrypted( | ||
decoder: CMSDecoderRef, | ||
is_encrypted_out: *mut Boolean, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopyEncapsulatedContentType( | ||
decoder: CMSDecoderRef, | ||
content_type_out: *mut CFDataRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopyAllCerts( | ||
decoder: CMSDecoderRef, | ||
certs_out: *mut CFArrayRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopyContent( | ||
decoder: CMSDecoderRef, | ||
content_out: *mut CFDataRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopySignerSigningTime( | ||
decoder: CMSDecoderRef, | ||
signer_index: usize, | ||
sign_time_out: *mut CFAbsoluteTime, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopySignerTimestamp( | ||
decoder: CMSDecoderRef, | ||
signer_index: usize, | ||
timestamp: *mut CFAbsoluteTime, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopySignerTimestampWithPolicy( | ||
decoder: CMSDecoderRef, | ||
timestamp_policy: CFTypeRef, | ||
signer_index: usize, | ||
timestamp: *mut CFAbsoluteTime, | ||
) -> OSStatus; | ||
|
||
pub fn CMSDecoderCopySignerTimestampCertificates( | ||
decoder: CMSDecoderRef, | ||
signer_index: usize, | ||
certificate_refs: *mut CFArrayRef, | ||
) -> OSStatus; | ||
|
||
|
||
// CMS encoder | ||
|
||
pub static kCMSEncoderDigestAlgorithmSHA1: CFStringRef; | ||
pub static kCMSEncoderDigestAlgorithmSHA256: CFStringRef; | ||
|
||
pub fn CMSEncoderGetTypeID() -> CFTypeID; | ||
|
||
pub fn CMSEncoderCreate(encoder_out: *mut CMSEncoderRef) -> OSStatus; | ||
|
||
pub fn CMSEncoderSetSignerAlgorithm( | ||
encoder: CMSEncoderRef, | ||
digest_alogrithm: CFStringRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderAddSigners( | ||
encoder: CMSEncoderRef, | ||
signer_or_array: CFTypeRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderCopySigners( | ||
encoder: CMSEncoderRef, | ||
signers_out: *mut CFArrayRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderAddRecipients( | ||
encoder: CMSEncoderRef, | ||
recipient_or_array: CFTypeRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderCopyRecipients( | ||
encoder: CMSEncoderRef, | ||
recipients_out: *mut CFArrayRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderSetHasDetachedContent( | ||
encoder: CMSEncoderRef, | ||
detached_content: Boolean, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderGetHasDetachedContent( | ||
encoder: CMSEncoderRef, | ||
detached_content_out: *mut Boolean, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderSetEncapsulatedContentTypeOID( | ||
encoder: CMSEncoderRef, | ||
content_type_oid: CFTypeRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderCopyEncapsulatedContentType( | ||
encoder: CMSEncoderRef, | ||
content_type_out: *mut CFDataRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderAddSupportingCerts( | ||
encoder: CMSEncoderRef, | ||
cert_or_array: CFTypeRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderCopySupportingCerts( | ||
encoder: CMSEncoderRef, | ||
certs_out: *mut CFArrayRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderAddSignedAttributes( | ||
encoder: CMSEncoderRef, | ||
signed_attributes: CMSSignedAttributes, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderSetCertificateChainMode( | ||
encoder: CMSEncoderRef, | ||
chain_mode: CMSCertificateChainMode, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderGetCertificateChainMode( | ||
encoder: CMSEncoderRef, | ||
chain_mode_out: *mut CMSCertificateChainMode, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderUpdateContent( | ||
encoder: CMSEncoderRef, | ||
content: *const c_void, | ||
content_len: usize, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderCopyEncodedContent( | ||
encoder: CMSEncoderRef, | ||
encoded_content_out: *mut CFDataRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncodeContent( | ||
signers: CFTypeRef, | ||
recipients: CFTypeRef, | ||
content_type_oid: CFTypeRef, | ||
detached_content: Boolean, | ||
signed_attributes: CMSSignedAttributes, | ||
content: *const c_void, | ||
content_len: usize, | ||
encoded_content_out: *mut CFDataRef, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderCopySignerTimestamp( | ||
encoder: CMSEncoderRef, | ||
signer_index: usize, | ||
timestamp: *mut CFAbsoluteTime, | ||
) -> OSStatus; | ||
|
||
pub fn CMSEncoderCopySignerTimestampWithPolicy( | ||
encoder: CMSEncoderRef, | ||
timestamp_policy: CFTypeRef, | ||
signer_index: usize, | ||
timestamp: *mut CFAbsoluteTime, | ||
) -> OSStatus; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.