diff --git a/Makefile b/Makefile
index 842747894c6dcc0096e19f1efae154370999e442..253992af19230ef00c4220cbe7215a758ba6d39a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,14 @@
 CC = gcc
 CFLAGS = -std=c99 -O3 -Wall -Wpedantic
 EXE = crack
-CFILE = crack.c
 
 all: $(EXE)
 
-$(EXE): $(CFILE)
-	$(CC) $(CFLAGS) -o $(EXE) $<
+sha256.o: sha256.c sha256.h
+	$(CC) $(CFLAGS) -c sha256.c
 
-# %: %.c
-# 	$(CC) $(CFLAGS) -o $@ $<
+$(EXE): crack.c sha256.o
+	$(CC) $(CFLAGS) -o $(EXE) crack.c sha256.o
 
 clean:
 	rm $(EXE)
diff --git a/crack.c b/crack.c
index cc3b55164fc37f017858f6b7986306c8cf7c2540..fd5a928e599c9964bd6f51546cd3370a6e02484d 100644
--- a/crack.c
+++ b/crack.c
@@ -3,14 +3,75 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "sha256.h"
+
 // constants
 #define PWD4_FILENAME "pwd4sha256"
 #define PWD6_FILENAME "pwd6sha256"
+#define PWD_NUMBERS 30
+#define BUFFERSIZE 256
 
 // methods reference
+void check_guess(BYTE guess[], BYTE pwd[PWD_NUMBERS][SHA256_BLOCK_SIZE]);
 
 int main(int argc, char** argv) {
-    printf("test Makefile\n");
+
+    if (argc == 1) {
+        FILE* pwdfp;
+        unsigned char buffer[SHA256_BLOCK_SIZE];
+
+        pwdfp = fopen(PWD4_FILENAME, "rb");
+
+        // read 32 bytes to buffer
+        fread(buffer, SHA256_BLOCK_SIZE, 1, pwdfp);
+
+        fclose(pwdfp);
+
+    } else if (argc == 2) {
+
+    } else if (argc == 3) {
+        FILE* guessfp;
+        FILE* pwdfp;
+        char buffer[BUFFERSIZE];
+
+        guessfp = fopen(argv[1], "r");
+        pwdfp = fopen(argv[2], "rb");
+
+        while (fgets(buffer, sizeof(buffer), guessfp) != NULL) {
+            printf("%s", buffer);
+        }
+
+        fclose(guessfp);
+        fclose(pwdfp);
+    }
 
     return 0;
+}
+
+void check_guess(BYTE guess[], BYTE pwd[PWD_NUMBERS][SHA256_BLOCK_SIZE]) {
+    SHA256_CTX ctx;
+    BYTE buf[SHA256_BLOCK_SIZE];
+    size_t guess_len = strlen(guess);
+    int i;
+
+    sha256_init(&ctx);
+    sha256_update(&ctx, guess, guess_len);
+    sha256_final(&ctx, buf);
+
+    if (guess_len == 4) {
+        for (i = 0; i < 10; i++) {
+            if (!memcmp(pwd[i], buf, SHA256_BLOCK_SIZE)) {
+                printf("%s %d\n", guess, i + 1);
+            }
+        }
+    } else if (guess_len == 6) {
+        for (i = 10; i < 30; i++) {
+            if (!memcmp(pwd[i], buf, SHA256_BLOCK_SIZE)) {
+                printf("%s %d\n", guess, i + 1);
+            }
+        }
+    } else {
+        fprintf(stderr, "ERROR, undefine guess length\n");
+        exit(0);
+    }
 }
\ No newline at end of file