diff options
author | kaotisk <kaotisk@arching-kaos.org> | 2024-03-10 02:08:24 +0200 |
---|---|---|
committer | kaotisk <kaotisk@arching-kaos.org> | 2024-03-10 02:08:24 +0200 |
commit | 798a8a50445f894f7e6979b9e688639005d0a5d9 (patch) | |
tree | c47570e1a0f1ae3f3b0b4ef404a67137e1e92c25 /bin/ak-sm-merkle-tree | |
parent | cfdeb61252a100d660c047a4ea1eb5a38bba705b (diff) | |
download | arching-kaos-tools-798a8a50445f894f7e6979b9e688639005d0a5d9.tar.gz arching-kaos-tools-798a8a50445f894f7e6979b9e688639005d0a5d9.tar.bz2 arching-kaos-tools-798a8a50445f894f7e6979b9e688639005d0a5d9.zip |
Renamed ak-sm-merkle-tree* to ak-fs-*
renamed: bin/ak-sm-merkle-tree -> bin/ak-fs-add
renamed: bin/ak-sm-merkle-tree-to-file -> bin/ak-fs-get
Also, minor fixes in README
Diffstat (limited to 'bin/ak-sm-merkle-tree')
-rwxr-xr-x | bin/ak-sm-merkle-tree | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/bin/ak-sm-merkle-tree b/bin/ak-sm-merkle-tree deleted file mode 100755 index 2ba5e91..0000000 --- a/bin/ak-sm-merkle-tree +++ /dev/null @@ -1,226 +0,0 @@ -#!/bin/bash -# -# The concept is bit more complicated now -# -# 1. For a given file we split in 4KB files inside a temporary directory -# -# 2. We then create a map file and a merkle tree containing the resulted files -# and their sha512sum. -# -# 3. We move the splitted files to our $CHKDIR named after their checksums -# -# 4. We move the merkle tree pairs to $MERKLEDIR -# -# We ultimately want to be seeding the file so -# -# 4. We append the checksum of the original file with its name into the map file -# -# 5. We rename the map file after its checksum and move it to maps directory -# -# 6. We are done! -# - -# Uncomment next line if you want to debug -# set -xe -PROGRAM="$(basename $0)" - -if [ ! -f "$1" ] -then - echo "ERROR File not found" - exit 1 -else - base64 $1 > file - FILE="file" -fi - -# The directory where the chunked data will be living at -CHKDIR="$AK_WORKDIR/ftr/" -# The directory for the map files so we can reconstruct the file -FILEMAPSDIR="$AK_WORKDIR/fmp/" -# Merkle tree file/references -MERKLEDIR="$AK_WORKDIR/fmrk/" -# A temporary root dir to work on -TEMPORARYDIR="$(ak-tempassin)" -# A subdir to split the files there -TECHDIR="$TEMPORARYDIR/chks/" -# A pin point to return from where we came from -CURRENTDIR="$(pwd)/" - -# Our snippet for logging debug info -logit(){ - ak-logthis "$PROGRAM" "$1" "$2" -} - -# Checking directories and create them if necessary -rm -rf $TEMPORARYDIR - -# TECHDIR -if [ ! -d "$TECHDIR" ] -then - mkdir -p "$TECHDIR" - if [ "$?" == 0 ] - then - logit "INFO" "Folder $TECHDIR created!" - else - logit "ERROR" "Problem occured while creating $TECHDIR" - echo "ERROR Can't create $TECHDIR" - exit 1 - fi -else - logit "INFO" "Temp dir found" -fi - -# FILEMAPSDIR -if [ ! -d "$FILEMAPSDIR" ] -then - mkdir -p "$FILEMAPSDIR" - if [ "$?" == 0 ] - then - logit "INFO" "Folder $FILEMAPSDIR created!" - else - logit "ERROR" "Problem occured while creating $FILEMAPSDIR" - echo "ERROR Can't create $FILEMAPSDIR" - exit 1 - fi -else - logit "INFO" "Mapsdir found" -fi - -# CHKDIR -if [ ! -d "$CHKDIR" ] -then - mkdir -p "$CHKDIR" - if [ "$?" == 0 ] - then - logit "INFO" "Folder $CHKDIR created!" - else - logit "ERROR" "Problem occured while creating $CHKDIR" - echo "ERROR Can't create $CHKDIR" - exit 1 - fi -else - logit "INFO" "Workdir found" -fi - -# MERKLEDIR -if [ ! -d "$MERKLEDIR" ] -then - mkdir -p "$MERKLEDIR" - if [ "$?" == 0 ] - then - logit "INFO" "Folder $MERKLEDIR created!" - else - logit "ERROR" "Problem occured while creating $MERKLEDIR" - echo "ERROR Can't create $MERKLEDIR" - exit 1 - fi -else - logit "INFO" "Workdir found" -fi -# Uncomment next line in case you want to debug the resulting script as well -# echo 'set -xe' > $TEMPORARYDIR/cmd_queue.sh - -# We get the SHA512 hash for the $FILE given -CHECKSUM=$(sha512sum "$FILE"|awk '{print $1}') -FILE_SIZE="$(du -b $FILE | awk '{ print $1 }')" -if [ $FILE_SIZE -lt 4097 ] -then - cp $FILE "$TECHDIR$(basename "$FILE")-00000000000000000000000000000000000000000000000000.chk" -else - # We split the file into 4*1024 bytes and output the chunks into TECHDIR - split -a 50 -b 4096 --additional-suffix ".chk" -d "$FILE" "$TECHDIR$(basename "$FILE")-" -fi - -# We go over there... -cd $TECHDIR -#set -xe -# We get every chunks' SHA512 and we craft a script to rename the chunks and -# move them to CHKDIR -for file in $TEMPORARYDIR/chks/* -do - sha512sum $file >> $TEMPORARYDIR/map -done -# Append last chk if not even number -appendLastIfNotEven(){ - if [ "$(expr $(wc -l "$1" | awk '{ print $1 }') % 2)" != 0 ] - then - tail -n 1 "$1" >> "$1" - fi -} -appendLastIfNotEven "$TEMPORARYDIR/map" -# Figure out how many times we need to pack -totalChunks=`grep 'chk' $TEMPORARYDIR/map | wc -l` -temp="$totalChunks" -timesRan=0 -while [ $temp != 1 ] -do - temp=`expr $temp / 2` - timesRan=`expr $timesRan + 1` -done -printf "Ran %s times \n" "$timesRan" -printf "Total chunks %s \n" "$totalChunks" - -workingIndex="$TEMPORARYDIR/map" -c=$timesRan -while [ "$c" != 0 ] -do - a=1 - printf "Level: %s, will work on %s chunks\n" "$c" "$totalChunks" - while [[ "$a" -lt "$totalChunks" ]] - do - b=`expr "$a" + 1` - sed -n "$a"p "$workingIndex" | awk '{ print $1 }' >> level.$c.pair.$a-$b - sed -n "$b"p "$workingIndex" | awk '{ print $1 }' >> level.$c.pair.$a-$b - shaSum="$(sha512sum level.$c.pair.$a-$b | awk '{ print $1 }')" - cp level.$c.pair.$a-$b $MERKLEDIR/$shaSum - sha512sum level.$c.pair.$a-$b | awk '{ print $1 }' >> level.$c.map - a=`expr "$a" + 2` - done - workingIndex="level.$c.map" - appendLastIfNotEven "$workingIndex" - shaSum=`sha512sum $workingIndex | awk '{ print $1 }'` - cp $workingIndex $MERKLEDIR/$shaSum - totalChunks=`cat $workingIndex | wc -l` - c=`expr $c - 1` -done - -if [ -f level.1.map ] -then - sha512sum level.1.map -else - echo error - exit 1 -fi - -# Reset file with uniq -cat $TEMPORARYDIR/map | uniq > $TEMPORARYDIR/map2 -cat $TEMPORARYDIR/map2 > $TEMPORARYDIR/map -rm $TEMPORARYDIR/map2 - -counter=0 -while IFS="" read -r p || [ -n "$p" ] -do - printf "mv %s %s%s\n" "$(echo $p | awk '{ print $2 }')" "$CHKDIR" "$(echo $p | awk '{ print $1 }')" >> $TEMPORARYDIR/cmd_queue.sh - counter=`expr "$counter" + 1` -done < $TEMPORARYDIR/map - -# We run the crafted script -sh $TEMPORARYDIR/cmd_queue.sh - -# and we delete it -rm $TEMPORARYDIR/cmd_queue.sh - -# We inform the map about the original $FILE name and SHA512 -echo "$CHECKSUM $(basename "$FILE")" >> $TEMPORARYDIR/map - -# We get the SHA512 hash of the resulted map file -MAPFILEHASH="$(sha512sum $TEMPORARYDIR/map | awk '{ print $1 }')" - -# and we rename it with it and move it to FILEMAPSDIR -`sha512sum $TEMPORARYDIR/map | awk '{print "mv " $2 " '$FILEMAPSDIR'" $1}'` - -# We remove the TEMPORARYDIR -rm -rf $TEMPORARYDIR - -# and print the MAPFILEHASH -echo "$MAPFILEHASH" |