/*
 * Blowfish encryption/decryption for mISDN_dsp.
 *
 * Copyright Andreas Eversberg (jolly@eversberg.eu)
 *
 * This software may be used and distributed according to the terms
 * of the GNU General Public License, incorporated herein by reference.
 *
 */

#include <linux/mISDNif.h>
#include <linux/mISDNdsp.h>
#include "core.h"
#include "dsp.h"

/*
 * how to encode a sample stream to 64-bit blocks that will be encryped
 *
 * first of all, data is collected until a block of 9 samples are received.
 * of course, a packet may have much more than 9 sample, but is may have
 * not excacly the multiple of 9 samples. if there is a rest, the next
 * received data will complete the block.
 *
 * the block is then converted to 9 uLAW samples without the least sigificant
 * bit. the result is a 7-bit encoded sample.
 *
 * the samples will be reoganised to form 8 bytes of data:
 * (5(6) means: encoded sample no. 5, bit 6)
 *
 * 0(6) 0(5) 0(4) 0(3) 0(2) 0(1) 0(0) 1(6)
 * 1(5) 1(4) 1(3) 1(2) 1(1) 1(0) 2(6) 2(5)
 * 2(4) 2(3) 2(2) 2(1) 2(0) 3(6) 3(5) 3(4)
 * 3(3) 3(2) 3(1) 3(0) 4(6) 4(5) 4(4) 4(3)
 * 4(2) 4(1) 4(0) 5(6) 5(5) 5(4) 5(3) 5(2)
 * 5(1) 5(0) 6(6) 6(5) 6(4) 6(3) 6(2) 6(1)
 * 6(0) 7(6) 7(5) 7(4) 7(3) 7(2) 7(1) 7(0)
 * 8(6) 8(5) 8(4) 8(3) 8(2) 8(1) 8(0)
 *
 * the missing bit 0 of the last byte is filled with some
 * random noise, to fill all 8 bytes.
 *
 * the 8 bytes will be encrypted using blowfish.
 *
 * the result will be converted into 9 bytes. the bit 7 is used for
 * checksumme (CS) for sync (0, 1) and for the last bit:
 * (5(6) means: crypted byte 5, bit 6)
 *
 * 1    0(7) 0(6) 0(5) 0(4) 0(3) 0(2) 0(1)
 * 0    0(0) 1(7) 1(6) 1(5) 1(4) 1(3) 1(2)
 * 0    1(1) 1(0) 2(7) 2(6) 2(5) 2(4) 2(3)
 * 0    2(2) 2(1) 2(0) 3(7) 3(6) 3(5) 3(4)
 * 0    3(3) 3(2) 3(1) 3(0) 4(7) 4(6) 4(5)
 * CS   4(4) 4(3) 4(2) 4(1) 4(0) 5(7) 5(6)
 * CS   5(5) 5(4) 5(3) 5(2) 5(1) 5(0) 6(7)
 * CS   6(6) 6(5) 6(4) 6(3) 6(2) 6(1) 6(0)
 * 7(0) 7(6) 7(5) 7(4) 7(3) 7(2) 7(1) 7(0)
 *
 * the checksum is used to detect transmission errors and frame drops.
 *
 * synchronisation of received block is done by shifting the upper bit of each
 * byte (bit 7) to a shift register. if the rigister has the first five bits
 * (10000), this is used to find the sync. only if sync has been found, the
 * current block of 9 received bytes are decrypted. before that the check
 * sum is calculated. if it is incorrect the block is dropped.
 * this will avoid loud noise due to corrupt encrypted data.
 *
 * if the last block is corrupt, the current decoded block is repeated
 * until a valid block has been received.
 */

/*
 *  some blowfish parts are taken from the
 * crypto-api for faster implementation
 */

static const u32 bf_pbox[16 + 2] = {
	0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
	0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
	0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
	0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
	0x9216d5d9, 0x8979fb1b,
};

