six 71799cb1c5 gl hf 2024-04-16 12:53:32 +04:00
README.md gl hf 2024-04-16 12:53:32 +04:00
ciphertext_20240416093454.dat gl hf 2024-04-16 12:53:32 +04:00


Here's a home-brewed stream cipher:

uint64_t next(uint64_t x)
	return (x << 12) ^ ((x >> 12) + 1);

typedef uint8_t (*hash_func_t)(uint64_t x);

hash_func_t hash;
uint64_t state;

void initialize(hash_func_t h, uint64_t iv)
	hash = h;
	state = iv;

uint8_t get_byte(void)
	uint8_t b = hash(state);
	state = next(state);
	return b;

It's extra secure because even some of its code is secret.

Here's a (ASCII) message, containing the flag, encrypted with this method: the ciphertext is the plaintext xor-ed with a stream of bytes generated using these functions, starting with a secret, well-chosen hash function and a random initialization vector.

Flag: the format as commonly used, eg. CCTF{flagitself}

//Type: Cryptography //Author: SI