StatelessFileSharingEncryptedSource.fromXml constructor
StatelessFileSharingEncryptedSource.fromXml(- XMLNode element
)
Implementation
factory StatelessFileSharingEncryptedSource.fromXml(XMLNode element) {
assert(
element.attributes['xmlns'] == sfsEncryptionXmlns,
'Element has invalid xmlns',
);
final key = base64Decode(element.firstTag('key')!.text!);
final iv = base64Decode(element.firstTag('iv')!.text!);
final sources = element.firstTag('sources', xmlns: sfsXmlns)!.children;
// Find the first URL source
final source = sources.firstWhereOrNull(
(XMLNode child) =>
child.tag == 'url-data' && child.attributes['xmlns'] == urlDataXmlns,
)!;
// Find hashes
final hashes = <HashFunction, String>{};
for (final hash in element.findTags('hash', xmlns: hashXmlns)) {
final hashFunction =
HashFunction.fromName(hash.attributes['algo']! as String);
hashes[hashFunction] = hash.text!;
}
return StatelessFileSharingEncryptedSource(
SFSEncryptionType.fromNamespace(element.attributes['cipher']! as String),
key,
iv,
hashes,
StatelessFileSharingUrlSource.fromXml(source),
);
}