Well, some svcboot/cthd2003 C decryption code has been released.
Here's my version of that code (a bit trimmed)
static void DoPerm(int game)
{
unsigned char *src = NeoSpriteROM;
unsigned char *dst = (unsigned char*)malloc(0x800);
for(int i=0; i<0x8000; i++)
{
unsigned int tbl[8][16] =
{
{1,2,3,0,0,4,4,5,1,2,3,0,0,4,4,5}, // cthd2003
{1,2,1,2,3,0,3,0,0,4,0,4,4,5,4,5}, // svcboot
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},
{0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15},
{0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15},
{0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15},
{0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15},
{0,2,8,10,4,6,12,14,1,3,9,11,5,7,13,15},
};
int ofst=tbl[0][(i>>5)&0xF];
if (game==1) ofst=tbl[1][(i>>4)&0xF];
for(int j=0; j<16; j++)
{
memcpy(dst+j*128, src+i*0x800+(tbl[ofst+2][j]*128), 128);
}
memcpy(src+i*0x800, dst, 0x800);
}
free(dst);
}