Exemplo n.º 1
0
static void
rc4_bench(void) {
  uint8_t *enckey;
  uint8_t match[32] = {0xDE, 0xAD, 0xBE, 0xAD,
		       0xDE, 0xAD, 0xBE, 0xAD,
		       0xDE, 0xAD, 0xBE, 0xAD,
		       0xDE, 0xAD, 0xBE, 0xAD,
		       0xDE, 0xAD, 0xBE, 0xAD,
		       0xDE, 0xAD, 0xBE, 0xAD,
		       0xDE, 0xAD, 0xBE, 0xAD,
		       0xDE, 0xAD, 0xBE, 0xAD};
  uint8_t cipher[32] = {0xBE, 0xAD, 0xDE, 0xAD,
			0xBE, 0xAD, 0xDE, 0xAD,
			0xBE, 0xAD, 0xDE, 0xAD,
			0xBE, 0xAD, 0xDE, 0xAD,
			0xBE, 0xAD, 0xDE, 0xAD,
			0xBE, 0xAD, 0xDE, 0xAD,
			0xBE, 0xAD, 0xDE, 0xAD,
			0xBE, 0xAD, 0xDE, 0xAD};
  unsigned int nrprocessed = 0;
  clock_t startTime, endTime;

  enckey = calloc(16, sizeof(uint8_t));

  alarm(BENCHINTERVAL);
  startTime = clock();
  while(!finished) {
    rc4Match40b(enckey, cipher, match);
    enckey[0]++;
    nrprocessed++;
  }
  endTime = clock();
  print_and_clean("RC4 (40, static):", nrprocessed, &startTime, &endTime);
  setrc4DecryptMethod(40);
  nrprocessed = 0;
  alarm(BENCHINTERVAL);
  startTime = clock();
  while(!finished) {
    rc4Decrypt(enckey, cipher, 3, match);
    enckey[0]++;
    nrprocessed++;
  }
  endTime = clock();
  print_and_clean("RC4 (40, no check):", nrprocessed, &startTime, &endTime);
 
  setrc4DecryptMethod(128);
  nrprocessed = 0;
  alarm(BENCHINTERVAL);
  startTime = clock();
  while(!finished) {
    rc4Decrypt(enckey, cipher, 3, match);
    enckey[0]++;
    nrprocessed++;
  }
  endTime = clock();
  print_and_clean("RC4 (128, no check):", nrprocessed, &startTime, &endTime);

  free(enckey);
}
Exemplo n.º 2
0
/** initPDFCrack is doing all the initialisations before you are able to call
    runCrack(). Make sure that you run cleanPDFCrack before you call this
    after the first time.
*/
bool initPDFCrack(struct custom_salt *cs)
{
	uint8_t buf[128];
	unsigned int upwlen;
	EncData *e = &cs->e;
	const uint8_t * upw = cs->userpassword;
	bool user = cs->e.work_with_user;

	cs->ekwlen = initEncKeyWorkSpace(e->revision, e->encryptMetaData,
			e->permissions, e->o_string, e->fileID, e->fileIDLen, cs);
	cs->workWithUser = user;
	setrc4DecryptMethod((unsigned int) e->length);
	if (upw) {
		upwlen = strlen((const char *) upw);
		if (upwlen > 32)
			upwlen = 32;
		memcpy(cs->password_user, upw, upwlen);
		memcpy(cs->password_user + upwlen, pad, 32 - upwlen);
		memcpy(cs->encKeyWorkSpace, cs->password_user, 32);
		cs->knownPassword = true;
	}
	if (cs->e.revision == 2) {
		if (cs->knownPassword) {
			if (!isUserPasswordRev2(cs))
				return false;
			memcpy(cs->encKeyWorkSpace, pad, 32);
		} else {
			memcpy(cs->password_user, pad, 32);
			cs->knownPassword = isUserPasswordRev2(cs);
		}
	} else if (e->revision >= 3) {
		memcpy(buf, pad, 32);
		memcpy(buf + 32, e->fileID, e->fileIDLen);
		md5(buf, 32 + e->fileIDLen, cs->rev3TestKey);
		if (cs->knownPassword) {
			if (!isUserPasswordRev3(cs, cs->encKeyWorkSpace))
				return false;
			memcpy(cs->encKeyWorkSpace, pad, 32);
		} else {
			memcpy(cs->password_user, pad, 32);
			cs->knownPassword = isUserPasswordRev3(cs, cs->encKeyWorkSpace);
		}
	}
	return true;
}
Exemplo n.º 3
0
void loadPDFCrack(struct custom_salt *cs)
{
	setrc4DecryptMethod((unsigned int) cs->e.length);
}