openwall / john

John the Ripper jumbo - advanced offline password cracker, which supports hundreds of hash and cipher types, and runs on many operating systems, CPUs, GPUs, and even some FPGAs
https://www.openwall.com/john/
Other
9.98k stars 2.06k forks source link

OpenCL kernel headers not found (macOS) #4757

Open cintainfinita opened 3 years ago

cintainfinita commented 3 years ago

MacOS BigSur, AMD Radeon Pro 5700 XT 16 GB

% ./john --list=build-info Version: 1.9.0-jumbo-1+bleeding-b49c763c4 2021-06-24 21:32:53 +0200 Build: darwin20.5.0 64-bit x86_64 AVX2 AC SIMD: AVX2, interleaving: MD4:4 MD5:5 SHA1:2 SHA256:1 SHA512:1 CPU tests: AVX2 $JOHN is ./ Format interface version: 14 Max. number of reported tunable costs: 4 Rec file version: REC4 Charset file version: CHR3 CHARSET_MIN: 1 (0x01) CHARSET_MAX: 255 (0xff) CHARSET_LENGTH: 24 SALT_HASH_SIZE: 1048576 SINGLE_IDX_MAX: 2147483648 SINGLE_BUF_MAX: 4294967295 Effective limit: Number of salts vs. SingleMaxBufferSize Max. Markov mode level: 400 Max. Markov mode password length: 30 clang version: 12.0.5 (clang-1205.0.22.11) (gcc 4.2.1 compatibility) OpenCL headers version: 1.2 Crypto library: OpenSSL OpenSSL library version: 0101010bf OpenSSL 1.1.1k 25 Mar 2021 File locking: fcntl() fseek(): fseek ftell(): ftell fopen(): fopen memmem(): System's times(2) sysconf(_SC_CLK_TCK) is 100 Using times(2) for timers, resolution 10 ms HR timer: mach_absolute_time(), latency 33 ns Total physical host memory: 72 GiB Available physical host memory: 56299 MiB Terminal locale string: UTF-8 Parsed terminal locale: UTF-8

Path error:

% ./john --test --format=opencl
Device 2: AMD Radeon Pro 5700 XT Compute Engine Benchmarking: sha1crypt-opencl, (NetBSD) [PBKDF1-SHA1 OpenCL]... Options used: -I opencl -cl-mad-enable -DOS_X -DGPU__ -DDEVICE_INFO=522 -DSIZEOF_HOST_SIZE_T__=8 -DDEV_VER_MAJOR=1 -DDEV_VER_MINOR=2 -D_OPENCL_COMPILER -DHASH_LOOPS=1024 -DOUTLEN=20 -DPLAINTEXT_LENGTH=64 -DV_WIDTH=1 ./opencl/pbkdf1_hmac_sha1_kernel.cl Build log: :47:10: fatal error: 'opencl_device_info.h' file not found

include "opencl_device_info.h"

     ^

Error building kernel ./opencl/pbkdf1_hmac_sha1_kernel.cl. DEVICE_INFO=522 0: OpenCL CL_BUILD_PROGRAM_FAILURE (-11) error in opencl_common.c:1292 - clBuildProgram

I tried running john from a different path, no luck.

I specified the full path to the include instruction but still the file wasn't found.

claudioandre-br commented 3 years ago

We can also move all the source kernels back to ./src. Then, we create a process that whenever a kernel is changed in ./src it must be pre-processed and the result moved to ./run.

Something like what is already do with autotools, config.ac and configure. After that, all OpenCL code in ./run will not have any 'pending' #include.

Is my proposal clear?

magnumripper commented 3 years ago

We can also move all the source kernels back to ./src. Then, we create a process that whenever a kernel is changed in ./src it must be pre-processed and the result moved to ./run.

Something like what is already do with autotools, config.ac and configure. After that, all OpenCL code in ./run will not have any 'pending' #include.

Is my proposal clear?

You mean we'd always run it? I think we shouldn't. This is a work-around for one user out of 1,000 or less.

claudioandre-br commented 3 years ago

You mean we'd always run it?

In the ./run folder, yes.

My point is, all users need a kernel (period). They don't care about includes, or formatted source code, or defines instead of raw values. Since we keep the original source code in ./src (and do the right thing), we can deploy a pre-processed file. Why we should'nt? Why the end user or his/hers compiler should care?

solardiz commented 3 years ago

@cintainfinita Regarding the weirdness of hashcat working (only) once installed, in those cases do you run it by typing simply hashcat (relying on it being in PATH) or on the contrary by typing more of a path to it (something longer than a ./)? Can you show examples?

I wonder if we can trigger the desired behavior by carefully messing with argv[0] from within john. Answers to the above might help us with that.

cintainfinita commented 3 years ago

Hi @solardiz !

By simply typing hashcat (after installing it) worked.

moebius@kandinsky hashcat % hashcat -D 1 -b           
hashcat (v6.2.2-70-g5bea13200) starting in benchmark mode

Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.

OpenCL API (OpenCL 1.2 (May  8 2021 03:14:28)) - Platform #1 [Apple]
====================================================================
* Device #1: Intel(R) Core(TM) i9-10910 CPU @ 3.60GHz, 73664/73728 MB (18432 MB allocatable), 20MCU
* Device #2: AMD Radeon Pro 5700 XT Compute Engine, skipped

Benchmark relevant options:
===========================
* --opencl-device-types=1
* --optimized-kernel-enable

Hashmode: 0 - MD5

Speed.#1.........:   921.2 MH/s (22.51ms) @ Accel:1024 Loops:1024 Thr:1 Vec:4

Hashmode: 100 - SHA1

If I use "./" it fails.

moebius@kandinsky hashcat % ./hashcat -D 1 -b 
hashcat (v6.2.2-70-g5bea13200) starting in benchmark mode

Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.

OpenCL API (OpenCL 1.2 (May  8 2021 03:14:28)) - Platform #1 [Apple]
====================================================================
* Device #1: Intel(R) Core(TM) i9-10910 CPU @ 3.60GHz, 73664/73728 MB (18432 MB allocatable), 20MCU
* Device #2: AMD Radeon Pro 5700 XT Compute Engine, skipped

Benchmark relevant options:
===========================
* --opencl-device-types=1
* --optimized-kernel-enable

Hashmode: 0 - MD5

clCompileProgram(): CL_BUILD_PROGRAM_FAILURE

<program source>:7:10: fatal error: 'inc_vendor.h' file not found
#include "inc_vendor.h"
         ^

* Device #1: Kernel /Users/moebius/Documents/Tools/hashcat/OpenCL/shared.cl build failed.

Started: Mon Jul  5 16:42:33 2021
Stopped: Mon Jul  5 16:42:33 2021
solardiz commented 3 years ago

@cintainfinita So I guess the OpenCL compiler somehow parses the program path name, perhaps taking it out of some BSD/macOS specific global variable initialized at program startup. I wonder if adding e.g. setprogname("john"); to the beginning of our opencl_build() would possibly help reset whatever variable they use?

@magnumripper @claudioandre-br Reading AMD ROCm documentation (is this ROCm behind the scenes here?) and OpenCL specs, there appears to be a new way to build OpenCL programs starting with OpenCL 1.2, but this new way is apparently only required when compiling and linking the program separately (not as one step, like we do). With the new way, a program object would need to be prepared for each header separately with clCreateProgramWithSource. There are examples here:

https://rocmdocs.amd.com/en/latest/Programming_Guides/Opencl-programming-guide.html#compiling-device-programs https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/clCompileProgram.html

However, our way of doing things and -I are also supposed to work. Also from AMD ROCm documentation above:

-I dir — Add the directory dir to the list of directories to be searched for header files. When parsing #include directives, the OpenCL compiler resolves relative paths using the current working directory of the application.

magnumripper commented 3 years ago

I really wonder why I can't reproduce the problem (not with hashcat either). I always use relative paths.

cintainfinita commented 3 years ago

I've been using john on a mac since 2008. My first time with this issue was with this fresh new iMac. Maybe, a fresh OS (Big Sur?) installation did this? IDK!. Let me know if I can help.

solardiz commented 3 years ago

Let me know if I can help.

Can you please try adding setprogname("john"); to the beginning of our opencl_build()?

cintainfinita commented 3 years ago

So I edited this on a fresh copy of John (without the "hack" or workaround):

file: opencl_common.c
void opencl_build(int sequential_id, const char *opts, int save, const char *fi$
{
        cl_int build_code, err_code;
        char *build_log, *build_opts;
        size_t log_size;
        const char *srcptr[] = { kernel_source };
        setprogname("john");

./configure. I recompiled.

moebius@kandinsky src % ../run/john --test --format=opencl
Device 2: AMD Radeon Pro 5700 XT Compute Engine
Benchmarking: sha1crypt-opencl, (NetBSD) [PBKDF1-SHA1 OpenCL]... Options used: -I opencl -cl-mad-enable -D__OS_X__ -D__GPU__ -DDEVICE_INFO=522 -D__SIZEOF_HOST_SIZE_T__=8 -DDEV_VER_MAJOR=1 -DDEV_VER_MINOR=2 -D_OPENCL_COMPILER -DHASH_LOOPS=1024 -DOUTLEN=20 -DPLAINTEXT_LENGTH=64 -DV_WIDTH=1 ../run/opencl/pbkdf1_hmac_sha1_kernel.cl
Build log: <program source>:47:10: fatal error: 'opencl_device_info.h' file not found
#include "opencl_device_info.h"
         ^

Error building kernel ../run/opencl/pbkdf1_hmac_sha1_kernel.cl. DEVICE_INFO=522
0: OpenCL CL_BUILD_PROGRAM_FAILURE (-11) error in opencl_common.c:1293 - clBuildProgram

moebius@kandinsky src % cd ../run 
moebius@kandinsky run % ./john --test --format=opencl 
Device 2: AMD Radeon Pro 5700 XT Compute Engine
Benchmarking: sha1crypt-opencl, (NetBSD) [PBKDF1-SHA1 OpenCL]... Options used: -I opencl -cl-mad-enable -D__OS_X__ -D__GPU__ -DDEVICE_INFO=522 -D__SIZEOF_HOST_SIZE_T__=8 -DDEV_VER_MAJOR=1 -DDEV_VER_MINOR=2 -D_OPENCL_COMPILER -DHASH_LOOPS=1024 -DOUTLEN=20 -DPLAINTEXT_LENGTH=64 -DV_WIDTH=1 ./opencl/pbkdf1_hmac_sha1_kernel.cl
Build log: <program source>:47:10: fatal error: 'opencl_device_info.h' file not found
#include "opencl_device_info.h"
         ^

Error building kernel ./opencl/pbkdf1_hmac_sha1_kernel.cl. DEVICE_INFO=522
0: OpenCL CL_BUILD_PROGRAM_FAILURE (-11) error in opencl_common.c:1293 - clBuildProgram
magnumripper commented 3 years ago

OK so I guess the one thing left to try is to git revert 753dd9f for sending an absolute path with -I, and also add the setprogname("john"); thing you just tried.

BTW you don't need to re-run configure after changing any .c file, just make. After only changing kernel OpenCL code you currently need neither (but in general you possibly need a kernel cache clean, eg. make kernel-cache-clean).

solardiz commented 3 years ago

I'd rather find what global variable(s) macOS stores the full program pathname in, and try changing their values. setprogname() is intended for changing the program name only, which is originally the basename of the full path, so it's not surprising it does not(?) change the variable(s) holding the full path (although I was hoping it might do that as a side-effect).

Maybe we can also review ROCm source code (isn't it available?) and see where it obtains the path from.

cintainfinita commented 3 years ago

hi @magnumripper and @solardiz!

Did what Magnum suggested. Git revert, did the "setprogname" change, recompile, No luck, same results.

magnumripper commented 3 years ago

I tried this

       fprintf(stderr, "Before: %s\n", getprogname());
       setprogname("john");
       fprintf(stderr, "After: %s\n", getprogname());

It's "john" with no path at all even at the "Before" (I ran it as ../run/john).

Maybe we can also review ROCm source code (isn't it available?) and see where it obtains the path from.

Maybe we should, but I'm not sure it resembles much of the macOS driver/runtime. They were always very different - for example they never supported any AMD extensions such as cl_amd_media_ops or Sayantan's use of __attribute__((max_constant_size())).

BTW @cintainfinita please post the output of ./john --list=opencl-devices

cintainfinita commented 3 years ago

@magnumripper, for sure:

moebius@kandinsky run % ./john --list=opencl-devices
Platform #0 name: Apple, version: OpenCL 1.2 (May  8 2021 03:14:28)
    Device #0 (1) name:     Intel(R) Core(TM) i9-10910 CPU @ 3.60GHz
    Device vendor:          Intel
    Device type:            CPU (LE)
    Device version:         OpenCL 1.2 
    Driver version:         1.1 
    Native vector widths:   char 16, short 8, int 4, long 2
    Preferred vector width: char 16, short 8, int 4, long 2
    Global Memory:          72 GiB
    Global Memory Cache:    64 B
    Local Memory:           32 KiB (Global)
    Constant Buffer size:   64 KiB
    Max memory alloc. size: 18 GiB
    Max clock (MHz):        3600
    Profiling timer res.:   1 ns
    Max Work Group Size:    1024
    Parallel compute cores: 20
    Speed index:            144000

    Device #1 (2) name:     AMD Radeon Pro 5700 XT Compute Engine
    Device vendor:          AMD
    Device type:            GPU (LE)
    Device version:         OpenCL 1.2 
    Driver version:         1.2 (May  8 2021 06:19:27) 
    Native vector widths:   char 4, short 2, int 1, long 1
    Preferred vector width: char 4, short 2, int 1, long 1
    Global Memory:          16368 MiB
    Local Memory:           64 KiB (Local)
    Constant Buffer size:   64 KiB
    Max memory alloc. size: 4092 MiB
    Max clock (MHz):        1499
    Profiling timer res.:   10 ns
    Max Work Group Size:    256
    Parallel compute cores: 40
    Stream processors:      2560  (40 x 64)
    Speed index:            3837440
solardiz commented 3 years ago

It's "john" with no path at all even at the "Before"

Of course. LIke I said, I was merely hoping setprogname() could as a side-effect also update the full path, in case it reuses the same code that's run at program startup. That would have been weird, though. So we need to find a separate way to update the variable(s) holding the full path.

magnumripper commented 3 years ago

I'm cloning https://github.com/RadeonOpenCompute/ROCm now and will grep it for clues

magnumripper commented 3 years ago

LOL, that wasn't a good source for code. Only PDF's and shite

xjeanlucpicardx commented 3 years ago

installed john on os x 10.15.7 using git clone https://github.com/openwall/john.git and then in john/src ./configure && make -sj4

running ./john -test=0 -format=dmg-opencl in john/run resulted in

Device 3: GeForce GT 650M
Testing: dmg-opencl, Apple DMG [PBKDF2-SHA1 3DES/AES OpenCL]... Options used: -I opencl -cl-mad-enable -D__OS_X__ -D__GPU__ -DDEVICE_INFO=18 -D__SIZEOF_HOST_SIZE_T__=8 -DDEV_VER_MAJOR=14 -DDEV_VER_MINOR=0 -D_OPENCL_COMPILER -DHASH_LOOPS=500 -DOUTLEN=32 -DV_WIDTH=1 ./opencl/dmg_kernel.cl
Build log: <program source>:14:10: fatal error: 'pbkdf2_hmac_sha1_kernel.cl' file not found
#include "pbkdf2_hmac_sha1_kernel.cl"
         ^

Error building kernel ./opencl/dmg_kernel.cl. DEVICE_INFO=18
0: OpenCL CL_BUILD_PROGRAM_FAILURE (-11) error in opencl_common.c:1292 - clBuildProgram

read the above thread and:

  1. created bugpp.pl in run/opencl
#!/usr/bin/perl -w
use strict;
sub process_file {
    my $file = shift @_;
    open my $fh, "<", $file or die "$file: $!";
    binmode $fh, ":raw";
    while (<$fh>) {
        if (/^\s*#\s*include\s+"([^"]+)"/) {
            process_file($1);
        } else {
            print;
        }
    }
    close($fh);
}
process_file($ARGV[0]);
  1. ran for i in *.cl; do perl bugpp.pl $i >x && mv x $i ; done

running ./john -test=0 -format=dmg-opencl now results in

Device 3: GeForce GT 650M
Testing: dmg-opencl, Apple DMG [PBKDF2-SHA1 3DES/AES OpenCL]... Build log: <program source>:385:15: warning: unused function 'SWAP16'
inline ushort SWAP16(ushort x)
              ^
<program source>:612:13: warning: unused function 'memcpy_pg'
inline void memcpy_pg(__global void* restrict dst, const void* restrict src, uint count)
            ^
<program source>:632:13: warning: unused function 'memcpy_cp'
inline void memcpy_cp(void* restrict dst, __constant void* restrict src, uint count)
            ^
<program source>:642:13: warning: unused function 'memcpy_mcp'
inline void memcpy_mcp(void* restrict dst, MAYBE_CONSTANT void* restrict src, uint count)
            ^
<program source>:661:13: warning: unused function 'memset_g'
inline void memset_g(__global void *p, uint val, uint count)
            ^
<program source>:670:12: warning: unused function 'memcmp_pp'
inline int memcmp_pp(const void *s1, const void *s2, uint size)
           ^
<program source>:683:12: warning: unused function 'memcmp_pg'
inline int memcmp_pg(const void *s1, __global const void *s2, uint size)
           ^
<program source>:709:12: warning: unused function 'memcmp_gc'
inline int memcmp_gc(__global const void *s1, __constant void *s2, uint size)
           ^
<program source>:722:12: warning: unused function 'memcmp_pmc'
inline int memcmp_pmc(const void *s1, MAYBE_CONSTANT void *s2, uint size)
           ^
<program source>:735:12: warning: unused function 'memmem_pc'
inline int memmem_pc(const void *haystack, size_t haystack_len,
           ^
<program source>:5412:1: warning: unused function 'AES_ecb_encrypt'
AES_ecb_encrypt(AES_SRC_TYPE void *_in, AES_DST_TYPE void *_out, uint len,
^
<program source>:5445:1: warning: unused function 'AES_ecb_decrypt'
AES_ecb_decrypt(AES_SRC_TYPE void *_in, AES_DST_TYPE void *_out, uint len,
^
<program source>:5477:1: warning: unused function 'AES_cbc_encrypt'
AES_cbc_encrypt(AES_SRC_TYPE void *_in, AES_DST_TYPE void *_out,
^
<program source>:5536:1: warning: unused function 'AES_cts_encrypt'
AES_cts_encrypt(AES_CTS_SRC_TYPE void *_in, AES_CTS_DST_TYPE void *_out,
^
<program source>:5568:1: warning: unused function 'AES_cts_decrypt'
AES_cts_decrypt(AES_CTS_SRC_TYPE void *_in, AES_CTS_DST_TYPE void *_out,
^
<program source>:5605:13: warning: unused function 'AES_cfb_decrypt'
inline void AES_cfb_decrypt(AES_SRC_TYPE void *_in,
            ^
<program source>:5628:13: warning: unused function 'AES_256_XTS_first_sector'
inline void AES_256_XTS_first_sector(AES_SRC_TYPE uint *in,
            ^
<program source>:5651:13: warning: unused function 'AES_256_XTS_DiskCryptor'
inline void AES_256_XTS_DiskCryptor(AES_SRC_TYPE uchar *data, AES_DST_TYPE uchar *output,
            ^
<program source>:5698:1: warning: unused function 'AES_ige_decrypt'
AES_ige_decrypt(AES_SRC_TYPE void *_in, AES_DST_TYPE void *_out,
^
<program source>:9148:13: warning: unused function 'des_setkey_enc'
inline void des_setkey_enc(des_context *ctx, const uchar key[DES_KEY_SIZE])
            ^
<program source>:9156:13: warning: unused function 'des_setkey_dec'
inline void des_setkey_dec(des_context *ctx, const uchar key[DES_KEY_SIZE])
            ^
<program source>:9194:13: warning: unused function 'des3_set2key_enc'
inline void des3_set2key_enc(des3_context *ctx,
            ^
<program source>:9205:13: warning: unused function 'des3_set2key_dec'
inline void des3_set2key_dec(des3_context *ctx,
            ^
<program source>:9238:13: warning: unused function 'des3_set3key_enc'
inline void des3_set3key_enc(des3_context *ctx,
            ^
<program source>:9287:13: warning: unused function 'des_crypt_cbc'
inline void des_crypt_cbc(des_context *ctx, int mode, size_t length,
            ^

FAILED (cmp_all(1))
Abort trap: 6

any help is greatly appreciated thank you

claudioandre-br commented 3 years ago

FAILED (cmp_all(1)) Abort trap: 6

This is probably a bug in the Mac OpenCL driver (even a bug in the dmg-opencl format itself). The "not found" issue is gone.

Google says Abort trap: 6 is probably related to memory issues (which reinforces the bug in the driver). Can you test other formats to check if the workaround 2. worked fine? Then, if you think the format has a problem, could you please try to get more information about the failure using GDB or LLDB.

xjeanlucpicardx commented 3 years ago

here's the results of gdb john, then at the gdb prompt run -test=0 -format=dmg-opencl

Starting program: /Users/[User]/Desktop/git/john/run/john -test=0 -format=dmg-opencl
[New Thread 0x2603 of process 1102]
[New Thread 0x2403 of process 1102]
warning: unhandled dyld version (16)
Device 3: GeForce GT 650M
Testing: dmg-opencl, Apple DMG [PBKDF2-SHA1 3DES/AES OpenCL]... FAILED (cmp_all(1))
[New Thread 0x2103 of process 1102]
[New Thread 0x2507 of process 1102]

Thread 2 received signal SIGABRT, Aborted.
0x00007fff699d133a in ?? ()

in regards to testing other formats ./john -test=0 results in:

Testing: descrypt, traditional crypt(3) [DES 128/128 AVX]... PASS
Testing: bsdicrypt, BSDI crypt(3) ("_J9..", 725 iterations) [DES 128/128 AVX]... PASS
Testing: md5crypt, crypt(3) $1$ (and variants) [MD5 128/128 AVX 4x5]... PASS
Testing: md5crypt-long, crypt(3) $1$ (and variants) [MD5 32/64]... PASS
Testing: bcrypt ("$2a$05", 32 iterations) [Blowfish 32/64 X3]... PASS
Testing: scrypt (16384, 8, 1) [Salsa20/8 128/128 AVX]... PASS
Testing: LM [DES 128/128 AVX]... PASS
Testing: AFS, Kerberos AFS [DES 48/64 4K]... PASS
Testing: tripcode [DES 128/128 AVX]... PASS
Testing: AndroidBackup [PBKDF2-SHA1 128/128 AVX 4x2 AES]... PASS
Testing: adxcrypt, IBM/Toshiba 4690 [ADXCRYPT 32/64]... PASS
Testing: agilekeychain, 1Password Agile Keychain [PBKDF2-SHA1 AES 128/128 AVX 4x2]... PASS
Testing: aix-ssha1, AIX LPA {ssha1} [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: aix-ssha256, AIX LPA {ssha256} [PBKDF2-SHA256 128/128 AVX 4x]... PASS
Testing: aix-ssha512, AIX LPA {ssha512} [PBKDF2-SHA512 128/128 AVX 2x]... PASS
Testing: andOTP [SHA256 32/64]... PASS
Testing: ansible, Ansible Vault [PBKDF2-SHA256 HMAC-256 128/128 AVX 4x]... PASS
Testing: argon2 [Blake2 AVX]... PASS
Testing: as400-des, AS/400 DES [DES 32/64]... PASS
Testing: as400-ssha1, AS400-SaltedSHA1 [sha1(utf16be(space_pad_10(uc($s)).$p)) (IBM AS/400 SHA1) 128/128 AVX 4x2]... PASS
Testing: asa-md5, Cisco ASA [md5($p.$s) (Cisco ASA) 128/128 AVX 4x5]... PASS
Testing: AxCrypt [PBKDF2-SHA512/SHA1 AES 32/64]... PASS
Testing: AzureAD [PBKDF2-SHA256 128/128 AVX 4x]... PASS
Testing: BestCrypt, Jetico BestCrypt (.jbc) (SHA-256 + AES XTS mode) [PKCS#12 PBE (SHA1/SHA2) 32/64]... PASS
Testing: BestCryptVE4, BestCrypt Volume Encryption v4 (32768, 16, 1) [scrypt Salsa20/8 128/128 AVX, AES/TwoFish/Serpent/Camellia]... PASS
Testing: bfegg, Eggdrop [Blowfish 32/64]... PASS
Testing: Bitcoin, Bitcoin Core [SHA512 AES 128/128 AVX 2x]... PASS
Testing: BitLocker, BitLocker [SHA-256 AES 32/64]... PASS
Testing: bitshares, BitShares Wallet [SHA-512 64/64]... PASS
Testing: Bitwarden, Bitwarden Password Manager [PBKDF2-SHA256 AES 128/128 AVX 4x]... PASS
Testing: BKS, BouncyCastle [PKCS#12 PBE (SHA1) 128/128 AVX 4x2]... PASS
Testing: Blackberry-ES10 (101x) [SHA-512 128/128 AVX 2x]... PASS
Testing: WoWSRP, Battlenet [SHA1 32/64 GMP-exp]... PASS
Testing: Blockchain, My Wallet (v2 x5000) [PBKDF2-SHA1 AES 128/128 AVX 4x2]... PASS
Testing: chap, iSCSI CHAP authentication / EAP-MD5 [MD5 32/64]... PASS
Testing: Clipperz, SRP [SHA256 32/64 GMP-exp]... PASS
Testing: cloudkeychain, 1Password Cloud Keychain [PBKDF2-SHA512 128/128 AVX 2x]... PASS
Testing: dynamic=md5($p) [128/128 AVX 4x5]... PASS
Testing: cq, ClearQuest [CQWeb]... PASS
Testing: CRC32 [CRC32 32/64 CRC-32C AVX]... PASS
Testing: sha1crypt, NetBSD's sha1crypt [PBKDF1-SHA1 128/128 AVX 4x2]... PASS
Testing: sha256crypt, crypt(3) $5$ (rounds=5000) [SHA256 128/128 AVX 4x]... PASS
Testing: sha512crypt, crypt(3) $6$ (rounds=5000) [SHA512 128/128 AVX 2x]... PASS
Testing: Citrix_NS10, Netscaler 10 [SHA1 128/128 AVX 4x2]... PASS
Testing: dahua, "MD5 based authentication" Dahua [MD5 32/64]... PASS
Testing: dashlane, Dashlane Password Manager [AES PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: diskcryptor, DiskCryptor [PBKDF2-SHA512 128/128 AVX 2x]... PASS
Testing: Django (x10000) [PBKDF2-SHA256 128/128 AVX 4x]... PASS
Testing: django-scrypt [Salsa20/8 128/128 AVX]... PASS
Testing: dmd5, DIGEST-MD5 C/R [MD5 32/64]... PASS
Testing: dmg, Apple DMG [PBKDF2-SHA1 128/128 AVX 4x2 3DES/AES]... PASS
Testing: dominosec, Lotus Notes/Domino 6 More Secure Internet Password [8/64]... PASS
Testing: dominosec8, Lotus Notes/Domino 8 [8/64]... PASS
Testing: DPAPImk, DPAPI masterkey file v1 and v2 [SHA1/MD4 PBKDF2-(SHA1/SHA512)-DPAPI-variant 3DES/AES256 128/128 AVX 4x2]... PASS
Testing: dragonfly3-32, DragonFly BSD $3$ w/ bug, 32-bit [SHA256 32/64]... PASS
Testing: dragonfly3-64, DragonFly BSD $3$ w/ bug, 64-bit [SHA256 32/64]... PASS
Testing: dragonfly4-32, DragonFly BSD $4$ w/ bugs, 32-bit [SHA512 64/64]... PASS
Testing: dragonfly4-64, DragonFly BSD $4$ w/ bugs, 64-bit [SHA512 64/64]... PASS
Testing: Drupal7, $S$ (x16385) [SHA512 128/128 AVX 2x]... PASS
Testing: eCryptfs (65536 iterations) [SHA512 128/128 AVX 2x]... PASS
Testing: eigrp, EIGRP MD5 / HMAC-SHA-256 authentication [MD5/SHA-256 32/64]... PASS
Testing: electrum, Electrum Wallet [SHA256 AES / PBKDF2-SHA512 128/128 AVX 4x2]... PASS
Testing: EncFS [PBKDF2-SHA1 128/128 AVX 4x2 AES]... PASS
Testing: enpass, Enpass Password Manager [PBKDF2-SHA1/SHA512 128/128 AVX 2x]... PASS
Testing: EPI, EPiServer SID [SHA1 32/64]... PASS
Testing: EPiServer [SHA1/SHA256 128/128 AVX 4x]... PASS
Testing: ethereum, Ethereum Wallet [PBKDF2-SHA256/scrypt Keccak 128/128 AVX 4x]... PASS
Testing: fde, Android FDE [PBKDF2-SHA1 128/128 AVX 4x2 SHA256/AES]... PASS
Testing: Fortigate256, FortiOS256 [SHA256 32/64]... PASS
Testing: Fortigate, FortiOS [SHA1 32/64]... PASS
Testing: FormSpring [sha256($s.$p) 128/128 AVX 4x]... PASS
Testing: FVDE, FileVault 2 [PBKDF2-SHA256 AES 128/128 AVX 4x]... PASS
Testing: geli, FreeBSD GELI [PBKDF2-SHA512 128/128 AVX 4x2]... PASS
Testing: gost, GOST R 34.11-94 [64/64]... PASS
Testing: gpg, OpenPGP / GnuPG Secret Key [32/64]... PASS
Testing: HAVAL-128-4 [32/64]... PASS
Testing: HAVAL-256-3 [32/64]... PASS
Testing: hdaa, HTTP Digest access authentication [MD5 128/128 AVX 4x5]... PASS
Testing: hMailServer [sha256($s.$p) 128/128 AVX 4x]... PASS
Testing: hsrp, "MD5 authentication" HSRP, HSRPv2, VRRP, GLBP [MD5 32/64]... PASS
Testing: IKE, PSK [HMAC MD5/SHA1 32/64]... PASS
Testing: ipb2, Invision Power Board 2.x [MD5 128/128 AVX 4x5]... PASS
Testing: itunes-backup, Apple iTunes Backup [PBKDF2-SHA1 AES 128/128 AVX 4x2]... PASS
Testing: iwork, Apple iWork '09 or newer [PBKDF2-SHA1 AES 128/128 AVX 4x2]... PASS
Testing: KeePass [SHA256 AES 32/64]... PASS
Testing: keychain, Mac OS X Keychain [PBKDF2-SHA1 3DES 128/128 AVX 4x2]... PASS
Testing: keyring, GNOME Keyring [SHA256 AES 128/128 AVX 4x]... PASS
Testing: keystore, Java KeyStore [SHA1 128/128 AVX 4x2]... PASS
Testing: known_hosts, HashKnownHosts HMAC-SHA1 [SHA1 32/64]... PASS
Testing: krb4, Kerberos v4 TGT [DES 32/64]... PASS
Testing: krb5, Kerberos v5 TGT [3DES 32/64]... PASS
Testing: krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 AVX 4x2]... PASS
Testing: krb5pa-sha1, Kerberos 5 AS-REQ Pre-Auth etype 17/18 [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4]... PASS
Testing: krb5-17, Kerberos 5 DB etype 17 [DES / PBKDF2-SHA1 128/128 AVX 4x2 AES]... PASS
Testing: krb5-18, Kerberos 5 DB etype 18 [DES / PBKDF2-SHA1 128/128 AVX 4x2 AES]... PASS
Testing: krb5-3, Kerberos 5 DB etype 3 [DES / PBKDF2-SHA1 128/128 AVX 4x2 AES]... PASS
Testing: kwallet, KDE KWallet [SHA1 / PBKDF2-SHA512 128/128 AVX 2x]... PASS
Testing: lp, LastPass offline [PBKDF2-SHA256 128/128 AVX 4x]... PASS
Testing: lpcli, LastPass CLI [PBKDF2-SHA256 128/128 AVX 4x]... PASS
Testing: leet [SHA-512(128/128 AVX 2x) + Whirlpool(OpenSSL/64)]... PASS
Testing: lotus5, Lotus Notes/Domino 5 [8/64 X3]... PASS
Testing: lotus85, Lotus Notes/Domino 8.5 [8/64]... PASS
Testing: LUKS [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: MD2 [MD2 32/64]... PASS
Testing: mdc2, MDC-2 [MDC-2DES]... PASS
Testing: MediaWiki [md5($s.md5($p)) 128/128 AVX 4x5]... PASS
Testing: monero, monero Wallet [Pseudo-AES / ChaCha / Various 32/64]... PASS
Testing: money, Microsoft Money (2002 to Money Plus) [MD5/SHA1 32/64]... PASS
Testing: MongoDB, system / network [MD5 32/64]... PASS
Testing: scram [SCRAM PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: Mozilla, Mozilla key3.db [SHA1 3DES 32/64]... PASS
Testing: mscash, MS Cache Hash (DCC) [MD4 32/64]... PASS
Testing: mscash2, MS Cache Hash 2 (DCC2) [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: MSCHAPv2, C/R [MD4 DES (ESS MD5) 128/128 AVX 4x4]... PASS
Testing: mschapv2-naive, MSCHAPv2 C/R [MD4 DES 128/128 AVX naive]... PASS
Testing: krb5pa-md5, Kerberos 5 AS-REQ Pre-Auth etype 23 [32/64]... PASS
Testing: mssql, MS SQL [SHA1 128/128 AVX 4x2]... PASS
Testing: mssql05, MS SQL 2005 [SHA1 128/128 AVX 4x2]... PASS
Testing: mssql12, MS SQL 2012/2014 [SHA512 128/128 AVX 2x]... PASS
Testing: multibit, MultiBit Wallet [MD5/scrypt AES 32/64]... PASS
Testing: mysqlna, MySQL Network Authentication [SHA1 32/64]... PASS
Testing: mysql-sha1, MySQL 4.1+ [SHA1 128/128 AVX 4x2]... PASS
Testing: mysql, MySQL pre-4.1 [32/64]... PASS
Testing: net-ah, IPsec AH HMAC-MD5-96 [MD5 32/64]... PASS
Testing: nethalflm, HalfLM C/R [DES 32/64]... PASS
Testing: netlm, LM C/R [DES 32/64]... PASS
Testing: netlmv2, LMv2 C/R [MD4 HMAC-MD5 32/64]... PASS
Testing: net-md5, "Keyed MD5" RIPv2, OSPF, BGP, SNMPv2 [MD5 32/64]... PASS
Testing: netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64]... PASS
Testing: netntlm, NTLMv1 C/R [MD4 DES (ESS MD5) 128/128 AVX 4x4]... PASS
Testing: netntlm-naive, NTLMv1 C/R [MD4 DES (ESS MD5) DES 128/128 AVX naive]... PASS
Testing: net-sha1, "Keyed SHA1" BFD [SHA1 32/64]... PASS
Testing: nk, Nuked-Klan CMS [SHA1 MD5 32/64]... PASS
Testing: notes, Apple Notes [PBKDF2-SHA256 AES 128/128 AVX 4x]... PASS
Testing: md5ns, Netscreen [md5($s.$p) (OSC) (PW > 31 bytes) 128/128 AVX 4x5]... PASS
Testing: nsec3, DNSSEC NSEC3 [32/64]... PASS
Testing: NT [MD4 128/128 AVX 4x4]... PASS
Testing: o10glogon, Oracle 10g-logon protocol [DES-AES128-MD5 32/64]... PASS
Testing: o3logon, Oracle O3LOGON protocol [SHA1 DES 32/64]... PASS
Testing: o5logon, Oracle O5LOGON protocol [SHA1 AES 32/64]... PASS
Testing: ODF, OpenDocument Star/Libre/OpenOffice [PBKDF2-SHA1 128/128 AVX 4x2 BF/AES]... PASS
Testing: Office, 2007/2010/2013 [SHA1 128/128 AVX 4x2 / SHA512 128/128 AVX 2x AES]... PASS
Testing: oldoffice, MS Office <= 2003 [MD5/SHA1 RC4 32/64]... PASS
Testing: OpenBSD-SoftRAID [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: openssl-enc, OpenSSL "enc" encryption (AES-128, MD5) [32/64]... PASS
Testing: oracle, Oracle 10 [DES 32/64]... PASS
Testing: oracle11, Oracle 11g [SHA1 128/128 AVX 4x2]... PASS
Testing: Oracle12C [PBKDF2-SHA512 128/128 AVX 2x]... PASS
Testing: osc, osCommerce [md5($s.$p) (OSC) 128/128 AVX 4x5]... PASS
Testing: ospf, OSPF / IS-IS [HMAC-SHA-X 32/64]... PASS
Testing: Padlock [PBKDF2-SHA256 AES 128/128 AVX 4x]... PASS
Testing: Palshop, MD5(Palshop) [MD5 + SHA1 32/64]... PASS
Testing: Panama [Panama 32/64]... PASS
Testing: PBKDF2-HMAC-MD4 [PBKDF2-MD4 128/128 AVX 4x4]... PASS
Testing: PBKDF2-HMAC-MD5 [PBKDF2-MD5 128/128 AVX 4x5]... PASS
Testing: PBKDF2-HMAC-SHA1 [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: PBKDF2-HMAC-SHA256 [PBKDF2-SHA256 128/128 AVX 4x]... PASS
Testing: PBKDF2-HMAC-SHA512, GRUB2 / OS X 10.8+ [PBKDF2-SHA512 128/128 AVX 2x]... PASS
Testing: PDF [MD5 SHA2 RC4/AES 32/64]... PASS
Testing: PEM, PKCS#8 private key (RSA/DSA/ECDSA) [PBKDF2-SHA1 128/128 AVX 4x2 3DES/AES]... PASS
Testing: pfx, (.pfx, .p12) [PKCS#12 PBE (SHA1/SHA2) 128/128 AVX 4x2]... PASS
Testing: pgpdisk, PGP Disk / Virtual Disk [SHA1 64]... PASS
Testing: pgpsda, PGP Self Decrypting Archive [SHA1 64]... PASS
Testing: pgpwde, PGP Whole Disk Encryption [S2K-SHA1 64]... PASS
Testing: phpass ($P$9) [phpass ($P$ or $H$) 128/128 AVX 4x5]... PASS
Testing: PHPS [md5(md5($p).$s) 128/128 AVX 4x5]... PASS
Testing: PHPS2 [md5(md5($p).$s) 128/128 AVX 4x5]... PASS
Testing: pix-md5, Cisco PIX [md5($p) (Cisco PIX) 128/128 AVX 4x5]... PASS
Testing: PKZIP [32/64]... PASS
Testing: po, Post.Office [MD5 32/64]... PASS
Testing: postgres, PostgreSQL C/R [MD5 32/64]... PASS
Testing: PST, custom CRC-32 [32/64]... PASS
Testing: PuTTY, Private Key (RSA/DSA/ECDSA/ED25519) [SHA1/AES 32/64]... PASS
Testing: pwsafe, Password Safe [SHA256 128/128 AVX 4x]... PASS
Testing: qnx, qnx hash (rounds=1000) [QNX 32/64]... PASS
Testing: RACF [DES 32/64]... PASS
Testing: RACF-KDFAES [KDFAES (DES + HMAC-SHA256/64 + AES-256)]... PASS
Testing: radius, RADIUS authentication [MD5 32/64]... PASS
Testing: RAdmin, v2.x [MD5 32/64]... PASS
Testing: RAKP, IPMI 2.0 RAKP (RMCP+) [HMAC-SHA1 128/128 AVX 4x2]... PASS
Testing: rar, RAR3 (length 5) [SHA1 128/128 AVX 4x2 AES]... PASS
Testing: RAR5 [PBKDF2-SHA256 128/128 AVX 4x]... PASS
Testing: Raw-SHA512 [SHA512 128/128 AVX 2x]... PASS
Testing: Raw-Blake2 [BLAKE2b 512 128/128 AVX]... PASS
Testing: Raw-Keccak [Keccak 512 32/64]... PASS
Testing: Raw-Keccak-256 [Keccak 256 32/64]... PASS
Testing: Raw-MD4 [MD4 128/128 AVX 4x4]... PASS
Testing: Raw-MD5 [MD5 128/128 AVX 4x5]... PASS
Testing: Raw-MD5u [md5(utf16($p)) 128/128 AVX 4x5]... PASS
Testing: Raw-SHA1 [SHA1 128/128 AVX 4x2]... PASS
Testing: Raw-SHA1-AxCrypt [SHA1 128/128 AVX 4x2]... PASS
Testing: Raw-SHA1-Linkedin [SHA1 128/128 AVX 4x2]... PASS
Testing: Raw-SHA224 [SHA224 128/128 AVX 4x]... PASS
Testing: Raw-SHA256 [SHA256 128/128 AVX 4x]... PASS
Testing: Raw-SHA3 [SHA3 512 32/64]... PASS
Testing: Raw-SHA384 [SHA384 128/128 AVX 2x]... PASS
Testing: restic, Restic Repository [scrypt Salsa20/8 128/128 AVX, Poly1305]... PASS
Testing: ripemd-128, RIPEMD 128 [32/64]... PASS
Testing: ripemd-160, RIPEMD 160 [32/64]... PASS
Testing: rsvp, HMAC-MD5 / HMAC-SHA1, RSVP, IS-IS, OMAPI, RNDC, TSIG [MD5 32/64]... PASS
Testing: RVARY [DES 32/64]... PASS
Testing: Siemens-S7 [HMAC-SHA1 32/64]... PASS
Testing: Salted-SHA1 [SHA1 128/128 AVX 4x2]... PASS
Testing: SSHA512, LDAP [SHA512 128/128 AVX 2x]... PASS
Testing: sapb, SAP CODVN B (BCODE) [MD5 128/128 AVX 4x5]... PASS
Testing: sapg, SAP CODVN F/G (PASSCODE) [SHA1 128/128 AVX 4x2]... PASS
Testing: saph, SAP CODVN H (PWDSALTEDHASH) (SHA1x1024) [SHA-1/SHA-2 128/128 AVX 4x2]... PASS
Testing: sappse, SAP PSE [PKCS#12 PBE (SHA1) 128/128 AVX 4x2 3DES]... PASS
Testing: securezip, PKWARE SecureZIP [SHA1 AES 32/64]... PASS
Testing: 7z, 7-Zip archive encryption (512K iterations) [SHA256 128/128 AVX 4x AES]... PASS
Testing: Signal, Signal Android [PKCS#12 PBE (SHA1) 32/64]... PASS
Testing: SIP [MD5 32/64]... PASS
Testing: skein-256, Skein 256 [Skein 32/64]... PASS
Testing: skein-512, Skein 512 [Skein 32/64]... PASS
Testing: skey, S/Key [MD4/MD5/SHA1/RMD160 32/64]... PASS
Testing: SL3, Nokia operator unlock [SHA1 128/128 AVX 4x2]... PASS
Testing: Snefru-128 [32/64]... PASS
Testing: Snefru-256 [32/64]... PASS
Testing: LastPass, sniffed sessions [PBKDF2-SHA256 AES 128/128 AVX 4x]... PASS
Testing: SNMP, SNMPv3 USM [HMAC-MD5-96/HMAC-SHA1-96 32/64]... PASS
Testing: solarwinds, SolarWinds Orion [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64]... PASS
Testing: sspr, NetIQ SSPR / Adobe AEM [MD5/SHA1/SHA256/SHA512 32/64]... PASS
Testing: Stribog-256 [GOST R 34.11-2012 128/128 AVX 1x]... PASS
Testing: Stribog-512 [GOST R 34.11-2012 128/128 AVX 1x]... PASS
Testing: STRIP, Password Manager [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: SunMD5 [MD5 128/128 AVX 4x5]... PASS
Testing: SybaseASE, Sybase ASE [SHA256 128/128 AVX 4x]... PASS
Testing: Sybase-PROP [salted FEAL-8 32/64]... PASS
Testing: tacacs-plus, TACACS+ [MD5 32/64]... PASS
Testing: tcp-md5, TCP MD5 Signatures, BGP, MSDP [MD5 32/64]... PASS
Testing: telegram [PBKDF2-SHA1/SHA512 128/128 AVX 4x2 AES]... PASS
Testing: tezos, Tezos Key [PBKDF2-SHA512 128/128 AVX 2x]... PASS
Testing: Tiger [Tiger 32/64]... PASS
Testing: tc_aes_xts, TrueCrypt AES256_XTS [SHA512/RIPEMD160/WHIRLPOOL 128/128 AVX 2x]... PASS
Testing: tc_ripemd160, TrueCrypt AES256_XTS [RIPEMD160 32/64]... PASS
Testing: tc_ripemd160boot, TrueCrypt AES/Twofish/Serpent [RIPEMD160 32/64]... PASS
Testing: tc_sha512, TrueCrypt AES256_XTS [SHA512 128/128 AVX 2x]... PASS
Testing: tc_whirlpool, TrueCrypt AES256_XTS [WHIRLPOOL 32/64]... PASS
Testing: vdi, VirtualBox-VDI AES_XTS [PBKDF2-SHA256 128/128 AVX 4x + AES_XTS]... PASS
Testing: OpenVMS, Purdy [32/64]... PASS
Testing: vmx, VMware VMX [PBKDF2-SHA1 AES 128/128 AVX 4x2]... PASS
Testing: VNC [DES 32/64]... PASS
Testing: vtp, "MD5 based authentication" VTP [MD5 32/64]... PASS
Testing: wbb3, WoltLab BB3 [SHA1 32/64]... PASS
Testing: whirlpool [WHIRLPOOL 32/64]... PASS
Testing: whirlpool0 [WHIRLPOOL-0 32/64]... PASS
Testing: whirlpool1 [WHIRLPOOL-1 32/64]... PASS
Testing: wpapsk, WPA/WPA2/PMF/PMKID PSK [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: wpapsk-pmk, WPA/WPA2/PMF/PMKID master key [MD5/SHA-1/SHA-2]... PASS
Testing: xmpp-scram [XMPP SCRAM PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: xsha, Mac OS X 10.4 - 10.6 [SHA1 128/128 AVX 4x2]... PASS
Testing: xsha512, Mac OS X 10.7 [SHA512 128/128 AVX 2x]... PASS
Testing: zed, Prim'X Zed! encrypted archives [PKCS#12 PBE (SHA1/SHA256) 128/128 AVX 4x2]... PASS
Testing: ZIP, WinZip [PBKDF2-SHA1 128/128 AVX 4x2]... PASS
Testing: ZipMonster, MD5(ZipMonster) [MD5-128/128 AVX 4x5 x 50000]... PASS
Testing: plaintext, $0$ [n/a]... PASS
Testing: has-160 [HAS-160 32/64]... PASS
Testing: HMAC-MD5 [password is key, MD5 128/128 AVX 4x5]... PASS
Testing: HMAC-SHA1 [password is key, SHA1 128/128 AVX 4x2]... PASS
Testing: HMAC-SHA224 [password is key, SHA224 128/128 AVX 4x]... PASS
Testing: HMAC-SHA256 [password is key, SHA256 128/128 AVX 4x]... PASS
Testing: HMAC-SHA384 [password is key, SHA384 128/128 AVX 2x]... PASS
Testing: HMAC-SHA512 [password is key, SHA512 128/128 AVX 2x]... PASS
Device 3: GeForce GT 650M
Testing: sha1crypt-opencl, (NetBSD) [PBKDF1-SHA1 OpenCL]... Build log: <program source>:371:15: warning: unused function 'SWAP16'
inline ushort SWAP16(ushort x)
              ^
<program source>:543:12: warning: unused function 'check_pkcs_pad'
inline int check_pkcs_pad(const uchar *data, int len, int blocksize)
           ^
<program source>:588:13: warning: unused function 'memcpy_pp'
inline void memcpy_pp(void* restrict dst, const void* restrict src, uint count)
            ^
<program source>:598:13: warning: unused function 'memcpy_pg'
inline void memcpy_pg(__global void* restrict dst, const void* restrict src, uint count)
            ^
<program source>:608:13: warning: unused function 'memcpy_gp'
inline void memcpy_gp(void* restrict dst, __global const void* restrict src, uint count)
            ^
<program source>:618:13: warning: unused function 'memcpy_cp'
inline void memcpy_cp(void* restrict dst, __constant void* restrict src, uint count)
            ^
<program source>:628:13: warning: unused function 'memcpy_mcp'
inline void memcpy_mcp(void* restrict dst, MAYBE_CONSTANT void* restrict src, uint count)
            ^
<program source>:638:13: warning: unused function 'memset_p'
inline void memset_p(void *p, uint val, uint count)
            ^
<program source>:647:13: warning: unused function 'memset_g'
inline void memset_g(__global void *p, uint val, uint count)
            ^
<program source>:656:12: warning: unused function 'memcmp_pp'
inline int memcmp_pp(const void *s1, const void *s2, uint size)
           ^
<program source>:669:12: warning: unused function 'memcmp_pg'
inline int memcmp_pg(const void *s1, __global const void *s2, uint size)
           ^
<program source>:695:12: warning: unused function 'memcmp_gc'
inline int memcmp_gc(__global const void *s1, __constant void *s2, uint size)
           ^
<program source>:708:12: warning: unused function 'memcmp_pmc'
inline int memcmp_pmc(const void *s1, MAYBE_CONSTANT void *s2, uint size)
           ^
<program source>:721:12: warning: unused function 'memmem_pc'
inline int memmem_pc(const void *haystack, size_t haystack_len,
           ^

PASS
Testing: KeePass-opencl [SHA256 AES/Twofish/ChaCha OpenCL]... Build log: <program source>:270:15: warning: unused function 'SWAP16'
inline ushort SWAP16(ushort x)
              ^
<program source>:442:12: warning: unused function 'check_pkcs_pad'
inline int check_pkcs_pad(const uchar *data, int len, int blocksize)
           ^
<program source>:517:13: warning: unused function 'memcpy_cp'
inline void memcpy_cp(void* restrict dst, __constant void* restrict src, uint count)
            ^
<program source>:527:13: warning: unused function 'memcpy_mcp'
inline void memcpy_mcp(void* restrict dst, MAYBE_CONSTANT void* restrict src, uint count)
            ^
<program source>:546:13: warning: unused function 'memset_g'
inline void memset_g(__global void *p, uint val, uint count)
            ^
<program source>:555:12: warning: unused function 'memcmp_pp'
inline int memcmp_pp(const void *s1, const void *s2, uint size)
           ^
<program source>:568:12: warning: unused function 'memcmp_pg'
inline int memcmp_pg(const void *s1, __global const void *s2, uint size)
           ^
<program source>:594:12: warning: unused function 'memcmp_gc'
inline int memcmp_gc(__global const void *s1, __constant void *s2, uint size)
           ^
<program source>:620:12: warning: unused function 'memmem_pc'
inline int memmem_pc(const void *haystack, size_t haystack_len,
           ^
<program source>:3492:1: warning: unused function 'AES_Decrypt_ECB'
AES_Decrypt_ECB(AES_CTX *ctx, AES_SRC_TYPE void *_src,
^
<program source>:3609:1: warning: unused function 'AES_KeySetup_Decrypt'
AES_KeySetup_Decrypt(uint32_t *skey, AES_KEY_TYPE uint8_t *key, int len)
^
<program source>:3753:1: warning: unused function 'AES_cbc_encrypt'
AES_cbc_encrypt(AES_SRC_TYPE void *_in, AES_DST_TYPE void *_out,
^
<program source>:3812:1: warning: unused function 'AES_cts_encrypt'
AES_cts_encrypt(AES_CTS_SRC_TYPE void *_in, AES_CTS_DST_TYPE void *_out,
^
<program source>:3844:1: warning: unused function 'AES_cts_decrypt'
AES_cts_decrypt(AES_CTS_SRC_TYPE void *_in, AES_CTS_DST_TYPE void *_out,
^
<program source>:3881:13: warning: unused function 'AES_cfb_decrypt'
inline void AES_cfb_decrypt(AES_SRC_TYPE void *_in,
            ^
<program source>:3904:13: warning: unused function 'AES_256_XTS_first_sector'
inline void AES_256_XTS_first_sector(AES_SRC_TYPE uint *in,
            ^
<program source>:3927:13: warning: unused function 'AES_256_XTS_DiskCryptor'
inline void AES_256_XTS_DiskCryptor(AES_SRC_TYPE uchar *data, AES_DST_TYPE uchar *output,
            ^
<program source>:3974:1: warning: unused function 'AES_ige_decrypt'
AES_ige_decrypt(AES_SRC_TYPE void *_in, AES_DST_TYPE void *_out,
^
<program source>:6243:13: warning: unused function 'sha512_single'
inline void sha512_single(MAYBE_VECTOR_ULONG *W, MAYBE_VECTOR_ULONG *output)
            ^
<program source>:6268:13: warning: unused function 'sha512_single_zeros'
inline void sha512_single_zeros(MAYBE_VECTOR_ULONG *W,
            ^
<program source>:6477:6: warning: unused function 'SHA512_Init'
void SHA512_Init(SHA512_CTX *ctx) {
     ^
<program source>:6595:6: warning: unused function 'SHA512_Final'
void SHA512_Final(uchar output[64], SHA512_CTX *ctx) {
     ^
<program source>:8904:5: warning: unused function 'Twofish_Encrypt'
int Twofish_Encrypt(Twofish_key *m_key, Byte *pInput, Byte *pOutBuffer,
    ^

FAILED (cmp_all(1))
Abort trap: 6
ssorgatem commented 2 years ago

It appears I amb getting the same error in Manjaro Linux:

adria@Aegon /usr/share/john/kernels $ john --format=zip-opencl --test --device=1
Device 1@Aegon: gfx900:xnack- [AMD Radeon RX Vega]
Benchmarking: ZIP-opencl, WinZip [PBKDF2-SHA1 OpenCL]... Options used: -I /usr/share/john/kernels -cl-mad-enable -D__GPU__ -DDEVICE_INFO=522 -D__SIZEOF_HOST_SIZE_T__=8 -DDEV_VER_MAJOR=3452 -DDEV_VER_MINOR=0 -D_OPENCL_COMPILER -DKEYLEN=64 -DSALTLEN=64 -DOUTLEN=68 /usr/share/john/kernels/zip_kernel.cl
Build log: warning: argument unused during compilation: '-I /usr/share/john/kernels' [-Wunused-command-line-argument]
1 warning generated.
lld: error: undefined hidden symbol: pbkdf2
>>> referenced by /tmp/comgr-a506a9/input/linked.bc.o:(derive_key)
>>> referenced by /tmp/comgr-a506a9/input/linked.bc.o:(derive_key)
>>> referenced by /tmp/comgr-a506a9/input/linked.bc.o:(zip)
>>> referenced 1 more times

lld: error: undefined hidden symbol: hmac_sha1
>>> referenced by /tmp/comgr-a506a9/input/linked.bc.o:(zip)
>>> referenced by /tmp/comgr-a506a9/input/linked.bc.o:(zip)
Error: Creating the executable from LLVM IRs failed.

Error building kernel /usr/share/john/kernels/zip_kernel.cl. DEVICE_INFO=522
0: OpenCL CL_BUILD_PROGRAM_FAILURE (-11) error in opencl_common.c:1386 - clBuildProgram

It works fine when using the CPU as the OpenCL target, though:

adria@Aegon /usr/share/john/kernels $ john --format=zip-opencl --test --device=2
Device 2@Aegon: AMD Ryzen 5 1600 Six-Core Processor
Benchmarking: ZIP-opencl, WinZip [PBKDF2-SHA1 OpenCL]... Error creating binary cache file: El fitxer o directori no existeix
DONE
Raw:    5688 c/s real, 2001 c/s virtual
magnumripper commented 2 years ago

@ssorgatem please open a separate issue for your case. When doing so, please also include the output from --list=opencl-devices

GowthamKudupudi commented 1 year ago

I'm also having headache with this stupid issue.

claudioandre-br commented 1 year ago

Just to clarify @GowthamKudupudi , you're struggling with the "missing headers error", right?

Have you tried the workarounds? For example https://github.com/openwall/john/issues/4757#issuecomment-868462579

Please add the output of:

john --list=opencl-devices
john --list=build-info

(perhaps a Mac user might notice some detail when reading it):

yves-surrel commented 3 months ago

FYI, I ran into a similar problem. Even with cd-ing to the directory of the file to include, it complained not finding it. The problem was that one of the directories in the full path name had not the read permission for the current user. After changing the mode of this intermediate directory, it worked.

solardiz commented 3 months ago

Thank you very much for sharing this finding, @yves-surrel! What OS version was this on, what John version? Do you have an idea of how the directory permissions got too restrictive? Is it e.g. a side-effect of installing some other software as root?

yves-surrel commented 3 months ago

I encountered this problem in a totally different context (I do not even know what John is...). On Ventura 13.6.7, I was running a python script using pyopencl as a LaunchAgent (so, running as root), having previously installed with my account python and pyopencl via mambaforge. My mambaforge directory was drwx------, I changed to drwx-wx-wx, so OpenCL could access the file pyopencl-complex.h in the pyopencl egg located in the site-packages directory of the mambaforge directory. Hope it's clear...