static const u32 bf_sbox[256 * 4] = {
	0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
	0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
	0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
	0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
	0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
	0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
	0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
	0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
	0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
	0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
	0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
	0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
	0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
	0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
	0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
	0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
	0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
	0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
	0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
	0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
	0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
	0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
	0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
	0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
	0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
	0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
	0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
	0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
	0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
	0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
	0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
	0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
	0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
	0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
	0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
	0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
	0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
	0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
	0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
	0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
	0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
	0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
	0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
	0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
	0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
	0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
	0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
	0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
	0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
	0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
	0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
	0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
	0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
	0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
	0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
	0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
	0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
	0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
	0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
	0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
	0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
	0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
	0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
	0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
	0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
	0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
	0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
	0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
	0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
	0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
	0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
	0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
	0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
	0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
	0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
	0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
	0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
	0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
	0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
	0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
	0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
	0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
	0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
	0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
	0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
	0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
	0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
	0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
	0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
	0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
	0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
	0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
	0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
	0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
	0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
	0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
	0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
	0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
	0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
	0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
	0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
	0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
	0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
	0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
	0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
	0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
	0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
	0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
	0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
	0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
	0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
	0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
	0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
	0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
	0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
	0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
	0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
	0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
	0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
	0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
	0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
	0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
	0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
	0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
	0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
	0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
	0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
	0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
	0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
	0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
	0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
	0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
	0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
	0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
	0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
	0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
	0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
	0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
	0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
	0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
	0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
	0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
	0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
	0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
	0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
	0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
	0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
	0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
	0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
	0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
	0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
	0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
	0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
	0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
	0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
	0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
	0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
	0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
	0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
	0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
	0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
	0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
	0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
	0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
	0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
	0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
	0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
	0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
	0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
	0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
	0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
	0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
	0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
	0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
	0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
	0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
	0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
	0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
	0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
	0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
	0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
	0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
	0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
	0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
	0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
	0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
	0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
	0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
	0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
	0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
	0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
	0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
	0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
	0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
	0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
	0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
	0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
	0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
	0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
	0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
	0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
	0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
	0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
	0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
	0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
	0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
	0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
	0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
	0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
	0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
	0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
	0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
	0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
	0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
	0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
	0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
	0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
	0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
	0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
	0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
	0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
	0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
	0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
	0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
	0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
	0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
	0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
	0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
	0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
	0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
	0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
	0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
	0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
	0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
	0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
	0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
	0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
	0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
	0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
	0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
	0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
	0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
	0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
	0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
	0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
	0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
	0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
	0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
	0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
	0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
	0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
	0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
	0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
	0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
	0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
	0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,
};

/*
 * Round loop unrolling macros, S is a pointer to a S-Box array
 * organized in 4 unsigned longs at a row.
 */
#define GET32_3(x) (((x) & 0xff))
#define GET32_2(x) (((x) >> (8)) & (0xff))
#define GET32_1(x) (((x) >> (16)) & (0xff))
#define GET32_0(x) (((x) >> (24)) & (0xff))

#define bf_F(x) (((S[GET32_0(x)] + S[256 + GET32_1(x)]) ^	\
		  S[512 + GET32_2(x)]) + S[768 + GET32_3(x)])

#define EROUND(a, b, n)  do { b ^= P[n]; a ^= bf_F(b); } while (0)
#define DROUND(a, b, n)  do { a ^= bf_F(b); b ^= P[n]; } while (0)


/*
 * encrypt isdn data frame
 * every block with 9 samples is encrypted
 */
