aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/secret.c19
-rw-r--r--src/secret.h7
-rw-r--r--src/strcmp.c27
3 files changed, 53 insertions, 0 deletions
diff --git a/src/secret.c b/src/secret.c
new file mode 100644
index 0000000..d4113b2
--- /dev/null
+++ b/src/secret.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <string.h>
+#include "secret.h"
+
+int main(int argc, char* argv[]){
+ if(argc <2){
+ printf("Usage: %s <secret_password>\n", argv[0]);
+ return 1;
+ }
+
+ UNHIDE_STR(pass);
+
+ if(! strcmp(pass, argv[1]))
+ printf("Access granted\n");
+ else
+ printf("Access denied\n");
+
+ return 0;
+}
diff --git a/src/secret.h b/src/secret.h
new file mode 100644
index 0000000..d6ee2ea
--- /dev/null
+++ b/src/secret.h
@@ -0,0 +1,7 @@
+#define A(c) (c)-0x19
+#define UNHIDE_STR(str) do { char *p = str; while (*p) *p++ += 0x19; } while (0)
+#define HIDE_STR(str) do { char *p = str; while (*p) *p++ -= 0x19; } while (0)
+
+char pass[] = {
+ A('c'), A('a'), A('t'), A('z'), A('r'), A('u'), A('l'), 0
+};
diff --git a/src/strcmp.c b/src/strcmp.c
new file mode 100644
index 0000000..d626bd3
--- /dev/null
+++ b/src/strcmp.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+/* Compare S1 and S2, returning less than, equal to or
+ greater than zero if S1 is lexicographically less than,
+ equal to or greater than S2. */
+int strcmp (const char *p1, const char *p2)
+{
+ const unsigned char *s1 = (const unsigned char *) p1;
+ const unsigned char *s2 = (const unsigned char *) p2;
+ unsigned char c1, c2;
+
+ // print out input values
+ printf("strcmp('%s', '%s')", p1, p2);
+ do
+ {
+ c1 = (unsigned char) *s1++;
+ c2 = (unsigned char) *s2++;
+ if (c1 == '\0') {
+ // print return value
+ printf(" = %d\n", c1 - c2);
+ return c1 - c2;
+ }
+ }
+ while (c1 == c2);
+
+ printf(" = %d\n", c1 - c2);
+ return c1 - c2;
+}