/*   $VER: PassWorm Crack 1.1
 *
 *    Copyright © 2001 Kalle Räisänen.
 *
 */

#include <stdio.h>
#include "rotations.h"

void crack(char *st)                   /* The program proper */
{
   int bit = 0, num = 0;
   char cracked[255];

   for(;st[num] != '\0'; bit++, num++)
      {
      if(bit == 64)
         bit = 0;
      switch(st[num])
         {
         case '9': cracked[num] = nine[bit];  break;
         case '8': cracked[num] = eight[bit]; break;
         case '7': cracked[num] = seven[bit]; break;
         case '6': cracked[num] = six[bit];   break;
         case '5': cracked[num] = five[bit];  break;
         case '4': cracked[num] = four[bit];  break;
         case '3': cracked[num] = three[bit]; break;
         case '2': cracked[num] = two[bit];   break;
         case '1': cracked[num] = one[bit];   break;
         case '0': cracked[num] = zero[bit];  break;
         case 'a': cracked[num] = a[bit];     break;
         case 'b': cracked[num] = b[bit];     break;
         case 'c': cracked[num] = c[bit];     break;
         case 'd': cracked[num] = d[bit];     break;
         case 'e': cracked[num] = e[bit];     break;
         case 'f': cracked[num] = f[bit];     break;
         case 'g': cracked[num] = g[bit];     break;
         case 'h': cracked[num] = h[bit];     break;
         case 'i': cracked[num] = i[bit];     break;
         case 'j': cracked[num] = j[bit];     break;
         case 'k': cracked[num] = k[bit];     break;
         case 'l': cracked[num] = l[bit];     break;
         case 'm': cracked[num] = m[bit];     break;
         case 'n': cracked[num] = n[bit];     break;
         case 'o': cracked[num] = o[bit];     break;
         case 'p': cracked[num] = p[bit];     break;
         case 'q': cracked[num] = q[bit];     break;
         case 'r': cracked[num] = r[bit];     break;
         case 's': cracked[num] = s[bit];     break;
         case 't': cracked[num] = t[bit];     break;
         case 'u': cracked[num] = u[bit];     break;
         case 'v': cracked[num] = v[bit];     break;
         case 'w': cracked[num] = w[bit];     break;
         case 'x': cracked[num] = x[bit];     break;
         case 'y': cracked[num] = y[bit];     break;
         case 'z': cracked[num] = z[bit];     break;
         case 'A': cracked[num] = A[bit];     break;
         case 'B': cracked[num] = B[bit];     break;
         case 'C': cracked[num] = C[bit];     break;
         case 'D': cracked[num] = D[bit];     break;
         case 'E': cracked[num] = E[bit];     break;
         case 'F': cracked[num] = F[bit];     break;
         case 'G': cracked[num] = G[bit];     break;
         case 'H': cracked[num] = H[bit];     break;
         case 'I': cracked[num] = I[bit];     break;
         case 'J': cracked[num] = J[bit];     break;
         case 'K': cracked[num] = K[bit];     break;
         case 'L': cracked[num] = L[bit];     break;
         case 'M': cracked[num] = M[bit];     break;
         case 'N': cracked[num] = N[bit];     break;
         case 'O': cracked[num] = O[bit];     break;
         case 'P': cracked[num] = P[bit];     break;
         case 'Q': cracked[num] = Q[bit];     break;
         case 'R': cracked[num] = R[bit];     break;
         case 'S': cracked[num] = S[bit];     break;
         case 'T': cracked[num] = T[bit];     break;
         case 'U': cracked[num] = U[bit];     break;
         case 'V': cracked[num] = V[bit];     break;
         case 'W': cracked[num] = W[bit];     break;
         case 'X': cracked[num] = X[bit];     break;
         case 'Y': cracked[num] = Y[bit];     break;
         case 'Z': cracked[num] = Z[bit];     break;
         case '@': cracked[num] = at[bit];    break;
         case '?': cracked[num] = quest[bit]; break;
         default : cracked[num] = st[num];    break;
         }
      }
   cracked[bit] = '\0';
   printf("\n\tPassword: %s = %s\n\n",st,cracked);
}

int main(int argc, char **argv)
{
   int count = 1;

   if(argc > 1)
      {
      printf("\nPassWorm Cracker v 1.1, Copyright © 2001 Kalle Raisanen.\n");
      for(;count < argc; count ++)
         crack(argv[count]);
      }
   else
      {
      printf("Usage: %s password1 [password2] [password3] [...]\n",argv[0]);
      return 10;
      }
   return 0;
}
