mirror of
https://github.com/hashcat/hashcat.git
synced 2025-01-09 15:20:59 +00:00
Merge branch 'master' into full-aes-gcm-and-hash-mode-27000
This commit is contained in:
commit
1ba1fa6e58
@ -12,14 +12,16 @@ environment:
|
||||
CYG_SETUP: setup-x86.exe
|
||||
BASH: C:\cygwin\bin\bash
|
||||
CC: gcc
|
||||
- MSYSTEM: MINGW64
|
||||
MSYS_CACHE: C:\msys64\var\cache\pacman\pkg
|
||||
BASH: C:\msys64\usr\bin\bash
|
||||
CC: gcc
|
||||
- MSYSTEM: MINGW32
|
||||
MSYS_CACHE: C:\msys64\var\cache\pacman\pkg
|
||||
BASH: C:\msys64\usr\bin\bash
|
||||
CC: gcc
|
||||
# Disable MINGW test. It seems AppVeyor is no longer supporting MSYS2. Not a hashcat problem.
|
||||
# See BUILD_MSYS2.md for local test
|
||||
#- MSYSTEM: MINGW64
|
||||
# MSYS_CACHE: C:\msys64\var\cache\pacman\pkg
|
||||
# BASH: C:\msys64\usr\bin\bash
|
||||
# CC: gcc
|
||||
#- MSYSTEM: MINGW32
|
||||
# MSYS_CACHE: C:\msys64\var\cache\pacman\pkg
|
||||
# BASH: C:\msys64\usr\bin\bash
|
||||
# CC: gcc
|
||||
|
||||
# if we have too many commits at the same time, we might need to download more than just the last commit for appveyor to succeed
|
||||
# otherwise we get the error: "fatal: reference is not a tree <commit>"
|
||||
@ -33,14 +35,15 @@ install:
|
||||
- ps: if (Test-Path Env:\CYG_ROOT) { Start-FileDownload "https://cygwin.com/$env:CYG_SETUP" -FileName "$env:CYG_SETUP" }
|
||||
- if defined CYG_ROOT (%CYG_SETUP% --quiet-mode --no-shortcuts --only-site --root "%CYG_ROOT%" --site "%CYG_MIRROR%" --local-package-dir "%CYG_CACHE%" --packages "%CYG_PACKAGES%" --upgrade-also)
|
||||
# (temporary?) problem with msys/pacman/objc/ada (see https://github.com/msys2/msys2/wiki/FAQ)
|
||||
- if defined MSYSTEM (%BASH% -lc "pacman -Rns --noconfirm mingw-w64-{i686,x86_64}-gcc-ada mingw-w64-{i686,x86_64}-gcc-objc")
|
||||
#- if defined MSYSTEM (%BASH% -lc "pacman -Rns --noconfirm mingw-w64-{i686,x86_64}-gcc-ada mingw-w64-{i686,x86_64}-gcc-objc")
|
||||
# temporary fix for MSYS revoked/new signing keys:
|
||||
- if defined MSYSTEM (%BASH% -lc "curl https://pastebin.com/raw/e0y4Ky9U | bash")
|
||||
- if defined MSYSTEM (%BASH% -lc "pacman -Suuy --noconfirm")
|
||||
#- if defined MSYSTEM (%BASH% -lc "curl https://pastebin.com/raw/e0y4Ky9U | bash")
|
||||
#- if defined MSYSTEM (%BASH% -lc "pacman -Suuy --noconfirm")
|
||||
# the following line is not a duplicate line:
|
||||
# it is necessary to upgrade the MSYS base files and after that all the packages
|
||||
# the 2 separate commands/lines are required because a new shell is necessary for each step
|
||||
- if defined MSYSTEM (%BASH% -lc "pacman -Suuy --noconfirm")
|
||||
#- if defined MSYSTEM (%BASH% -lc "pacman -Suuy --noconfirm")
|
||||
#- if defined MSYSTEM (%BASH% -lc "pacman -S --needed --noconfirm git make gcc libiconv-devel")
|
||||
|
||||
build_script:
|
||||
- if defined BASH (%BASH% -lc "cd $(cygpath ${APPVEYOR_BUILD_FOLDER}) && make")
|
||||
|
@ -2,13 +2,17 @@
|
||||
|
||||
Tested on Windows 10 x64, should also work to build hashcat for Windows on Linux.
|
||||
|
||||
I had it tested with WSL2 using Ubuntu_2004.2020.424.0_x64.appx.
|
||||
|
||||
Make sure to have the system upgraded after install (otherwise it will fail to find the gcc-mingw-w64-x86-64 package).
|
||||
|
||||
### Installation ###
|
||||
|
||||
Enable WSL.
|
||||
|
||||
Press the win + r key on your keyboard simultaneously and in the "Run" popup window type bash and make sure to install additional dependencies necessary for hashcat compilation
|
||||
```
|
||||
sudo apt install gcc-mingw-w64-x86-64 make git
|
||||
sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 make git
|
||||
git clone https://github.com/hashcat/hashcat
|
||||
git clone https://github.com/win-iconv/win-iconv
|
||||
cd win-iconv/
|
||||
|
@ -1730,14 +1730,16 @@ DECLSPEC void point_get_coords (secp256k1_t *r, const u32 *x, const u32 *y)
|
||||
r->xy[95] = neg[7];
|
||||
}
|
||||
|
||||
DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps)
|
||||
/*
|
||||
* Convert the tweak/scalar k to w-NAF (window size is 4).
|
||||
* @param naf out: w-NAF form of the tweak/scalar, a pointer to an u32 array with a size of 33.
|
||||
* @param k in: tweak/scalar which should be converted, a pointer to an u32 array with a size of 8.
|
||||
* @return Returns the loop start index.
|
||||
*/
|
||||
DECLSPEC int convert_to_window_naf (u32 *naf, const u32 *k)
|
||||
{
|
||||
/*
|
||||
* Convert the tweak/scalar k to w-NAF (window size is 4)
|
||||
*/
|
||||
|
||||
int loop_start = 0;
|
||||
u32 n[9];
|
||||
|
||||
n[0] = 0; // we need this extra slot sometimes for the subtraction to work
|
||||
n[1] = k[7];
|
||||
n[2] = k[6];
|
||||
@ -1748,10 +1750,6 @@ DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps
|
||||
n[7] = k[1];
|
||||
n[8] = k[0];
|
||||
|
||||
u32 naf[32 + 1] = { 0 }; // we need one extra slot
|
||||
|
||||
int loop_start = 0;
|
||||
|
||||
for (int i = 0; i <= 256; i++)
|
||||
{
|
||||
if (n[8] & 1)
|
||||
@ -1835,7 +1833,20 @@ DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps
|
||||
n[1] = n[1] >> 1 | n[0] << 31;
|
||||
n[0] = n[0] >> 1;
|
||||
}
|
||||
return loop_start;
|
||||
}
|
||||
|
||||
/*
|
||||
* @param x1 out: x coordinate, a pointer to an u32 array with a size of 8.
|
||||
* @param y1 out: y coordinate, a pointer to an u32 array with a size of 8.
|
||||
* @param k in: tweak/scalar which should be converted, a pointer to an u32 array with a size of 8.
|
||||
* @param tmps in: a basepoint for the multiplication.
|
||||
* @return Returns the x coordinate with a leading parity/sign (for odd/even y), it is named a compressed coordinate.
|
||||
*/
|
||||
DECLSPEC void point_mul_xy (u32 *x1, u32 *y1, const u32 *k, GLOBAL_AS const secp256k1_t *tmps)
|
||||
{
|
||||
u32 naf[SECP256K1_NAF_SIZE] = { 0 };
|
||||
int loop_start = convert_to_window_naf(naf, k);
|
||||
|
||||
// first set:
|
||||
|
||||
@ -1846,7 +1857,6 @@ DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps
|
||||
const u32 x_pos = ((multiplier - 1 + odd) >> 1) * 24;
|
||||
const u32 y_pos = odd ? (x_pos + 8) : (x_pos + 16);
|
||||
|
||||
u32 x1[8];
|
||||
|
||||
x1[0] = tmps->xy[x_pos + 0];
|
||||
x1[1] = tmps->xy[x_pos + 1];
|
||||
@ -1857,8 +1867,6 @@ DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps
|
||||
x1[6] = tmps->xy[x_pos + 6];
|
||||
x1[7] = tmps->xy[x_pos + 7];
|
||||
|
||||
u32 y1[8];
|
||||
|
||||
y1[0] = tmps->xy[y_pos + 0];
|
||||
y1[1] = tmps->xy[y_pos + 1];
|
||||
y1[2] = tmps->xy[y_pos + 2];
|
||||
@ -1966,51 +1974,51 @@ DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps
|
||||
mul_mod (z1, z2, z1); // z1^3
|
||||
mul_mod (y1, y1, z1); // y1_affine
|
||||
|
||||
// return values are already in x1 and y1
|
||||
}
|
||||
|
||||
/*
|
||||
* @param r out: x coordinate with leading parity/sign (for odd/even y), a pointer to an u32 array with a size of 9.
|
||||
* @param k in: tweak/scalar which should be converted, a pointer to an u32 array with a size of 8.
|
||||
* @param tmps in: a basepoint for the multiplication.
|
||||
* @return Returns the x coordinate with a leading parity/sign (for odd/even y), it is named a compressed coordinate.
|
||||
*/
|
||||
DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps)
|
||||
{
|
||||
u32 x[8];
|
||||
u32 y[8];
|
||||
point_mul_xy(x, y, k, tmps);
|
||||
|
||||
/*
|
||||
* output:
|
||||
*/
|
||||
|
||||
// shift by 1 byte (8 bits) to make room and add the parity/sign (for odd/even y):
|
||||
|
||||
r[8] = (x1[0] << 24);
|
||||
r[7] = (x1[0] >> 8) | (x1[1] << 24);
|
||||
r[6] = (x1[1] >> 8) | (x1[2] << 24);
|
||||
r[5] = (x1[2] >> 8) | (x1[3] << 24);
|
||||
r[4] = (x1[3] >> 8) | (x1[4] << 24);
|
||||
r[3] = (x1[4] >> 8) | (x1[5] << 24);
|
||||
r[2] = (x1[5] >> 8) | (x1[6] << 24);
|
||||
r[1] = (x1[6] >> 8) | (x1[7] << 24);
|
||||
r[0] = (x1[7] >> 8);
|
||||
r[8] = (x[0] << 24);
|
||||
r[7] = (x[0] >> 8) | (x[1] << 24);
|
||||
r[6] = (x[1] >> 8) | (x[2] << 24);
|
||||
r[5] = (x[2] >> 8) | (x[3] << 24);
|
||||
r[4] = (x[3] >> 8) | (x[4] << 24);
|
||||
r[3] = (x[4] >> 8) | (x[5] << 24);
|
||||
r[2] = (x[5] >> 8) | (x[6] << 24);
|
||||
r[1] = (x[6] >> 8) | (x[7] << 24);
|
||||
r[0] = (x[7] >> 8);
|
||||
|
||||
const u32 type = 0x02 | (y1[0] & 1); // (note: 0b10 | 0b01 = 0x03)
|
||||
const u32 type = 0x02 | (y[0] & 1); // (note: 0b10 | 0b01 = 0x03)
|
||||
|
||||
r[0] = r[0] | type << 24; // 0x02 or 0x03
|
||||
}
|
||||
|
||||
DECLSPEC u32 parse_public (secp256k1_t *r, const u32 *k)
|
||||
/*
|
||||
* Transform a x coordinate and separate parity to secp256k1_t.
|
||||
* @param r out: x and y coordinates.
|
||||
* @param x in: x coordinate which should be converted, a pointer to an u32 array with a size of 8.
|
||||
* @param first_byte in: The parity of the y coordinate, a u32.
|
||||
* @return Returns 0 if successfull, returns 1 if x is greater than the basepoint.
|
||||
*/
|
||||
DECLSPEC u32 transform_public (secp256k1_t *r, const u32 *x, const u32 first_byte)
|
||||
{
|
||||
// verify:
|
||||
|
||||
const u32 first_byte = k[0] & 0xff;
|
||||
|
||||
if ((first_byte != '\x02') && (first_byte != '\x03'))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
// load k into x without the first byte:
|
||||
|
||||
u32 x[8];
|
||||
|
||||
x[0] = (k[7] & 0xff00) << 16 | (k[7] & 0xff0000) | (k[7] & 0xff000000) >> 16 | (k[8] & 0xff);
|
||||
x[1] = (k[6] & 0xff00) << 16 | (k[6] & 0xff0000) | (k[6] & 0xff000000) >> 16 | (k[7] & 0xff);
|
||||
x[2] = (k[5] & 0xff00) << 16 | (k[5] & 0xff0000) | (k[5] & 0xff000000) >> 16 | (k[6] & 0xff);
|
||||
x[3] = (k[4] & 0xff00) << 16 | (k[4] & 0xff0000) | (k[4] & 0xff000000) >> 16 | (k[5] & 0xff);
|
||||
x[4] = (k[3] & 0xff00) << 16 | (k[3] & 0xff0000) | (k[3] & 0xff000000) >> 16 | (k[4] & 0xff);
|
||||
x[5] = (k[2] & 0xff00) << 16 | (k[2] & 0xff0000) | (k[2] & 0xff000000) >> 16 | (k[3] & 0xff);
|
||||
x[6] = (k[1] & 0xff00) << 16 | (k[1] & 0xff0000) | (k[1] & 0xff000000) >> 16 | (k[2] & 0xff);
|
||||
x[7] = (k[0] & 0xff00) << 16 | (k[0] & 0xff0000) | (k[0] & 0xff000000) >> 16 | (k[1] & 0xff);
|
||||
|
||||
u32 p[8];
|
||||
|
||||
p[0] = SECP256K1_P0;
|
||||
@ -2062,3 +2070,163 @@ DECLSPEC u32 parse_public (secp256k1_t *r, const u32 *k)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse a x coordinate with leading parity to secp256k1_t.
|
||||
* @param r out: x and y coordinates.
|
||||
* @param k in: x coordinate which should be converted with leading parity, a pointer to an u32 array with a size of 9.
|
||||
* @return Returns 0 if successfull, returns 1 if x is greater than the basepoint or the parity has an unexpected value.
|
||||
*/
|
||||
DECLSPEC u32 parse_public (secp256k1_t *r, const u32 *k)
|
||||
{
|
||||
// verify:
|
||||
|
||||
const u32 first_byte = k[0] & 0xff;
|
||||
|
||||
if ((first_byte != '\x02') && (first_byte != '\x03'))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
// load k into x without the first byte:
|
||||
|
||||
u32 x[8];
|
||||
|
||||
x[0] = (k[7] & 0xff00) << 16 | (k[7] & 0xff0000) | (k[7] & 0xff000000) >> 16 | (k[8] & 0xff);
|
||||
x[1] = (k[6] & 0xff00) << 16 | (k[6] & 0xff0000) | (k[6] & 0xff000000) >> 16 | (k[7] & 0xff);
|
||||
x[2] = (k[5] & 0xff00) << 16 | (k[5] & 0xff0000) | (k[5] & 0xff000000) >> 16 | (k[6] & 0xff);
|
||||
x[3] = (k[4] & 0xff00) << 16 | (k[4] & 0xff0000) | (k[4] & 0xff000000) >> 16 | (k[5] & 0xff);
|
||||
x[4] = (k[3] & 0xff00) << 16 | (k[3] & 0xff0000) | (k[3] & 0xff000000) >> 16 | (k[4] & 0xff);
|
||||
x[5] = (k[2] & 0xff00) << 16 | (k[2] & 0xff0000) | (k[2] & 0xff000000) >> 16 | (k[3] & 0xff);
|
||||
x[6] = (k[1] & 0xff00) << 16 | (k[1] & 0xff0000) | (k[1] & 0xff000000) >> 16 | (k[2] & 0xff);
|
||||
x[7] = (k[0] & 0xff00) << 16 | (k[0] & 0xff0000) | (k[0] & 0xff000000) >> 16 | (k[1] & 0xff);
|
||||
|
||||
return transform_public(r, x, first_byte);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Set precomputed values of the basepoint g to a secp256k1 structure.
|
||||
* @param r out: x and y coordinates. pre-computed points: (x1,y1,-y1),(x3,y3,-y3),(x5,y5,-y5),(x7,y7,-y7)
|
||||
*/
|
||||
DECLSPEC void set_precomputed_basepoint_g (secp256k1_t *r) {
|
||||
// x1
|
||||
r->xy[ 0] = SECP256K1_G_PRE_COMPUTED_00;
|
||||
r->xy[ 1] = SECP256K1_G_PRE_COMPUTED_01;
|
||||
r->xy[ 2] = SECP256K1_G_PRE_COMPUTED_02;
|
||||
r->xy[ 3] = SECP256K1_G_PRE_COMPUTED_03;
|
||||
r->xy[ 4] = SECP256K1_G_PRE_COMPUTED_04;
|
||||
r->xy[ 5] = SECP256K1_G_PRE_COMPUTED_05;
|
||||
r->xy[ 6] = SECP256K1_G_PRE_COMPUTED_06;
|
||||
r->xy[ 7] = SECP256K1_G_PRE_COMPUTED_07;
|
||||
|
||||
// y1
|
||||
r->xy[ 8] = SECP256K1_G_PRE_COMPUTED_08;
|
||||
r->xy[ 9] = SECP256K1_G_PRE_COMPUTED_09;
|
||||
r->xy[10] = SECP256K1_G_PRE_COMPUTED_10;
|
||||
r->xy[11] = SECP256K1_G_PRE_COMPUTED_11;
|
||||
r->xy[12] = SECP256K1_G_PRE_COMPUTED_12;
|
||||
r->xy[13] = SECP256K1_G_PRE_COMPUTED_13;
|
||||
r->xy[14] = SECP256K1_G_PRE_COMPUTED_14;
|
||||
r->xy[15] = SECP256K1_G_PRE_COMPUTED_15;
|
||||
|
||||
// -y1
|
||||
r->xy[16] = SECP256K1_G_PRE_COMPUTED_16;
|
||||
r->xy[17] = SECP256K1_G_PRE_COMPUTED_17;
|
||||
r->xy[18] = SECP256K1_G_PRE_COMPUTED_18;
|
||||
r->xy[19] = SECP256K1_G_PRE_COMPUTED_19;
|
||||
r->xy[20] = SECP256K1_G_PRE_COMPUTED_20;
|
||||
r->xy[21] = SECP256K1_G_PRE_COMPUTED_21;
|
||||
r->xy[22] = SECP256K1_G_PRE_COMPUTED_22;
|
||||
r->xy[23] = SECP256K1_G_PRE_COMPUTED_23;
|
||||
|
||||
// x3
|
||||
r->xy[24] = SECP256K1_G_PRE_COMPUTED_24;
|
||||
r->xy[25] = SECP256K1_G_PRE_COMPUTED_25;
|
||||
r->xy[26] = SECP256K1_G_PRE_COMPUTED_26;
|
||||
r->xy[27] = SECP256K1_G_PRE_COMPUTED_27;
|
||||
r->xy[28] = SECP256K1_G_PRE_COMPUTED_28;
|
||||
r->xy[29] = SECP256K1_G_PRE_COMPUTED_29;
|
||||
r->xy[30] = SECP256K1_G_PRE_COMPUTED_30;
|
||||
r->xy[31] = SECP256K1_G_PRE_COMPUTED_31;
|
||||
|
||||
// y3
|
||||
r->xy[32] = SECP256K1_G_PRE_COMPUTED_32;
|
||||
r->xy[33] = SECP256K1_G_PRE_COMPUTED_33;
|
||||
r->xy[34] = SECP256K1_G_PRE_COMPUTED_34;
|
||||
r->xy[35] = SECP256K1_G_PRE_COMPUTED_35;
|
||||
r->xy[36] = SECP256K1_G_PRE_COMPUTED_36;
|
||||
r->xy[37] = SECP256K1_G_PRE_COMPUTED_37;
|
||||
r->xy[38] = SECP256K1_G_PRE_COMPUTED_38;
|
||||
r->xy[39] = SECP256K1_G_PRE_COMPUTED_39;
|
||||
|
||||
// -y3
|
||||
r->xy[40] = SECP256K1_G_PRE_COMPUTED_40;
|
||||
r->xy[41] = SECP256K1_G_PRE_COMPUTED_41;
|
||||
r->xy[42] = SECP256K1_G_PRE_COMPUTED_42;
|
||||
r->xy[43] = SECP256K1_G_PRE_COMPUTED_43;
|
||||
r->xy[44] = SECP256K1_G_PRE_COMPUTED_44;
|
||||
r->xy[45] = SECP256K1_G_PRE_COMPUTED_45;
|
||||
r->xy[46] = SECP256K1_G_PRE_COMPUTED_46;
|
||||
r->xy[47] = SECP256K1_G_PRE_COMPUTED_47;
|
||||
|
||||
// x5
|
||||
r->xy[48] = SECP256K1_G_PRE_COMPUTED_48;
|
||||
r->xy[49] = SECP256K1_G_PRE_COMPUTED_49;
|
||||
r->xy[50] = SECP256K1_G_PRE_COMPUTED_50;
|
||||
r->xy[51] = SECP256K1_G_PRE_COMPUTED_51;
|
||||
r->xy[52] = SECP256K1_G_PRE_COMPUTED_52;
|
||||
r->xy[53] = SECP256K1_G_PRE_COMPUTED_53;
|
||||
r->xy[54] = SECP256K1_G_PRE_COMPUTED_54;
|
||||
r->xy[55] = SECP256K1_G_PRE_COMPUTED_55;
|
||||
|
||||
// y5
|
||||
r->xy[56] = SECP256K1_G_PRE_COMPUTED_56;
|
||||
r->xy[57] = SECP256K1_G_PRE_COMPUTED_57;
|
||||
r->xy[58] = SECP256K1_G_PRE_COMPUTED_58;
|
||||
r->xy[59] = SECP256K1_G_PRE_COMPUTED_59;
|
||||
r->xy[60] = SECP256K1_G_PRE_COMPUTED_60;
|
||||
r->xy[61] = SECP256K1_G_PRE_COMPUTED_61;
|
||||
r->xy[62] = SECP256K1_G_PRE_COMPUTED_62;
|
||||
r->xy[63] = SECP256K1_G_PRE_COMPUTED_63;
|
||||
|
||||
// -y5
|
||||
r->xy[64] = SECP256K1_G_PRE_COMPUTED_64;
|
||||
r->xy[65] = SECP256K1_G_PRE_COMPUTED_65;
|
||||
r->xy[66] = SECP256K1_G_PRE_COMPUTED_66;
|
||||
r->xy[67] = SECP256K1_G_PRE_COMPUTED_67;
|
||||
r->xy[68] = SECP256K1_G_PRE_COMPUTED_68;
|
||||
r->xy[69] = SECP256K1_G_PRE_COMPUTED_69;
|
||||
r->xy[70] = SECP256K1_G_PRE_COMPUTED_70;
|
||||
r->xy[71] = SECP256K1_G_PRE_COMPUTED_71;
|
||||
|
||||
// x7
|
||||
r->xy[72] = SECP256K1_G_PRE_COMPUTED_72;
|
||||
r->xy[73] = SECP256K1_G_PRE_COMPUTED_73;
|
||||
r->xy[74] = SECP256K1_G_PRE_COMPUTED_74;
|
||||
r->xy[75] = SECP256K1_G_PRE_COMPUTED_75;
|
||||
r->xy[76] = SECP256K1_G_PRE_COMPUTED_76;
|
||||
r->xy[77] = SECP256K1_G_PRE_COMPUTED_77;
|
||||
r->xy[78] = SECP256K1_G_PRE_COMPUTED_78;
|
||||
r->xy[79] = SECP256K1_G_PRE_COMPUTED_79;
|
||||
|
||||
// y7
|
||||
r->xy[80] = SECP256K1_G_PRE_COMPUTED_80;
|
||||
r->xy[81] = SECP256K1_G_PRE_COMPUTED_81;
|
||||
r->xy[82] = SECP256K1_G_PRE_COMPUTED_82;
|
||||
r->xy[83] = SECP256K1_G_PRE_COMPUTED_83;
|
||||
r->xy[84] = SECP256K1_G_PRE_COMPUTED_84;
|
||||
r->xy[85] = SECP256K1_G_PRE_COMPUTED_85;
|
||||
r->xy[86] = SECP256K1_G_PRE_COMPUTED_86;
|
||||
r->xy[87] = SECP256K1_G_PRE_COMPUTED_87;
|
||||
|
||||
// -y7
|
||||
r->xy[88] = SECP256K1_G_PRE_COMPUTED_88;
|
||||
r->xy[89] = SECP256K1_G_PRE_COMPUTED_89;
|
||||
r->xy[90] = SECP256K1_G_PRE_COMPUTED_90;
|
||||
r->xy[91] = SECP256K1_G_PRE_COMPUTED_91;
|
||||
r->xy[92] = SECP256K1_G_PRE_COMPUTED_92;
|
||||
r->xy[93] = SECP256K1_G_PRE_COMPUTED_93;
|
||||
r->xy[94] = SECP256K1_G_PRE_COMPUTED_94;
|
||||
r->xy[95] = SECP256K1_G_PRE_COMPUTED_95;
|
||||
}
|
||||
|
@ -10,6 +10,8 @@
|
||||
|
||||
#define SECP256K1_B 7
|
||||
|
||||
// finite field Fp
|
||||
// p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
|
||||
#define SECP256K1_P0 0xfffffc2f
|
||||
#define SECP256K1_P1 0xfffffffe
|
||||
#define SECP256K1_P2 0xffffffff
|
||||
@ -19,6 +21,8 @@
|
||||
#define SECP256K1_P6 0xffffffff
|
||||
#define SECP256K1_P7 0xffffffff
|
||||
|
||||
// prime order N
|
||||
// n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
|
||||
#define SECP256K1_N0 0xd0364141
|
||||
#define SECP256K1_N1 0xbfd25e8c
|
||||
#define SECP256K1_N2 0xaf48a03b
|
||||
@ -28,14 +32,194 @@
|
||||
#define SECP256K1_N6 0xffffffff
|
||||
#define SECP256K1_N7 0xffffffff
|
||||
|
||||
// the base point G in compressed form for transform_public
|
||||
// G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
|
||||
#define SECP256K1_G_PARITY 0x00000002
|
||||
#define SECP256K1_G0 0x16f81798
|
||||
#define SECP256K1_G1 0x59f2815b
|
||||
#define SECP256K1_G2 0x2dce28d9
|
||||
#define SECP256K1_G3 0x029bfcdb
|
||||
#define SECP256K1_G4 0xce870b07
|
||||
#define SECP256K1_G5 0x55a06295
|
||||
#define SECP256K1_G6 0xf9dcbbac
|
||||
#define SECP256K1_G7 0x79be667e
|
||||
|
||||
// the base point G in compressed form for parse_public
|
||||
// parity and reversed byte/char (8 bit) byte order
|
||||
// G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
|
||||
#define SECP256K1_G_STRING0 0x66be7902
|
||||
#define SECP256K1_G_STRING1 0xbbdcf97e
|
||||
#define SECP256K1_G_STRING2 0x62a055ac
|
||||
#define SECP256K1_G_STRING3 0x0b87ce95
|
||||
#define SECP256K1_G_STRING4 0xfc9b0207
|
||||
#define SECP256K1_G_STRING5 0x28ce2ddb
|
||||
#define SECP256K1_G_STRING6 0x81f259d9
|
||||
#define SECP256K1_G_STRING7 0x17f8165b
|
||||
#define SECP256K1_G_STRING8 0x00000098
|
||||
|
||||
// pre computed values, can be verified using private keys for
|
||||
// x1 is the same as the basepoint g
|
||||
// x1 WIF: KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn
|
||||
// x3 WIF: KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU74sHUHy8S
|
||||
// x5 WIF: KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU75s2EPgZf
|
||||
// x7 WIF: KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU76rnZwVdz
|
||||
|
||||
// x1: 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
|
||||
// x1: 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
|
||||
#define SECP256K1_G_PRE_COMPUTED_00 0x16f81798
|
||||
#define SECP256K1_G_PRE_COMPUTED_01 0x59f2815b
|
||||
#define SECP256K1_G_PRE_COMPUTED_02 0x2dce28d9
|
||||
#define SECP256K1_G_PRE_COMPUTED_03 0x029bfcdb
|
||||
#define SECP256K1_G_PRE_COMPUTED_04 0xce870b07
|
||||
#define SECP256K1_G_PRE_COMPUTED_05 0x55a06295
|
||||
#define SECP256K1_G_PRE_COMPUTED_06 0xf9dcbbac
|
||||
#define SECP256K1_G_PRE_COMPUTED_07 0x79be667e
|
||||
|
||||
// y1: 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
|
||||
// y1: 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
|
||||
#define SECP256K1_G_PRE_COMPUTED_08 0xfb10d4b8
|
||||
#define SECP256K1_G_PRE_COMPUTED_09 0x9c47d08f
|
||||
#define SECP256K1_G_PRE_COMPUTED_10 0xa6855419
|
||||
#define SECP256K1_G_PRE_COMPUTED_11 0xfd17b448
|
||||
#define SECP256K1_G_PRE_COMPUTED_12 0x0e1108a8
|
||||
#define SECP256K1_G_PRE_COMPUTED_13 0x5da4fbfc
|
||||
#define SECP256K1_G_PRE_COMPUTED_14 0x26a3c465
|
||||
#define SECP256K1_G_PRE_COMPUTED_15 0x483ada77
|
||||
|
||||
// -y1: B7C52588 D95C3B9A A25B0403 F1EEF757 02E84BB7 597AABE6 63B82F6F 04EF2777
|
||||
// -y1: B7C52588D95C3B9AA25B0403F1EEF75702E84BB7597AABE663B82F6F04EF2777
|
||||
#define SECP256K1_G_PRE_COMPUTED_16 0x04ef2777
|
||||
#define SECP256K1_G_PRE_COMPUTED_17 0x63b82f6f
|
||||
#define SECP256K1_G_PRE_COMPUTED_18 0x597aabe6
|
||||
#define SECP256K1_G_PRE_COMPUTED_19 0x02e84bb7
|
||||
#define SECP256K1_G_PRE_COMPUTED_20 0xf1eef757
|
||||
#define SECP256K1_G_PRE_COMPUTED_21 0xa25b0403
|
||||
#define SECP256K1_G_PRE_COMPUTED_22 0xd95c3b9a
|
||||
#define SECP256K1_G_PRE_COMPUTED_23 0xb7c52588
|
||||
|
||||
// x3: F9308A01 9258C310 49344F85 F89D5229 B531C845 836F99B0 8601F113 BCE036F9
|
||||
// x3: F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9
|
||||
#define SECP256K1_G_PRE_COMPUTED_24 0xbce036f9
|
||||
#define SECP256K1_G_PRE_COMPUTED_25 0x8601f113
|
||||
#define SECP256K1_G_PRE_COMPUTED_26 0x836f99b0
|
||||
#define SECP256K1_G_PRE_COMPUTED_27 0xb531c845
|
||||
#define SECP256K1_G_PRE_COMPUTED_28 0xf89d5229
|
||||
#define SECP256K1_G_PRE_COMPUTED_29 0x49344f85
|
||||
#define SECP256K1_G_PRE_COMPUTED_30 0x9258c310
|
||||
#define SECP256K1_G_PRE_COMPUTED_31 0xf9308a01
|
||||
|
||||
// y3: 388F7B0F 632DE814 0FE337E6 2A37F356 6500A999 34C2231B 6CB9FD75 84B8E672
|
||||
// y3: 388F7B0F632DE8140FE337E62A37F3566500A99934C2231B6CB9FD7584B8E672
|
||||
#define SECP256K1_G_PRE_COMPUTED_32 0x84b8e672
|
||||
#define SECP256K1_G_PRE_COMPUTED_33 0x6cb9fd75
|
||||
#define SECP256K1_G_PRE_COMPUTED_34 0x34c2231b
|
||||
#define SECP256K1_G_PRE_COMPUTED_35 0x6500a999
|
||||
#define SECP256K1_G_PRE_COMPUTED_36 0x2a37f356
|
||||
#define SECP256K1_G_PRE_COMPUTED_37 0x0fe337e6
|
||||
#define SECP256K1_G_PRE_COMPUTED_38 0x632de814
|
||||
#define SECP256K1_G_PRE_COMPUTED_39 0x388f7b0f
|
||||
|
||||
// -y3: C77084F0 9CD217EB F01CC819 D5C80CA9 9AFF5666 CB3DDCE4 93460289 7B4715BD
|
||||
// -y3: C77084F09CD217EBF01CC819D5C80CA99AFF5666CB3DDCE4934602897B4715BD
|
||||
#define SECP256K1_G_PRE_COMPUTED_40 0x7b4715bd
|
||||
#define SECP256K1_G_PRE_COMPUTED_41 0x93460289
|
||||
#define SECP256K1_G_PRE_COMPUTED_42 0xcb3ddce4
|
||||
#define SECP256K1_G_PRE_COMPUTED_43 0x9aff5666
|
||||
#define SECP256K1_G_PRE_COMPUTED_44 0xd5c80ca9
|
||||
#define SECP256K1_G_PRE_COMPUTED_45 0xf01cc819
|
||||
#define SECP256K1_G_PRE_COMPUTED_46 0x9cd217eb
|
||||
#define SECP256K1_G_PRE_COMPUTED_47 0xc77084f0
|
||||
|
||||
// x5: 2F8BDE4D 1A072093 55B4A725 0A5C5128 E88B84BD DC619AB7 CBA8D569 B240EFE4
|
||||
// x5: 2F8BDE4D1A07209355B4A7250A5C5128E88B84BDDC619AB7CBA8D569B240EFE4
|
||||
#define SECP256K1_G_PRE_COMPUTED_48 0xb240efe4
|
||||
#define SECP256K1_G_PRE_COMPUTED_49 0xcba8d569
|
||||
#define SECP256K1_G_PRE_COMPUTED_50 0xdc619ab7
|
||||
#define SECP256K1_G_PRE_COMPUTED_51 0xe88b84bd
|
||||
#define SECP256K1_G_PRE_COMPUTED_52 0x0a5c5128
|
||||
#define SECP256K1_G_PRE_COMPUTED_53 0x55b4a725
|
||||
#define SECP256K1_G_PRE_COMPUTED_54 0x1a072093
|
||||
#define SECP256K1_G_PRE_COMPUTED_55 0x2f8bde4d
|
||||
|
||||
// y5: D8AC2226 36E5E3D6 D4DBA9DD A6C9C426 F788271B AB0D6840 DCA87D3A A6AC62D6
|
||||
// y5: D8AC222636E5E3D6D4DBA9DDA6C9C426F788271BAB0D6840DCA87D3AA6AC62D6
|
||||
#define SECP256K1_G_PRE_COMPUTED_56 0xa6ac62d6
|
||||
#define SECP256K1_G_PRE_COMPUTED_57 0xdca87d3a
|
||||
#define SECP256K1_G_PRE_COMPUTED_58 0xab0d6840
|
||||
#define SECP256K1_G_PRE_COMPUTED_59 0xf788271b
|
||||
#define SECP256K1_G_PRE_COMPUTED_60 0xa6c9c426
|
||||
#define SECP256K1_G_PRE_COMPUTED_61 0xd4dba9dd
|
||||
#define SECP256K1_G_PRE_COMPUTED_62 0x36e5e3d6
|
||||
#define SECP256K1_G_PRE_COMPUTED_63 0xd8ac2226
|
||||
|
||||
// -y5: 2753DDD9 C91A1C29 2B245622 59363BD9 0877D8E4 54F297BF 235782C4 59539959
|
||||
// -y5: 2753DDD9C91A1C292B24562259363BD90877D8E454F297BF235782C459539959
|
||||
#define SECP256K1_G_PRE_COMPUTED_64 0x59539959
|
||||
#define SECP256K1_G_PRE_COMPUTED_65 0x235782c4
|
||||
#define SECP256K1_G_PRE_COMPUTED_66 0x54f297bf
|
||||
#define SECP256K1_G_PRE_COMPUTED_67 0x0877d8e4
|
||||
#define SECP256K1_G_PRE_COMPUTED_68 0x59363bd9
|
||||
#define SECP256K1_G_PRE_COMPUTED_69 0x2b245622
|
||||
#define SECP256K1_G_PRE_COMPUTED_70 0xc91a1c29
|
||||
#define SECP256K1_G_PRE_COMPUTED_71 0x2753ddd9
|
||||
|
||||
// x7: 5CBDF064 6E5DB4EA A398F365 F2EA7A0E 3D419B7E 0330E39C E92BDDED CAC4F9BC
|
||||
// x7: 5CBDF0646E5DB4EAA398F365F2EA7A0E3D419B7E0330E39CE92BDDEDCAC4F9BC
|
||||
#define SECP256K1_G_PRE_COMPUTED_72 0xcac4f9bc
|
||||
#define SECP256K1_G_PRE_COMPUTED_73 0xe92bdded
|
||||
#define SECP256K1_G_PRE_COMPUTED_74 0x0330e39c
|
||||
#define SECP256K1_G_PRE_COMPUTED_75 0x3d419b7e
|
||||
#define SECP256K1_G_PRE_COMPUTED_76 0xf2ea7a0e
|
||||
#define SECP256K1_G_PRE_COMPUTED_77 0xa398f365
|
||||
#define SECP256K1_G_PRE_COMPUTED_78 0x6e5db4ea
|
||||
#define SECP256K1_G_PRE_COMPUTED_79 0x5cbdf064
|
||||
|
||||
// y7: 6AEBCA40 BA255960 A3178D6D 861A54DB A813D0B8 13FDE7B5 A5082628 087264DA
|
||||
// y7: 6AEBCA40BA255960A3178D6D861A54DBA813D0B813FDE7B5A5082628087264DA
|
||||
#define SECP256K1_G_PRE_COMPUTED_80 0x087264da
|
||||
#define SECP256K1_G_PRE_COMPUTED_81 0xa5082628
|
||||
#define SECP256K1_G_PRE_COMPUTED_82 0x13fde7b5
|
||||
#define SECP256K1_G_PRE_COMPUTED_83 0xa813d0b8
|
||||
#define SECP256K1_G_PRE_COMPUTED_84 0x861a54db
|
||||
#define SECP256K1_G_PRE_COMPUTED_85 0xa3178d6d
|
||||
#define SECP256K1_G_PRE_COMPUTED_86 0xba255960
|
||||
#define SECP256K1_G_PRE_COMPUTED_87 0x6aebca40
|
||||
|
||||
// -y7: 951435BF 45DAA69F 5CE87292 79E5AB24 57EC2F47 EC02184A 5AF7D9D6 F78D9755
|
||||
// -y7: 951435BF45DAA69F5CE8729279E5AB2457EC2F47EC02184A5AF7D9D6F78D9755
|
||||
#define SECP256K1_G_PRE_COMPUTED_88 0xf78d9755
|
||||
#define SECP256K1_G_PRE_COMPUTED_89 0x5af7d9d6
|
||||
#define SECP256K1_G_PRE_COMPUTED_90 0xec02184a
|
||||
#define SECP256K1_G_PRE_COMPUTED_91 0x57ec2f47
|
||||
#define SECP256K1_G_PRE_COMPUTED_92 0x79e5ab24
|
||||
#define SECP256K1_G_PRE_COMPUTED_93 0x5ce87292
|
||||
#define SECP256K1_G_PRE_COMPUTED_94 0x45daa69f
|
||||
#define SECP256K1_G_PRE_COMPUTED_95 0x951435bf
|
||||
|
||||
#define SECP256K1_PRE_COMPUTED_XY_SIZE 96
|
||||
#define SECP256K1_NAF_SIZE 33 // 32+1, we need one extra slot
|
||||
|
||||
#define PUBLIC_KEY_LENGTH_WITHOUT_PARITY 8
|
||||
#define PUBLIC_KEY_LENGTH_X_Y_WITHOUT_PARITY 16
|
||||
// 8+1 to make room for the parity
|
||||
#define PUBLIC_KEY_LENGTH_WITH_PARITY 9
|
||||
|
||||
// (32*8 == 256)
|
||||
#define PRIVATE_KEY_LENGTH 8
|
||||
|
||||
typedef struct secp256k1
|
||||
{
|
||||
u32 xy[96]; // pre-computed points: (x1,y1,-y1),(x3,y3,-y3),(x5,y5,-y5),(x7,y7,-y7)
|
||||
u32 xy[SECP256K1_PRE_COMPUTED_XY_SIZE]; // pre-computed points: (x1,y1,-y1),(x3,y3,-y3),(x5,y5,-y5),(x7,y7,-y7)
|
||||
|
||||
} secp256k1_t;
|
||||
|
||||
|
||||
DECLSPEC u32 transform_public (secp256k1_t *r, const u32 *x, const u32 first_byte);
|
||||
DECLSPEC u32 parse_public (secp256k1_t *r, const u32 *k);
|
||||
|
||||
DECLSPEC void point_mul_xy (u32 *x1, u32 *y1, const u32 *k, GLOBAL_AS const secp256k1_t *tmps);
|
||||
DECLSPEC void point_mul (u32 *r, const u32 *k, GLOBAL_AS const secp256k1_t *tmps);
|
||||
|
||||
DECLSPEC void set_precomputed_basepoint_g (secp256k1_t *r);
|
||||
|
||||
#endif // _INC_ECC_SECP256K1_H
|
||||
|
@ -171,6 +171,9 @@ inline __device__ u32x operator - (const u32x a, const u32x b) { return u32x ((
|
||||
inline __device__ u32x operator * (const u32x a, const u32 b) { return u32x ((a.s0 * b), (a.s1 * b) ); }
|
||||
inline __device__ u32x operator * (const u32x a, const u32x b) { return u32x ((a.s0 * b.s0), (a.s1 * b.s1)); }
|
||||
|
||||
inline __device__ u32x operator % (const u32x a, const u32 b) { return u32x ((a.s0 % b), (a.s1 % b) ); }
|
||||
inline __device__ u32x operator % (const u32x a, const u32x b) { return u32x ((a.s0 % b.s0), (a.s1 % b.s1)); }
|
||||
|
||||
inline __device__ u32x operator ~ (const u32x a) { return u32x (~a.s0, ~a.s1); }
|
||||
|
||||
inline __device__ bool operator != (const u64x a, const u64 b) { return ((a.s0 != b) && (a.s1 != b)); }
|
||||
@ -224,6 +227,9 @@ inline __device__ u64x operator - (const u64x a, const u64x b) { return u64x ((
|
||||
inline __device__ u64x operator * (const u64x a, const u64 b) { return u64x ((a.s0 * b), (a.s1 * b) ); }
|
||||
inline __device__ u64x operator * (const u64x a, const u64x b) { return u64x ((a.s0 * b.s0), (a.s1 * b.s1)); }
|
||||
|
||||
inline __device__ u64x operator % (const u64x a, const u64 b) { return u64x ((a.s0 % b), (a.s1 % b) ); }
|
||||
inline __device__ u64x operator % (const u64x a, const u64x b) { return u64x ((a.s0 % b.s0), (a.s1 % b.s1)); }
|
||||
|
||||
inline __device__ u64x operator ~ (const u64x a) { return u64x (~a.s0, ~a.s1); }
|
||||
|
||||
#endif
|
||||
@ -337,6 +343,9 @@ inline __device__ u32x operator - (const u32x a, const u32x b) { return u32x ((
|
||||
inline __device__ u32x operator * (const u32x a, const u32 b) { return u32x ((a.s0 * b), (a.s1 * b) , (a.s2 * b), (a.s3 * b) ); }
|
||||
inline __device__ u32x operator * (const u32x a, const u32x b) { return u32x ((a.s0 * b.s0), (a.s1 * b.s1), (a.s2 * b.s2), (a.s3 * b.s3)); }
|
||||
|
||||
inline __device__ u32x operator % (const u32x a, const u32 b) { return u32x ((a.s0 % b), (a.s1 % b) , (a.s2 % b), (a.s3 % b) ); }
|
||||
inline __device__ u32x operator % (const u32x a, const u32x b) { return u32x ((a.s0 % b.s0), (a.s1 % b.s1), (a.s2 % b.s2), (a.s3 % b.s3)); }
|
||||
|
||||
inline __device__ u32x operator ~ (const u32x a) { return u32x (~a.s0, ~a.s1, ~a.s2, ~a.s3); }
|
||||
|
||||
inline __device__ bool operator != (const u64x a, const u64 b) { return ((a.s0 != b) && (a.s1 != b) && (a.s2 != b) && (a.s3 != b) ); }
|
||||
@ -390,6 +399,9 @@ inline __device__ u64x operator - (const u64x a, const u64x b) { return u64x ((
|
||||
inline __device__ u64x operator * (const u64x a, const u64 b) { return u64x ((a.s0 * b), (a.s1 * b) , (a.s2 * b), (a.s3 * b) ); }
|
||||
inline __device__ u64x operator * (const u64x a, const u64x b) { return u64x ((a.s0 * b.s0), (a.s1 * b.s1), (a.s2 * b.s2), (a.s3 * b.s3)); }
|
||||
|
||||
inline __device__ u64x operator % (const u64x a, const u32 b) { return u64x ((a.s0 % b), (a.s1 % b) , (a.s2 % b), (a.s3 % b) ); }
|
||||
inline __device__ u64x operator % (const u64x a, const u64x b) { return u64x ((a.s0 % b.s0), (a.s1 % b.s1), (a.s2 % b.s2), (a.s3 % b.s3)); }
|
||||
|
||||
inline __device__ u64x operator ~ (const u64x a) { return u64x (~a.s0, ~a.s1, ~a.s2, ~a.s3); }
|
||||
|
||||
#endif
|
||||
@ -519,6 +531,9 @@ inline __device__ u32x operator - (const u32x a, const u32x b) { return u32x ((
|
||||
inline __device__ u32x operator * (const u32x a, const u32 b) { return u32x ((a.s0 * b), (a.s1 * b) , (a.s2 * b), (a.s3 * b) , (a.s4 * b), (a.s5 * b) , (a.s6 * b), (a.s7 * b) ); }
|
||||
inline __device__ u32x operator * (const u32x a, const u32x b) { return u32x ((a.s0 * b.s0), (a.s1 * b.s1), (a.s2 * b.s2), (a.s3 * b.s3), (a.s4 * b.s4), (a.s5 * b.s5), (a.s6 * b.s6), (a.s7 * b.s7)); }
|
||||
|
||||
inline __device__ u32x operator % (const u32x a, const u32 b) { return u32x ((a.s0 % b), (a.s1 % b) , (a.s2 % b), (a.s3 % b) , (a.s4 % b), (a.s5 % b) , (a.s6 % b), (a.s7 % b) ); }
|
||||
inline __device__ u32x operator % (const u32x a, const u32x b) { return u32x ((a.s0 % b.s0), (a.s1 % b.s1), (a.s2 % b.s2), (a.s3 % b.s3), (a.s4 % b.s4), (a.s5 % b.s5), (a.s6 % b.s6), (a.s7 % b.s7)); }
|
||||
|
||||
inline __device__ u32x operator ~ (const u32x a) { return u32x (~a.s0, ~a.s1, ~a.s2, ~a.s3, ~a.s4, ~a.s5, ~a.s6, ~a.s7); }
|
||||
|
||||
inline __device__ bool operator != (const u64x a, const u64 b) { return ((a.s0 != b) && (a.s1 != b) && (a.s2 != b) && (a.s3 != b) && (a.s4 != b) && (a.s5 != b) && (a.s6 != b) && (a.s7 != b) ); }
|
||||
@ -572,6 +587,9 @@ inline __device__ u64x operator - (const u64x a, const u64x b) { return u64x ((
|
||||
inline __device__ u64x operator * (const u64x a, const u64 b) { return u64x ((a.s0 * b), (a.s1 * b) , (a.s2 * b), (a.s3 * b) , (a.s4 * b), (a.s5 * b) , (a.s6 * b), (a.s7 * b) ); }
|
||||
inline __device__ u64x operator * (const u64x a, const u64x b) { return u64x ((a.s0 * b.s0), (a.s1 * b.s1), (a.s2 * b.s2), (a.s3 * b.s3), (a.s4 * b.s4), (a.s5 * b.s5), (a.s6 * b.s6), (a.s7 * b.s7)); }
|
||||
|
||||
inline __device__ u64x operator % (const u64x a, const u64 b) { return u64x ((a.s0 % b), (a.s1 % b) , (a.s2 % b), (a.s3 % b) , (a.s4 % b), (a.s5 % b) , (a.s6 % b), (a.s7 % b) ); }
|
||||
inline __device__ u64x operator % (const u64x a, const u64x b) { return u64x ((a.s0 % b.s0), (a.s1 % b.s1), (a.s2 % b.s2), (a.s3 % b.s3), (a.s4 % b.s4), (a.s5 % b.s5), (a.s6 % b.s6), (a.s7 % b.s7)); }
|
||||
|
||||
inline __device__ u64x operator ~ (const u64x a) { return u64x (~a.s0, ~a.s1, ~a.s2, ~a.s3, ~a.s4, ~a.s5, ~a.s6, ~a.s7); }
|
||||
|
||||
#endif
|
||||
@ -733,6 +751,9 @@ inline __device__ u32x operator - (const u32x a, const u32x b) { return u32x ((
|
||||
inline __device__ u32x operator * (const u32x a, const u32 b) { return u32x ((a.s0 * b), (a.s1 * b) , (a.s2 * b), (a.s3 * b) , (a.s4 * b), (a.s5 * b) , (a.s6 * b), (a.s7 * b), (a.s8 * b), (a.s9 * b) , (a.sa * b), (a.sb * b) , (a.sc * b), (a.sd * b) , (a.se * b), (a.sf * b) ); }
|
||||
inline __device__ u32x operator * (const u32x a, const u32x b) { return u32x ((a.s0 * b.s0), (a.s1 * b.s1), (a.s2 * b.s2), (a.s3 * b.s3), (a.s4 * b.s4), (a.s5 * b.s5), (a.s6 * b.s6), (a.s7 * b.s7), (a.s8 * b.s8), (a.s9 * b.s9), (a.sa * b.sa), (a.sb * b.sb), (a.sc * b.sc), (a.sd * b.sd), (a.se * b.se), (a.sf * b.sf)); }
|
||||
|
||||
inline __device__ u32x operator % (const u32x a, const u32 b) { return u32x ((a.s0 % b), (a.s1 % b) , (a.s2 % b), (a.s3 % b) , (a.s4 % b), (a.s5 % b) , (a.s6 % b), (a.s7 % b), (a.s8 % b), (a.s9 % b) , (a.sa % b), (a.sb % b) , (a.sc % b), (a.sd % b) , (a.se % b), (a.sf % b) ); }
|
||||
inline __device__ u32x operator % (const u32x a, const u32x b) { return u32x ((a.s0 % b.s0), (a.s1 % b.s1), (a.s2 % b.s2), (a.s3 % b.s3), (a.s4 % b.s4), (a.s5 % b.s5), (a.s6 % b.s6), (a.s7 % b.s7), (a.s8 % b.s8), (a.s9 % b.s9), (a.sa % b.sa), (a.sb % b.sb), (a.sc % b.sc), (a.sd % b.sd), (a.se % b.se), (a.sf % b.sf)); }
|
||||
|
||||
inline __device__ u32x operator ~ (const u32x a) { return u32x (~a.s0, ~a.s1, ~a.s2, ~a.s3, ~a.s4, ~a.s5, ~a.s6, ~a.s7, ~a.s8, ~a.s9, ~a.sa, ~a.sb, ~a.sc, ~a.sd, ~a.se, ~a.sf); }
|
||||
|
||||
inline __device__ bool operator != (const u64x a, const u64 b) { return ((a.s0 != b) && (a.s1 != b) && (a.s2 != b) && (a.s3 != b) && (a.s4 != b) && (a.s5 != b) && (a.s6 != b) && (a.s7 != b) && (a.s8 != b) && (a.s9 != b) && (a.sa != b) && (a.sb != b) && (a.sc != b) && (a.sd != b) && (a.se != b) && (a.sf != b) ); }
|
||||
@ -786,6 +807,9 @@ inline __device__ u64x operator - (const u64x a, const u64x b) { return u64x ((
|
||||
inline __device__ u64x operator * (const u64x a, const u64 b) { return u64x ((a.s0 * b), (a.s1 * b) , (a.s2 * b), (a.s3 * b) , (a.s4 * b), (a.s5 * b) , (a.s6 * b), (a.s7 * b), (a.s8 * b), (a.s9 * b) , (a.sa * b), (a.sb * b) , (a.sc * b), (a.sd * b) , (a.se * b), (a.sf * b) ); }
|
||||
inline __device__ u64x operator * (const u64x a, const u64x b) { return u64x ((a.s0 * b.s0), (a.s1 * b.s1), (a.s2 * b.s2), (a.s3 * b.s3), (a.s4 * b.s4), (a.s5 * b.s5), (a.s6 * b.s6), (a.s7 * b.s7), (a.s8 * b.s8), (a.s9 * b.s9), (a.sa * b.sa), (a.sb * b.sb), (a.sc * b.sc), (a.sd * b.sd), (a.se * b.se), (a.sf * b.sf)); }
|
||||
|
||||
inline __device__ u64x operator % (const u64x a, const u64 b) { return u64x ((a.s0 % b), (a.s1 % b) , (a.s2 % b), (a.s3 % b) , (a.s4 % b), (a.s5 % b) , (a.s6 % b), (a.s7 % b), (a.s8 % b), (a.s9 % b) , (a.sa % b), (a.sb % b) , (a.sc % b), (a.sd % b) , (a.se % b), (a.sf % b) ); }
|
||||
inline __device__ u64x operator % (const u64x a, const u64x b) { return u64x ((a.s0 % b.s0), (a.s1 % b.s1), (a.s2 % b.s2), (a.s3 % b.s3), (a.s4 % b.s4), (a.s5 % b.s5), (a.s6 % b.s6), (a.s7 % b.s7), (a.s8 % b.s8), (a.s9 % b.s9), (a.sa % b.sa), (a.sb % b.sb), (a.sc % b.sc), (a.sd % b.sd), (a.se % b.se), (a.sf % b.sf)); }
|
||||
|
||||
inline __device__ u64x operator ~ (const u64x a) { return u64x (~a.s0, ~a.s1, ~a.s2, ~a.s3, ~a.s4, ~a.s5, ~a.s6, ~a.s7, ~a.s8, ~a.s9, ~a.sa, ~a.sb, ~a.sc, ~a.sd, ~a.se, ~a.sf); }
|
||||
|
||||
#endif
|
||||
|
346
OpenCL/m24610-pure.cl
Normal file
346
OpenCL/m24610-pure.cl
Normal file
@ -0,0 +1,346 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha1.cl"
|
||||
#include "inc_cipher_aes.cl"
|
||||
#endif
|
||||
|
||||
#define COMPARE_S "inc_comp_single.cl"
|
||||
#define COMPARE_M "inc_comp_multi.cl"
|
||||
|
||||
typedef struct sqlcipher_sha1_tmp
|
||||
{
|
||||
u32 ipad[5];
|
||||
u32 opad[5];
|
||||
|
||||
u32 dgst[10];
|
||||
u32 out[10];
|
||||
|
||||
} sqlcipher_sha1_tmp_t;
|
||||
|
||||
typedef struct sqlcipher
|
||||
{
|
||||
u32 iv_buf[4];
|
||||
u32 data_buf[4];
|
||||
|
||||
u32 type;
|
||||
|
||||
} sqlcipher_t;
|
||||
|
||||
DECLSPEC void hmac_sha1_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad, u32x *digest)
|
||||
{
|
||||
digest[0] = ipad[0];
|
||||
digest[1] = ipad[1];
|
||||
digest[2] = ipad[2];
|
||||
digest[3] = ipad[3];
|
||||
digest[4] = ipad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
|
||||
w0[0] = digest[0];
|
||||
w0[1] = digest[1];
|
||||
w0[2] = digest[2];
|
||||
w0[3] = digest[3];
|
||||
w1[0] = digest[4];
|
||||
w1[1] = 0x80000000;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = (64 + 20) * 8;
|
||||
|
||||
digest[0] = opad[0];
|
||||
digest[1] = opad[1];
|
||||
digest[2] = opad[2];
|
||||
digest[3] = opad[3];
|
||||
digest[4] = opad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24610_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t))
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
sha1_hmac_ctx_t sha1_hmac_ctx;
|
||||
|
||||
sha1_hmac_init_global_swap (&sha1_hmac_ctx, pws[gid].i, pws[gid].pw_len);
|
||||
|
||||
tmps[gid].ipad[0] = sha1_hmac_ctx.ipad.h[0];
|
||||
tmps[gid].ipad[1] = sha1_hmac_ctx.ipad.h[1];
|
||||
tmps[gid].ipad[2] = sha1_hmac_ctx.ipad.h[2];
|
||||
tmps[gid].ipad[3] = sha1_hmac_ctx.ipad.h[3];
|
||||
tmps[gid].ipad[4] = sha1_hmac_ctx.ipad.h[4];
|
||||
|
||||
tmps[gid].opad[0] = sha1_hmac_ctx.opad.h[0];
|
||||
tmps[gid].opad[1] = sha1_hmac_ctx.opad.h[1];
|
||||
tmps[gid].opad[2] = sha1_hmac_ctx.opad.h[2];
|
||||
tmps[gid].opad[3] = sha1_hmac_ctx.opad.h[3];
|
||||
tmps[gid].opad[4] = sha1_hmac_ctx.opad.h[4];
|
||||
|
||||
sha1_hmac_update_global_swap (&sha1_hmac_ctx, salt_bufs[DIGESTS_OFFSET].salt_buf, salt_bufs[SALT_POS].salt_len);
|
||||
|
||||
for (u32 i = 0, j = 1; i < 8; i += 5, j += 1)
|
||||
{
|
||||
sha1_hmac_ctx_t sha1_hmac_ctx2 = sha1_hmac_ctx;
|
||||
|
||||
u32 w0[4];
|
||||
u32 w1[4];
|
||||
u32 w2[4];
|
||||
u32 w3[4];
|
||||
|
||||
w0[0] = j;
|
||||
w0[1] = 0;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
sha1_hmac_update_64 (&sha1_hmac_ctx2, w0, w1, w2, w3, 4);
|
||||
|
||||
sha1_hmac_final (&sha1_hmac_ctx2);
|
||||
|
||||
tmps[gid].dgst[i + 0] = sha1_hmac_ctx2.opad.h[0];
|
||||
tmps[gid].dgst[i + 1] = sha1_hmac_ctx2.opad.h[1];
|
||||
tmps[gid].dgst[i + 2] = sha1_hmac_ctx2.opad.h[2];
|
||||
tmps[gid].dgst[i + 3] = sha1_hmac_ctx2.opad.h[3];
|
||||
tmps[gid].dgst[i + 4] = sha1_hmac_ctx2.opad.h[4];
|
||||
|
||||
tmps[gid].out[i + 0] = tmps[gid].dgst[i + 0];
|
||||
tmps[gid].out[i + 1] = tmps[gid].dgst[i + 1];
|
||||
tmps[gid].out[i + 2] = tmps[gid].dgst[i + 2];
|
||||
tmps[gid].out[i + 3] = tmps[gid].dgst[i + 3];
|
||||
tmps[gid].out[i + 4] = tmps[gid].dgst[i + 4];
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24610_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if ((gid * VECT_SIZE) >= gid_max) return;
|
||||
|
||||
u32x ipad[5];
|
||||
u32x opad[5];
|
||||
|
||||
ipad[0] = packv (tmps, ipad, gid, 0);
|
||||
ipad[1] = packv (tmps, ipad, gid, 1);
|
||||
ipad[2] = packv (tmps, ipad, gid, 2);
|
||||
ipad[3] = packv (tmps, ipad, gid, 3);
|
||||
ipad[4] = packv (tmps, ipad, gid, 4);
|
||||
|
||||
opad[0] = packv (tmps, opad, gid, 0);
|
||||
opad[1] = packv (tmps, opad, gid, 1);
|
||||
opad[2] = packv (tmps, opad, gid, 2);
|
||||
opad[3] = packv (tmps, opad, gid, 3);
|
||||
opad[4] = packv (tmps, opad, gid, 4);
|
||||
|
||||
for (u32 i = 0; i < 8; i += 5)
|
||||
{
|
||||
u32x dgst[5];
|
||||
u32x out[5];
|
||||
|
||||
dgst[0] = packv (tmps, dgst, gid, i + 0);
|
||||
dgst[1] = packv (tmps, dgst, gid, i + 1);
|
||||
dgst[2] = packv (tmps, dgst, gid, i + 2);
|
||||
dgst[3] = packv (tmps, dgst, gid, i + 3);
|
||||
dgst[4] = packv (tmps, dgst, gid, i + 4);
|
||||
|
||||
out[0] = packv (tmps, out, gid, i + 0);
|
||||
out[1] = packv (tmps, out, gid, i + 1);
|
||||
out[2] = packv (tmps, out, gid, i + 2);
|
||||
out[3] = packv (tmps, out, gid, i + 3);
|
||||
out[4] = packv (tmps, out, gid, i + 4);
|
||||
|
||||
for (u32 j = 0; j < loop_cnt; j++)
|
||||
{
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = dgst[0];
|
||||
w0[1] = dgst[1];
|
||||
w0[2] = dgst[2];
|
||||
w0[3] = dgst[3];
|
||||
w1[0] = dgst[4];
|
||||
w1[1] = 0x80000000;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = (64 + 20) * 8;
|
||||
|
||||
hmac_sha1_run_V (w0, w1, w2, w3, ipad, opad, dgst);
|
||||
|
||||
out[0] ^= dgst[0];
|
||||
out[1] ^= dgst[1];
|
||||
out[2] ^= dgst[2];
|
||||
out[3] ^= dgst[3];
|
||||
out[4] ^= dgst[4];
|
||||
}
|
||||
|
||||
unpackv (tmps, dgst, gid, i + 0, dgst[0]);
|
||||
unpackv (tmps, dgst, gid, i + 1, dgst[1]);
|
||||
unpackv (tmps, dgst, gid, i + 2, dgst[2]);
|
||||
unpackv (tmps, dgst, gid, i + 3, dgst[3]);
|
||||
unpackv (tmps, dgst, gid, i + 4, dgst[4]);
|
||||
|
||||
unpackv (tmps, out, gid, i + 0, out[0]);
|
||||
unpackv (tmps, out, gid, i + 1, out[1]);
|
||||
unpackv (tmps, out, gid, i + 2, out[2]);
|
||||
unpackv (tmps, out, gid, i + 3, out[3]);
|
||||
unpackv (tmps, out, gid, i + 4, out[4]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24610_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 lsz = get_local_size (0);
|
||||
|
||||
/**
|
||||
* aes shared
|
||||
*/
|
||||
|
||||
#ifdef REAL_SHM
|
||||
|
||||
LOCAL_VK u32 s_td0[256];
|
||||
LOCAL_VK u32 s_td1[256];
|
||||
LOCAL_VK u32 s_td2[256];
|
||||
LOCAL_VK u32 s_td3[256];
|
||||
LOCAL_VK u32 s_td4[256];
|
||||
|
||||
LOCAL_VK u32 s_te0[256];
|
||||
LOCAL_VK u32 s_te1[256];
|
||||
LOCAL_VK u32 s_te2[256];
|
||||
LOCAL_VK u32 s_te3[256];
|
||||
LOCAL_VK u32 s_te4[256];
|
||||
|
||||
for (u32 i = lid; i < 256; i += lsz)
|
||||
{
|
||||
s_td0[i] = td0[i];
|
||||
s_td1[i] = td1[i];
|
||||
s_td2[i] = td2[i];
|
||||
s_td3[i] = td3[i];
|
||||
s_td4[i] = td4[i];
|
||||
|
||||
s_te0[i] = te0[i];
|
||||
s_te1[i] = te1[i];
|
||||
s_te2[i] = te2[i];
|
||||
s_te3[i] = te3[i];
|
||||
s_te4[i] = te4[i];
|
||||
}
|
||||
|
||||
SYNC_THREADS ();
|
||||
|
||||
#else
|
||||
|
||||
CONSTANT_AS u32a *s_td0 = td0;
|
||||
CONSTANT_AS u32a *s_td1 = td1;
|
||||
CONSTANT_AS u32a *s_td2 = td2;
|
||||
CONSTANT_AS u32a *s_td3 = td3;
|
||||
CONSTANT_AS u32a *s_td4 = td4;
|
||||
|
||||
CONSTANT_AS u32a *s_te0 = te0;
|
||||
CONSTANT_AS u32a *s_te1 = te1;
|
||||
CONSTANT_AS u32a *s_te2 = te2;
|
||||
CONSTANT_AS u32a *s_te3 = te3;
|
||||
CONSTANT_AS u32a *s_te4 = te4;
|
||||
|
||||
#endif
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 ukey[8];
|
||||
|
||||
ukey[0] = tmps[gid].out[0];
|
||||
ukey[1] = tmps[gid].out[1];
|
||||
ukey[2] = tmps[gid].out[2];
|
||||
ukey[3] = tmps[gid].out[3];
|
||||
ukey[4] = tmps[gid].out[4];
|
||||
ukey[5] = tmps[gid].out[5];
|
||||
ukey[6] = tmps[gid].out[6];
|
||||
ukey[7] = tmps[gid].out[7];
|
||||
|
||||
u32 ks[60];
|
||||
|
||||
AES256_set_decrypt_key (ks, ukey, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3);
|
||||
|
||||
// first check the padding
|
||||
|
||||
u32 iv_buf[4];
|
||||
|
||||
iv_buf[0] = esalt_bufs[DIGESTS_OFFSET].iv_buf[0];
|
||||
iv_buf[1] = esalt_bufs[DIGESTS_OFFSET].iv_buf[1];
|
||||
iv_buf[2] = esalt_bufs[DIGESTS_OFFSET].iv_buf[2];
|
||||
iv_buf[3] = esalt_bufs[DIGESTS_OFFSET].iv_buf[3];
|
||||
|
||||
u32 enc[4];
|
||||
|
||||
enc[0] = esalt_bufs[DIGESTS_OFFSET].data_buf[0];
|
||||
enc[1] = esalt_bufs[DIGESTS_OFFSET].data_buf[1];
|
||||
enc[2] = esalt_bufs[DIGESTS_OFFSET].data_buf[2];
|
||||
enc[3] = esalt_bufs[DIGESTS_OFFSET].data_buf[3];
|
||||
|
||||
u32 dec[4];
|
||||
|
||||
aes256_decrypt (ks, enc, dec, s_td0, s_td1, s_td2, s_td3, s_td4);
|
||||
|
||||
dec[0] ^= iv_buf[0];
|
||||
dec[1] ^= iv_buf[1];
|
||||
dec[2] ^= iv_buf[2];
|
||||
dec[3] ^= iv_buf[3];
|
||||
|
||||
if (dec[0] != 0) return;
|
||||
if (dec[1] != 0) return;
|
||||
if (dec[2] != 0) return;
|
||||
|
||||
const u32 r0 = esalt_bufs[DIGESTS_OFFSET].data_buf[0];
|
||||
const u32 r1 = esalt_bufs[DIGESTS_OFFSET].data_buf[1];
|
||||
const u32 r2 = esalt_bufs[DIGESTS_OFFSET].data_buf[2];
|
||||
const u32 r3 = esalt_bufs[DIGESTS_OFFSET].data_buf[3];
|
||||
|
||||
#define il_pos 0
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include COMPARE_M
|
||||
#endif
|
||||
}
|
385
OpenCL/m24620-pure.cl
Normal file
385
OpenCL/m24620-pure.cl
Normal file
@ -0,0 +1,385 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha256.cl"
|
||||
#include "inc_cipher_aes.cl"
|
||||
#endif
|
||||
|
||||
#define COMPARE_S "inc_comp_single.cl"
|
||||
#define COMPARE_M "inc_comp_multi.cl"
|
||||
|
||||
typedef struct sqlcipher_sha256_tmp
|
||||
{
|
||||
u32 ipad[8];
|
||||
u32 opad[8];
|
||||
|
||||
u32 dgst[8];
|
||||
u32 out[8];
|
||||
|
||||
} sqlcipher_sha256_tmp_t;
|
||||
|
||||
typedef struct sqlcipher
|
||||
{
|
||||
u32 iv_buf[4];
|
||||
u32 data_buf[4];
|
||||
|
||||
u32 type;
|
||||
|
||||
} sqlcipher_t;
|
||||
|
||||
DECLSPEC void hmac_sha256_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad, u32x *digest)
|
||||
{
|
||||
digest[0] = ipad[0];
|
||||
digest[1] = ipad[1];
|
||||
digest[2] = ipad[2];
|
||||
digest[3] = ipad[3];
|
||||
digest[4] = ipad[4];
|
||||
digest[5] = ipad[5];
|
||||
digest[6] = ipad[6];
|
||||
digest[7] = ipad[7];
|
||||
|
||||
sha256_transform_vector (w0, w1, w2, w3, digest);
|
||||
|
||||
w0[0] = digest[0];
|
||||
w0[1] = digest[1];
|
||||
w0[2] = digest[2];
|
||||
w0[3] = digest[3];
|
||||
w1[0] = digest[4];
|
||||
w1[1] = digest[5];
|
||||
w1[2] = digest[6];
|
||||
w1[3] = digest[7];
|
||||
w2[0] = 0x80000000;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = (64 + 32) * 8;
|
||||
|
||||
digest[0] = opad[0];
|
||||
digest[1] = opad[1];
|
||||
digest[2] = opad[2];
|
||||
digest[3] = opad[3];
|
||||
digest[4] = opad[4];
|
||||
digest[5] = opad[5];
|
||||
digest[6] = opad[6];
|
||||
digest[7] = opad[7];
|
||||
|
||||
sha256_transform_vector (w0, w1, w2, w3, digest);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24620_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t))
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
sha256_hmac_ctx_t sha256_hmac_ctx;
|
||||
|
||||
sha256_hmac_init_global_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len);
|
||||
|
||||
tmps[gid].ipad[0] = sha256_hmac_ctx.ipad.h[0];
|
||||
tmps[gid].ipad[1] = sha256_hmac_ctx.ipad.h[1];
|
||||
tmps[gid].ipad[2] = sha256_hmac_ctx.ipad.h[2];
|
||||
tmps[gid].ipad[3] = sha256_hmac_ctx.ipad.h[3];
|
||||
tmps[gid].ipad[4] = sha256_hmac_ctx.ipad.h[4];
|
||||
tmps[gid].ipad[5] = sha256_hmac_ctx.ipad.h[5];
|
||||
tmps[gid].ipad[6] = sha256_hmac_ctx.ipad.h[6];
|
||||
tmps[gid].ipad[7] = sha256_hmac_ctx.ipad.h[7];
|
||||
|
||||
tmps[gid].opad[0] = sha256_hmac_ctx.opad.h[0];
|
||||
tmps[gid].opad[1] = sha256_hmac_ctx.opad.h[1];
|
||||
tmps[gid].opad[2] = sha256_hmac_ctx.opad.h[2];
|
||||
tmps[gid].opad[3] = sha256_hmac_ctx.opad.h[3];
|
||||
tmps[gid].opad[4] = sha256_hmac_ctx.opad.h[4];
|
||||
tmps[gid].opad[5] = sha256_hmac_ctx.opad.h[5];
|
||||
tmps[gid].opad[6] = sha256_hmac_ctx.opad.h[6];
|
||||
tmps[gid].opad[7] = sha256_hmac_ctx.opad.h[7];
|
||||
|
||||
sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_bufs[DIGESTS_OFFSET].salt_buf, salt_bufs[SALT_POS].salt_len);
|
||||
|
||||
for (u32 i = 0, j = 1; i < 8; i += 8, j += 1)
|
||||
{
|
||||
sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx;
|
||||
|
||||
u32 w0[4];
|
||||
u32 w1[4];
|
||||
u32 w2[4];
|
||||
u32 w3[4];
|
||||
|
||||
w0[0] = j;
|
||||
w0[1] = 0;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4);
|
||||
|
||||
sha256_hmac_final (&sha256_hmac_ctx2);
|
||||
|
||||
tmps[gid].dgst[i + 0] = sha256_hmac_ctx2.opad.h[0];
|
||||
tmps[gid].dgst[i + 1] = sha256_hmac_ctx2.opad.h[1];
|
||||
tmps[gid].dgst[i + 2] = sha256_hmac_ctx2.opad.h[2];
|
||||
tmps[gid].dgst[i + 3] = sha256_hmac_ctx2.opad.h[3];
|
||||
tmps[gid].dgst[i + 4] = sha256_hmac_ctx2.opad.h[4];
|
||||
tmps[gid].dgst[i + 5] = sha256_hmac_ctx2.opad.h[5];
|
||||
tmps[gid].dgst[i + 6] = sha256_hmac_ctx2.opad.h[6];
|
||||
tmps[gid].dgst[i + 7] = sha256_hmac_ctx2.opad.h[7];
|
||||
|
||||
tmps[gid].out[i + 0] = tmps[gid].dgst[i + 0];
|
||||
tmps[gid].out[i + 1] = tmps[gid].dgst[i + 1];
|
||||
tmps[gid].out[i + 2] = tmps[gid].dgst[i + 2];
|
||||
tmps[gid].out[i + 3] = tmps[gid].dgst[i + 3];
|
||||
tmps[gid].out[i + 4] = tmps[gid].dgst[i + 4];
|
||||
tmps[gid].out[i + 5] = tmps[gid].dgst[i + 5];
|
||||
tmps[gid].out[i + 6] = tmps[gid].dgst[i + 6];
|
||||
tmps[gid].out[i + 7] = tmps[gid].dgst[i + 7];
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24620_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if ((gid * VECT_SIZE) >= gid_max) return;
|
||||
|
||||
u32x ipad[8];
|
||||
u32x opad[8];
|
||||
|
||||
ipad[0] = packv (tmps, ipad, gid, 0);
|
||||
ipad[1] = packv (tmps, ipad, gid, 1);
|
||||
ipad[2] = packv (tmps, ipad, gid, 2);
|
||||
ipad[3] = packv (tmps, ipad, gid, 3);
|
||||
ipad[4] = packv (tmps, ipad, gid, 4);
|
||||
ipad[5] = packv (tmps, ipad, gid, 5);
|
||||
ipad[6] = packv (tmps, ipad, gid, 6);
|
||||
ipad[7] = packv (tmps, ipad, gid, 7);
|
||||
|
||||
opad[0] = packv (tmps, opad, gid, 0);
|
||||
opad[1] = packv (tmps, opad, gid, 1);
|
||||
opad[2] = packv (tmps, opad, gid, 2);
|
||||
opad[3] = packv (tmps, opad, gid, 3);
|
||||
opad[4] = packv (tmps, opad, gid, 4);
|
||||
opad[5] = packv (tmps, opad, gid, 5);
|
||||
opad[6] = packv (tmps, opad, gid, 6);
|
||||
opad[7] = packv (tmps, opad, gid, 7);
|
||||
|
||||
for (u32 i = 0; i < 8; i += 8)
|
||||
{
|
||||
u32x dgst[8];
|
||||
u32x out[8];
|
||||
|
||||
dgst[0] = packv (tmps, dgst, gid, i + 0);
|
||||
dgst[1] = packv (tmps, dgst, gid, i + 1);
|
||||
dgst[2] = packv (tmps, dgst, gid, i + 2);
|
||||
dgst[3] = packv (tmps, dgst, gid, i + 3);
|
||||
dgst[4] = packv (tmps, dgst, gid, i + 4);
|
||||
dgst[5] = packv (tmps, dgst, gid, i + 5);
|
||||
dgst[6] = packv (tmps, dgst, gid, i + 6);
|
||||
dgst[7] = packv (tmps, dgst, gid, i + 7);
|
||||
|
||||
out[0] = packv (tmps, out, gid, i + 0);
|
||||
out[1] = packv (tmps, out, gid, i + 1);
|
||||
out[2] = packv (tmps, out, gid, i + 2);
|
||||
out[3] = packv (tmps, out, gid, i + 3);
|
||||
out[4] = packv (tmps, out, gid, i + 4);
|
||||
out[5] = packv (tmps, out, gid, i + 5);
|
||||
out[6] = packv (tmps, out, gid, i + 6);
|
||||
out[7] = packv (tmps, out, gid, i + 7);
|
||||
|
||||
for (u32 j = 0; j < loop_cnt; j++)
|
||||
{
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = dgst[0];
|
||||
w0[1] = dgst[1];
|
||||
w0[2] = dgst[2];
|
||||
w0[3] = dgst[3];
|
||||
w1[0] = dgst[4];
|
||||
w1[1] = dgst[5];
|
||||
w1[2] = dgst[6];
|
||||
w1[3] = dgst[7];
|
||||
w2[0] = 0x80000000;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = (64 + 32) * 8;
|
||||
|
||||
hmac_sha256_run_V (w0, w1, w2, w3, ipad, opad, dgst);
|
||||
|
||||
out[0] ^= dgst[0];
|
||||
out[1] ^= dgst[1];
|
||||
out[2] ^= dgst[2];
|
||||
out[3] ^= dgst[3];
|
||||
out[4] ^= dgst[4];
|
||||
out[5] ^= dgst[5];
|
||||
out[6] ^= dgst[6];
|
||||
out[7] ^= dgst[7];
|
||||
}
|
||||
|
||||
unpackv (tmps, dgst, gid, i + 0, dgst[0]);
|
||||
unpackv (tmps, dgst, gid, i + 1, dgst[1]);
|
||||
unpackv (tmps, dgst, gid, i + 2, dgst[2]);
|
||||
unpackv (tmps, dgst, gid, i + 3, dgst[3]);
|
||||
unpackv (tmps, dgst, gid, i + 4, dgst[4]);
|
||||
unpackv (tmps, dgst, gid, i + 5, dgst[5]);
|
||||
unpackv (tmps, dgst, gid, i + 6, dgst[6]);
|
||||
unpackv (tmps, dgst, gid, i + 7, dgst[7]);
|
||||
|
||||
unpackv (tmps, out, gid, i + 0, out[0]);
|
||||
unpackv (tmps, out, gid, i + 1, out[1]);
|
||||
unpackv (tmps, out, gid, i + 2, out[2]);
|
||||
unpackv (tmps, out, gid, i + 3, out[3]);
|
||||
unpackv (tmps, out, gid, i + 4, out[4]);
|
||||
unpackv (tmps, out, gid, i + 5, out[5]);
|
||||
unpackv (tmps, out, gid, i + 6, out[6]);
|
||||
unpackv (tmps, out, gid, i + 7, out[7]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24620_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 lsz = get_local_size (0);
|
||||
|
||||
/**
|
||||
* aes shared
|
||||
*/
|
||||
|
||||
#ifdef REAL_SHM
|
||||
|
||||
LOCAL_VK u32 s_td0[256];
|
||||
LOCAL_VK u32 s_td1[256];
|
||||
LOCAL_VK u32 s_td2[256];
|
||||
LOCAL_VK u32 s_td3[256];
|
||||
LOCAL_VK u32 s_td4[256];
|
||||
|
||||
LOCAL_VK u32 s_te0[256];
|
||||
LOCAL_VK u32 s_te1[256];
|
||||
LOCAL_VK u32 s_te2[256];
|
||||
LOCAL_VK u32 s_te3[256];
|
||||
LOCAL_VK u32 s_te4[256];
|
||||
|
||||
for (u32 i = lid; i < 256; i += lsz)
|
||||
{
|
||||
s_td0[i] = td0[i];
|
||||
s_td1[i] = td1[i];
|
||||
s_td2[i] = td2[i];
|
||||
s_td3[i] = td3[i];
|
||||
s_td4[i] = td4[i];
|
||||
|
||||
s_te0[i] = te0[i];
|
||||
s_te1[i] = te1[i];
|
||||
s_te2[i] = te2[i];
|
||||
s_te3[i] = te3[i];
|
||||
s_te4[i] = te4[i];
|
||||
}
|
||||
|
||||
SYNC_THREADS ();
|
||||
|
||||
#else
|
||||
|
||||
CONSTANT_AS u32a *s_td0 = td0;
|
||||
CONSTANT_AS u32a *s_td1 = td1;
|
||||
CONSTANT_AS u32a *s_td2 = td2;
|
||||
CONSTANT_AS u32a *s_td3 = td3;
|
||||
CONSTANT_AS u32a *s_td4 = td4;
|
||||
|
||||
CONSTANT_AS u32a *s_te0 = te0;
|
||||
CONSTANT_AS u32a *s_te1 = te1;
|
||||
CONSTANT_AS u32a *s_te2 = te2;
|
||||
CONSTANT_AS u32a *s_te3 = te3;
|
||||
CONSTANT_AS u32a *s_te4 = te4;
|
||||
|
||||
#endif
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 ukey[8];
|
||||
|
||||
ukey[0] = tmps[gid].out[0];
|
||||
ukey[1] = tmps[gid].out[1];
|
||||
ukey[2] = tmps[gid].out[2];
|
||||
ukey[3] = tmps[gid].out[3];
|
||||
ukey[4] = tmps[gid].out[4];
|
||||
ukey[5] = tmps[gid].out[5];
|
||||
ukey[6] = tmps[gid].out[6];
|
||||
ukey[7] = tmps[gid].out[7];
|
||||
|
||||
u32 ks[60];
|
||||
|
||||
AES256_set_decrypt_key (ks, ukey, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3);
|
||||
|
||||
// first check the padding
|
||||
|
||||
u32 iv_buf[4];
|
||||
|
||||
iv_buf[0] = esalt_bufs[DIGESTS_OFFSET].iv_buf[0];
|
||||
iv_buf[1] = esalt_bufs[DIGESTS_OFFSET].iv_buf[1];
|
||||
iv_buf[2] = esalt_bufs[DIGESTS_OFFSET].iv_buf[2];
|
||||
iv_buf[3] = esalt_bufs[DIGESTS_OFFSET].iv_buf[3];
|
||||
|
||||
u32 enc[4];
|
||||
|
||||
enc[0] = esalt_bufs[DIGESTS_OFFSET].data_buf[0];
|
||||
enc[1] = esalt_bufs[DIGESTS_OFFSET].data_buf[1];
|
||||
enc[2] = esalt_bufs[DIGESTS_OFFSET].data_buf[2];
|
||||
enc[3] = esalt_bufs[DIGESTS_OFFSET].data_buf[3];
|
||||
|
||||
u32 dec[4];
|
||||
|
||||
aes256_decrypt (ks, enc, dec, s_td0, s_td1, s_td2, s_td3, s_td4);
|
||||
|
||||
dec[0] ^= iv_buf[0];
|
||||
dec[1] ^= iv_buf[1];
|
||||
dec[2] ^= iv_buf[2];
|
||||
dec[3] ^= iv_buf[3];
|
||||
|
||||
if (dec[0] != 0) return;
|
||||
if (dec[1] != 0) return;
|
||||
if (dec[2] != 0) return;
|
||||
|
||||
const u32 r0 = esalt_bufs[DIGESTS_OFFSET].data_buf[0];
|
||||
const u32 r1 = esalt_bufs[DIGESTS_OFFSET].data_buf[1];
|
||||
const u32 r2 = esalt_bufs[DIGESTS_OFFSET].data_buf[2];
|
||||
const u32 r3 = esalt_bufs[DIGESTS_OFFSET].data_buf[3];
|
||||
|
||||
#define il_pos 0
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include COMPARE_M
|
||||
#endif
|
||||
}
|
441
OpenCL/m24630-pure.cl
Normal file
441
OpenCL/m24630-pure.cl
Normal file
@ -0,0 +1,441 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha512.cl"
|
||||
#include "inc_cipher_aes.cl"
|
||||
#endif
|
||||
|
||||
#define COMPARE_S "inc_comp_single.cl"
|
||||
#define COMPARE_M "inc_comp_multi.cl"
|
||||
|
||||
typedef struct sqlcipher_sha512_tmp
|
||||
{
|
||||
u64 ipad[8];
|
||||
u64 opad[8];
|
||||
|
||||
u64 dgst[8];
|
||||
u64 out[8];
|
||||
|
||||
} sqlcipher_sha512_tmp_t;
|
||||
|
||||
typedef struct sqlcipher
|
||||
{
|
||||
u32 iv_buf[4];
|
||||
u32 data_buf[4];
|
||||
|
||||
u32 type;
|
||||
|
||||
} sqlcipher_t;
|
||||
|
||||
DECLSPEC void hmac_sha512_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *w4, u32x *w5, u32x *w6, u32x *w7, u64x *ipad, u64x *opad, u64x *digest)
|
||||
{
|
||||
digest[0] = ipad[0];
|
||||
digest[1] = ipad[1];
|
||||
digest[2] = ipad[2];
|
||||
digest[3] = ipad[3];
|
||||
digest[4] = ipad[4];
|
||||
digest[5] = ipad[5];
|
||||
digest[6] = ipad[6];
|
||||
digest[7] = ipad[7];
|
||||
|
||||
sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest);
|
||||
|
||||
w0[0] = h32_from_64 (digest[0]);
|
||||
w0[1] = l32_from_64 (digest[0]);
|
||||
w0[2] = h32_from_64 (digest[1]);
|
||||
w0[3] = l32_from_64 (digest[1]);
|
||||
w1[0] = h32_from_64 (digest[2]);
|
||||
w1[1] = l32_from_64 (digest[2]);
|
||||
w1[2] = h32_from_64 (digest[3]);
|
||||
w1[3] = l32_from_64 (digest[3]);
|
||||
w2[0] = h32_from_64 (digest[4]);
|
||||
w2[1] = l32_from_64 (digest[4]);
|
||||
w2[2] = h32_from_64 (digest[5]);
|
||||
w2[3] = l32_from_64 (digest[5]);
|
||||
w3[0] = h32_from_64 (digest[6]);
|
||||
w3[1] = l32_from_64 (digest[6]);
|
||||
w3[2] = h32_from_64 (digest[7]);
|
||||
w3[3] = l32_from_64 (digest[7]);
|
||||
w4[0] = 0x80000000;
|
||||
w4[1] = 0;
|
||||
w4[2] = 0;
|
||||
w4[3] = 0;
|
||||
w5[0] = 0;
|
||||
w5[1] = 0;
|
||||
w5[2] = 0;
|
||||
w5[3] = 0;
|
||||
w6[0] = 0;
|
||||
w6[1] = 0;
|
||||
w6[2] = 0;
|
||||
w6[3] = 0;
|
||||
w7[0] = 0;
|
||||
w7[1] = 0;
|
||||
w7[2] = 0;
|
||||
w7[3] = (128 + 64) * 8;
|
||||
|
||||
digest[0] = opad[0];
|
||||
digest[1] = opad[1];
|
||||
digest[2] = opad[2];
|
||||
digest[3] = opad[3];
|
||||
digest[4] = opad[4];
|
||||
digest[5] = opad[5];
|
||||
digest[6] = opad[6];
|
||||
digest[7] = opad[7];
|
||||
|
||||
sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24630_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t))
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
sha512_hmac_ctx_t sha512_hmac_ctx;
|
||||
|
||||
sha512_hmac_init_global_swap (&sha512_hmac_ctx, pws[gid].i, pws[gid].pw_len);
|
||||
|
||||
tmps[gid].ipad[0] = sha512_hmac_ctx.ipad.h[0];
|
||||
tmps[gid].ipad[1] = sha512_hmac_ctx.ipad.h[1];
|
||||
tmps[gid].ipad[2] = sha512_hmac_ctx.ipad.h[2];
|
||||
tmps[gid].ipad[3] = sha512_hmac_ctx.ipad.h[3];
|
||||
tmps[gid].ipad[4] = sha512_hmac_ctx.ipad.h[4];
|
||||
tmps[gid].ipad[5] = sha512_hmac_ctx.ipad.h[5];
|
||||
tmps[gid].ipad[6] = sha512_hmac_ctx.ipad.h[6];
|
||||
tmps[gid].ipad[7] = sha512_hmac_ctx.ipad.h[7];
|
||||
|
||||
tmps[gid].opad[0] = sha512_hmac_ctx.opad.h[0];
|
||||
tmps[gid].opad[1] = sha512_hmac_ctx.opad.h[1];
|
||||
tmps[gid].opad[2] = sha512_hmac_ctx.opad.h[2];
|
||||
tmps[gid].opad[3] = sha512_hmac_ctx.opad.h[3];
|
||||
tmps[gid].opad[4] = sha512_hmac_ctx.opad.h[4];
|
||||
tmps[gid].opad[5] = sha512_hmac_ctx.opad.h[5];
|
||||
tmps[gid].opad[6] = sha512_hmac_ctx.opad.h[6];
|
||||
tmps[gid].opad[7] = sha512_hmac_ctx.opad.h[7];
|
||||
|
||||
sha512_hmac_update_global_swap (&sha512_hmac_ctx, salt_bufs[DIGESTS_OFFSET].salt_buf, salt_bufs[SALT_POS].salt_len);
|
||||
|
||||
for (u32 i = 0, j = 1; i < 8; i += 8, j += 1)
|
||||
{
|
||||
sha512_hmac_ctx_t sha512_hmac_ctx2 = sha512_hmac_ctx;
|
||||
|
||||
u32 w0[4];
|
||||
u32 w1[4];
|
||||
u32 w2[4];
|
||||
u32 w3[4];
|
||||
u32 w4[4];
|
||||
u32 w5[4];
|
||||
u32 w6[4];
|
||||
u32 w7[4];
|
||||
|
||||
w0[0] = j;
|
||||
w0[1] = 0;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
w4[0] = 0;
|
||||
w4[1] = 0;
|
||||
w4[2] = 0;
|
||||
w4[3] = 0;
|
||||
w5[0] = 0;
|
||||
w5[1] = 0;
|
||||
w5[2] = 0;
|
||||
w5[3] = 0;
|
||||
w6[0] = 0;
|
||||
w6[1] = 0;
|
||||
w6[2] = 0;
|
||||
w6[3] = 0;
|
||||
w7[0] = 0;
|
||||
w7[1] = 0;
|
||||
w7[2] = 0;
|
||||
w7[3] = 0;
|
||||
|
||||
sha512_hmac_update_128 (&sha512_hmac_ctx2, w0, w1, w2, w3, w4, w5, w6, w7, 4);
|
||||
|
||||
sha512_hmac_final (&sha512_hmac_ctx2);
|
||||
|
||||
tmps[gid].dgst[i + 0] = sha512_hmac_ctx2.opad.h[0];
|
||||
tmps[gid].dgst[i + 1] = sha512_hmac_ctx2.opad.h[1];
|
||||
tmps[gid].dgst[i + 2] = sha512_hmac_ctx2.opad.h[2];
|
||||
tmps[gid].dgst[i + 3] = sha512_hmac_ctx2.opad.h[3];
|
||||
tmps[gid].dgst[i + 4] = sha512_hmac_ctx2.opad.h[4];
|
||||
tmps[gid].dgst[i + 5] = sha512_hmac_ctx2.opad.h[5];
|
||||
tmps[gid].dgst[i + 6] = sha512_hmac_ctx2.opad.h[6];
|
||||
tmps[gid].dgst[i + 7] = sha512_hmac_ctx2.opad.h[7];
|
||||
|
||||
tmps[gid].out[i + 0] = tmps[gid].dgst[i + 0];
|
||||
tmps[gid].out[i + 1] = tmps[gid].dgst[i + 1];
|
||||
tmps[gid].out[i + 2] = tmps[gid].dgst[i + 2];
|
||||
tmps[gid].out[i + 3] = tmps[gid].dgst[i + 3];
|
||||
tmps[gid].out[i + 4] = tmps[gid].dgst[i + 4];
|
||||
tmps[gid].out[i + 5] = tmps[gid].dgst[i + 5];
|
||||
tmps[gid].out[i + 6] = tmps[gid].dgst[i + 6];
|
||||
tmps[gid].out[i + 7] = tmps[gid].dgst[i + 7];
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24630_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if ((gid * VECT_SIZE) >= gid_max) return;
|
||||
|
||||
u64x ipad[8];
|
||||
u64x opad[8];
|
||||
|
||||
ipad[0] = pack64v (tmps, ipad, gid, 0);
|
||||
ipad[1] = pack64v (tmps, ipad, gid, 1);
|
||||
ipad[2] = pack64v (tmps, ipad, gid, 2);
|
||||
ipad[3] = pack64v (tmps, ipad, gid, 3);
|
||||
ipad[4] = pack64v (tmps, ipad, gid, 4);
|
||||
ipad[5] = pack64v (tmps, ipad, gid, 5);
|
||||
ipad[6] = pack64v (tmps, ipad, gid, 6);
|
||||
ipad[7] = pack64v (tmps, ipad, gid, 7);
|
||||
|
||||
opad[0] = pack64v (tmps, opad, gid, 0);
|
||||
opad[1] = pack64v (tmps, opad, gid, 1);
|
||||
opad[2] = pack64v (tmps, opad, gid, 2);
|
||||
opad[3] = pack64v (tmps, opad, gid, 3);
|
||||
opad[4] = pack64v (tmps, opad, gid, 4);
|
||||
opad[5] = pack64v (tmps, opad, gid, 5);
|
||||
opad[6] = pack64v (tmps, opad, gid, 6);
|
||||
opad[7] = pack64v (tmps, opad, gid, 7);
|
||||
|
||||
for (u32 i = 0; i < 8; i += 8)
|
||||
{
|
||||
u64x dgst[8];
|
||||
u64x out[8];
|
||||
|
||||
dgst[0] = pack64v (tmps, dgst, gid, i + 0);
|
||||
dgst[1] = pack64v (tmps, dgst, gid, i + 1);
|
||||
dgst[2] = pack64v (tmps, dgst, gid, i + 2);
|
||||
dgst[3] = pack64v (tmps, dgst, gid, i + 3);
|
||||
dgst[4] = pack64v (tmps, dgst, gid, i + 4);
|
||||
dgst[5] = pack64v (tmps, dgst, gid, i + 5);
|
||||
dgst[6] = pack64v (tmps, dgst, gid, i + 6);
|
||||
dgst[7] = pack64v (tmps, dgst, gid, i + 7);
|
||||
|
||||
out[0] = pack64v (tmps, out, gid, i + 0);
|
||||
out[1] = pack64v (tmps, out, gid, i + 1);
|
||||
out[2] = pack64v (tmps, out, gid, i + 2);
|
||||
out[3] = pack64v (tmps, out, gid, i + 3);
|
||||
out[4] = pack64v (tmps, out, gid, i + 4);
|
||||
out[5] = pack64v (tmps, out, gid, i + 5);
|
||||
out[6] = pack64v (tmps, out, gid, i + 6);
|
||||
out[7] = pack64v (tmps, out, gid, i + 7);
|
||||
|
||||
for (u32 j = 0; j < loop_cnt; j++)
|
||||
{
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
u32x w4[4];
|
||||
u32x w5[4];
|
||||
u32x w6[4];
|
||||
u32x w7[4];
|
||||
|
||||
w0[0] = h32_from_64 (dgst[0]);
|
||||
w0[1] = l32_from_64 (dgst[0]);
|
||||
w0[2] = h32_from_64 (dgst[1]);
|
||||
w0[3] = l32_from_64 (dgst[1]);
|
||||
w1[0] = h32_from_64 (dgst[2]);
|
||||
w1[1] = l32_from_64 (dgst[2]);
|
||||
w1[2] = h32_from_64 (dgst[3]);
|
||||
w1[3] = l32_from_64 (dgst[3]);
|
||||
w2[0] = h32_from_64 (dgst[4]);
|
||||
w2[1] = l32_from_64 (dgst[4]);
|
||||
w2[2] = h32_from_64 (dgst[5]);
|
||||
w2[3] = l32_from_64 (dgst[5]);
|
||||
w3[0] = h32_from_64 (dgst[6]);
|
||||
w3[1] = l32_from_64 (dgst[6]);
|
||||
w3[2] = h32_from_64 (dgst[7]);
|
||||
w3[3] = l32_from_64 (dgst[7]);
|
||||
w4[0] = 0x80000000;
|
||||
w4[1] = 0;
|
||||
w4[2] = 0;
|
||||
w4[3] = 0;
|
||||
w5[0] = 0;
|
||||
w5[1] = 0;
|
||||
w5[2] = 0;
|
||||
w5[3] = 0;
|
||||
w6[0] = 0;
|
||||
w6[1] = 0;
|
||||
w6[2] = 0;
|
||||
w6[3] = 0;
|
||||
w7[0] = 0;
|
||||
w7[1] = 0;
|
||||
w7[2] = 0;
|
||||
w7[3] = (128 + 64) * 8;
|
||||
|
||||
hmac_sha512_run_V (w0, w1, w2, w3, w4, w5, w6, w7, ipad, opad, dgst);
|
||||
|
||||
out[0] ^= dgst[0];
|
||||
out[1] ^= dgst[1];
|
||||
out[2] ^= dgst[2];
|
||||
out[3] ^= dgst[3];
|
||||
out[4] ^= dgst[4];
|
||||
out[5] ^= dgst[5];
|
||||
out[6] ^= dgst[6];
|
||||
out[7] ^= dgst[7];
|
||||
}
|
||||
|
||||
unpack64v (tmps, dgst, gid, i + 0, dgst[0]);
|
||||
unpack64v (tmps, dgst, gid, i + 1, dgst[1]);
|
||||
unpack64v (tmps, dgst, gid, i + 2, dgst[2]);
|
||||
unpack64v (tmps, dgst, gid, i + 3, dgst[3]);
|
||||
unpack64v (tmps, dgst, gid, i + 4, dgst[4]);
|
||||
unpack64v (tmps, dgst, gid, i + 5, dgst[5]);
|
||||
unpack64v (tmps, dgst, gid, i + 6, dgst[6]);
|
||||
unpack64v (tmps, dgst, gid, i + 7, dgst[7]);
|
||||
|
||||
unpack64v (tmps, out, gid, i + 0, out[0]);
|
||||
unpack64v (tmps, out, gid, i + 1, out[1]);
|
||||
unpack64v (tmps, out, gid, i + 2, out[2]);
|
||||
unpack64v (tmps, out, gid, i + 3, out[3]);
|
||||
unpack64v (tmps, out, gid, i + 4, out[4]);
|
||||
unpack64v (tmps, out, gid, i + 5, out[5]);
|
||||
unpack64v (tmps, out, gid, i + 6, out[6]);
|
||||
unpack64v (tmps, out, gid, i + 7, out[7]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24630_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 lsz = get_local_size (0);
|
||||
|
||||
/**
|
||||
* aes shared
|
||||
*/
|
||||
|
||||
#ifdef REAL_SHM
|
||||
|
||||
LOCAL_VK u32 s_td0[256];
|
||||
LOCAL_VK u32 s_td1[256];
|
||||
LOCAL_VK u32 s_td2[256];
|
||||
LOCAL_VK u32 s_td3[256];
|
||||
LOCAL_VK u32 s_td4[256];
|
||||
|
||||
LOCAL_VK u32 s_te0[256];
|
||||
LOCAL_VK u32 s_te1[256];
|
||||
LOCAL_VK u32 s_te2[256];
|
||||
LOCAL_VK u32 s_te3[256];
|
||||
LOCAL_VK u32 s_te4[256];
|
||||
|
||||
for (u32 i = lid; i < 256; i += lsz)
|
||||
{
|
||||
s_td0[i] = td0[i];
|
||||
s_td1[i] = td1[i];
|
||||
s_td2[i] = td2[i];
|
||||
s_td3[i] = td3[i];
|
||||
s_td4[i] = td4[i];
|
||||
|
||||
s_te0[i] = te0[i];
|
||||
s_te1[i] = te1[i];
|
||||
s_te2[i] = te2[i];
|
||||
s_te3[i] = te3[i];
|
||||
s_te4[i] = te4[i];
|
||||
}
|
||||
|
||||
SYNC_THREADS ();
|
||||
|
||||
#else
|
||||
|
||||
CONSTANT_AS u32a *s_td0 = td0;
|
||||
CONSTANT_AS u32a *s_td1 = td1;
|
||||
CONSTANT_AS u32a *s_td2 = td2;
|
||||
CONSTANT_AS u32a *s_td3 = td3;
|
||||
CONSTANT_AS u32a *s_td4 = td4;
|
||||
|
||||
CONSTANT_AS u32a *s_te0 = te0;
|
||||
CONSTANT_AS u32a *s_te1 = te1;
|
||||
CONSTANT_AS u32a *s_te2 = te2;
|
||||
CONSTANT_AS u32a *s_te3 = te3;
|
||||
CONSTANT_AS u32a *s_te4 = te4;
|
||||
|
||||
#endif
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 ukey[8];
|
||||
|
||||
ukey[0] = h32_from_64_S (tmps[gid].out[0]);
|
||||
ukey[1] = l32_from_64_S (tmps[gid].out[0]);
|
||||
ukey[2] = h32_from_64_S (tmps[gid].out[1]);
|
||||
ukey[3] = l32_from_64_S (tmps[gid].out[1]);
|
||||
ukey[4] = h32_from_64_S (tmps[gid].out[2]);
|
||||
ukey[5] = l32_from_64_S (tmps[gid].out[2]);
|
||||
ukey[6] = h32_from_64_S (tmps[gid].out[3]);
|
||||
ukey[7] = l32_from_64_S (tmps[gid].out[3]);
|
||||
|
||||
u32 ks[60];
|
||||
|
||||
AES256_set_decrypt_key (ks, ukey, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3);
|
||||
|
||||
// first check the padding
|
||||
|
||||
u32 iv_buf[4];
|
||||
|
||||
iv_buf[0] = esalt_bufs[DIGESTS_OFFSET].iv_buf[0];
|
||||
iv_buf[1] = esalt_bufs[DIGESTS_OFFSET].iv_buf[1];
|
||||
iv_buf[2] = esalt_bufs[DIGESTS_OFFSET].iv_buf[2];
|
||||
iv_buf[3] = esalt_bufs[DIGESTS_OFFSET].iv_buf[3];
|
||||
|
||||
u32 enc[4];
|
||||
|
||||
enc[0] = esalt_bufs[DIGESTS_OFFSET].data_buf[0];
|
||||
enc[1] = esalt_bufs[DIGESTS_OFFSET].data_buf[1];
|
||||
enc[2] = esalt_bufs[DIGESTS_OFFSET].data_buf[2];
|
||||
enc[3] = esalt_bufs[DIGESTS_OFFSET].data_buf[3];
|
||||
|
||||
u32 dec[4];
|
||||
|
||||
aes256_decrypt (ks, enc, dec, s_td0, s_td1, s_td2, s_td3, s_td4);
|
||||
|
||||
dec[0] ^= iv_buf[0];
|
||||
dec[1] ^= iv_buf[1];
|
||||
dec[2] ^= iv_buf[2];
|
||||
dec[3] ^= iv_buf[3];
|
||||
|
||||
if (dec[0] != 0) return;
|
||||
if (dec[1] != 0) return;
|
||||
if (dec[2] != 0) return;
|
||||
|
||||
const u32 r0 = esalt_bufs[DIGESTS_OFFSET].data_buf[0];
|
||||
const u32 r1 = esalt_bufs[DIGESTS_OFFSET].data_buf[1];
|
||||
const u32 r2 = esalt_bufs[DIGESTS_OFFSET].data_buf[2];
|
||||
const u32 r3 = esalt_bufs[DIGESTS_OFFSET].data_buf[3];
|
||||
|
||||
#define il_pos 0
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include COMPARE_M
|
||||
#endif
|
||||
}
|
496
OpenCL/m24700_a0-optimized.cl
Normal file
496
OpenCL/m24700_a0-optimized.cl
Normal file
@ -0,0 +1,496 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_rp_optimized.h"
|
||||
#include "inc_rp_optimized.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24700_m04 (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
u32x w0[4] = { 0 };
|
||||
u32x w1[4] = { 0 };
|
||||
u32x w2[4] = { 0 };
|
||||
u32x w3[4] = { 0 };
|
||||
|
||||
const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
|
||||
|
||||
append_0x80_2x4_VV (w0, w1, out_len);
|
||||
|
||||
w3[2] = out_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
w0[0] = a;
|
||||
w0[1] = b & 0xff; w0[1] |= 0x8000;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 5 * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
a = MD5M_A;
|
||||
b = MD5M_B;
|
||||
c = MD5M_C;
|
||||
d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
b &= 0xff;
|
||||
c = 0;
|
||||
d = 0;
|
||||
|
||||
COMPARE_M_SIMD (a, b, c, d);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_m08 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_m16 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s04 (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
u32x w0[4] = { 0 };
|
||||
u32x w1[4] = { 0 };
|
||||
u32x w2[4] = { 0 };
|
||||
u32x w3[4] = { 0 };
|
||||
|
||||
const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
|
||||
|
||||
append_0x80_2x4_VV (w0, w1, out_len);
|
||||
|
||||
w3[2] = out_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
w0[0] = a;
|
||||
w0[1] = b & 0xff; w0[1] |= 0x8000;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 5 * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
a = MD5M_A;
|
||||
b = MD5M_B;
|
||||
c = MD5M_C;
|
||||
d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
|
||||
if (MATCHES_NONE_VS (a, search[0])) continue;
|
||||
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
b &= 0xff;
|
||||
c = 0;
|
||||
d = 0;
|
||||
|
||||
COMPARE_S_SIMD (a, b, c, d);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s08 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s16 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
143
OpenCL/m24700_a0-pure.cl
Normal file
143
OpenCL/m24700_a0-pure.cl
Normal file
@ -0,0 +1,143 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
//#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_rp.h"
|
||||
#include "inc_rp.cl"
|
||||
#include "inc_scalar.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24700_mxx (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
COPY_PW (pws[gid]);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
pw_t tmp = PASTE_PW;
|
||||
|
||||
tmp.pw_len = apply_rules (rules_buf[il_pos].cmds, tmp.i, tmp.pw_len);
|
||||
|
||||
md5_ctx_t ctx0;
|
||||
|
||||
md5_init (&ctx0);
|
||||
|
||||
md5_update (&ctx0, tmp.i, tmp.pw_len);
|
||||
|
||||
md5_final (&ctx0);
|
||||
|
||||
const u32 a = ctx0.h[0];
|
||||
const u32 b = ctx0.h[1] & 0xff;
|
||||
|
||||
md5_ctx_t ctx;
|
||||
|
||||
md5_init (&ctx);
|
||||
|
||||
ctx.w0[0] = a;
|
||||
ctx.w0[1] = b;
|
||||
|
||||
ctx.len = 5;
|
||||
|
||||
md5_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.h[DGST_R0];
|
||||
const u32 r1 = ctx.h[DGST_R1] & 0xff;
|
||||
const u32 r2 = 0;
|
||||
const u32 r3 = 0;
|
||||
|
||||
COMPARE_M_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_sxx (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
COPY_PW (pws[gid]);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
pw_t tmp = PASTE_PW;
|
||||
|
||||
tmp.pw_len = apply_rules (rules_buf[il_pos].cmds, tmp.i, tmp.pw_len);
|
||||
|
||||
md5_ctx_t ctx0;
|
||||
|
||||
md5_init (&ctx0);
|
||||
|
||||
md5_update (&ctx0, tmp.i, tmp.pw_len);
|
||||
|
||||
md5_final (&ctx0);
|
||||
|
||||
const u32 a = ctx0.h[0];
|
||||
const u32 b = ctx0.h[1] & 0xff;
|
||||
|
||||
md5_ctx_t ctx;
|
||||
|
||||
md5_init (&ctx);
|
||||
|
||||
ctx.w0[0] = a;
|
||||
ctx.w0[1] = b;
|
||||
|
||||
ctx.len = 5;
|
||||
|
||||
md5_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.h[DGST_R0];
|
||||
const u32 r1 = ctx.h[DGST_R1] & 0xff;
|
||||
const u32 r2 = 0;
|
||||
const u32 r3 = 0;
|
||||
|
||||
COMPARE_S_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
612
OpenCL/m24700_a1-optimized.cl
Normal file
612
OpenCL/m24700_a1-optimized.cl
Normal file
@ -0,0 +1,612 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24700_m04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_l_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos) & 63;
|
||||
|
||||
const u32x pw_len = (pw_l_len + pw_r_len) & 63;
|
||||
|
||||
/**
|
||||
* concat password candidate
|
||||
*/
|
||||
|
||||
u32x wordl0[4] = { 0 };
|
||||
u32x wordl1[4] = { 0 };
|
||||
u32x wordl2[4] = { 0 };
|
||||
u32x wordl3[4] = { 0 };
|
||||
|
||||
wordl0[0] = pw_buf0[0];
|
||||
wordl0[1] = pw_buf0[1];
|
||||
wordl0[2] = pw_buf0[2];
|
||||
wordl0[3] = pw_buf0[3];
|
||||
wordl1[0] = pw_buf1[0];
|
||||
wordl1[1] = pw_buf1[1];
|
||||
wordl1[2] = pw_buf1[2];
|
||||
wordl1[3] = pw_buf1[3];
|
||||
|
||||
u32x wordr0[4] = { 0 };
|
||||
u32x wordr1[4] = { 0 };
|
||||
u32x wordr2[4] = { 0 };
|
||||
u32x wordr3[4] = { 0 };
|
||||
|
||||
wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
|
||||
wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
|
||||
wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
|
||||
wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
|
||||
wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
|
||||
wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
|
||||
wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
|
||||
wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
|
||||
|
||||
if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
|
||||
}
|
||||
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = wordl0[0] | wordr0[0];
|
||||
w0[1] = wordl0[1] | wordr0[1];
|
||||
w0[2] = wordl0[2] | wordr0[2];
|
||||
w0[3] = wordl0[3] | wordr0[3];
|
||||
w1[0] = wordl1[0] | wordr1[0];
|
||||
w1[1] = wordl1[1] | wordr1[1];
|
||||
w1[2] = wordl1[2] | wordr1[2];
|
||||
w1[3] = wordl1[3] | wordr1[3];
|
||||
w2[0] = wordl2[0] | wordr2[0];
|
||||
w2[1] = wordl2[1] | wordr2[1];
|
||||
w2[2] = wordl2[2] | wordr2[2];
|
||||
w2[3] = wordl2[3] | wordr2[3];
|
||||
w3[0] = wordl3[0] | wordr3[0];
|
||||
w3[1] = wordl3[1] | wordr3[1];
|
||||
w3[2] = pw_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
w0[0] = a;
|
||||
w0[1] = b & 0xff; w0[1] |= 0x8000;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 5 * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
a = MD5M_A;
|
||||
b = MD5M_B;
|
||||
c = MD5M_C;
|
||||
d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
b &= 0xff;
|
||||
c = 0;
|
||||
d = 0;
|
||||
|
||||
COMPARE_M_SIMD (a, b, c, d);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_m08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_m16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_l_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos) & 63;
|
||||
|
||||
const u32x pw_len = (pw_l_len + pw_r_len) & 63;
|
||||
|
||||
/**
|
||||
* concat password candidate
|
||||
*/
|
||||
|
||||
u32x wordl0[4] = { 0 };
|
||||
u32x wordl1[4] = { 0 };
|
||||
u32x wordl2[4] = { 0 };
|
||||
u32x wordl3[4] = { 0 };
|
||||
|
||||
wordl0[0] = pw_buf0[0];
|
||||
wordl0[1] = pw_buf0[1];
|
||||
wordl0[2] = pw_buf0[2];
|
||||
wordl0[3] = pw_buf0[3];
|
||||
wordl1[0] = pw_buf1[0];
|
||||
wordl1[1] = pw_buf1[1];
|
||||
wordl1[2] = pw_buf1[2];
|
||||
wordl1[3] = pw_buf1[3];
|
||||
|
||||
u32x wordr0[4] = { 0 };
|
||||
u32x wordr1[4] = { 0 };
|
||||
u32x wordr2[4] = { 0 };
|
||||
u32x wordr3[4] = { 0 };
|
||||
|
||||
wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
|
||||
wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
|
||||
wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
|
||||
wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
|
||||
wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
|
||||
wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
|
||||
wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
|
||||
wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
|
||||
|
||||
if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
|
||||
}
|
||||
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = wordl0[0] | wordr0[0];
|
||||
w0[1] = wordl0[1] | wordr0[1];
|
||||
w0[2] = wordl0[2] | wordr0[2];
|
||||
w0[3] = wordl0[3] | wordr0[3];
|
||||
w1[0] = wordl1[0] | wordr1[0];
|
||||
w1[1] = wordl1[1] | wordr1[1];
|
||||
w1[2] = wordl1[2] | wordr1[2];
|
||||
w1[3] = wordl1[3] | wordr1[3];
|
||||
w2[0] = wordl2[0] | wordr2[0];
|
||||
w2[1] = wordl2[1] | wordr2[1];
|
||||
w2[2] = wordl2[2] | wordr2[2];
|
||||
w2[3] = wordl2[3] | wordr2[3];
|
||||
w3[0] = wordl3[0] | wordr3[0];
|
||||
w3[1] = wordl3[1] | wordr3[1];
|
||||
w3[2] = pw_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
w0[0] = a;
|
||||
w0[1] = b & 0xff; w0[1] |= 0x8000;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 5 * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
a = MD5M_A;
|
||||
b = MD5M_B;
|
||||
c = MD5M_C;
|
||||
d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
|
||||
if (MATCHES_NONE_VS (a, search[0])) continue;
|
||||
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
b &= 0xff;
|
||||
c = 0;
|
||||
d = 0;
|
||||
|
||||
COMPARE_S_SIMD (a, b, c, d);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
137
OpenCL/m24700_a1-pure.cl
Normal file
137
OpenCL/m24700_a1-pure.cl
Normal file
@ -0,0 +1,137 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
//#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_scalar.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24700_mxx (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
md5_ctx_t ctx0;
|
||||
|
||||
md5_init (&ctx0);
|
||||
|
||||
md5_update_global (&ctx0, pws[gid].i, pws[gid].pw_len);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
md5_ctx_t ctx1 = ctx0;
|
||||
|
||||
md5_update_global (&ctx1, combs_buf[il_pos].i, combs_buf[il_pos].pw_len);
|
||||
|
||||
md5_final (&ctx1);
|
||||
|
||||
const u32 a = ctx1.h[0];
|
||||
const u32 b = ctx1.h[1] & 0xff;
|
||||
|
||||
md5_ctx_t ctx;
|
||||
|
||||
md5_init (&ctx);
|
||||
|
||||
ctx.w0[0] = a;
|
||||
ctx.w0[1] = b;
|
||||
|
||||
ctx.len = 5;
|
||||
|
||||
md5_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.h[DGST_R0];
|
||||
const u32 r1 = ctx.h[DGST_R1] & 0xff;
|
||||
const u32 r2 = 0;
|
||||
const u32 r3 = 0;
|
||||
|
||||
COMPARE_M_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_sxx (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
md5_ctx_t ctx0;
|
||||
|
||||
md5_init (&ctx0);
|
||||
|
||||
md5_update_global (&ctx0, pws[gid].i, pws[gid].pw_len);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
md5_ctx_t ctx1 = ctx0;
|
||||
|
||||
md5_update_global (&ctx1, combs_buf[il_pos].i, combs_buf[il_pos].pw_len);
|
||||
|
||||
md5_final (&ctx1);
|
||||
|
||||
const u32 a = ctx1.h[0];
|
||||
const u32 b = ctx1.h[1] & 0xff;
|
||||
|
||||
md5_ctx_t ctx;
|
||||
|
||||
md5_init (&ctx);
|
||||
|
||||
ctx.w0[0] = a;
|
||||
ctx.w0[1] = b;
|
||||
|
||||
ctx.len = 5;
|
||||
|
||||
md5_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.h[DGST_R0];
|
||||
const u32 r1 = ctx.h[DGST_R1] & 0xff;
|
||||
const u32 r2 = 0;
|
||||
const u32 r3 = 0;
|
||||
|
||||
COMPARE_S_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
784
OpenCL/m24700_a3-optimized.cl
Normal file
784
OpenCL/m24700_a3-optimized.cl
Normal file
@ -0,0 +1,784 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
DECLSPEC void m24700m (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32 w0l = w0[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = ix_create_bft (bfs_buf, il_pos);
|
||||
|
||||
const u32x w0lr = w0l | w0r;
|
||||
|
||||
u32x w0_t[4];
|
||||
u32x w1_t[4];
|
||||
u32x w2_t[4];
|
||||
u32x w3_t[4];
|
||||
|
||||
w0_t[0] = w0lr;
|
||||
w0_t[1] = w0[1];
|
||||
w0_t[2] = w0[2];
|
||||
w0_t[3] = w0[3];
|
||||
w1_t[0] = w1[0];
|
||||
w1_t[1] = w1[1];
|
||||
w1_t[2] = w1[2];
|
||||
w1_t[3] = w1[3];
|
||||
w2_t[0] = w2[0];
|
||||
w2_t[1] = w2[1];
|
||||
w2_t[2] = w2[2];
|
||||
w2_t[3] = w2[3];
|
||||
w3_t[0] = w3[0];
|
||||
w3_t[1] = w3[1];
|
||||
w3_t[2] = w3[2];
|
||||
w3_t[3] = w3[3];
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
w0_t[0] = a;
|
||||
w0_t[1] = b & 0xff; w0_t[1] |= 0x8000;
|
||||
w0_t[2] = 0;
|
||||
w0_t[3] = 0;
|
||||
w1_t[0] = 0;
|
||||
w1_t[1] = 0;
|
||||
w1_t[2] = 0;
|
||||
w1_t[3] = 0;
|
||||
w2_t[0] = 0;
|
||||
w2_t[1] = 0;
|
||||
w2_t[2] = 0;
|
||||
w2_t[3] = 0;
|
||||
w3_t[0] = 0;
|
||||
w3_t[1] = 0;
|
||||
w3_t[2] = 5 * 8;
|
||||
w3_t[3] = 0;
|
||||
|
||||
a = MD5M_A;
|
||||
b = MD5M_B;
|
||||
c = MD5M_C;
|
||||
d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
|
||||
|
||||
b &= 0xff;
|
||||
c = 0;
|
||||
d = 0;
|
||||
|
||||
COMPARE_M_SIMD (a, b, c, d);
|
||||
}
|
||||
}
|
||||
|
||||
DECLSPEC void m24700s (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32 w0l = w0[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = ix_create_bft (bfs_buf, il_pos);
|
||||
|
||||
const u32x w0lr = w0l | w0r;
|
||||
|
||||
u32x w0_t[4];
|
||||
u32x w1_t[4];
|
||||
u32x w2_t[4];
|
||||
u32x w3_t[4];
|
||||
|
||||
w0_t[0] = w0lr;
|
||||
w0_t[1] = w0[1];
|
||||
w0_t[2] = w0[2];
|
||||
w0_t[3] = w0[3];
|
||||
w1_t[0] = w1[0];
|
||||
w1_t[1] = w1[1];
|
||||
w1_t[2] = w1[2];
|
||||
w1_t[3] = w1[3];
|
||||
w2_t[0] = w2[0];
|
||||
w2_t[1] = w2[1];
|
||||
w2_t[2] = w2[2];
|
||||
w2_t[3] = w2[3];
|
||||
w3_t[0] = w3[0];
|
||||
w3_t[1] = w3[1];
|
||||
w3_t[2] = w3[2];
|
||||
w3_t[3] = w3[3];
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
w0_t[0] = a;
|
||||
w0_t[1] = b & 0xff; w0_t[1] |= 0x8000;
|
||||
w0_t[2] = 0;
|
||||
w0_t[3] = 0;
|
||||
w1_t[0] = 0;
|
||||
w1_t[1] = 0;
|
||||
w1_t[2] = 0;
|
||||
w1_t[3] = 0;
|
||||
w2_t[0] = 0;
|
||||
w2_t[1] = 0;
|
||||
w2_t[2] = 0;
|
||||
w2_t[3] = 0;
|
||||
w3_t[0] = 0;
|
||||
w3_t[1] = 0;
|
||||
w3_t[2] = 5 * 8;
|
||||
w3_t[3] = 0;
|
||||
|
||||
a = MD5M_A;
|
||||
b = MD5M_B;
|
||||
c = MD5M_C;
|
||||
d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0_t[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0_t[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0_t[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0_t[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1_t[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1_t[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1_t[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1_t[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2_t[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2_t[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2_t[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2_t[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3_t[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3_t[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3_t[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3_t[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0_t[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1_t[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2_t[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0_t[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1_t[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2_t[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3_t[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1_t[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2_t[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3_t[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0_t[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2_t[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3_t[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0_t[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1_t[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3_t[0], MD5C1f, MD5S13);
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1_t[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2_t[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2_t[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3_t[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0_t[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1_t[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1_t[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2_t[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3_t[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0_t[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0_t[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1_t[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2_t[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3_t[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3_t[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0_t[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0_t[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1_t[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3_t[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1_t[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3_t[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0_t[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2_t[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0_t[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2_t[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3_t[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1_t[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3_t[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1_t[0], MD5C3c, MD5S30);
|
||||
|
||||
if (MATCHES_NONE_VS (a, search[0])) continue;
|
||||
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2_t[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0_t[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2_t[1], MD5C3f, MD5S33);
|
||||
|
||||
b &= 0xff;
|
||||
c = 0;
|
||||
d = 0;
|
||||
|
||||
COMPARE_S_SIMD (a, b, c, d);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_m04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = pws[gid].i[14];
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_m08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = pws[gid].i[14];
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_m16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = pws[gid].i[ 8];
|
||||
w2[1] = pws[gid].i[ 9];
|
||||
w2[2] = pws[gid].i[10];
|
||||
w2[3] = pws[gid].i[11];
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = pws[gid].i[12];
|
||||
w3[1] = pws[gid].i[13];
|
||||
w3[2] = pws[gid].i[14];
|
||||
w3[3] = pws[gid].i[15];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = pws[gid].i[14];
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = pws[gid].i[14];
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_s16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = pws[gid].i[ 8];
|
||||
w2[1] = pws[gid].i[ 9];
|
||||
w2[2] = pws[gid].i[10];
|
||||
w2[3] = pws[gid].i[11];
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = pws[gid].i[12];
|
||||
w3[1] = pws[gid].i[13];
|
||||
w3[2] = pws[gid].i[14];
|
||||
w3[3] = pws[gid].i[15];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
163
OpenCL/m24700_a3-pure.cl
Normal file
163
OpenCL/m24700_a3-pure.cl
Normal file
@ -0,0 +1,163 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24700_mxx (KERN_ATTR_VECTOR ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len;
|
||||
|
||||
u32x w[64] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1)
|
||||
{
|
||||
w[idx] = pws[gid].i[idx];
|
||||
}
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32x w0l = w[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
|
||||
|
||||
const u32x w0 = w0l | w0r;
|
||||
|
||||
w[0] = w0;
|
||||
|
||||
md5_ctx_vector_t ctx0;
|
||||
|
||||
md5_init_vector (&ctx0);
|
||||
|
||||
md5_update_vector (&ctx0, w, pw_len);
|
||||
|
||||
md5_final_vector (&ctx0);
|
||||
|
||||
const u32x a = ctx0.h[0];
|
||||
const u32x b = ctx0.h[1] & 0xff;
|
||||
|
||||
md5_ctx_vector_t ctx;
|
||||
|
||||
md5_init_vector (&ctx);
|
||||
|
||||
ctx.w0[0] = a;
|
||||
ctx.w0[1] = b;
|
||||
|
||||
ctx.len = 5;
|
||||
|
||||
md5_final_vector (&ctx);
|
||||
|
||||
const u32x r0 = ctx.h[DGST_R0];
|
||||
const u32x r1 = ctx.h[DGST_R1] & 0xff;
|
||||
const u32x r2 = 0;
|
||||
const u32x r3 = 0;
|
||||
|
||||
COMPARE_M_SIMD (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24700_sxx (KERN_ATTR_VECTOR ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len;
|
||||
|
||||
u32x w[64] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1)
|
||||
{
|
||||
w[idx] = pws[gid].i[idx];
|
||||
}
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32x w0l = w[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
|
||||
|
||||
const u32x w0 = w0l | w0r;
|
||||
|
||||
w[0] = w0;
|
||||
|
||||
md5_ctx_vector_t ctx0;
|
||||
|
||||
md5_init_vector (&ctx0);
|
||||
|
||||
md5_update_vector (&ctx0, w, pw_len);
|
||||
|
||||
md5_final_vector (&ctx0);
|
||||
|
||||
const u32x a = ctx0.h[0];
|
||||
const u32x b = ctx0.h[1] & 0xff;
|
||||
|
||||
md5_ctx_vector_t ctx;
|
||||
|
||||
md5_init_vector (&ctx);
|
||||
|
||||
ctx.w0[0] = a;
|
||||
ctx.w0[1] = b;
|
||||
|
||||
ctx.len = 5;
|
||||
|
||||
md5_final_vector (&ctx);
|
||||
|
||||
const u32x r0 = ctx.h[DGST_R0];
|
||||
const u32x r1 = ctx.h[DGST_R1] & 0xff;
|
||||
const u32x r2 = 0;
|
||||
const u32x r3 = 0;
|
||||
|
||||
COMPARE_S_SIMD (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
362
OpenCL/m24800_a0-optimized.cl
Normal file
362
OpenCL/m24800_a0-optimized.cl
Normal file
@ -0,0 +1,362 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_rp_optimized.h"
|
||||
#include "inc_rp_optimized.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha1.cl"
|
||||
#endif
|
||||
|
||||
DECLSPEC void hmac_sha1_pad (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad)
|
||||
{
|
||||
w0[0] = w0[0] ^ 0x36363636;
|
||||
w0[1] = w0[1] ^ 0x36363636;
|
||||
w0[2] = w0[2] ^ 0x36363636;
|
||||
w0[3] = w0[3] ^ 0x36363636;
|
||||
w1[0] = w1[0] ^ 0x36363636;
|
||||
w1[1] = w1[1] ^ 0x36363636;
|
||||
w1[2] = w1[2] ^ 0x36363636;
|
||||
w1[3] = w1[3] ^ 0x36363636;
|
||||
w2[0] = w2[0] ^ 0x36363636;
|
||||
w2[1] = w2[1] ^ 0x36363636;
|
||||
w2[2] = w2[2] ^ 0x36363636;
|
||||
w2[3] = w2[3] ^ 0x36363636;
|
||||
w3[0] = w3[0] ^ 0x36363636;
|
||||
w3[1] = w3[1] ^ 0x36363636;
|
||||
w3[2] = w3[2] ^ 0x36363636;
|
||||
w3[3] = w3[3] ^ 0x36363636;
|
||||
|
||||
ipad[0] = SHA1M_A;
|
||||
ipad[1] = SHA1M_B;
|
||||
ipad[2] = SHA1M_C;
|
||||
ipad[3] = SHA1M_D;
|
||||
ipad[4] = SHA1M_E;
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, ipad);
|
||||
|
||||
w0[0] = w0[0] ^ 0x6a6a6a6a;
|
||||
w0[1] = w0[1] ^ 0x6a6a6a6a;
|
||||
w0[2] = w0[2] ^ 0x6a6a6a6a;
|
||||
w0[3] = w0[3] ^ 0x6a6a6a6a;
|
||||
w1[0] = w1[0] ^ 0x6a6a6a6a;
|
||||
w1[1] = w1[1] ^ 0x6a6a6a6a;
|
||||
w1[2] = w1[2] ^ 0x6a6a6a6a;
|
||||
w1[3] = w1[3] ^ 0x6a6a6a6a;
|
||||
w2[0] = w2[0] ^ 0x6a6a6a6a;
|
||||
w2[1] = w2[1] ^ 0x6a6a6a6a;
|
||||
w2[2] = w2[2] ^ 0x6a6a6a6a;
|
||||
w2[3] = w2[3] ^ 0x6a6a6a6a;
|
||||
w3[0] = w3[0] ^ 0x6a6a6a6a;
|
||||
w3[1] = w3[1] ^ 0x6a6a6a6a;
|
||||
w3[2] = w3[2] ^ 0x6a6a6a6a;
|
||||
w3[3] = w3[3] ^ 0x6a6a6a6a;
|
||||
|
||||
opad[0] = SHA1M_A;
|
||||
opad[1] = SHA1M_B;
|
||||
opad[2] = SHA1M_C;
|
||||
opad[3] = SHA1M_D;
|
||||
opad[4] = SHA1M_E;
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, opad);
|
||||
}
|
||||
|
||||
DECLSPEC void hmac_sha1_run (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad, u32x *digest)
|
||||
{
|
||||
digest[0] = ipad[0];
|
||||
digest[1] = ipad[1];
|
||||
digest[2] = ipad[2];
|
||||
digest[3] = ipad[3];
|
||||
digest[4] = ipad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
|
||||
w0[0] = digest[0];
|
||||
w0[1] = digest[1];
|
||||
w0[2] = digest[2];
|
||||
w0[3] = digest[3];
|
||||
w1[0] = digest[4];
|
||||
w1[1] = 0x80000000;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = (64 + 20) * 8;
|
||||
|
||||
digest[0] = opad[0];
|
||||
digest[1] = opad[1];
|
||||
digest[2] = opad[2];
|
||||
digest[3] = opad[3];
|
||||
digest[4] = opad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m04 (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
u32x w0[4] = { 0 };
|
||||
u32x w1[4] = { 0 };
|
||||
u32x w2[4] = { 0 };
|
||||
u32x w3[4] = { 0 };
|
||||
|
||||
const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
|
||||
|
||||
const u32x out_len2 = out_len * 2;
|
||||
|
||||
w0[0] = hc_swap32 (w0[0]);
|
||||
w0[1] = hc_swap32 (w0[1]);
|
||||
w0[2] = hc_swap32 (w0[2]);
|
||||
w0[3] = hc_swap32 (w0[3]);
|
||||
w1[0] = hc_swap32 (w1[0]);
|
||||
w1[1] = hc_swap32 (w1[1]);
|
||||
w1[2] = hc_swap32 (w1[2]);
|
||||
w1[3] = hc_swap32 (w1[3]);
|
||||
|
||||
make_utf16beN (w1, w2, w3);
|
||||
make_utf16beN (w0, w0, w1);
|
||||
|
||||
u32x x0_t[4];
|
||||
u32x x1_t[4];
|
||||
u32x x2_t[4];
|
||||
u32x x3_t[4];
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
u32x ipad[5];
|
||||
u32x opad[5];
|
||||
|
||||
hmac_sha1_pad (x0_t, x1_t, x2_t, x3_t, ipad, opad);
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
append_0x80_4x4_VV (x0_t, x1_t, x2_t, x3_t, out_len2 ^ 3);
|
||||
|
||||
x3_t[2] = 0;
|
||||
x3_t[3] = (64 + out_len2) * 8;
|
||||
|
||||
u32x digest[5];
|
||||
|
||||
hmac_sha1_run (x0_t, x1_t, x2_t, x3_t, ipad, opad, digest);
|
||||
|
||||
COMPARE_M_SIMD (digest[3], digest[4], digest[2], digest[1]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m08 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m16 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s04 (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
u32x w0[4] = { 0 };
|
||||
u32x w1[4] = { 0 };
|
||||
u32x w2[4] = { 0 };
|
||||
u32x w3[4] = { 0 };
|
||||
|
||||
const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
|
||||
|
||||
const u32x out_len2 = out_len * 2;
|
||||
|
||||
w0[0] = hc_swap32 (w0[0]);
|
||||
w0[1] = hc_swap32 (w0[1]);
|
||||
w0[2] = hc_swap32 (w0[2]);
|
||||
w0[3] = hc_swap32 (w0[3]);
|
||||
w1[0] = hc_swap32 (w1[0]);
|
||||
w1[1] = hc_swap32 (w1[1]);
|
||||
w1[2] = hc_swap32 (w1[2]);
|
||||
w1[3] = hc_swap32 (w1[3]);
|
||||
|
||||
make_utf16beN (w1, w2, w3);
|
||||
make_utf16beN (w0, w0, w1);
|
||||
|
||||
u32x x0_t[4];
|
||||
u32x x1_t[4];
|
||||
u32x x2_t[4];
|
||||
u32x x3_t[4];
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
u32x ipad[5];
|
||||
u32x opad[5];
|
||||
|
||||
hmac_sha1_pad (x0_t, x1_t, x2_t, x3_t, ipad, opad);
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
append_0x80_4x4_VV (x0_t, x1_t, x2_t, x3_t, out_len2 ^ 3);
|
||||
|
||||
x3_t[2] = 0;
|
||||
x3_t[3] = (64 + out_len2) * 8;
|
||||
|
||||
u32x digest[5];
|
||||
|
||||
hmac_sha1_run (x0_t, x1_t, x2_t, x3_t, ipad, opad, digest);
|
||||
|
||||
COMPARE_S_SIMD (digest[3], digest[4], digest[2], digest[1]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s08 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s16 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
147
OpenCL/m24800_a0-pure.cl
Normal file
147
OpenCL/m24800_a0-pure.cl
Normal file
@ -0,0 +1,147 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
//#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_rp.h"
|
||||
#include "inc_rp.cl"
|
||||
#include "inc_scalar.cl"
|
||||
#include "inc_hash_sha1.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24800_mxx (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
COPY_PW (pws[gid]);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
pw_t tmp = PASTE_PW;
|
||||
|
||||
tmp.pw_len = apply_rules (rules_buf[il_pos].cmds, tmp.i, tmp.pw_len);
|
||||
|
||||
// swap endian
|
||||
for (u32 i = 0, idx = 0; i < tmp.pw_len; i += 4, idx += 1)
|
||||
{
|
||||
tmp.i[idx] = hc_swap32 (tmp.i[idx]);
|
||||
}
|
||||
|
||||
u32 t[128] = { 0 };
|
||||
|
||||
// make it unicode.
|
||||
for (u32 i = 0, idx = 0; idx < tmp.pw_len; i += 2, idx += 1)
|
||||
{
|
||||
make_utf16beN (&tmp.i[idx], &t[i], &t[i+1]);
|
||||
}
|
||||
|
||||
// hash time
|
||||
sha1_hmac_ctx_t ctx;
|
||||
|
||||
sha1_hmac_init (&ctx, t, tmp.pw_len * 2);
|
||||
|
||||
sha1_hmac_update (&ctx, t, tmp.pw_len * 2);
|
||||
|
||||
sha1_hmac_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.opad.h[DGST_R0];
|
||||
const u32 r1 = ctx.opad.h[DGST_R1];
|
||||
const u32 r2 = ctx.opad.h[DGST_R2];
|
||||
const u32 r3 = ctx.opad.h[DGST_R3];
|
||||
|
||||
COMPARE_M_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_sxx (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
COPY_PW (pws[gid]);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
pw_t tmp = PASTE_PW;
|
||||
|
||||
tmp.pw_len = apply_rules (rules_buf[il_pos].cmds, tmp.i, tmp.pw_len);
|
||||
|
||||
// swap endian
|
||||
for (u32 i = 0, idx = 0; i < tmp.pw_len; i += 4, idx += 1)
|
||||
{
|
||||
tmp.i[idx] = hc_swap32 (tmp.i[idx]);
|
||||
}
|
||||
|
||||
u32 t[128] = { 0 };
|
||||
|
||||
// make it unicode.
|
||||
for (u32 i = 0, idx = 0; idx < tmp.pw_len; i += 2, idx += 1)
|
||||
{
|
||||
make_utf16beN (&tmp.i[idx], &t[i], &t[i+1]);
|
||||
}
|
||||
|
||||
// hash time
|
||||
sha1_hmac_ctx_t ctx;
|
||||
|
||||
sha1_hmac_init (&ctx, t, tmp.pw_len * 2);
|
||||
|
||||
sha1_hmac_update (&ctx, t, tmp.pw_len * 2);
|
||||
|
||||
sha1_hmac_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.opad.h[DGST_R0];
|
||||
const u32 r1 = ctx.opad.h[DGST_R1];
|
||||
const u32 r2 = ctx.opad.h[DGST_R2];
|
||||
const u32 r3 = ctx.opad.h[DGST_R3];
|
||||
|
||||
COMPARE_S_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
464
OpenCL/m24800_a1-optimized.cl
Normal file
464
OpenCL/m24800_a1-optimized.cl
Normal file
@ -0,0 +1,464 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha1.cl"
|
||||
#endif
|
||||
|
||||
DECLSPEC void hmac_sha1_pad (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad)
|
||||
{
|
||||
w0[0] = w0[0] ^ 0x36363636;
|
||||
w0[1] = w0[1] ^ 0x36363636;
|
||||
w0[2] = w0[2] ^ 0x36363636;
|
||||
w0[3] = w0[3] ^ 0x36363636;
|
||||
w1[0] = w1[0] ^ 0x36363636;
|
||||
w1[1] = w1[1] ^ 0x36363636;
|
||||
w1[2] = w1[2] ^ 0x36363636;
|
||||
w1[3] = w1[3] ^ 0x36363636;
|
||||
w2[0] = w2[0] ^ 0x36363636;
|
||||
w2[1] = w2[1] ^ 0x36363636;
|
||||
w2[2] = w2[2] ^ 0x36363636;
|
||||
w2[3] = w2[3] ^ 0x36363636;
|
||||
w3[0] = w3[0] ^ 0x36363636;
|
||||
w3[1] = w3[1] ^ 0x36363636;
|
||||
w3[2] = w3[2] ^ 0x36363636;
|
||||
w3[3] = w3[3] ^ 0x36363636;
|
||||
|
||||
ipad[0] = SHA1M_A;
|
||||
ipad[1] = SHA1M_B;
|
||||
ipad[2] = SHA1M_C;
|
||||
ipad[3] = SHA1M_D;
|
||||
ipad[4] = SHA1M_E;
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, ipad);
|
||||
|
||||
w0[0] = w0[0] ^ 0x6a6a6a6a;
|
||||
w0[1] = w0[1] ^ 0x6a6a6a6a;
|
||||
w0[2] = w0[2] ^ 0x6a6a6a6a;
|
||||
w0[3] = w0[3] ^ 0x6a6a6a6a;
|
||||
w1[0] = w1[0] ^ 0x6a6a6a6a;
|
||||
w1[1] = w1[1] ^ 0x6a6a6a6a;
|
||||
w1[2] = w1[2] ^ 0x6a6a6a6a;
|
||||
w1[3] = w1[3] ^ 0x6a6a6a6a;
|
||||
w2[0] = w2[0] ^ 0x6a6a6a6a;
|
||||
w2[1] = w2[1] ^ 0x6a6a6a6a;
|
||||
w2[2] = w2[2] ^ 0x6a6a6a6a;
|
||||
w2[3] = w2[3] ^ 0x6a6a6a6a;
|
||||
w3[0] = w3[0] ^ 0x6a6a6a6a;
|
||||
w3[1] = w3[1] ^ 0x6a6a6a6a;
|
||||
w3[2] = w3[2] ^ 0x6a6a6a6a;
|
||||
w3[3] = w3[3] ^ 0x6a6a6a6a;
|
||||
|
||||
opad[0] = SHA1M_A;
|
||||
opad[1] = SHA1M_B;
|
||||
opad[2] = SHA1M_C;
|
||||
opad[3] = SHA1M_D;
|
||||
opad[4] = SHA1M_E;
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, opad);
|
||||
}
|
||||
|
||||
DECLSPEC void hmac_sha1_run (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad, u32x *digest)
|
||||
{
|
||||
digest[0] = ipad[0];
|
||||
digest[1] = ipad[1];
|
||||
digest[2] = ipad[2];
|
||||
digest[3] = ipad[3];
|
||||
digest[4] = ipad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
|
||||
w0[0] = digest[0];
|
||||
w0[1] = digest[1];
|
||||
w0[2] = digest[2];
|
||||
w0[3] = digest[3];
|
||||
w1[0] = digest[4];
|
||||
w1[1] = 0x80000000;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = (64 + 20) * 8;
|
||||
|
||||
digest[0] = opad[0];
|
||||
digest[1] = opad[1];
|
||||
digest[2] = opad[2];
|
||||
digest[3] = opad[3];
|
||||
digest[4] = opad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_l_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos) & 63;
|
||||
|
||||
const u32x pw_len = (pw_l_len + pw_r_len) & 63;
|
||||
|
||||
const u32x pw_len2 = pw_len * 2;
|
||||
|
||||
/**
|
||||
* concat password candidate
|
||||
*/
|
||||
|
||||
u32x wordl0[4] = { 0 };
|
||||
u32x wordl1[4] = { 0 };
|
||||
u32x wordl2[4] = { 0 };
|
||||
u32x wordl3[4] = { 0 };
|
||||
|
||||
wordl0[0] = pw_buf0[0];
|
||||
wordl0[1] = pw_buf0[1];
|
||||
wordl0[2] = pw_buf0[2];
|
||||
wordl0[3] = pw_buf0[3];
|
||||
wordl1[0] = pw_buf1[0];
|
||||
wordl1[1] = pw_buf1[1];
|
||||
wordl1[2] = pw_buf1[2];
|
||||
wordl1[3] = pw_buf1[3];
|
||||
|
||||
u32x wordr0[4] = { 0 };
|
||||
u32x wordr1[4] = { 0 };
|
||||
u32x wordr2[4] = { 0 };
|
||||
u32x wordr3[4] = { 0 };
|
||||
|
||||
wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
|
||||
wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
|
||||
wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
|
||||
wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
|
||||
wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
|
||||
wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
|
||||
wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
|
||||
wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
|
||||
|
||||
if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
|
||||
}
|
||||
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = wordl0[0] | wordr0[0];
|
||||
w0[1] = wordl0[1] | wordr0[1];
|
||||
w0[2] = wordl0[2] | wordr0[2];
|
||||
w0[3] = wordl0[3] | wordr0[3];
|
||||
w1[0] = wordl1[0] | wordr1[0];
|
||||
w1[1] = wordl1[1] | wordr1[1];
|
||||
w1[2] = wordl1[2] | wordr1[2];
|
||||
w1[3] = wordl1[3] | wordr1[3];
|
||||
|
||||
w0[0] = hc_swap32 (w0[0]);
|
||||
w0[1] = hc_swap32 (w0[1]);
|
||||
w0[2] = hc_swap32 (w0[2]);
|
||||
w0[3] = hc_swap32 (w0[3]);
|
||||
w1[0] = hc_swap32 (w1[0]);
|
||||
w1[1] = hc_swap32 (w1[1]);
|
||||
w1[2] = hc_swap32 (w1[2]);
|
||||
w1[3] = hc_swap32 (w1[3]);
|
||||
|
||||
make_utf16beN (w1, w2, w3);
|
||||
make_utf16beN (w0, w0, w1);
|
||||
|
||||
u32x x0_t[4];
|
||||
u32x x1_t[4];
|
||||
u32x x2_t[4];
|
||||
u32x x3_t[4];
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
u32x ipad[5];
|
||||
u32x opad[5];
|
||||
|
||||
hmac_sha1_pad (x0_t, x1_t, x2_t, x3_t, ipad, opad);
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
append_0x80_4x4_VV (x0_t, x1_t, x2_t, x3_t, pw_len2 ^ 3);
|
||||
|
||||
x3_t[2] = 0;
|
||||
x3_t[3] = (64 + pw_len2) * 8;
|
||||
|
||||
u32x digest[5];
|
||||
|
||||
hmac_sha1_run (x0_t, x1_t, x2_t, x3_t, ipad, opad, digest);
|
||||
|
||||
COMPARE_M_SIMD (digest[3], digest[4], digest[2], digest[1]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_l_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos) & 63;
|
||||
|
||||
const u32x pw_len = (pw_l_len + pw_r_len) & 63;
|
||||
|
||||
const u32x pw_len2 = pw_len * 2;
|
||||
|
||||
/**
|
||||
* concat password candidate
|
||||
*/
|
||||
|
||||
u32x wordl0[4] = { 0 };
|
||||
u32x wordl1[4] = { 0 };
|
||||
u32x wordl2[4] = { 0 };
|
||||
u32x wordl3[4] = { 0 };
|
||||
|
||||
wordl0[0] = pw_buf0[0];
|
||||
wordl0[1] = pw_buf0[1];
|
||||
wordl0[2] = pw_buf0[2];
|
||||
wordl0[3] = pw_buf0[3];
|
||||
wordl1[0] = pw_buf1[0];
|
||||
wordl1[1] = pw_buf1[1];
|
||||
wordl1[2] = pw_buf1[2];
|
||||
wordl1[3] = pw_buf1[3];
|
||||
|
||||
u32x wordr0[4] = { 0 };
|
||||
u32x wordr1[4] = { 0 };
|
||||
u32x wordr2[4] = { 0 };
|
||||
u32x wordr3[4] = { 0 };
|
||||
|
||||
wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
|
||||
wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
|
||||
wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
|
||||
wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
|
||||
wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
|
||||
wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
|
||||
wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
|
||||
wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
|
||||
|
||||
if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
|
||||
}
|
||||
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = wordl0[0] | wordr0[0];
|
||||
w0[1] = wordl0[1] | wordr0[1];
|
||||
w0[2] = wordl0[2] | wordr0[2];
|
||||
w0[3] = wordl0[3] | wordr0[3];
|
||||
w1[0] = wordl1[0] | wordr1[0];
|
||||
w1[1] = wordl1[1] | wordr1[1];
|
||||
w1[2] = wordl1[2] | wordr1[2];
|
||||
w1[3] = wordl1[3] | wordr1[3];
|
||||
|
||||
w0[0] = hc_swap32 (w0[0]);
|
||||
w0[1] = hc_swap32 (w0[1]);
|
||||
w0[2] = hc_swap32 (w0[2]);
|
||||
w0[3] = hc_swap32 (w0[3]);
|
||||
w1[0] = hc_swap32 (w1[0]);
|
||||
w1[1] = hc_swap32 (w1[1]);
|
||||
w1[2] = hc_swap32 (w1[2]);
|
||||
w1[3] = hc_swap32 (w1[3]);
|
||||
|
||||
make_utf16beN (w1, w2, w3);
|
||||
make_utf16beN (w0, w0, w1);
|
||||
|
||||
u32x x0_t[4];
|
||||
u32x x1_t[4];
|
||||
u32x x2_t[4];
|
||||
u32x x3_t[4];
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
u32x ipad[5];
|
||||
u32x opad[5];
|
||||
|
||||
hmac_sha1_pad (x0_t, x1_t, x2_t, x3_t, ipad, opad);
|
||||
|
||||
x0_t[0] = w0[0];
|
||||
x0_t[1] = w0[1];
|
||||
x0_t[2] = w0[2];
|
||||
x0_t[3] = w0[3];
|
||||
x1_t[0] = w1[0];
|
||||
x1_t[1] = w1[1];
|
||||
x1_t[2] = w1[2];
|
||||
x1_t[3] = w1[3];
|
||||
x2_t[0] = w2[0];
|
||||
x2_t[1] = w2[1];
|
||||
x2_t[2] = w2[2];
|
||||
x2_t[3] = w2[3];
|
||||
x3_t[0] = w3[0];
|
||||
x3_t[1] = w3[1];
|
||||
x3_t[2] = w3[2];
|
||||
x3_t[3] = w3[3];
|
||||
|
||||
append_0x80_4x4_VV (x0_t, x1_t, x2_t, x3_t, pw_len2 ^ 3);
|
||||
|
||||
x3_t[2] = 0;
|
||||
x3_t[3] = (64 + pw_len2) * 8;
|
||||
|
||||
u32x digest[5];
|
||||
|
||||
hmac_sha1_run (x0_t, x1_t, x2_t, x3_t, ipad, opad, digest);
|
||||
|
||||
COMPARE_S_SIMD (digest[3], digest[4], digest[2], digest[1]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
181
OpenCL/m24800_a1-pure.cl
Normal file
181
OpenCL/m24800_a1-pure.cl
Normal file
@ -0,0 +1,181 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
//#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_scalar.cl"
|
||||
#include "inc_hash_sha1.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24800_mxx (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len;
|
||||
|
||||
u32 w[64] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1)
|
||||
{
|
||||
w[idx] = hc_swap32_S (pws[gid].i[idx]);
|
||||
}
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
const u32 comb_len = combs_buf[il_pos].pw_len;
|
||||
|
||||
u32 c[64];
|
||||
|
||||
#ifdef _unroll
|
||||
#pragma unroll
|
||||
#endif
|
||||
for (int idx = 0; idx < 64; idx++)
|
||||
{
|
||||
c[idx] = hc_swap32_S (combs_buf[il_pos].i[idx]);
|
||||
}
|
||||
|
||||
switch_buffer_by_offset_1x64_be_S (c, pw_len);
|
||||
|
||||
#ifdef _unroll
|
||||
#pragma unroll
|
||||
#endif
|
||||
for (int i = 0; i < 64; i++)
|
||||
{
|
||||
c[i] |= w[i];
|
||||
}
|
||||
|
||||
u32 t[128] = { 0 };
|
||||
|
||||
// make it unicode.
|
||||
for (u32 i = 0, idx = 0; idx < pw_len + comb_len; i += 2, idx += 1)
|
||||
{
|
||||
make_utf16beN (&c[idx], &t[i], &t[i+1]);
|
||||
}
|
||||
|
||||
sha1_hmac_ctx_t ctx;
|
||||
|
||||
sha1_hmac_init (&ctx, t, (pw_len + comb_len) * 2);
|
||||
|
||||
sha1_hmac_update (&ctx, t, (pw_len + comb_len) * 2);
|
||||
|
||||
sha1_hmac_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.opad.h[DGST_R0];
|
||||
const u32 r1 = ctx.opad.h[DGST_R1];
|
||||
const u32 r2 = ctx.opad.h[DGST_R2];
|
||||
const u32 r3 = ctx.opad.h[DGST_R3];
|
||||
|
||||
COMPARE_M_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_sxx (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len;
|
||||
|
||||
u32 w[64] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1)
|
||||
{
|
||||
w[idx] = hc_swap32_S (pws[gid].i[idx]);
|
||||
}
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos++)
|
||||
{
|
||||
const u32 comb_len = combs_buf[il_pos].pw_len;
|
||||
|
||||
u32 c[64];
|
||||
|
||||
#ifdef _unroll
|
||||
#pragma unroll
|
||||
#endif
|
||||
for (int idx = 0; idx < 64; idx++)
|
||||
{
|
||||
c[idx] = hc_swap32_S (combs_buf[il_pos].i[idx]);
|
||||
}
|
||||
|
||||
switch_buffer_by_offset_1x64_be_S (c, pw_len);
|
||||
|
||||
#ifdef _unroll
|
||||
#pragma unroll
|
||||
#endif
|
||||
for (int i = 0; i < 64; i++)
|
||||
{
|
||||
c[i] |= w[i];
|
||||
}
|
||||
|
||||
u32 t[128] = { 0 };
|
||||
|
||||
// make it unicode.
|
||||
for (u32 i = 0, idx = 0; idx < pw_len + comb_len; i += 2, idx += 1)
|
||||
{
|
||||
make_utf16beN (&c[idx], &t[i], &t[i+1]);
|
||||
}
|
||||
|
||||
sha1_hmac_ctx_t ctx;
|
||||
|
||||
sha1_hmac_init (&ctx, t, (pw_len + comb_len) * 2);
|
||||
|
||||
sha1_hmac_update (&ctx, t, (pw_len + comb_len) * 2);
|
||||
|
||||
sha1_hmac_final (&ctx);
|
||||
|
||||
const u32 r0 = ctx.opad.h[DGST_R0];
|
||||
const u32 r1 = ctx.opad.h[DGST_R1];
|
||||
const u32 r2 = ctx.opad.h[DGST_R2];
|
||||
const u32 r3 = ctx.opad.h[DGST_R3];
|
||||
|
||||
COMPARE_S_SCALAR (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
612
OpenCL/m24800_a3-optimized.cl
Normal file
612
OpenCL/m24800_a3-optimized.cl
Normal file
@ -0,0 +1,612 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha1.cl"
|
||||
#endif
|
||||
|
||||
DECLSPEC void hmac_sha1_pad (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad)
|
||||
{
|
||||
w0[0] = w0[0] ^ 0x36363636;
|
||||
w0[1] = w0[1] ^ 0x36363636;
|
||||
w0[2] = w0[2] ^ 0x36363636;
|
||||
w0[3] = w0[3] ^ 0x36363636;
|
||||
w1[0] = w1[0] ^ 0x36363636;
|
||||
w1[1] = w1[1] ^ 0x36363636;
|
||||
w1[2] = w1[2] ^ 0x36363636;
|
||||
w1[3] = w1[3] ^ 0x36363636;
|
||||
w2[0] = w2[0] ^ 0x36363636;
|
||||
w2[1] = w2[1] ^ 0x36363636;
|
||||
w2[2] = w2[2] ^ 0x36363636;
|
||||
w2[3] = w2[3] ^ 0x36363636;
|
||||
w3[0] = w3[0] ^ 0x36363636;
|
||||
w3[1] = w3[1] ^ 0x36363636;
|
||||
w3[2] = w3[2] ^ 0x36363636;
|
||||
w3[3] = w3[3] ^ 0x36363636;
|
||||
|
||||
ipad[0] = SHA1M_A;
|
||||
ipad[1] = SHA1M_B;
|
||||
ipad[2] = SHA1M_C;
|
||||
ipad[3] = SHA1M_D;
|
||||
ipad[4] = SHA1M_E;
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, ipad);
|
||||
|
||||
w0[0] = w0[0] ^ 0x6a6a6a6a;
|
||||
w0[1] = w0[1] ^ 0x6a6a6a6a;
|
||||
w0[2] = w0[2] ^ 0x6a6a6a6a;
|
||||
w0[3] = w0[3] ^ 0x6a6a6a6a;
|
||||
w1[0] = w1[0] ^ 0x6a6a6a6a;
|
||||
w1[1] = w1[1] ^ 0x6a6a6a6a;
|
||||
w1[2] = w1[2] ^ 0x6a6a6a6a;
|
||||
w1[3] = w1[3] ^ 0x6a6a6a6a;
|
||||
w2[0] = w2[0] ^ 0x6a6a6a6a;
|
||||
w2[1] = w2[1] ^ 0x6a6a6a6a;
|
||||
w2[2] = w2[2] ^ 0x6a6a6a6a;
|
||||
w2[3] = w2[3] ^ 0x6a6a6a6a;
|
||||
w3[0] = w3[0] ^ 0x6a6a6a6a;
|
||||
w3[1] = w3[1] ^ 0x6a6a6a6a;
|
||||
w3[2] = w3[2] ^ 0x6a6a6a6a;
|
||||
w3[3] = w3[3] ^ 0x6a6a6a6a;
|
||||
|
||||
opad[0] = SHA1M_A;
|
||||
opad[1] = SHA1M_B;
|
||||
opad[2] = SHA1M_C;
|
||||
opad[3] = SHA1M_D;
|
||||
opad[4] = SHA1M_E;
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, opad);
|
||||
}
|
||||
|
||||
DECLSPEC void hmac_sha1_run (u32x *w0, u32x *w1, u32x *w2, u32x *w3, u32x *ipad, u32x *opad, u32x *digest)
|
||||
{
|
||||
digest[0] = ipad[0];
|
||||
digest[1] = ipad[1];
|
||||
digest[2] = ipad[2];
|
||||
digest[3] = ipad[3];
|
||||
digest[4] = ipad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
|
||||
w0[0] = digest[0];
|
||||
w0[1] = digest[1];
|
||||
w0[2] = digest[2];
|
||||
w0[3] = digest[3];
|
||||
w1[0] = digest[4];
|
||||
w1[1] = 0x80000000;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = (64 + 20) * 8;
|
||||
|
||||
digest[0] = opad[0];
|
||||
digest[1] = opad[1];
|
||||
digest[2] = opad[2];
|
||||
digest[3] = opad[3];
|
||||
digest[4] = opad[4];
|
||||
|
||||
sha1_transform_vector (w0, w1, w2, w3, digest);
|
||||
}
|
||||
|
||||
DECLSPEC void m24800m (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32 w0l = w0[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = ix_create_bft (bfs_buf, il_pos);
|
||||
|
||||
const u32x w0lr = w0l | w0r;
|
||||
|
||||
/**
|
||||
* pads
|
||||
*/
|
||||
|
||||
u32x w0_t[4];
|
||||
u32x w1_t[4];
|
||||
u32x w2_t[4];
|
||||
u32x w3_t[4];
|
||||
|
||||
w0_t[0] = w0lr;
|
||||
w0_t[1] = w0[1];
|
||||
w0_t[2] = w0[2];
|
||||
w0_t[3] = w0[3];
|
||||
w1_t[0] = w1[0];
|
||||
w1_t[1] = w1[1];
|
||||
w1_t[2] = w1[2];
|
||||
w1_t[3] = w1[3];
|
||||
w2_t[0] = w2[0];
|
||||
w2_t[1] = w2[1];
|
||||
w2_t[2] = w2[2];
|
||||
w2_t[3] = w2[3];
|
||||
w3_t[0] = w3[0];
|
||||
w3_t[1] = w3[1];
|
||||
w3_t[2] = w3[2];
|
||||
w3_t[3] = w3[3];
|
||||
|
||||
//make_utf16beN (w1_t, w2_t, w3_t);
|
||||
//make_utf16beN (w0_t, w0_t, w1_t);
|
||||
|
||||
u32x x0_t[4];
|
||||
u32x x1_t[4];
|
||||
u32x x2_t[4];
|
||||
u32x x3_t[4];
|
||||
|
||||
x0_t[0] = w0_t[0];
|
||||
x0_t[1] = w0_t[1];
|
||||
x0_t[2] = w0_t[2];
|
||||
x0_t[3] = w0_t[3];
|
||||
x1_t[0] = w1_t[0];
|
||||
x1_t[1] = w1_t[1];
|
||||
x1_t[2] = w1_t[2];
|
||||
x1_t[3] = w1_t[3];
|
||||
x2_t[0] = w2_t[0];
|
||||
x2_t[1] = w2_t[1];
|
||||
x2_t[2] = w2_t[2];
|
||||
x2_t[3] = w2_t[3];
|
||||
x3_t[0] = w3_t[0];
|
||||
x3_t[1] = w3_t[1];
|
||||
x3_t[2] = w3_t[2];
|
||||
x3_t[3] = w3_t[3];
|
||||
|
||||
u32x ipad[5];
|
||||
u32x opad[5];
|
||||
|
||||
hmac_sha1_pad (x0_t, x1_t, x2_t, x3_t, ipad, opad);
|
||||
|
||||
x0_t[0] = w0_t[0];
|
||||
x0_t[1] = w0_t[1];
|
||||
x0_t[2] = w0_t[2];
|
||||
x0_t[3] = w0_t[3];
|
||||
x1_t[0] = w1_t[0];
|
||||
x1_t[1] = w1_t[1];
|
||||
x1_t[2] = w1_t[2];
|
||||
x1_t[3] = w1_t[3];
|
||||
x2_t[0] = w2_t[0];
|
||||
x2_t[1] = w2_t[1];
|
||||
x2_t[2] = w2_t[2];
|
||||
x2_t[3] = w2_t[3];
|
||||
x3_t[0] = w3_t[0];
|
||||
x3_t[1] = w3_t[1];
|
||||
x3_t[2] = w3_t[2];
|
||||
x3_t[3] = w3_t[3];
|
||||
|
||||
append_0x80_4x4 (x0_t, x1_t, x2_t, x3_t, pw_len ^ 3);
|
||||
|
||||
x3_t[2] = 0;
|
||||
x3_t[3] = (64 + pw_len) * 8;
|
||||
|
||||
u32x digest[5];
|
||||
|
||||
hmac_sha1_run (x0_t, x1_t, x2_t, x3_t, ipad, opad, digest);
|
||||
|
||||
COMPARE_M_SIMD (digest[3], digest[4], digest[2], digest[1]);
|
||||
}
|
||||
}
|
||||
|
||||
DECLSPEC void m24800s (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32 w0l = w0[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = ix_create_bft (bfs_buf, il_pos);
|
||||
|
||||
const u32x w0lr = w0l | w0r;
|
||||
|
||||
/**
|
||||
* pads
|
||||
*/
|
||||
|
||||
u32x w0_t[4];
|
||||
u32x w1_t[4];
|
||||
u32x w2_t[4];
|
||||
u32x w3_t[4];
|
||||
|
||||
w0_t[0] = w0lr;
|
||||
w0_t[1] = w0[1];
|
||||
w0_t[2] = w0[2];
|
||||
w0_t[3] = w0[3];
|
||||
w1_t[0] = w1[0];
|
||||
w1_t[1] = w1[1];
|
||||
w1_t[2] = w1[2];
|
||||
w1_t[3] = w1[3];
|
||||
w2_t[0] = w2[0];
|
||||
w2_t[1] = w2[1];
|
||||
w2_t[2] = w2[2];
|
||||
w2_t[3] = w2[3];
|
||||
w3_t[0] = w3[0];
|
||||
w3_t[1] = w3[1];
|
||||
w3_t[2] = w3[2];
|
||||
w3_t[3] = w3[3];
|
||||
|
||||
//make_utf16beN (w1_t, w2_t, w3_t);
|
||||
//make_utf16beN (w0_t, w0_t, w1_t);
|
||||
|
||||
u32x x0_t[4];
|
||||
u32x x1_t[4];
|
||||
u32x x2_t[4];
|
||||
u32x x3_t[4];
|
||||
|
||||
x0_t[0] = w0_t[0];
|
||||
x0_t[1] = w0_t[1];
|
||||
x0_t[2] = w0_t[2];
|
||||
x0_t[3] = w0_t[3];
|
||||
x1_t[0] = w1_t[0];
|
||||
x1_t[1] = w1_t[1];
|
||||
x1_t[2] = w1_t[2];
|
||||
x1_t[3] = w1_t[3];
|
||||
x2_t[0] = w2_t[0];
|
||||
x2_t[1] = w2_t[1];
|
||||
x2_t[2] = w2_t[2];
|
||||
x2_t[3] = w2_t[3];
|
||||
x3_t[0] = w3_t[0];
|
||||
x3_t[1] = w3_t[1];
|
||||
x3_t[2] = w3_t[2];
|
||||
x3_t[3] = w3_t[3];
|
||||
|
||||
u32x ipad[5];
|
||||
u32x opad[5];
|
||||
|
||||
hmac_sha1_pad (x0_t, x1_t, x2_t, x3_t, ipad, opad);
|
||||
|
||||
x0_t[0] = w0_t[0];
|
||||
x0_t[1] = w0_t[1];
|
||||
x0_t[2] = w0_t[2];
|
||||
x0_t[3] = w0_t[3];
|
||||
x1_t[0] = w1_t[0];
|
||||
x1_t[1] = w1_t[1];
|
||||
x1_t[2] = w1_t[2];
|
||||
x1_t[3] = w1_t[3];
|
||||
x2_t[0] = w2_t[0];
|
||||
x2_t[1] = w2_t[1];
|
||||
x2_t[2] = w2_t[2];
|
||||
x2_t[3] = w2_t[3];
|
||||
x3_t[0] = w3_t[0];
|
||||
x3_t[1] = w3_t[1];
|
||||
x3_t[2] = w3_t[2];
|
||||
x3_t[3] = w3_t[3];
|
||||
|
||||
append_0x80_4x4 (x0_t, x1_t, x2_t, x3_t, pw_len ^ 3);
|
||||
|
||||
x3_t[2] = 0;
|
||||
x3_t[3] = (64 + pw_len) * 8;
|
||||
|
||||
u32x digest[5];
|
||||
|
||||
hmac_sha1_run (x0_t, x1_t, x2_t, x3_t, ipad, opad, digest);
|
||||
|
||||
COMPARE_S_SIMD (digest[3], digest[4], digest[2], digest[1]);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_m16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = pws[gid].i[ 8];
|
||||
w2[1] = pws[gid].i[ 9];
|
||||
w2[2] = pws[gid].i[10];
|
||||
w2[3] = pws[gid].i[11];
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = pws[gid].i[12];
|
||||
w3[1] = pws[gid].i[13];
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_s16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = pws[gid].i[ 8];
|
||||
w2[1] = pws[gid].i[ 9];
|
||||
w2[2] = pws[gid].i[10];
|
||||
w2[3] = pws[gid].i[11];
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = pws[gid].i[12];
|
||||
w3[1] = pws[gid].i[13];
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
151
OpenCL/m24800_a3-pure.cl
Normal file
151
OpenCL/m24800_a3-pure.cl
Normal file
@ -0,0 +1,151 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha1.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24800_mxx (KERN_ATTR_VECTOR ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len;
|
||||
|
||||
u32x w[64] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1)
|
||||
{
|
||||
w[idx] = pws[gid].i[idx];
|
||||
}
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32x w0l = w[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
|
||||
|
||||
const u32x w0 = w0l | w0r;
|
||||
|
||||
w[0] = w0;
|
||||
|
||||
u32x t[128] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; idx < pw_len; i += 2, idx += 1)
|
||||
{
|
||||
make_utf16beN (&w[idx], &t[i + 0], &t[i + 1]);
|
||||
}
|
||||
|
||||
sha1_hmac_ctx_vector_t ctx;
|
||||
|
||||
sha1_hmac_init_vector (&ctx, t, pw_len * 2);
|
||||
|
||||
sha1_hmac_update_vector (&ctx, t, pw_len * 2);
|
||||
|
||||
sha1_hmac_final_vector (&ctx);
|
||||
|
||||
const u32x r0 = ctx.opad.h[DGST_R0];
|
||||
const u32x r1 = ctx.opad.h[DGST_R1];
|
||||
const u32x r2 = ctx.opad.h[DGST_R2];
|
||||
const u32x r3 = ctx.opad.h[DGST_R3];
|
||||
|
||||
COMPARE_M_SIMD (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24800_sxx (KERN_ATTR_VECTOR ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len;
|
||||
|
||||
u32x w[64] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1)
|
||||
{
|
||||
w[idx] = pws[gid].i[idx];
|
||||
}
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
u32x w0l = w[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = words_buf_r[il_pos / VECT_SIZE];
|
||||
|
||||
const u32x w0 = w0l | w0r;
|
||||
|
||||
w[0] = w0;
|
||||
|
||||
u32x t[128] = { 0 };
|
||||
|
||||
for (u32 i = 0, idx = 0; idx < pw_len; i += 2, idx += 1)
|
||||
{
|
||||
make_utf16beN (&w[idx], &t[i + 0], &t[i + 1]);
|
||||
}
|
||||
|
||||
sha1_hmac_ctx_vector_t ctx;
|
||||
|
||||
sha1_hmac_init_vector (&ctx, t, pw_len * 2);
|
||||
|
||||
sha1_hmac_update_vector (&ctx, t, pw_len * 2);
|
||||
|
||||
sha1_hmac_final_vector (&ctx);
|
||||
|
||||
const u32x r0 = ctx.opad.h[DGST_R0];
|
||||
const u32x r1 = ctx.opad.h[DGST_R1];
|
||||
const u32x r2 = ctx.opad.h[DGST_R2];
|
||||
const u32x r3 = ctx.opad.h[DGST_R3];
|
||||
|
||||
COMPARE_S_SIMD (r0, r1, r2, r3);
|
||||
}
|
||||
}
|
337
OpenCL/m24900_a0-optimized.cl
Normal file
337
OpenCL/m24900_a0-optimized.cl
Normal file
@ -0,0 +1,337 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_rp_optimized.h"
|
||||
#include "inc_rp_optimized.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24900_m04 (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
u32x w0[4] = { 0 };
|
||||
u32x w1[4] = { 0 };
|
||||
u32x w2[4] = { 0 };
|
||||
u32x w3[4] = { 0 };
|
||||
|
||||
const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
|
||||
|
||||
append_0x80_2x4_VV (w0, w1, out_len);
|
||||
|
||||
w3[2] = out_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
const u32x a0 = (((a >> 0) & 0xff) + ((a >> 8) & 0xff)) % 62;
|
||||
const u32x a1 = (((a >> 16) & 0xff) + ((a >> 24) & 0xff)) % 62;
|
||||
const u32x b0 = (((b >> 0) & 0xff) + ((b >> 8) & 0xff)) % 62;
|
||||
const u32x b1 = (((b >> 16) & 0xff) + ((b >> 24) & 0xff)) % 62;
|
||||
const u32x c0 = (((c >> 0) & 0xff) + ((c >> 8) & 0xff)) % 62;
|
||||
const u32x c1 = (((c >> 16) & 0xff) + ((c >> 24) & 0xff)) % 62;
|
||||
const u32x d0 = (((d >> 0) & 0xff) + ((d >> 8) & 0xff)) % 62;
|
||||
const u32x d1 = (((d >> 16) & 0xff) + ((d >> 24) & 0xff)) % 62;
|
||||
|
||||
const u32x ax = (a0 << 0) | (a1 << 8);
|
||||
const u32x bx = (b0 << 0) | (b1 << 8);
|
||||
const u32x cx = (c0 << 0) | (c1 << 8);
|
||||
const u32x dx = (d0 << 0) | (d1 << 8);
|
||||
|
||||
COMPARE_M_SIMD (ax, bx, cx, dx);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_m08 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_m16 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s04 (KERN_ATTR_RULES ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
u32x w0[4] = { 0 };
|
||||
u32x w1[4] = { 0 };
|
||||
u32x w2[4] = { 0 };
|
||||
u32x w3[4] = { 0 };
|
||||
|
||||
const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1);
|
||||
|
||||
append_0x80_2x4_VV (w0, w1, out_len);
|
||||
|
||||
w3[2] = out_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
const u32x a0 = (((a >> 0) & 0xff) + ((a >> 8) & 0xff)) % 62;
|
||||
const u32x a1 = (((a >> 16) & 0xff) + ((a >> 24) & 0xff)) % 62;
|
||||
const u32x b0 = (((b >> 0) & 0xff) + ((b >> 8) & 0xff)) % 62;
|
||||
const u32x b1 = (((b >> 16) & 0xff) + ((b >> 24) & 0xff)) % 62;
|
||||
const u32x c0 = (((c >> 0) & 0xff) + ((c >> 8) & 0xff)) % 62;
|
||||
const u32x c1 = (((c >> 16) & 0xff) + ((c >> 24) & 0xff)) % 62;
|
||||
const u32x d0 = (((d >> 0) & 0xff) + ((d >> 8) & 0xff)) % 62;
|
||||
const u32x d1 = (((d >> 16) & 0xff) + ((d >> 24) & 0xff)) % 62;
|
||||
|
||||
const u32x ax = (a0 << 0) | (a1 << 8);
|
||||
const u32x bx = (b0 << 0) | (b1 << 8);
|
||||
const u32x cx = (c0 << 0) | (c1 << 8);
|
||||
const u32x dx = (d0 << 0) | (d1 << 8);
|
||||
|
||||
COMPARE_S_SIMD (ax, bx, cx, dx);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s08 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s16 (KERN_ATTR_RULES ())
|
||||
{
|
||||
}
|
454
OpenCL/m24900_a1-optimized.cl
Normal file
454
OpenCL/m24900_a1-optimized.cl
Normal file
@ -0,0 +1,454 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_scalar.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
KERNEL_FQ void m24900_m04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_l_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos) & 63;
|
||||
|
||||
const u32x pw_len = (pw_l_len + pw_r_len) & 63;
|
||||
|
||||
/**
|
||||
* concat password candidate
|
||||
*/
|
||||
|
||||
u32x wordl0[4] = { 0 };
|
||||
u32x wordl1[4] = { 0 };
|
||||
u32x wordl2[4] = { 0 };
|
||||
u32x wordl3[4] = { 0 };
|
||||
|
||||
wordl0[0] = pw_buf0[0];
|
||||
wordl0[1] = pw_buf0[1];
|
||||
wordl0[2] = pw_buf0[2];
|
||||
wordl0[3] = pw_buf0[3];
|
||||
wordl1[0] = pw_buf1[0];
|
||||
wordl1[1] = pw_buf1[1];
|
||||
wordl1[2] = pw_buf1[2];
|
||||
wordl1[3] = pw_buf1[3];
|
||||
|
||||
u32x wordr0[4] = { 0 };
|
||||
u32x wordr1[4] = { 0 };
|
||||
u32x wordr2[4] = { 0 };
|
||||
u32x wordr3[4] = { 0 };
|
||||
|
||||
wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
|
||||
wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
|
||||
wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
|
||||
wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
|
||||
wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
|
||||
wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
|
||||
wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
|
||||
wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
|
||||
|
||||
if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
|
||||
}
|
||||
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = wordl0[0] | wordr0[0];
|
||||
w0[1] = wordl0[1] | wordr0[1];
|
||||
w0[2] = wordl0[2] | wordr0[2];
|
||||
w0[3] = wordl0[3] | wordr0[3];
|
||||
w1[0] = wordl1[0] | wordr1[0];
|
||||
w1[1] = wordl1[1] | wordr1[1];
|
||||
w1[2] = wordl1[2] | wordr1[2];
|
||||
w1[3] = wordl1[3] | wordr1[3];
|
||||
w2[0] = wordl2[0] | wordr2[0];
|
||||
w2[1] = wordl2[1] | wordr2[1];
|
||||
w2[2] = wordl2[2] | wordr2[2];
|
||||
w2[3] = wordl2[3] | wordr2[3];
|
||||
w3[0] = wordl3[0] | wordr3[0];
|
||||
w3[1] = wordl3[1] | wordr3[1];
|
||||
w3[2] = pw_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
const u32x a0 = (((a >> 0) & 0xff) + ((a >> 8) & 0xff)) % 62;
|
||||
const u32x a1 = (((a >> 16) & 0xff) + ((a >> 24) & 0xff)) % 62;
|
||||
const u32x b0 = (((b >> 0) & 0xff) + ((b >> 8) & 0xff)) % 62;
|
||||
const u32x b1 = (((b >> 16) & 0xff) + ((b >> 24) & 0xff)) % 62;
|
||||
const u32x c0 = (((c >> 0) & 0xff) + ((c >> 8) & 0xff)) % 62;
|
||||
const u32x c1 = (((c >> 16) & 0xff) + ((c >> 24) & 0xff)) % 62;
|
||||
const u32x d0 = (((d >> 0) & 0xff) + ((d >> 8) & 0xff)) % 62;
|
||||
const u32x d1 = (((d >> 16) & 0xff) + ((d >> 24) & 0xff)) % 62;
|
||||
|
||||
const u32x ax = (a0 << 0) | (a1 << 8);
|
||||
const u32x bx = (b0 << 0) | (b1 << 8);
|
||||
const u32x cx = (c0 << 0) | (c1 << 8);
|
||||
const u32x dx = (d0 << 0) | (d1 << 8);
|
||||
|
||||
COMPARE_M_SIMD (ax, bx, cx, dx);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_m08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_m16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 pw_buf0[4];
|
||||
u32 pw_buf1[4];
|
||||
|
||||
pw_buf0[0] = pws[gid].i[0];
|
||||
pw_buf0[1] = pws[gid].i[1];
|
||||
pw_buf0[2] = pws[gid].i[2];
|
||||
pw_buf0[3] = pws[gid].i[3];
|
||||
pw_buf1[0] = pws[gid].i[4];
|
||||
pw_buf1[1] = pws[gid].i[5];
|
||||
pw_buf1[2] = pws[gid].i[6];
|
||||
pw_buf1[3] = pws[gid].i[7];
|
||||
|
||||
const u32 pw_l_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3]
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x pw_r_len = pwlenx_create_combt (combs_buf, il_pos) & 63;
|
||||
|
||||
const u32x pw_len = (pw_l_len + pw_r_len) & 63;
|
||||
|
||||
/**
|
||||
* concat password candidate
|
||||
*/
|
||||
|
||||
u32x wordl0[4] = { 0 };
|
||||
u32x wordl1[4] = { 0 };
|
||||
u32x wordl2[4] = { 0 };
|
||||
u32x wordl3[4] = { 0 };
|
||||
|
||||
wordl0[0] = pw_buf0[0];
|
||||
wordl0[1] = pw_buf0[1];
|
||||
wordl0[2] = pw_buf0[2];
|
||||
wordl0[3] = pw_buf0[3];
|
||||
wordl1[0] = pw_buf1[0];
|
||||
wordl1[1] = pw_buf1[1];
|
||||
wordl1[2] = pw_buf1[2];
|
||||
wordl1[3] = pw_buf1[3];
|
||||
|
||||
u32x wordr0[4] = { 0 };
|
||||
u32x wordr1[4] = { 0 };
|
||||
u32x wordr2[4] = { 0 };
|
||||
u32x wordr3[4] = { 0 };
|
||||
|
||||
wordr0[0] = ix_create_combt (combs_buf, il_pos, 0);
|
||||
wordr0[1] = ix_create_combt (combs_buf, il_pos, 1);
|
||||
wordr0[2] = ix_create_combt (combs_buf, il_pos, 2);
|
||||
wordr0[3] = ix_create_combt (combs_buf, il_pos, 3);
|
||||
wordr1[0] = ix_create_combt (combs_buf, il_pos, 4);
|
||||
wordr1[1] = ix_create_combt (combs_buf, il_pos, 5);
|
||||
wordr1[2] = ix_create_combt (combs_buf, il_pos, 6);
|
||||
wordr1[3] = ix_create_combt (combs_buf, il_pos, 7);
|
||||
|
||||
if (combs_mode == COMBINATOR_MODE_BASE_LEFT)
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordr0, wordr1, wordr2, wordr3, pw_l_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch_buffer_by_offset_le_VV (wordl0, wordl1, wordl2, wordl3, pw_r_len);
|
||||
}
|
||||
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
|
||||
w0[0] = wordl0[0] | wordr0[0];
|
||||
w0[1] = wordl0[1] | wordr0[1];
|
||||
w0[2] = wordl0[2] | wordr0[2];
|
||||
w0[3] = wordl0[3] | wordr0[3];
|
||||
w1[0] = wordl1[0] | wordr1[0];
|
||||
w1[1] = wordl1[1] | wordr1[1];
|
||||
w1[2] = wordl1[2] | wordr1[2];
|
||||
w1[3] = wordl1[3] | wordr1[3];
|
||||
w2[0] = wordl2[0] | wordr2[0];
|
||||
w2[1] = wordl2[1] | wordr2[1];
|
||||
w2[2] = wordl2[2] | wordr2[2];
|
||||
w2[3] = wordl2[3] | wordr2[3];
|
||||
w3[0] = wordl3[0] | wordr3[0];
|
||||
w3[1] = wordl3[1] | wordr3[1];
|
||||
w3[2] = pw_len * 8;
|
||||
w3[3] = 0;
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, w3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, w3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, w3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, w3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, w3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, w0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, w1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, w3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, w2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, w3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, w3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, w0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, w0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, w1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, w2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, w0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, w2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
const u32x a0 = (((a >> 0) & 0xff) + ((a >> 8) & 0xff)) % 62;
|
||||
const u32x a1 = (((a >> 16) & 0xff) + ((a >> 24) & 0xff)) % 62;
|
||||
const u32x b0 = (((b >> 0) & 0xff) + ((b >> 8) & 0xff)) % 62;
|
||||
const u32x b1 = (((b >> 16) & 0xff) + ((b >> 24) & 0xff)) % 62;
|
||||
const u32x c0 = (((c >> 0) & 0xff) + ((c >> 8) & 0xff)) % 62;
|
||||
const u32x c1 = (((c >> 16) & 0xff) + ((c >> 24) & 0xff)) % 62;
|
||||
const u32x d0 = (((d >> 0) & 0xff) + ((d >> 8) & 0xff)) % 62;
|
||||
const u32x d1 = (((d >> 16) & 0xff) + ((d >> 24) & 0xff)) % 62;
|
||||
|
||||
const u32x ax = (a0 << 0) | (a1 << 8);
|
||||
const u32x bx = (b0 << 0) | (b1 << 8);
|
||||
const u32x cx = (c0 << 0) | (c1 << 8);
|
||||
const u32x dx = (d0 << 0) | (d1 << 8);
|
||||
|
||||
COMPARE_S_SIMD (ax, bx, cx, dx);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
}
|
599
OpenCL/m24900_a3-optimized.cl
Normal file
599
OpenCL/m24900_a3-optimized.cl
Normal file
@ -0,0 +1,599 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_md5.cl"
|
||||
#endif
|
||||
|
||||
DECLSPEC void m24900m (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
const u32 w0l = w0[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = ix_create_bft (bfs_buf, il_pos);
|
||||
|
||||
const u32x w0lr = w0l | w0r;
|
||||
|
||||
u32x t0[4];
|
||||
u32x t1[4];
|
||||
u32x t2[4];
|
||||
u32x t3[4];
|
||||
|
||||
t0[0] = w0lr;
|
||||
t0[1] = w0[1];
|
||||
t0[2] = w0[2];
|
||||
t0[3] = w0[3];
|
||||
t1[0] = w1[0];
|
||||
t1[1] = w1[1];
|
||||
t1[2] = w1[2];
|
||||
t1[3] = w1[3];
|
||||
t2[0] = w2[0];
|
||||
t2[1] = w2[1];
|
||||
t2[2] = w2[2];
|
||||
t2[3] = w2[3];
|
||||
t3[0] = w3[0];
|
||||
t3[1] = w3[1];
|
||||
t3[2] = pw_len * 8;
|
||||
t3[3] = 0;
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, t0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, t3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, t2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, t1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
const u32x a0 = (((a >> 0) & 0xff) + ((a >> 8) & 0xff)) % 62;
|
||||
const u32x a1 = (((a >> 16) & 0xff) + ((a >> 24) & 0xff)) % 62;
|
||||
const u32x b0 = (((b >> 0) & 0xff) + ((b >> 8) & 0xff)) % 62;
|
||||
const u32x b1 = (((b >> 16) & 0xff) + ((b >> 24) & 0xff)) % 62;
|
||||
const u32x c0 = (((c >> 0) & 0xff) + ((c >> 8) & 0xff)) % 62;
|
||||
const u32x c1 = (((c >> 16) & 0xff) + ((c >> 24) & 0xff)) % 62;
|
||||
const u32x d0 = (((d >> 0) & 0xff) + ((d >> 8) & 0xff)) % 62;
|
||||
const u32x d1 = (((d >> 16) & 0xff) + ((d >> 24) & 0xff)) % 62;
|
||||
|
||||
const u32x ax = (a0 << 0) | (a1 << 8);
|
||||
const u32x bx = (b0 << 0) | (b1 << 8);
|
||||
const u32x cx = (c0 << 0) | (c1 << 8);
|
||||
const u32x dx = (d0 << 0) | (d1 << 8);
|
||||
|
||||
COMPARE_M_SIMD (ax, bx, cx, dx);
|
||||
}
|
||||
}
|
||||
|
||||
DECLSPEC void m24900s (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* modifier
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
const u64 lid = get_local_id (0);
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u32 search[4] =
|
||||
{
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R0],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R1],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R2],
|
||||
digests_buf[DIGESTS_OFFSET].digest_buf[DGST_R3],
|
||||
};
|
||||
|
||||
/**
|
||||
* loop
|
||||
*/
|
||||
|
||||
const u32 w0l = w0[0];
|
||||
|
||||
for (u32 il_pos = 0; il_pos < il_cnt; il_pos += VECT_SIZE)
|
||||
{
|
||||
const u32x w0r = ix_create_bft (bfs_buf, il_pos);
|
||||
|
||||
const u32x w0lr = w0l | w0r;
|
||||
|
||||
u32x t0[4];
|
||||
u32x t1[4];
|
||||
u32x t2[4];
|
||||
u32x t3[4];
|
||||
|
||||
t0[0] = w0lr;
|
||||
t0[1] = w0[1];
|
||||
t0[2] = w0[2];
|
||||
t0[3] = w0[3];
|
||||
t1[0] = w1[0];
|
||||
t1[1] = w1[1];
|
||||
t1[2] = w1[2];
|
||||
t1[3] = w1[3];
|
||||
t2[0] = w2[0];
|
||||
t2[1] = w2[1];
|
||||
t2[2] = w2[2];
|
||||
t2[3] = w2[3];
|
||||
t3[0] = w3[0];
|
||||
t3[1] = w3[1];
|
||||
t3[2] = pw_len * 8;
|
||||
t3[3] = 0;
|
||||
|
||||
/**
|
||||
* md5
|
||||
*/
|
||||
|
||||
u32x a = MD5M_A;
|
||||
u32x b = MD5M_B;
|
||||
u32x c = MD5M_C;
|
||||
u32x d = MD5M_D;
|
||||
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t0[0], MD5C00, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t0[1], MD5C01, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t0[2], MD5C02, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t0[3], MD5C03, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t1[0], MD5C04, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t1[1], MD5C05, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t1[2], MD5C06, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t1[3], MD5C07, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t2[0], MD5C08, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t2[1], MD5C09, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t2[2], MD5C0a, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t2[3], MD5C0b, MD5S03);
|
||||
MD5_STEP (MD5_Fo, a, b, c, d, t3[0], MD5C0c, MD5S00);
|
||||
MD5_STEP (MD5_Fo, d, a, b, c, t3[1], MD5C0d, MD5S01);
|
||||
MD5_STEP (MD5_Fo, c, d, a, b, t3[2], MD5C0e, MD5S02);
|
||||
MD5_STEP (MD5_Fo, b, c, d, a, t3[3], MD5C0f, MD5S03);
|
||||
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t0[1], MD5C10, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t1[2], MD5C11, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t2[3], MD5C12, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t0[0], MD5C13, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t1[1], MD5C14, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t2[2], MD5C15, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t3[3], MD5C16, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t1[0], MD5C17, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t2[1], MD5C18, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t3[2], MD5C19, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t0[3], MD5C1a, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t2[0], MD5C1b, MD5S13);
|
||||
MD5_STEP (MD5_Go, a, b, c, d, t3[1], MD5C1c, MD5S10);
|
||||
MD5_STEP (MD5_Go, d, a, b, c, t0[2], MD5C1d, MD5S11);
|
||||
MD5_STEP (MD5_Go, c, d, a, b, t1[3], MD5C1e, MD5S12);
|
||||
MD5_STEP (MD5_Go, b, c, d, a, t3[0], MD5C1f, MD5S13);
|
||||
|
||||
u32x t;
|
||||
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t1[1], MD5C20, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t2[0], MD5C21, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t2[3], MD5C22, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t3[2], MD5C23, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t0[1], MD5C24, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t1[0], MD5C25, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t1[3], MD5C26, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t2[2], MD5C27, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t3[1], MD5C28, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t0[0], MD5C29, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t0[3], MD5C2a, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t1[2], MD5C2b, MD5S23);
|
||||
MD5_STEP (MD5_H1, a, b, c, d, t2[1], MD5C2c, MD5S20);
|
||||
MD5_STEP (MD5_H2, d, a, b, c, t3[0], MD5C2d, MD5S21);
|
||||
MD5_STEP (MD5_H1, c, d, a, b, t3[3], MD5C2e, MD5S22);
|
||||
MD5_STEP (MD5_H2, b, c, d, a, t0[2], MD5C2f, MD5S23);
|
||||
|
||||
MD5_STEP (MD5_I , a, b, c, d, t0[0], MD5C30, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t1[3], MD5C31, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t3[2], MD5C32, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t1[1], MD5C33, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, t3[0], MD5C34, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t0[3], MD5C35, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t2[2], MD5C36, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t0[1], MD5C37, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, t2[0], MD5C38, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t3[3], MD5C39, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t1[2], MD5C3a, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t3[1], MD5C3b, MD5S33);
|
||||
MD5_STEP (MD5_I , a, b, c, d, t1[0], MD5C3c, MD5S30);
|
||||
MD5_STEP (MD5_I , d, a, b, c, t2[3], MD5C3d, MD5S31);
|
||||
MD5_STEP (MD5_I , c, d, a, b, t0[2], MD5C3e, MD5S32);
|
||||
MD5_STEP (MD5_I , b, c, d, a, t2[1], MD5C3f, MD5S33);
|
||||
|
||||
a += MD5M_A;
|
||||
b += MD5M_B;
|
||||
c += MD5M_C;
|
||||
d += MD5M_D;
|
||||
|
||||
const u32x a0 = (((a >> 0) & 0xff) + ((a >> 8) & 0xff)) % 62;
|
||||
const u32x a1 = (((a >> 16) & 0xff) + ((a >> 24) & 0xff)) % 62;
|
||||
const u32x b0 = (((b >> 0) & 0xff) + ((b >> 8) & 0xff)) % 62;
|
||||
const u32x b1 = (((b >> 16) & 0xff) + ((b >> 24) & 0xff)) % 62;
|
||||
const u32x c0 = (((c >> 0) & 0xff) + ((c >> 8) & 0xff)) % 62;
|
||||
const u32x c1 = (((c >> 16) & 0xff) + ((c >> 24) & 0xff)) % 62;
|
||||
const u32x d0 = (((d >> 0) & 0xff) + ((d >> 8) & 0xff)) % 62;
|
||||
const u32x d1 = (((d >> 16) & 0xff) + ((d >> 24) & 0xff)) % 62;
|
||||
|
||||
const u32x ax = (a0 << 0) | (a1 << 8);
|
||||
const u32x bx = (b0 << 0) | (b1 << 8);
|
||||
const u32x cx = (c0 << 0) | (c1 << 8);
|
||||
const u32x dx = (d0 << 0) | (d1 << 8);
|
||||
|
||||
COMPARE_S_SIMD (ax, bx, cx, dx);
|
||||
}
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_m04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_m08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_m16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = pws[gid].i[ 8];
|
||||
w2[1] = pws[gid].i[ 9];
|
||||
w2[2] = pws[gid].i[10];
|
||||
w2[3] = pws[gid].i[11];
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = pws[gid].i[12];
|
||||
w3[1] = pws[gid].i[13];
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s04 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s08 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m24900_s16 (KERN_ATTR_BASIC ())
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
u32 w0[4];
|
||||
|
||||
w0[0] = pws[gid].i[ 0];
|
||||
w0[1] = pws[gid].i[ 1];
|
||||
w0[2] = pws[gid].i[ 2];
|
||||
w0[3] = pws[gid].i[ 3];
|
||||
|
||||
u32 w1[4];
|
||||
|
||||
w1[0] = pws[gid].i[ 4];
|
||||
w1[1] = pws[gid].i[ 5];
|
||||
w1[2] = pws[gid].i[ 6];
|
||||
w1[3] = pws[gid].i[ 7];
|
||||
|
||||
u32 w2[4];
|
||||
|
||||
w2[0] = pws[gid].i[ 8];
|
||||
w2[1] = pws[gid].i[ 9];
|
||||
w2[2] = pws[gid].i[10];
|
||||
w2[3] = pws[gid].i[11];
|
||||
|
||||
u32 w3[4];
|
||||
|
||||
w3[0] = pws[gid].i[12];
|
||||
w3[1] = pws[gid].i[13];
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
|
||||
const u32 pw_len = pws[gid].pw_len & 63;
|
||||
|
||||
/**
|
||||
* main
|
||||
*/
|
||||
|
||||
m24900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, SALT_POS, loop_pos, loop_cnt, il_cnt, digests_cnt, DIGESTS_OFFSET, combs_mode, pws_pos, gid_max);
|
||||
}
|
182
OpenCL/m25300-pure.cl
Normal file
182
OpenCL/m25300-pure.cl
Normal file
@ -0,0 +1,182 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#define NEW_SIMD_CODE
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include "inc_vendor.h"
|
||||
#include "inc_types.h"
|
||||
#include "inc_platform.cl"
|
||||
#include "inc_common.cl"
|
||||
#include "inc_simd.cl"
|
||||
#include "inc_hash_sha512.cl"
|
||||
#endif
|
||||
|
||||
#define COMPARE_S "inc_comp_single.cl"
|
||||
#define COMPARE_M "inc_comp_multi.cl"
|
||||
|
||||
typedef struct office2016_tmp
|
||||
{
|
||||
u64 out[8];
|
||||
|
||||
} office2016_tmp_t;
|
||||
|
||||
KERNEL_FQ void m25300_init (KERN_ATTR_TMPS (office2016_tmp_t))
|
||||
{
|
||||
/**
|
||||
* base
|
||||
*/
|
||||
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
sha512_ctx_t ctx;
|
||||
|
||||
sha512_init (&ctx);
|
||||
|
||||
sha512_update_global_swap (&ctx, salt_bufs[SALT_POS].salt_buf, salt_bufs[SALT_POS].salt_len);
|
||||
|
||||
sha512_update_global_utf16le_swap (&ctx, pws[gid].i, pws[gid].pw_len);
|
||||
|
||||
sha512_final (&ctx);
|
||||
|
||||
tmps[gid].out[0] = ctx.h[0];
|
||||
tmps[gid].out[1] = ctx.h[1];
|
||||
tmps[gid].out[2] = ctx.h[2];
|
||||
tmps[gid].out[3] = ctx.h[3];
|
||||
tmps[gid].out[4] = ctx.h[4];
|
||||
tmps[gid].out[5] = ctx.h[5];
|
||||
tmps[gid].out[6] = ctx.h[6];
|
||||
tmps[gid].out[7] = ctx.h[7];
|
||||
}
|
||||
|
||||
KERNEL_FQ void m25300_loop (KERN_ATTR_TMPS (office2016_tmp_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if ((gid * VECT_SIZE) >= gid_max) return;
|
||||
|
||||
u64x t0 = pack64v (tmps, out, gid, 0);
|
||||
u64x t1 = pack64v (tmps, out, gid, 1);
|
||||
u64x t2 = pack64v (tmps, out, gid, 2);
|
||||
u64x t3 = pack64v (tmps, out, gid, 3);
|
||||
u64x t4 = pack64v (tmps, out, gid, 4);
|
||||
u64x t5 = pack64v (tmps, out, gid, 5);
|
||||
u64x t6 = pack64v (tmps, out, gid, 6);
|
||||
u64x t7 = pack64v (tmps, out, gid, 7);
|
||||
|
||||
u32x w0[4];
|
||||
u32x w1[4];
|
||||
u32x w2[4];
|
||||
u32x w3[4];
|
||||
u32x w4[4];
|
||||
u32x w5[4];
|
||||
u32x w6[4];
|
||||
u32x w7[4];
|
||||
|
||||
w0[0] = 0;
|
||||
w0[1] = 0;
|
||||
w0[2] = 0;
|
||||
w0[3] = 0;
|
||||
w1[0] = 0;
|
||||
w1[1] = 0;
|
||||
w1[2] = 0;
|
||||
w1[3] = 0;
|
||||
w2[0] = 0;
|
||||
w2[1] = 0;
|
||||
w2[2] = 0;
|
||||
w2[3] = 0;
|
||||
w3[0] = 0;
|
||||
w3[1] = 0;
|
||||
w3[2] = 0;
|
||||
w3[3] = 0;
|
||||
w4[0] = 0;
|
||||
w4[1] = 0x80000000;
|
||||
w4[2] = 0;
|
||||
w4[3] = 0;
|
||||
w5[0] = 0;
|
||||
w5[1] = 0;
|
||||
w5[2] = 0;
|
||||
w5[3] = 0;
|
||||
w6[0] = 0;
|
||||
w6[1] = 0;
|
||||
w6[2] = 0;
|
||||
w6[3] = 0;
|
||||
w7[0] = 0;
|
||||
w7[1] = 0;
|
||||
w7[2] = 0;
|
||||
w7[3] = (64 + 4) * 8;
|
||||
|
||||
for (u32 i = 0, j = loop_pos; i < loop_cnt; i++, j++)
|
||||
{
|
||||
w0[0] = h32_from_64 (t0);
|
||||
w0[1] = l32_from_64 (t0);
|
||||
w0[2] = h32_from_64 (t1);
|
||||
w0[3] = l32_from_64 (t1);
|
||||
w1[0] = h32_from_64 (t2);
|
||||
w1[1] = l32_from_64 (t2);
|
||||
w1[2] = h32_from_64 (t3);
|
||||
w1[3] = l32_from_64 (t3);
|
||||
w2[0] = h32_from_64 (t4);
|
||||
w2[1] = l32_from_64 (t4);
|
||||
w2[2] = h32_from_64 (t5);
|
||||
w2[3] = l32_from_64 (t5);
|
||||
w3[0] = h32_from_64 (t6);
|
||||
w3[1] = l32_from_64 (t6);
|
||||
w3[2] = h32_from_64 (t7);
|
||||
w3[3] = l32_from_64 (t7);
|
||||
w4[0] = hc_swap32 (j);
|
||||
|
||||
u64x digest[8];
|
||||
|
||||
digest[0] = SHA512M_A;
|
||||
digest[1] = SHA512M_B;
|
||||
digest[2] = SHA512M_C;
|
||||
digest[3] = SHA512M_D;
|
||||
digest[4] = SHA512M_E;
|
||||
digest[5] = SHA512M_F;
|
||||
digest[6] = SHA512M_G;
|
||||
digest[7] = SHA512M_H;
|
||||
|
||||
sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest);
|
||||
|
||||
t0 = digest[0];
|
||||
t1 = digest[1];
|
||||
t2 = digest[2];
|
||||
t3 = digest[3];
|
||||
t4 = digest[4];
|
||||
t5 = digest[5];
|
||||
t6 = digest[6];
|
||||
t7 = digest[7];
|
||||
}
|
||||
|
||||
unpack64v (tmps, out, gid, 0, t0);
|
||||
unpack64v (tmps, out, gid, 1, t1);
|
||||
unpack64v (tmps, out, gid, 2, t2);
|
||||
unpack64v (tmps, out, gid, 3, t3);
|
||||
unpack64v (tmps, out, gid, 4, t4);
|
||||
unpack64v (tmps, out, gid, 5, t5);
|
||||
unpack64v (tmps, out, gid, 6, t6);
|
||||
unpack64v (tmps, out, gid, 7, t7);
|
||||
}
|
||||
|
||||
KERNEL_FQ void m25300_comp (KERN_ATTR_TMPS (office2016_tmp_t))
|
||||
{
|
||||
const u64 gid = get_global_id (0);
|
||||
|
||||
if (gid >= gid_max) return;
|
||||
|
||||
const u32 r0 = l32_from_64_S (tmps[gid].out[7]);
|
||||
const u32 r1 = h32_from_64_S (tmps[gid].out[7]);
|
||||
const u32 r2 = l32_from_64_S (tmps[gid].out[3]);
|
||||
const u32 r3 = h32_from_64_S (tmps[gid].out[3]);
|
||||
|
||||
#define il_pos 0
|
||||
|
||||
#ifdef KERNEL_STATIC
|
||||
#include COMPARE_M
|
||||
#endif
|
||||
}
|
@ -4,18 +4,30 @@
|
||||
## Algorithms
|
||||
##
|
||||
|
||||
- Added hash-mode: Bitwarden
|
||||
- Added hash-mode: BestCrypt v3 Volume Encryption
|
||||
- Added hash-mode: Apple iWork
|
||||
- Added hash-mode: AxCrypt 2 AES-128
|
||||
- Added hash-mode: AxCrypt 2 AES-256
|
||||
- Added hash-mode: BestCrypt v3 Volume Encryption
|
||||
- Added hash-mode: Bitwarden
|
||||
- Added hash-mode: Dahua Authentication MD5
|
||||
- Added hash-mode: MS Office 2016 - SheetProtection
|
||||
- Added hash-mode: PKCS#8 Private Keys
|
||||
- Added hash-mode: RAR3-p (Compressed)
|
||||
- Added hash-mode: RAR3-p (Uncompressed)
|
||||
- Added hash-mode: RSA/DSA/EC/OPENSSH Private Keys
|
||||
- Added hash-mode: SQLCipher
|
||||
- Added hash-mode: Stuffit5
|
||||
- Added hash-mode: Umbraco HMAC-SHA1
|
||||
- Added hash-mode: sha1(sha1($pass).$salt)
|
||||
- Added hash-mode: Stargazer Stellar Wallet XLM, PBKDF2-HMAC-SHA256 + AES-256-GCM
|
||||
|
||||
##
|
||||
## Features
|
||||
##
|
||||
|
||||
- Added option --hash-info to show generic information for each hash-mode
|
||||
- Removed option --example-hashes, now is an alias of --hash-info
|
||||
|
||||
##
|
||||
## Bugs
|
||||
##
|
||||
|
@ -216,6 +216,7 @@ NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or
|
||||
- MySQL4.1/MySQL5
|
||||
- MySQL $A$ (sha256crypt)
|
||||
- Sybase ASE
|
||||
- SQLCipher
|
||||
- hMailServer
|
||||
- DNSSEC (NSEC3)
|
||||
- CRAM-MD5 Dovecot
|
||||
@ -265,6 +266,7 @@ NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or
|
||||
- MS Office 2007
|
||||
- MS Office 2010
|
||||
- MS Office 2013
|
||||
- MS Office 2016 - SheetProtection
|
||||
- MS Office <= 2003 $0/$1, MD5 + RC4
|
||||
- MS Office <= 2003 $0/$1, MD5 + RC4, collider #1
|
||||
- MS Office <= 2003 $0/$1, MD5 + RC4, collider #2
|
||||
@ -313,6 +315,7 @@ NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or
|
||||
- iTunes backup >= 10.0
|
||||
- WinZip
|
||||
- Android Backup
|
||||
- Stuffit5
|
||||
- AxCrypt 1
|
||||
- AxCrypt 1 in-memory SHA1
|
||||
- AxCrypt 2 AES-128
|
||||
@ -324,6 +327,7 @@ NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or
|
||||
- SMF (Simple Machines Forum) > v1.1
|
||||
- MediaWiki B type
|
||||
- Redmine
|
||||
- Umbraco HMAC-SHA1
|
||||
- Joomla < 2.5.18
|
||||
- OpenCart
|
||||
- PrestaShop
|
||||
@ -337,6 +341,7 @@ NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or
|
||||
- Web2py pbkdf2-sha512
|
||||
- TOTP (HMAC-SHA1)
|
||||
- Stargazer Stellar Wallet XLM, PBKDF2-HMAC-SHA256 + AES-256-GCM
|
||||
- Dahua Authentication MD5
|
||||
|
||||
##
|
||||
## Attack-Modes
|
||||
|
@ -426,7 +426,7 @@ _hashcat ()
|
||||
local BUILD_IN_CHARSETS='?l ?u ?d ?a ?b ?s ?h ?H'
|
||||
|
||||
local SHORT_OPTS="-m -a -V -h -b -t -T -o -p -c -d -D -w -n -u -j -k -r -g -1 -2 -3 -4 -i -I -s -l -O -S -z"
|
||||
local LONG_OPTS="--hash-type --attack-mode --version --help --quiet --benchmark --benchmark-all --hex-salt --hex-wordlist --hex-charset --force --status --status-json --status-timer --stdin-timeout-abort --machine-readable --loopback --markov-hcstat2 --markov-disable --markov-classic --markov-threshold --runtime --session --speed-only --progress-only --restore --restore-file-path --restore-disable --outfile --outfile-format --outfile-autohex-disable --outfile-check-timer --outfile-check-dir --wordlist-autohex-disable --separator --show --left --username --remove --remove-timer --potfile-disable --potfile-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --example-hashes --backend-ignore-cuda --backend-ignore-opencl --backend-info --backend-devices --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-disable --hwmon-temp-abort --skip --limit --keyspace --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment --increment-min --increment-max --logfile-disable --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --stdout --keep-guessing --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --optimized-kernel-enable --self-test-disable --slow-candidates --brain-server --brain-server-timer --brain-client --brain-client-features --brain-host --brain-port --brain-session --brain-session-whitelist --brain-password"
|
||||
local LONG_OPTS="--hash-type --attack-mode --version --help --quiet --benchmark --benchmark-all --hex-salt --hex-wordlist --hex-charset --force --status --status-json --status-timer --stdin-timeout-abort --machine-readable --loopback --markov-hcstat2 --markov-disable --markov-classic --markov-threshold --runtime --session --speed-only --progress-only --restore --restore-file-path --restore-disable --outfile --outfile-format --outfile-autohex-disable --outfile-check-timer --outfile-check-dir --wordlist-autohex-disable --separator --show --left --username --remove --remove-timer --potfile-disable --potfile-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --example-hashes --hash-info --backend-ignore-cuda --backend-ignore-opencl --backend-info --backend-devices --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-disable --hwmon-temp-abort --skip --limit --keyspace --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment --increment-min --increment-max --logfile-disable --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --stdout --keep-guessing --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --optimized-kernel-enable --self-test-disable --slow-candidates --brain-server --brain-server-timer --brain-client --brain-client-features --brain-host --brain-port --brain-session --brain-session-whitelist --brain-password"
|
||||
local OPTIONS="-m -a -t -o -p -c -d -w -n -u -j -k -r -g -1 -2 -3 -4 -s -l --hash-type --attack-mode --status-timer --stdin-timeout-abort --markov-hcstat2 --markov-threshold --runtime --session --timer --outfile --outfile-format --outfile-check-timer --outfile-check-dir --separator --remove-timer --potfile-path --restore-file-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --backend-devices --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-temp-abort --skip --limit --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment-min --increment-max --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --brain-server-timer --brain-client-features --brain-host --brain-password --brain-port --brain-session --brain-session-whitelist"
|
||||
|
||||
COMPREPLY=()
|
||||
|
@ -41,7 +41,7 @@ int tty_fix(void);
|
||||
|
||||
void compress_terminal_line_length (char *out_buf, const size_t keep_from_beginning, const size_t keep_from_end);
|
||||
|
||||
void example_hashes (hashcat_ctx_t *hashcat_ctx);
|
||||
void hash_info (hashcat_ctx_t *hashcat_ctx);
|
||||
|
||||
void backend_info (hashcat_ctx_t *hashcat_ctx);
|
||||
void backend_info_compact (hashcat_ctx_t *hashcat_ctx);
|
||||
|
@ -423,6 +423,8 @@ typedef enum opts_type
|
||||
OPTS_TYPE_AUX3 = (1ULL << 37),
|
||||
OPTS_TYPE_AUX4 = (1ULL << 38),
|
||||
OPTS_TYPE_BINARY_HASHFILE = (1ULL << 39),
|
||||
OPTS_TYPE_BINARY_HASHFILE_OPTIONAL
|
||||
= (1ULL << 40), // this allows us to not enforce the use of a binary file. requires OPTS_TYPE_BINARY_HASHFILE set to be effective.
|
||||
OPTS_TYPE_PT_ADD06 = (1ULL << 41),
|
||||
OPTS_TYPE_KEYBOARD_MAPPING = (1ULL << 42),
|
||||
OPTS_TYPE_DEEP_COMP_KERNEL = (1ULL << 43), // if we have to iterate through each hash inside the comp kernel, for example if each hash has to be decrypted separately
|
||||
@ -593,10 +595,10 @@ typedef enum user_options_defaults
|
||||
BRAIN_SESSION = 0,
|
||||
#endif
|
||||
DEBUG_MODE = 0,
|
||||
EXAMPLE_HASHES = false,
|
||||
FORCE = false,
|
||||
HWMON_DISABLE = false,
|
||||
HWMON_TEMP_ABORT = 90,
|
||||
HASH_INFO = false,
|
||||
HASH_MODE = 0,
|
||||
HCCAPX_MESSAGE_PAIR = 0,
|
||||
HEX_CHARSET = false,
|
||||
@ -698,7 +700,7 @@ typedef enum user_options_map
|
||||
IDX_DEBUG_MODE = 0xff11,
|
||||
IDX_ENCODING_FROM = 0xff12,
|
||||
IDX_ENCODING_TO = 0xff13,
|
||||
IDX_EXAMPLE_HASHES = 0xff14,
|
||||
IDX_HASH_INFO = 0xff14,
|
||||
IDX_FORCE = 0xff15,
|
||||
IDX_HWMON_DISABLE = 0xff16,
|
||||
IDX_HWMON_TEMP_ABORT = 0xff17,
|
||||
@ -1940,9 +1942,9 @@ typedef struct user_options
|
||||
bool brain_client;
|
||||
bool brain_server;
|
||||
#endif
|
||||
bool example_hashes;
|
||||
bool force;
|
||||
bool hwmon_disable;
|
||||
bool hash_info;
|
||||
bool hex_charset;
|
||||
bool hex_salt;
|
||||
bool hex_wordlist;
|
||||
|
@ -74,7 +74,7 @@ CXX := clang++
|
||||
AR := /usr/bin/ar
|
||||
SED := /usr/bin/sed
|
||||
SED_IN_PLACE := -i ""
|
||||
PROD_VERS := $(shell sw_vers -productVersion | cut -d. -f2)
|
||||
DARWIN_VERSION := $(shell uname -r | cut -d. -f1)
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME),FreeBSD)
|
||||
@ -299,7 +299,7 @@ ifeq ($(UNAME),Darwin)
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.9
|
||||
CFLAGS_NATIVE := $(CFLAGS)
|
||||
|
||||
ifeq ($(shell test $(PROD_VERS) -le 11; echo $$?), 0)
|
||||
ifeq ($(shell test $(DARWIN_VERSION) -le 15; echo $$?), 0)
|
||||
CFLAGS_NATIVE += -DMISSING_CLOCK_GETTIME
|
||||
endif
|
||||
|
||||
|
392
src/backend.c
392
src/backend.c
@ -4956,7 +4956,7 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
backend_ctx->enabled = false;
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->show == true) return 0;
|
||||
@ -5482,7 +5482,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
CUdevice cuda_device;
|
||||
|
||||
if (hc_cuDeviceGet (hashcat_ctx, &cuda_device, cuda_devices_idx) == -1) return -1;
|
||||
if (hc_cuDeviceGet (hashcat_ctx, &cuda_device, cuda_devices_idx) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->cuda_device = cuda_device;
|
||||
|
||||
@ -5498,7 +5502,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
char *device_name = (char *) hcmalloc (HCBUFSIZ_TINY);
|
||||
|
||||
if (hc_cuDeviceGetName (hashcat_ctx, device_name, HCBUFSIZ_TINY, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetName (hashcat_ctx, device_name, HCBUFSIZ_TINY, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_name = device_name;
|
||||
|
||||
@ -5510,7 +5518,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
int device_processors = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_processors, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_processors, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_processors = device_processors;
|
||||
|
||||
@ -5518,7 +5530,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
size_t bytes = 0;
|
||||
|
||||
if (hc_cuDeviceTotalMem (hashcat_ctx, &bytes, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceTotalMem (hashcat_ctx, &bytes, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_global_mem = (u64) bytes;
|
||||
|
||||
@ -5530,7 +5546,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
int cuda_warp_size = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &cuda_warp_size, CU_DEVICE_ATTRIBUTE_WARP_SIZE, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &cuda_warp_size, CU_DEVICE_ATTRIBUTE_WARP_SIZE, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->cuda_warp_size = cuda_warp_size;
|
||||
|
||||
@ -5539,9 +5559,17 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
int sm_major = 0;
|
||||
int sm_minor = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &sm_major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &sm_major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &sm_minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &sm_minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->sm_major = sm_major;
|
||||
device_param->sm_minor = sm_minor;
|
||||
@ -5550,7 +5578,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
int device_maxworkgroup_size = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_maxworkgroup_size, CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_maxworkgroup_size, CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_maxworkgroup_size = device_maxworkgroup_size;
|
||||
|
||||
@ -5558,7 +5590,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
int device_maxclock_frequency = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_maxclock_frequency, CU_DEVICE_ATTRIBUTE_CLOCK_RATE, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_maxclock_frequency, CU_DEVICE_ATTRIBUTE_CLOCK_RATE, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_maxclock_frequency = device_maxclock_frequency / 1000;
|
||||
|
||||
@ -5568,11 +5604,23 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
int pci_bus_id_nv = 0;
|
||||
int pci_slot_id_nv = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &pci_domain_id_nv, CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &pci_domain_id_nv, CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &pci_bus_id_nv, CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &pci_bus_id_nv, CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &pci_slot_id_nv, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &pci_slot_id_nv, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->pcie_domain = (u8) (pci_domain_id_nv);
|
||||
device_param->pcie_bus = (u8) (pci_bus_id_nv);
|
||||
@ -5583,7 +5631,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
int kernel_exec_timeout = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &kernel_exec_timeout, CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &kernel_exec_timeout, CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->kernel_exec_timeout = kernel_exec_timeout;
|
||||
|
||||
@ -5591,7 +5643,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
int max_shared_memory_per_block = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &max_shared_memory_per_block, CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &max_shared_memory_per_block, CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (max_shared_memory_per_block < 32768)
|
||||
{
|
||||
@ -5606,7 +5662,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
int device_max_constant_buffer_size = 0;
|
||||
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_max_constant_buffer_size, CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY, cuda_device) == -1) return -1;
|
||||
if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_max_constant_buffer_size, CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY, cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (device_max_constant_buffer_size < 65536)
|
||||
{
|
||||
@ -5678,17 +5738,13 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
if (device_param->kernel_exec_timeout != 0)
|
||||
{
|
||||
if (user_options->quiet == false) event_log_warning (hashcat_ctx, "* Device #%u: WARNING! Kernel exec timeout is not disabled.", device_id + 1);
|
||||
if (user_options->quiet == false) event_log_warning (hashcat_ctx, " This may cause \"CL_OUT_OF_RESOURCES\" or related errors.");
|
||||
if (user_options->quiet == false) event_log_warning (hashcat_ctx, " To disable the timeout, see: https://hashcat.net/q/timeoutpatch");
|
||||
if (user_options->quiet == false) event_log_advice (hashcat_ctx, "* Device #%u: WARNING! Kernel exec timeout is not disabled.", device_id + 1);
|
||||
if (user_options->quiet == false) event_log_advice (hashcat_ctx, " This may cause \"CL_OUT_OF_RESOURCES\" or related errors.");
|
||||
if (user_options->quiet == false) event_log_advice (hashcat_ctx, " To disable the timeout, see: https://hashcat.net/q/timeoutpatch");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* activate device
|
||||
*/
|
||||
|
||||
cuda_devices_active++;
|
||||
// activate device moved below, at end
|
||||
}
|
||||
|
||||
// instruction set
|
||||
@ -5713,18 +5769,40 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
CUcontext cuda_context;
|
||||
|
||||
if (hc_cuCtxCreate (hashcat_ctx, &cuda_context, CU_CTX_SCHED_BLOCKING_SYNC, device_param->cuda_device) == -1) return -1;
|
||||
if (hc_cuCtxCreate (hashcat_ctx, &cuda_context, CU_CTX_SCHED_BLOCKING_SYNC, device_param->cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hc_cuCtxSetCurrent (hashcat_ctx, cuda_context) == -1) return -1;
|
||||
if (hc_cuCtxSetCurrent (hashcat_ctx, cuda_context) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
size_t free = 0;
|
||||
size_t total = 0;
|
||||
|
||||
if (hc_cuMemGetInfo (hashcat_ctx, &free, &total) == -1) return -1;
|
||||
if (hc_cuMemGetInfo (hashcat_ctx, &free, &total) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_available_mem = (u64) free;
|
||||
|
||||
if (hc_cuCtxDestroy (hashcat_ctx, cuda_context) == -1) return -1;
|
||||
if (hc_cuCtxDestroy (hashcat_ctx, cuda_context) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
/**
|
||||
* activate device
|
||||
*/
|
||||
|
||||
if (device_param->skipped == false) cuda_devices_active++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5810,7 +5888,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_device_type opencl_device_type;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_TYPE, sizeof (opencl_device_type), &opencl_device_type, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_TYPE, sizeof (opencl_device_type), &opencl_device_type, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
opencl_device_type &= ~CL_DEVICE_TYPE_DEFAULT;
|
||||
|
||||
@ -5818,11 +5900,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
// device_name
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NAME, 0, NULL, ¶m_value_size) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NAME, 0, NULL, ¶m_value_size) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
char *device_name = (char *) hcmalloc (param_value_size);
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NAME, param_value_size, device_name, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NAME, param_value_size, device_name, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_name = device_name;
|
||||
|
||||
@ -5832,11 +5922,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
// device_vendor
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VENDOR, 0, NULL, ¶m_value_size) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VENDOR, 0, NULL, ¶m_value_size) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
char *opencl_device_vendor = (char *) hcmalloc (param_value_size);
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VENDOR, param_value_size, opencl_device_vendor, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VENDOR, param_value_size, opencl_device_vendor, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->opencl_device_vendor = opencl_device_vendor;
|
||||
|
||||
@ -5899,21 +5997,37 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
// device_version
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VERSION, 0, NULL, ¶m_value_size) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VERSION, 0, NULL, ¶m_value_size) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
char *opencl_device_version = (char *) hcmalloc (param_value_size);
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VERSION, param_value_size, opencl_device_version, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_VERSION, param_value_size, opencl_device_version, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->opencl_device_version = opencl_device_version;
|
||||
|
||||
// opencl_device_c_version
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_OPENCL_C_VERSION, 0, NULL, ¶m_value_size) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_OPENCL_C_VERSION, 0, NULL, ¶m_value_size) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
char *opencl_device_c_version = (char *) hcmalloc (param_value_size);
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_OPENCL_C_VERSION, param_value_size, opencl_device_c_version, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_OPENCL_C_VERSION, param_value_size, opencl_device_c_version, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->opencl_device_c_version = opencl_device_c_version;
|
||||
|
||||
@ -5921,7 +6035,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_uint device_processors = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof (device_processors), &device_processors, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof (device_processors), &device_processors, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_processors = device_processors;
|
||||
|
||||
@ -5929,7 +6047,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_ulong device_global_mem = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof (device_global_mem), &device_global_mem, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof (device_global_mem), &device_global_mem, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_global_mem = device_global_mem;
|
||||
|
||||
@ -5939,7 +6061,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_ulong device_maxmem_alloc = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof (device_maxmem_alloc), &device_maxmem_alloc, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof (device_maxmem_alloc), &device_maxmem_alloc, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_maxmem_alloc = device_maxmem_alloc;
|
||||
|
||||
@ -5951,7 +6077,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
size_t device_maxworkgroup_size = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof (device_maxworkgroup_size), &device_maxworkgroup_size, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof (device_maxworkgroup_size), &device_maxworkgroup_size, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_maxworkgroup_size = device_maxworkgroup_size;
|
||||
|
||||
@ -5959,7 +6089,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_uint device_maxclock_frequency = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof (device_maxclock_frequency), &device_maxclock_frequency, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof (device_maxclock_frequency), &device_maxclock_frequency, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_maxclock_frequency = device_maxclock_frequency;
|
||||
|
||||
@ -5967,7 +6101,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_bool device_endian_little = CL_FALSE;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_ENDIAN_LITTLE, sizeof (device_endian_little), &device_endian_little, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_ENDIAN_LITTLE, sizeof (device_endian_little), &device_endian_little, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (device_endian_little == CL_FALSE)
|
||||
{
|
||||
@ -5980,7 +6118,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_bool device_available = CL_FALSE;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_AVAILABLE, sizeof (device_available), &device_available, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_AVAILABLE, sizeof (device_available), &device_available, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (device_available == CL_FALSE)
|
||||
{
|
||||
@ -5993,7 +6135,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_bool device_compiler_available = CL_FALSE;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_COMPILER_AVAILABLE, sizeof (device_compiler_available), &device_compiler_available, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_COMPILER_AVAILABLE, sizeof (device_compiler_available), &device_compiler_available, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (device_compiler_available == CL_FALSE)
|
||||
{
|
||||
@ -6006,7 +6152,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_device_exec_capabilities device_execution_capabilities;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_EXECUTION_CAPABILITIES, sizeof (device_execution_capabilities), &device_execution_capabilities, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_EXECUTION_CAPABILITIES, sizeof (device_execution_capabilities), &device_execution_capabilities, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((device_execution_capabilities & CL_EXEC_KERNEL) == 0)
|
||||
{
|
||||
@ -6019,11 +6169,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
size_t device_extensions_size;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_EXTENSIONS, 0, NULL, &device_extensions_size) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_EXTENSIONS, 0, NULL, &device_extensions_size) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
char *device_extensions = (char *) hcmalloc (device_extensions_size + 1);
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_EXTENSIONS, device_extensions_size, device_extensions, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_EXTENSIONS, device_extensions_size, device_extensions, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strstr (device_extensions, "base_atomics") == 0)
|
||||
{
|
||||
@ -6045,7 +6203,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_device_local_mem_type device_local_mem_type;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof (device_local_mem_type), &device_local_mem_type, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof (device_local_mem_type), &device_local_mem_type, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->device_local_mem_type = device_local_mem_type;
|
||||
|
||||
@ -6053,7 +6215,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_ulong device_max_constant_buffer_size;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof (device_max_constant_buffer_size), &device_max_constant_buffer_size, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof (device_max_constant_buffer_size), &device_max_constant_buffer_size, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (device_local_mem_type == CL_LOCAL)
|
||||
{
|
||||
@ -6069,7 +6235,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_ulong device_local_mem_size = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof (device_local_mem_size), &device_local_mem_size, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof (device_local_mem_size), &device_local_mem_size, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (device_local_mem_type == CL_LOCAL)
|
||||
{
|
||||
@ -6228,11 +6398,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
// driver_version
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DRIVER_VERSION, 0, NULL, ¶m_value_size) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DRIVER_VERSION, 0, NULL, ¶m_value_size) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
char *opencl_driver_version = (char *) hcmalloc (param_value_size);
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DRIVER_VERSION, param_value_size, opencl_driver_version, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DRIVER_VERSION, param_value_size, opencl_driver_version, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->opencl_driver_version = opencl_driver_version;
|
||||
|
||||
@ -6265,7 +6443,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
{
|
||||
cl_device_topology_amd amdtopo;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_TOPOLOGY_AMD, sizeof (amdtopo), &amdtopo, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_TOPOLOGY_AMD, sizeof (amdtopo), &amdtopo, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->pcie_domain = 0; // no attribute to query
|
||||
device_param->pcie_bus = amdtopo.pcie.bus;
|
||||
@ -6278,9 +6460,17 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
cl_uint pci_bus_id_nv; // is cl_uint the right type for them??
|
||||
cl_uint pci_slot_id_nv;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_PCI_BUS_ID_NV, sizeof (pci_bus_id_nv), &pci_bus_id_nv, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_PCI_BUS_ID_NV, sizeof (pci_bus_id_nv), &pci_bus_id_nv, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_PCI_SLOT_ID_NV, sizeof (pci_slot_id_nv), &pci_slot_id_nv, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_PCI_SLOT_ID_NV, sizeof (pci_slot_id_nv), &pci_slot_id_nv, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->pcie_domain = 0; // no attribute to query
|
||||
device_param->pcie_bus = (u8) (pci_bus_id_nv);
|
||||
@ -6290,16 +6480,28 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
int sm_minor = 0;
|
||||
int sm_major = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, sizeof (sm_minor), &sm_minor, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, sizeof (sm_minor), &sm_minor, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, sizeof (sm_major), &sm_major, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, sizeof (sm_major), &sm_major, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->sm_minor = sm_minor;
|
||||
device_param->sm_major = sm_major;
|
||||
|
||||
cl_uint kernel_exec_timeout = 0;
|
||||
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, sizeof (kernel_exec_timeout), &kernel_exec_timeout, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, sizeof (kernel_exec_timeout), &kernel_exec_timeout, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->kernel_exec_timeout = kernel_exec_timeout;
|
||||
|
||||
@ -6416,7 +6618,8 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
event_log_warning (hashcat_ctx, "You can use --force to override this, but do not report related errors.");
|
||||
event_log_warning (hashcat_ctx, NULL);
|
||||
|
||||
return -1;
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6454,7 +6657,8 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
event_log_warning (hashcat_ctx, "You can use --force to override this, but do not report related errors.");
|
||||
event_log_warning (hashcat_ctx, NULL);
|
||||
|
||||
return -1;
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6503,7 +6707,8 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
event_log_warning (hashcat_ctx, "You can use --force to override this, but do not report related errors.");
|
||||
event_log_warning (hashcat_ctx, NULL);
|
||||
|
||||
return -1;
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (device_param->sm_major < 5)
|
||||
@ -6670,7 +6875,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
CL_rc = hc_clCreateContext (hashcat_ctx, properties, 1, &device_param->opencl_device, NULL, NULL, &context);
|
||||
*/
|
||||
|
||||
if (hc_clCreateContext (hashcat_ctx, NULL, 1, &device_param->opencl_device, NULL, NULL, &context) == -1) return -1;
|
||||
if (hc_clCreateContext (hashcat_ctx, NULL, 1, &device_param->opencl_device, NULL, NULL, &context) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
/**
|
||||
* create command-queue
|
||||
@ -6678,7 +6887,11 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
|
||||
|
||||
cl_command_queue command_queue;
|
||||
|
||||
if (hc_clCreateCommandQueue (hashcat_ctx, context, device_param->opencl_device, 0, &command_queue) == -1) return -1;
|
||||
if (hc_clCreateCommandQueue (hashcat_ctx, context, device_param->opencl_device, 0, &command_queue) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
// instruction set
|
||||
|
||||
@ -7700,7 +7913,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (device_param->is_opencl == true)
|
||||
{
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, sizeof (vector_width), &vector_width, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, sizeof (vector_width), &vector_width, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -7714,7 +7931,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (device_param->is_opencl == true)
|
||||
{
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, sizeof (vector_width), &vector_width, NULL) == -1) return -1;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, sizeof (vector_width), &vector_width, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7895,7 +8116,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (device_param->is_cuda == true)
|
||||
{
|
||||
if (hc_cuCtxCreate (hashcat_ctx, &device_param->cuda_context, CU_CTX_SCHED_BLOCKING_SYNC, device_param->cuda_device) == -1) return -1;
|
||||
if (hc_cuCtxCreate (hashcat_ctx, &device_param->cuda_context, CU_CTX_SCHED_BLOCKING_SYNC, device_param->cuda_device) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (device_param->is_opencl == true)
|
||||
@ -7910,7 +8135,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
CL_rc = hc_clCreateContext (hashcat_ctx, properties, 1, &device_param->opencl_device, NULL, NULL, &device_param->opencl_context);
|
||||
*/
|
||||
|
||||
if (hc_clCreateContext (hashcat_ctx, NULL, 1, &device_param->opencl_device, NULL, NULL, &device_param->opencl_context) == -1) return -1;
|
||||
if (hc_clCreateContext (hashcat_ctx, NULL, 1, &device_param->opencl_device, NULL, NULL, &device_param->opencl_context) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
/**
|
||||
* create command-queue
|
||||
@ -7919,7 +8148,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
// not supported with NV
|
||||
// device_param->opencl_command_queue = hc_clCreateCommandQueueWithProperties (hashcat_ctx, device_param->opencl_device, NULL);
|
||||
|
||||
if (hc_clCreateCommandQueue (hashcat_ctx, device_param->opencl_context, device_param->opencl_device, CL_QUEUE_PROFILING_ENABLE, &device_param->opencl_command_queue) == -1) return -1;
|
||||
if (hc_clCreateCommandQueue (hashcat_ctx, device_param->opencl_context, device_param->opencl_device, CL_QUEUE_PROFILING_ENABLE, &device_param->opencl_command_queue) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -7928,7 +8161,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (device_param->is_cuda == true)
|
||||
{
|
||||
if (hc_cuStreamCreate (hashcat_ctx, &device_param->cuda_stream, CU_STREAM_DEFAULT) == -1) return -1;
|
||||
if (hc_cuStreamCreate (hashcat_ctx, &device_param->cuda_stream, CU_STREAM_DEFAULT) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -7937,9 +8174,17 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (device_param->is_cuda == true)
|
||||
{
|
||||
if (hc_cuEventCreate (hashcat_ctx, &device_param->cuda_event1, CU_EVENT_BLOCKING_SYNC) == -1) return -1;
|
||||
if (hc_cuEventCreate (hashcat_ctx, &device_param->cuda_event1, CU_EVENT_BLOCKING_SYNC) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hc_cuEventCreate (hashcat_ctx, &device_param->cuda_event2, CU_EVENT_BLOCKING_SYNC) == -1) return -1;
|
||||
if (hc_cuEventCreate (hashcat_ctx, &device_param->cuda_event2, CU_EVENT_BLOCKING_SYNC) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -8000,7 +8245,8 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
{
|
||||
event_log_error (hashcat_ctx, "Invalid extra buffer size.");
|
||||
|
||||
return -1;
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
device_param->extra_buffer_size = extra_buffer_size;
|
||||
|
@ -79,7 +79,7 @@ int bitmap_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
bitmap_ctx->enabled = false;
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -19,7 +19,7 @@ int combinator_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
combinator_ctx->enabled = false;
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
if (user_options->show == true) return 0;
|
||||
|
@ -15,7 +15,7 @@ int cpt_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
cpt_ctx->enabled = false;
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -87,7 +87,7 @@ int debugfile_init (hashcat_ctx_t *hashcat_ctx)
|
||||
debugfile_ctx->enabled = false;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -57,7 +57,7 @@ int dictstat_init (hashcat_ctx_t *hashcat_ctx)
|
||||
dictstat_ctx->enabled = false;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -74,7 +74,7 @@ bool hc_fopen (HCFILE *fp, const char *path, char *mode)
|
||||
|
||||
if (read (fd_tmp, check, sizeof (check)) > 0)
|
||||
{
|
||||
if (check[0] == 0x1f && check[1] == 0x8b && check[2] == 0x08 && check[3] == 0x08) fp->is_gzip = true;
|
||||
if (check[0] == 0x1f && check[1] == 0x8b && check[2] == 0x08) fp->is_gzip = true;
|
||||
if (check[0] == 0x50 && check[1] == 0x4b && check[2] == 0x03 && check[3] == 0x04) fp->is_zip = true;
|
||||
}
|
||||
|
||||
|
122
src/hashes.c
122
src/hashes.c
@ -633,18 +633,33 @@ int hashes_init_filename (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE)
|
||||
{
|
||||
hashes->hashlist_mode = HL_MODE_FILE_BINARY;
|
||||
|
||||
if ((user_options->benchmark == false) && (user_options->keyspace == false))
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE_OPTIONAL)
|
||||
{
|
||||
if (hc_path_read (user_options_extra->hc_hash) == false)
|
||||
if ((user_options->benchmark == false) && (user_options->keyspace == false))
|
||||
{
|
||||
event_log_error (hashcat_ctx, "%s: %s", user_options_extra->hc_hash, strerror (errno));
|
||||
hashes->hashlist_mode = (hc_path_exist (user_options_extra->hc_hash) == true) ? HL_MODE_FILE_PLAIN : HL_MODE_ARG;
|
||||
|
||||
return -1;
|
||||
if (hashes->hashlist_mode == HL_MODE_FILE_PLAIN)
|
||||
{
|
||||
hashes->hashfile = user_options_extra->hc_hash;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hashes->hashlist_mode = HL_MODE_FILE_BINARY;
|
||||
|
||||
hashes->hashfile = user_options_extra->hc_hash;
|
||||
if ((user_options->benchmark == false) && (user_options->keyspace == false))
|
||||
{
|
||||
if (hc_path_read (user_options_extra->hc_hash) == false)
|
||||
{
|
||||
event_log_error (hashcat_ctx, "%s: %s", user_options_extra->hc_hash, strerror (errno));
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
hashes->hashfile = user_options_extra->hc_hash;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -901,7 +916,7 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
hashes_cnt = 1;
|
||||
}
|
||||
else if (user_options->example_hashes == true)
|
||||
else if (user_options->hash_info == true)
|
||||
{
|
||||
}
|
||||
else if (user_options->keyspace == true)
|
||||
@ -1172,7 +1187,17 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
compress_terminal_line_length (tmp_line_buf, 38, 32);
|
||||
|
||||
event_log_warning (hashcat_ctx, "Hashfile '%s' on line %u (%s): %s", hashes->hashfile, line_num, tmp_line_buf, strparser (parser_status));
|
||||
if (user_options->machine_readable == true) {
|
||||
event_log_warning(hashcat_ctx, "%s:%u:%s:%s", hashes->hashfile,
|
||||
line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
|
||||
} else {
|
||||
event_log_warning(hashcat_ctx,
|
||||
"Hashfile '%s' on line %u (%s): %s",
|
||||
hashes->hashfile, line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
}
|
||||
|
||||
hcfree (tmp_line_buf);
|
||||
|
||||
@ -1196,7 +1221,17 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
compress_terminal_line_length (tmp_line_buf, 38, 32);
|
||||
|
||||
event_log_warning (hashcat_ctx, "Hashfile '%s' on line %u (%s): %s", hashes->hashfile, line_num, tmp_line_buf, strparser (parser_status));
|
||||
if (user_options->machine_readable == true) {
|
||||
event_log_warning(hashcat_ctx, "%s:%u:%s:%s", hashes->hashfile,
|
||||
line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
|
||||
} else {
|
||||
event_log_warning(hashcat_ctx,
|
||||
"Hashfile '%s' on line %u (%s): %s",
|
||||
hashes->hashfile, line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
}
|
||||
|
||||
hcfree (tmp_line_buf);
|
||||
|
||||
@ -1222,7 +1257,17 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
compress_terminal_line_length (tmp_line_buf, 38, 32);
|
||||
|
||||
event_log_warning (hashcat_ctx, "Hashfile '%s' on line %u (%s): %s", hashes->hashfile, line_num, tmp_line_buf, strparser (parser_status));
|
||||
if (user_options->machine_readable == true) {
|
||||
event_log_warning(hashcat_ctx, "%s:%u:%s:%s", hashes->hashfile,
|
||||
line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
|
||||
} else {
|
||||
event_log_warning(hashcat_ctx,
|
||||
"Hashfile '%s' on line %u (%s): %s",
|
||||
hashes->hashfile, line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
}
|
||||
|
||||
hcfree (tmp_line_buf);
|
||||
|
||||
@ -1249,7 +1294,17 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
compress_terminal_line_length (tmp_line_buf, 38, 32);
|
||||
|
||||
event_log_warning (hashcat_ctx, "Hashfile '%s' on line %u (%s): %s", hashes->hashfile, line_num, tmp_line_buf, strparser (parser_status));
|
||||
if (user_options->machine_readable == true) {
|
||||
event_log_warning(hashcat_ctx, "%s:%u:%s:%s", hashes->hashfile,
|
||||
line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
|
||||
} else {
|
||||
event_log_warning(hashcat_ctx,
|
||||
"Hashfile '%s' on line %u (%s): %s",
|
||||
hashes->hashfile, line_num, tmp_line_buf,
|
||||
strparser(parser_status));
|
||||
}
|
||||
|
||||
hcfree (tmp_line_buf);
|
||||
|
||||
@ -1858,30 +1913,37 @@ int hashes_init_selftest (hashcat_ctx_t *hashcat_ctx)
|
||||
{
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE)
|
||||
{
|
||||
char *tmpfile_bin;
|
||||
|
||||
hc_asprintf (&tmpfile_bin, "%s/selftest.hash", folder_config->session_dir);
|
||||
|
||||
HCFILE fp;
|
||||
|
||||
hc_fopen (&fp, tmpfile_bin, "wb");
|
||||
|
||||
const size_t st_hash_len = strlen (hashconfig->st_hash);
|
||||
|
||||
for (size_t i = 0; i < st_hash_len; i += 2)
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE_OPTIONAL)
|
||||
{
|
||||
const u8 c = hex_to_u8 ((const u8 *) hashconfig->st_hash + i);
|
||||
|
||||
hc_fputc (c, &fp);
|
||||
parser_status = module_ctx->module_hash_decode (hashconfig, hash.digest, hash.salt, hash.esalt, hash.hook_salt, hash.hash_info, hashconfig->st_hash, strlen (hashconfig->st_hash));
|
||||
}
|
||||
else
|
||||
{
|
||||
char *tmpfile_bin;
|
||||
|
||||
hc_fclose (&fp);
|
||||
hc_asprintf (&tmpfile_bin, "%s/selftest.hash", folder_config->session_dir);
|
||||
|
||||
parser_status = module_ctx->module_hash_decode (hashconfig, hash.digest, hash.salt, hash.esalt, hash.hook_salt, hash.hash_info, tmpfile_bin, strlen (tmpfile_bin));
|
||||
HCFILE fp;
|
||||
|
||||
unlink (tmpfile_bin);
|
||||
hc_fopen (&fp, tmpfile_bin, "wb");
|
||||
|
||||
hcfree (tmpfile_bin);
|
||||
const size_t st_hash_len = strlen (hashconfig->st_hash);
|
||||
|
||||
for (size_t i = 0; i < st_hash_len; i += 2)
|
||||
{
|
||||
const u8 c = hex_to_u8 ((const u8 *) hashconfig->st_hash + i);
|
||||
|
||||
hc_fputc (c, &fp);
|
||||
}
|
||||
|
||||
hc_fclose (&fp);
|
||||
|
||||
parser_status = module_ctx->module_hash_decode (hashconfig, hash.digest, hash.salt, hash.esalt, hash.hook_salt, hash.hash_info, tmpfile_bin, strlen (tmpfile_bin));
|
||||
|
||||
unlink (tmpfile_bin);
|
||||
|
||||
hcfree (tmpfile_bin);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2225,7 +2225,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
return 0;
|
||||
#endif // WITH_HWMON
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -40,7 +40,7 @@ int induct_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
induct_ctx->enabled = false;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -333,7 +333,7 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
hashconfig->has_optimized_kernel = hc_path_read (source_file);
|
||||
|
||||
if (user_options->example_hashes == false)
|
||||
if (user_options->hash_info == false)
|
||||
{
|
||||
if (user_options->optimized_kernel_enable == true)
|
||||
{
|
||||
|
@ -61,7 +61,7 @@ int loopback_init (hashcat_ctx_t *hashcat_ctx)
|
||||
loopback_ctx->enabled = false;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
23
src/main.c
23
src/main.c
@ -184,16 +184,19 @@ static void main_outerloop_starting (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MA
|
||||
|
||||
status_ctx->shutdown_outer = false;
|
||||
|
||||
if ((user_options->example_hashes == false) && (user_options->keyspace == false) && (user_options->stdout_flag == false) && (user_options->backend_info == false) && (user_options->speed_only == false))
|
||||
if (user_options->hash_info == true) return;
|
||||
if (user_options->keyspace == true) return;
|
||||
if (user_options->stdout_flag == true) return;
|
||||
if (user_options->backend_info == true) return;
|
||||
if (user_options->speed_only == true) return;
|
||||
|
||||
if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK))
|
||||
{
|
||||
if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK))
|
||||
{
|
||||
// see thread_keypress() how to access status information
|
||||
// see thread_keypress() how to access status information
|
||||
|
||||
hc_thread_create (hashcat_user->outer_threads[hashcat_user->outer_threads_cnt], thread_keypress, hashcat_ctx);
|
||||
hc_thread_create (hashcat_user->outer_threads[hashcat_user->outer_threads_cnt], thread_keypress, hashcat_ctx);
|
||||
|
||||
hashcat_user->outer_threads_cnt++;
|
||||
}
|
||||
hashcat_user->outer_threads_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,7 +260,7 @@ static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB
|
||||
const user_options_t *user_options = hashcat_ctx->user_options;
|
||||
const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra;
|
||||
|
||||
if (user_options->example_hashes == true) return;
|
||||
if (user_options->hash_info == true) return;
|
||||
if (user_options->keyspace == true) return;
|
||||
if (user_options->backend_info == true) return;
|
||||
if (user_options->stdout_flag == true) return;
|
||||
@ -1157,9 +1160,9 @@ int main (int argc, char **argv)
|
||||
|
||||
rc_final = 0;
|
||||
}
|
||||
else if (user_options->example_hashes == true)
|
||||
else if (user_options->hash_info == true)
|
||||
{
|
||||
example_hashes (hashcat_ctx);
|
||||
hash_info (hashcat_ctx);
|
||||
|
||||
rc_final = 0;
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE
|
||||
| OPTS_TYPE_AUX3
|
||||
| OPTS_TYPE_AUX4
|
||||
| OPTS_TYPE_BINARY_HASHFILE
|
||||
| OPTS_TYPE_BINARY_HASHFILE_OPTIONAL
|
||||
| OPTS_TYPE_DEEP_COMP_KERNEL
|
||||
| OPTS_TYPE_COPY_TMPS;
|
||||
static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED;
|
||||
|
@ -35,6 +35,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE
|
||||
| OPTS_TYPE_AUX3
|
||||
| OPTS_TYPE_AUX4
|
||||
| OPTS_TYPE_BINARY_HASHFILE
|
||||
| OPTS_TYPE_BINARY_HASHFILE_OPTIONAL
|
||||
| OPTS_TYPE_DEEP_COMP_KERNEL
|
||||
| OPTS_TYPE_COPY_TMPS
|
||||
| OPTS_TYPE_POTFILE_NOPASS;
|
||||
|
355
src/modules/module_24600.c
Normal file
355
src/modules/module_24600.c
Normal file
@ -0,0 +1,355 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "types.h"
|
||||
#include "modules.h"
|
||||
#include "bitops.h"
|
||||
#include "convert.h"
|
||||
#include "shared.h"
|
||||
|
||||
static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL;
|
||||
static const u32 DGST_POS0 = 0;
|
||||
static const u32 DGST_POS1 = 1;
|
||||
static const u32 DGST_POS2 = 2;
|
||||
static const u32 DGST_POS3 = 3;
|
||||
static const u32 DGST_SIZE = DGST_SIZE_4_4;
|
||||
static const u32 HASH_CATEGORY = HASH_CATEGORY_DATABASE_SERVER;
|
||||
static const char *HASH_NAME = "SQLCipher";
|
||||
static const u64 KERN_TYPE = 24610;
|
||||
static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE
|
||||
| OPTI_TYPE_USES_BITS_64
|
||||
| OPTI_TYPE_SLOW_HASH_SIMD_LOOP;
|
||||
static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE
|
||||
| OPTS_TYPE_SELF_TEST_DISABLE;
|
||||
static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED;
|
||||
static const char *ST_PASS = "hashcat";
|
||||
static const char *ST_HASH = "SQLCIPHER*1*64000*25548249195677404156261816261456*85b5e156e1cf1e0be5e9f4217186817b*33435c230bbc7989bbd027630e3f47cd";
|
||||
|
||||
u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; }
|
||||
u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; }
|
||||
u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; }
|
||||
u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; }
|
||||
u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; }
|
||||
u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; }
|
||||
u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; }
|
||||
const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; }
|
||||
u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; }
|
||||
u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; }
|
||||
u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; }
|
||||
u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; }
|
||||
const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; }
|
||||
const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; }
|
||||
|
||||
typedef struct sqlcipher_sha1_tmp
|
||||
{
|
||||
u32 ipad[5];
|
||||
u32 opad[5];
|
||||
|
||||
u32 dgst[10];
|
||||
u32 out[10];
|
||||
|
||||
} sqlcipher_sha1_tmp_t;
|
||||
|
||||
typedef struct sqlcipher_sha256_tmp
|
||||
{
|
||||
u32 ipad[8];
|
||||
u32 opad[8];
|
||||
|
||||
u32 dgst[8];
|
||||
u32 out[8];
|
||||
|
||||
} sqlcipher_sha256_tmp_t;
|
||||
|
||||
typedef struct sqlcipher_sha512_tmp
|
||||
{
|
||||
u64 ipad[8];
|
||||
u64 opad[8];
|
||||
|
||||
u64 dgst[8];
|
||||
u64 out[8];
|
||||
|
||||
} sqlcipher_sha512_tmp_t;
|
||||
|
||||
typedef struct sqlcipher
|
||||
{
|
||||
u32 iv_buf[4];
|
||||
u32 data_buf[4];
|
||||
|
||||
u32 type;
|
||||
|
||||
} sqlcipher_t;
|
||||
|
||||
typedef enum kern_type_sqlcipher
|
||||
{
|
||||
KERN_TYPE_SQLCIPHER_SHA1 = 24610,
|
||||
KERN_TYPE_SQLCIPHER_SHA256 = 24620,
|
||||
KERN_TYPE_SQLCIPHER_SHA512 = 24630,
|
||||
|
||||
} kern_type_sqlcipher_t;
|
||||
|
||||
static const char *SIGNATURE_SQLCIPHER = "SQLCIPHER";
|
||||
|
||||
u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||
{
|
||||
const u64 esalt_size = (const u64) sizeof (sqlcipher_t);
|
||||
|
||||
return esalt_size;
|
||||
}
|
||||
|
||||
u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||
{
|
||||
const u64 tmp_size = (const u64) sizeof (sqlcipher_sha512_tmp_t); // we just select the largest
|
||||
|
||||
return tmp_size;
|
||||
}
|
||||
|
||||
u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||
{
|
||||
// this overrides the reductions of PW_MAX in case optimized kernel is selected
|
||||
// IOW, even in optimized kernel mode it support length 256
|
||||
|
||||
const u32 pw_max = PW_MAX;
|
||||
|
||||
return pw_max;
|
||||
}
|
||||
|
||||
u64 module_kern_type_dynamic (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info)
|
||||
{
|
||||
const sqlcipher_t *sqlcipher = (const sqlcipher_t *) esalt_buf;
|
||||
|
||||
u64 kern_type = -1;
|
||||
|
||||
if (sqlcipher->type == 1)
|
||||
{
|
||||
kern_type = KERN_TYPE_SQLCIPHER_SHA1;
|
||||
}
|
||||
else if (sqlcipher->type == 2)
|
||||
{
|
||||
kern_type = KERN_TYPE_SQLCIPHER_SHA256;
|
||||
}
|
||||
else if (sqlcipher->type == 3)
|
||||
{
|
||||
kern_type = KERN_TYPE_SQLCIPHER_SHA512;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (PARSER_HASH_LENGTH);
|
||||
}
|
||||
|
||||
return kern_type;
|
||||
}
|
||||
|
||||
int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len)
|
||||
{
|
||||
u32 *digest = (u32 *) digest_buf;
|
||||
|
||||
sqlcipher_t *sqlcipher = (sqlcipher_t *) esalt_buf;
|
||||
|
||||
token_t token;
|
||||
|
||||
token.token_cnt = 6;
|
||||
|
||||
token.signatures_cnt = 1;
|
||||
token.signatures_buf[0] = SIGNATURE_SQLCIPHER;
|
||||
|
||||
token.sep[0] = '*';
|
||||
token.len_min[0] = 9;
|
||||
token.len_max[0] = 9;
|
||||
token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
||||
|
||||
token.sep[1] = '*';
|
||||
token.len_min[1] = 1;
|
||||
token.len_max[1] = 1;
|
||||
token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_DIGIT;
|
||||
|
||||
token.sep[2] = '*';
|
||||
token.len_min[2] = 1;
|
||||
token.len_max[2] = 6;
|
||||
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_DIGIT;
|
||||
|
||||
token.sep[3] = '*';
|
||||
token.len_min[3] = 32;
|
||||
token.len_max[3] = 32;
|
||||
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_HEX;
|
||||
|
||||
token.sep[4] = '*';
|
||||
token.len_min[4] = 32;
|
||||
token.len_max[4] = 32;
|
||||
token.attr[4] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_HEX;
|
||||
|
||||
token.sep[5] = '*';
|
||||
token.len_min[5] = 32;
|
||||
token.len_max[5] = 32;
|
||||
token.attr[5] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_HEX;
|
||||
|
||||
const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
|
||||
|
||||
if (rc_tokenizer != PARSER_OK) return (rc_tokenizer);
|
||||
|
||||
// type
|
||||
|
||||
const u8 *type_pos = token.buf[1];
|
||||
|
||||
const int type = hc_strtoul ((const char *) type_pos, NULL, 10);
|
||||
|
||||
if ((type != 1) && (type != 2) && (type != 3)) return (PARSER_SIGNATURE_UNMATCHED);
|
||||
|
||||
sqlcipher->type = type;
|
||||
|
||||
// cipher
|
||||
|
||||
const u8 *iter_pos = token.buf[2];
|
||||
|
||||
int iter = hc_strtoul ((const char *) iter_pos, NULL, 10);
|
||||
|
||||
salt->salt_iter = iter - 1;
|
||||
|
||||
// salt buffer
|
||||
|
||||
const u8 *salt_pos = token.buf[3];
|
||||
|
||||
salt->salt_buf[0] = hex_to_u32 (salt_pos + 0);
|
||||
salt->salt_buf[1] = hex_to_u32 (salt_pos + 8);
|
||||
salt->salt_buf[2] = hex_to_u32 (salt_pos + 16);
|
||||
salt->salt_buf[3] = hex_to_u32 (salt_pos + 24);
|
||||
|
||||
salt->salt_len = 16;
|
||||
|
||||
// IV buffer
|
||||
|
||||
const u8 *iv_pos = token.buf[4];
|
||||
|
||||
sqlcipher->iv_buf[0] = hex_to_u32 (iv_pos + 0);
|
||||
sqlcipher->iv_buf[1] = hex_to_u32 (iv_pos + 8);
|
||||
sqlcipher->iv_buf[2] = hex_to_u32 (iv_pos + 16);
|
||||
sqlcipher->iv_buf[3] = hex_to_u32 (iv_pos + 24);
|
||||
|
||||
// data buffer
|
||||
|
||||
const u8 *data_pos = token.buf[5];
|
||||
|
||||
sqlcipher->data_buf[0] = hex_to_u32 (data_pos + 0);
|
||||
sqlcipher->data_buf[1] = hex_to_u32 (data_pos + 8);
|
||||
sqlcipher->data_buf[2] = hex_to_u32 (data_pos + 16);
|
||||
sqlcipher->data_buf[3] = hex_to_u32 (data_pos + 24);
|
||||
|
||||
// hash
|
||||
|
||||
digest[0] = sqlcipher->data_buf[0];
|
||||
digest[1] = sqlcipher->data_buf[1];
|
||||
digest[2] = sqlcipher->data_buf[2];
|
||||
digest[3] = sqlcipher->data_buf[3];
|
||||
|
||||
return (PARSER_OK);
|
||||
}
|
||||
|
||||
int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size)
|
||||
{
|
||||
sqlcipher_t *sqlcipher = (sqlcipher_t *) esalt_buf;
|
||||
|
||||
u8 *out_buf = (u8 *) line_buf;
|
||||
|
||||
const int out_len = snprintf ((char *) out_buf, line_size, "%s*%d*%d*%08x%08x%08x%08x*%08x%08x%08x%08x*%08x%08x%08x%08x",
|
||||
SIGNATURE_SQLCIPHER,
|
||||
sqlcipher->type,
|
||||
salt->salt_iter + 1,
|
||||
byte_swap_32 (salt->salt_buf[0]),
|
||||
byte_swap_32 (salt->salt_buf[1]),
|
||||
byte_swap_32 (salt->salt_buf[2]),
|
||||
byte_swap_32 (salt->salt_buf[3]),
|
||||
byte_swap_32 (sqlcipher->iv_buf[0]),
|
||||
byte_swap_32 (sqlcipher->iv_buf[1]),
|
||||
byte_swap_32 (sqlcipher->iv_buf[2]),
|
||||
byte_swap_32 (sqlcipher->iv_buf[3]),
|
||||
byte_swap_32 (sqlcipher->data_buf[0]),
|
||||
byte_swap_32 (sqlcipher->data_buf[1]),
|
||||
byte_swap_32 (sqlcipher->data_buf[2]),
|
||||
byte_swap_32 (sqlcipher->data_buf[3]));
|
||||
|
||||
return out_len;
|
||||
}
|
||||
|
||||
void module_init (module_ctx_t *module_ctx)
|
||||
{
|
||||
module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT;
|
||||
module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT;
|
||||
|
||||
module_ctx->module_attack_exec = module_attack_exec;
|
||||
module_ctx->module_benchmark_esalt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_mask = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_build_plain_postprocess = MODULE_DEFAULT;
|
||||
module_ctx->module_deep_comp_kernel = MODULE_DEFAULT;
|
||||
module_ctx->module_dgst_pos0 = module_dgst_pos0;
|
||||
module_ctx->module_dgst_pos1 = module_dgst_pos1;
|
||||
module_ctx->module_dgst_pos2 = module_dgst_pos2;
|
||||
module_ctx->module_dgst_pos3 = module_dgst_pos3;
|
||||
module_ctx->module_dgst_size = module_dgst_size;
|
||||
module_ctx->module_dictstat_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_esalt_size = module_esalt_size;
|
||||
module_ctx->module_extra_buffer_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_forced_outfile_format = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_count = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_parse = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_save = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode = module_hash_decode;
|
||||
module_ctx->module_hash_encode_status = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode = module_hash_encode;
|
||||
module_ctx->module_hash_init_selftest = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_mode = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_category = module_hash_category;
|
||||
module_ctx->module_hash_name = module_hash_name;
|
||||
module_ctx->module_hashes_count_min = MODULE_DEFAULT;
|
||||
module_ctx->module_hashes_count_max = MODULE_DEFAULT;
|
||||
module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_init = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_term = MODULE_DEFAULT;
|
||||
module_ctx->module_hook12 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook23 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_salt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_size = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_build_options = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_cache_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kern_type = module_kern_type;
|
||||
module_ctx->module_kern_type_dynamic = module_kern_type_dynamic;
|
||||
module_ctx->module_opti_type = module_opti_type;
|
||||
module_ctx->module_opts_type = module_opts_type;
|
||||
module_ctx->module_outfile_check_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_custom_check = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT;
|
||||
module_ctx->module_pwdump_column = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_max = module_pw_max;
|
||||
module_ctx->module_pw_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_max = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_type = module_salt_type;
|
||||
module_ctx->module_separator = MODULE_DEFAULT;
|
||||
module_ctx->module_st_hash = module_st_hash;
|
||||
module_ctx->module_st_pass = module_st_pass;
|
||||
module_ctx->module_tmp_size = module_tmp_size;
|
||||
module_ctx->module_unstable_warning = MODULE_DEFAULT;
|
||||
module_ctx->module_warmup_disable = MODULE_DEFAULT;
|
||||
}
|
182
src/modules/module_24700.c
Normal file
182
src/modules/module_24700.c
Normal file
@ -0,0 +1,182 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "types.h"
|
||||
#include "modules.h"
|
||||
#include "bitops.h"
|
||||
#include "convert.h"
|
||||
#include "shared.h"
|
||||
|
||||
static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL;
|
||||
static const u32 DGST_POS0 = 0;
|
||||
static const u32 DGST_POS1 = 1;
|
||||
static const u32 DGST_POS2 = 2;
|
||||
static const u32 DGST_POS3 = 3;
|
||||
static const u32 DGST_SIZE = DGST_SIZE_4_4;
|
||||
static const u32 HASH_CATEGORY = HASH_CATEGORY_ARCHIVE;
|
||||
static const char *HASH_NAME = "Stuffit5";
|
||||
static const u64 KERN_TYPE = 24700;
|
||||
static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE
|
||||
| OPTI_TYPE_PRECOMPUTE_INIT
|
||||
| OPTI_TYPE_EARLY_SKIP;
|
||||
static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE
|
||||
| OPTS_TYPE_PT_ADD80
|
||||
| OPTS_TYPE_PT_ADDBITS14;
|
||||
static const u32 SALT_TYPE = SALT_TYPE_NONE;
|
||||
static const char *ST_PASS = "hashcat";
|
||||
static const char *ST_HASH = "66a75cb059";
|
||||
|
||||
u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; }
|
||||
u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; }
|
||||
u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; }
|
||||
u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; }
|
||||
u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; }
|
||||
u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; }
|
||||
u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; }
|
||||
const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; }
|
||||
u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; }
|
||||
u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; }
|
||||
u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; }
|
||||
u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; }
|
||||
const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; }
|
||||
const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; }
|
||||
|
||||
int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len)
|
||||
{
|
||||
u32 *digest = (u32 *) digest_buf;
|
||||
|
||||
token_t token;
|
||||
|
||||
token.token_cnt = 1;
|
||||
|
||||
token.len_min[0] = 10;
|
||||
token.len_max[0] = 10;
|
||||
token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_HEX;
|
||||
|
||||
const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
|
||||
|
||||
if (rc_tokenizer != PARSER_OK) return (rc_tokenizer);
|
||||
|
||||
const u8 *hash_pos = token.buf[0];
|
||||
|
||||
digest[0] = hex_to_u32 (hash_pos + 0);
|
||||
digest[1] = hex_to_u32 (hash_pos + 8);
|
||||
|
||||
if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL)
|
||||
{
|
||||
digest[0] -= MD5M_A;
|
||||
digest[1] -= MD5M_B;
|
||||
}
|
||||
|
||||
digest[1] &= 0x000000ff;
|
||||
|
||||
return (PARSER_OK);
|
||||
}
|
||||
|
||||
int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size)
|
||||
{
|
||||
const u32 *digest = (const u32 *) digest_buf;
|
||||
|
||||
// we can not change anything in the original buffer, otherwise destroying sorting
|
||||
// therefore create some local buffer
|
||||
|
||||
u32 tmp[2];
|
||||
|
||||
tmp[0] = digest[0];
|
||||
tmp[1] = digest[1];
|
||||
|
||||
if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL)
|
||||
{
|
||||
tmp[0] += MD5M_A;
|
||||
tmp[1] += MD5M_B;
|
||||
}
|
||||
|
||||
u8 *out_buf = (u8 *) line_buf;
|
||||
|
||||
int out_len = 0;
|
||||
|
||||
u32_to_hex (tmp[0], out_buf + out_len); out_len += 8;
|
||||
u32_to_hex (tmp[1], out_buf + out_len); out_len += 2;
|
||||
|
||||
return out_len;
|
||||
}
|
||||
|
||||
void module_init (module_ctx_t *module_ctx)
|
||||
{
|
||||
module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT;
|
||||
module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT;
|
||||
|
||||
module_ctx->module_attack_exec = module_attack_exec;
|
||||
module_ctx->module_benchmark_esalt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_mask = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_build_plain_postprocess = MODULE_DEFAULT;
|
||||
module_ctx->module_deep_comp_kernel = MODULE_DEFAULT;
|
||||
module_ctx->module_dgst_pos0 = module_dgst_pos0;
|
||||
module_ctx->module_dgst_pos1 = module_dgst_pos1;
|
||||
module_ctx->module_dgst_pos2 = module_dgst_pos2;
|
||||
module_ctx->module_dgst_pos3 = module_dgst_pos3;
|
||||
module_ctx->module_dgst_size = module_dgst_size;
|
||||
module_ctx->module_dictstat_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_esalt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_buffer_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_forced_outfile_format = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_count = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_parse = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_save = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode = module_hash_decode;
|
||||
module_ctx->module_hash_encode_status = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode = module_hash_encode;
|
||||
module_ctx->module_hash_init_selftest = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_mode = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_category = module_hash_category;
|
||||
module_ctx->module_hash_name = module_hash_name;
|
||||
module_ctx->module_hashes_count_min = MODULE_DEFAULT;
|
||||
module_ctx->module_hashes_count_max = MODULE_DEFAULT;
|
||||
module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_init = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_term = MODULE_DEFAULT;
|
||||
module_ctx->module_hook12 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook23 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_salt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_size = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_build_options = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_cache_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kern_type = module_kern_type;
|
||||
module_ctx->module_kern_type_dynamic = MODULE_DEFAULT;
|
||||
module_ctx->module_opti_type = module_opti_type;
|
||||
module_ctx->module_opts_type = module_opts_type;
|
||||
module_ctx->module_outfile_check_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_custom_check = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT;
|
||||
module_ctx->module_pwdump_column = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_max = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_max = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_type = module_salt_type;
|
||||
module_ctx->module_separator = MODULE_DEFAULT;
|
||||
module_ctx->module_st_hash = module_st_hash;
|
||||
module_ctx->module_st_pass = module_st_pass;
|
||||
module_ctx->module_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_unstable_warning = MODULE_DEFAULT;
|
||||
module_ctx->module_warmup_disable = MODULE_DEFAULT;
|
||||
}
|
186
src/modules/module_24800.c
Normal file
186
src/modules/module_24800.c
Normal file
@ -0,0 +1,186 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "types.h"
|
||||
#include "modules.h"
|
||||
#include "bitops.h"
|
||||
#include "convert.h"
|
||||
#include "shared.h"
|
||||
|
||||
static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL;
|
||||
static const u32 DGST_POS0 = 3;
|
||||
static const u32 DGST_POS1 = 4;
|
||||
static const u32 DGST_POS2 = 2;
|
||||
static const u32 DGST_POS3 = 1;
|
||||
static const u32 DGST_SIZE = DGST_SIZE_4_5;
|
||||
static const u32 HASH_CATEGORY = HASH_CATEGORY_FORUM_SOFTWARE;
|
||||
static const char *HASH_NAME = "Umbraco HMAC-SHA1";
|
||||
static const u64 KERN_TYPE = 24800;
|
||||
static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE
|
||||
| OPTI_TYPE_NOT_ITERATED;
|
||||
static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_BE
|
||||
| OPTS_TYPE_PT_UTF16LE;
|
||||
static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED;
|
||||
static const char *ST_PASS = "hashcat";
|
||||
static const char *ST_HASH = "8uigXlGMNI7BzwLCJlDbcKR2FP4=";
|
||||
|
||||
u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; }
|
||||
u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; }
|
||||
u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; }
|
||||
u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; }
|
||||
u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; }
|
||||
u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; }
|
||||
u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; }
|
||||
const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; }
|
||||
u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; }
|
||||
u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; }
|
||||
u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; }
|
||||
u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; }
|
||||
const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; }
|
||||
const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; }
|
||||
|
||||
int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len)
|
||||
{
|
||||
u32 *digest = (u32 *) digest_buf;
|
||||
|
||||
token_t token;
|
||||
|
||||
token.token_cnt = 1;
|
||||
|
||||
token.len_min[0] = 28;
|
||||
token.len_max[0] = 28;
|
||||
token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_BASE64A;
|
||||
|
||||
const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
|
||||
|
||||
if (rc_tokenizer != PARSER_OK) return (rc_tokenizer);
|
||||
|
||||
const u8 *hash_pos = token.buf[0];
|
||||
const int hash_len = token.len[0];
|
||||
|
||||
u8 tmp_buf[32] = { 0 };
|
||||
|
||||
const int decoded_len = base64_decode (base64_to_int, hash_pos, hash_len, tmp_buf);
|
||||
|
||||
if (decoded_len != 20) return (PARSER_HASH_LENGTH);
|
||||
|
||||
memcpy (digest, tmp_buf, 20);
|
||||
|
||||
digest[0] = byte_swap_32 (digest[0]);
|
||||
digest[1] = byte_swap_32 (digest[1]);
|
||||
digest[2] = byte_swap_32 (digest[2]);
|
||||
digest[3] = byte_swap_32 (digest[3]);
|
||||
digest[4] = byte_swap_32 (digest[4]);
|
||||
|
||||
return (PARSER_OK);
|
||||
}
|
||||
|
||||
int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size)
|
||||
{
|
||||
const u32 *digest = (const u32 *) digest_buf;
|
||||
|
||||
// we can not change anything in the original buffer, otherwise destroying sorting
|
||||
// therefore create some local buffer
|
||||
|
||||
u32 tmp[5];
|
||||
|
||||
tmp[0] = digest[0];
|
||||
tmp[1] = digest[1];
|
||||
tmp[2] = digest[2];
|
||||
tmp[3] = digest[3];
|
||||
tmp[4] = digest[4];
|
||||
|
||||
tmp[0] = byte_swap_32 (tmp[0]);
|
||||
tmp[1] = byte_swap_32 (tmp[1]);
|
||||
tmp[2] = byte_swap_32 (tmp[2]);
|
||||
tmp[3] = byte_swap_32 (tmp[3]);
|
||||
tmp[4] = byte_swap_32 (tmp[4]);
|
||||
|
||||
u8 ptr_plain[100] = { 0 };
|
||||
|
||||
base64_encode (int_to_base64, (const u8 *) tmp, 20, (u8 *) ptr_plain);
|
||||
|
||||
const int out_len = snprintf (line_buf, line_size, "%s", (char *) ptr_plain);
|
||||
|
||||
return out_len;
|
||||
}
|
||||
|
||||
void module_init (module_ctx_t *module_ctx)
|
||||
{
|
||||
module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT;
|
||||
module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT;
|
||||
|
||||
module_ctx->module_attack_exec = module_attack_exec;
|
||||
module_ctx->module_benchmark_esalt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_mask = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_build_plain_postprocess = MODULE_DEFAULT;
|
||||
module_ctx->module_deep_comp_kernel = MODULE_DEFAULT;
|
||||
module_ctx->module_dgst_pos0 = module_dgst_pos0;
|
||||
module_ctx->module_dgst_pos1 = module_dgst_pos1;
|
||||
module_ctx->module_dgst_pos2 = module_dgst_pos2;
|
||||
module_ctx->module_dgst_pos3 = module_dgst_pos3;
|
||||
module_ctx->module_dgst_size = module_dgst_size;
|
||||
module_ctx->module_dictstat_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_esalt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_buffer_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_forced_outfile_format = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_count = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_parse = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_save = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode = module_hash_decode;
|
||||
module_ctx->module_hash_encode_status = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode = module_hash_encode;
|
||||
module_ctx->module_hash_init_selftest = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_mode = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_category = module_hash_category;
|
||||
module_ctx->module_hash_name = module_hash_name;
|
||||
module_ctx->module_hashes_count_min = MODULE_DEFAULT;
|
||||
module_ctx->module_hashes_count_max = MODULE_DEFAULT;
|
||||
module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_init = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_term = MODULE_DEFAULT;
|
||||
module_ctx->module_hook12 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook23 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_salt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_size = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_build_options = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_cache_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kern_type = module_kern_type;
|
||||
module_ctx->module_kern_type_dynamic = MODULE_DEFAULT;
|
||||
module_ctx->module_opti_type = module_opti_type;
|
||||
module_ctx->module_opts_type = module_opts_type;
|
||||
module_ctx->module_outfile_check_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_custom_check = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT;
|
||||
module_ctx->module_pwdump_column = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_max = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_max = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_type = module_salt_type;
|
||||
module_ctx->module_separator = MODULE_DEFAULT;
|
||||
module_ctx->module_st_hash = module_st_hash;
|
||||
module_ctx->module_st_pass = module_st_pass;
|
||||
module_ctx->module_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_unstable_warning = MODULE_DEFAULT;
|
||||
module_ctx->module_warmup_disable = MODULE_DEFAULT;
|
||||
}
|
216
src/modules/module_24900.c
Normal file
216
src/modules/module_24900.c
Normal file
@ -0,0 +1,216 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "types.h"
|
||||
#include "modules.h"
|
||||
#include "bitops.h"
|
||||
#include "convert.h"
|
||||
#include "shared.h"
|
||||
|
||||
static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL;
|
||||
static const u32 DGST_POS0 = 0;
|
||||
static const u32 DGST_POS1 = 1;
|
||||
static const u32 DGST_POS2 = 2;
|
||||
static const u32 DGST_POS3 = 3;
|
||||
static const u32 DGST_SIZE = DGST_SIZE_4_4;
|
||||
static const u32 HASH_CATEGORY = HASH_CATEGORY_RAW_HASH;
|
||||
static const char *HASH_NAME = "Dahua Authentication MD5";
|
||||
static const u64 KERN_TYPE = 24900;
|
||||
static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE
|
||||
| OPTI_TYPE_PRECOMPUTE_INIT
|
||||
| OPTI_TYPE_NOT_ITERATED
|
||||
| OPTI_TYPE_NOT_SALTED
|
||||
| OPTI_TYPE_RAW_HASH;
|
||||
static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE
|
||||
| OPTS_TYPE_PT_ADD80
|
||||
| OPTS_TYPE_PT_ADDBITS14;
|
||||
static const u32 SALT_TYPE = SALT_TYPE_NONE;
|
||||
static const char *ST_PASS = "hashcat";
|
||||
static const char *ST_HASH = "GRuHbyVp";
|
||||
|
||||
u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; }
|
||||
u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; }
|
||||
u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; }
|
||||
u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; }
|
||||
u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; }
|
||||
u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; }
|
||||
u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; }
|
||||
const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; }
|
||||
u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; }
|
||||
u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; }
|
||||
u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; }
|
||||
u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; }
|
||||
const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; }
|
||||
const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; }
|
||||
|
||||
u32 dahua_decode (const u32 in)
|
||||
{
|
||||
if (in >= 'a')
|
||||
{
|
||||
return (in - 61);
|
||||
}
|
||||
else if (in >= 'A')
|
||||
{
|
||||
return (in - 55);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (in - 48);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
u32 dahua_encode (const u32 in)
|
||||
{
|
||||
if (in < 10)
|
||||
{
|
||||
return (in + 48);
|
||||
}
|
||||
else if (in < 36)
|
||||
{
|
||||
return (in + 55);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (in + 61);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len)
|
||||
{
|
||||
u32 *digest = (u32 *) digest_buf;
|
||||
|
||||
token_t token;
|
||||
|
||||
token.token_cnt = 1;
|
||||
|
||||
token.len_min[0] = 8;
|
||||
token.len_max[0] = 8;
|
||||
token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH;
|
||||
|
||||
const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
|
||||
|
||||
if (rc_tokenizer != PARSER_OK) return (rc_tokenizer);
|
||||
|
||||
const u8 *hash_pos = token.buf[0];
|
||||
|
||||
const u32 a0 = dahua_decode (hash_pos[0]);
|
||||
const u32 a1 = dahua_decode (hash_pos[1]);
|
||||
const u32 b0 = dahua_decode (hash_pos[2]);
|
||||
const u32 b1 = dahua_decode (hash_pos[3]);
|
||||
const u32 c0 = dahua_decode (hash_pos[4]);
|
||||
const u32 c1 = dahua_decode (hash_pos[5]);
|
||||
const u32 d0 = dahua_decode (hash_pos[6]);
|
||||
const u32 d1 = dahua_decode (hash_pos[7]);
|
||||
|
||||
digest[0] = (a0 << 0) | (a1 << 8);
|
||||
digest[1] = (b0 << 0) | (b1 << 8);
|
||||
digest[2] = (c0 << 0) | (c1 << 8);
|
||||
digest[3] = (d0 << 0) | (d1 << 8);
|
||||
|
||||
return (PARSER_OK);
|
||||
}
|
||||
|
||||
int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size)
|
||||
{
|
||||
const u32 *digest = (const u32 *) digest_buf;
|
||||
|
||||
u8 *out_buf = (u8 *) line_buf;
|
||||
|
||||
out_buf[0] = (u8) dahua_encode ((digest[0] >> 0) & 0xff);
|
||||
out_buf[1] = (u8) dahua_encode ((digest[0] >> 8) & 0xff);
|
||||
out_buf[2] = (u8) dahua_encode ((digest[1] >> 0) & 0xff);
|
||||
out_buf[3] = (u8) dahua_encode ((digest[1] >> 8) & 0xff);
|
||||
out_buf[4] = (u8) dahua_encode ((digest[2] >> 0) & 0xff);
|
||||
out_buf[5] = (u8) dahua_encode ((digest[2] >> 8) & 0xff);
|
||||
out_buf[6] = (u8) dahua_encode ((digest[3] >> 0) & 0xff);
|
||||
out_buf[7] = (u8) dahua_encode ((digest[3] >> 8) & 0xff);
|
||||
|
||||
const int out_len = 8;
|
||||
|
||||
return out_len;
|
||||
}
|
||||
|
||||
void module_init (module_ctx_t *module_ctx)
|
||||
{
|
||||
module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT;
|
||||
module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT;
|
||||
|
||||
module_ctx->module_attack_exec = module_attack_exec;
|
||||
module_ctx->module_benchmark_esalt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_mask = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_build_plain_postprocess = MODULE_DEFAULT;
|
||||
module_ctx->module_deep_comp_kernel = MODULE_DEFAULT;
|
||||
module_ctx->module_dgst_pos0 = module_dgst_pos0;
|
||||
module_ctx->module_dgst_pos1 = module_dgst_pos1;
|
||||
module_ctx->module_dgst_pos2 = module_dgst_pos2;
|
||||
module_ctx->module_dgst_pos3 = module_dgst_pos3;
|
||||
module_ctx->module_dgst_size = module_dgst_size;
|
||||
module_ctx->module_dictstat_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_esalt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_buffer_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_forced_outfile_format = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_count = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_parse = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_save = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode = module_hash_decode;
|
||||
module_ctx->module_hash_encode_status = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode = module_hash_encode;
|
||||
module_ctx->module_hash_init_selftest = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_mode = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_category = module_hash_category;
|
||||
module_ctx->module_hash_name = module_hash_name;
|
||||
module_ctx->module_hashes_count_min = MODULE_DEFAULT;
|
||||
module_ctx->module_hashes_count_max = MODULE_DEFAULT;
|
||||
module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_init = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_term = MODULE_DEFAULT;
|
||||
module_ctx->module_hook12 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook23 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_salt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_size = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_build_options = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_cache_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kern_type = module_kern_type;
|
||||
module_ctx->module_kern_type_dynamic = MODULE_DEFAULT;
|
||||
module_ctx->module_opti_type = module_opti_type;
|
||||
module_ctx->module_opts_type = module_opts_type;
|
||||
module_ctx->module_outfile_check_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_custom_check = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT;
|
||||
module_ctx->module_pwdump_column = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_max = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_max = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_type = module_salt_type;
|
||||
module_ctx->module_separator = MODULE_DEFAULT;
|
||||
module_ctx->module_st_hash = module_st_hash;
|
||||
module_ctx->module_st_pass = module_st_pass;
|
||||
module_ctx->module_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_unstable_warning = MODULE_DEFAULT;
|
||||
module_ctx->module_warmup_disable = MODULE_DEFAULT;
|
||||
}
|
||||
|
||||
|
330
src/modules/module_25300.c
Normal file
330
src/modules/module_25300.c
Normal file
@ -0,0 +1,330 @@
|
||||
/**
|
||||
* Author......: See docs/credits.txt
|
||||
* License.....: MIT
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "types.h"
|
||||
#include "modules.h"
|
||||
#include "bitops.h"
|
||||
#include "convert.h"
|
||||
#include "shared.h"
|
||||
|
||||
static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL;
|
||||
static const u32 DGST_POS0 = 14;
|
||||
static const u32 DGST_POS1 = 15;
|
||||
static const u32 DGST_POS2 = 6;
|
||||
static const u32 DGST_POS3 = 7;
|
||||
static const u32 DGST_SIZE = DGST_SIZE_8_8;
|
||||
static const u32 HASH_CATEGORY = HASH_CATEGORY_DOCUMENTS;
|
||||
static const char *HASH_NAME = "MS Office 2016 - SheetProtection";
|
||||
static const u64 KERN_TYPE = 25300;
|
||||
static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE
|
||||
| OPTI_TYPE_USES_BITS_64
|
||||
| OPTI_TYPE_SLOW_HASH_SIMD_LOOP;
|
||||
static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE;
|
||||
static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED;
|
||||
static const char *ST_PASS = "hashcat";
|
||||
static const char *ST_HASH = "$office$2016$0$100000$876MLoKTq42+/DLp415iZQ==$TNDvpvYyvlSUy97UOLKNhXynhUDDA7H8kLql0ISH5SxcP6hbthdjaTo4Z3/MU0dcR2SAd+AduYb3TB5CLZ8+ow==";
|
||||
|
||||
u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; }
|
||||
u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; }
|
||||
u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; }
|
||||
u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; }
|
||||
u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; }
|
||||
u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; }
|
||||
u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; }
|
||||
const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; }
|
||||
u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; }
|
||||
u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; }
|
||||
u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; }
|
||||
u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; }
|
||||
const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; }
|
||||
const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; }
|
||||
|
||||
typedef struct office2016
|
||||
{
|
||||
u32 salt_buf[24 + 1];
|
||||
|
||||
} office2016_t;
|
||||
|
||||
typedef struct office2016_tmp
|
||||
{
|
||||
u64 out[8];
|
||||
|
||||
} office2016_tmp_t;
|
||||
|
||||
static const char *SIGNATURE_OFFICE2016_SHEETPROTECTION = "$office$2016$0$";
|
||||
|
||||
char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param)
|
||||
{
|
||||
char *jit_build_options = NULL;
|
||||
|
||||
// Extra treatment for Apple systems
|
||||
if (device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE)
|
||||
{
|
||||
return jit_build_options;
|
||||
}
|
||||
|
||||
// NVIDIA GPU
|
||||
if (device_param->opencl_device_vendor_id == VENDOR_ID_NV)
|
||||
{
|
||||
hc_asprintf (&jit_build_options, "-D _unroll");
|
||||
}
|
||||
|
||||
// ROCM
|
||||
if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == true))
|
||||
{
|
||||
hc_asprintf (&jit_build_options, "-D _unroll");
|
||||
}
|
||||
|
||||
return jit_build_options;
|
||||
}
|
||||
|
||||
u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||
{
|
||||
const u64 esalt_size = (const u64) sizeof (office2016_t);
|
||||
|
||||
return esalt_size;
|
||||
}
|
||||
|
||||
u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||
{
|
||||
const u64 tmp_size = (const u64) sizeof (office2016_tmp_t);
|
||||
|
||||
return tmp_size;
|
||||
}
|
||||
|
||||
u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||
{
|
||||
// this overrides the reductions of PW_MAX in case optimized kernel is selected
|
||||
// IOW, even in optimized kernel mode it support length 256
|
||||
|
||||
const u32 pw_max = PW_MAX;
|
||||
|
||||
return pw_max;
|
||||
}
|
||||
|
||||
bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param)
|
||||
{
|
||||
if (device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE)
|
||||
{
|
||||
// self-test failed
|
||||
if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// amdgpu-pro-19.30-934563-ubuntu-18.04: self-test failure.
|
||||
if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len)
|
||||
{
|
||||
u64 *digest = (u64 *) digest_buf;
|
||||
|
||||
office2016_t *office2016 = (office2016_t *) esalt_buf;
|
||||
|
||||
token_t token;
|
||||
|
||||
token.token_cnt = 4;
|
||||
|
||||
token.signatures_cnt = 1;
|
||||
token.signatures_buf[0] = SIGNATURE_OFFICE2016_SHEETPROTECTION;
|
||||
|
||||
token.len[0] = 15;
|
||||
token.attr[0] = TOKEN_ATTR_FIXED_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
||||
|
||||
token.sep[1] = '$';
|
||||
token.len_min[1] = 6;
|
||||
token.len_max[1] = 6;
|
||||
token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_DIGIT;
|
||||
|
||||
token.sep[2] = '$';
|
||||
token.len_min[2] = 24;
|
||||
token.len_max[2] = 24;
|
||||
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_BASE64A;
|
||||
|
||||
token.sep[3] = '$';
|
||||
token.len_min[3] = 88;
|
||||
token.len_max[3] = 88;
|
||||
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
||||
| TOKEN_ATTR_VERIFY_BASE64A;
|
||||
|
||||
const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
|
||||
|
||||
if (rc_tokenizer != PARSER_OK) return (rc_tokenizer);
|
||||
|
||||
const u8 *spinCount_pos = token.buf[1];
|
||||
|
||||
const u32 spinCount = hc_strtoul ((const char *) spinCount_pos, NULL, 10);
|
||||
|
||||
if (spinCount != 100000) return (PARSER_SALT_VALUE);
|
||||
|
||||
/**
|
||||
* salt
|
||||
*/
|
||||
|
||||
const u8 *salt_pos = token.buf[2];
|
||||
const int salt_len = token.len[2];
|
||||
|
||||
memcpy (office2016->salt_buf, salt_pos, salt_len);
|
||||
|
||||
u8 tmp_buf[256];
|
||||
|
||||
memset (tmp_buf, 0, sizeof (tmp_buf));
|
||||
|
||||
int tmp_len = base64_decode (base64_to_int, salt_pos, salt_len, tmp_buf);
|
||||
|
||||
if (tmp_len != 16) return (PARSER_SALT_LENGTH);
|
||||
|
||||
memcpy (salt->salt_buf, tmp_buf, tmp_len);
|
||||
|
||||
salt->salt_len = tmp_len;
|
||||
salt->salt_iter = spinCount;
|
||||
|
||||
/**
|
||||
* digest
|
||||
*/
|
||||
|
||||
const u8 *hash_pos = token.buf[3];
|
||||
const int hash_len = token.len[3];
|
||||
|
||||
memset (tmp_buf, 0, sizeof (tmp_buf));
|
||||
|
||||
tmp_len = base64_decode (base64_to_int, hash_pos, hash_len, tmp_buf);
|
||||
|
||||
if (tmp_len != 64) return (PARSER_HASH_LENGTH);
|
||||
|
||||
memcpy (digest, tmp_buf, tmp_len);
|
||||
|
||||
digest[0] = byte_swap_64 (digest[0]);
|
||||
digest[1] = byte_swap_64 (digest[1]);
|
||||
digest[2] = byte_swap_64 (digest[2]);
|
||||
digest[3] = byte_swap_64 (digest[3]);
|
||||
digest[4] = byte_swap_64 (digest[4]);
|
||||
digest[5] = byte_swap_64 (digest[5]);
|
||||
digest[6] = byte_swap_64 (digest[6]);
|
||||
digest[7] = byte_swap_64 (digest[7]);
|
||||
|
||||
return (PARSER_OK);
|
||||
}
|
||||
|
||||
int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size)
|
||||
{
|
||||
const u64 *digest = (const u64 *) digest_buf;
|
||||
|
||||
const office2016_t *office2016 = (const office2016_t *) esalt_buf;
|
||||
|
||||
const u32 spinCount = salt->salt_iter;
|
||||
|
||||
// hash
|
||||
|
||||
u64 tmp[8];
|
||||
|
||||
tmp[0] = byte_swap_64 (digest[0]);
|
||||
tmp[1] = byte_swap_64 (digest[1]);
|
||||
tmp[2] = byte_swap_64 (digest[2]);
|
||||
tmp[3] = byte_swap_64 (digest[3]);
|
||||
tmp[4] = byte_swap_64 (digest[4]);
|
||||
tmp[5] = byte_swap_64 (digest[5]);
|
||||
tmp[6] = byte_swap_64 (digest[6]);
|
||||
tmp[7] = byte_swap_64 (digest[7]);
|
||||
|
||||
char hash_enc[256];
|
||||
|
||||
memset (hash_enc, 0, sizeof (hash_enc));
|
||||
|
||||
base64_encode (int_to_base64, (const u8 *) tmp, 64, (u8 *) hash_enc);
|
||||
|
||||
// output
|
||||
|
||||
const int line_len = snprintf (line_buf, line_size, "%s%u$%s$%s", SIGNATURE_OFFICE2016_SHEETPROTECTION, spinCount, (const char *) office2016->salt_buf, hash_enc);
|
||||
|
||||
return line_len;
|
||||
}
|
||||
|
||||
void module_init (module_ctx_t *module_ctx)
|
||||
{
|
||||
module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT;
|
||||
module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT;
|
||||
|
||||
module_ctx->module_attack_exec = module_attack_exec;
|
||||
module_ctx->module_benchmark_esalt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_mask = MODULE_DEFAULT;
|
||||
module_ctx->module_benchmark_salt = MODULE_DEFAULT;
|
||||
module_ctx->module_build_plain_postprocess = MODULE_DEFAULT;
|
||||
module_ctx->module_deep_comp_kernel = MODULE_DEFAULT;
|
||||
module_ctx->module_dgst_pos0 = module_dgst_pos0;
|
||||
module_ctx->module_dgst_pos1 = module_dgst_pos1;
|
||||
module_ctx->module_dgst_pos2 = module_dgst_pos2;
|
||||
module_ctx->module_dgst_pos3 = module_dgst_pos3;
|
||||
module_ctx->module_dgst_size = module_dgst_size;
|
||||
module_ctx->module_dictstat_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_esalt_size = module_esalt_size;
|
||||
module_ctx->module_extra_buffer_size = MODULE_DEFAULT;
|
||||
module_ctx->module_extra_tmp_size = MODULE_DEFAULT;
|
||||
module_ctx->module_forced_outfile_format = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_count = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_parse = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_binary_save = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_decode = module_hash_decode;
|
||||
module_ctx->module_hash_encode_status = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode_potfile = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_encode = module_hash_encode;
|
||||
module_ctx->module_hash_init_selftest = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_mode = MODULE_DEFAULT;
|
||||
module_ctx->module_hash_category = module_hash_category;
|
||||
module_ctx->module_hash_name = module_hash_name;
|
||||
module_ctx->module_hashes_count_min = MODULE_DEFAULT;
|
||||
module_ctx->module_hashes_count_max = MODULE_DEFAULT;
|
||||
module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_init = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_extra_param_term = MODULE_DEFAULT;
|
||||
module_ctx->module_hook12 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook23 = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_salt_size = MODULE_DEFAULT;
|
||||
module_ctx->module_hook_size = MODULE_DEFAULT;
|
||||
module_ctx->module_jit_build_options = module_jit_build_options;
|
||||
module_ctx->module_jit_cache_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_accel_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_loops_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_max = MODULE_DEFAULT;
|
||||
module_ctx->module_kernel_threads_min = MODULE_DEFAULT;
|
||||
module_ctx->module_kern_type = module_kern_type;
|
||||
module_ctx->module_kern_type_dynamic = MODULE_DEFAULT;
|
||||
module_ctx->module_opti_type = module_opti_type;
|
||||
module_ctx->module_opts_type = module_opts_type;
|
||||
module_ctx->module_outfile_check_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_custom_check = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_disable = MODULE_DEFAULT;
|
||||
module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT;
|
||||
module_ctx->module_pwdump_column = MODULE_DEFAULT;
|
||||
module_ctx->module_pw_max = module_pw_max;
|
||||
module_ctx->module_pw_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_max = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_min = MODULE_DEFAULT;
|
||||
module_ctx->module_salt_type = module_salt_type;
|
||||
module_ctx->module_separator = MODULE_DEFAULT;
|
||||
module_ctx->module_st_hash = module_st_hash;
|
||||
module_ctx->module_st_pass = module_st_pass;
|
||||
module_ctx->module_tmp_size = module_tmp_size;
|
||||
module_ctx->module_unstable_warning = module_unstable_warning;
|
||||
module_ctx->module_warmup_disable = MODULE_DEFAULT;
|
||||
}
|
@ -1391,7 +1391,7 @@ int mask_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
mask_ctx->enabled = false;
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
if (user_options->show == true) return 0;
|
||||
|
@ -360,7 +360,7 @@ int outcheck_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->speed_only == true) return 0;
|
||||
if (user_options->progress_only == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -111,7 +111,7 @@ int potfile_init (hashcat_ctx_t *hashcat_ctx)
|
||||
potfile_ctx->enabled = false;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
if (user_options->stdout_flag == true) return 0;
|
||||
|
@ -299,7 +299,7 @@ int restore_ctx_init (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
restore_ctx->enabled = false;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
12
src/status.c
12
src/status.c
@ -330,7 +330,17 @@ char *status_get_hash_target (const hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE)
|
||||
{
|
||||
return hcstrdup (hashes->hashfile);
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE_OPTIONAL)
|
||||
{
|
||||
if (hashes->hashfile)
|
||||
{
|
||||
return hcstrdup (hashes->hashfile);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return hcstrdup (hashes->hashfile);
|
||||
}
|
||||
}
|
||||
|
||||
char *tmp_buf = (char *) hcmalloc (HCBUFSIZ_LARGE);
|
||||
|
@ -261,7 +261,7 @@ int straight_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
straight_ctx->enabled = false;
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
if (user_options->show == true) return 0;
|
||||
|
210
src/terminal.c
210
src/terminal.c
@ -537,67 +537,119 @@ void compress_terminal_line_length (char *out_buf, const size_t keep_from_beginn
|
||||
*ptr1 = 0;
|
||||
}
|
||||
|
||||
void example_hashes (hashcat_ctx_t *hashcat_ctx)
|
||||
void hash_info_single (hashcat_ctx_t *hashcat_ctx, user_options_t *user_options)
|
||||
{
|
||||
if (hashconfig_init (hashcat_ctx) == 0)
|
||||
{
|
||||
hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
|
||||
|
||||
event_log_info (hashcat_ctx, "Hash mode #%u", hashconfig->hash_mode);
|
||||
event_log_info (hashcat_ctx, " Name................: %s", hashconfig->hash_name);
|
||||
event_log_info (hashcat_ctx, " Category............: %s", strhashcategory (hashconfig->hash_category));
|
||||
event_log_info (hashcat_ctx, " Slow.Hash...........: %s", (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) ? "No" : "Yes");
|
||||
|
||||
event_log_info (hashcat_ctx, " Password.Len.Min....: %d", hashconfig->pw_min);
|
||||
event_log_info (hashcat_ctx, " Password.Len.Max....: %d", hashconfig->pw_max);
|
||||
|
||||
if (hashconfig->is_salted == true)
|
||||
{
|
||||
u32 t = hashconfig->salt_type;
|
||||
char *t_desc = (t == SALT_TYPE_EMBEDDED) ? "Embedded\0" : (t == SALT_TYPE_GENERIC) ? "Generic\0" : "Virtual\0";
|
||||
event_log_info (hashcat_ctx, " Salt.Type...........: %s", t_desc);
|
||||
event_log_info (hashcat_ctx, " Salt.Len.Min........: %d", hashconfig->salt_min);
|
||||
event_log_info (hashcat_ctx, " Salt.Len.Max........: %d", hashconfig->salt_max);
|
||||
}
|
||||
|
||||
// almost always 1 and -1
|
||||
//event_log_info (hashcat_ctx, " Hashes.Count.Min....: %d", hashconfig->hashes_count_min);
|
||||
//event_log_info (hashcat_ctx, " Hashes.Count.Max....: %u", hashconfig->hashes_count_max);
|
||||
|
||||
if ((hashconfig->has_pure_kernel) && (hashconfig->has_optimized_kernel))
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Kernel.Type(s)......: pure, optimized");
|
||||
}
|
||||
else if (hashconfig->has_pure_kernel)
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Kernel.Type(s)......: pure");
|
||||
}
|
||||
else if (hashconfig->has_optimized_kernel)
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Kernel.Type(s)......: optimized");
|
||||
}
|
||||
|
||||
if ((hashconfig->st_hash != NULL) && (hashconfig->st_pass != NULL))
|
||||
{
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE)
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Example.Hash.Format.: hex-encoded");
|
||||
event_log_info (hashcat_ctx, " Example.Hash........: %s", hashconfig->st_hash);
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Example.Hash.Format.: plain");
|
||||
event_log_info (hashcat_ctx, " Example.Hash........: %s", hashconfig->st_hash);
|
||||
}
|
||||
|
||||
if (need_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), user_options->separator, false))
|
||||
{
|
||||
char tmp_buf[HCBUFSIZ_LARGE] = { 0 };
|
||||
|
||||
int tmp_len = 0;
|
||||
|
||||
tmp_buf[tmp_len++] = '$';
|
||||
tmp_buf[tmp_len++] = 'H';
|
||||
tmp_buf[tmp_len++] = 'E';
|
||||
tmp_buf[tmp_len++] = 'X';
|
||||
tmp_buf[tmp_len++] = '[';
|
||||
|
||||
exec_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), (u8 *) tmp_buf + tmp_len);
|
||||
|
||||
tmp_len += strlen (hashconfig->st_pass) * 2;
|
||||
|
||||
tmp_buf[tmp_len++] = ']';
|
||||
tmp_buf[tmp_len++] = 0;
|
||||
|
||||
event_log_info (hashcat_ctx, " Example.Pass........: %s", tmp_buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Example.Pass........: %s", hashconfig->st_pass);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Example.Hash.Format.: N/A");
|
||||
event_log_info (hashcat_ctx, " Example.Hash........: N/A");
|
||||
event_log_info (hashcat_ctx, " Example.Pass........: N/A");
|
||||
}
|
||||
|
||||
if (hashconfig->benchmark_mask != NULL)
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Benchmark.Mask......: %s", hashconfig->benchmark_mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, " Benchmark.Mask......: N/A");
|
||||
}
|
||||
|
||||
event_log_info (hashcat_ctx, NULL);
|
||||
}
|
||||
|
||||
hashconfig_destroy (hashcat_ctx);
|
||||
}
|
||||
|
||||
void hash_info (hashcat_ctx_t *hashcat_ctx)
|
||||
{
|
||||
folder_config_t *folder_config = hashcat_ctx->folder_config;
|
||||
user_options_t *user_options = hashcat_ctx->user_options;
|
||||
|
||||
event_log_info (hashcat_ctx, "Hash Info:");
|
||||
event_log_info (hashcat_ctx, "==========");
|
||||
event_log_info (hashcat_ctx, NULL);
|
||||
|
||||
if (user_options->hash_mode_chgd == true)
|
||||
{
|
||||
if (hashconfig_init (hashcat_ctx) == 0)
|
||||
{
|
||||
hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
|
||||
|
||||
event_log_info (hashcat_ctx, "MODE: %u", hashconfig->hash_mode);
|
||||
event_log_info (hashcat_ctx, "TYPE: %s", hashconfig->hash_name);
|
||||
|
||||
if ((hashconfig->st_hash != NULL) && (hashconfig->st_pass != NULL))
|
||||
{
|
||||
if (hashconfig->opts_type & OPTS_TYPE_BINARY_HASHFILE)
|
||||
{
|
||||
event_log_info (hashcat_ctx, "HASH (hex-encoded): %s", hashconfig->st_hash);
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, "HASH: %s", hashconfig->st_hash);
|
||||
}
|
||||
|
||||
if (need_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), user_options->separator, false))
|
||||
{
|
||||
char tmp_buf[HCBUFSIZ_LARGE] = { 0 };
|
||||
|
||||
int tmp_len = 0;
|
||||
|
||||
tmp_buf[tmp_len++] = '$';
|
||||
tmp_buf[tmp_len++] = 'H';
|
||||
tmp_buf[tmp_len++] = 'E';
|
||||
tmp_buf[tmp_len++] = 'X';
|
||||
tmp_buf[tmp_len++] = '[';
|
||||
|
||||
exec_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), (u8 *) tmp_buf + tmp_len);
|
||||
|
||||
tmp_len += strlen (hashconfig->st_pass) * 2;
|
||||
|
||||
tmp_buf[tmp_len++] = ']';
|
||||
tmp_buf[tmp_len++] = 0;
|
||||
|
||||
event_log_info (hashcat_ctx, "PASS: %s", tmp_buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, "PASS: %s", hashconfig->st_pass);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, "HASH: not stored");
|
||||
event_log_info (hashcat_ctx, "PASS: not stored");
|
||||
}
|
||||
|
||||
event_log_info (hashcat_ctx, NULL);
|
||||
}
|
||||
|
||||
hashconfig_destroy (hashcat_ctx);
|
||||
hash_info_single (hashcat_ctx, user_options);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -611,53 +663,7 @@ void example_hashes (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (hc_path_exist (modulefile) == false) continue;
|
||||
|
||||
if (hashconfig_init (hashcat_ctx) == 0)
|
||||
{
|
||||
hashconfig_t *hashconfig = hashcat_ctx->hashconfig;
|
||||
|
||||
event_log_info (hashcat_ctx, "MODE: %u", hashconfig->hash_mode);
|
||||
event_log_info (hashcat_ctx, "TYPE: %s", hashconfig->hash_name);
|
||||
|
||||
if ((hashconfig->st_hash != NULL) && (hashconfig->st_pass != NULL))
|
||||
{
|
||||
event_log_info (hashcat_ctx, "HASH: %s", hashconfig->st_hash);
|
||||
|
||||
if (need_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), user_options->separator, false))
|
||||
{
|
||||
char tmp_buf[HCBUFSIZ_LARGE] = { 0 };
|
||||
|
||||
int tmp_len = 0;
|
||||
|
||||
tmp_buf[tmp_len++] = '$';
|
||||
tmp_buf[tmp_len++] = 'H';
|
||||
tmp_buf[tmp_len++] = 'E';
|
||||
tmp_buf[tmp_len++] = 'X';
|
||||
tmp_buf[tmp_len++] = '[';
|
||||
|
||||
exec_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), (u8 *) tmp_buf + tmp_len);
|
||||
|
||||
tmp_len += strlen (hashconfig->st_pass) * 2;
|
||||
|
||||
tmp_buf[tmp_len++] = ']';
|
||||
tmp_buf[tmp_len++] = 0;
|
||||
|
||||
event_log_info (hashcat_ctx, "PASS: %s", tmp_buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, "PASS: %s", hashconfig->st_pass);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
event_log_info (hashcat_ctx, "HASH: not stored");
|
||||
event_log_info (hashcat_ctx, "PASS: not stored");
|
||||
}
|
||||
|
||||
event_log_info (hashcat_ctx, NULL);
|
||||
}
|
||||
|
||||
hashconfig_destroy (hashcat_ctx);
|
||||
hash_info_single (hashcat_ctx, user_options);
|
||||
}
|
||||
|
||||
hcfree (modulefile);
|
||||
|
@ -54,7 +54,7 @@ int tuning_db_init (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
tuning_db->enabled = false;
|
||||
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->keyspace == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
|
@ -36,7 +36,7 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] =
|
||||
" --hex-wordlist | | Assume words in wordlist are given in hex |",
|
||||
" --force | | Ignore warnings |",
|
||||
" --status | | Enable automatic update of the status screen |",
|
||||
" --status-json | | Enable JSON format for status ouput |",
|
||||
" --status-json | | Enable JSON format for status output |",
|
||||
" --status-timer | Num | Sets seconds between status screen updates to X | --status-timer=1",
|
||||
" --stdin-timeout-abort | Num | Abort if there is no input from stdin for X seconds | --stdin-timeout-abort=300",
|
||||
" --machine-readable | | Display the status view in a machine-readable format |",
|
||||
@ -89,7 +89,8 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] =
|
||||
" --bitmap-max | Num | Sets maximum bits allowed for bitmaps to X | --bitmap-max=24",
|
||||
" --cpu-affinity | Str | Locks to CPU devices, separated with commas | --cpu-affinity=1,2,3",
|
||||
" --hook-threads | Num | Sets number of threads for a hook (per compute unit) | --hook-threads=8",
|
||||
" --example-hashes | | Show an example hash for each hash-mode |",
|
||||
" --hash-info | | Show information for each hash-mode |",
|
||||
" --example-hashes | | Alias of --hash-info |",
|
||||
" --backend-ignore-cuda | | Do not try to open CUDA interface on startup |",
|
||||
" --backend-ignore-opencl | | Do not try to open OpenCL interface on startup |",
|
||||
" -I, --backend-info | | Show info about detected backend API devices | -I",
|
||||
|
@ -47,7 +47,7 @@ static const struct option long_options[] =
|
||||
{"debug-mode", required_argument, NULL, IDX_DEBUG_MODE},
|
||||
{"encoding-from", required_argument, NULL, IDX_ENCODING_FROM},
|
||||
{"encoding-to", required_argument, NULL, IDX_ENCODING_TO},
|
||||
{"example-hashes", no_argument, NULL, IDX_EXAMPLE_HASHES},
|
||||
{"example-hashes", no_argument, NULL, IDX_HASH_INFO}, // alias of hash-info
|
||||
{"force", no_argument, NULL, IDX_FORCE},
|
||||
{"generate-rules-func-max", required_argument, NULL, IDX_RP_GEN_FUNC_MAX},
|
||||
{"generate-rules-func-min", required_argument, NULL, IDX_RP_GEN_FUNC_MIN},
|
||||
@ -55,6 +55,7 @@ static const struct option long_options[] =
|
||||
{"generate-rules-seed", required_argument, NULL, IDX_RP_GEN_SEED},
|
||||
{"hwmon-disable", no_argument, NULL, IDX_HWMON_DISABLE},
|
||||
{"hwmon-temp-abort", required_argument, NULL, IDX_HWMON_TEMP_ABORT},
|
||||
{"hash-info", no_argument, NULL, IDX_HASH_INFO},
|
||||
{"hash-type", required_argument, NULL, IDX_HASH_MODE},
|
||||
{"hccapx-message-pair", required_argument, NULL, IDX_HCCAPX_MESSAGE_PAIR},
|
||||
{"help", no_argument, NULL, IDX_HELP},
|
||||
@ -184,10 +185,10 @@ int user_options_init (hashcat_ctx_t *hashcat_ctx)
|
||||
user_options->debug_mode = DEBUG_MODE;
|
||||
user_options->encoding_from = ENCODING_FROM;
|
||||
user_options->encoding_to = ENCODING_TO;
|
||||
user_options->example_hashes = EXAMPLE_HASHES;
|
||||
user_options->force = FORCE;
|
||||
user_options->hwmon_disable = HWMON_DISABLE;
|
||||
user_options->hwmon_temp_abort = HWMON_TEMP_ABORT;
|
||||
user_options->hash_info = HASH_INFO;
|
||||
user_options->hash_mode = HASH_MODE;
|
||||
user_options->hccapx_message_pair = HCCAPX_MESSAGE_PAIR;
|
||||
user_options->hex_charset = HEX_CHARSET;
|
||||
@ -380,7 +381,7 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
||||
case IDX_ENCODING_TO: user_options->encoding_to = optarg; break;
|
||||
case IDX_INDUCTION_DIR: user_options->induction_dir = optarg; break;
|
||||
case IDX_OUTFILE_CHECK_DIR: user_options->outfile_check_dir = optarg; break;
|
||||
case IDX_EXAMPLE_HASHES: user_options->example_hashes = true; break;
|
||||
case IDX_HASH_INFO: user_options->hash_info = true; break;
|
||||
case IDX_FORCE: user_options->force = true; break;
|
||||
case IDX_SELF_TEST_DISABLE: user_options->self_test_disable = true; break;
|
||||
case IDX_SKIP: user_options->skip = hc_strtoull (optarg, NULL, 10);
|
||||
@ -1391,7 +1392,7 @@ int user_options_sanity (hashcat_ctx_t *hashcat_ctx)
|
||||
show_error = false;
|
||||
}
|
||||
}
|
||||
else if (user_options->example_hashes == true)
|
||||
else if (user_options->hash_info == true)
|
||||
{
|
||||
if (user_options->hc_argc == 0)
|
||||
{
|
||||
@ -1589,9 +1590,9 @@ void user_options_session_auto (hashcat_ctx_t *hashcat_ctx)
|
||||
user_options->session = "benchmark";
|
||||
}
|
||||
|
||||
if (user_options->example_hashes == true)
|
||||
if (user_options->hash_info == true)
|
||||
{
|
||||
user_options->session = "example_hashes";
|
||||
user_options->session = "hash_info";
|
||||
}
|
||||
|
||||
if (user_options->usage == true)
|
||||
@ -1667,7 +1668,7 @@ void user_options_preprocess (hashcat_ctx_t *hashcat_ctx)
|
||||
user_options->bitmap_max = 1;
|
||||
}
|
||||
|
||||
if (user_options->example_hashes == true
|
||||
if (user_options->hash_info == true
|
||||
|| user_options->backend_info == true
|
||||
|| user_options->keyspace == true
|
||||
|| user_options->speed_only == true
|
||||
@ -1723,7 +1724,7 @@ void user_options_preprocess (hashcat_ctx_t *hashcat_ctx)
|
||||
}
|
||||
}
|
||||
|
||||
if (user_options->example_hashes == true)
|
||||
if (user_options->hash_info == true)
|
||||
{
|
||||
user_options->quiet = true;
|
||||
}
|
||||
@ -1837,7 +1838,7 @@ void user_options_preprocess (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (user_options->attack_mode == ATTACK_MODE_BF)
|
||||
{
|
||||
if (user_options->example_hashes == true)
|
||||
if (user_options->hash_info == true)
|
||||
{
|
||||
|
||||
}
|
||||
@ -2058,7 +2059,7 @@ void user_options_extra_init (hashcat_ctx_t *hashcat_ctx)
|
||||
{
|
||||
|
||||
}
|
||||
else if (user_options->example_hashes == true)
|
||||
else if (user_options->hash_info == true)
|
||||
{
|
||||
|
||||
}
|
||||
@ -3001,7 +3002,7 @@ void user_options_logger (hashcat_ctx_t *hashcat_ctx)
|
||||
logfile_top_uint (user_options->bitmap_max);
|
||||
logfile_top_uint (user_options->bitmap_min);
|
||||
logfile_top_uint (user_options->debug_mode);
|
||||
logfile_top_uint (user_options->example_hashes);
|
||||
logfile_top_uint (user_options->hash_info);
|
||||
logfile_top_uint (user_options->force);
|
||||
logfile_top_uint (user_options->hwmon_disable);
|
||||
logfile_top_uint (user_options->hwmon_temp_abort);
|
||||
|
@ -588,7 +588,7 @@ int wl_data_init (hashcat_ctx_t *hashcat_ctx)
|
||||
wl_data->enabled = false;
|
||||
|
||||
if (user_options->benchmark == true) return 0;
|
||||
if (user_options->example_hashes == true) return 0;
|
||||
if (user_options->hash_info == true) return 0;
|
||||
if (user_options->left == true) return 0;
|
||||
if (user_options->backend_info == true) return 0;
|
||||
if (user_options->usage == true) return 0;
|
||||
|
75
tools/sqlcipher2hashcat.pl
Executable file
75
tools/sqlcipher2hashcat.pl
Executable file
@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
##
|
||||
## Author......: See docs/credits.txt
|
||||
## License.....: MIT
|
||||
##
|
||||
|
||||
# In a first version I wrote a kernel that followed the original sqlcipher scheme which uses a MAC to verify the integrity (and therefore we knew we had guessed the correct password).
|
||||
# But it turns out it's much easier to exploit the sqlite header format, which guarantees 20 zero bytes starting from offset 72.
|
||||
# See: https://www.sqlite.org/fileformat.html
|
||||
# The advantage is the user doesn't need to guess the MAC hash type and/or pagesize (in case it they customized).
|
||||
# The user still needs to know the KDF hash type and iteration count, but they sqlcipher v3 and v4 come with a default for these.
|
||||
# We'll check only 12 of 16 bytes from the encrypted block as an optimization so we only need to decrypt one block.
|
||||
# Another optimization is that since the scheme uses CBC we do not need to find the correct position of the IV.
|
||||
# This position is depending on the pagesize and the KDF hash type (which could be customized).
|
||||
# As an alternative, or in case the sqlite header changes, we could also use entropy test.
|
||||
# -atom
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
if (scalar (@ARGV) < 2)
|
||||
{
|
||||
print "usage: $0 encrypted.db preset [hash] [iteration]\n\n";
|
||||
print "preset 1 = SQLCIPHER v3\n";
|
||||
print "preset 2 = SQLCIPHER v4\n";
|
||||
print "preset 3 = CUSTOM, please specify hash type (1 = SHA1, 2 = SHA256, 3 = SHA512) and iteration count\n";
|
||||
|
||||
exit -1;
|
||||
}
|
||||
|
||||
my $db = $ARGV[0];
|
||||
my $preset = $ARGV[1];
|
||||
|
||||
my $type = 0;
|
||||
my $iter = 0;
|
||||
|
||||
if ($preset == 1)
|
||||
{
|
||||
$type = 1;
|
||||
$iter = 64000;
|
||||
}
|
||||
elsif ($preset == 2)
|
||||
{
|
||||
$type = 3;
|
||||
$iter = 256000;
|
||||
}
|
||||
elsif ($preset == 3)
|
||||
{
|
||||
$type = $ARGV[2];
|
||||
$iter = $ARGV[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
die "Invalid preset\n";
|
||||
}
|
||||
|
||||
open (IN, $db) or die ("$db: $!\n");
|
||||
|
||||
binmode (IN);
|
||||
|
||||
my $data;
|
||||
|
||||
if (read (IN, $data, 96) != 96)
|
||||
{
|
||||
die "ERROR: Couldn't read data from the file. Maybe incorrect file format?\n";
|
||||
}
|
||||
|
||||
close (IN);
|
||||
|
||||
my $salt = substr ($data, 0, 16);
|
||||
my $iv = substr ($data, 64, 16);
|
||||
my $enc = substr ($data, 80, 16);
|
||||
|
||||
printf ("SQLCIPHER*%d*%d*%s*%s*%s\n", $type, $iter, unpack ("H*", $salt), unpack ("H*", $iv), unpack ("H*", $enc));
|
@ -655,15 +655,20 @@ function attack_1()
|
||||
cnt=0
|
||||
|
||||
min=1
|
||||
max=8
|
||||
|
||||
if [ "${hash_type}" -eq 14000 ]; then
|
||||
min=0
|
||||
max=5
|
||||
elif [ "${hash_type}" -eq 14100 ]; then
|
||||
min=0
|
||||
max=5
|
||||
elif [ "${hash_type}" -eq 14900 ]; then
|
||||
min=0
|
||||
max=5
|
||||
elif [ "${hash_type}" -eq 15400 ]; then
|
||||
min=0
|
||||
max=5
|
||||
fi
|
||||
|
||||
echo "> Testing hash type $hash_type with attack mode 1, markov ${MARKOV}, single hash, Device-Type ${TYPE}, vector-width ${VECTOR}." >> "${OUTD}/logfull.txt" 2>> "${OUTD}/logfull.txt"
|
||||
@ -688,7 +693,9 @@ function attack_1()
|
||||
|
||||
line_nr=1
|
||||
|
||||
if [ "${i}" -gt 1 ]; then
|
||||
if [ "$min" -eq 0 ]; then
|
||||
line_nr=$i
|
||||
elif [ "${i}" -gt 1 ]; then
|
||||
line_nr=$((i - 1))
|
||||
fi
|
||||
|
||||
@ -778,6 +785,8 @@ function attack_1()
|
||||
|
||||
fi
|
||||
|
||||
if [ $i -eq ${max} ]; then break; fi
|
||||
|
||||
i=$((i + 1))
|
||||
|
||||
done 9< "${OUTD}/${hash_type}_hashes.txt"
|
||||
|
135
tools/test_modules/m24600.pm
Normal file
135
tools/test_modules/m24600.pm
Normal file
@ -0,0 +1,135 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
##
|
||||
## Author......: See docs/credits.txt
|
||||
## License.....: MIT
|
||||
##
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Crypt::PBKDF2;
|
||||
use Crypt::CBC;
|
||||
|
||||
sub module_constraints { [[0, 256], [32, 32], [-1, -1], [-1, -1], [-1, -1]] }
|
||||
|
||||
sub module_generate_hash
|
||||
{
|
||||
my $word = shift;
|
||||
my $salt = shift;
|
||||
my $type = shift // 1; #random_number (1, 3);
|
||||
my $iter = shift // random_number (10000, 20000);
|
||||
my $iv = shift // random_hex_string (32);
|
||||
my $enc = shift;
|
||||
|
||||
my $kdf;
|
||||
|
||||
if ($type == 1)
|
||||
{
|
||||
$kdf = Crypt::PBKDF2->new
|
||||
(
|
||||
hash_class => 'HMACSHA1',
|
||||
iterations => $iter,
|
||||
output_len => 32
|
||||
);
|
||||
}
|
||||
elsif ($type == 2)
|
||||
{
|
||||
$kdf = Crypt::PBKDF2->new
|
||||
(
|
||||
hasher => Crypt::PBKDF2->hasher_from_algorithm ('HMACSHA2', 256),
|
||||
iterations => $iter,
|
||||
output_len => 32
|
||||
);
|
||||
}
|
||||
elsif ($type == 3)
|
||||
{
|
||||
$kdf = Crypt::PBKDF2->new
|
||||
(
|
||||
hasher => Crypt::PBKDF2->hasher_from_algorithm ('HMACSHA2', 512),
|
||||
iterations => $iter,
|
||||
output_len => 32
|
||||
);
|
||||
}
|
||||
|
||||
my $salt_bin = pack ("H*", $salt);
|
||||
|
||||
my $key = $kdf->PBKDF2 ($salt_bin, $word);
|
||||
|
||||
my $iv_bin = pack ("H*", $iv);
|
||||
|
||||
my $data;
|
||||
|
||||
if (defined $enc)
|
||||
{
|
||||
my $aes_cbc = Crypt::CBC->new ({
|
||||
cipher => "Crypt::Rijndael",
|
||||
iv => $iv_bin,
|
||||
key => $key,
|
||||
keysize => 32,
|
||||
literal_key => 1,
|
||||
header => "none",
|
||||
padding => "none"
|
||||
});
|
||||
|
||||
my $enc_bin = pack ("H*", $enc);
|
||||
|
||||
$data = $aes_cbc->decrypt ($enc_bin);
|
||||
|
||||
if (substr ($data, 0, 12) ne "\x00" x 12)
|
||||
{
|
||||
$data = "\xff" x 16;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$data = "\x00" x 16;
|
||||
}
|
||||
|
||||
my $aes_cbc = Crypt::CBC->new ({
|
||||
cipher => "Crypt::Rijndael",
|
||||
iv => $iv_bin,
|
||||
key => $key,
|
||||
keysize => 32,
|
||||
literal_key => 1,
|
||||
header => "none",
|
||||
padding => "none"
|
||||
});
|
||||
|
||||
my $enc_bin = $aes_cbc->encrypt ($data);
|
||||
|
||||
my $hash = sprintf ("SQLCIPHER*%d*%d*%s*%s*%s", $type, $iter, unpack ("H*", $salt_bin), unpack ("H*", $iv_bin), unpack ("H*", $enc_bin));
|
||||
|
||||
return $hash;
|
||||
}
|
||||
|
||||
sub module_verify_hash
|
||||
{
|
||||
my $line = shift;
|
||||
|
||||
my $idx = index ($line, ':');
|
||||
|
||||
return unless $idx >= 0;
|
||||
|
||||
my $hash = substr ($line, 0, $idx);
|
||||
my $word = substr ($line, $idx + 1);
|
||||
|
||||
return unless substr ($hash, 0, 9) eq 'SQLCIPHER';
|
||||
|
||||
my ($signature, $type, $iter, $salt, $iv, $data) = split '\*', $hash;
|
||||
|
||||
return unless defined $signature;
|
||||
return unless defined $type;
|
||||
return unless defined $iter;
|
||||
return unless defined $salt;
|
||||
return unless defined $iv;
|
||||
return unless defined $data;
|
||||
|
||||
my $word_packed = pack_if_HEX_notation ($word);
|
||||
|
||||
my $new_hash = module_generate_hash ($word_packed, $salt, $type, $iter, $iv, $data);
|
||||
|
||||
return ($new_hash, $word);
|
||||
}
|
||||
|
||||
1;
|
49
tools/test_modules/m24700.pm
Normal file
49
tools/test_modules/m24700.pm
Normal file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
##
|
||||
## Author......: See docs/credits.txt
|
||||
## License.....: MIT
|
||||
##
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Digest::MD5 qw (md5_hex);
|
||||
use Digest::MD5 qw (md5);
|
||||
|
||||
sub module_constraints { [[0, 256], [-1, -1], [0, 55], [-1, -1], [-1, -1]] }
|
||||
|
||||
sub module_generate_hash
|
||||
{
|
||||
my $word = shift;
|
||||
|
||||
my $digest1 = md5 ($word);
|
||||
|
||||
my $digest1_sub = substr ($digest1, 0, 5);
|
||||
|
||||
my $digest2 = md5 ($digest1_sub);
|
||||
|
||||
my $digest2_sub = substr ($digest2, 0, 5);
|
||||
|
||||
my $hash = sprintf ("%s", unpack ("H*", $digest2_sub));
|
||||
|
||||
return $hash;
|
||||
}
|
||||
|
||||
sub module_verify_hash
|
||||
{
|
||||
my $line = shift;
|
||||
|
||||
my ($hash, $word) = split (':', $line);
|
||||
|
||||
return unless defined $hash;
|
||||
return unless defined $word;
|
||||
|
||||
my $word_packed = pack_if_HEX_notation ($word);
|
||||
|
||||
my $new_hash = module_generate_hash ($word_packed);
|
||||
|
||||
return ($new_hash, $word);
|
||||
}
|
||||
|
||||
1;
|
47
tools/test_modules/m24800.pm
Normal file
47
tools/test_modules/m24800.pm
Normal file
@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
##
|
||||
## Author......: See docs/credits.txt
|
||||
## License.....: MIT
|
||||
##
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Digest::SHA1 qw (sha1);
|
||||
use Digest::HMAC qw (hmac hmac_hex);
|
||||
use Encode qw (encode decode);
|
||||
use MIME::Base64;
|
||||
|
||||
sub module_constraints { [[0, 256], [0, 256], [0, 27], [0, 27], [0, 27]] }
|
||||
|
||||
sub module_generate_hash
|
||||
{
|
||||
my $word = shift;
|
||||
|
||||
my $unicode_word = encode ("UTF-16LE", $word);
|
||||
|
||||
my $digest = hmac ($unicode_word, $unicode_word, \&sha1, 64);
|
||||
|
||||
my $hash = sprintf ("%s", encode_base64 ($digest, ""));
|
||||
|
||||
return $hash;
|
||||
}
|
||||
|
||||
sub module_verify_hash
|
||||
{
|
||||
my $line = shift;
|
||||
|
||||
my ($hash, $word) = split (':', $line);
|
||||
|
||||
return unless defined $hash;
|
||||
return unless defined $word;
|
||||
|
||||
my $word_packed = pack_if_HEX_notation ($word);
|
||||
|
||||
my $new_hash = module_generate_hash ($word_packed);
|
||||
|
||||
return ($new_hash, $word);
|
||||
}
|
||||
|
||||
1;
|
58
tools/test_modules/m24900.pm
Normal file
58
tools/test_modules/m24900.pm
Normal file
@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
##
|
||||
## Author......: See docs/credits.txt
|
||||
## License.....: MIT
|
||||
##
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use MIME::Base64 qw (encode_base64 decode_base64);
|
||||
|
||||
use Digest::MD5 qw (md5);
|
||||
|
||||
sub module_constraints { [[0, 256], [-1, -1], [0, 55], [-1, -1], [-1, -1]] }
|
||||
|
||||
my $itoa62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
sub module_generate_hash
|
||||
{
|
||||
my $word = shift;
|
||||
|
||||
my $digest = md5 ($word);
|
||||
|
||||
my @chksum;
|
||||
|
||||
for (my $i = 0, my $j = 0; $i < 16; $i += 2, $j += 1)
|
||||
{
|
||||
$chksum[$j] = (ord (substr ($digest, $i + 0, 1)) + ord (substr ($digest, $i + 1, 1))) % 62;
|
||||
|
||||
printf ("%d\n", $chksum[$j]);
|
||||
|
||||
$chksum[$j] = substr ($itoa62, $chksum[$j], 1);
|
||||
}
|
||||
|
||||
my $res = join "", @chksum;
|
||||
|
||||
my $hash = sprintf ("%s", $res);
|
||||
|
||||
return $hash;
|
||||
}
|
||||
|
||||
sub module_verify_hash
|
||||
{
|
||||
my $line = shift;
|
||||
|
||||
my ($hash, $word) = split (':', $line);
|
||||
|
||||
return unless defined $hash;
|
||||
return unless defined $word;
|
||||
|
||||
my $word_packed = pack_if_HEX_notation ($word);
|
||||
|
||||
my $new_hash = module_generate_hash ($word_packed);
|
||||
|
||||
return ($new_hash, $word);
|
||||
}
|
||||
|
||||
1;
|
72
tools/test_modules/m25300.pm
Normal file
72
tools/test_modules/m25300.pm
Normal file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
##
|
||||
## Author......: See docs/credits.txt
|
||||
## License.....: MIT
|
||||
##
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use MIME::Base64 qw (encode_base64 decode_base64);
|
||||
use Digest::SHA qw (sha512);
|
||||
use Encode;
|
||||
|
||||
sub module_constraints { [[0, 64], [16, 16], [-1, -1], [-1, -1], [-1, -1]] }
|
||||
|
||||
sub module_generate_hash
|
||||
{
|
||||
my $word = shift;
|
||||
my $salt = shift;
|
||||
my $iter = shift // 100000;
|
||||
|
||||
my $tmp = sha512 ($salt . encode ("UTF-16LE", $word));
|
||||
|
||||
for (my $i = 0; $i < $iter; $i++)
|
||||
{
|
||||
my $num32 = pack ("L", $i);
|
||||
|
||||
$tmp = sha512 ($tmp . $num32);
|
||||
}
|
||||
|
||||
my $salt_b64 = encode_base64 ($salt, "");
|
||||
my $digest_b64 = encode_base64 ($tmp, "");
|
||||
|
||||
my $hash = sprintf ("\$office\$%d\$0\$%d\$%s\$%s", 2016, $iter, $salt_b64, $digest_b64);
|
||||
|
||||
return $hash;
|
||||
}
|
||||
|
||||
sub module_verify_hash
|
||||
{
|
||||
my $line = shift;
|
||||
|
||||
my ($hash, $word) = split ":", $line;
|
||||
|
||||
return unless defined $hash;
|
||||
return unless defined $word;
|
||||
|
||||
my @data = split ('\$', $hash);
|
||||
|
||||
return unless scalar @data == 7;
|
||||
return unless (shift @data eq 'office');
|
||||
return unless (shift @data eq '2016');
|
||||
return unless (shift @data eq '0');
|
||||
|
||||
my $iter = shift @data;
|
||||
my $salt = shift @data;
|
||||
my $digest = shift @data;
|
||||
|
||||
return unless defined $iter;
|
||||
return unless defined $salt;
|
||||
return unless defined $digest;
|
||||
|
||||
return unless length ($salt) == 24;
|
||||
return unless length ($digest) == 88;
|
||||
|
||||
my $new_hash = module_generate_hash ($word, $salt, $iter);
|
||||
|
||||
return ($new_hash, $word);
|
||||
}
|
||||
|
||||
1;
|
Loading…
Reference in New Issue
Block a user