Join us on Discord!
You can help CodeWalrus stay online by donating here.

Recent posts

Update v9.3

Major Changes to AES implementation
  • aes_loadkey() is now aes_init()
  • Most of the cipher initialization now happens via the aes_init() function, including the nonce, the cipher mode, and the padding mode, and other functionalities.
  • Cipher configuration parameters passed as flags bitwise-OR'd together.
  • Padding in CBC mode is now added internally within the last block of encryption. Callable functions for padding are no longer used and have been removed.
  • Cipher state "contexts" loaded with init() are stateful and one-directional.Once a context is used for encryption or decryption, attempting to use it for the opposite operation will return an error. Two-way communication now needs two contexts initialized with the same key and parameters, but the correct nonce.
  • Encrypt and decrypt are now chainable operations. This means that `aes_encrypt(msg1+msg2)` is functionally-identical to `aes_encrypt(msg1) + aes_encrypt(msg2)`, once padding is cleared (if applicable). Same is true for decrypt.

New API for AES
aes_init(aes_ctx* ctx, const void* key, size_t keylen, const void* iv, uint24_t flags);
aes_encrypt(aes_ctx* ctx, void* plaintext, size_t len, void* ciphertext);
aes_decrypt(aes_ctx* ctx, void* ciphertext, size_t len, void* plaintext);

Arguments for Flags
// cipher mode (2-bit flag)
AES_MODE_CBC     // default

// padding mode (2-bit flag)
PAD_PKCS7        // default

// CTR mode nonce length (4-bit flag)
AES_CTR_NONCELEN(len)     // default = 8 bytes

// CTR mode counter length (4-bit flag)
AES_CTR_COUNTERLEN(len)     // default = 8 bytes

// Ex1: Set CTR mode, with 8 byte nonce length and 4 byte counter length
aes_init(&ctx, key, sizeof key, iv, AES_MODE_CTR | AES_CTR_NONCELEN(8) | AES_CTR_COUNTERLEN(4));

// Ex2: Set CBC mode, with padding mode ISO-9797 M2
aes_init(&ctx, key, sizeof key, iv, AES_MODE_CBC | PAD_ISO2);

Test away!
Heya, I am pleased to release my 16th studio album tonight: 32-Bit Rekt Part 1! Made entirely on Sony Playstation using Music 2000 (MTV Music Generator) it makes use of tricks not used before in any of my previous album released with the same software.

You will find eurodance, happy hardcore, UK hardcore, frenchcore, electronic power metal and more during your journey through this listen. For now only the Bandcamp and Kunaki versions of 32-Bit Rekt Part 1 are available, at (first two links), but Spotify, Apple Music and other services will be available in the next few weeks as well. Merch is also available at
The recent upsurge in activity and discoveries on the new Playstation Music 2000 software (A.K.A MTV Music Generator in North America) Discord server and some annoying quirks n Caustic 3 software involving transitions have revived my interest in the Music 2000 software, which came out in November 1999 on the original 1995 Playstation console. In addition to that I felt like while my newer songs were more complex, harder and sometimes still tried to recapture the feel of my older songs, the newer albums kinda lost their charm of being almost entirely made on PSOne gaming console (and in some cases PS2/Xbox, but for the new album only PS1)

As a result, I am making a brand new album entirely made with that software with no external assets nor post-processing. I am using an emulator, though, because saving songs using all the new tricks I just discovered will just result into corrupted data, and it takes too long to save on memory cards anyway, so I am using savestates. Every single song included so far either uses heavy sample editing, pitch modulation channels, abuse exploits or use other kind of trickery with samples but it's entirely possible that songs not doing so get included, especially if I am going for my very old styles from over a decade ago at some point.

So far the album includes happy hardcore, UK hardcore, frenchcore, gabber, eurodance, relaxing/ambient music and electronic power metal but might include more as I make new songs. I'm not planning to include eurobeat, though, as there are already 10,000 other eurobeat songs with identical melodies out there.

You can listen to it on Bandcamp. I might make a Youtube playlist later but many Youtube songs are older versions of the ones on Bandcamp.
In 1999, Jester Interactive released Music 2000, published by Codemasters on the original Playstation from 1995, as MTV Music Generator in North America. Although the software is extremely powerful for its time and even has sound quality that is superior to the PC version that came out the next year, documentation about the PS1 software's most advanced features was never published anywhere or was lost to time or deep far into the depths of the Wayback Machine.

The fact it's becoming easier and easier to emulate the console Music 2000 runs on on more and more platforms, as well as the software's new statuses as a retro gaming software and music software have revived its popularity in recent years, while a Discord server about it opened and revived the Music 2000 online community in the process, something that was mostly lost after TIMGUL closed down in early 2012.

This renewed popularity led to an efford by INFU to create a website where as much documentation about the PSOne version of Music 2000 as possible is included along with open-source songs released by various artists including myself. And by documentation, I am talking about the AM channel. Yes, the thing that was so cryptic to use that almost no one dared to touch it. And we're trying to find more advanced tricks, and don't worry we also talk about other things than the AM channel, I was just trying to get your attention. :)

The Discord server also contains plenty of useful tricks, a resources section and a lot of cool new tracks being posted regularly. There are already 200 members as well.

