#![doc = include_str!("../../docs/xmlenc.md")]
use roxmltree::Node;
mod decrypt;
mod encrypt;
mod parse;
mod types;
pub use decrypt::{
DecryptionKeyResolver, DocumentDecryptionOptions, KekDecryptor, PrivateKeyDecryptor,
SymmetricKeyDecryptor, decrypt, decrypt_data, decrypt_document, decrypt_document_with_options,
};
pub use encrypt::EncryptedDataBuilder;
pub use parse::parse_encrypted_data;
pub use types::{
CipherData, DataEncryptionAlgorithm, DecryptedContent, DocumentEncryptionOptions,
EncryptedData, EncryptedDataType, EncryptedKey, EncryptionMethod, EncryptionRecipient,
EncryptionResult, KeyTransportAlgorithm, KeyWrapAlgorithm, OaepDigestAlgorithm, ReferenceList,
ReplacementMode, RsaOaepParameters, XmlEncError,
};
fn has_single_element_with_boundary_trivia(parent: Node<'_, '_>) -> bool {
let mut element_count = 0;
for node in parent.children() {
if node.is_element() {
element_count += 1;
if element_count > 1 {
return false;
}
} else if node.is_comment() {
continue;
} else if node.is_text() {
if !node.text().is_some_and(|text| {
text.chars()
.all(|character| matches!(character, ' ' | '\t' | '\n' | '\r'))
}) {
return false;
}
} else {
return false;
}
}
element_count == 1
}