diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/secret.c | 19 | ||||
| -rw-r--r-- | src/secret.h | 7 | ||||
| -rw-r--r-- | src/strcmp.c | 27 | 
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; +}  | 