Anyway here are the links (unfortunately, @Yuki  lost mtv-music-generator . com to a domain name squatter, so we couldn't re-use that URL.)

MUSIC 2000™ Hall of Fame:
MUSIC 2000™ Discord server:
UPDATE: Album now available on Spotify, Apple Music, Deezer, and YouTube Music:
More than a century prior to Róçtok's takeover of the Eastern Union of Kingdoms, the world of Folúp' was almost pushed to the brink: Mysteries unravelled, histories rewritten, and civilisations rediscovered. And this story shall also be told; the puzzle will soon be finally solved, one piece at a time...

Tales of Amis'fiça: Black Millennium — Act One: Lost (2022)

01. The Next Piece of the Puzzle 2:56
02. Someone Else's Story — I — Extras 7:16
03. The Great Migration 5:44
04. Someone Else's Story — II — Hand of Steel 8:37
05. Against the Shadow 2:51
--- I. An Incoming Storm
06. Against the Shadow 4:41
--- II. Within the Inbetween
--- III. Welcome, Traveller

07. Lost & Found 9:56
--- I. Hey, You...You're Finally Awake (A Million Miles Away)
--- II. Enter Miyalu
--- III. Silent Connection

08. The Curse of the Isles of Amis'fiça 10:03
--- I. Exception to the Rule
--- II. Darkness' Descent
--- III. The Curse
--- IV. To the Lands that Lie Beyond the Wall

09. On the Wings of a Dragon 5:51
10. There's No Place Like Home 4:18

Deluxe Bandcamp Edition bonus tracks:

11. The Nexus [demo] 6:08
12. The Next Piece of the Puzzle [instrumental] 3:09
13. Someone Else's Story — I — Extras [instrumental] 7:08
14. The Great Migration [instrumental] 5:20
15. Someone Else's Story — II — Hand of Steel [instrumental] 8:06
16. Against the Shadow [instrumental] 7:04
17. Lost & Found [instrumental] 9:41
18. The Curse of the Isles of Amis'fiça [instrumental] 9:43
19. On the Wings of a Dragon [instrumental] 5:51
20. There's No Place Like Home [instrumental] 4:16

"Have you ever noticed that all stories start in the middle? Not its premise, of course; but the surrounding context and the stage presented are always set long before any tale's commencement.
But ah, do I detect an air of bewilderment amongst the audience that I am granted? Perhaps this is our paths crossing for the first time, be it for you, or indeed... for I? You must forgive me, for the directions in which time herself has shown she can flow are not as uniform as one would first assume.
Nonetheless, while I sense no ill in introductions, one could argue it unnecessary to give you mine. Not that you are not deserving mind you, but while I am not exactly of... "your" world, it would be foolish to say that I am of... "this" one either. Think of me as "The Weaver" of this "web" being re-spun before you.
But this path has already been predetermined; neither you, nor even I can alter its course or outcomes, with the fates of its world's peoples locked forever, set in stone. Of course, it is always said that the journey is more than the destination..."

You didn't think this story was going to be over after the conclusion of the Messenger Trilogy albums, did you? Oh no, I've only just begun to tell the stories of this world.
Obviously, as the title implies, this is just the first half of this particular story, but I have been busy working on Act Two — no idea on when it'll be finished, but I'm hoping for the end of next year, barring any delays.
Randomness / Taumatawhakatangihangakoauauot...
Last post by DJ Omnimaga - April 28, 2022, 10:32:06 PM
Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu, Tweebuffelsmeteenskootmorsdoodgeskietfontein, Äteritsiputeritsipuolilautatsijänkä & Pekwachnamaykoskwaskwaypinwanik Lake are real location names in the world.

Also L'Annonciation-de-la-Bienheureuse-Vierge-Marie-de-Nazareth,
And it's finally out! "A Decade of Magic Hardcore (2013-2022)" featuring UK hardcore, frenchcore, happy hardcore, gabber and speedcore

"Hardcore Trifecta", the CD compilation that combines the above and my older hardcore compilation, along with 5 bonus tracks, is now also available as well!
Other download/streaming links:
Update and API revision

HASHLIB's API got a bit of a facelift recently with the function set changing nomenclature depending on what function is being served by the group of functions. No longer are hashlib functions prefixed with hashlib_, they are prefixed with a class-esque namespace indicating what they do. Like so:

Invocations of the Secure RNG within HASHLIB look like this:
csrand_init();     initializes the entropy source internally
csrand_get();      returns a random 32-bit unsigned int     
csrand_fill();     fills a buffer to a size with random bytes
Invocations of Hashing look like this:
hash_ctx hash;
uint8_t out[32];
hash_init(&hash, ALG_NAME)     initializes a context of type ALG_NAME
hash_update(&hash, data, len)
hash_final(&hash, out)
hash_mgf1(..., ALG_NAME)

/* Due to the structure of the hash context, the following are
viable alternatives to hash_update and hash_final:
uint8_t out[32];
hash_ctx hash;
hash_init(&hash, SHA256);
hash.update(&hash.Hash, data, len);, out);
Invocations of HMAC are set up and have the same alternatives as hashing:

hmac_pbkdf2(..., ALG_NAME)
The AES cipher is invoked like so:
The RSA cipher is invoked like so:
// The RSA encryptor takes a hash ID specifier so that, if other hashes
// are added at some point, they can be used with OAEP internal to RSA.
Digest operations look like this:

The latest update is available here.
The header has some slight issues in the documentation... stay tuned for a 9.1 update for a fix, but everything works as of v9.

I am also opening the floor if anyone wants to contribute hashing algorithms. Fast hashes like sha512, sha1 welcome, as well as slower hashes like argon.
Powered by EzPortal