61 lines
1.9 KiB
C
61 lines
1.9 KiB
C
#include "security/util.h"
|
|
|
|
void security_util_8_to_6_encode(const uint8_t *in, uint8_t *out)
|
|
{
|
|
uint8_t tmp[8];
|
|
int i;
|
|
|
|
for (i = 0; i < 8; i++) {
|
|
tmp[i] = (in[i] - 0x20) & 0x3F;
|
|
}
|
|
|
|
out[0] = (tmp[0] >> 0) | (tmp[1] << 6);
|
|
out[1] = (tmp[1] >> 2) | (tmp[2] << 4);
|
|
out[2] = (tmp[2] >> 4) | (tmp[3] << 2);
|
|
|
|
out[3] = (tmp[4] >> 0) | (tmp[5] << 6);
|
|
out[4] = (tmp[5] >> 2) | (tmp[6] << 4);
|
|
out[5] = (tmp[6] >> 4) | (tmp[7] << 2);
|
|
}
|
|
|
|
void security_util_6_to_8_decode(const uint8_t *in, uint8_t *out)
|
|
{
|
|
int i;
|
|
|
|
out[0] = ((in[0] >> 0) & 0x3F);
|
|
out[1] = ((in[0] >> 6) & 0x03) | ((in[1] << 2) & 0x3C);
|
|
out[2] = ((in[1] >> 4) & 0x0F) | ((in[2] << 4) & 0x30);
|
|
out[3] = ((in[2] >> 2) & 0x3F);
|
|
|
|
out[4] = ((in[3] >> 0) & 0x3F);
|
|
out[5] = ((in[3] >> 6) & 0x03) | ((in[4] << 2) & 0x3C);
|
|
out[6] = ((in[4] >> 4) & 0x0F) | ((in[5] << 4) & 0x30);
|
|
out[7] = ((in[5] >> 2) & 0x3F);
|
|
|
|
for (i = 0; i < 8; i++) {
|
|
out[i] += 0x20;
|
|
}
|
|
}
|
|
|
|
void security_util_8_to_6_encode_reverse(const uint8_t *in, uint8_t *out)
|
|
{
|
|
out[0] = ((in[7] - 0x20) << 2) | (((in[6] - 0x20) >> 4) & 0x03);
|
|
out[1] = ((in[6] - 0x20) << 4) | (((in[5] - 0x20) >> 2) & 0x0F);
|
|
out[2] = ((in[5] - 0x20) << 6) | ((in[4] - 0x20) & 0x3F);
|
|
out[3] = ((in[3] - 0x20) << 2) | (((in[2] - 0x20) >> 4) & 0x03);
|
|
out[4] = ((in[2] - 0x20) << 4) | (((in[1] - 0x20) >> 2) & 0x0F);
|
|
out[5] = ((in[1] - 0x20) << 6) | ((in[0] - 0x20) & 0x3F);
|
|
}
|
|
|
|
void security_util_6_to_8_decode_reverse(const uint8_t *in, uint8_t *out)
|
|
{
|
|
out[0] = (in[5] & 0x3F) + 0x20;
|
|
out[1] = ((in[5] >> 6) | (((in[4] & 0xF) << 2) + 0x20));
|
|
out[2] = ((in[4] >> 4) | (((in[3] & 0x03) << 4) + 0x20));
|
|
out[3] = (in[3] >> 2) + 0x20;
|
|
out[4] = (in[2] & 0x3F) + 0x20;
|
|
out[5] = (in[2] >> 6) | (((in[1] & 0x0F) << 2) + 0x20);
|
|
out[6] = (in[1] >> 4) | (((in[0] & 0x03) << 4) + 0x20);
|
|
out[7] = (in[0] >> 2) + 0x20;
|
|
}
|