void
dsp_bf_encrypt(struct dsp *dsp, u8 *data, int len)
{
	int i = 0, j = dsp->bf_crypt_pos;
	u8 *bf_data_in = dsp->bf_data_in;
	u8 *bf_crypt_out = dsp->bf_crypt_out;
	u32 *P = dsp->bf_p;
	u32 *S = dsp->bf_s;
	u32 yl, yr;
	u32 cs;
	u8 nibble;

	while (i < len) {
		/* collect a block of 9 samples */
		if (j < 9) {
			bf_data_in[j] = *data;
			*data++ = bf_crypt_out[j++];
			i++;
			continue;
		}
		j = 0;
		/* transcode 9 samples xlaw to 8 bytes */
		yl = dsp_audio_law2seven[bf_data_in[0]];
		yl = (yl << 7) | dsp_audio_law2seven[bf_data_in[1]];
		yl = (yl << 7) | dsp_audio_law2seven[bf_data_in[2]];
		yl = (yl << 7) | dsp_audio_law2seven[bf_data_in[3]];
		nibble = dsp_audio_law2seven[bf_data_in[4]];
		yr = nibble;
		yl = (yl << 4) | (nibble >> 3);
		yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[5]];
		yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[6]];
		yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[7]];
		yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[8]];
		yr = (yr << 1) | (bf_data_in[0] & 1);

		/* fill unused bit with random noise of audio input */
		/* encrypt */

		EROUND(yr, yl, 0);
		EROUND(yl, yr, 1);
		EROUND(yr, yl, 2);
		EROUND(yl, yr, 3);
		EROUND(yr, yl, 4);
		EROUND(yl, yr, 5);
		EROUND(yr, yl, 6);
		EROUND(yl, yr, 7);
		EROUND(yr, yl, 8);
		EROUND(yl, yr, 9);
		EROUND(yr, yl, 10);
		EROUND(yl, yr, 11);
		EROUND(yr, yl, 12);
		EROUND(yl, yr, 13);
		EROUND(yr, yl, 14);
		EROUND(yl, yr, 15);
		yl ^= P[16];
		yr ^= P[17];

		/* calculate 3-bit checksumme */
		cs = yl ^ (yl >> 3) ^ (yl >> 6) ^ (yl >> 9) ^ (yl >> 12) ^ (yl >> 15)
			^ (yl >> 18) ^ (yl >> 21) ^ (yl >> 24) ^ (yl >> 27) ^ (yl >> 30)
			^ (yr << 2) ^ (yr >> 1) ^ (yr >> 4) ^ (yr >> 7) ^ (yr >> 10)
			^ (yr >> 13) ^ (yr >> 16) ^ (yr >> 19) ^ (yr >> 22) ^ (yr >> 25)
			^ (yr >> 28) ^ (yr >> 31);

		/*
		 * transcode 8 crypted bytes to 9 data bytes with sync
		 * and checksum information
		 */
		bf_crypt_out[0] = (yl >> 25) | 0x80;
		bf_crypt_out[1] = (yl >> 18) & 0x7f;
		bf_crypt_out[2] = (yl >> 11) & 0x7f;
		bf_crypt_out[3] = (yl >> 4) & 0x7f;
		bf_crypt_out[4] = ((yl << 3) & 0x78) | ((yr >> 29) & 0x07);
		bf_crypt_out[5] = ((yr >> 22) & 0x7f) | ((cs << 5) & 0x80);
		bf_crypt_out[6] = ((yr >> 15) & 0x7f) | ((cs << 6) & 0x80);
		bf_crypt_out[7] = ((yr >> 8) & 0x7f) | (cs << 7);
		bf_crypt_out[8] = yr;
	}

	/* write current count */
	dsp->bf_crypt_pos = j;

}


/*
 * decrypt isdn data frame
 * every block with 9 bytes is decrypted
 */
