talks/perf-experiments/myperf.c

56 lines
1.6 KiB
C

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "openssl/sha.h"
static inline void tohex(char *outputbuffer, unsigned char c)
{
outputbuffer[1] = "0123456789abcdef"[c % 16];
outputbuffer[0] = "0123456789abcdef"[c / 16];
}
void sha512(char *string, char outputBuffer[129])
{
unsigned char hash[SHA512_DIGEST_LENGTH];
SHA512_CTX sha512;
SHA512_Init(&sha512);
SHA512_Update(&sha512, string, strlen(string));
SHA512_Final(hash, &sha512);
int i = 0;
for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
tohex(outputBuffer + 2 * i, hash[i]);
outputBuffer[128] = 0;
}
int main(int ac, char **av)
{
unsigned char outputbuffer[129];
unsigned char inputbuffer[7];
int repeat = 10;
char *suffix = "AFPy";
int size = repeat + strlen(suffix);
char *candidate = malloc(size + 1);
memset(candidate, 'A', size);
memcpy(candidate + size - strlen(suffix), suffix, strlen(suffix));
candidate[size] = 0;
long long int i = 0;
while (1)
{
candidate[9] = i % 58 + 65;
candidate[8] = (i / 58) % 58 + 65;
candidate[7] = (i / (58 * 58)) % 58 + 65;
candidate[6] = (i / (58 * 58 * 58)) % 58 + 65;
candidate[5] = (i / (58 * 58 * 58 * 58)) % 58 + 65;
candidate[4] = (i / (58 * 58 * 58 * 58 * 58)) % 58 + 65;
i += 1;
sha512(candidate, outputbuffer);
if (outputbuffer[0] == '0' && outputbuffer[1] == '0' && outputbuffer[2] == '0' && outputbuffer[3] == '0' && outputbuffer[4] == '0') {
printf("%s\n", outputbuffer);
return 0;
}
}
return 1;
}