mirror of https://github.com/hashcat/hashcat.git
parent
5c5f3264dd
commit
1fc22dba03
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Author......: Jens Steube <jens.steube@gmail.com>
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#ifndef _BITMAP_H
|
||||
#define _BITMAP_H
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#define BITMAP_MIN 16
|
||||
#define BITMAP_MAX 24
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint bitmap_shift;
|
||||
uint collisions;
|
||||
|
||||
} bitmap_result_t;
|
||||
|
||||
int sort_by_bitmap (const void *s1, const void *s2);
|
||||
|
||||
uint generate_bitmaps (const uint digests_cnt, const uint dgst_size, const uint dgst_shifts, char *digests_buf_ptr, const uint dgst_pos0, const uint dgst_pos1, const uint dgst_pos2, const uint dgst_pos3, const uint bitmap_mask, const uint bitmap_size, uint *bitmap_a, uint *bitmap_b, uint *bitmap_c, uint *bitmap_d, const u64 collisions_max);
|
||||
|
||||
#endif // _BITMAP_H
|
@ -0,0 +1,57 @@
|
||||
/**
|
||||
* Authors.....: Jens Steube <jens.steube@gmail.com>
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "types_int.h"
|
||||
#include "bitmap.h"
|
||||
|
||||
int sort_by_bitmap (const void *p1, const void *p2)
|
||||
{
|
||||
const bitmap_result_t *b1 = (const bitmap_result_t *) p1;
|
||||
const bitmap_result_t *b2 = (const bitmap_result_t *) p2;
|
||||
|
||||
return b1->collisions - b2->collisions;
|
||||
}
|
||||
|
||||
uint generate_bitmaps (const uint digests_cnt, const uint dgst_size, const uint dgst_shifts, char *digests_buf_ptr, const uint dgst_pos0, const uint dgst_pos1, const uint dgst_pos2, const uint dgst_pos3, const uint bitmap_mask, const uint bitmap_size, uint *bitmap_a, uint *bitmap_b, uint *bitmap_c, uint *bitmap_d, const u64 collisions_max)
|
||||
{
|
||||
u64 collisions = 0;
|
||||
|
||||
memset (bitmap_a, 0, bitmap_size);
|
||||
memset (bitmap_b, 0, bitmap_size);
|
||||
memset (bitmap_c, 0, bitmap_size);
|
||||
memset (bitmap_d, 0, bitmap_size);
|
||||
|
||||
for (uint i = 0; i < digests_cnt; i++)
|
||||
{
|
||||
uint *digest_ptr = (uint *) digests_buf_ptr;
|
||||
|
||||
digests_buf_ptr += dgst_size;
|
||||
|
||||
const uint val0 = 1u << (digest_ptr[dgst_pos0] & 0x1f);
|
||||
const uint val1 = 1u << (digest_ptr[dgst_pos1] & 0x1f);
|
||||
const uint val2 = 1u << (digest_ptr[dgst_pos2] & 0x1f);
|
||||
const uint val3 = 1u << (digest_ptr[dgst_pos3] & 0x1f);
|
||||
|
||||
const uint idx0 = (digest_ptr[dgst_pos0] >> dgst_shifts) & bitmap_mask;
|
||||
const uint idx1 = (digest_ptr[dgst_pos1] >> dgst_shifts) & bitmap_mask;
|
||||
const uint idx2 = (digest_ptr[dgst_pos2] >> dgst_shifts) & bitmap_mask;
|
||||
const uint idx3 = (digest_ptr[dgst_pos3] >> dgst_shifts) & bitmap_mask;
|
||||
|
||||
if (bitmap_a[idx0] & val0) collisions++;
|
||||
if (bitmap_b[idx1] & val1) collisions++;
|
||||
if (bitmap_c[idx2] & val2) collisions++;
|
||||
if (bitmap_d[idx3] & val3) collisions++;
|
||||
|
||||
bitmap_a[idx0] |= val0;
|
||||
bitmap_b[idx1] |= val1;
|
||||
bitmap_c[idx2] |= val2;
|
||||
bitmap_d[idx3] |= val3;
|
||||
|
||||
if (collisions >= collisions_max) return 0x7fffffff;
|
||||
}
|
||||
|
||||
return collisions;
|
||||
}
|
Loading…
Reference in new issue