2.2.11.1.2 Encrypting a 64-Bit Block with a 7-Byte Key
Transform the 7-byte key into an 8-byte key as follows:
Let InputKey be the 7-byte key, represented as a zero-base-index array.
Let OutputKey be an 8-byte key, represented as a zero-base-index array.
Let OutputKey be assigned as follows.
OutputKey[0] = InputKey[0] >> 0x01; OutputKey[1] = ((InputKey[0]&0x01)<<6) | (InputKey[1]>>2); OutputKey[2] = ((InputKey[1]&0x03)<<5) | (InputKey[2]>>3); OutputKey[3] = ((InputKey[2]&0x07)<<4) | (InputKey[3]>>4); OutputKey[4] = ((InputKey[3]&0x0F)<<3) | (InputKey[4]>>5); OutputKey[5] = ((InputKey[4]&0x1F)<<2) | (InputKey[5]>>6); OutputKey[6] = ((InputKey[5]&0x3F)<<1) | (InputKey[6]>>7); OutputKey[7] = InputKey[6] & 0x7F;
The 7-byte InputKey is expanded to 8 bytes by inserting a 0-bit after every seventh bit.
for( int i=0; i<8; i++ ) { OutputKey[i] = (OutputKey[i] << 1) & 0xfe; }
Let the least-significant bit of each byte of OutputKey be a parity bit. That is, if the sum of the preceding seven bits is odd, the eighth bit is 0; otherwise, the eighth bit is 1. The processing starts at the leftmost bit of OutputKey.
Use [FIPS81] to encrypt the 64-bit block using OutputKey. If the higher-level operation is decryption instead of encryption, this is the point at which an implementer MUST specify the decryption intent to [FIPS81].