Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 28 Jan 2014 01:10:58 +0100
From: Frank Dittrich <frank_dittrich@...mail.com>
To: john-dev@...ts.openwall.com
Subject: Re: Handling of hashes with different iteration counts

On 01/27/2014 01:42 AM, magnum wrote:
> Then again, we/you could implement it in a topic branch and hope it will
> merge without too much effort later.

Attached patch implements much of the logic suggested in my earlier mail.
I bumped the FMT_MAIN_VERSION to 12, and added the new format extension
to all bleeding-jumbo formats, including cuda and opencl, but used
#if FMT_MAIN_VERSION > 11
...
#endif in all format definitions, so that formats should continue to
work for FMT_MAIN_VERSION 12.

listconf.c, loader.c, and john.c don't use #if FMT_VERSION > 11, but I
can easily add this if you prefer.
Alternatively, I can also get rid of #if FMT_MAIN_VERSION > 11 in all
the formats (but there are even some #if FMT_MAIN_VERSION > 9 in there.)


224 files changed, 1228 insertions(+), 6 deletions(-)
sounds like a lot.
But most of the inserted lines come from just the same 5 lines added to
each struct fmt_main (except for thin formats, which are handled in
dynamic_fmt.c.

Currently, bcrypt format (CPU) is the only one which provides correct
iteration counts, so right now it is the only format which profits from
checking whether hashes wich different iteration counts are loaded.
-all other formats, including OpenCL and CUDA formats, currently use
fmt_default_iteration_count, which just returns 1.
So, this patch is only useful for bcrypt right now:

$ ./john --fork=2 bcrypt.hashes --wordlist
Loaded 4 password hashes with 4 different salts (bcrypt [Blowfish 32/32 X2])
Loaded hashes with varying # of rounds (from 16 to 256)

Also, --list=format-methods has been adjusted.


Those salted formats that can have varying iteration rounds will get
their individual iteration_count method in later patches.

Right now,  just wanted to have one format fully supporting the new
interface, so that I can test the new functionality, and all the other
formats not breaking (still need to adjust those formats in unstable,
just in case someone is going to need them).


Next steps:

-implement --rounds=COUNT --rounds=-COUNT and , and test it, in
combination with --show[=LEFT] and with cracking modes.
(I wanted to avoid --iteration count, so that -i still works for
--incremental. But may be --rounds will be confusing for users.
Should that question be discussed on john-users?)

-adjust other salted hash formats with configurable iteration count to
use an individual iteration_count method instead of
fmt_default_iteration_count.

-adjust bach completion to mention COUNT and -COUNT as possible
completions for --rounds=

-adjust documentation (--rounds= and --list=format-methods


If you want to test the current patch in your local repo, first use

$ git apply --check
0001-Implement-checks-for-different-iteration-counts-in-l.patch

And then, if the first command doesn't print any errors, use

$ git am 0001-Implement-checks-for-different-iteration-counts-in-l.patch


Or, just look at the top commit of my fd-iteration-count branch:

https://github.com/frank-dittrich/JohnTheRipper/commit/55b64bc9c7a9fb881b37d6db47275064c60d035b


Any suggestions what to change?

Frank

>From 55b64bc9c7a9fb881b37d6db47275064c60d035b Mon Sep 17 00:00:00 2001
From: Frank Dittrich <frank_dittrich@...mail.com>
Date: Mon, 27 Jan 2014 16:58:24 +0100
Subject: [PATCH] Implement checks for different iteration counts in loaded
 hashes

The format interface version FMT_MAIN_VERSION had to be bumped
to 12, to add new format methods returning iteration counts
for a given salt.
Even though hardly any format will need to report more than one
iteration count, the format interface has been extended by
an array of functions, just to avoid the need to bump the format
version again if we ever need to report a second iteration count
for a format. Another reason is that I don't want to touch
all the other (several hundred) formats again if one or two
formats need to report more than one iteration count.
So far, only format method iteration_count[0](void *salt) is used.

Furthermore, currently bcrypt is the only format reporting
a real iteration count.
All the other formats still use fmt_default_iteration_count which
just returns 1.
(Those salted formats which support a configurable iteration count
will be adjusted in a later commit.)

Currently, john checks whether the loaded (uncracked) hashes
use different iteration counts. If this happens, john prints
a warning (to stdout and into the log file), mentioning
the minimum iteration count and the maximum iteration count.

$ cat bcrypt.hashes
$2a$08$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW
$2a$07$CCCCCCCCCCCCCCCCCCCCC.VGOzA784oUp/Z0DY336zx7pLYAy0lwK
$2a$06$XXXXXXXXXXXXXXXXXXXXXOAcXxm9kjPGEMsLznoKqmqw7tc8WCx4a
$2a$04$CCCCCCCCCCCCCCCCCCCCC.7uG0VCzI2bS7j6ymqJi9CdcdxiRTWNy

$ ./john --fork=2 bcrypt.hashes --wordlist
Loaded 4 password hashes with 4 different salts (bcrypt [Blowfish 32/32 X2])
Loaded hashes with varying # of rounds (from 16 to 256)
Node numbers 1-2 of 2 (fork)
Each node loaded 1/2 of wordfile to memory (about 12 KB/node)
Press 'q' or Ctrl-C to abort, almost any other key for status
1 0g 0:00:00:09 5.41% (ETA: 21:37:40) 0g/s 9.582p/s 38.73c/s 38.73C/s justin..knight
2 0g 0:00:00:09 4.85% (ETA: 21:37:59) 0g/s 8.519p/s 34.68c/s 34.68C/s cricket..dallas
2 0g 0:00:00:12 6.31% (ETA: 21:38:04) 0g/s 8.607p/s 34.42c/s 34.42C/s test..tommy
1 0g 0:00:00:12 6.88% (ETA: 21:37:48) 0g/s 9.360p/s 37.90c/s 37.90C/s booger..christin
Waiting for 1 child to terminate
Session aborted

$ head -n 25 john.log
1 0:00:00:00 Starting a new session
1 0:00:00:00 Loaded a total of 4 password hashes with 4 different salts
1 0:00:00:00 Loaded hashes with varying # of rounds (from 16 to 256)
1 0:00:00:00 - Node numbers 1-2 of 2 (fork)
1 0:00:00:00 - Hash type: bcrypt (lengths up to 72)
1 0:00:00:00 - Algorithm: Blowfish 32/32 X2
1 0:00:00:00 - Candidate passwords will be buffered and tried in chunks of 2
1 0:00:00:00 - Configured to use otherwise idle processor cycles only
1 0:00:00:00 Proceeding with wordlist mode
1 0:00:00:00 - Wordlist file: ./password.lst
1 0:00:00:00 - loaded this node's share of wordfile $JOHN/password.lst into memory (13239 bytes of 26325, max_size=5000000 avg/node)
1 0:00:00:00 - wordfile had 1780 lines and required 7120 bytes for index.
1 0:00:00:00 - suppressed 7 duplicate lines and/or comments from wordlist.
1 0:00:00:00 - No word mangling rules
1 0:00:00:00 Starting a new session
1 0:00:00:00 Loaded a total of 4 password hashes with 4 different salts
1 0:00:00:00 Loaded hashes with varying # of rounds (from 16 to 256)
1 0:00:00:00 - Node numbers 1-2 of 2 (fork)
2 0:00:00:00 - Hash type: bcrypt (lengths up to 72)
2 0:00:00:00 - Algorithm: Blowfish 32/32 X2
2 0:00:00:00 - Candidate passwords will be buffered and tried in chunks of 2
2 0:00:00:00 - Configured to use otherwise idle processor cycles only
2 0:00:00:00 Proceeding with wordlist mode
2 0:00:00:00 - Wordlist file: ./password.lst
2 0:00:00:00 - loaded this node's share of wordfile $JOHN/password.lst into memory (13056 bytes of 26325, max_size=5000000 avg/node)
---
 src/7z_fmt_plug.c                   |  5 +++++
 src/AFS_fmt.c                       |  5 +++++
 src/BFEgg_fmt_plug.c                |  5 +++++
 src/BF_fmt.c                        |  5 +++++
 src/BF_std.c                        |  8 ++++++++
 src/BF_std.h                        |  5 +++++
 src/BSDI_fmt.c                      |  5 +++++
 src/DES_fmt.c                       |  5 +++++
 src/DMD5_fmt_plug.c                 |  5 +++++
 src/DOMINOSEC_fmt_plug.c            |  5 +++++
 src/EPI_fmt_plug.c                  |  5 +++++
 src/FGT_fmt_plug.c                  |  5 +++++
 src/HDAA_fmt_plug.c                 |  5 +++++
 src/IPB2_fmt_plug.c                 |  5 +++++
 src/KRB4_fmt_plug.c                 |  5 +++++
 src/KRB5_fmt_plug.c                 |  5 +++++
 src/LM_fmt.c                        |  5 +++++
 src/MD5_fmt.c                       |  5 +++++
 src/MSCHAPv2_bs_fmt_plug.c          |  5 +++++
 src/NETLM_fmt_plug.c                |  5 +++++
 src/NETLMv2_fmt_plug.c              |  5 +++++
 src/NETNTLM_bs_fmt_plug.c           |  5 +++++
 src/NETNTLMv2_fmt_plug.c            |  5 +++++
 src/NETSPLITLM_fmt_plug.c           |  5 +++++
 src/NS_fmt_plug.c                   |  5 +++++
 src/NT_fmt.c                        |  5 +++++
 src/PO_fmt_plug.c                   |  5 +++++
 src/SKEY_fmt.c                      |  5 +++++
 src/SybaseASE_fmt_plug.c            |  5 +++++
 src/SybasePROP_fmt_plug.c           |  5 +++++
 src/XSHA512_fmt_plug.c              |  5 +++++
 src/XSHA_fmt_plug.c                 |  5 +++++
 src/agilekeychain_fmt_plug.c        |  5 +++++
 src/aix_ssha_fmt_plug.c             | 15 +++++++++++++++
 src/androidfde_fmt_plug.c           |  5 +++++
 src/bitcoin_fmt_plug.c              |  5 +++++
 src/blackberry_ES10_fmt_plug.c      |  5 +++++
 src/blockchain_fmt_plug.c           |  5 +++++
 src/c3_fmt.c                        |  5 +++++
 src/chap_fmt_plug.c                 |  5 +++++
 src/citrix_ns_fmt_plug.c            |  5 +++++
 src/clipperz_srp_fmt_plug.c         |  5 +++++
 src/cloudkeychain_fmt_plug.c        |  5 +++++
 src/crc32_fmt_plug.c                |  5 +++++
 src/cryptsha256_fmt_plug.c          |  5 +++++
 src/cryptsha512_fmt_plug.c          |  5 +++++
 src/cuda_cryptmd5_fmt.c             |  5 +++++
 src/cuda_cryptsha256_fmt.c          |  5 +++++
 src/cuda_cryptsha512_fmt.c          |  5 +++++
 src/cuda_mscash2_fmt.c              |  5 +++++
 src/cuda_mscash_fmt.c               |  5 +++++
 src/cuda_phpass_fmt.c               |  5 +++++
 src/cuda_pwsafe_fmt.c               |  5 +++++
 src/cuda_rawsha256_fmt.c            |  5 +++++
 src/cuda_rawsha512_fmt.c            |  5 +++++
 src/cuda_wpapsk_fmt.c               |  5 +++++
 src/cuda_xsha512_fmt.c              |  5 +++++
 src/django_fmt.c                    |  5 +++++
 src/django_scrypt_fmt_plug.c        |  5 +++++
 src/dmg_fmt_plug.c                  |  5 +++++
 src/dragonfly3_fmt_plug.c           | 10 ++++++++++
 src/dragonfly4_fmt_plug.c           | 10 ++++++++++
 src/drupal7_fmt_plug.c              |  5 +++++
 src/dummy.c                         |  5 +++++
 src/dynamic_fmt.c                   |  9 +++++++++
 src/ecryptfs_fmt_plug.c             |  5 +++++
 src/efs_fmt_plug.c                  |  5 +++++
 src/encfs_fmt_plug.c                |  5 +++++
 src/episerver_fmt_plug.c            |  5 +++++
 src/formats.c                       |  5 +++++
 src/formats.h                       | 17 ++++++++++++++++-
 src/gost_fmt_plug.c                 |  5 +++++
 src/gpg_fmt_plug.c                  |  5 +++++
 src/haval_fmt_plug.c                | 10 ++++++++++
 src/hmacMD5_fmt.c                   |  5 +++++
 src/hmacSHA1_fmt.c                  |  5 +++++
 src/hmacSHA224_fmt_plug.c           |  5 +++++
 src/hmacSHA256_fmt_plug.c           |  5 +++++
 src/hmacSHA384_fmt_plug.c           |  5 +++++
 src/hmacSHA512_fmt_plug.c           |  5 +++++
 src/hmailserver_fmt_plug.c          |  5 +++++
 src/ike_fmt_plug.c                  |  5 +++++
 src/john.c                          |  8 +++++++-
 src/keepass_fmt_plug.c              |  5 +++++
 src/keychain_fmt_plug.c             |  5 +++++
 src/keyring_fmt_plug.c              |  5 +++++
 src/keystore_fmt_plug.c             |  5 +++++
 src/krb5-18_fmt.c                   |  5 +++++
 src/krb5-23_fmt.c                   |  5 +++++
 src/krb5pa-md5_fmt_plug.c           |  5 +++++
 src/krb5pa-sha1_fmt_plug.c          |  5 +++++
 src/kwallet_fmt_plug.c              |  5 +++++
 src/lastpass_fmt_plug.c             |  5 +++++
 src/lastpass_sniffed_fmt_plug.c     |  5 +++++
 src/listconf.c                      | 24 ++++++++++++++++++++----
 src/loader.c                        |  8 ++++++++
 src/loader.h                        |  6 ++++++
 src/lotus5_fmt_plug.c               |  5 +++++
 src/lotus85_fmt_plug.c              |  5 +++++
 src/luks_fmt_plug.c                 |  5 +++++
 src/md2_fmt_plug.c                  |  5 +++++
 src/md4_gen_fmt_plug.c              |  5 +++++
 src/mongodb_fmt_plug.c              |  5 +++++
 src/mozilla_fmt.c                   |  5 +++++
 src/mscash1_fmt_plug.c              |  5 +++++
 src/mscash2_fmt_plug.c              |  5 +++++
 src/mssql-old_fmt_plug.c            |  5 +++++
 src/mssql05_fmt_plug.c              |  5 +++++
 src/mssql12_fmt_plug.c              |  5 +++++
 src/mysqlSHA1_fmt_plug.c            |  5 +++++
 src/mysql_fmt_plug.c                |  5 +++++
 src/mysql_netauth_fmt_plug.c        |  5 +++++
 src/net_md5_fmt_plug.c              |  5 +++++
 src/net_sha1_fmt_plug.c             |  5 +++++
 src/nsldap_fmt_plug.c               |  5 +++++
 src/nt2_fmt_plug.c                  |  5 +++++
 src/ntlmv1_mschapv2_fmt_plug.c      | 10 ++++++++++
 src/nukedclan_fmt_plug.c            |  5 +++++
 src/o5logon_fmt_plug.c              |  5 +++++
 src/odf_fmt_plug.c                  |  5 +++++
 src/office_fmt_plug.c               |  5 +++++
 src/oldoffice_fmt_plug.c            |  5 +++++
 src/opencl_DES_fmt.c                |  5 +++++
 src/opencl_agilekeychain_fmt.c      |  5 +++++
 src/opencl_bf_fmt.c                 |  5 +++++
 src/opencl_blockchain_fmt.c         |  5 +++++
 src/opencl_cryptmd5_fmt.c           |  5 +++++
 src/opencl_cryptsha256_fmt.c        |  5 +++++
 src/opencl_cryptsha512_fmt.c        |  5 +++++
 src/opencl_dmg_fmt.c                |  5 +++++
 src/opencl_encfs_fmt.c              |  5 +++++
 src/opencl_gpg_fmt.c                |  5 +++++
 src/opencl_keychain_fmt.c           |  5 +++++
 src/opencl_keyring_fmt.c            |  5 +++++
 src/opencl_krb5pa-md5_fmt.c         |  5 +++++
 src/opencl_krb5pa-sha1_fmt.c        |  5 +++++
 src/opencl_mscash2_fmt.c            |  5 +++++
 src/opencl_mysqlsha1_fmt.c          |  5 +++++
 src/opencl_nsldaps_fmt.c            |  5 +++++
 src/opencl_nt_fmt.c                 |  5 +++++
 src/opencl_ntlmv2_fmt.c             |  5 +++++
 src/opencl_odf_aes_fmt.c            |  5 +++++
 src/opencl_odf_fmt.c                |  5 +++++
 src/opencl_office2007_fmt.c         |  5 +++++
 src/opencl_office2010_fmt.c         |  5 +++++
 src/opencl_office2013_fmt.c         |  5 +++++
 src/opencl_pbkdf2_hmac_sha256_fmt.c |  5 +++++
 src/opencl_phpass_fmt.c             |  5 +++++
 src/opencl_pwsafe_fmt.c             |  5 +++++
 src/opencl_rakp_fmt.c               |  5 +++++
 src/opencl_rar_fmt.c                |  5 +++++
 src/opencl_rawmd4_fmt.c             |  5 +++++
 src/opencl_rawmd5_fmt.c             |  5 +++++
 src/opencl_rawsha1_fmt.c            |  5 +++++
 src/opencl_rawsha256_fmt.c          |  5 +++++
 src/opencl_rawsha512-ng_fmt.c       |  9 +++++++++
 src/opencl_rawsha512_fmt.c          |  5 +++++
 src/opencl_strip_fmt.c              |  5 +++++
 src/opencl_sxc_fmt.c                |  5 +++++
 src/opencl_wpapsk_fmt.c             |  5 +++++
 src/opencl_xsha512_fmt.c            |  5 +++++
 src/openssl_enc_fmt_plug.c          |  5 +++++
 src/oracle11_fmt_plug.c             |  5 +++++
 src/oracle_fmt_plug.c               |  5 +++++
 src/panama_fmt_plug.c               |  5 +++++
 src/pbkdf2-hmac-sha1_fmt_plug.c     |  5 +++++
 src/pbkdf2-hmac-sha512_fmt_plug.c   |  5 +++++
 src/pbkdf2_hmac_sha256_fmt_plug.c   |  5 +++++
 src/pdf_fmt_plug.c                  |  5 +++++
 src/pfx_fmt.c                       |  5 +++++
 src/pkzip_fmt_plug.c                |  5 +++++
 src/postgres_fmt_plug.c             |  5 +++++
 src/pst_fmt_plug.c                  |  5 +++++
 src/putty_fmt_plug.c                |  5 +++++
 src/pwsafe_fmt_plug.c               |  5 +++++
 src/racf_fmt_plug.c                 |  5 +++++
 src/radmin_fmt_plug.c               |  5 +++++
 src/rakp_fmt_plug.c                 |  5 +++++
 src/rar5_fmt_plug.c                 |  5 +++++
 src/rar_fmt.c                       |  5 +++++
 src/rawBLAKE2_512_fmt_plug.c        |  5 +++++
 src/rawKeccak_256_fmt_plug.c        |  5 +++++
 src/rawKeccak_512_fmt_plug.c        |  5 +++++
 src/rawMD4_fmt_plug.c               |  5 +++++
 src/rawMD5_fmt_plug.c               |  5 +++++
 src/rawSHA0_fmt.c                   |  5 +++++
 src/rawSHA1_fmt_plug.c              |  5 +++++
 src/rawSHA1_linkedIn_fmt_plug.c     |  5 +++++
 src/rawSHA1_ng_fmt.c                |  5 +++++
 src/rawSHA224_fmt_plug.c            |  5 +++++
 src/rawSHA256_fmt_plug.c            |  5 +++++
 src/rawSHA256_ng_fmt.c              |  5 +++++
 src/rawSHA256_ng_i_fmt.c            |  5 +++++
 src/rawSHA384_fmt_plug.c            |  5 +++++
 src/rawSHA512_fmt_plug.c            |  5 +++++
 src/rawSHA512_ng_fmt.c              |  5 +++++
 src/rawSHA512_ng_i_fmt.c            |  5 +++++
 src/rawmd5u_fmt_plug.c              |  5 +++++
 src/ripemd_fmt_plug.c               | 10 ++++++++++
 src/salted_sha1_fmt_plug.c          |  5 +++++
 src/sapB_fmt_plug.c                 |  5 +++++
 src/sapG_fmt_plug.c                 |  5 +++++
 src/scrypt_fmt.c                    |  5 +++++
 src/sha1_gen_fmt_plug.c             |  5 +++++
 src/siemens-s7_fmt_plug.c           |  5 +++++
 src/sip_fmt_plug.c                  |  5 +++++
 src/skein_fmt_plug.c                | 10 ++++++++++
 src/snefru_fmt_plug.c               | 10 ++++++++++
 src/ssh_fmt.c                       |  5 +++++
 src/ssh_ng_fmt_plug.c               |  5 +++++
 src/ssha512_fmt_plug.c              |  5 +++++
 src/strip_fmt_plug.c                |  5 +++++
 src/sunmd5_fmt_plug.c               |  5 +++++
 src/sxc_fmt_plug.c                  |  5 +++++
 src/tcp_md5_fmt_plug.c              |  5 +++++
 src/tiger_fmt_plug.c                |  5 +++++
 src/trip_fmt.c                      |  5 +++++
 src/truecrypt_fmt.c                 | 15 +++++++++++++++
 src/vms_fmt_plug.c                  |  5 +++++
 src/vnc_fmt_plug.c                  |  5 +++++
 src/wbb3_fmt_plug.c                 |  5 +++++
 src/whirlpool_fmt_plug.c            | 15 +++++++++++++++
 src/wow_srp_fmt_plug.c              |  5 +++++
 src/wpapsk_fmt.c                    |  5 +++++
 224 files changed, 1228 insertions(+), 6 deletions(-)

diff --git a/src/7z_fmt_plug.c b/src/7z_fmt_plug.c
index b8fac3b..f837ddd 100644
--- a/src/7z_fmt_plug.c
+++ b/src/7z_fmt_plug.c
@@ -390,6 +390,11 @@ struct fmt_main fmt_sevenzip = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/AFS_fmt.c b/src/AFS_fmt.c
index 6dfaaf1..799183a 100644
--- a/src/AFS_fmt.c
+++ b/src/AFS_fmt.c
@@ -464,6 +464,11 @@ struct fmt_main fmt_AFS = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/BFEgg_fmt_plug.c b/src/BFEgg_fmt_plug.c
index 5fd6755..e6a6a5a 100644
--- a/src/BFEgg_fmt_plug.c
+++ b/src/BFEgg_fmt_plug.c
@@ -194,6 +194,11 @@ struct fmt_main fmt_BFEgg = {
     fmt_default_split,
     binary,
     fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
     fmt_default_source,
     {
 			fmt_default_binary_hash_0,
diff --git a/src/BF_fmt.c b/src/BF_fmt.c
index b666cff..02343c0 100644
--- a/src/BF_fmt.c
+++ b/src/BF_fmt.c
@@ -272,6 +272,11 @@ struct fmt_main fmt_BF = {
 		fmt_default_split,
 		BF_std_get_binary,
 		BF_std_get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			BF_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/BF_std.c b/src/BF_std.c
index 0bc81ec..e17efa9 100644
--- a/src/BF_std.c
+++ b/src/BF_std.c
@@ -830,6 +830,14 @@ void *BF_std_get_salt(char *ciphertext)
 	return &salt;
 }
 
+unsigned int BF_iteration_count(void *salt)
+{
+	BF_salt *bf_salt;
+
+	bf_salt = (BF_salt *) salt;
+	return (unsigned int) (1 << bf_salt->rounds);
+}
+
 void *BF_std_get_binary(char *ciphertext)
 {
 	static BF_binary binary;
diff --git a/src/BF_std.h b/src/BF_std.h
index ed357d7..5927a06 100644
--- a/src/BF_std.h
+++ b/src/BF_std.h
@@ -89,6 +89,11 @@ extern void BF_std_crypt_exact(int index);
 extern void *BF_std_get_salt(char *ciphertext);
 
 /*
+ * Returns the number of iterations for a given salt
+ */
+extern unsigned int BF_iteration_count(void *salt);
+
+/*
  * Converts an ASCII ciphertext to binary.
  */
 extern void *BF_std_get_binary(char *ciphertext);
diff --git a/src/BSDI_fmt.c b/src/BSDI_fmt.c
index bd14d60..7d2dc92 100644
--- a/src/BSDI_fmt.c
+++ b/src/BSDI_fmt.c
@@ -428,6 +428,11 @@ struct fmt_main fmt_BSDI = {
 			DES_std_get_binary,
 #endif
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/DES_fmt.c b/src/DES_fmt.c
index e3d530b..f73420c 100644
--- a/src/DES_fmt.c
+++ b/src/DES_fmt.c
@@ -392,6 +392,11 @@ struct fmt_main fmt_DES = {
 			DES_std_get_binary,
 #endif
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/DMD5_fmt_plug.c b/src/DMD5_fmt_plug.c
index fd7661f..97aac55 100644
--- a/src/DMD5_fmt_plug.c
+++ b/src/DMD5_fmt_plug.c
@@ -404,6 +404,11 @@ struct fmt_main fmt_DMD5 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/DOMINOSEC_fmt_plug.c b/src/DOMINOSEC_fmt_plug.c
index 61aca12..afb651d 100644
--- a/src/DOMINOSEC_fmt_plug.c
+++ b/src/DOMINOSEC_fmt_plug.c
@@ -478,6 +478,11 @@ struct fmt_main fmt_DOMINOSEC = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash,
diff --git a/src/EPI_fmt_plug.c b/src/EPI_fmt_plug.c
index 1122951..ec8bcc8 100644
--- a/src/EPI_fmt_plug.c
+++ b/src/EPI_fmt_plug.c
@@ -174,6 +174,11 @@ struct fmt_main fmt_EPI =
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{ // binary_hash[3]
 			fmt_default_binary_hash,
diff --git a/src/FGT_fmt_plug.c b/src/FGT_fmt_plug.c
index 3f21155..92183ba 100644
--- a/src/FGT_fmt_plug.c
+++ b/src/FGT_fmt_plug.c
@@ -220,6 +220,11 @@ struct fmt_main fmt_FGT = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/HDAA_fmt_plug.c b/src/HDAA_fmt_plug.c
index 046196e..8a08fe8 100644
--- a/src/HDAA_fmt_plug.c
+++ b/src/HDAA_fmt_plug.c
@@ -680,6 +680,11 @@ struct fmt_main fmt_HDAA = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/IPB2_fmt_plug.c b/src/IPB2_fmt_plug.c
index c620b0b..9037099 100644
--- a/src/IPB2_fmt_plug.c
+++ b/src/IPB2_fmt_plug.c
@@ -481,6 +481,11 @@ struct fmt_main fmt_IPB2 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/KRB4_fmt_plug.c b/src/KRB4_fmt_plug.c
index 559e26b..10b373e 100644
--- a/src/KRB4_fmt_plug.c
+++ b/src/KRB4_fmt_plug.c
@@ -262,6 +262,11 @@ struct fmt_main fmt_KRB4 = {
 		fmt_default_split,
 		fmt_default_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash,
diff --git a/src/KRB5_fmt_plug.c b/src/KRB5_fmt_plug.c
index 7aa3d6c..667f390 100644
--- a/src/KRB5_fmt_plug.c
+++ b/src/KRB5_fmt_plug.c
@@ -340,6 +340,11 @@ struct fmt_main fmt_KRB5 = {
 		fmt_default_split,
 		fmt_default_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash,
diff --git a/src/LM_fmt.c b/src/LM_fmt.c
index 330af02..132c07e 100644
--- a/src/LM_fmt.c
+++ b/src/LM_fmt.c
@@ -222,6 +222,11 @@ struct fmt_main fmt_LM = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		source,
 		{
 			binary_hash_0,
diff --git a/src/MD5_fmt.c b/src/MD5_fmt.c
index 4066664..cedd628 100644
--- a/src/MD5_fmt.c
+++ b/src/MD5_fmt.c
@@ -387,6 +387,11 @@ struct fmt_main fmt_MD5 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/MSCHAPv2_bs_fmt_plug.c b/src/MSCHAPv2_bs_fmt_plug.c
index 5a5dc86..d4e0b94 100644
--- a/src/MSCHAPv2_bs_fmt_plug.c
+++ b/src/MSCHAPv2_bs_fmt_plug.c
@@ -560,6 +560,11 @@ struct fmt_main fmt_MSCHAPv2_old = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/NETLM_fmt_plug.c b/src/NETLM_fmt_plug.c
index df8a33e..ce0839c 100644
--- a/src/NETLM_fmt_plug.c
+++ b/src/NETLM_fmt_plug.c
@@ -369,6 +369,11 @@ struct fmt_main fmt_NETLM = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/NETLMv2_fmt_plug.c b/src/NETLMv2_fmt_plug.c
index 809ec2c..a624871 100644
--- a/src/NETLMv2_fmt_plug.c
+++ b/src/NETLMv2_fmt_plug.c
@@ -448,6 +448,11 @@ struct fmt_main fmt_NETLMv2 = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/NETNTLM_bs_fmt_plug.c b/src/NETNTLM_bs_fmt_plug.c
index 3af4aad..9cab457 100644
--- a/src/NETNTLM_bs_fmt_plug.c
+++ b/src/NETNTLM_bs_fmt_plug.c
@@ -436,6 +436,11 @@ struct fmt_main fmt_NETNTLM_old = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/NETNTLMv2_fmt_plug.c b/src/NETNTLMv2_fmt_plug.c
index 31421ee..a1fbc8d 100644
--- a/src/NETNTLMv2_fmt_plug.c
+++ b/src/NETNTLMv2_fmt_plug.c
@@ -513,6 +513,11 @@ struct fmt_main fmt_NETNTLMv2 = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/NETSPLITLM_fmt_plug.c b/src/NETSPLITLM_fmt_plug.c
index 184fdc4..30fd031 100644
--- a/src/NETSPLITLM_fmt_plug.c
+++ b/src/NETSPLITLM_fmt_plug.c
@@ -328,6 +328,11 @@ struct fmt_main fmt_NETHALFLM = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/NS_fmt_plug.c b/src/NS_fmt_plug.c
index 42661a3..7b42d3c 100644
--- a/src/NS_fmt_plug.c
+++ b/src/NS_fmt_plug.c
@@ -282,6 +282,11 @@ struct fmt_main fmt_NS = {
 		fmt_default_split,
 		(void *(*)(char *))get_binary,
 		(void *(*)(char *))get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/NT_fmt.c b/src/NT_fmt.c
index 95cd9df..0e2cf4d 100644
--- a/src/NT_fmt.c
+++ b/src/NT_fmt.c
@@ -986,6 +986,11 @@ struct fmt_main fmt_NT = {
 		nt_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		source,
 		{
 			binary_hash_0,
diff --git a/src/PO_fmt_plug.c b/src/PO_fmt_plug.c
index f7dd445..5ea7a04 100644
--- a/src/PO_fmt_plug.c
+++ b/src/PO_fmt_plug.c
@@ -218,6 +218,11 @@ struct fmt_main fmt_PO = {
 		fmt_default_split,
 		get_binary,
 		(void *(*)(char *))get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/SKEY_fmt.c b/src/SKEY_fmt.c
index 533ca7d..92ec57e 100644
--- a/src/SKEY_fmt.c
+++ b/src/SKEY_fmt.c
@@ -241,6 +241,11 @@ struct fmt_main fmt_SKEY = {
 		fmt_default_split,
 		fmt_default_binary,
 		skey_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash,
diff --git a/src/SybaseASE_fmt_plug.c b/src/SybaseASE_fmt_plug.c
index 6d08fe6..0fa768a 100644
--- a/src/SybaseASE_fmt_plug.c
+++ b/src/SybaseASE_fmt_plug.c
@@ -275,6 +275,11 @@ struct fmt_main fmt_SybaseASE = {
         fmt_default_split,
         get_binary,
         salt,
+#if FMT_MAIN_VERSION > 11
+        {
+        	fmt_default_iteration_count,
+        },
+#endif
         fmt_default_source,
         {
 		fmt_default_binary_hash_0,
diff --git a/src/SybasePROP_fmt_plug.c b/src/SybasePROP_fmt_plug.c
index 00a5121..1cf327b 100644
--- a/src/SybasePROP_fmt_plug.c
+++ b/src/SybasePROP_fmt_plug.c
@@ -213,6 +213,11 @@ struct fmt_main fmt_sybaseprop = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/XSHA512_fmt_plug.c b/src/XSHA512_fmt_plug.c
index 8c16007..5fdf4d2 100644
--- a/src/XSHA512_fmt_plug.c
+++ b/src/XSHA512_fmt_plug.c
@@ -290,6 +290,11 @@ struct fmt_main fmt_XSHA512 = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/XSHA_fmt_plug.c b/src/XSHA_fmt_plug.c
index abfcf35..509ebba 100644
--- a/src/XSHA_fmt_plug.c
+++ b/src/XSHA_fmt_plug.c
@@ -455,6 +455,11 @@ struct fmt_main fmt_XSHA = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/agilekeychain_fmt_plug.c b/src/agilekeychain_fmt_plug.c
index 7788eb7..c2c1e5a 100644
--- a/src/agilekeychain_fmt_plug.c
+++ b/src/agilekeychain_fmt_plug.c
@@ -293,6 +293,11 @@ struct fmt_main fmt_agile_keychain = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/aix_ssha_fmt_plug.c b/src/aix_ssha_fmt_plug.c
index b06b3c4..f1dabd3 100644
--- a/src/aix_ssha_fmt_plug.c
+++ b/src/aix_ssha_fmt_plug.c
@@ -388,6 +388,11 @@ struct fmt_main fmt_aixssha1 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -444,6 +449,11 @@ struct fmt_main fmt_aixssha256 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -500,6 +510,11 @@ struct fmt_main fmt_aixssha512 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/androidfde_fmt_plug.c b/src/androidfde_fmt_plug.c
index 7680cea..2c7cd75 100644
--- a/src/androidfde_fmt_plug.c
+++ b/src/androidfde_fmt_plug.c
@@ -320,6 +320,11 @@ struct fmt_main fmt_fde = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/bitcoin_fmt_plug.c b/src/bitcoin_fmt_plug.c
index 21450bd..a5c12b6 100644
--- a/src/bitcoin_fmt_plug.c
+++ b/src/bitcoin_fmt_plug.c
@@ -325,6 +325,11 @@ struct fmt_main fmt_bitcoin = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 #if FMT_MAIN_VERSION > 9
 		fmt_default_source,
 #endif
diff --git a/src/blackberry_ES10_fmt_plug.c b/src/blackberry_ES10_fmt_plug.c
index 1c2b69c..538eff0 100644
--- a/src/blackberry_ES10_fmt_plug.c
+++ b/src/blackberry_ES10_fmt_plug.c
@@ -241,6 +241,11 @@ struct fmt_main fmt_blackberry1 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/blockchain_fmt_plug.c b/src/blockchain_fmt_plug.c
index 62dcdc5..572ab42 100644
--- a/src/blockchain_fmt_plug.c
+++ b/src/blockchain_fmt_plug.c
@@ -275,6 +275,11 @@ struct fmt_main fmt_blockchain = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/c3_fmt.c b/src/c3_fmt.c
index 21691d2..1d93001 100644
--- a/src/c3_fmt.c
+++ b/src/c3_fmt.c
@@ -554,6 +554,11 @@ struct fmt_main fmt_crypt = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/chap_fmt_plug.c b/src/chap_fmt_plug.c
index b3ae2e2..2c1ebc9 100644
--- a/src/chap_fmt_plug.c
+++ b/src/chap_fmt_plug.c
@@ -224,6 +224,11 @@ struct fmt_main fmt_chap = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/citrix_ns_fmt_plug.c b/src/citrix_ns_fmt_plug.c
index 2e2c3e2..2ae7e98 100644
--- a/src/citrix_ns_fmt_plug.c
+++ b/src/citrix_ns_fmt_plug.c
@@ -391,6 +391,11 @@ struct fmt_main fmt_ctrxns = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/clipperz_srp_fmt_plug.c b/src/clipperz_srp_fmt_plug.c
index 2b2e646..5d6d608 100644
--- a/src/clipperz_srp_fmt_plug.c
+++ b/src/clipperz_srp_fmt_plug.c
@@ -430,6 +430,11 @@ struct fmt_main fmt_clipperz = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cloudkeychain_fmt_plug.c b/src/cloudkeychain_fmt_plug.c
index 4efb9a5..d265ae7 100644
--- a/src/cloudkeychain_fmt_plug.c
+++ b/src/cloudkeychain_fmt_plug.c
@@ -406,6 +406,11 @@ struct fmt_main fmt_cloud_keychain = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/crc32_fmt_plug.c b/src/crc32_fmt_plug.c
index bb95d9d..876f54f 100644
--- a/src/crc32_fmt_plug.c
+++ b/src/crc32_fmt_plug.c
@@ -233,6 +233,11 @@ struct fmt_main fmt_crc32 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cryptsha256_fmt_plug.c b/src/cryptsha256_fmt_plug.c
index 787220c..40615a8 100644
--- a/src/cryptsha256_fmt_plug.c
+++ b/src/cryptsha256_fmt_plug.c
@@ -949,6 +949,11 @@ struct fmt_main fmt_cryptsha256 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cryptsha512_fmt_plug.c b/src/cryptsha512_fmt_plug.c
index 3ec67a5..dd5a827 100644
--- a/src/cryptsha512_fmt_plug.c
+++ b/src/cryptsha512_fmt_plug.c
@@ -330,6 +330,11 @@ struct fmt_main fmt_cryptsha512 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cuda_cryptmd5_fmt.c b/src/cuda_cryptmd5_fmt.c
index 6f32bcd..1b04dd5 100644
--- a/src/cuda_cryptmd5_fmt.c
+++ b/src/cuda_cryptmd5_fmt.c
@@ -296,6 +296,11 @@ struct fmt_main fmt_cuda_cryptmd5 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cuda_cryptsha256_fmt.c b/src/cuda_cryptsha256_fmt.c
index bb45c63..9766cff 100644
--- a/src/cuda_cryptsha256_fmt.c
+++ b/src/cuda_cryptsha256_fmt.c
@@ -337,6 +337,11 @@ struct fmt_main fmt_cuda_cryptsha256 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cuda_cryptsha512_fmt.c b/src/cuda_cryptsha512_fmt.c
index 9ed586f..b2f4467 100644
--- a/src/cuda_cryptsha512_fmt.c
+++ b/src/cuda_cryptsha512_fmt.c
@@ -326,6 +326,11 @@ struct fmt_main fmt_cuda_cryptsha512 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cuda_mscash2_fmt.c b/src/cuda_mscash2_fmt.c
index 8e309ce..184bd0f 100644
--- a/src/cuda_mscash2_fmt.c
+++ b/src/cuda_mscash2_fmt.c
@@ -266,6 +266,11 @@ struct fmt_main fmt_cuda_mscash2 = {
 		mscash2_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/cuda_mscash_fmt.c b/src/cuda_mscash_fmt.c
index 4e3f19c..37b18df 100644
--- a/src/cuda_mscash_fmt.c
+++ b/src/cuda_mscash_fmt.c
@@ -263,6 +263,11 @@ struct fmt_main fmt_cuda_mscash = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cuda_phpass_fmt.c b/src/cuda_phpass_fmt.c
index 131f764..3eff2bd 100644
--- a/src/cuda_phpass_fmt.c
+++ b/src/cuda_phpass_fmt.c
@@ -257,6 +257,11 @@ struct fmt_main fmt_cuda_phpass = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cuda_pwsafe_fmt.c b/src/cuda_pwsafe_fmt.c
index 2f1adf3..e376283 100644
--- a/src/cuda_pwsafe_fmt.c
+++ b/src/cuda_pwsafe_fmt.c
@@ -196,6 +196,11 @@ struct fmt_main fmt_cuda_pwsafe = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/cuda_rawsha256_fmt.c b/src/cuda_rawsha256_fmt.c
index 614242e..c0ab9bc 100644
--- a/src/cuda_rawsha256_fmt.c
+++ b/src/cuda_rawsha256_fmt.c
@@ -247,6 +247,11 @@ struct fmt_main FMT_MAIN = {
 		fmt_default_split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/cuda_rawsha512_fmt.c b/src/cuda_rawsha512_fmt.c
index d83adbe..b6a83eb 100644
--- a/src/cuda_rawsha512_fmt.c
+++ b/src/cuda_rawsha512_fmt.c
@@ -282,6 +282,11 @@ struct fmt_main fmt_cuda_rawsha512 = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/cuda_wpapsk_fmt.c b/src/cuda_wpapsk_fmt.c
index 04bd5b4..30c2c52 100644
--- a/src/cuda_wpapsk_fmt.c
+++ b/src/cuda_wpapsk_fmt.c
@@ -90,6 +90,11 @@ struct fmt_main fmt_cuda_wpapsk = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/cuda_xsha512_fmt.c b/src/cuda_xsha512_fmt.c
index f9eef47..d50cd17 100644
--- a/src/cuda_xsha512_fmt.c
+++ b/src/cuda_xsha512_fmt.c
@@ -375,6 +375,11 @@ struct fmt_main fmt_cuda_xsha512 = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/django_fmt.c b/src/django_fmt.c
index 2b297e0..28a7823 100644
--- a/src/django_fmt.c
+++ b/src/django_fmt.c
@@ -274,6 +274,11 @@ struct fmt_main fmt_django = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/django_scrypt_fmt_plug.c b/src/django_scrypt_fmt_plug.c
index 05dd314..1d28021 100644
--- a/src/django_scrypt_fmt_plug.c
+++ b/src/django_scrypt_fmt_plug.c
@@ -249,6 +249,11 @@ struct fmt_main fmt_django_scrypt = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/dmg_fmt_plug.c b/src/dmg_fmt_plug.c
index 1e7223e..0757615 100644
--- a/src/dmg_fmt_plug.c
+++ b/src/dmg_fmt_plug.c
@@ -652,6 +652,11 @@ struct fmt_main fmt_dmg = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/dragonfly3_fmt_plug.c b/src/dragonfly3_fmt_plug.c
index 10b4991..45d9227 100644
--- a/src/dragonfly3_fmt_plug.c
+++ b/src/dragonfly3_fmt_plug.c
@@ -286,6 +286,11 @@ struct fmt_main fmt_dragonfly3_32 = {
 		fmt_default_split,
 		get_binary,
 		get_salt_32,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -342,6 +347,11 @@ struct fmt_main fmt_dragonfly3_64 = {
 		fmt_default_split,
 		get_binary,
 		get_salt_64,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/dragonfly4_fmt_plug.c b/src/dragonfly4_fmt_plug.c
index 5e28ed9..6a5f5f6 100644
--- a/src/dragonfly4_fmt_plug.c
+++ b/src/dragonfly4_fmt_plug.c
@@ -291,6 +291,11 @@ struct fmt_main fmt_dragonfly4_32 = {
 		fmt_default_split,
 		get_binary,
 		get_salt_32,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -347,6 +352,11 @@ struct fmt_main fmt_dragonfly4_64 = {
 		fmt_default_split,
 		get_binary,
 		get_salt_64,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/drupal7_fmt_plug.c b/src/drupal7_fmt_plug.c
index 27c72b7..5e4c3bc 100644
--- a/src/drupal7_fmt_plug.c
+++ b/src/drupal7_fmt_plug.c
@@ -262,6 +262,11 @@ struct fmt_main fmt_drupal7 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/dummy.c b/src/dummy.c
index 915de3a..f200c1d 100644
--- a/src/dummy.c
+++ b/src/dummy.c
@@ -312,6 +312,11 @@ struct fmt_main fmt_dummy = {
 		fmt_default_split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/dynamic_fmt.c b/src/dynamic_fmt.c
index 99b7997..d0843e2 100644
--- a/src/dynamic_fmt.c
+++ b/src/dynamic_fmt.c
@@ -2558,6 +2558,11 @@ static struct fmt_main fmt_Dynamic =
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 #if FMT_MAIN_VERSION > 9
 		fmt_default_source,
 #endif
@@ -7476,6 +7481,10 @@ struct fmt_main *dynamic_THIN_FORMAT_LINK(struct fmt_main *pFmt, char *ciphertex
 	pFmt->methods.cmp_all    = pFmtLocal->methods.cmp_all;
 	pFmt->methods.cmp_one    = pFmtLocal->methods.cmp_one;
 	pFmt->methods.cmp_exact  = pFmtLocal->methods.cmp_exact;
+#if FMT_MAIN_VERSION > 11
+	for (i = 0; i < ITERATION_COUNT_ARRAY_SIZE; ++i)
+		pFmt->methods.iteration_count[i] = pFmtLocal->methods.iteration_count[i];
+#endif
 #if FMT_MAIN_VERSION > 9
 	pFmt->methods.source     = pFmtLocal->methods.source;
 #endif
diff --git a/src/ecryptfs_fmt_plug.c b/src/ecryptfs_fmt_plug.c
index 1899cab..ddb3a45 100644
--- a/src/ecryptfs_fmt_plug.c
+++ b/src/ecryptfs_fmt_plug.c
@@ -242,6 +242,11 @@ struct fmt_main fmt_ecryptfs1 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/efs_fmt_plug.c b/src/efs_fmt_plug.c
index d3b4e70..8e78ea6 100644
--- a/src/efs_fmt_plug.c
+++ b/src/efs_fmt_plug.c
@@ -356,6 +356,11 @@ struct fmt_main fmt_efs = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/encfs_fmt_plug.c b/src/encfs_fmt_plug.c
index f0d3f65..e1cc88f 100644
--- a/src/encfs_fmt_plug.c
+++ b/src/encfs_fmt_plug.c
@@ -475,6 +475,11 @@ struct fmt_main fmt_encfs = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/episerver_fmt_plug.c b/src/episerver_fmt_plug.c
index 29862a9..d550a9f 100644
--- a/src/episerver_fmt_plug.c
+++ b/src/episerver_fmt_plug.c
@@ -272,6 +272,11 @@ struct fmt_main fmt_episerver = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/formats.c b/src/formats.c
index 5fde8da..cc40d0e 100644
--- a/src/formats.c
+++ b/src/formats.c
@@ -549,6 +549,11 @@ void *fmt_default_salt(char *ciphertext)
 	return ciphertext;
 }
 
+unsigned int fmt_default_iteration_count(void *salt)
+{
+	return (unsigned int) 1;
+}
+
 char *fmt_default_source(char *source, void *binary)
 {
 	return source;
diff --git a/src/formats.h b/src/formats.h
index ef76189..7b4069a 100644
--- a/src/formats.h
+++ b/src/formats.h
@@ -22,6 +22,13 @@ struct fmt_main;
  */
 #define DEFAULT_ALIGN MEM_ALIGN_WORD
 
+
+/*
+ * Just in case some formats need more than one iteration count
+ * (determines array size of iteration_count functions)
+ */
+#define ITERATION_COUNT_ARRAY_SIZE	1
+
 /*
  * Some format methods accept pointers to these, yet we can't just include
  * loader.h here because that would be a circular dependency.
@@ -178,6 +185,13 @@ struct fmt_methods {
 
 /* Converts an ASCII salt to its internal representation */
 	void *(*salt)(char *ciphertext);
+/*
+ * These functions return the iteration counts for a given salt,
+ * starting from the iteration count that is most significant
+ * for the total run time of computing a hash
+ */
+	unsigned int (*iteration_count[ITERATION_COUNT_ARRAY_SIZE])(void *salt);
+
 
 /* Reconstructs the ASCII ciphertext from its binary (saltless only).
  * Alternatively, in the simplest case simply returns "source" as-is. */
@@ -263,7 +277,7 @@ struct fmt_private {
 /*
  * A structure to keep a list of supported ciphertext formats.
  */
-#define FMT_MAIN_VERSION 11		/* change if structure changes */
+#define FMT_MAIN_VERSION 12		/* change if structure changes */
 struct fmt_main {
 	struct fmt_params params;
 	struct fmt_methods methods;
@@ -308,6 +322,7 @@ extern char *fmt_default_split(char *ciphertext, int index,
     struct fmt_main *self);
 extern void *fmt_default_binary(char *ciphertext);
 extern void *fmt_default_salt(char *ciphertext);
+extern unsigned int fmt_default_iteration_count(void *salt);
 extern char *fmt_default_source(char *source, void *binary);
 extern int fmt_default_binary_hash(void *binary);
 extern int fmt_default_salt_hash(void *salt);
diff --git a/src/gost_fmt_plug.c b/src/gost_fmt_plug.c
index 1dd1f41..2695333 100644
--- a/src/gost_fmt_plug.c
+++ b/src/gost_fmt_plug.c
@@ -249,6 +249,11 @@ struct fmt_main fmt_gost = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/gpg_fmt_plug.c b/src/gpg_fmt_plug.c
index 515350d..d94bae2 100644
--- a/src/gpg_fmt_plug.c
+++ b/src/gpg_fmt_plug.c
@@ -1297,6 +1297,11 @@ struct fmt_main fmt_gpg = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/haval_fmt_plug.c b/src/haval_fmt_plug.c
index 2a319a4..3feec72 100644
--- a/src/haval_fmt_plug.c
+++ b/src/haval_fmt_plug.c
@@ -234,6 +234,11 @@ struct fmt_main fmt_haval_256_3 = {
 		fmt_default_split,
 		get_binary_256,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -291,6 +296,11 @@ struct fmt_main fmt_haval_128_4 = {
 		fmt_default_split,
 		get_binary_128,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/hmacMD5_fmt.c b/src/hmacMD5_fmt.c
index 36fe80a..8e75f23 100644
--- a/src/hmacMD5_fmt.c
+++ b/src/hmacMD5_fmt.c
@@ -465,6 +465,11 @@ struct fmt_main fmt_hmacMD5 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/hmacSHA1_fmt.c b/src/hmacSHA1_fmt.c
index 2b32f30..e8bd98e 100644
--- a/src/hmacSHA1_fmt.c
+++ b/src/hmacSHA1_fmt.c
@@ -466,6 +466,11 @@ struct fmt_main fmt_hmacSHA1 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/hmacSHA224_fmt_plug.c b/src/hmacSHA224_fmt_plug.c
index 95a1348..3d00781 100644
--- a/src/hmacSHA224_fmt_plug.c
+++ b/src/hmacSHA224_fmt_plug.c
@@ -244,6 +244,11 @@ struct fmt_main fmt_hmacSHA224 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/hmacSHA256_fmt_plug.c b/src/hmacSHA256_fmt_plug.c
index e271643..0c9a4a3 100644
--- a/src/hmacSHA256_fmt_plug.c
+++ b/src/hmacSHA256_fmt_plug.c
@@ -245,6 +245,11 @@ struct fmt_main fmt_hmacSHA256 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/hmacSHA384_fmt_plug.c b/src/hmacSHA384_fmt_plug.c
index 87c57a9..dc20c71 100644
--- a/src/hmacSHA384_fmt_plug.c
+++ b/src/hmacSHA384_fmt_plug.c
@@ -259,6 +259,11 @@ struct fmt_main fmt_hmacSHA384 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/hmacSHA512_fmt_plug.c b/src/hmacSHA512_fmt_plug.c
index bb2fcee..849b3a4 100644
--- a/src/hmacSHA512_fmt_plug.c
+++ b/src/hmacSHA512_fmt_plug.c
@@ -260,6 +260,11 @@ struct fmt_main fmt_hmacSHA512 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/hmailserver_fmt_plug.c b/src/hmailserver_fmt_plug.c
index 028c664..f3a0a2f 100644
--- a/src/hmailserver_fmt_plug.c
+++ b/src/hmailserver_fmt_plug.c
@@ -216,6 +216,11 @@ struct fmt_main fmt_hmailserver = {
         fmt_default_split,
         get_binary,
         salt,
+#if FMT_MAIN_VERSION > 11
+        {
+        	fmt_default_iteration_count,
+        },
+#endif
         fmt_default_source,
         {
 		fmt_default_binary_hash_0,
diff --git a/src/ike_fmt_plug.c b/src/ike_fmt_plug.c
index d95b211..2aee41e 100644
--- a/src/ike_fmt_plug.c
+++ b/src/ike_fmt_plug.c
@@ -296,6 +296,11 @@ struct fmt_main fmt_ike = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/john.c b/src/john.c
index c025952..f46a258 100644
--- a/src/john.c
+++ b/src/john.c
@@ -980,7 +980,13 @@ static void john_load(void)
 			if (john_main_process)
 			printf("Remaining %s\n", john_loaded_counts());
 		}
-
+		if (database.min_iterations < database.max_iterations) {
+			log_event("Loaded hashes with varying # of rounds (from %u to %u)",
+			          database.min_iterations, database.max_iterations);
+			if (john_main_process)
+				printf("Loaded hashes with varying # of rounds (from %u to %u)\n",
+				       database.min_iterations, database.max_iterations);
+		}
 		if ((options.flags & FLG_PWD_REQ) && !database.salts) exit(0);
 
 		if (options.regen_lost_salts)
diff --git a/src/keepass_fmt_plug.c b/src/keepass_fmt_plug.c
index c46df39..42f0d1b 100644
--- a/src/keepass_fmt_plug.c
+++ b/src/keepass_fmt_plug.c
@@ -414,6 +414,11 @@ struct fmt_main fmt_KeePass = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/keychain_fmt_plug.c b/src/keychain_fmt_plug.c
index 56f554d..7b1cc2d 100644
--- a/src/keychain_fmt_plug.c
+++ b/src/keychain_fmt_plug.c
@@ -265,6 +265,11 @@ struct fmt_main fmt_keychain = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/keyring_fmt_plug.c b/src/keyring_fmt_plug.c
index 95063f3..8ddfea2 100644
--- a/src/keyring_fmt_plug.c
+++ b/src/keyring_fmt_plug.c
@@ -343,6 +343,11 @@ struct fmt_main fmt_keyring = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/keystore_fmt_plug.c b/src/keystore_fmt_plug.c
index 62cf44e..ff9d261 100644
--- a/src/keystore_fmt_plug.c
+++ b/src/keystore_fmt_plug.c
@@ -282,6 +282,11 @@ struct fmt_main fmt_keystore = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/krb5-18_fmt.c b/src/krb5-18_fmt.c
index 9e70584..66c8157 100644
--- a/src/krb5-18_fmt.c
+++ b/src/krb5-18_fmt.c
@@ -283,6 +283,11 @@ struct fmt_main fmt_krb5_18 = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash,
diff --git a/src/krb5-23_fmt.c b/src/krb5-23_fmt.c
index bfa4867..8f9ceb5 100644
--- a/src/krb5-23_fmt.c
+++ b/src/krb5-23_fmt.c
@@ -253,6 +253,11 @@ struct fmt_main fmt_KRB5_kinit = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 		        fmt_default_binary_hash,
diff --git a/src/krb5pa-md5_fmt_plug.c b/src/krb5pa-md5_fmt_plug.c
index 63d2c4e..e401f83 100644
--- a/src/krb5pa-md5_fmt_plug.c
+++ b/src/krb5pa-md5_fmt_plug.c
@@ -430,6 +430,11 @@ struct fmt_main fmt_mskrb5 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/krb5pa-sha1_fmt_plug.c b/src/krb5pa-sha1_fmt_plug.c
index 0e62059..30c2a0c 100644
--- a/src/krb5pa-sha1_fmt_plug.c
+++ b/src/krb5pa-sha1_fmt_plug.c
@@ -605,6 +605,11 @@ struct fmt_main fmt_krb5pa = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/kwallet_fmt_plug.c b/src/kwallet_fmt_plug.c
index 517b662..2285d97 100644
--- a/src/kwallet_fmt_plug.c
+++ b/src/kwallet_fmt_plug.c
@@ -305,6 +305,11 @@ struct fmt_main fmt_kwallet = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/lastpass_fmt_plug.c b/src/lastpass_fmt_plug.c
index 801122d..2b093c9 100644
--- a/src/lastpass_fmt_plug.c
+++ b/src/lastpass_fmt_plug.c
@@ -251,6 +251,11 @@ struct fmt_main fmt_lastpass = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/lastpass_sniffed_fmt_plug.c b/src/lastpass_sniffed_fmt_plug.c
index 2239706..ab215fb 100644
--- a/src/lastpass_sniffed_fmt_plug.c
+++ b/src/lastpass_sniffed_fmt_plug.c
@@ -262,6 +262,11 @@ struct fmt_main fmt_sniffed_lastpass = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/listconf.c b/src/listconf.c
index b519f23..68513f6 100644
--- a/src/listconf.c
+++ b/src/listconf.c
@@ -94,9 +94,9 @@ static void listconf_list_help_options()
 
 static void listconf_list_method_names()
 {
-	puts("init, done, reset, prepare, valid, split, binary, salt, source, binary_hash,");
-	puts("salt_hash, set_salt, set_key, get_key, clear_keys, crypt_all, get_hash,");
-	puts("cmp_all, cmp_one, cmp_exact");
+	puts("init, done, reset, prepare, valid, split, binary, salt, iteration_count,");
+	puts("source, binary_hash, salt_hash, set_salt, set_key, get_key, clear_keys,");
+	puts("crypt_all, get_hash, cmp_all, cmp_one, cmp_exact");
 }
 
 static void listconf_list_build_info(void)
@@ -461,6 +461,8 @@ void listconf_parse_late(void)
 				         strcasecmp(&options.listconf[15], "binary") &&
 				         strcasecmp(&options.listconf[15], "clear_keys") &&
 				         strcasecmp(&options.listconf[15], "salt") &&
+				         strcasecmp(&options.listconf[15], "iteration_count") &&
+				         strcasecmp(&options.listconf[15], "iteration_count[0]") &&
 					 strcasecmp(&options.listconf[15], "source") &&
 				         strcasecmp(&options.listconf[15], "get_hash") &&
 				         strcasecmp(&options.listconf[15], "get_hash[0]") &&
@@ -502,7 +504,14 @@ void listconf_parse_late(void)
 					ShowIt = 1;
 				if (format->methods.salt != fmt_default_salt && !strcasecmp(&options.listconf[15], "salt"))
 					ShowIt = 1;
-
+				for (i = 0; i < ITERATION_COUNT_ARRAY_SIZE; ++i) {
+					char Buf[40];
+					sprintf(Buf, "iteration_count[%d]", i);
+					if (format->methods.iteration_count[i] && format->methods.iteration_count[i] != fmt_default_iteration_count && !strcasecmp(&options.listconf[15], Buf))
+						ShowIt = 1;
+				}
+				if (format->methods.iteration_count[0] && format->methods.iteration_count[0] != fmt_default_iteration_count &&  !strcasecmp(&options.listconf[15], "iteration_count"))
+					ShowIt = 1;
 				if (format->methods.source != fmt_default_source && !strcasecmp(&options.listconf[15], "source"))
 					ShowIt = 1;
 				if (format->methods.clear_keys != fmt_default_clear_keys && !strcasecmp(&options.listconf[15], "clear_keys"))
@@ -543,6 +552,13 @@ void listconf_parse_late(void)
 					printf("\tbinary()\n");
 				if (format->methods.salt != fmt_default_salt)
 					printf("\tsalt()\n");
+				for (i = 0; i < ITERATION_COUNT_ARRAY_SIZE; ++i)
+					if (format->methods.iteration_count[i] != fmt_default_iteration_count) {
+						if (format->methods.iteration_count[i])
+							printf("\t\titeration_count[%d]()\n", i);
+						else
+							printf("\t\titeration_count[%d]()  (NULL pointer)\n", i);
+					}
 				for (i = 0; i < PASSWORD_HASH_SIZES; ++i)
 					if (format->methods.binary_hash[i] != fmt_default_binary_hash) {
 						if (format->methods.binary_hash[i])
diff --git a/src/loader.c b/src/loader.c
index 1712603..a62539c 100644
--- a/src/loader.c
+++ b/src/loader.c
@@ -129,6 +129,8 @@ void ldr_init_database(struct db_main *db, struct db_options *options)
 	list_init(&db->plaintexts);
 
 	db->salt_count = db->password_count = db->guess_count = 0;
+	db->min_iterations = UINT_MAX;
+	db->max_iterations = 1;
 
 	db->format = NULL;
 }
@@ -614,6 +616,7 @@ static void ldr_load_pw_line(struct db_main *db, char *line)
 			current_salt->salt = mem_alloc_copy(salt,
 				format->params.salt_size,
 				format->params.salt_align);
+			current_salt->iterations = format->methods.iteration_count[0](current_salt->salt);
 
 			current_salt->index = fmt_dummy_hash;
 			current_salt->bitmap = NULL;
@@ -627,6 +630,11 @@ static void ldr_load_pw_line(struct db_main *db, char *line)
 				current_salt->keys = NULL;
 
 			db->salt_count++;
+			if (current_salt->iterations < db->min_iterations)
+				db->min_iterations = current_salt->iterations;
+			if  (current_salt->iterations > db->max_iterations)
+				db->max_iterations = current_salt->iterations;
+			
 		}
 
 		current_salt->count++;
diff --git a/src/loader.h b/src/loader.h
index 0cdb9f8..6cb09a5 100644
--- a/src/loader.h
+++ b/src/loader.h
@@ -137,6 +137,9 @@ struct db_salt {
 
 /* Buffered keys, allocated for "single crack" mode only */
 	struct db_keys *keys;
+
+/* Iteration count */
+	unsigned int iterations;
 };
 
 /*
@@ -247,6 +250,9 @@ struct db_main {
 /* Number of salts, passwords and guesses */
 	int salt_count, password_count, guess_count;
 
+/* min. and max. iteration count */
+	unsigned int min_iterations, max_iterations;
+
 /* Ciphertext format */
 	struct fmt_main *format;
 };
diff --git a/src/lotus5_fmt_plug.c b/src/lotus5_fmt_plug.c
index 3f5d581..5239df6 100644
--- a/src/lotus5_fmt_plug.c
+++ b/src/lotus5_fmt_plug.c
@@ -289,6 +289,11 @@ struct fmt_main fmt_lotus5 = {
 		fmt_default_split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash1,
diff --git a/src/lotus85_fmt_plug.c b/src/lotus85_fmt_plug.c
index ac33e7b..ea70328 100644
--- a/src/lotus85_fmt_plug.c
+++ b/src/lotus85_fmt_plug.c
@@ -449,6 +449,11 @@ struct fmt_main fmt_lotus_85 =
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash,
diff --git a/src/luks_fmt_plug.c b/src/luks_fmt_plug.c
index d07a4a5..9b6a0a5 100644
--- a/src/luks_fmt_plug.c
+++ b/src/luks_fmt_plug.c
@@ -551,6 +551,11 @@ struct fmt_main fmt_luks = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/md2_fmt_plug.c b/src/md2_fmt_plug.c
index 6727173..c903766 100644
--- a/src/md2_fmt_plug.c
+++ b/src/md2_fmt_plug.c
@@ -189,6 +189,11 @@ struct fmt_main fmt_md2_ = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/md4_gen_fmt_plug.c b/src/md4_gen_fmt_plug.c
index 640e303..8205eb3 100644
--- a/src/md4_gen_fmt_plug.c
+++ b/src/md4_gen_fmt_plug.c
@@ -223,6 +223,11 @@ struct fmt_main fmt_md4_gen = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/mongodb_fmt_plug.c b/src/mongodb_fmt_plug.c
index 76ee502..dabab20 100644
--- a/src/mongodb_fmt_plug.c
+++ b/src/mongodb_fmt_plug.c
@@ -281,6 +281,11 @@ struct fmt_main fmt_mongodb = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/mozilla_fmt.c b/src/mozilla_fmt.c
index 317f9ff..2e3d23a 100644
--- a/src/mozilla_fmt.c
+++ b/src/mozilla_fmt.c
@@ -331,6 +331,11 @@ struct fmt_main fmt_mozilla = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/mscash1_fmt_plug.c b/src/mscash1_fmt_plug.c
index 8040d88..b3beb4f 100644
--- a/src/mscash1_fmt_plug.c
+++ b/src/mscash1_fmt_plug.c
@@ -906,6 +906,11 @@ struct fmt_main fmt_mscash = {
 		ms_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/mscash2_fmt_plug.c b/src/mscash2_fmt_plug.c
index a9d23fb..4bb4851 100644
--- a/src/mscash2_fmt_plug.c
+++ b/src/mscash2_fmt_plug.c
@@ -759,6 +759,11 @@ struct fmt_main fmt_mscash2 = {
 		mscash2_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/mssql-old_fmt_plug.c b/src/mssql-old_fmt_plug.c
index 8809580..8502a20 100644
--- a/src/mssql-old_fmt_plug.c
+++ b/src/mssql-old_fmt_plug.c
@@ -380,6 +380,11 @@ struct fmt_main fmt_mssql = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/mssql05_fmt_plug.c b/src/mssql05_fmt_plug.c
index 07d8340..274d5e9 100644
--- a/src/mssql05_fmt_plug.c
+++ b/src/mssql05_fmt_plug.c
@@ -518,6 +518,11 @@ struct fmt_main fmt_mssql05 = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/mssql12_fmt_plug.c b/src/mssql12_fmt_plug.c
index 770a2b6..d30e296 100644
--- a/src/mssql12_fmt_plug.c
+++ b/src/mssql12_fmt_plug.c
@@ -271,6 +271,11 @@ struct fmt_main fmt_mssql12 = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/mysqlSHA1_fmt_plug.c b/src/mysqlSHA1_fmt_plug.c
index 4b039af..3668d0f 100644
--- a/src/mysqlSHA1_fmt_plug.c
+++ b/src/mysqlSHA1_fmt_plug.c
@@ -421,6 +421,11 @@ struct fmt_main fmt_mysqlSHA1 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/mysql_fmt_plug.c b/src/mysql_fmt_plug.c
index 59436a5..d2a7e29 100644
--- a/src/mysql_fmt_plug.c
+++ b/src/mysql_fmt_plug.c
@@ -294,6 +294,11 @@ struct fmt_main fmt_MYSQL_fast =
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/mysql_netauth_fmt_plug.c b/src/mysql_netauth_fmt_plug.c
index 90377b2..ff3e9a2 100644
--- a/src/mysql_netauth_fmt_plug.c
+++ b/src/mysql_netauth_fmt_plug.c
@@ -240,6 +240,11 @@ struct fmt_main fmt_mysqlna = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/net_md5_fmt_plug.c b/src/net_md5_fmt_plug.c
index bd59628..ed4c1fd 100644
--- a/src/net_md5_fmt_plug.c
+++ b/src/net_md5_fmt_plug.c
@@ -234,6 +234,11 @@ struct fmt_main fmt_netmd5 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/net_sha1_fmt_plug.c b/src/net_sha1_fmt_plug.c
index 42d67b4..b3fc983 100644
--- a/src/net_sha1_fmt_plug.c
+++ b/src/net_sha1_fmt_plug.c
@@ -223,6 +223,11 @@ struct fmt_main fmt_netsha1 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/nsldap_fmt_plug.c b/src/nsldap_fmt_plug.c
index 91cfe97..6651c7d 100644
--- a/src/nsldap_fmt_plug.c
+++ b/src/nsldap_fmt_plug.c
@@ -293,6 +293,11 @@ struct fmt_main fmt_nsldap = {
 		fmt_default_split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/nt2_fmt_plug.c b/src/nt2_fmt_plug.c
index 18f08ab..ffaad63 100644
--- a/src/nt2_fmt_plug.c
+++ b/src/nt2_fmt_plug.c
@@ -708,6 +708,11 @@ struct fmt_main fmt_NT2 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/ntlmv1_mschapv2_fmt_plug.c b/src/ntlmv1_mschapv2_fmt_plug.c
index efc4fb0..6d13334 100644
--- a/src/ntlmv1_mschapv2_fmt_plug.c
+++ b/src/ntlmv1_mschapv2_fmt_plug.c
@@ -1255,6 +1255,11 @@ struct fmt_main fmt_MSCHAPv2_new = {
 		chap_split,
 		get_binary,
 		chap_get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
@@ -1314,6 +1319,11 @@ struct fmt_main fmt_NETNTLM_new = {
 		ntlm_split,
 		get_binary,
 		ntlm_get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/nukedclan_fmt_plug.c b/src/nukedclan_fmt_plug.c
index 2f643bb..1e9c76a 100644
--- a/src/nukedclan_fmt_plug.c
+++ b/src/nukedclan_fmt_plug.c
@@ -272,6 +272,11 @@ struct fmt_main fmt_nk = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/o5logon_fmt_plug.c b/src/o5logon_fmt_plug.c
index 5077e85..a18b67a 100644
--- a/src/o5logon_fmt_plug.c
+++ b/src/o5logon_fmt_plug.c
@@ -224,6 +224,11 @@ struct fmt_main fmt_o5logon = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/odf_fmt_plug.c b/src/odf_fmt_plug.c
index 48464ae..1bcc637 100644
--- a/src/odf_fmt_plug.c
+++ b/src/odf_fmt_plug.c
@@ -411,6 +411,11 @@ struct fmt_main fmt_odf = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/office_fmt_plug.c b/src/office_fmt_plug.c
index 5b6b72d..3662159 100644
--- a/src/office_fmt_plug.c
+++ b/src/office_fmt_plug.c
@@ -541,6 +541,11 @@ struct fmt_main fmt_office = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/oldoffice_fmt_plug.c b/src/oldoffice_fmt_plug.c
index 08d40e6..9f59278 100644
--- a/src/oldoffice_fmt_plug.c
+++ b/src/oldoffice_fmt_plug.c
@@ -311,6 +311,11 @@ struct fmt_main fmt_oldoffice = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_DES_fmt.c b/src/opencl_DES_fmt.c
index ed8f538..4b9587a 100644
--- a/src/opencl_DES_fmt.c
+++ b/src/opencl_DES_fmt.c
@@ -181,6 +181,11 @@ struct fmt_main fmt_opencl_DES = {
 			opencl_DES_bs_get_binary,
 
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_agilekeychain_fmt.c b/src/opencl_agilekeychain_fmt.c
index fae802d..fc3e69b 100644
--- a/src/opencl_agilekeychain_fmt.c
+++ b/src/opencl_agilekeychain_fmt.c
@@ -394,6 +394,11 @@ struct fmt_main fmt_opencl_agilekeychain = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_bf_fmt.c b/src/opencl_bf_fmt.c
index a632f45..170614b 100644
--- a/src/opencl_bf_fmt.c
+++ b/src/opencl_bf_fmt.c
@@ -239,6 +239,11 @@ struct fmt_main fmt_opencl_bf = {
 		fmt_default_split,
 		opencl_BF_std_get_binary,
 		opencl_BF_std_get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_blockchain_fmt.c b/src/opencl_blockchain_fmt.c
index b35abc9..f095d51 100644
--- a/src/opencl_blockchain_fmt.c
+++ b/src/opencl_blockchain_fmt.c
@@ -373,6 +373,11 @@ struct fmt_main fmt_opencl_blockchain = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_cryptmd5_fmt.c b/src/opencl_cryptmd5_fmt.c
index 830b02f..2b37440 100644
--- a/src/opencl_cryptmd5_fmt.c
+++ b/src/opencl_cryptmd5_fmt.c
@@ -552,6 +552,11 @@ struct fmt_main fmt_opencl_cryptMD5 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_cryptsha256_fmt.c b/src/opencl_cryptsha256_fmt.c
index 2ec8fda..8433960 100644
--- a/src/opencl_cryptsha256_fmt.c
+++ b/src/opencl_cryptsha256_fmt.c
@@ -515,6 +515,11 @@ struct fmt_main fmt_opencl_cryptsha256 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_cryptsha512_fmt.c b/src/opencl_cryptsha512_fmt.c
index e8e8d35..a57fe9d 100644
--- a/src/opencl_cryptsha512_fmt.c
+++ b/src/opencl_cryptsha512_fmt.c
@@ -502,6 +502,11 @@ struct fmt_main fmt_opencl_cryptsha512 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_dmg_fmt.c b/src/opencl_dmg_fmt.c
index 7ac81ed..724799c 100644
--- a/src/opencl_dmg_fmt.c
+++ b/src/opencl_dmg_fmt.c
@@ -743,6 +743,11 @@ struct fmt_main fmt_opencl_dmg = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_encfs_fmt.c b/src/opencl_encfs_fmt.c
index 7177c4d..a507eda 100644
--- a/src/opencl_encfs_fmt.c
+++ b/src/opencl_encfs_fmt.c
@@ -768,6 +768,11 @@ struct fmt_main fmt_opencl_encfs = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_gpg_fmt.c b/src/opencl_gpg_fmt.c
index 7a5382a..b73497c 100644
--- a/src/opencl_gpg_fmt.c
+++ b/src/opencl_gpg_fmt.c
@@ -631,6 +631,11 @@ struct fmt_main fmt_opencl_gpg = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_keychain_fmt.c b/src/opencl_keychain_fmt.c
index 921d602..76c0c84 100644
--- a/src/opencl_keychain_fmt.c
+++ b/src/opencl_keychain_fmt.c
@@ -379,6 +379,11 @@ struct fmt_main fmt_opencl_keychain = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_keyring_fmt.c b/src/opencl_keyring_fmt.c
index f4bafad..e405ae7 100644
--- a/src/opencl_keyring_fmt.c
+++ b/src/opencl_keyring_fmt.c
@@ -399,6 +399,11 @@ struct fmt_main fmt_opencl_keyring = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_krb5pa-md5_fmt.c b/src/opencl_krb5pa-md5_fmt.c
index a000893..d1d7923 100644
--- a/src/opencl_krb5pa-md5_fmt.c
+++ b/src/opencl_krb5pa-md5_fmt.c
@@ -747,6 +747,11 @@ struct fmt_main fmt_opencl_krb5pa_md5 = {
 		split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_krb5pa-sha1_fmt.c b/src/opencl_krb5pa-sha1_fmt.c
index 24921b1..fdeb338 100644
--- a/src/opencl_krb5pa-sha1_fmt.c
+++ b/src/opencl_krb5pa-sha1_fmt.c
@@ -935,6 +935,11 @@ struct fmt_main fmt_opencl_krb5pa_sha1 = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_mscash2_fmt.c b/src/opencl_mscash2_fmt.c
index b01fe4b..10c8964 100644
--- a/src/opencl_mscash2_fmt.c
+++ b/src/opencl_mscash2_fmt.c
@@ -410,6 +410,11 @@ struct fmt_main fmt_opencl_mscash2 = {
 		mscash2_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/opencl_mysqlsha1_fmt.c b/src/opencl_mysqlsha1_fmt.c
index e6ad1c9..ef5029e 100644
--- a/src/opencl_mysqlsha1_fmt.c
+++ b/src/opencl_mysqlsha1_fmt.c
@@ -503,6 +503,11 @@ struct fmt_main fmt_opencl_mysqlsha1 = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_nsldaps_fmt.c b/src/opencl_nsldaps_fmt.c
index d7af7b1..ca2cb29 100644
--- a/src/opencl_nsldaps_fmt.c
+++ b/src/opencl_nsldaps_fmt.c
@@ -428,6 +428,11 @@ struct fmt_main fmt_opencl_NSLDAPS = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_nt_fmt.c b/src/opencl_nt_fmt.c
index fe7d058..9ed164e 100644
--- a/src/opencl_nt_fmt.c
+++ b/src/opencl_nt_fmt.c
@@ -416,6 +416,11 @@ struct fmt_main fmt_opencl_NT = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/opencl_ntlmv2_fmt.c b/src/opencl_ntlmv2_fmt.c
index 0ebd9b1..b909353 100644
--- a/src/opencl_ntlmv2_fmt.c
+++ b/src/opencl_ntlmv2_fmt.c
@@ -790,6 +790,11 @@ struct fmt_main fmt_opencl_NTLMv2 = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_odf_aes_fmt.c b/src/opencl_odf_aes_fmt.c
index a05761a..1698221 100644
--- a/src/opencl_odf_aes_fmt.c
+++ b/src/opencl_odf_aes_fmt.c
@@ -457,6 +457,11 @@ struct fmt_main fmt_opencl_odf_aes = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_odf_fmt.c b/src/opencl_odf_fmt.c
index 5159eca..278df68 100644
--- a/src/opencl_odf_fmt.c
+++ b/src/opencl_odf_fmt.c
@@ -460,6 +460,11 @@ struct fmt_main fmt_opencl_odf = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_office2007_fmt.c b/src/opencl_office2007_fmt.c
index b19354b..eca13de 100644
--- a/src/opencl_office2007_fmt.c
+++ b/src/opencl_office2007_fmt.c
@@ -672,6 +672,11 @@ struct fmt_main fmt_opencl_office2007 = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_office2010_fmt.c b/src/opencl_office2010_fmt.c
index ffbe543..2153079 100644
--- a/src/opencl_office2010_fmt.c
+++ b/src/opencl_office2010_fmt.c
@@ -670,6 +670,11 @@ struct fmt_main fmt_opencl_office2010 = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_office2013_fmt.c b/src/opencl_office2013_fmt.c
index f645d72..eeb423c 100644
--- a/src/opencl_office2013_fmt.c
+++ b/src/opencl_office2013_fmt.c
@@ -663,6 +663,11 @@ struct fmt_main fmt_opencl_office2013 = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_pbkdf2_hmac_sha256_fmt.c b/src/opencl_pbkdf2_hmac_sha256_fmt.c
index 13d2751..adf5b4d 100644
--- a/src/opencl_pbkdf2_hmac_sha256_fmt.c
+++ b/src/opencl_pbkdf2_hmac_sha256_fmt.c
@@ -496,6 +496,11 @@ struct fmt_main fmt_opencl_pbkdf2_hmac_sha256 = {
 	fmt_default_split,
 	binary,
 	get_salt,
+#if FMT_MAIN_VERSION > 11
+        {
+        	fmt_default_iteration_count,
+        },
+#endif
 	fmt_default_source,
 	{
 		binary_hash_0,
diff --git a/src/opencl_phpass_fmt.c b/src/opencl_phpass_fmt.c
index bb054b7..b4bb41d 100644
--- a/src/opencl_phpass_fmt.c
+++ b/src/opencl_phpass_fmt.c
@@ -443,6 +443,11 @@ struct fmt_main fmt_opencl_phpass = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/opencl_pwsafe_fmt.c b/src/opencl_pwsafe_fmt.c
index 4af1a3c..cd57323 100644
--- a/src/opencl_pwsafe_fmt.c
+++ b/src/opencl_pwsafe_fmt.c
@@ -416,6 +416,11 @@ struct fmt_main fmt_opencl_pwsafe = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_rakp_fmt.c b/src/opencl_rakp_fmt.c
index 7c0848a..d1c686a 100644
--- a/src/opencl_rakp_fmt.c
+++ b/src/opencl_rakp_fmt.c
@@ -479,6 +479,11 @@ struct fmt_main fmt_opencl_rakp = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_rar_fmt.c b/src/opencl_rar_fmt.c
index cd989fa..e3cd39d 100644
--- a/src/opencl_rar_fmt.c
+++ b/src/opencl_rar_fmt.c
@@ -1093,6 +1093,11 @@ struct fmt_main fmt_opencl_rar = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_rawmd4_fmt.c b/src/opencl_rawmd4_fmt.c
index 1274942..1edf47b 100644
--- a/src/opencl_rawmd4_fmt.c
+++ b/src/opencl_rawmd4_fmt.c
@@ -409,6 +409,11 @@ struct fmt_main fmt_opencl_rawMD4 = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_rawmd5_fmt.c b/src/opencl_rawmd5_fmt.c
index 369af87..7cc12ff 100644
--- a/src/opencl_rawmd5_fmt.c
+++ b/src/opencl_rawmd5_fmt.c
@@ -405,6 +405,11 @@ struct fmt_main fmt_opencl_rawMD5 = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_rawsha1_fmt.c b/src/opencl_rawsha1_fmt.c
index ead6776..46e8ad9 100644
--- a/src/opencl_rawsha1_fmt.c
+++ b/src/opencl_rawsha1_fmt.c
@@ -394,6 +394,11 @@ struct fmt_main fmt_opencl_rawSHA1 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_rawsha256_fmt.c b/src/opencl_rawsha256_fmt.c
index bc41bb4..071183e 100644
--- a/src/opencl_rawsha256_fmt.c
+++ b/src/opencl_rawsha256_fmt.c
@@ -547,6 +547,11 @@ struct fmt_main fmt_opencl_rawsha256 = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/opencl_rawsha512-ng_fmt.c b/src/opencl_rawsha512-ng_fmt.c
index 401d327..e6a4a75 100644
--- a/src/opencl_rawsha512-ng_fmt.c
+++ b/src/opencl_rawsha512-ng_fmt.c
@@ -708,6 +708,10 @@ struct fmt_main fmt_opencl_rawsha512_ng = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		}
 		fmt_default_source,
 		{
 			binary_hash_0,
@@ -764,6 +768,11 @@ struct fmt_main fmt_opencl_xsha512_ng = {
 		split_x,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/opencl_rawsha512_fmt.c b/src/opencl_rawsha512_fmt.c
index 682e46e..2457d57 100644
--- a/src/opencl_rawsha512_fmt.c
+++ b/src/opencl_rawsha512_fmt.c
@@ -445,6 +445,11 @@ struct fmt_main fmt_opencl_rawsha512 = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/opencl_strip_fmt.c b/src/opencl_strip_fmt.c
index 3e55e1f..65149e4 100644
--- a/src/opencl_strip_fmt.c
+++ b/src/opencl_strip_fmt.c
@@ -389,6 +389,11 @@ struct fmt_main fmt_opencl_strip = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/opencl_sxc_fmt.c b/src/opencl_sxc_fmt.c
index 8cf4a80..eebc17b 100644
--- a/src/opencl_sxc_fmt.c
+++ b/src/opencl_sxc_fmt.c
@@ -474,6 +474,11 @@ struct fmt_main fmt_opencl_sxc = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/opencl_wpapsk_fmt.c b/src/opencl_wpapsk_fmt.c
index 47f9f42..4a08a11 100644
--- a/src/opencl_wpapsk_fmt.c
+++ b/src/opencl_wpapsk_fmt.c
@@ -513,6 +513,11 @@ struct fmt_main fmt_opencl_wpapsk = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/opencl_xsha512_fmt.c b/src/opencl_xsha512_fmt.c
index d3fca77..ac67ccb 100644
--- a/src/opencl_xsha512_fmt.c
+++ b/src/opencl_xsha512_fmt.c
@@ -523,6 +523,11 @@ struct fmt_main fmt_opencl_xsha512 = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/openssl_enc_fmt_plug.c b/src/openssl_enc_fmt_plug.c
index 618fabc..c19af4c 100644
--- a/src/openssl_enc_fmt_plug.c
+++ b/src/openssl_enc_fmt_plug.c
@@ -416,6 +416,11 @@ struct fmt_main fmt_openssl = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/oracle11_fmt_plug.c b/src/oracle11_fmt_plug.c
index 8a17e5f..eb2a634 100644
--- a/src/oracle11_fmt_plug.c
+++ b/src/oracle11_fmt_plug.c
@@ -438,6 +438,11 @@ struct fmt_main fmt_oracle11 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/oracle_fmt_plug.c b/src/oracle_fmt_plug.c
index 23318f1..0d78c93 100644
--- a/src/oracle_fmt_plug.c
+++ b/src/oracle_fmt_plug.c
@@ -355,6 +355,11 @@ struct fmt_main fmt_oracle = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash0,
diff --git a/src/panama_fmt_plug.c b/src/panama_fmt_plug.c
index 6344b50..4531218 100644
--- a/src/panama_fmt_plug.c
+++ b/src/panama_fmt_plug.c
@@ -187,6 +187,11 @@ struct fmt_main fmt_panama_ = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/pbkdf2-hmac-sha1_fmt_plug.c b/src/pbkdf2-hmac-sha1_fmt_plug.c
index b042421..7246ce3 100644
--- a/src/pbkdf2-hmac-sha1_fmt_plug.c
+++ b/src/pbkdf2-hmac-sha1_fmt_plug.c
@@ -336,6 +336,11 @@ struct fmt_main fmt_pbkdf2_hmac_sha1 = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/pbkdf2-hmac-sha512_fmt_plug.c b/src/pbkdf2-hmac-sha512_fmt_plug.c
index 8809627..8a32ce9 100644
--- a/src/pbkdf2-hmac-sha512_fmt_plug.c
+++ b/src/pbkdf2-hmac-sha512_fmt_plug.c
@@ -387,6 +387,11 @@ struct fmt_main fmt_pbkdf2_hmac_sha512 = {
 		split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/pbkdf2_hmac_sha256_fmt_plug.c b/src/pbkdf2_hmac_sha256_fmt_plug.c
index a7ac9de..ab6546c 100644
--- a/src/pbkdf2_hmac_sha256_fmt_plug.c
+++ b/src/pbkdf2_hmac_sha256_fmt_plug.c
@@ -629,6 +629,11 @@ struct fmt_main fmt_pbkdf2_hmac_sha256 = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/pdf_fmt_plug.c b/src/pdf_fmt_plug.c
index 1363d45..5a44042 100644
--- a/src/pdf_fmt_plug.c
+++ b/src/pdf_fmt_plug.c
@@ -643,6 +643,11 @@ struct fmt_main fmt_pdf = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/pfx_fmt.c b/src/pfx_fmt.c
index 54b5c72..39ff691 100644
--- a/src/pfx_fmt.c
+++ b/src/pfx_fmt.c
@@ -251,6 +251,11 @@ struct fmt_main fmt_pfx = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/pkzip_fmt_plug.c b/src/pkzip_fmt_plug.c
index 3bc5a28..7e4c345 100644
--- a/src/pkzip_fmt_plug.c
+++ b/src/pkzip_fmt_plug.c
@@ -1643,6 +1643,11 @@ struct fmt_main fmt_pkzip = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash0,
diff --git a/src/postgres_fmt_plug.c b/src/postgres_fmt_plug.c
index 087e932..5e34128 100644
--- a/src/postgres_fmt_plug.c
+++ b/src/postgres_fmt_plug.c
@@ -274,6 +274,11 @@ struct fmt_main fmt_postgres = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/pst_fmt_plug.c b/src/pst_fmt_plug.c
index d871843..3e2fd64 100644
--- a/src/pst_fmt_plug.c
+++ b/src/pst_fmt_plug.c
@@ -169,6 +169,11 @@ struct fmt_main fmt_pst = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/putty_fmt_plug.c b/src/putty_fmt_plug.c
index 10af9d1..345d8b0 100644
--- a/src/putty_fmt_plug.c
+++ b/src/putty_fmt_plug.c
@@ -396,6 +396,11 @@ struct fmt_main fmt_putty = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/pwsafe_fmt_plug.c b/src/pwsafe_fmt_plug.c
index 51d9e98..659c307 100644
--- a/src/pwsafe_fmt_plug.c
+++ b/src/pwsafe_fmt_plug.c
@@ -570,6 +570,11 @@ struct fmt_main fmt_pwsafe = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/racf_fmt_plug.c b/src/racf_fmt_plug.c
index 83eb75f..9a7aff2 100644
--- a/src/racf_fmt_plug.c
+++ b/src/racf_fmt_plug.c
@@ -323,6 +323,11 @@ struct fmt_main fmt_racf = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/radmin_fmt_plug.c b/src/radmin_fmt_plug.c
index 5a96da6..cb95723 100644
--- a/src/radmin_fmt_plug.c
+++ b/src/radmin_fmt_plug.c
@@ -190,6 +190,11 @@ struct fmt_main fmt_radmin = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rakp_fmt_plug.c b/src/rakp_fmt_plug.c
index 121d750..dff7517 100644
--- a/src/rakp_fmt_plug.c
+++ b/src/rakp_fmt_plug.c
@@ -479,6 +479,11 @@ struct fmt_main fmt_rakp = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rar5_fmt_plug.c b/src/rar5_fmt_plug.c
index e1a91f6..2d39802 100644
--- a/src/rar5_fmt_plug.c
+++ b/src/rar5_fmt_plug.c
@@ -337,6 +337,11 @@ struct fmt_main fmt_rar5 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rar_fmt.c b/src/rar_fmt.c
index 93a1ba2..565c6d8 100644
--- a/src/rar_fmt.c
+++ b/src/rar_fmt.c
@@ -816,6 +816,11 @@ struct fmt_main fmt_rar = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/rawBLAKE2_512_fmt_plug.c b/src/rawBLAKE2_512_fmt_plug.c
index ce1917f..7658b30 100644
--- a/src/rawBLAKE2_512_fmt_plug.c
+++ b/src/rawBLAKE2_512_fmt_plug.c
@@ -238,6 +238,11 @@ struct fmt_main fmt_rawBLAKE2 = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawKeccak_256_fmt_plug.c b/src/rawKeccak_256_fmt_plug.c
index b0a9367..b8f0688 100644
--- a/src/rawKeccak_256_fmt_plug.c
+++ b/src/rawKeccak_256_fmt_plug.c
@@ -243,6 +243,11 @@ struct fmt_main fmt_rawKeccak_256 = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawKeccak_512_fmt_plug.c b/src/rawKeccak_512_fmt_plug.c
index 6c9151d..8aca0e0 100644
--- a/src/rawKeccak_512_fmt_plug.c
+++ b/src/rawKeccak_512_fmt_plug.c
@@ -238,6 +238,11 @@ struct fmt_main fmt_rawKeccak = {
 		split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawMD4_fmt_plug.c b/src/rawMD4_fmt_plug.c
index 3c370f8..d59ae25 100644
--- a/src/rawMD4_fmt_plug.c
+++ b/src/rawMD4_fmt_plug.c
@@ -381,6 +381,11 @@ struct fmt_main fmt_rawMD4 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawMD5_fmt_plug.c b/src/rawMD5_fmt_plug.c
index 1cd878c..cb1f0e2 100644
--- a/src/rawMD5_fmt_plug.c
+++ b/src/rawMD5_fmt_plug.c
@@ -350,6 +350,11 @@ struct fmt_main fmt_rawMD5 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawSHA0_fmt.c b/src/rawSHA0_fmt.c
index 581810a..47da20d 100644
--- a/src/rawSHA0_fmt.c
+++ b/src/rawSHA0_fmt.c
@@ -162,6 +162,11 @@ struct fmt_main fmt_rawSHA0 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawSHA1_fmt_plug.c b/src/rawSHA1_fmt_plug.c
index ed2a54b..f157c28 100644
--- a/src/rawSHA1_fmt_plug.c
+++ b/src/rawSHA1_fmt_plug.c
@@ -355,6 +355,11 @@ struct fmt_main fmt_rawSHA1 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawSHA1_linkedIn_fmt_plug.c b/src/rawSHA1_linkedIn_fmt_plug.c
index 1b52647..3e760e9 100644
--- a/src/rawSHA1_linkedIn_fmt_plug.c
+++ b/src/rawSHA1_linkedIn_fmt_plug.c
@@ -387,6 +387,11 @@ struct fmt_main fmt_rawSHA1_LI = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		source,
 		{
 			binary_hash_0,
diff --git a/src/rawSHA1_ng_fmt.c b/src/rawSHA1_ng_fmt.c
index e95efbc..8a03e3f 100644
--- a/src/rawSHA1_ng_fmt.c
+++ b/src/rawSHA1_ng_fmt.c
@@ -739,6 +739,11 @@ struct fmt_main fmt_sha1_ng = {
         .split              = sha1_fmt_split,
         .binary             = sha1_fmt_binary,
         .salt               = fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+        .iteration_count    = {
+	    [0] = fmt_default_iteration_count,
+        },
+#endif
         .source             = fmt_default_source,
         .salt_hash          = fmt_default_salt_hash,
         .set_salt           = fmt_default_set_salt,
diff --git a/src/rawSHA224_fmt_plug.c b/src/rawSHA224_fmt_plug.c
index e58ec08..18cef2e 100644
--- a/src/rawSHA224_fmt_plug.c
+++ b/src/rawSHA224_fmt_plug.c
@@ -324,6 +324,11 @@ struct fmt_main fmt_rawSHA224 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawSHA256_fmt_plug.c b/src/rawSHA256_fmt_plug.c
index 9c7b5e0..429c4a6 100644
--- a/src/rawSHA256_fmt_plug.c
+++ b/src/rawSHA256_fmt_plug.c
@@ -298,6 +298,11 @@ struct fmt_main fmt_rawSHA256 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawSHA256_ng_fmt.c b/src/rawSHA256_ng_fmt.c
index 7ed9de3..4df2100 100644
--- a/src/rawSHA256_ng_fmt.c
+++ b/src/rawSHA256_ng_fmt.c
@@ -544,6 +544,11 @@ struct fmt_main fmt_rawSHA256_ng = {
         split,
         get_binary,
         fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+        {
+		fmt_default_iteration_count,
+        },
+#endif
 #if FMT_MAIN_VERSION > 9
         fmt_default_source,
 #endif
diff --git a/src/rawSHA256_ng_i_fmt.c b/src/rawSHA256_ng_i_fmt.c
index f9e010e..5c01f42 100644
--- a/src/rawSHA256_ng_i_fmt.c
+++ b/src/rawSHA256_ng_i_fmt.c
@@ -422,6 +422,11 @@ struct fmt_main fmt_rawSHA256_ng_i = {
         split,
         get_binary,
         fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+        {
+        	fmt_default_iteration_count,
+},
+#endif
 #if FMT_MAIN_VERSION > 9
         fmt_default_source,
 #endif
diff --git a/src/rawSHA384_fmt_plug.c b/src/rawSHA384_fmt_plug.c
index b7338fe..ea0bfc9 100644
--- a/src/rawSHA384_fmt_plug.c
+++ b/src/rawSHA384_fmt_plug.c
@@ -348,6 +348,11 @@ struct fmt_main fmt_rawSHA384 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawSHA512_fmt_plug.c b/src/rawSHA512_fmt_plug.c
index 98aadf3..402eaed 100644
--- a/src/rawSHA512_fmt_plug.c
+++ b/src/rawSHA512_fmt_plug.c
@@ -354,6 +354,11 @@ struct fmt_main fmt_raw0_SHA512 = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/rawSHA512_ng_fmt.c b/src/rawSHA512_ng_fmt.c
index 35446bc..b57db4c 100644
--- a/src/rawSHA512_ng_fmt.c
+++ b/src/rawSHA512_ng_fmt.c
@@ -557,6 +557,11 @@ struct fmt_main fmt_rawSHA512_ng = {
         split,
         get_binary,
         fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+        {
+        	fmt_default_iteration_count,
+        },
+#endif
 #if FMT_MAIN_VERSION > 9
         fmt_default_source,
 #endif
diff --git a/src/rawSHA512_ng_i_fmt.c b/src/rawSHA512_ng_i_fmt.c
index 14677c7..a56764b 100644
--- a/src/rawSHA512_ng_i_fmt.c
+++ b/src/rawSHA512_ng_i_fmt.c
@@ -439,6 +439,11 @@ struct fmt_main fmt_rawSHA512_ng_i = {
         split,
         get_binary,
         fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+        {
+        	fmt_default_iteration_count,
+        },
+#endif
 #if FMT_MAIN_VERSION > 9
         fmt_default_source,
 #endif
diff --git a/src/rawmd5u_fmt_plug.c b/src/rawmd5u_fmt_plug.c
index e872c98..507355d 100644
--- a/src/rawmd5u_fmt_plug.c
+++ b/src/rawmd5u_fmt_plug.c
@@ -584,6 +584,11 @@ struct fmt_main fmt_rawmd5uthick = {
 		split,
 		binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/ripemd_fmt_plug.c b/src/ripemd_fmt_plug.c
index 7f81002..1608789 100644
--- a/src/ripemd_fmt_plug.c
+++ b/src/ripemd_fmt_plug.c
@@ -236,6 +236,11 @@ struct fmt_main fmt_ripemd_160 = {
 		fmt_default_split,
 		get_binary_160,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -293,6 +298,11 @@ struct fmt_main fmt_ripemd_128 = {
 		fmt_default_split,
 		get_binary_128,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/salted_sha1_fmt_plug.c b/src/salted_sha1_fmt_plug.c
index 44e21c7..0b0f3ba 100644
--- a/src/salted_sha1_fmt_plug.c
+++ b/src/salted_sha1_fmt_plug.c
@@ -380,6 +380,11 @@ struct fmt_main fmt_saltedsha = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/sapB_fmt_plug.c b/src/sapB_fmt_plug.c
index 9c87eb6..421f709 100644
--- a/src/sapB_fmt_plug.c
+++ b/src/sapB_fmt_plug.c
@@ -689,6 +689,11 @@ struct fmt_main fmt_sapB = {
 		split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/sapG_fmt_plug.c b/src/sapG_fmt_plug.c
index f819983..d029c1d 100644
--- a/src/sapG_fmt_plug.c
+++ b/src/sapG_fmt_plug.c
@@ -747,6 +747,11 @@ struct fmt_main fmt_sapG = {
 		split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/scrypt_fmt.c b/src/scrypt_fmt.c
index 6aa7db8..fa28fb6 100644
--- a/src/scrypt_fmt.c
+++ b/src/scrypt_fmt.c
@@ -348,6 +348,11 @@ struct fmt_main fmt_scrypt = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/sha1_gen_fmt_plug.c b/src/sha1_gen_fmt_plug.c
index 6ef6416..8b1d706 100644
--- a/src/sha1_gen_fmt_plug.c
+++ b/src/sha1_gen_fmt_plug.c
@@ -227,6 +227,11 @@ struct fmt_main fmt_sha1_gen = {
 		fmt_default_split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/siemens-s7_fmt_plug.c b/src/siemens-s7_fmt_plug.c
index 1df1947..2cc768c 100644
--- a/src/siemens-s7_fmt_plug.c
+++ b/src/siemens-s7_fmt_plug.c
@@ -237,6 +237,11 @@ struct fmt_main fmt_s7 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/sip_fmt_plug.c b/src/sip_fmt_plug.c
index d06c5ee..903661d 100644
--- a/src/sip_fmt_plug.c
+++ b/src/sip_fmt_plug.c
@@ -345,6 +345,11 @@ struct fmt_main fmt_sip = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/skein_fmt_plug.c b/src/skein_fmt_plug.c
index f40471c..5c0591c 100644
--- a/src/skein_fmt_plug.c
+++ b/src/skein_fmt_plug.c
@@ -236,6 +236,11 @@ struct fmt_main fmt_skein_256 = {
 		fmt_default_split,
 		get_binary_256,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -293,6 +298,11 @@ struct fmt_main fmt_skein_512 = {
 		fmt_default_split,
 		get_binary_512,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/snefru_fmt_plug.c b/src/snefru_fmt_plug.c
index fa07e6a..bb32738 100644
--- a/src/snefru_fmt_plug.c
+++ b/src/snefru_fmt_plug.c
@@ -236,6 +236,11 @@ struct fmt_main fmt_snefru_256 = {
 		fmt_default_split,
 		get_binary_256,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -293,6 +298,11 @@ struct fmt_main fmt_snefru_128 = {
 		fmt_default_split,
 		get_binary_128,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/ssh_fmt.c b/src/ssh_fmt.c
index 3017a2d..3e78ad8 100644
--- a/src/ssh_fmt.c
+++ b/src/ssh_fmt.c
@@ -433,6 +433,11 @@ struct fmt_main fmt_ssh = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/ssh_ng_fmt_plug.c b/src/ssh_ng_fmt_plug.c
index 5fdb806..5b924e0 100644
--- a/src/ssh_ng_fmt_plug.c
+++ b/src/ssh_ng_fmt_plug.c
@@ -419,6 +419,11 @@ struct fmt_main fmt_sshng = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/ssha512_fmt_plug.c b/src/ssha512_fmt_plug.c
index 5f27214..6a0a586 100644
--- a/src/ssha512_fmt_plug.c
+++ b/src/ssha512_fmt_plug.c
@@ -232,6 +232,11 @@ struct fmt_main fmt_saltedsha2 = {
 		fmt_default_split,
 		binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/strip_fmt_plug.c b/src/strip_fmt_plug.c
index d7548e9..b2b7453 100644
--- a/src/strip_fmt_plug.c
+++ b/src/strip_fmt_plug.c
@@ -282,6 +282,11 @@ struct fmt_main fmt_strip = {
 		fmt_default_split,
 		fmt_default_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash
diff --git a/src/sunmd5_fmt_plug.c b/src/sunmd5_fmt_plug.c
index 8d5590e..18c3296 100644
--- a/src/sunmd5_fmt_plug.c
+++ b/src/sunmd5_fmt_plug.c
@@ -896,6 +896,11 @@ struct fmt_main fmt_sunmd5 = {
 		fmt_default_split,
 		binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/sxc_fmt_plug.c b/src/sxc_fmt_plug.c
index b65c861..2941f00 100644
--- a/src/sxc_fmt_plug.c
+++ b/src/sxc_fmt_plug.c
@@ -373,6 +373,11 @@ struct fmt_main fmt_sxc = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/tcp_md5_fmt_plug.c b/src/tcp_md5_fmt_plug.c
index 6a12b2e..cff171f 100644
--- a/src/tcp_md5_fmt_plug.c
+++ b/src/tcp_md5_fmt_plug.c
@@ -233,6 +233,11 @@ struct fmt_main fmt_tcpmd5 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/tiger_fmt_plug.c b/src/tiger_fmt_plug.c
index b23ccf0..b801358 100644
--- a/src/tiger_fmt_plug.c
+++ b/src/tiger_fmt_plug.c
@@ -188,6 +188,11 @@ struct fmt_main fmt_tiger = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/trip_fmt.c b/src/trip_fmt.c
index 051e95d..04e320d 100644
--- a/src/trip_fmt.c
+++ b/src/trip_fmt.c
@@ -606,6 +606,11 @@ struct fmt_main fmt_trip = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash_0,
diff --git a/src/truecrypt_fmt.c b/src/truecrypt_fmt.c
index 6f2ebe1..62902cf 100644
--- a/src/truecrypt_fmt.c
+++ b/src/truecrypt_fmt.c
@@ -329,6 +329,11 @@ struct fmt_main fmt_truecrypt = {
 		ms_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash,
@@ -385,6 +390,11 @@ struct fmt_main fmt_truecrypt_sha512 = {
 		ms_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash,
@@ -441,6 +451,11 @@ struct fmt_main fmt_truecrypt_whirlpool = {
 		ms_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			binary_hash,
diff --git a/src/vms_fmt_plug.c b/src/vms_fmt_plug.c
index 62924e0..59f6e7f 100644
--- a/src/vms_fmt_plug.c
+++ b/src/vms_fmt_plug.c
@@ -243,6 +243,11 @@ struct fmt_main fmt_VMS = {
 		fmt_vms_split,
 		(void *(*)(char *))VMS_std_get_binary,
 		(void *(*)(char *))VMS_std_get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/vnc_fmt_plug.c b/src/vnc_fmt_plug.c
index ee99ba8..c81d7c4 100644
--- a/src/vnc_fmt_plug.c
+++ b/src/vnc_fmt_plug.c
@@ -290,6 +290,11 @@ struct fmt_main fmt_vnc = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/wbb3_fmt_plug.c b/src/wbb3_fmt_plug.c
index da34785..720da7f 100644
--- a/src/wbb3_fmt_plug.c
+++ b/src/wbb3_fmt_plug.c
@@ -276,6 +276,11 @@ struct fmt_main fmt_wbb3 = {
 		fmt_default_split,
 		get_binary,
 		get_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/whirlpool_fmt_plug.c b/src/whirlpool_fmt_plug.c
index 30b910a..f796417 100644
--- a/src/whirlpool_fmt_plug.c
+++ b/src/whirlpool_fmt_plug.c
@@ -243,6 +243,11 @@ struct fmt_main fmt_whirlpool_0 = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -300,6 +305,11 @@ struct fmt_main fmt_whirlpool_1 = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
@@ -356,6 +366,11 @@ struct fmt_main fmt_whirlpool = {
 		fmt_default_split,
 		get_binary,
 		fmt_default_salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/wow_srp_fmt_plug.c b/src/wow_srp_fmt_plug.c
index 6d043a8..20e955d 100644
--- a/src/wow_srp_fmt_plug.c
+++ b/src/wow_srp_fmt_plug.c
@@ -430,6 +430,11 @@ struct fmt_main fmt_blizzard = {
 		split,
 		get_binary,
 		salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		fmt_default_source,
 		{
 			fmt_default_binary_hash_0,
diff --git a/src/wpapsk_fmt.c b/src/wpapsk_fmt.c
index 0f4281c..a0d321d 100644
--- a/src/wpapsk_fmt.c
+++ b/src/wpapsk_fmt.c
@@ -409,6 +409,11 @@ struct fmt_main fmt_wpapsk = {
 		    fmt_default_split,
 		    binary,
 		    salt,
+#if FMT_MAIN_VERSION > 11
+		{
+			fmt_default_iteration_count,
+		},
+#endif
 		    fmt_default_source,
 		    {
 				binary_hash_0,
-- 
1.8.1.4


Powered by blists - more mailing lists

Your e-mail address:

Powered by Openwall GNU/*/Linux - Powered by OpenVZ