Cryptology 429
- This is the crack program for the PPM proof of concept.*
- It uses an existing file called 4char.ppm, which *
- contains information regarding all possible 4– *
- character passwords salted with 'je'. This file can *
- be generated with the corresponding ppm_gen.c program. *
- *****/
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 16384
#define WIDTH 1129
#define DEPTH 8
#define SIZE HEIGHT WIDTH DEPTH
#define DCM HEIGHT * WIDTH
/ Map a single hash byte to an enumerated value. /
int enum_hashbyte(char a) {
int i, j;
i = (int)a;
if((i >= 46) && (i <= 57))
j = i - 46;
else if ((i >= 65) && (i <= 90))
j = i - 53;
else if ((i >= 97) && (i <= 122))
j = i - 59;
return j;
}
/ Map 3 hash bytes to an enumerated value. /
int enum_hashtriplet(char a, char b, char c) {
return (((enum_hashbyte(c)%4)4096)+(enum_hashbyte(a)64)+enum_hashbyte(b));
}
/ Merge two vectors. /
void merge(char vector1, char vector2) {
int i;
for(i=0; i < WIDTH; i++)
vector1[i] &= vector2[i];
}
/ Returns the bit in the vector at the passed index position /
int get_vector_bit(char *vector, int index) {
return ((vector[(index/8)]&(1<<(index%8)))>>(index%8));
}
/ Counts the number of plaintext pairs in the passed vector /
int count_vector_bits(char *vector) {
int i, count=0;
for(i=0; i < 9025; i++)
count += get_vector_bit(vector, i);
return count;