77 if (!
string)
return(0);
78 memset(buffer,
'\xA5',
sizeof(buffer));
84 strncpy(buffer,
string,
sizeof(buffer));
85 buffer[
sizeof(buffer)-1] =
'\0';
86 int length = strlen(buffer);
97 for (
int index = 0; index < length; index++) {
98 if (!isgraph(buffer[index])) {
99 buffer[index] = (char)(
'A' + (index%26));
110 if (length < 16 || (length & 0x03)) {
112 if (((length+3) & 0x00FC) > maxlen) {
113 maxlen = ((length+3) & 0x00FC);
116 for (index = length; index < maxlen; index++) {
117 buffer[index] = (char)(
'A' + (((
'?' ^ buffer[index-length]) + index) % 26));
120 buffer[length] =
'\0';
155 for (
int index2 = 0; index2 < length; index2++) {
156 code ^= (
unsigned char)buffer[index2];
157 unsigned char temp = (
unsigned char)code;
158 buffer[index2] ^= temp;
160 code |= (((long)temp)<<24);
168 for (
int index3 = 0; index3 < length; index3++) {
169 static unsigned char _lossbits[] = {0x00,0x08,0x00,0x20,0x00,0x04,0x10,0x00};
170 static unsigned char _addbits[] = {0x10,0x00,0x00,0x80,0x40,0x00,0x00,0x04};
172 buffer[index3] |= _addbits[index3 % (
sizeof(_addbits)/
sizeof(_addbits[0]))];
173 buffer[index3] &= (char)(~_lossbits[index3 % (
sizeof(_lossbits)/
sizeof(_lossbits[0]))]);
185 for (
int index4 = 0; index4 < length; index4 += 4) {
186 short key1 = buffer[index4];
187 short key2 = buffer[index4+1];
188 short key3 = buffer[index4+2];
189 short key4 = buffer[index4+3];
215 buffer[index4] = val1;
216 buffer[index4+1] = val2;
217 buffer[index4+2] = val3;
218 buffer[index4+3] = val4;