#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#if defined(_WIN32)
#include <windows.h>
void SLEEP(unsigned int ms) { Sleep(ms); }
#else
#include <unistd.h>
void SLEEP(unsigned int ms) { usleep(ms); }
#endif
long generate_crypt_key(int seed)
{
int o_seed
= seed
, seedlen
= (int)log10((double)seed
)+1, o_seedlen
= (int)log10((double)o_seed
)+1; char keystr
[o_seedlen
+seedlen
+7]; long key
; seed
^= time(NULL
);
int b = 1, c = 0, *a = &seed;
int a_1 = ~(int)a & c; int a_2 = 1;
for(int i = 0; i < 7; i++) a_2 *= i;
if((int)a == a_1) *a = 0;
int a_3 = (!a) ? (c = 1):(b = 0);
int a_4 = (int)a | (b + ~c);
*a = (int)a >> c;
*a = (int)a & 0xF8;
*a
= (int)a
<< ((int)pow(b
,c
)+(int)pow(c
,b
));
if(*a == 0) return -1;
*a = (int)a ^ ((a_1|a_2)&(a_3|a_4));
*a = ((int)a | (o_seed ^ 0xF2)) & ((int)&a);
sprintf(keystr
, "%d", o_seed
|seed
); sprintf(keystr
, "%s%d", keystr
, *a
); sprintf(keystr
, "%s%d", keystr
, &a
);
free((void*)a
); return key
; }
long *generate_keyset(long setsize, unsigned seed)
{
long *keyset
= malloc(setsize
); srand((unsigned int) seed
); srand((unsigned int) seed
^ (setsize
| 0xF6)); seed &= ((p*100000^t*100000) | (seed^(p&t)));
for(int i = 0; i < setsize; i++) {
keyset
[i
] = (generate_crypt_key
((seed
^rand
()) | ((seed
& (time(NULL
) ^ seed
))))<10000000)? generate_crypt_key
((seed
^rand
()) | ((seed
& (time(NULL
) ^ seed
))))*10000+rand(): generate_crypt_key
((seed
^rand
()) | ((seed
& (time(NULL
) ^ seed
)))); keyset
[i
] = abs(keyset
[i
]); SLEEP(1250);
}
return keyset;
}
int main(int argc, char **argv)
{ if(argc
!= 2) { printf("USAGE: %s SET_SIZE", argv
[0]); return -1; } unsigned int setsize
= atoi(argv
[1]); long *keyset = generate_keyset(setsize, seed);
for(int j = 0, p = 0; j < setsize; j++) {
p++;
if(p
>= 5) { printf("\n"); p
= 0; } }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2lmIGRlZmluZWQoX1dJTjMyKQoJI2luY2x1ZGUgPHdpbmRvd3MuaD4KCXZvaWQgU0xFRVAodW5zaWduZWQgaW50IG1zKSB7IFNsZWVwKG1zKTsgfQojZWxzZQoJI2luY2x1ZGUgPHVuaXN0ZC5oPgoJdm9pZCBTTEVFUCh1bnNpZ25lZCBpbnQgbXMpIHsgdXNsZWVwKG1zKTsgfQojZW5kaWYKCmxvbmcgZ2VuZXJhdGVfY3J5cHRfa2V5KGludCBzZWVkKQp7CglpbnQgb19zZWVkID0gc2VlZCwgc2VlZGxlbiA9IChpbnQpbG9nMTAoKGRvdWJsZSlzZWVkKSsxLCBvX3NlZWRsZW4gPSAoaW50KWxvZzEwKChkb3VibGUpb19zZWVkKSsxOwoJY2hhciBrZXlzdHJbb19zZWVkbGVuK3NlZWRsZW4rN107IGxvbmcga2V5OyBzZWVkIF49IHRpbWUoTlVMTCk7CgoJaW50IGIgPSAxLCBjID0gMCwgKmEgPSAmc2VlZDsgCglpbnQgYV8xID0gfihpbnQpYSAmIGM7IGludCBhXzIgPSAxOwoJZm9yKGludCBpID0gMDsgaSA8IDc7IGkrKykgYV8yICo9IGk7IAoJaWYoKGludClhID09IGFfMSkgKmEgPSAwOwoKCWludCBhXzMgPSAoIWEpID8gKGMgPSAxKTooYiA9IDApOyAKCWludCBhXzQgPSAoaW50KWEgfCAoYiArIH5jKTsKCSphID0gKGludClhID4+IGM7CgkqYSA9IChpbnQpYSAmIDB4Rjg7IAoJKmEgPSAoaW50KWEgPDwgKChpbnQpcG93KGIsYykrKGludClwb3coYyxiKSk7CgoJaWYoKmEgPT0gMCkgcmV0dXJuIC0xOyAKCSphID0gKGludClhIF4gKChhXzF8YV8yKSYoYV8zfGFfNCkpOwoJKmEgPSAoKGludClhIHwgKG9fc2VlZCBeIDB4RjIpKSAmICgoaW50KSZhKTsKCglzcHJpbnRmKGtleXN0ciwgIiVkIiwgb19zZWVkfHNlZWQpOwoJc3ByaW50ZihrZXlzdHIsICIlcyVkIiwga2V5c3RyLCAqYSk7CglzcHJpbnRmKGtleXN0ciwgIiVzJWQiLCBrZXlzdHIsICZhKTsKCglrZXkgPSAobG9uZylhYnMoYXRvaShrZXlzdHIpKSAmIHRpbWUoKHRpbWVfdCopKHRpbWUoTlVMTCkmc2VlZCkpOwoJZnJlZSgodm9pZCopYSk7IHJldHVybiBrZXk7Cn0KCmxvbmcgKmdlbmVyYXRlX2tleXNldChsb25nIHNldHNpemUsIHVuc2lnbmVkIHNlZWQpCnsKCWxvbmcgKmtleXNldCA9IG1hbGxvYyhzZXRzaXplKTsKCXNyYW5kKCh1bnNpZ25lZCBpbnQpIHNlZWQpOwoJaW50IHQgPSByYW5kKCk7CglzcmFuZCgodW5zaWduZWQgaW50KSBzZWVkIF4gKHNldHNpemUgfCAweEY2KSk7CglpbnQgcCA9IHNlZWQgXiByYW5kKCk7CglzcmFuZCgodW5zaWduZWQgaW50KSBzZWVkICYgdGltZShOVUxMKSk7CglzZWVkICY9ICgocCoxMDAwMDBedCoxMDAwMDApIHwgKHNlZWReKHAmdCkpKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBzZXRzaXplOyBpKyspIHsgCgkJc3JhbmQoKHVuc2lnbmVkIGludCkgcmFuZCgpKygoaSppKV5zZWVkKSk7IHNyYW5kKCh1bnNpZ25lZCBpbnQpIHJhbmQoKSk7CgkJa2V5c2V0W2ldID0gKGdlbmVyYXRlX2NyeXB0X2tleSgoc2VlZF5yYW5kKCkpIHwgKChzZWVkICYgKHRpbWUoTlVMTCkgXiBzZWVkKSkpKTwxMDAwMDAwMCk/CgkJCQkJIGdlbmVyYXRlX2NyeXB0X2tleSgoc2VlZF5yYW5kKCkpIHwgKChzZWVkICYgKHRpbWUoTlVMTCkgXiBzZWVkKSkpKSoxMDAwMCtyYW5kKCk6CgkJCQkJIGdlbmVyYXRlX2NyeXB0X2tleSgoc2VlZF5yYW5kKCkpIHwgKChzZWVkICYgKHRpbWUoTlVMTCkgXiBzZWVkKSkpKTsKCQlrZXlzZXRbaV0gPSBhYnMoa2V5c2V0W2ldKTsKCQlTTEVFUCgxMjUwKTsgCgl9CglyZXR1cm4ga2V5c2V0Owp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsgICBpZihhcmdjICE9IDIpIHsgcHJpbnRmKCJVU0FHRTogJXMgU0VUX1NJWkUiLCBhcmd2WzBdKTsgcmV0dXJuIC0xOyB9Cgl1bnNpZ25lZCBpbnQgc2V0c2l6ZSA9IGF0b2koYXJndlsxXSk7CglzcmFuZCgodW5zaWduZWQgaW50KSB0aW1lKE5VTEwpKTsKCXNyYW5kKCh1bnNpZ25lZCBpbnQpIHJhbmQoKSk7CglzcmFuZCgodW5zaWduZWQgaW50KSByYW5kKCkpOwoJaW50IHNlZWQgPSByYW5kKCkgXiB0aW1lKE5VTEwpOwoJc2VlZCBePSB0aW1lKE5VTEwpOwoJbG9uZyAqa2V5c2V0ID0gZ2VuZXJhdGVfa2V5c2V0KHNldHNpemUsIHNlZWQpOwoJZm9yKGludCBqID0gMCwgcCA9IDA7IGogPCBzZXRzaXplOyBqKyspIHsKCQlwcmludGYoIiVsZFx0Iiwga2V5c2V0W2pdKTsKCQlwKys7CgkJaWYocCA+PSA1KSB7IHByaW50ZigiXG4iKTsgcCA9IDA7IH0KCX0KCXJldHVybiAwOwp9