All pastes #732314 Raw Edit

Miscellany

public c v1 · immutable
·published 2007-10-10 21:20 UTC
rendered paste body
#include "md5.h"#include <string.h>#include <stdio.h>unsigned int lsrf(); /* Get a random number */static void checksum_hash(const unsigned char* input, unsigned char hashstring[33]){    md5_state_t state;    md5_byte_t result[16];    unsigned int checksum = 0;    const unsigned char *temp;    for(temp = input; *temp != '\0'; temp++)        checksum += *temp;    checksum %= 9;    checksum++;    md5_init(&state);    md5_append(&state, input, strlen(input));    do    {        md5_finish(&state, result);        sprintf(hashstring,            "%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X",            result[0], result[1], result[2], result[3], result[4], result[5],            result[6], result[7], result[8], result[9], result[10], result[11],            result[12], result[13], result[14], result[15]);        md5_init(&state);        md5_append(&state, hashstring, 32);        checksum--;    }while(checksum != 0);}/*int main(int argc, char* argv[]){    char string[33];    checksum_hash("1234", string);    printf(string);    return 0;}*/void generate(const unsigned char* name, unsigned char* code){    static const char product_hash[4] = "A190";    static const char available_chars[32] = "ABCDEFGHJKLMNPQRSTUVWXY123456789";    static const unsigned int divisors[] = {9, 2, 6};    unsigned char name_hash[33];    unsigned int i, j, sum;    for(i = 0; i < 3; i++)    {        for(sum = j = 0; j < 4; j++)        {            *code = available_chars[lsrf() % 32];            sum += *code;            code++;        }        do        {            *code = available_chars[lsrf() % 32];        } while(((sum + *code) % 256) % divisors[i] != 0);        code++;        *code = '-';        code++;    }    checksum_hash(name, name_hash);    for(i = 0; i < 4; i++)    {        *code = available_chars[(name_hash[i] + product_hash[i]) % 32];        code++;    }}