Compare commits
10 Commits
stream-rea
...
master
Author | SHA1 | Date | |
---|---|---|---|
a703dae710 | |||
|
d1cb5a5ac9 | ||
|
163fb8eab7 | ||
1375e66607 | |||
a01fd0e848 | |||
|
2adaf0464f | ||
|
f5156ef14c | ||
|
6839809335 | ||
|
d25fc4b5c8 | ||
|
15bbe37986 |
39
ocdec.sh
39
ocdec.sh
@ -124,38 +124,31 @@ function decryptFile() {
|
|||||||
|
|
||||||
decFileKeyContent="$( openssl rc4 -d -in "$encFileKeyPath" -iv 0 -K $decUserFileShareKeyHEX )"
|
decFileKeyContent="$( openssl rc4 -d -in "$encFileKeyPath" -iv 0 -K $decUserFileShareKeyHEX )"
|
||||||
decFileKeyContentHEX="$( echo -n $decFileKeyContent |od -An -tx1 |tr -dc '[:xdigit:]' )"
|
decFileKeyContentHEX="$( echo -n $decFileKeyContent |od -An -tx1 |tr -dc '[:xdigit:]' )"
|
||||||
|
decFileKeyContentHEX=${decFileKeyContentHEX:0:64}
|
||||||
# --- Get the FileKey ---
|
# --- Get the FileKey ---
|
||||||
|
|
||||||
# --- Decrypt the file ---
|
# --- Decrypt the file ---
|
||||||
encFileContentsALL="$(cat "${USER}/$encFilePath")"
|
# OC writes the encrypted file in 8K chunks, each containing it's own iv in the end
|
||||||
encFileContentsNOHEAD=$(echo -n "$encFileContentsALL" | sed -r 's/^HBEGIN:.+:HEND-*//')
|
chunkSize=8192
|
||||||
|
while read -d '' -n $chunkSize CHUNK || [ ! -z "$CHUNK" ]; do
|
||||||
pos=0; posc=0; encStream="";
|
#split chunk into payload an iv string (strip padding from iv)
|
||||||
# bottleneck: bash read by character is super slow
|
read payload iv <<<`echo $CHUNK | sed -r 's/(.*)00iv00(.{16})xx/\1 \2/'`
|
||||||
while IFS= read -r -n1 char; do
|
CHUNK=
|
||||||
(( posc++ ))
|
#if [ -z $CHUNK ]; then break; fi
|
||||||
if $(echo ${encStream: -24} |grep -Eq "^00iv00.{16}xx$"); then
|
# convert base64 iv into hex
|
||||||
plainIV=$(echo ${encStream: -24} |sed -r 's/^00iv00//;s/xx$//')
|
iv=$(echo -n "$iv" | od -An -tx1 | tr -dc '[:xdigit:]' )
|
||||||
encStreamReady=${encStream:((posc - pos - 1)):((pos - 24))}
|
# decode chunk
|
||||||
(( pos=0 ))
|
openssl enc -AES-256-CFB -d -nosalt -base64 -A -K $decFileKeyContentHEX -iv $iv -in <(echo "$payload")
|
||||||
|
#done <<<`sed -r 's/^HBEGIN:.+:HEND-*//' <"${USER}/$encFilePath"` # pipe the encrypted file without head into the loop
|
||||||
#echo "[::] DEBUG: " $encStreamReady with $plainIV
|
done < <(dd bs=$chunkSize skip=1 if="${USER}/$encFilePath")
|
||||||
# can decrypt now
|
|
||||||
plainFileIVHEX=$(echo -n "$plainIV" |od -An -tx1 |tr -dc '[:xdigit:]')
|
|
||||||
openssl enc -AES-256-CFB -d -nosalt -base64 -A -K $decFileKeyContentHEX -iv $plainFileIVHEX -in <(echo "$encStreamReady")
|
|
||||||
#php -r "echo openssl_decrypt('$encStreamReady', 'AES-256-CFB', '$decFileKeyContent', false, '$plainIV');"
|
|
||||||
fi
|
|
||||||
(( pos++ ))
|
|
||||||
encStream="$encStream$char"
|
|
||||||
done <<< $encFileContentsNOHEAD
|
|
||||||
# --- Decrypt the file ---
|
# --- Decrypt the file ---
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get a username from the path (arg1)
|
# Get a username from the path (arg1)
|
||||||
USER="$(echo $1 |cut -sd / -f 1)"
|
USER="$(echo "$1" |cut -sd / -f 1)"
|
||||||
|
|
||||||
# Strip off the username from the path (arg1)
|
# Strip off the username from the path (arg1)
|
||||||
FILETD="$(echo $1 |cut -sd / -f 2-)"
|
FILETD="$(echo "$1" |cut -sd / -f 2-)"
|
||||||
|
|
||||||
if [ ! -r "$USER" ]; then
|
if [ ! -r "$USER" ]; then
|
||||||
echo "User directory cannot be found! Are you sure you are in ownCloud's data directory?"
|
echo "User directory cannot be found! Are you sure you are in ownCloud's data directory?"
|
||||||
|
Loading…
Reference in New Issue
Block a user