void
dsp_bf_decrypt(struct dsp *dsp, u8 *data, int len)
{
	int i = 0;
	u8 j = dsp->bf_decrypt_in_pos;
	u8 k = dsp->bf_decrypt_out_pos;
	u8 *bf_crypt_inring = dsp->bf_crypt_inring;
	u8 *bf_data_out = dsp->bf_data_out;
	u16 sync = dsp->bf_sync;
	u32 *P = dsp->bf_p;
	u32 *S = dsp->bf_s;
	u32 yl, yr;
	u8 nibble;
	u8 cs, cs0, cs1, cs2;

	while (i < len) {
		/*
		 * shift upper bit and rotate data to buffer ring
		 * send current decrypted data
		 */
		sync = (sync << 1) | ((*data) >> 7);
		bf_crypt_inring[j++ & 15] = *data;
		*data++ = bf_data_out[k++];
		i++;
		if (k == 9)
			k = 0; /* repeat if no sync has been found */
		/* check if not in sync */
		if ((sync & 0x1f0) != 0x100)
			continue;
		j -= 9;
		/* transcode receive data to 64 bit block of encrypted data */
		yl = bf_crypt_inring[j++ & 15];
		yl = (yl << 7) | bf_crypt_inring[j++ & 15]; /* bit7 = 0 */
		yl = (yl << 7) | bf_crypt_inring[j++ & 15]; /* bit7 = 0 */
		yl = (yl << 7) | bf_crypt_inring[j++ & 15]; /* bit7 = 0 */
		nibble = bf_crypt_inring[j++ & 15]; /* bit7 = 0 */
		yr = nibble;
		yl = (yl << 4) | (nibble >> 3);
		cs2 = bf_crypt_inring[j++ & 15];
		yr = (yr << 7) | (cs2 & 0x7f);
		cs1 = bf_crypt_inring[j++ & 15];
		yr = (yr << 7) | (cs1 & 0x7f);
		cs0 = bf_crypt_inring[j++ & 15];
		yr = (yr << 7) | (cs0 & 0x7f);
		yr = (yr << 8) | bf_crypt_inring[j++ & 15];

		/* calculate 3-bit checksumme */
		cs = yl ^ (yl >> 3) ^ (yl >> 6) ^ (yl >> 9) ^ (yl >> 12) ^ (yl >> 15)
			^ (yl >> 18) ^ (yl >> 21) ^ (yl >> 24) ^ (yl >> 27) ^ (yl >> 30)
			^ (yr << 2) ^ (yr >> 1) ^ (yr >> 4) ^ (yr >> 7) ^ (yr >> 10)
			^ (yr >> 13) ^ (yr >> 16) ^ (yr >> 19) ^ (yr >> 22) ^ (yr >> 25)
			^ (yr >> 28) ^ (yr >> 31);

		/* check if frame is valid */
		if ((cs & 0x7) != (((cs2 >> 5) & 4) | ((cs1 >> 6) & 2) | (cs0 >> 7))) {
			if (dsp_debug & DEBUG_DSP_BLOWFISH)
				printk(KERN_DEBUG
				       "DSP BLOWFISH: received corrupt frame, "
				       "checksumme is not correct\n");
			continue;
		}

		/* decrypt */
		yr ^= P[17];
		yl ^= P[16];
		DROUND(yl, yr, 15);
		DROUND(yr, yl, 14);
		DROUND(yl, yr, 13);
		DROUND(yr, yl, 12);
		DROUND(yl, yr, 11);
		DROUND(yr, yl, 10);
		DROUND(yl, yr, 9);
		DROUND(yr, yl, 8);
		DROUND(yl, yr, 7);
		DROUND(yr, yl, 6);
		DROUND(yl, yr, 5);
		DROUND(yr, yl, 4);
		DROUND(yl, yr, 3);
		DROUND(yr, yl, 2);
		DROUND(yl, yr, 1);
		DROUND(yr, yl, 0);

		/* transcode 8 crypted bytes to 9 sample bytes */
		bf_data_out[0] = dsp_audio_seven2law[(yl >> 25) & 0x7f];
		bf_data_out[1] = dsp_audio_seven2law[(yl >> 18) & 0x7f];
		bf_data_out[2] = dsp_audio_seven2law[(yl >> 11) & 0x7f];
		bf_data_out[3] = dsp_audio_seven2law[(yl >> 4) & 0x7f];
		bf_data_out[4] = dsp_audio_seven2law[((yl << 3) & 0x78) |
						     ((yr >> 29) & 0x07)];

		bf_data_out[5] = dsp_audio_seven2law[(yr >> 22) & 0x7f];
		bf_data_out[6] = dsp_audio_seven2law[(yr >> 15) & 0x7f];
		bf_data_out[7] = dsp_audio_seven2law[(yr >> 8) & 0x7f];
		bf_data_out[8] = dsp_audio_seven2law[(yr >> 1) & 0x7f];
		k = 0; /* start with new decoded frame */
	}

	/* write current count and sync */
	dsp->bf_decrypt_in_pos = j;
	dsp->bf_decrypt_out_pos = k;
	dsp->bf_sync = sync;
}


