decode static method
Implementation
static CipherManifest? decode(String content) {
final signatureTimestamp =
_signatureTimestampExp.firstMatch(content)?.group(1)?.nullIfWhitespace;
if (signatureTimestamp == null) {
return null;
}
final cipherCallSite =
_cipherCallSiteExp.firstMatch(content)?.group(0)?.nullIfWhitespace;
if (cipherCallSite == null) {
return null;
}
final cipherContainerName = _cipherContainerNameExp
.firstMatch(cipherCallSite)
?.group(1)
?.nullIfWhitespace;
if (cipherContainerName == null) {
return null;
}
final cipherDefinition =
RegExp('var ${RegExp.escape(cipherContainerName)}={.*?};', dotAll: true)
.firstMatch(content)
?.group(0)
?.nullIfWhitespace;
if (cipherDefinition == null) {
return null;
}
final swapFuncName = _swapFuncNameExp
.firstMatch(cipherDefinition)
?.group(1)
?.nullIfWhitespace;
final spliceFuncName = _spliceFuncNameExp
.firstMatch(cipherDefinition)
?.group(1)
?.nullIfWhitespace;
final reverseFuncName = _reverseFuncName
.firstMatch(cipherDefinition)
?.group(1)
?.nullIfWhitespace;
final ops = cipherCallSite
.split(';')
.map((e) {
final calledFuncName =
_calledFuncNameExp.firstMatch(e)?.group(1)?.nullIfWhitespace;
if (calledFuncName == null) {
return null;
}
if (calledFuncName == swapFuncName) {
final index = _funcIndexExp.firstMatch(e)?.group(1).parseInt();
return SwapCipherOperation(index!);
}
if (calledFuncName == spliceFuncName) {
final index = _funcIndexExp.firstMatch(e)?.group(1).parseInt();
return SpliceCipherOperation(index!);
}
if (calledFuncName == reverseFuncName) {
return const ReverseCipherOperation();
}
})
.whereNotNull()
.toList();
return CipherManifest(signatureTimestamp, ops);
}