All pastes #486187 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-05-13 19:58 UTC
rendered paste body
bool key_check (const unsigned char *key) {
    unsigned long v = 3;
    unsigned char i = 0;
    while (i < 12)
	v += key [i++] ^ v * 2;
    return key [12] == v % 10;
}

inline unsigned char key_product (const unsigned char *key) {
    return key [1];
}

unsigned long key_public (const unsigned char *key) {
    unsigned char pub [8];
    unsigned char i = 2, j = 0;
    while (i < 10)
	pub [j++] = key [i++];
    return toint (pub, 8);
}

inline unsigned long key_private (const unsigned char *key) {
    return toint (key + 10, 3);
}

void key_decode (const unsigned char *key, unsigned char *deckey) {
    unsigned char  seq [] = {6, 0, 2, 9, 3, 11, 1, 7, 5, 4, 10, 8};
    unsigned char  i      = 11;
    unsigned long  v      = 330078017;
    do {
	seq [i] = key [seq [i]];
	if (seq [i] < 8) {
	    seq [i] ^= v & 7;
	    v >>= 3;
	} else
	    seq [i] ^= i & 1;
	deckey [i] = seq [i];
    } while (i--);
}