set PATH string ""
get INFO_SIZE asize MEMORY_FILE3
math INFO_SIZE - 4
for
savepos CUR_OFF MEMORY_FILE3
if CUR_OFF > INFO_SIZE
break
endif
get NAME_OFF long MEMORY_FILE3
math FLAGS = NAME_OFF
math NAME_OFF >> 2
math FLAGS & 3
if FLAGS == 0
goto -3 MEMORY_FILE3 SEEK_CUR
else
goto NAME_OFF MEMORY_FILE4
get NAME string MEMORY_FILE4
if FLAGS & 2
set PATH string NAME
elif FLAGS & 1
get OFFSET long MEMORY_FILE3
math OFFSET * ALIGN
goto OFFSET
callfunction DUMP 1
string NAME p "%s/%s" PATH NAME
log NAME 0 SIZE MEMORY_FILE
endif
endif
next
startfunction DUMP
savepos ENTRY_OFF
idstring "spkmrd\0"
get DUMMY byte
get DUMMY long
get DUMMY long
get DUMMY long
padding 16
get SIZE long
get ZSIZE long
get ENTRY_SIZE long
get NEW_OFFSET long
getdstring HASH 16
savepos OFFSET
math ENTRY_SIZE * ALIGN
math NEW_OFFSET * ALIGN
# AES on the aligned size and XOR on the rest
math TMP_ZSIZE = ZSIZE
log MEMORY_FILE2 0 0
append
if NEW_OFFSET != 0
math TMP = ENTRY_SIZE
math TMP - OFFSET
math TMP + ENTRY_OFF
encryption aes KEY "" 0 16
log MEMORY_FILE2 OFFSET TMP
math OFFSET = NEW_OFFSET
math TMP_ZSIZE - TMP
endif
math TMP = TMP_ZSIZE
math TMP y 16
encryption aes KEY "" 0 16
log MEMORY_FILE2 OFFSET TMP
math OFFSET + TMP
xmath TMP "TMP_ZSIZE - TMP"
encryption xor KEY "" 0 16
log MEMORY_FILE2 OFFSET TMP
encryption "" ""
append