diff --git a/OpenCL/m07800_a0-optimized.cl b/OpenCL/m07800_a0-optimized.cl index 8f921f42f..7dab142cb 100644 --- a/OpenCL/m07800_a0-optimized.cl +++ b/OpenCL/m07800_a0-optimized.cl @@ -17,90 +17,30 @@ #include "inc_hash_sha1.cl" #endif -CONSTANT_VK u32a theMagicArray[80][16] = +CONSTANT_VK u32a theMagicArray[64] = { - { 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194 }, - { 0xac51149f, 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f }, - { 0x51149f67, 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b }, - { 0x149f6754, 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1 }, - { 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b }, - { 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06 }, - { 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605 }, - { 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d }, - { 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03 }, - { 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d }, - { 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e }, - { 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13 }, - { 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a }, - { 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e }, - { 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a }, - { 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a }, - { 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8 }, - { 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9 }, - { 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c }, - { 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14 }, - { 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417 }, - { 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758 }, - { 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7 }, - { 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a }, - { 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6 }, - { 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1 }, - { 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199 }, - { 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963 }, - { 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a }, - { 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7 }, - { 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd }, - { 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70 }, - { 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3 }, - { 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6 }, - { 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e }, - { 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74 }, - { 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413 }, - { 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303 }, - { 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9 }, - { 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b }, - { 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04 }, - { 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426 }, - { 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698 }, - { 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7 }, - { 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726 }, - { 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a }, - { 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92 }, - { 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293 }, - { 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325 }, - { 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0 }, - { 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2 }, - { 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d }, - { 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23 }, - { 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed }, - { 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63 }, - { 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379 }, - { 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d }, - { 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13 }, - { 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332 }, - { 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa }, - { 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c }, - { 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35 }, - { 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502 }, - { 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a }, - { 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3 }, - { 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3 }, - { 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd }, - { 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e }, - { 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a }, - { 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24 }, - { 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf }, - { 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51 }, - { 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3 }, - { 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c }, - { 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd }, - { 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55 }, - { 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f }, - { 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c, 0xcd559f37 }, - { 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd, 0x559f37af }, - { 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55, 0x9f37af94 }, + 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, + 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, + 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, + 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, + 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f, 0x37af944c, 0x29085282, 0xb23b4e37, 0x9f170791, 0x113bfdcd, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; +DECLSPEC u32 GETSHIFTEDINT_CONST (CONSTANT_AS u32a *a, const int n) +{ + const int d = n / 4; + const int m = n & 3; + + u64 tmp = hl32_to_64_S (a[d + 0], a[d + 1]); + + tmp <<= m * 8; + + return h32_from_64_S (tmp); +} + DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) { const int d = n / 4; @@ -116,52 +56,20 @@ DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; - /** - * modifier - */ - u32 pw_buf0[4]; u32 pw_buf1[4]; @@ -182,14 +90,14 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -206,15 +114,6 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1); - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - /** * SAP */ @@ -241,7 +140,7 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, out_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, out_len); const u32x pw_salt_len = out_len + salt_len; @@ -251,20 +150,20 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -328,61 +227,49 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, out_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = out_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } @@ -421,52 +308,20 @@ KERNEL_FQ void m07800_m16 (KERN_ATTR_RULES ()) KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; - /** - * modifier - */ - u32 pw_buf0[4]; u32 pw_buf1[4]; @@ -487,14 +342,14 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -523,15 +378,6 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1); - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - /** * SAP */ @@ -558,7 +404,7 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, out_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, out_len); const u32x pw_salt_len = out_len + salt_len; @@ -568,20 +414,20 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -645,61 +491,49 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, out_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = out_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } diff --git a/OpenCL/m07800_a1-optimized.cl b/OpenCL/m07800_a1-optimized.cl index 5b43a174d..0ce766c16 100644 --- a/OpenCL/m07800_a1-optimized.cl +++ b/OpenCL/m07800_a1-optimized.cl @@ -15,90 +15,30 @@ #include "inc_hash_sha1.cl" #endif -CONSTANT_VK u32a theMagicArray[80][16] = +CONSTANT_VK u32a theMagicArray[64] = { - { 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194 }, - { 0xac51149f, 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f }, - { 0x51149f67, 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b }, - { 0x149f6754, 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1 }, - { 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b }, - { 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06 }, - { 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605 }, - { 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d }, - { 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03 }, - { 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d }, - { 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e }, - { 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13 }, - { 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a }, - { 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e }, - { 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a }, - { 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a }, - { 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8 }, - { 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9 }, - { 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c }, - { 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14 }, - { 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417 }, - { 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758 }, - { 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7 }, - { 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a }, - { 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6 }, - { 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1 }, - { 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199 }, - { 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963 }, - { 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a }, - { 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7 }, - { 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd }, - { 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70 }, - { 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3 }, - { 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6 }, - { 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e }, - { 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74 }, - { 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413 }, - { 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303 }, - { 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9 }, - { 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b }, - { 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04 }, - { 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426 }, - { 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698 }, - { 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7 }, - { 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726 }, - { 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a }, - { 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92 }, - { 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293 }, - { 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325 }, - { 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0 }, - { 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2 }, - { 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d }, - { 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23 }, - { 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed }, - { 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63 }, - { 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379 }, - { 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d }, - { 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13 }, - { 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332 }, - { 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa }, - { 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c }, - { 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35 }, - { 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502 }, - { 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a }, - { 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3 }, - { 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3 }, - { 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd }, - { 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e }, - { 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a }, - { 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24 }, - { 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf }, - { 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51 }, - { 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3 }, - { 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c }, - { 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd }, - { 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55 }, - { 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f }, - { 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c, 0xcd559f37 }, - { 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd, 0x559f37af }, - { 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55, 0x9f37af94 }, + 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, + 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, + 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, + 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, + 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f, 0x37af944c, 0x29085282, 0xb23b4e37, 0x9f170791, 0x113bfdcd, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; +DECLSPEC u32 GETSHIFTEDINT_CONST (CONSTANT_AS u32a *a, const int n) +{ + const int d = n / 4; + const int m = n & 3; + + u64 tmp = hl32_to_64_S (a[d + 0], a[d + 1]); + + tmp <<= m * 8; + + return h32_from_64_S (tmp); +} + DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) { const int d = n / 4; @@ -114,45 +54,17 @@ DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -176,14 +88,14 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -260,23 +172,6 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) w3[2] = wordl3[2] | wordr3[2]; w3[3] = wordl3[3] | wordr3[3]; - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - w2[0] = hc_swap32_S (w2[0]); - w2[1] = hc_swap32_S (w2[1]); - w2[2] = hc_swap32_S (w2[2]); - w2[3] = hc_swap32_S (w2[3]); - w3[0] = hc_swap32_S (w3[0]); - w3[1] = hc_swap32_S (w3[1]); - w3[2] = hc_swap32_S (w3[2]); - w3[3] = hc_swap32_S (w3[3]); - /** * SAP */ @@ -303,7 +198,7 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, pw_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, pw_len); const u32x pw_salt_len = pw_len + salt_len; @@ -313,20 +208,20 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -390,61 +285,49 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = hc_swap32_S (w2[0]); + final[ 9] = hc_swap32_S (w2[1]); + final[10] = hc_swap32_S (w2[2]); + final[11] = hc_swap32_S (w2[3]); + final[12] = hc_swap32_S (w3[0]); + final[13] = hc_swap32_S (w3[1]); + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = pw_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } @@ -483,45 +366,17 @@ KERNEL_FQ void m07800_m16 (KERN_ATTR_BASIC ()) KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -545,14 +400,14 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -641,23 +496,6 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) w3[2] = wordl3[2] | wordr3[2]; w3[3] = wordl3[3] | wordr3[3]; - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - w2[0] = hc_swap32_S (w2[0]); - w2[1] = hc_swap32_S (w2[1]); - w2[2] = hc_swap32_S (w2[2]); - w2[3] = hc_swap32_S (w2[3]); - w3[0] = hc_swap32_S (w3[0]); - w3[1] = hc_swap32_S (w3[1]); - w3[2] = hc_swap32_S (w3[2]); - w3[3] = hc_swap32_S (w3[3]); - /** * SAP */ @@ -684,7 +522,7 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, pw_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, pw_len); const u32x pw_salt_len = pw_len + salt_len; @@ -694,20 +532,20 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -771,61 +609,49 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = hc_swap32_S (w2[0]); + final[ 9] = hc_swap32_S (w2[1]); + final[10] = hc_swap32_S (w2[2]); + final[11] = hc_swap32_S (w2[3]); + final[12] = hc_swap32_S (w3[0]); + final[13] = hc_swap32_S (w3[1]); + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = pw_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } diff --git a/OpenCL/m07800_a3-optimized.cl b/OpenCL/m07800_a3-optimized.cl index a5370badb..4ee34d3dc 100644 --- a/OpenCL/m07800_a3-optimized.cl +++ b/OpenCL/m07800_a3-optimized.cl @@ -15,90 +15,30 @@ #include "inc_hash_sha1.cl" #endif -CONSTANT_VK u32a theMagicArray[80][16] = +CONSTANT_VK u32a theMagicArray[64] = { - { 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194 }, - { 0xac51149f, 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f }, - { 0x51149f67, 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b }, - { 0x149f6754, 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1 }, - { 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b }, - { 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06 }, - { 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605 }, - { 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d }, - { 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03 }, - { 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d }, - { 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e }, - { 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13 }, - { 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a }, - { 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e }, - { 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a }, - { 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a }, - { 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8 }, - { 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9 }, - { 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c }, - { 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14 }, - { 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417 }, - { 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758 }, - { 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7 }, - { 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a }, - { 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6 }, - { 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1 }, - { 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199 }, - { 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963 }, - { 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a }, - { 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7 }, - { 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd }, - { 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70 }, - { 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3 }, - { 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6 }, - { 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e }, - { 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74 }, - { 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413 }, - { 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303 }, - { 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9 }, - { 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b }, - { 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04 }, - { 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426 }, - { 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698 }, - { 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7 }, - { 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726 }, - { 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a }, - { 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92 }, - { 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293 }, - { 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325 }, - { 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0 }, - { 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2 }, - { 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d }, - { 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23 }, - { 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed }, - { 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63 }, - { 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379 }, - { 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d }, - { 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13 }, - { 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332 }, - { 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa }, - { 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c }, - { 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35 }, - { 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502 }, - { 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a }, - { 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3 }, - { 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3 }, - { 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd }, - { 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e }, - { 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a }, - { 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24 }, - { 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf }, - { 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51 }, - { 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3 }, - { 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c }, - { 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd }, - { 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55 }, - { 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f }, - { 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c, 0xcd559f37 }, - { 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd, 0x559f37af }, - { 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55, 0x9f37af94 }, + 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, + 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, + 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, + 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, + 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f, 0x37af944c, 0x29085282, 0xb23b4e37, 0x9f170791, 0x113bfdcd, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; +DECLSPEC u32 GETSHIFTEDINT_CONST (CONSTANT_AS u32a *a, const int n) +{ + const int d = n / 4; + const int m = n & 3; + + u64 tmp = hl32_to_64_S (a[d + 0], a[d + 1]); + + tmp <<= m * 8; + + return h32_from_64_S (tmp); +} + DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) { const int d = n / 4; @@ -112,7 +52,7 @@ DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -DECLSPEC void m07800m (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) +DECLSPEC void m07800m (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) { /** * modifier @@ -261,59 +201,47 @@ DECLSPEC void m07800m (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = w0[0]; + final[ 1] = w0[1]; + final[ 2] = w0[2]; + final[ 3] = w0[3]; + final[ 4] = w1[0]; + final[ 5] = w1[1]; + final[ 6] = w1[2]; + final[ 7] = w1[3]; + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + SETSHIFTEDINT (final, final_len + i, tmp); + } - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - u32 final_len = pw_len + lengthMagicArray; + SETSHIFTEDINT (final, final_len + i, tmp); + + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] @@ -344,7 +272,7 @@ DECLSPEC void m07800m (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u } } -DECLSPEC void m07800s (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) +DECLSPEC void m07800s (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) { /** * modifier @@ -505,59 +433,47 @@ DECLSPEC void m07800s (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = w0[0]; + final[ 1] = w0[1]; + final[ 2] = w0[2]; + final[ 3] = w0[3]; + final[ 4] = w1[0]; + final[ 5] = w1[1]; + final[ 6] = w1[2]; + final[ 7] = w1[3]; + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = pw_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] @@ -590,45 +506,11 @@ DECLSPEC void m07800s (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -636,6 +518,8 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -670,50 +554,16 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) * main */ - m07800m (s_theMagicArray, 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, gid_max); + m07800m (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, gid_max); } KERNEL_FQ void m07800_m08 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -721,6 +571,8 @@ KERNEL_FQ void m07800_m08 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -755,7 +607,7 @@ KERNEL_FQ void m07800_m08 (KERN_ATTR_BASIC ()) * main */ - m07800m (s_theMagicArray, 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, gid_max); + m07800m (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, gid_max); } KERNEL_FQ void m07800_m16 (KERN_ATTR_BASIC ()) @@ -764,45 +616,11 @@ KERNEL_FQ void m07800_m16 (KERN_ATTR_BASIC ()) KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -810,6 +628,8 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -844,50 +664,16 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) * main */ - m07800s (s_theMagicArray, 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, gid_max); + m07800s (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, gid_max); } KERNEL_FQ void m07800_s08 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -895,6 +681,8 @@ KERNEL_FQ void m07800_s08 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -929,7 +717,7 @@ KERNEL_FQ void m07800_s08 (KERN_ATTR_BASIC ()) * main */ - m07800s (s_theMagicArray, 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, gid_max); + m07800s (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, gid_max); } KERNEL_FQ void m07800_s16 (KERN_ATTR_BASIC ()) diff --git a/OpenCL/m07801_a0-optimized.cl b/OpenCL/m07801_a0-optimized.cl index ba695ee76..13059adfe 100644 --- a/OpenCL/m07801_a0-optimized.cl +++ b/OpenCL/m07801_a0-optimized.cl @@ -17,90 +17,30 @@ #include "inc_hash_sha1.cl" #endif -CONSTANT_VK u32a theMagicArray[80][16] = +CONSTANT_VK u32a theMagicArray[64] = { - { 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194 }, - { 0xac51149f, 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f }, - { 0x51149f67, 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b }, - { 0x149f6754, 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1 }, - { 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b }, - { 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06 }, - { 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605 }, - { 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d }, - { 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03 }, - { 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d }, - { 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e }, - { 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13 }, - { 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a }, - { 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e }, - { 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a }, - { 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a }, - { 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8 }, - { 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9 }, - { 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c }, - { 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14 }, - { 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417 }, - { 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758 }, - { 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7 }, - { 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a }, - { 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6 }, - { 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1 }, - { 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199 }, - { 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963 }, - { 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a }, - { 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7 }, - { 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd }, - { 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70 }, - { 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3 }, - { 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6 }, - { 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e }, - { 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74 }, - { 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413 }, - { 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303 }, - { 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9 }, - { 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b }, - { 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04 }, - { 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426 }, - { 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698 }, - { 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7 }, - { 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726 }, - { 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a }, - { 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92 }, - { 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293 }, - { 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325 }, - { 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0 }, - { 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2 }, - { 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d }, - { 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23 }, - { 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed }, - { 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63 }, - { 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379 }, - { 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d }, - { 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13 }, - { 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332 }, - { 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa }, - { 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c }, - { 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35 }, - { 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502 }, - { 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a }, - { 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3 }, - { 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3 }, - { 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd }, - { 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e }, - { 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a }, - { 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24 }, - { 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf }, - { 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51 }, - { 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3 }, - { 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c }, - { 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd }, - { 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55 }, - { 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f }, - { 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c, 0xcd559f37 }, - { 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd, 0x559f37af }, - { 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55, 0x9f37af94 }, + 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, + 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, + 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, + 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, + 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f, 0x37af944c, 0x29085282, 0xb23b4e37, 0x9f170791, 0x113bfdcd, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; +DECLSPEC u32 GETSHIFTEDINT_CONST (CONSTANT_AS u32a *a, const int n) +{ + const int d = n / 4; + const int m = n & 3; + + u64 tmp = hl32_to_64_S (a[d + 0], a[d + 1]); + + tmp <<= m * 8; + + return h32_from_64_S (tmp); +} + DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) { const int d = n / 4; @@ -116,52 +56,20 @@ DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; - /** - * modifier - */ - u32 pw_buf0[4]; u32 pw_buf1[4]; @@ -182,14 +90,14 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -206,15 +114,6 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1); - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - /** * SAP */ @@ -241,7 +140,7 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, out_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, out_len); const u32x pw_salt_len = out_len + salt_len; @@ -251,20 +150,20 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -328,61 +227,49 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, out_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = out_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } @@ -421,52 +308,20 @@ KERNEL_FQ void m07801_m16 (KERN_ATTR_RULES ()) KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; - /** - * modifier - */ - u32 pw_buf0[4]; u32 pw_buf1[4]; @@ -487,14 +342,14 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -523,15 +378,6 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) const u32x out_len = apply_rules_vect_optimized (pw_buf0, pw_buf1, pw_len, rules_buf, il_pos, w0, w1); - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - /** * SAP */ @@ -558,7 +404,7 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, out_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, out_len); const u32x pw_salt_len = out_len + salt_len; @@ -568,20 +414,20 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -645,61 +491,49 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, out_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = out_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } diff --git a/OpenCL/m07801_a1-optimized.cl b/OpenCL/m07801_a1-optimized.cl index 96c5a9e73..ef836a019 100644 --- a/OpenCL/m07801_a1-optimized.cl +++ b/OpenCL/m07801_a1-optimized.cl @@ -15,90 +15,30 @@ #include "inc_hash_sha1.cl" #endif -CONSTANT_VK u32a theMagicArray[80][16] = +CONSTANT_VK u32a theMagicArray[64] = { - { 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194 }, - { 0xac51149f, 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f }, - { 0x51149f67, 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b }, - { 0x149f6754, 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1 }, - { 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b }, - { 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06 }, - { 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605 }, - { 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d }, - { 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03 }, - { 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d }, - { 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e }, - { 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13 }, - { 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a }, - { 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e }, - { 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a }, - { 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a }, - { 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8 }, - { 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9 }, - { 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c }, - { 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14 }, - { 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417 }, - { 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758 }, - { 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7 }, - { 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a }, - { 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6 }, - { 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1 }, - { 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199 }, - { 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963 }, - { 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a }, - { 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7 }, - { 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd }, - { 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70 }, - { 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3 }, - { 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6 }, - { 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e }, - { 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74 }, - { 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413 }, - { 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303 }, - { 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9 }, - { 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b }, - { 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04 }, - { 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426 }, - { 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698 }, - { 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7 }, - { 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726 }, - { 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a }, - { 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92 }, - { 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293 }, - { 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325 }, - { 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0 }, - { 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2 }, - { 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d }, - { 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23 }, - { 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed }, - { 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63 }, - { 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379 }, - { 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d }, - { 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13 }, - { 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332 }, - { 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa }, - { 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c }, - { 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35 }, - { 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502 }, - { 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a }, - { 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3 }, - { 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3 }, - { 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd }, - { 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e }, - { 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a }, - { 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24 }, - { 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf }, - { 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51 }, - { 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3 }, - { 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c }, - { 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd }, - { 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55 }, - { 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f }, - { 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c, 0xcd559f37 }, - { 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd, 0x559f37af }, - { 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55, 0x9f37af94 }, + 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, + 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, + 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, + 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, + 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f, 0x37af944c, 0x29085282, 0xb23b4e37, 0x9f170791, 0x113bfdcd, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; +DECLSPEC u32 GETSHIFTEDINT_CONST (CONSTANT_AS u32a *a, const int n) +{ + const int d = n / 4; + const int m = n & 3; + + u64 tmp = hl32_to_64_S (a[d + 0], a[d + 1]); + + tmp <<= m * 8; + + return h32_from_64_S (tmp); +} + DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) { const int d = n / 4; @@ -114,45 +54,17 @@ DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -176,14 +88,14 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -260,23 +172,6 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) w3[2] = wordl3[2] | wordr3[2]; w3[3] = wordl3[3] | wordr3[3]; - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - w2[0] = hc_swap32_S (w2[0]); - w2[1] = hc_swap32_S (w2[1]); - w2[2] = hc_swap32_S (w2[2]); - w2[3] = hc_swap32_S (w2[3]); - w3[0] = hc_swap32_S (w3[0]); - w3[1] = hc_swap32_S (w3[1]); - w3[2] = hc_swap32_S (w3[2]); - w3[3] = hc_swap32_S (w3[3]); - /** * SAP */ @@ -303,7 +198,7 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, pw_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, pw_len); const u32x pw_salt_len = pw_len + salt_len; @@ -313,20 +208,20 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -390,61 +285,49 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = hc_swap32_S (w2[0]); + final[ 9] = hc_swap32_S (w2[1]); + final[10] = hc_swap32_S (w2[2]); + final[11] = hc_swap32_S (w2[3]); + final[12] = hc_swap32_S (w3[0]); + final[13] = hc_swap32_S (w3[1]); + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = pw_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } @@ -483,45 +366,17 @@ KERNEL_FQ void m07801_m16 (KERN_ATTR_BASIC ()) KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * modifier */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else + const u64 lid = get_local_id (0); - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; + /** + * base + */ - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -545,14 +400,14 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) u32 salt_buf[8]; - salt_buf[0] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[0]); - salt_buf[1] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[1]); - salt_buf[2] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[2]); - salt_buf[3] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[3]); - salt_buf[4] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[4]); - salt_buf[5] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[5]); - salt_buf[6] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[6]); - salt_buf[7] = hc_swap32_S (salt_bufs[salt_pos].salt_buf[7]); + salt_buf[0] = salt_bufs[salt_pos].salt_buf[0]; + salt_buf[1] = salt_bufs[salt_pos].salt_buf[1]; + salt_buf[2] = salt_bufs[salt_pos].salt_buf[2]; + salt_buf[3] = salt_bufs[salt_pos].salt_buf[3]; + salt_buf[4] = salt_bufs[salt_pos].salt_buf[4]; + salt_buf[5] = salt_bufs[salt_pos].salt_buf[5]; + salt_buf[6] = salt_bufs[salt_pos].salt_buf[6]; + salt_buf[7] = salt_bufs[salt_pos].salt_buf[7]; const u32 salt_len = salt_bufs[salt_pos].salt_len; @@ -641,23 +496,6 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) w3[2] = wordl3[2] | wordr3[2]; w3[3] = wordl3[3] | wordr3[3]; - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - w2[0] = hc_swap32_S (w2[0]); - w2[1] = hc_swap32_S (w2[1]); - w2[2] = hc_swap32_S (w2[2]); - w2[3] = hc_swap32_S (w2[3]); - w3[0] = hc_swap32_S (w3[0]); - w3[1] = hc_swap32_S (w3[1]); - w3[2] = hc_swap32_S (w3[2]); - w3[3] = hc_swap32_S (w3[3]); - /** * SAP */ @@ -684,7 +522,7 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) s3[2] = 0; s3[3] = 0; - switch_buffer_by_offset_be_S (s0, s1, s2, s3, pw_len); + switch_buffer_by_offset_le_VV (s0, s1, s2, s3, pw_len); const u32x pw_salt_len = pw_len + salt_len; @@ -694,20 +532,20 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) u32 final[32]; - final[ 0] = w0[0] | s0[0]; - final[ 1] = w0[1] | s0[1]; - final[ 2] = w0[2] | s0[2]; - final[ 3] = w0[3] | s0[3]; - final[ 4] = w1[0] | s1[0]; - final[ 5] = w1[1] | s1[1]; - final[ 6] = w1[2] | s1[2]; - final[ 7] = w1[3] | s1[3]; - final[ 8] = w2[0] | s2[0]; - final[ 9] = w2[1] | s2[1]; - final[10] = w2[2] | s2[2]; - final[11] = w2[3] | s2[3]; - final[12] = w3[0] | s3[0]; - final[13] = w3[1] | s3[1]; + final[ 0] = hc_swap32_S (w0[0] | s0[0]); + final[ 1] = hc_swap32_S (w0[1] | s0[1]); + final[ 2] = hc_swap32_S (w0[2] | s0[2]); + final[ 3] = hc_swap32_S (w0[3] | s0[3]); + final[ 4] = hc_swap32_S (w1[0] | s1[0]); + final[ 5] = hc_swap32_S (w1[1] | s1[1]); + final[ 6] = hc_swap32_S (w1[2] | s1[2]); + final[ 7] = hc_swap32_S (w1[3] | s1[3]); + final[ 8] = hc_swap32_S (w2[0] | s2[0]); + final[ 9] = hc_swap32_S (w2[1] | s2[1]); + final[10] = hc_swap32_S (w2[2] | s2[2]); + final[11] = hc_swap32_S (w2[3] | s2[3]); + final[12] = hc_swap32_S (w3[0] | s3[0]); + final[13] = hc_swap32_S (w3[1] | s3[1]); final[14] = 0; final[15] = pw_salt_len * 8; final[16] = 0; @@ -771,61 +609,49 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = hc_swap32_S (w0[0]); + final[ 1] = hc_swap32_S (w0[1]); + final[ 2] = hc_swap32_S (w0[2]); + final[ 3] = hc_swap32_S (w0[3]); + final[ 4] = hc_swap32_S (w1[0]); + final[ 5] = hc_swap32_S (w1[1]); + final[ 6] = hc_swap32_S (w1[2]); + final[ 7] = hc_swap32_S (w1[3]); + final[ 8] = hc_swap32_S (w2[0]); + final[ 9] = hc_swap32_S (w2[1]); + final[10] = hc_swap32_S (w2[2]); + final[11] = hc_swap32_S (w2[3]); + final[12] = hc_swap32_S (w3[0]); + final[13] = hc_swap32_S (w3[1]); + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = pw_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { - const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] + const u32 tmp = hc_swap32_S (salt_buf[i / 4]); // attention, int[] not char[] SETSHIFTEDINT (final, final_len + i, tmp); } diff --git a/OpenCL/m07801_a3-optimized.cl b/OpenCL/m07801_a3-optimized.cl index 7c3d987f6..59bc222cd 100644 --- a/OpenCL/m07801_a3-optimized.cl +++ b/OpenCL/m07801_a3-optimized.cl @@ -15,90 +15,30 @@ #include "inc_hash_sha1.cl" #endif -CONSTANT_VK u32a theMagicArray[80][16] = +CONSTANT_VK u32a theMagicArray[64] = { - { 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194 }, - { 0xac51149f, 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f }, - { 0x51149f67, 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b }, - { 0x149f6754, 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1 }, - { 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b }, - { 0x67544324, 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06 }, - { 0x544324e7, 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605 }, - { 0x4324e73b, 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d }, - { 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03 }, - { 0xe73be028, 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d }, - { 0x3be02874, 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e }, - { 0xe028747b, 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13 }, - { 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a }, - { 0x747bc286, 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e }, - { 0x7bc28633, 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a }, - { 0xc2863313, 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a }, - { 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8 }, - { 0x3313eb5a, 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9 }, - { 0x13eb5a4f, 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c }, - { 0xeb5a4fcb, 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14 }, - { 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417 }, - { 0x4fcb5c08, 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758 }, - { 0xcb5c080a, 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7 }, - { 0x5c080a73, 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a }, - { 0x080a7337, 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6 }, - { 0x0a73370e, 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1 }, - { 0x73370e5d, 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199 }, - { 0x370e5d1c, 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963 }, - { 0x0e5d1c2f, 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a }, - { 0x5d1c2f33, 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7 }, - { 0x1c2f338f, 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd }, - { 0x2f338fe6, 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70 }, - { 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3 }, - { 0x8fe6e5f8, 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6 }, - { 0xe6e5f89b, 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e }, - { 0xe5f89bae, 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74 }, - { 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413 }, - { 0x9baedd16, 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303 }, - { 0xaedd16f2, 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9 }, - { 0xdd16f24b, 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b }, - { 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04 }, - { 0xf24b8d2c, 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426 }, - { 0x4b8d2ce1, 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698 }, - { 0x8d2ce1d4, 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7 }, - { 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726 }, - { 0xe1d4dcb0, 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a }, - { 0xd4dcb0cb, 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92 }, - { 0xdcb0cbdf, 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293 }, - { 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325 }, - { 0xcbdf9dd4, 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0 }, - { 0xdf9dd470, 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2 }, - { 0x9dd4706d, 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d }, - { 0xd4706d17, 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23 }, - { 0x706d17f9, 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed }, - { 0x6d17f94d, 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63 }, - { 0x17f94d42, 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379 }, - { 0xf94d423f, 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d }, - { 0x4d423f9b, 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13 }, - { 0x423f9b1b, 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332 }, - { 0x3f9b1b11, 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa }, - { 0x9b1b1194, 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c }, - { 0x1b11949f, 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35 }, - { 0x11949f5b, 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502 }, - { 0x949f5bc1, 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a }, - { 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3 }, - { 0x5bc19b06, 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3 }, - { 0xc19b0605, 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd }, - { 0x9b06059d, 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e }, - { 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a }, - { 0x059d039d, 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24 }, - { 0x9d039d5e, 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf }, - { 0x039d5e13, 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51 }, - { 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3 }, - { 0x5e138a1e, 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c }, - { 0x138a1e9a, 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd }, - { 0x8a1e9a6a, 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55 }, - { 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f }, - { 0x9a6ae8d9, 0x7c141758, 0xc72af6a1, 0x99630ad7, 0xfd70c3f6, 0x5e741303, 0xc90b0426, 0x98f7268a, 0x929325b0, 0xa20d23ed, 0x63796d13, 0x32fa3c35, 0x029aa3b3, 0xdd8e0a24, 0xbf51c37c, 0xcd559f37 }, - { 0x6ae8d97c, 0x141758c7, 0x2af6a199, 0x630ad7fd, 0x70c3f65e, 0x741303c9, 0x0b042698, 0xf7268a92, 0x9325b0a2, 0x0d23ed63, 0x796d1332, 0xfa3c3502, 0x9aa3b3dd, 0x8e0a24bf, 0x51c37ccd, 0x559f37af }, - { 0xe8d97c14, 0x1758c72a, 0xf6a19963, 0x0ad7fd70, 0xc3f65e74, 0x1303c90b, 0x042698f7, 0x268a9293, 0x25b0a20d, 0x23ed6379, 0x6d1332fa, 0x3c35029a, 0xa3b3dd8e, 0x0a24bf51, 0xc37ccd55, 0x9f37af94 }, + 0x91ac5114, 0x9f675443, 0x24e73be0, 0x28747bc2, 0x863313eb, 0x5a4fcb5c, 0x080a7337, 0x0e5d1c2f, + 0x338fe6e5, 0xf89baedd, 0x16f24b8d, 0x2ce1d4dc, 0xb0cbdf9d, 0xd4706d17, 0xf94d423f, 0x9b1b1194, + 0x9f5bc19b, 0x06059d03, 0x9d5e138a, 0x1e9a6ae8, 0xd97c1417, 0x58c72af6, 0xa199630a, 0xd7fd70c3, + 0xf65e7413, 0x03c90b04, 0x2698f726, 0x8a929325, 0xb0a20d23, 0xed63796d, 0x1332fa3c, 0x35029aa3, + 0xb3dd8e0a, 0x24bf51c3, 0x7ccd559f, 0x37af944c, 0x29085282, 0xb23b4e37, 0x9f170791, 0x113bfdcd, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; +DECLSPEC u32 GETSHIFTEDINT_CONST (CONSTANT_AS u32a *a, const int n) +{ + const int d = n / 4; + const int m = n & 3; + + u64 tmp = hl32_to_64_S (a[d + 0], a[d + 1]); + + tmp <<= m * 8; + + return h32_from_64_S (tmp); +} + DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) { const int d = n / 4; @@ -112,7 +52,7 @@ DECLSPEC void SETSHIFTEDINT (u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -DECLSPEC void m07801m (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) +DECLSPEC void m07801m (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) { /** * modifier @@ -261,59 +201,47 @@ DECLSPEC void m07801m (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = w0[0]; + final[ 1] = w0[1]; + final[ 2] = w0[2]; + final[ 3] = w0[3]; + final[ 4] = w1[0]; + final[ 5] = w1[1]; + final[ 6] = w1[2]; + final[ 7] = w1[3]; + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + SETSHIFTEDINT (final, final_len + i, tmp); + } - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - u32 final_len = pw_len + lengthMagicArray; + SETSHIFTEDINT (final, final_len + i, tmp); + + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] @@ -344,7 +272,7 @@ DECLSPEC void m07801m (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u } } -DECLSPEC void m07801s (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) +DECLSPEC void m07801s (u32 *w0, u32 *w1, u32 *w2, u32 *w3, const u32 pw_len, KERN_ATTR_BASIC ()) { /** * modifier @@ -505,59 +433,47 @@ DECLSPEC void m07801s (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u digest[3] = SHA1M_D; digest[4] = SHA1M_E; + final[ 0] = w0[0]; + final[ 1] = w0[1]; + final[ 2] = w0[2]; + final[ 3] = w0[3]; + final[ 4] = w1[0]; + final[ 5] = w1[1]; + final[ 6] = w1[2]; + final[ 7] = w1[3]; + final[ 8] = 0; + final[ 9] = 0; + final[10] = 0; + final[11] = 0; + final[12] = 0; + final[13] = 0; + final[14] = 0; + final[15] = 0; + + u32 final_len = pw_len; + + u32 i; + // append MagicArray - final[ 0] = s_theMagicArray[offsetMagicArray][ 0]; - final[ 1] = s_theMagicArray[offsetMagicArray][ 1]; - final[ 2] = s_theMagicArray[offsetMagicArray][ 2]; - final[ 3] = s_theMagicArray[offsetMagicArray][ 3]; - final[ 4] = s_theMagicArray[offsetMagicArray][ 4]; - final[ 5] = s_theMagicArray[offsetMagicArray][ 5]; - final[ 6] = s_theMagicArray[offsetMagicArray][ 6]; - final[ 7] = s_theMagicArray[offsetMagicArray][ 7]; - final[ 8] = s_theMagicArray[offsetMagicArray][ 8]; - final[ 9] = s_theMagicArray[offsetMagicArray][ 9]; - final[10] = s_theMagicArray[offsetMagicArray][10]; - final[11] = s_theMagicArray[offsetMagicArray][11]; - final[12] = s_theMagicArray[offsetMagicArray][12]; - final[13] = s_theMagicArray[offsetMagicArray][13]; - final[14] = s_theMagicArray[offsetMagicArray][14]; - final[15] = s_theMagicArray[offsetMagicArray][15]; - final[16] = 0; - final[17] = 0; - final[18] = 0; - final[19] = 0; - final[20] = 0; - final[21] = 0; - final[22] = 0; - final[23] = 0; - final[24] = 0; - final[25] = 0; - final[26] = 0; - final[27] = 0; - final[28] = 0; - final[29] = 0; - final[30] = 0; - final[31] = 0; + for (i = 0; i < lengthMagicArray - 4; i += 4) + { + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i); + + SETSHIFTEDINT (final, final_len + i, tmp); + } - truncate_block_16x4_be_S (final + 0, final + 4, final + 8, final + 12, lengthMagicArray); + const u32 mask = 0xffffffff << (((4 - (lengthMagicArray - i)) & 3) * 8); - switch_buffer_by_offset_8x4_be_S (final + 0, final + 4, final + 8, final + 12, final + 16, final + 20, final + 24, final + 28, pw_len); + const u32 tmp = GETSHIFTEDINT_CONST (theMagicArray, offsetMagicArray + i) & mask; - final[0] |= w0[0]; - final[1] |= w0[1]; - final[2] |= w0[2]; - final[3] |= w0[3]; - final[4] |= w1[0]; - final[5] |= w1[1]; - final[6] |= w1[2]; - final[7] |= w1[3]; + SETSHIFTEDINT (final, final_len + i, tmp); - u32 final_len = pw_len + lengthMagicArray; + final_len += lengthMagicArray; // append Salt - for (int i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 + for (i = 0; i < salt_len + 1; i += 4) // +1 for the 0x80 { const u32 tmp = salt_buf[i / 4]; // attention, int[] not char[] @@ -590,45 +506,11 @@ DECLSPEC void m07801s (SHM_TYPE u32a (*s_theMagicArray)[16], u32 *w0, u32 *w1, u KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -636,6 +518,8 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -670,50 +554,16 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) * main */ - m07801m (s_theMagicArray, 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, gid_max); + m07801m (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, gid_max); } KERNEL_FQ void m07801_m08 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -721,6 +571,8 @@ KERNEL_FQ void m07801_m08 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -755,7 +607,7 @@ KERNEL_FQ void m07801_m08 (KERN_ATTR_BASIC ()) * main */ - m07801m (s_theMagicArray, 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, gid_max); + m07801m (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, gid_max); } KERNEL_FQ void m07801_m16 (KERN_ATTR_BASIC ()) @@ -764,45 +616,11 @@ KERNEL_FQ void m07801_m16 (KERN_ATTR_BASIC ()) KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -810,6 +628,8 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -844,50 +664,16 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) * main */ - m07801s (s_theMagicArray, 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, gid_max); + m07801s (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, gid_max); } KERNEL_FQ void m07801_s08 (KERN_ATTR_BASIC ()) { - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - /** - * aes shared + * base */ - #ifdef REAL_SHM - - LOCAL_VK u32 s_theMagicArray[80][16]; - - for (u32 i = lid; i < 80; i += lsz) - { - s_theMagicArray[i][ 0] = theMagicArray[i][ 0]; - s_theMagicArray[i][ 1] = theMagicArray[i][ 1]; - s_theMagicArray[i][ 2] = theMagicArray[i][ 2]; - s_theMagicArray[i][ 3] = theMagicArray[i][ 3]; - s_theMagicArray[i][ 4] = theMagicArray[i][ 4]; - s_theMagicArray[i][ 5] = theMagicArray[i][ 5]; - s_theMagicArray[i][ 6] = theMagicArray[i][ 6]; - s_theMagicArray[i][ 7] = theMagicArray[i][ 7]; - s_theMagicArray[i][ 8] = theMagicArray[i][ 8]; - s_theMagicArray[i][ 9] = theMagicArray[i][ 9]; - s_theMagicArray[i][10] = theMagicArray[i][10]; - s_theMagicArray[i][11] = theMagicArray[i][11]; - s_theMagicArray[i][12] = theMagicArray[i][12]; - s_theMagicArray[i][13] = theMagicArray[i][13]; - s_theMagicArray[i][14] = theMagicArray[i][14]; - s_theMagicArray[i][15] = theMagicArray[i][15]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a (*s_theMagicArray)[16] = theMagicArray; - - #endif + const u64 gid = get_global_id (0); if (gid >= gid_max) return; @@ -895,6 +681,8 @@ KERNEL_FQ void m07801_s08 (KERN_ATTR_BASIC ()) * modifier */ + //const u64 lid = get_local_id (0); + u32 w0[4]; w0[0] = pws[gid].i[ 0]; @@ -929,7 +717,7 @@ KERNEL_FQ void m07801_s08 (KERN_ATTR_BASIC ()) * main */ - m07801s (s_theMagicArray, 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, gid_max); + m07801s (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, gid_max); } KERNEL_FQ void m07801_s16 (KERN_ATTR_BASIC ()) diff --git a/docs/changes.txt b/docs/changes.txt index 5c002432b..74457c42f 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -113,6 +113,7 @@ - File handling: Print a truncation warning when an oversized line is detected - My Wallet: Added additional plaintext pattern used in newer versions - Office cracking: Support hash format with second block data for 40-bit oldoffice files (eliminates false positives) +- OpenCL Runtime: Added a warning if OpenCL runtime NEO, Beignet, POCL or MESA is detected and skip associated devices (override with --force) - OpenCL Runtime: Disable OpenCL kernel cache on Apple for Intel CPU (throws CL_BUILD_PROGRAM_FAILURE for no reason) - OpenCL Runtime: Do not run shared- and constant-memory size checks if their memory type is of type global memory (typically CPU) - OpenCL Runtime: Improve ROCm detection and make sure to not confuse with recent AMDGPU drivers @@ -166,7 +167,7 @@ - OpenCL Options: Removed --opencl-platforms filter in order to force backend device numbers to stay constant - Parsers: switched from strtok() to strtok_r() for thread safety - Requirements: Add new requirement for NVIDIA GPU: CUDA Toolkit (9.0 or later) -- Requirements: Update runtime check for minimum NVIDIA driver version from 367.x to 418.56 or later +- Requirements: Update runtime check for minimum NVIDIA driver version from 367.x to 440.64 or later - Test Script: Switched from /bin/bash to generic /bin/sh and updated code accordingly * changes v5.0.0 -> v5.1.0 diff --git a/docs/readme.txt b/docs/readme.txt index 372197e3d..e550b3c81 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -10,12 +10,10 @@ hashcat v5.1.0 ============== -AMD GPUs on Linux require "RadeonOpenCompute (ROCm)" Software Platform (1.6.180 or later) -AMD GPUs on Windows require "AMD Radeon Software Crimson Edition" (15.12 or later) +AMD GPUs on Linux require "RadeonOpenCompute (ROCm)" Software Platform (3.1 or later) +AMD GPUs on Windows require "AMD Radeon Adrenalin 2020 Edition" (20.2.2 or later) Intel CPUs require "OpenCL Runtime for Intel Core and Intel Xeon Processors" (16.1.1 or later) -Intel GPUs on Linux require "OpenCL 2.0 GPU Driver Package for Linux" (2.0 or later) -Intel GPUs on Windows require "OpenCL Driver for Intel Iris and Intel HD Graphics" -NVIDIA GPUs require "NVIDIA Driver" (418.56 or later) and "CUDA Toolkit" (9.0 or later) +NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or later) ## ## Features @@ -342,9 +340,7 @@ NVIDIA GPUs require "NVIDIA Driver" (418.56 or later) and "CUDA Toolkit" (9.0 or - AMD - Apple - Intel -- Mesa (Gallium) - NVidia -- pocl ## ## Supported OpenCL device types @@ -353,6 +349,3 @@ NVIDIA GPUs require "NVIDIA Driver" (418.56 or later) and "CUDA Toolkit" (9.0 or - GPU - CPU - APU -- DSP -- FPGA -- Coprocessor diff --git a/src/backend.c b/src/backend.c index fdc8dba83..2843d6f71 100644 --- a/src/backend.c +++ b/src/backend.c @@ -4976,25 +4976,17 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx) #if defined (__linux__) event_log_warning (hashcat_ctx, "* AMD GPUs on Linux require this driver:"); - event_log_warning (hashcat_ctx, " \"RadeonOpenCompute (ROCm)\" Software Platform (1.6.180 or later)"); + event_log_warning (hashcat_ctx, " \"RadeonOpenCompute (ROCm)\" Software Platform (3.1 or later)"); #elif defined (_WIN) event_log_warning (hashcat_ctx, "* AMD GPUs on Windows require this driver:"); - event_log_warning (hashcat_ctx, " \"AMD Radeon Software Crimson Edition\" (15.12 or later)"); + event_log_warning (hashcat_ctx, " \"AMD Radeon Adrenalin 2020 Edition\" (20.2.2 or later)"); #endif event_log_warning (hashcat_ctx, "* Intel CPUs require this runtime:"); event_log_warning (hashcat_ctx, " \"OpenCL Runtime for Intel Core and Intel Xeon Processors\" (16.1.1 or later)"); - #if defined (__linux__) - event_log_warning (hashcat_ctx, "* Intel GPUs on Linux require this driver:"); - event_log_warning (hashcat_ctx, " \"OpenCL 2.0 GPU Driver Package for Linux\" (2.0 or later)"); - #elif defined (_WIN) - event_log_warning (hashcat_ctx, "* Intel GPUs on Windows require this driver:"); - event_log_warning (hashcat_ctx, " \"OpenCL Driver for Intel Iris and Intel HD Graphics\""); - #endif - event_log_warning (hashcat_ctx, "* NVIDIA GPUs require this runtime and/or driver (both):"); - event_log_warning (hashcat_ctx, " \"NVIDIA Driver\" (418.56 or later)"); + event_log_warning (hashcat_ctx, " \"NVIDIA Driver\" (440.64 or later)"); event_log_warning (hashcat_ctx, " \"CUDA Toolkit\" (9.0 or later)"); event_log_warning (hashcat_ctx, NULL); @@ -5258,25 +5250,17 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx) #if defined (__linux__) event_log_warning (hashcat_ctx, "* AMD GPUs on Linux require this driver:"); - event_log_warning (hashcat_ctx, " \"RadeonOpenCompute (ROCm)\" Software Platform (1.6.180 or later)"); + event_log_warning (hashcat_ctx, " \"RadeonOpenCompute (ROCm)\" Software Platform (3.1 or later)"); #elif defined (_WIN) event_log_warning (hashcat_ctx, "* AMD GPUs on Windows require this driver:"); - event_log_warning (hashcat_ctx, " \"AMD Radeon Software Crimson Edition\" (15.12 or later)"); + event_log_warning (hashcat_ctx, " \"AMD Radeon Adrenalin 2020 Edition\" (20.2.2 or later)"); #endif event_log_warning (hashcat_ctx, "* Intel CPUs require this runtime:"); event_log_warning (hashcat_ctx, " \"OpenCL Runtime for Intel Core and Intel Xeon Processors\" (16.1.1 or later)"); - #if defined (__linux__) - event_log_warning (hashcat_ctx, "* Intel GPUs on Linux require this driver:"); - event_log_warning (hashcat_ctx, " \"OpenCL 2.0 GPU Driver Package for Linux\" (2.0 or later)"); - #elif defined (_WIN) - event_log_warning (hashcat_ctx, "* Intel GPUs on Windows require this driver:"); - event_log_warning (hashcat_ctx, " \"OpenCL Driver for Intel Iris and Intel HD Graphics\""); - #endif - event_log_warning (hashcat_ctx, "* NVIDIA GPUs require this runtime and/or driver (both):"); - event_log_warning (hashcat_ctx, " \"NVIDIA Driver\" (418.56 or later)"); + event_log_warning (hashcat_ctx, " \"NVIDIA Driver\" (440.64 or later)"); event_log_warning (hashcat_ctx, " \"CUDA Toolkit\" (9.0 or later)"); event_log_warning (hashcat_ctx, NULL); @@ -6002,12 +5986,45 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) { if (user_options->quiet == false) event_log_warning (hashcat_ctx, "* Device #%u: Not a native Intel OpenCL runtime. Expect massive speed loss.", device_id + 1); if (user_options->quiet == false) event_log_warning (hashcat_ctx, " You can use --force to override, but do not report related errors."); + if (user_options->quiet == false) event_log_warning (hashcat_ctx, NULL); device_param->skipped = true; } } } + char *opencl_device_version_lower = hcstrdup (opencl_device_version); + + lowercase ((u8 *) opencl_device_version_lower, strlen (opencl_device_version_lower)); + + if ((strstr (opencl_device_version_lower, "neo ")) + || (strstr (opencl_device_version_lower, " neo")) + || (strstr (opencl_device_version_lower, "beignet ")) + || (strstr (opencl_device_version_lower, " beignet")) + || (strstr (opencl_device_version_lower, "pocl ")) + || (strstr (opencl_device_version_lower, " pocl")) + || (strstr (opencl_device_version_lower, "mesa ")) + || (strstr (opencl_device_version_lower, " mesa"))) + { + // NEO: https://github.com/hashcat/hashcat/issues/2342 + // BEIGNET: https://github.com/hashcat/hashcat/issues/2243 + // POCL: https://github.com/hashcat/hashcat/issues/2344 + // MESA: https://github.com/hashcat/hashcat/issues/2269 + + if (user_options->force == false) + { + event_log_error (hashcat_ctx, "* Device #%u: Unstable OpenCL driver detected!", device_id + 1); + + if (user_options->quiet == false) event_log_warning (hashcat_ctx, "This OpenCL driver has been marked as likely to fail kernel compilation or to produce false negatives."); + if (user_options->quiet == false) event_log_warning (hashcat_ctx, "You can use --force to override this, but do not report related errors."); + if (user_options->quiet == false) event_log_warning (hashcat_ctx, NULL); + + device_param->skipped = true; + } + } + + hcfree (opencl_device_version_lower); + // Since some times we get reports from users about not working hashcat, dropping error messages like: // CL_INVALID_COMMAND_QUEUE and CL_OUT_OF_RESOURCES // Turns out that this is caused by Intel OpenCL runtime handling their GPU devices @@ -6245,24 +6262,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (r == 2) { - if (version_maj >= 367) + if (version_maj >= 440) { - if (version_maj == 418) - { - // older 418.x versions are known to be broken. - // for instance, NVIDIA-Linux-x86_64-418.43.run - // run ./hashcat -b -m 2501 results in self-test fail - - if (version_min >= 56) - { - nv_warn = false; - } - } - else + if (version_min >= 64) { nv_warn = false; } } + else + { + // unknown version scheme, probably new driver version + + nv_warn = false; + } } else { diff --git a/src/modules/module_00022.c b/src/modules/module_00022.c index c4eb1bb97..0349f5382 100644 --- a/src/modules/module_00022.c +++ b/src/modules/module_00022.c @@ -242,7 +242,7 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE tmp_salt[salt_len] = 0; - const int line_len = snprintf (line_buf, line_size, "%s:%s", tmp_buf, tmp_salt); + const int line_len = snprintf (line_buf, line_size, "%s%c%s", tmp_buf, hashconfig->separator, tmp_salt); return line_len; } diff --git a/src/modules/module_00023.c b/src/modules/module_00023.c index d849eff66..5ab25270f 100644 --- a/src/modules/module_00023.c +++ b/src/modules/module_00023.c @@ -138,11 +138,12 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE tmp_salt[salt_len] = 0; - const int out_len = snprintf (line_buf, line_size, "%08x%08x%08x%08x:%s", + const int out_len = snprintf (line_buf, line_size, "%08x%08x%08x%08x%c%s", byte_swap_32 (tmp[0]), byte_swap_32 (tmp[1]), byte_swap_32 (tmp[2]), byte_swap_32 (tmp[3]), + hashconfig->separator, tmp_salt); return out_len; diff --git a/src/modules/module_02410.c b/src/modules/module_02410.c index 030148ff1..7d01ccef3 100644 --- a/src/modules/module_02410.c +++ b/src/modules/module_02410.c @@ -51,7 +51,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE token.token_cnt = 2; - token.sep[0] = ':'; + token.sep[0] = hashconfig->separator; token.len_min[0] = 16; token.len_max[0] = 16; token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH diff --git a/src/modules/module_03710.c b/src/modules/module_03710.c index 1fefff33a..97bf2c7f0 100644 --- a/src/modules/module_03710.c +++ b/src/modules/module_03710.c @@ -44,6 +44,17 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, 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; } +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + 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) { u32 *digest = (u32 *) digest_buf; @@ -208,6 +219,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_03711.c b/src/modules/module_03711.c index 6585cb236..61ab885f3 100644 --- a/src/modules/module_03711.c +++ b/src/modules/module_03711.c @@ -46,6 +46,17 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_MEDIAWIKI_B = "$B$"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + 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) { u32 *digest = (u32 *) digest_buf; @@ -211,6 +222,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_04010.c b/src/modules/module_04010.c index 875f0c4e8..a18eb63d7 100644 --- a/src/modules/module_04010.c +++ b/src/modules/module_04010.c @@ -49,10 +49,7 @@ bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE // 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)) { - if ((hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) == 1) - { - return true; - } + return true; } return false; diff --git a/src/modules/module_04110.c b/src/modules/module_04110.c index 7aa0bbc8f..ea3da8679 100644 --- a/src/modules/module_04110.c +++ b/src/modules/module_04110.c @@ -42,6 +42,17 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, 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; } +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) +{ + // 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) { u32 *digest = (u32 *) digest_buf; @@ -206,6 +217,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06500.c b/src/modules/module_06500.c index 63607b2ba..9fa2d3c8a 100644 --- a/src/modules/module_06500.c +++ b/src/modules/module_06500.c @@ -410,6 +410,17 @@ static void sha512aix_encode (const u8 digest[64], u8 buf[86]) buf[85] = int_to_itoa64 (l & 0x3f); //l >>= 6; } +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (sha512aix_tmp_t); @@ -599,6 +610,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_07100.c b/src/modules/module_07100.c index a4d868565..b1c07e431 100644 --- a/src/modules/module_07100.c +++ b/src/modules/module_07100.c @@ -61,6 +61,17 @@ typedef struct pbkdf2_sha512_tmp static const char *SIGNATURE_SHA512MACOS = "$ml$"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (pbkdf2_sha512_tmp_t); @@ -300,6 +311,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_07200.c b/src/modules/module_07200.c index 03cff75f2..be34e6027 100644 --- a/src/modules/module_07200.c +++ b/src/modules/module_07200.c @@ -60,6 +60,17 @@ typedef struct pbkdf2_sha512_tmp static const char *SIGNATURE_SHA512GRUB = "grub.pbkdf2.sha512."; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (pbkdf2_sha512_t); @@ -271,6 +282,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_07300.c b/src/modules/module_07300.c index 85d006bc5..720d41fca 100644 --- a/src/modules/module_07300.c +++ b/src/modules/module_07300.c @@ -147,7 +147,8 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE line_len += snprintf (line_buf + line_len, line_size - line_len, "%02x", ptr[i ^ 3]); // the ^ 3 index converts LE -> BE } - line_len += snprintf (line_buf + line_len, line_size - line_len, ":%08x%08x%08x%08x%08x", + line_len += snprintf (line_buf + line_len, line_size - line_len, "%c%08x%08x%08x%08x%08x", + hashconfig->separator, digest[0], digest[1], digest[2], diff --git a/src/modules/module_08200.c b/src/modules/module_08200.c index fffa11d5c..0e41bcd00 100644 --- a/src/modules/module_08200.c +++ b/src/modules/module_08200.c @@ -58,6 +58,17 @@ typedef struct pbkdf2_sha512_tmp } pbkdf2_sha512_tmp_t; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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; @@ -317,6 +328,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_11300.c b/src/modules/module_11300.c index 5d3a31c88..044383bf0 100644 --- a/src/modules/module_11300.c +++ b/src/modules/module_11300.c @@ -64,6 +64,17 @@ typedef struct bitcoin_wallet_tmp static const char *SIGNATURE_BITCOIN_WALLET = "$bitcoin$"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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; @@ -330,6 +341,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_11500.c b/src/modules/module_11500.c index 5f6380539..7129de04d 100644 --- a/src/modules/module_11500.c +++ b/src/modules/module_11500.c @@ -97,7 +97,7 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE tmp_salt[salt_len] = 0; - const int line_len = snprintf (line_buf, line_size, "%08x:%s", digest[0], tmp_salt); + const int line_len = snprintf (line_buf, line_size, "%08x%c%s", digest[0], hashconfig->separator, tmp_salt); return line_len; } diff --git a/src/modules/module_11750.c b/src/modules/module_11750.c index 8be5c4dbd..14fbcf114 100644 --- a/src/modules/module_11750.c +++ b/src/modules/module_11750.c @@ -41,6 +41,17 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, 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; } +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + 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) { u32 *digest = (u32 *) digest_buf; @@ -49,7 +60,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE token.token_cnt = 2; - token.sep[0] = ':'; + token.sep[0] = hashconfig->separator; token.len_min[0] = 64; token.len_max[0] = 64; token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH @@ -201,6 +212,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_11760.c b/src/modules/module_11760.c index 6af85b12e..46aeb2a04 100644 --- a/src/modules/module_11760.c +++ b/src/modules/module_11760.c @@ -41,6 +41,17 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, 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; } +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + 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) { u32 *digest = (u32 *) digest_buf; @@ -49,7 +60,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE token.token_cnt = 2; - token.sep[0] = ':'; + token.sep[0] = hashconfig->separator; token.len_min[0] = 64; token.len_max[0] = 64; token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH @@ -201,6 +212,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_11850.c b/src/modules/module_11850.c index 5832b0bce..a58c4dd11 100644 --- a/src/modules/module_11850.c +++ b/src/modules/module_11850.c @@ -41,6 +41,17 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, 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; } +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + 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) { u32 *digest = (u32 *) digest_buf; @@ -49,7 +60,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE token.token_cnt = 2; - token.sep[0] = ':'; + token.sep[0] = hashconfig->separator; token.len_min[0] = 128; token.len_max[0] = 128; token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH @@ -225,6 +236,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_11860.c b/src/modules/module_11860.c index e906b095d..d4b875907 100644 --- a/src/modules/module_11860.c +++ b/src/modules/module_11860.c @@ -41,6 +41,17 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, 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; } +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + 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) { u32 *digest = (u32 *) digest_buf; @@ -49,7 +60,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE token.token_cnt = 2; - token.sep[0] = ':'; + token.sep[0] = hashconfig->separator; token.len_min[0] = 128; token.len_max[0] = 128; token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH @@ -225,6 +236,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_12100.c b/src/modules/module_12100.c index 546191755..952411633 100644 --- a/src/modules/module_12100.c +++ b/src/modules/module_12100.c @@ -62,6 +62,17 @@ typedef struct pbkdf2_sha512_tmp static const char *SIGNATURE_PBKDF2_SHA512 = "sha512"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (pbkdf2_sha512_t); @@ -258,6 +269,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_12300.c b/src/modules/module_12300.c index e91d361f3..91951c02c 100644 --- a/src/modules/module_12300.c +++ b/src/modules/module_12300.c @@ -54,6 +54,17 @@ typedef struct oraclet_tmp static const int ROUNDS_ORACLET = 4096; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (oraclet_tmp_t); @@ -235,6 +246,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_13500.c b/src/modules/module_13500.c index 87482323f..a218ce960 100644 --- a/src/modules/module_13500.c +++ b/src/modules/module_13500.c @@ -185,12 +185,13 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE sprintf (pstoken_tmp + j, "%02x", ptr[i]); } - const int line_len = snprintf (line_buf, line_size, "%08x%08x%08x%08x%08x:%s", + const int line_len = snprintf (line_buf, line_size, "%08x%08x%08x%08x%08x%c%s", digest[0], digest[1], digest[2], digest[3], digest[4], + hashconfig->separator, pstoken_tmp); return line_len; diff --git a/src/modules/module_13800.c b/src/modules/module_13800.c index 824072b74..1d75ecb50 100644 --- a/src/modules/module_13800.c +++ b/src/modules/module_13800.c @@ -165,7 +165,7 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE sprintf (buf + j, "%08x", esalt->salt_buf[i]); } - const int line_len = snprintf (line_buf, line_size, "%08x%08x%08x%08x%08x%08x%08x%08x:%s", + const int line_len = snprintf (line_buf, line_size, "%08x%08x%08x%08x%08x%08x%08x%08x%c%s", digest[0], digest[1], digest[2], @@ -174,6 +174,7 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE digest[5], digest[6], digest[7], + hashconfig->separator, buf); return line_len; diff --git a/src/modules/module_14900.c b/src/modules/module_14900.c index 063e1204b..cb7c790d7 100644 --- a/src/modules/module_14900.c +++ b/src/modules/module_14900.c @@ -109,7 +109,7 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE { const u32 *digest = (const u32 *) digest_buf; - const int line_len = snprintf (line_buf, line_size, "%08x:%08x", byte_swap_32 (digest[0]), byte_swap_32 (salt->salt_buf[0])); + const int line_len = snprintf (line_buf, line_size, "%08x%c%08x", byte_swap_32 (digest[0]), hashconfig->separator, byte_swap_32 (salt->salt_buf[0])); return line_len; } diff --git a/src/modules/module_15300.c b/src/modules/module_15300.c index 3fd578bed..9f833e84b 100644 --- a/src/modules/module_15300.c +++ b/src/modules/module_15300.c @@ -75,6 +75,17 @@ typedef struct dpapimk_tmp_v1 static const char *SIGNATURE_DPAPIMK = "$DPAPImk$"; +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) +{ + // 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; +} + 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 (dpapimk_tmp_v1_t); @@ -439,6 +450,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_18100.c b/src/modules/module_18100.c index 3feb49fde..f77ef6d22 100644 --- a/src/modules/module_18100.c +++ b/src/modules/module_18100.c @@ -128,7 +128,7 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE const u64 tmp_salt_buf = (((u64) (salt->salt_buf[2])) << 32) | ((u64) (salt->salt_buf[3])); - const int line_len = snprintf (line_buf, line_size, "%06d:%" PRIu64, digest[0], tmp_salt_buf); + const int line_len = snprintf (line_buf, line_size, "%06d%c%" PRIu64, digest[0], hashconfig->separator, tmp_salt_buf); return line_len; } diff --git a/src/modules/module_20011.c b/src/modules/module_20011.c index a5fb23b1a..dc2dc0c4d 100644 --- a/src/modules/module_20011.c +++ b/src/modules/module_20011.c @@ -63,6 +63,17 @@ static const int DISKCRYPTOR_VERSION = 0; static const int ROUNDS_DISKCRYPTOR = 1000; static const char *SIGNATURE_DISKCRYPTOR = "$diskcryptor$"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (pbkdf2_sha512_tmp_t); @@ -251,6 +262,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_20012.c b/src/modules/module_20012.c index 105ae4e25..909faa60a 100644 --- a/src/modules/module_20012.c +++ b/src/modules/module_20012.c @@ -63,6 +63,17 @@ static const int DISKCRYPTOR_VERSION = 0; static const int ROUNDS_DISKCRYPTOR = 1000; static const char *SIGNATURE_DISKCRYPTOR = "$diskcryptor$"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (pbkdf2_sha512_tmp_t); @@ -251,6 +262,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_20013.c b/src/modules/module_20013.c index 2b1feae5e..67e7186ce 100644 --- a/src/modules/module_20013.c +++ b/src/modules/module_20013.c @@ -63,6 +63,17 @@ static const int DISKCRYPTOR_VERSION = 0; static const int ROUNDS_DISKCRYPTOR = 1000; static const char *SIGNATURE_DISKCRYPTOR = "$diskcryptor$"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (pbkdf2_sha512_tmp_t); @@ -251,6 +262,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_20200.c b/src/modules/module_20200.c index 514dd7511..399c96d9f 100644 --- a/src/modules/module_20200.c +++ b/src/modules/module_20200.c @@ -63,6 +63,17 @@ typedef struct pbkdf2_sha512_tmp static const char *SIGNATURE_PASSLIB_PBKDF2_SHA512 = "pbkdf2-sha512"; +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) +{ + // amdgpu-pro-19.30-934563-ubuntu-18.04: password not found + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) + { + return true; + } + + return false; +} + 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 (pbkdf2_sha512_t); @@ -289,6 +300,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_21500.c b/src/modules/module_21500.c index c2298bcbc..0be944faf 100644 --- a/src/modules/module_21500.c +++ b/src/modules/module_21500.c @@ -62,6 +62,17 @@ static const u32 ROUNDS_SOLARWINDS_ORION = 1000; static const char *SIGNATURE_SOLARWINDS_ORION = "$solarwinds$0$"; +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) +{ + // 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; +} + 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 (solarwinds_t); @@ -277,6 +288,6 @@ void module_init (module_ctx_t *module_ctx) 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_unstable_warning = module_unstable_warning; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_21700.c b/src/modules/module_21700.c index 92ee6a3b0..484b98b83 100644 --- a/src/modules/module_21700.c +++ b/src/modules/module_21700.c @@ -97,6 +97,12 @@ bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE } } + // self-test failed + if (device_param->opencl_platform_vendor_id == VENDOR_ID_AMD) + { + return true; + } + return false; }