Exemplo n.º 1
0
bool keysig_search(int method, uint8_t *enc_buf, size_t buf_sz,
    keysig_notify_fn_t notify, void *user, int nr_threads)
{
    /* init producer */
    producer_init();
    /* init search */
    keysig_search_init();
    pthread_mutex_init(&g_keysig_search.mutex, NULL);
    g_keysig_search.enc_buf = enc_buf;
    g_keysig_search.enc_buf_sz = buf_sz;
    g_keysig_search.found_keysig = false;
    /* get methods */
    routine_t worker_fn = NULL;
    routine_t producer_fn = NULL;
    if(method == KEYSIG_SEARCH_ASCII_HEX)
    {
        worker_fn = hex_worker;
        producer_fn = hex_producer;
    }
    /* create workers */
    pthread_t *worker = malloc(sizeof(pthread_t) * nr_threads);
    pthread_t producer;
    for(int i = 0; i < nr_threads; i++)
        pthread_create(&worker[i], NULL, worker_fn, NULL);
    pthread_create(&producer, NULL, producer_fn, NULL);
    /* wait for all threads */
    pthread_join(producer, NULL);
    for(int i = 0; i < nr_threads; i++)
        pthread_join(worker[i], NULL);
    free(worker);
    if(g_keysig_search.found_keysig)
        notify(user, g_keysig_search.key, g_keysig_search.sig);
    return g_keysig_search.found_keysig;
}
Exemplo n.º 2
0
bool keysig_search_ascii_stupid(uint8_t *cipher, keysig_notify_fn_t notify, void *user)
{
    keysig_search_init();
    memcpy(g_cipher, cipher, 8);
    g_notify = notify;
    g_user = user;
#if 1
    return search_stupid(4, 4) ||
           search_stupid(3, 5) || search_stupid(5, 3) ||
           search_stupid(2, 6) || search_stupid(6, 2) ||
           search_stupid(1, 7) || search_stupid(7, 1) ||
           search_stupid(0, 8) || search_stupid(8, 0);
#else
#define do(i) for(int a##i = 0; a##i < sizeof(hex_digits); a##i++) { g_key[i] = hex_digits[a##i];
#define od() }

    do(0)do(1)do(2)do(3)do(4)do(5)do(6)do(7)
                                    if(check_stupid()) return true;
    od()od()od()od()od()od()od()od()
#undef do
#undef od
    return false;
#endif
}
Exemplo n.º 3
0
bool keysig_search_ascii_brute(uint8_t *cipher, keysig_notify_fn_t notify, void *user)
{
    keysig_search_init();
    return false;
}