The maximum length of the key should be the one obtained
by calling mcrypt_enc_get_key_size() and every
value smaller than this is legal. The IV should normally have
the size of the algorithms block size, but you must obtain
the size by calling
mcrypt_enc_get_iv_size(). IV is ignored in ECB. IV
MUST exist in CFB, CBC, STREAM, nOFB and OFB modes. It needs
to be random and unique (but not secret). The same IV must be
used for encryption/decryption. If you do not want to use it
you should set it to zeros, but this is not recommended. The
function returns a negative value on error.
You need to call this function before every call to
mcrypt_generic() or
mdecrypt_generic().
See for an example
mcrypt_module_open() and the entry on
mcrypt_generic_deinit().