in src/generic/nca_d.c [481:517]
unsigned char crypt_unpackD(int in)
{
int out, type;
type = in / 256;
in = in - 256 * type;
switch (type) {
case 0:
if (in < 10)
out = (in + 48);
else if (in <= 31)
out = (in + 55);
else
out = (in + 65);
break;
case 1:
if (in < 48)
out = in;
else
out = (in + 10);
break;
case 2:
out = (in + 123);
break;
case 3:
out = (in + 167);
break;
default:
if (in < 31)
out = (in + 225);
else if (in < 37)
out = (in + 60);
else
out = (in + 33);
break;
}
return (unsigned char) out;
}