/* used to encrypt S and P boxes */
static inline void
encrypt_block(const u32 *P, const u32 *S, u32 *dst, u32 *src)
{
	u32 yl = src[0];
	u32 yr = src[1];

	EROUND(yr, yl, 0);
	EROUND(yl, yr, 1);
	EROUND(yr, yl, 2);
	EROUND(yl, yr, 3);
	EROUND(yr, yl, 4);
	EROUND(yl, yr, 5);
	EROUND(yr, yl, 6);
	EROUND(yl, yr, 7);
	EROUND(yr, yl, 8);
	EROUND(yl, yr, 9);
	EROUND(yr, yl, 10);
	EROUND(yl, yr, 11);
	EROUND(yr, yl, 12);
	EROUND(yl, yr, 13);
	EROUND(yr, yl, 14);
	EROUND(yl, yr, 15);

	yl ^= P[16];
	yr ^= P[17];

	dst[0] = yr;
	dst[1] = yl;
}

/*
 * initialize the dsp for encryption and decryption using the same key
 * Calculates the blowfish S and P boxes for encryption and decryption.
 * The margin of keylen must be 4-56 bytes.
 * returns 0 if ok.
 */
int
dsp_bf_init(struct dsp *dsp, const u8 *key, uint keylen)
{
	short i, j, count;
	u32 data[2], temp;
	u32 *P = (u32 *)dsp->bf_p;
	u32 *S = (u32 *)dsp->bf_s;

	if (keylen < 4 || keylen > 56)
		return 1;

	/* Set dsp states */
	i = 0;
	while (i < 9) {
		dsp->bf_crypt_out[i] = 0xff;
		dsp->bf_data_out[i] = dsp_silence;
		i++;
	}
	dsp->bf_crypt_pos = 0;
	dsp->bf_decrypt_in_pos = 0;
	dsp->bf_decrypt_out_pos = 0;
	dsp->bf_sync = 0x1ff;
	dsp->bf_enable = 1;

	/* Copy the initialization s-boxes */
	for (i = 0, count = 0; i < 256; i++)
		for (j = 0; j < 4; j++, count++)
			S[count] = bf_sbox[count];

	/* Set the p-boxes */
	for (i = 0; i < 16 + 2; i++)
		P[i] = bf_pbox[i];

	/* Actual subkey generation */
	for (j = 0, i = 0; i < 16 + 2; i++) {
		temp = (((u32)key[j] << 24) |
			((u32)key[(j + 1) % keylen] << 16) |
			((u32)key[(j + 2) % keylen] << 8) |
			((u32)key[(j + 3) % keylen]));

		P[i] = P[i] ^ temp;
		j = (j + 4) % keylen;
	}

	data[0] = 0x00000000;
	data[1] = 0x00000000;

	for (i = 0; i < 16 + 2; i += 2) {
		encrypt_block(P, S, data, data);

		P[i] = data[0];
		P[i + 1] = data[1];
	}

	for (i = 0; i < 4; i++) {
		for (j = 0, count = i * 256; j < 256; j += 2, count += 2) {
			encrypt_block(P, S, data, data);

			S[count] = data[0];
			S[count + 1] = data[1];
		}
	}

	return 0;
}


/*
 * turn encryption off
 */
void
dsp_bf_cleanup(struct dsp *dsp)
{
	dsp->bf_enable = 0;
}
