Files
djhackersdev_bemanitools/src/main/security/util.c
T

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;
}