|
Message-ID: <20150625135928.GA13240@openwall.com> Date: Thu, 25 Jun 2015 16:59:28 +0300 From: Aleksey Cherepanov <lyosha@...nwall.com> To: john-dev@...ts.openwall.com Subject: Re: light way to make extensions to format interface On Thu, Jun 25, 2015 at 03:24:02PM +0300, Aleksey Cherepanov wrote: > In addition to current structure, there may be an optional array with > pairs: string literal for method name and pointer to method > implementation. The array is of variable length and finished by NULL, > just like test vector. So it would be possible for a format to > announce only implemented methods. Alexander Cherepanov suggested to make macros that place methods into structure. I think a method is needed to be called with a pointer to structure then in method. > For example, something like the following can be added only in formats > that support rainbow tables: > > struct fmt_extensions raw_md5_format_extensions = { > { "get_hash_for_rainbow_tables", raw_md5_get_hash_for_rainbow_tables }, > NULL > }; Example of macros approach: void md5_register_extensions(struct fmt_extensions *exts) { #define R(s, name, method) EXT_REGISTER((s), (name), (method)) R(GET_HASH_FOR_RAINBOW_TABLES, raw_md5_get_hash_for_rainbow_tables); #undef R } X-Macro can be used for that: #define GET_HASH_FOR_RAINBOW_TABLES raw_md5_get_hash_for_rainbow_tables #include "make_register_extension.h" where make_register_extension.h contains something like the following: void md5_register_extensions(struct fmt_extensions *exts) { #ifdef GET_HASH_FOR_RAINBOW_TABLES EXT_REGISTER(exts, EXT_GET_HASH_FOR_RAINBOW_TABLES, GET_HASH_FOR_RAINBOW_TABLES); #endif #ifdef SOME_OTHER_EXTENSION_METHOD EXT_REGISTER(exts, EXT_SOEM, SOME_OTHER_EXTENSION_METHOD); #endif } Well, EXT_REGISTER() abstraction is not really needed here. Thanks! -- Regards, Aleksey Cherepanov
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.