You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.5 KiB
C++
81 lines
2.5 KiB
C++
/*
|
|
* http://www.tobtu.com/rtcalc.php#params
|
|
*
|
|
* keyspace is 256^4 (length is always 4)
|
|
* 99.999999% (Total success rate)
|
|
*
|
|
* ./rtgen audible byte 4 4 0 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 1 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 2 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 3 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 4 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 5 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 6 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 7 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 8 10000 10008356 0
|
|
* ./rtgen audible byte 4 4 9 10000 10008356 0
|
|
*
|
|
* ./rtsort *.rt
|
|
* ./rt2rtc *.rt 21 24 -m 18 -p
|
|
* ./rt2rtc *.rt 25 25 -m 512 -p
|
|
*/
|
|
|
|
// #include <openssl/sha.h>
|
|
#include <stdio.h>
|
|
#include "sha1.h"
|
|
#ifdef _WIN32
|
|
#pragma comment(lib, "libeay32.lib")
|
|
#endif
|
|
|
|
#define MIN_HASH_LEN 8
|
|
#define MAX_HASH_LEN 32
|
|
|
|
void
|
|
#ifdef _WIN32
|
|
__stdcall
|
|
#endif
|
|
Audible(
|
|
unsigned char *pData, // [in] plaintext to be hashed
|
|
unsigned int uLen, // [in] length of the plaintext
|
|
unsigned char Hash[MAX_HASH_LEN]) // [out] the result hash, size of the buffer is MAX_HASH_LEN bytes
|
|
{
|
|
unsigned char fixed_key[] = { 0x77, 0x21, 0x4d, 0x4b, 0x19, 0x6a, 0x87,
|
|
0xcd, 0x52, 0x00, 0x45, 0xfd, 0x20, 0xa5, 0x1d, 0x67 };
|
|
|
|
unsigned char intermediate_key[20] = {0};
|
|
unsigned char intermediate_iv[20] = {0};
|
|
SHA_CTX ctx;
|
|
|
|
SHA1_Init(&ctx);
|
|
SHA1_Update(&ctx, fixed_key, 16);
|
|
SHA1_Update(&ctx, pData, uLen);
|
|
SHA1_Final(intermediate_key, &ctx);
|
|
|
|
SHA1_Init(&ctx);
|
|
SHA1_Update(&ctx, fixed_key, 16);
|
|
SHA1_Update(&ctx, intermediate_key, 20);
|
|
SHA1_Update(&ctx, pData, uLen);
|
|
SHA1_Final(intermediate_iv, &ctx);
|
|
|
|
SHA1_Init(&ctx);
|
|
SHA1_Update(&ctx, intermediate_key, 16);
|
|
SHA1_Update(&ctx, intermediate_iv, 16);
|
|
SHA1_Final(Hash, &ctx);
|
|
}
|
|
|
|
struct HashAlgorithmEntry
|
|
{
|
|
const char *szName; // name of the hash algorithm
|
|
void *pHashAlgorithm; // function pointer to the hash algorithm's implementation
|
|
unsigned int uHashLen; // output length of the hash algorithm, MIN_HASH_LEN <= uHashLen <= MAX_HASH_LEN
|
|
|
|
// input plaintext length range supported by the hash algorithm's implementation
|
|
unsigned int uPlaintextLenMin;
|
|
unsigned int uPlaintextLenMax;
|
|
};
|
|
|
|
struct HashAlgorithmEntry HashAlgorithms[] = { // this symbol will be exported
|
|
{"audible", (void *)Audible, 20, 4, 4}, // always 4 bytes
|
|
{0, 0, 0, 0, 0}, // terminated by an entry of all zeroes
|
|
};
|