<commit_before>#include <errno.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>

#include <libibur/util.h>

#include "scrypt.h"
#include "sha256.h"

#define SCRYPT_USE_MMAP

static uint64_t integerify(uint32_t* B, uint32_t r) {
	uint64_t val = 0;
	uint32_t* x = B + (2 * r - 1) * 16;
	val |= (uint64_t)(x[0]) <<  0;
	val |= (uint64_t)(x[1]) << 32;
	return val;
}

#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))

static void salsa20_8(uint32_t B[16]) {
	uint32_t x[16];
	
	memcpy(x, B, 64);
	
	for (int i = 0; i < 8; i += 2) {
		/* columns */
		x[ 4] ^= ROTL(x[ 0]+x[12], 7);
		x[ 8] ^= ROTL(x[ 4]+x[ 0], 9);
		x[12] ^= ROTL(x[ 8]+x[ 4],13);
		x[ 0] ^= ROTL(x[12]+x[ 8],18);

		x[ 9] ^= ROTL(x[ 5]+x[ 1], 7);
		x[13] ^= ROTL(x[ 9]+x[ 5], 9);
		x[ 1] ^= ROTL(x[13]+x[ 9],13);
		x[ 5] ^= ROTL(x[ 1]+x[13],18);

		x[14] ^= ROTL(x[10]+x[ 6], 7);
		x[ 2] ^= ROTL(x[14]+x[10], 9);
		x[ 6] ^= ROTL(x[ 2]+x[14],13);
		x[10] ^= ROTL(x[ 6]+x[ 2],18);

		x[ 3] ^= ROTL(x[15]+x[11], 7);
		x[ 7] ^= ROTL(x[ 3]+x[15], 9);
		x[11] ^= ROTL(x[ 7]+x[ 3],13);
		x[15] ^= ROTL(x[11]+x[ 7],18);

		/* rows */
		x[ 1] ^= ROTL(x[ 0]+x[ 3], 7);
		x[ 2] ^= ROTL(x[ 1]+x[ 0], 9);
		x[ 3] ^= ROTL(x[ 2]+x[ 1],13);
		x[ 0] ^= ROTL(x[ 3]+x[ 2],18);

		x[ 6] ^= ROTL(x[ 5]+x[ 4], 7);
		x[ 7] ^= ROTL(x[ 6]+x[ 5], 9);
		x[ 4] ^= ROTL(x[ 7]+x[ 6],13);
		x[ 5] ^= ROTL(x[ 4]+x[ 7],18);

		x[11] ^= ROTL(x[10]+x[ 9], 7);
		x[ 8] ^= ROTL(x[11]+x[10], 9);
		x[ 9] ^= ROTL(x[ 8]+x[11],13);
		x[10] ^= ROTL(x[ 9]+x[ 8],18);

		x[12] ^= ROTL(x[15]+x[14], 7);
		x[13] ^= ROTL(x[12]+x[15], 9);
		x[14] ^= ROTL(x[13]+x[12],13);
		x[15] ^= ROTL(x[14]+x[13],18);
	}
	
	for(int i = 0; i < 16; i++) {
		B[i] += x[i];
	}
}

static void blockmix(uint32_t* B, uint32_t r, uint32_t* Bout) {
	uint64_t i = 0;
	<commit_msg>switched scrypt implementation to use my salsa20 core<commit_after>#include <errno.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>

#include <libibur/util.h>

#include "scrypt.h"
#include "sha256.h"

#define SCRYPT_USE_MMAP

static uint64_t integerify(uint32_t* B, uint32_t r) {
	uint64_t val = 0;
	uint32_t* x = B + (2 * r - 1) * 16;
	val |= (uint64_t)(x[0]) <<  0;
	val |= (uint64_t)(x[1]) << 32;
	return val;
}

#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))

static void salsa20_8(uint32_t B[16]) {
	uint32_t x[16];
	
	memcpy(x, B, 64);
#define ROT(x, n) (((x) << n) | ((x) >> (32 - n)))
#define QROUND(a,b,c,d) \
	((b) ^= ROT((a+d),  7));\
	((c) ^= ROT((b+a),  9));\
	((d) ^= ROT((c+b), 13));\
	((a) ^= ROT((d+c), 18));
	
	/* iterate double round 20 times */
	for(int i = 0; i < 8; i += 2) {
		/* columnround */
		QROUND(x[ 0], x[ 4], x[ 8], x[12]);
		QROUND(x[ 5], x[ 9], x[13], x[ 1]);
		QROUND(x[10], x[14], x[ 2], x[ 6]);
		QROUND(x[15], x[ 3], x[ 7], x[11]);
		
		/* rowround */
		QROUND(x[ 0], x[ 1], x[ 2], x[ 3]);
		QROUND(x[ 5], x[ 6], x[ 7], x[ 4]);
		QROUND(x[10], x[11], x[ 8], x[ 9]);
		QROUND(x[15], x[12], x[13], x[ 14]);
	}
#undef ROT
#undef QROUND
	
	for(int i = 0; i < 16; i++) {
		B[i] += x[i];
	}
}

static void blockmix(uint32_t* B, uint32_t r, uint32_t* Bout) {
	uint64_t i = 0;
	
{'fraction_non_alphanumeric': 0.29638854296388545, 'fraction_numerical': 0.10896637608966377, 'mean_word_length': 3.425619834710744, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 23, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1473752', 'n_tokens_mistral': 2088, 'n_tokens_neox': 1761, 'n_words': 408}