All pastes #129686 Raw Edit

Someone

public text v1 · immutable
#129686 ·published 2006-08-13 16:40 UTC
rendered paste body
decode_chunk(char *dest, char *src)
{
        unsigned char c;
        int i;

        if (!reverse_init) {
                for (i = 0; i < 32; i++) {
                        c = base32[i];
                        reverse32[(int) c] = i;
                }
                reverse_init = 1;
                printf("Initialized reverse b32 array\n");
        }

        c = reverse32[(int) *src++] << 3;               // Take bits 11111 from byte 1
        c |= (reverse32[(int) *src] & 0x1C) >> 2;       // Take bits 11100 from byte 2
        *dest++ = c;

        c = (reverse32[(int) *src++] & 0x3) << 6;       // Take bits 00011 from byte 2
        c |= reverse32[(int) *src++] << 1;              // Take bits 11111 from byte 3
        c |= (reverse32[(int) *src] & 0x10) >> 4;       // Take bits 10000 from byte 4
        *dest++ = c;

        c = (reverse32[(int) *src++] & 0xF) << 4;       // Take bits 01111 from byte 4
        c |= (reverse32[(int) *src] & 0x1E) >> 1;       // Take bits 11110 from byte 5
        *dest++ = c;

        c = 0;
        if (reverse32[(int) *src] & 0x1)
                c = 0x80;                               // Take bits 00001 from byte 5

        src++;
        c |= reverse32[(int) *src++] << 2;              // Take bits 11111 from byte 6
        c |= (reverse32[(int) *src] & 0x18) >> 3;       // Take bits 11000 from byte 7
        *dest++ = c;

        c = (reverse32[(int) *src++] & 0x7) << 5;       // Take bits 00111 from byte 4
        c |= reverse32[(int) *src++];                   // Take bits 11111 from byte 5
        *dest++ = c;
}