diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/akfs.c | 328 | ||||
-rwxr-xr-x | src/build.sh | 19 | ||||
-rw-r--r-- | src/include/akfs.h | 25 | ||||
-rw-r--r-- | src/tests/test_akfs.c | 208 | ||||
-rw-r--r-- | src/tests/test_akfs_mkdir.c | 38 |
5 files changed, 0 insertions, 618 deletions
diff --git a/src/akfs.c b/src/akfs.c deleted file mode 100644 index 6388a35..0000000 --- a/src/akfs.c +++ /dev/null @@ -1,328 +0,0 @@ -#include <stdio.h> -#include <stdbool.h> -#include <assert.h> -#include <stdlib.h> -#include <string.h> -#include <akfs.h> -#include <sys/stat.h> - -char* ak_fs_return_hash_path(char* string) -{ - if ( ak_fs_verify_input_is_hash(string) ) - { - unsigned int i = 0; - char *result = malloc((128*2)+1); - while ( string[i] != '\0' ) - { - result[i*2] = string[i]; - if ( (i*2) + 1 <= 254 ) - { - result[(i*2)+1] = '/'; - } - else - { - result[(i*2)+1] = '\0'; - } - ++i; - } - return result; - } - else - { - return NULL; - } -} - -char* ak_fs_return_hash_dir(char* string) -{ - if ( ak_fs_verify_input_is_hash(string) ) - { - unsigned int i = 0; - char *result = malloc((128*2)+1); - while ( string[i] != '\0' ) - { - result[i*2] = string[i]; - if ( (i*2) + 1 <= 254-2 ) - { - result[(i*2)+1] = '/'; - } - else - { - result[(i*2)+1] = '\0'; - } - ++i; - } - return result; - } - else - { - return NULL; - } -} - -bool ak_fs_verify_input_is_hash(char* string) -{ - unsigned int i = 0; - while ( string[i] != '\0' ) - { - if ( - i < 128 && - !( - ( string[i] >= 0x30 ) && - (( string[i] <= 0x39) || ( string[i] >= 0x61 )) && - ( string[i] <= 0x66 ) - ) - ) - { - return false; - } - else { - i++; - } - } - if ( i > 128 ) - { - return false; - } - return true; -} - -int ak_fs_create_dir_for_hash(char* string) -{ - /* TODO - * Some aspects of this function - * 1. We need a "root" place to put our dirs into, this is not specified - * anywhere in this code but it is spartially specified in other files - * like lib/_ak_fs bash script and the rc/config file we currently source - * in $HOME/.bashrc - * 2. We might need to "lock" onto some version of glibc and be aware of - * other systems that do not use that one. - */ - if ( ak_fs_verify_input_is_hash(string) ) - { - char* dir_path = ak_fs_return_hash_dir(string); - // We will need to separate the string so we can create the path one - // directory at the time - int len = strlen(dir_path); - for ( int i = 0; i < len+1; ++i) - { - if ( dir_path[i] == '/' ) - { - //printf("%c\n", dir_path[i]); - //char* test = strndup(dir_path, i); - //printf("A: [i:%d] [c:%c] - %s\n", i, dir_path[i], test); - continue; - } - else - { - char* incremental_dir_path = strndup(dir_path, i+1); - // printf("B: [i:%d] [c:%c] - %s\n", i, dir_path[i], test); - struct stat sb; - if (stat(incremental_dir_path, &sb) == 0 && S_ISDIR(sb.st_mode)) - { - continue; - } - else - { - int return_code = mkdir(incremental_dir_path, 0777); - if ( return_code == 0 ) - { - continue; - } - else - { - // should be unreachable I guess since previous checks - // though it could be caused by some other kind of error - // like, no permission, or exists but is not a directory - // but a file, dev, char, pipe whatever this thing - // supports anyway - free(incremental_dir_path); - free(dir_path); - return -3; - } - } - free(incremental_dir_path); - } - } - //printf("%d\n", len); - //printf("%s\n", dir_path); - //const char *pathname = dir_path; - //int ec = mkdir(pathname, 0777); - //return ec; - free(dir_path); - return 0; - } - else - { - return -2; - } -} - -sha512sum ak_fs_sha512sum_string_to_struct(char* string) -{ - sha512sum hash = {0}; - if ( ak_fs_verify_input_is_hash(string) ) - { - for (size_t l = 0; l < 8; ++l) - { - hash.sum[l]=0; - } - unsigned int i = 0; - unsigned int j = 0; - unsigned int k = 4; - while ( string[i] != '\0' ) - { - assert( i < 128 && "Length exceeded limit"); - if ( i % 16 == 0 ) j = i / 16; - switch (string[i]) - { - case 0x30: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x0; - break; - case 0x31: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x1; - break; - case 0x32: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x2; - break; - case 0x33: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x3; - break; - case 0x34: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x4; - break; - case 0x35: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x5; - break; - case 0x36: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x6; - break; - case 0x37: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x7; - break; - case 0x38: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x8; - break; - case 0x39: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0x9; - break; - case 0x61: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0xa; - break; - case 0x62: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0xb; - break; - case 0x63: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0xc; - break; - case 0x64: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0xd; - break; - case 0x65: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0xe; - break; - case 0x66: - hash.sum[j] = hash.sum[j] << k; - hash.sum[j] += 0xf; - break; - default: - assert(0 && "Character out of range"); - } - i++; - } - if ( i != 128 ) - { - sha512sum hash0 = {0}; - return hash0; - } - return hash; - } - else - { - return hash; - } -} - -char* ak_fs_sha512sum_struct_to_string(sha512sum hash) -{ - char *string = malloc(129); - int counter = 0; - for (size_t i = 0; i < 8; ++i) - { - for (size_t j = 0; j < 16; ++j) - { - long unsigned first = hash.sum[i]/0xfffffffffffffff; - switch(first){ - case 0: - string[counter] = '0'; - break; - case 1: - string[counter] = '1'; - break; - case 2: - string[counter] = '2'; - break; - case 3: - string[counter] = '3'; - break; - case 4: - string[counter] = '4'; - break; - case 5: - string[counter] = '5'; - break; - case 6: - string[counter] = '6'; - break; - case 7: - string[counter] = '7'; - break; - case 8: - string[counter] = '8'; - break; - case 9: - string[counter] = '9'; - break; - case 0xa: - string[counter] = 'a'; - break; - case 0xb: - string[counter] = 'b'; - break; - case 0xc: - string[counter] = 'c'; - break; - case 0xd: - string[counter] = 'd'; - break; - case 0xe: - string[counter] = 'e'; - break; - case 0xf: - string[counter] = 'f'; - break; - default: - assert(0 && "Should be unreachable"); - } - counter++; - hash.sum[i] = hash.sum[i] << 4; - } - } - string[128] = '\0'; - return string; -} diff --git a/src/build.sh b/src/build.sh deleted file mode 100755 index 440bca6..0000000 --- a/src/build.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -if [ ! -d $PWD/lib ] -then - mkdir $PWD/lib -fi - -echo "Building lib/akfs.so" && \ -gcc -c -shared -Wextra -Wall -Werror -pedantic -ggdb -fPIC -I./include akfs.c -o lib/akfs.so && \ -echo "Building tests/test_akfs" && \ -gcc -Wextra -Wall -Werror -pedantic -ggdb -Wl,-rpath=lib -I./include tests/test_akfs.c lib/akfs.so -o tests/test_akfs && \ -echo "Running test_akfs" && \ -time ./tests/test_akfs -rm ./tests/test_akfs - -echo "Building tests/test_akfs_mkdir.c" && \ -gcc -Wextra -Wall -Werror -pedantic -ggdb -Wl,-rpath=lib -I./include tests/test_akfs_mkdir.c lib/akfs.so -o tests/test_akfs_mkdir && \ -echo "Running test_akfs_mkdir" && \ -time ./tests/test_akfs_mkdir -rm ./tests/test_akfs_mkdir diff --git a/src/include/akfs.h b/src/include/akfs.h deleted file mode 100644 index 1a574af..0000000 --- a/src/include/akfs.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef AKFS -#define AKFS - -#include <stdbool.h> - -typedef struct { - long unsigned int sum[8]; -} sha512sum; - -//typedef char[64] sha512sum_as_string; - -char* ak_fs_return_hash_path(char*); - -char* ak_fs_return_hash_dir(char*); - -bool ak_fs_verify_input_is_hash(char*); - -int ak_fs_create_dir_for_hash(char*); - -sha512sum ak_fs_sha512sum_string_to_struct(char*); - -char* ak_fs_sha512sum_struct_to_string(sha512sum); - -#endif // AKFS - diff --git a/src/tests/test_akfs.c b/src/tests/test_akfs.c deleted file mode 100644 index 5e2c6ad..0000000 --- a/src/tests/test_akfs.c +++ /dev/null @@ -1,208 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <akfs.h> - -void correct_string_correct_length() -{ - printf("%s\t", __func__); - char queried_string[] = "921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf448fd800a460b67efda0020088bc97bf7d9da97a9e2ce7b20d46e066462ec44cf60284f9a7"; - // printf("Hash given:\t%s\n", queried_string); - // printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - sha512sum resulted_hash = ak_fs_sha512sum_string_to_struct(queried_string); - char* resulted_string = ak_fs_sha512sum_struct_to_string(resulted_hash); - // printf("Hash returned:\t%s\n", resulted_string); - if ( strcmp(queried_string, resulted_string) == 0 ) - { - printf("PASS!\n"); - } - else - { - printf("NO PASS :(\n"); - } - free(resulted_string); -} - -void bad_string_correct_length() -{ - printf("%s\t", __func__); - char queried_string[] = "921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf448fd800a460b67efda0020088bc97bf7d9da97a9e2ce7b20d46e066462ec44cf60284f9az"; - // printf("Hash given:\t%s\n", queried_string); - // printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - sha512sum resulted_hash = ak_fs_sha512sum_string_to_struct(queried_string); - char* resulted_string = ak_fs_sha512sum_struct_to_string(resulted_hash); - // printf("Hash returned:\t%s\n", resulted_string); - if ( strcmp(queried_string, resulted_string) != 0 ) - { - printf("PASS!\n"); - } - else - { - printf("NO PASS :(\n"); - } - free(resulted_string); -} - -void less_than_length() -{ - printf("%s\t", __func__); - char queried_string[] = "921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf"; - // printf("Hash given:\t%s\n", queried_string); - // printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - sha512sum resulted_hash = ak_fs_sha512sum_string_to_struct(queried_string); - char* resulted_string = ak_fs_sha512sum_struct_to_string(resulted_hash); - // printf("Hash returned:\t%s\n", resulted_string); - if ( strcmp(queried_string, resulted_string) != 0 ) - { - printf("\tPASS!\n"); - } - else - { - printf("\tNO PASS :(\n"); - } - free(resulted_string); -} - -void more_than_length() -{ - printf("%s\t", __func__); - char queried_string[] = "921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf448fd800a460b67efda0020088bc97bf7d9da97a9e2ce7b20d46e066462ec44cf60284f9a7aaa"; - // printf("Hash given:\t%s\n", queried_string); - // printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - sha512sum resulted_hash = ak_fs_sha512sum_string_to_struct(queried_string); - char* resulted_string = ak_fs_sha512sum_struct_to_string(resulted_hash); - // printf("Hash returned:\t%s\n", resulted_string); - if ( strcmp(queried_string, resulted_string) != 0 ) - { - printf("\tPASS!\n"); - } - else - { - printf("\tNO PASS :(\n"); - } - free(resulted_string); -} - -void string_is_empty() -{ - printf("%s\t", __func__); - char queried_string[128] = ""; - // printf("Hash given:\t%s\n", queried_string); - //printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - sha512sum resulted_hash = ak_fs_sha512sum_string_to_struct(queried_string); - char* resulted_string = ak_fs_sha512sum_struct_to_string(resulted_hash); - // printf("Hash returned:\t%s\n", resulted_string); - if ( strcmp(queried_string, resulted_string) != 0 ) - { - printf("\t\tPASS!\n"); - } - else - { - printf("\t\tNO PASS :(\n"); - } - free(resulted_string); -} - -void hash_path_test() -{ - printf("%s\t", __func__); - char queried_string[] = "921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf448fd800a460b67efda0020088bc97bf7d9da97a9e2ce7b20d46e066462ec44cf60284f9a7"; - // printf("Hash given:\t%s\n", queried_string); - // printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - char* resulted_string = ak_fs_return_hash_path(queried_string); - // printf("Path returned:\t%s\n", resulted_string); - if ( strcmp(queried_string, resulted_string) != 0 ) - { - printf("\t\tPASS!\n"); - } - else - { - printf("\t\tNO PASS :(\n"); - } - free(resulted_string); -} - -void hash_dir_test() -{ - printf("%s\t", __func__); - char queried_string[] = "921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf448fd800a460b67efda0020088bc97bf7d9da97a9e2ce7b20d46e066462ec44cf60284f9a7"; - // printf("Hash given:\t%s\n", queried_string); - // printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - char* resulted_string = ak_fs_return_hash_dir(queried_string); - // printf("Path returned:\t%s\n", resulted_string); - if ( strcmp(queried_string, resulted_string) != 0 ) - { - printf("\t\tPASS!\n"); - } - else - { - printf("\t\tNO PASS :(\n"); - } - free(resulted_string); -} - -void hash_save_to_file() -{ - printf("%s\t", __func__); - char queried_string[] = "921618bc6d9f8059437c5e0397b13f973ab7c7a7b81f0ca31b70bf448fd800a460b67efda0020088bc97bf7d9da97a9e2ce7b20d46e066462ec44cf60284f9a7"; - // printf("Hash given:\t%s\n", queried_string); - // printf("Is a hash: %s\n", ak_fs_verify_input_is_hash(queried_string) ? "true": "false"); - sha512sum resulted_hash = ak_fs_sha512sum_string_to_struct(queried_string); - FILE* fd = fopen("tmpfile", "wb"); - if ( fd == NULL ) - { - printf("Some error occured"); - exit(1); - } - fwrite(&resulted_hash, sizeof(sha512sum),1,fd); - fclose(fd); - - sha512sum readone = {0}; - fd = fopen("tmpfile", "rb"); - if ( fd == NULL ) - { - printf("Some error occured"); - exit(1); - } - fread (&readone, sizeof(sha512sum),1,fd); - char* resulted_string = ak_fs_sha512sum_struct_to_string(readone); - - if ( strcmp(queried_string, resulted_string) == 0 ) - { - printf("\tPASS!\n"); - } - else - { - printf("\tNO PASS :(\n"); - } - fclose(fd); - free(resulted_string); -} - -int main(void) -{ - // Correct one - correct_string_correct_length(); - - // Supposingly a bad string but in correct length - bad_string_correct_length(); - - // Less than must be length - less_than_length(); - - // More than must be length - more_than_length(); - - // Empty string - string_is_empty(); - - // Hash path - hash_path_test(); - - // Hash dir - hash_dir_test(); - - // Tempfile test read-write - hash_save_to_file(); - return 0; -} diff --git a/src/tests/test_akfs_mkdir.c b/src/tests/test_akfs_mkdir.c deleted file mode 100644 index 2ef86b3..0000000 --- a/src/tests/test_akfs_mkdir.c +++ /dev/null @@ -1,38 +0,0 @@ -#include <stdio.h> -#include <akfs.h> - -void test_non_hash_string(){ - char *path = "tes"; - int ec = ak_fs_create_dir_for_hash(path); - printf("mkdir return code: %d\n", ec); - path = "tes/t"; - ec = ak_fs_create_dir_for_hash(path); - printf("mkdir return code: %d\n", ec); -} - -void test_hash_string(){ - char *path = "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"; - int ec = ak_fs_create_dir_for_hash(path); - printf("mkdir return code: %d\n", ec); -} - -void test_hash_string2(){ - char *path = "ee2ab0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"; - int ec = ak_fs_create_dir_for_hash(path); - printf("mkdir return code: %d\n", ec); -} - -void test_hash_string3(){ - char *path = "ee2ab0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a800"; - int ec = ak_fs_create_dir_for_hash(path); - printf("mkdir return code: %d\n", ec); -} - -int main() -{ - test_non_hash_string(); - test_hash_string(); - test_hash_string2(); - test_hash_string3(); - return 0; -} |