1960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 2960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * Blowfish encryption/decryption for mISDN_dsp. 3960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 4960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * Copyright Andreas Eversberg (jolly@eversberg.eu) 5960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 6960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * This software may be used and distributed according to the terms 7960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * of the GNU General Public License, incorporated herein by reference. 8960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 9960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 10960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 11960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#include <linux/mISDNif.h> 12960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#include <linux/mISDNdsp.h> 13960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#include "core.h" 14960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#include "dsp.h" 15960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 16960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 17960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * how to encode a sample stream to 64-bit blocks that will be encryped 18960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 19960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * first of all, data is collected until a block of 9 samples are received. 20960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * of course, a packet may have much more than 9 sample, but is may have 21960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * not excacly the multiple of 9 samples. if there is a rest, the next 22960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * received data will complete the block. 23960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 24960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * the block is then converted to 9 uLAW samples without the least sigificant 25960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * bit. the result is a 7-bit encoded sample. 26960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 27960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * the samples will be reoganised to form 8 bytes of data: 28960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * (5(6) means: encoded sample no. 5, bit 6) 29960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 30960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 0(6) 0(5) 0(4) 0(3) 0(2) 0(1) 0(0) 1(6) 31960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 1(5) 1(4) 1(3) 1(2) 1(1) 1(0) 2(6) 2(5) 32960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 2(4) 2(3) 2(2) 2(1) 2(0) 3(6) 3(5) 3(4) 33960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 3(3) 3(2) 3(1) 3(0) 4(6) 4(5) 4(4) 4(3) 34960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 4(2) 4(1) 4(0) 5(6) 5(5) 5(4) 5(3) 5(2) 35960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 5(1) 5(0) 6(6) 6(5) 6(4) 6(3) 6(2) 6(1) 36960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 6(0) 7(6) 7(5) 7(4) 7(3) 7(2) 7(1) 7(0) 37960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 8(6) 8(5) 8(4) 8(3) 8(2) 8(1) 8(0) 38960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 39960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * the missing bit 0 of the last byte is filled with some 40960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * random noise, to fill all 8 bytes. 41960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 42960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * the 8 bytes will be encrypted using blowfish. 43960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 44960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * the result will be converted into 9 bytes. the bit 7 is used for 45960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * checksumme (CS) for sync (0, 1) and for the last bit: 46960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * (5(6) means: crypted byte 5, bit 6) 47960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 48960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 1 0(7) 0(6) 0(5) 0(4) 0(3) 0(2) 0(1) 49960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 0 0(0) 1(7) 1(6) 1(5) 1(4) 1(3) 1(2) 50960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 0 1(1) 1(0) 2(7) 2(6) 2(5) 2(4) 2(3) 51960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 0 2(2) 2(1) 2(0) 3(7) 3(6) 3(5) 3(4) 52960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 0 3(3) 3(2) 3(1) 3(0) 4(7) 4(6) 4(5) 53960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * CS 4(4) 4(3) 4(2) 4(1) 4(0) 5(7) 5(6) 54960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * CS 5(5) 5(4) 5(3) 5(2) 5(1) 5(0) 6(7) 55960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * CS 6(6) 6(5) 6(4) 6(3) 6(2) 6(1) 6(0) 56960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 7(0) 7(6) 7(5) 7(4) 7(3) 7(2) 7(1) 7(0) 57960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 58960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * the checksum is used to detect transmission errors and frame drops. 59960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 60960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * synchronisation of received block is done by shifting the upper bit of each 61960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * byte (bit 7) to a shift register. if the rigister has the first five bits 62960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * (10000), this is used to find the sync. only if sync has been found, the 63960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * current block of 9 received bytes are decrypted. before that the check 64960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * sum is calculated. if it is incorrect the block is dropped. 65960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * this will avoid loud noise due to corrupt encrypted data. 66960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * 67960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * if the last block is corrupt, the current decoded block is repeated 68960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * until a valid block has been received. 69960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 70960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 71960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 72960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * some blowfish parts are taken from the 73960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * crypto-api for faster implementation 74960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 75960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 76960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilstruct bf_ctx { 77960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 p[18]; 78960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 s[1024]; 79960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil}; 80960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 81960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilstatic const u32 bf_pbox[16 + 2] = { 82960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 83960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 84960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 85960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 86960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9216d5d9, 0x8979fb1b, 87960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil}; 88960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 89960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilstatic const u32 bf_sbox[256 * 4] = { 90960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 91960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 92960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 93960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 94960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 95960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 96960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 97960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 98960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 99960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 100960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 101960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 102960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 103960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, 104960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 105960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 106960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 107960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, 108960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 109960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 110960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 111960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 112960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 113960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 114960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 115960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 116960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 117960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 118960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 119960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, 120960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 121960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 122960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 123960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 124960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 125960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 126960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 127960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 128960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 129960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 130960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 131960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 132960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 133960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 134960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 135960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 136960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 137960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 138960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 139960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, 140960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 141960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 142960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 143960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 144960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 145960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 146960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 147960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 148960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 149960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, 150960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 151960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 152960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 153960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, 154960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 155960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 156960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 157960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 158960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 159960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 160960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 161960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 162960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 163960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 164960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 165960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 166960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 167960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 168960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 169960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 170960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 171960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 172960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 173960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, 174960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 175960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 176960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 177960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 178960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 179960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 180960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 181960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 182960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 183960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 184960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 185960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 186960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 187960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 188960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 189960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 190960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 191960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 192960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 193960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 194960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 195960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 196960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 197960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 198960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 199960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 200960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 201960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 202960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 203960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 204960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 205960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 206960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 207960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 208960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 209960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, 210960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 211960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 212960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 213960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 214960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 215960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 216960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 217960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, 218960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 219960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, 220960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 221960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 222960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 223960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 224960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 225960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 226960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 227960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 228960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 229960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 230960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 231960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 232960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 233960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 234960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 235960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 236960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 237960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 238960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 239960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 240960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 241960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, 242960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 243960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 244960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 245960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 246960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 247960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 248960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 249960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 250960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 251960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 252960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 253960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 254960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 255960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 256960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 257960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 258960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 259960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 260960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 261960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, 262960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 263960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 264960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 265960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 266960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 267960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 268960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 269960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 270960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 271960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 272960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 273960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, 274960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 275960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 276960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 277960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 278960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 279960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, 280960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 281960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, 282960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 283960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 284960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 285960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 286960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 287960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 288960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 289960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, 290960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 291960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 292960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 293960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 294960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 295960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 296960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 297960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 298960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 299960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 300960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 301960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 302960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 303960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 304960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 305960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 306960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 307960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 308960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 309960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 310960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 311960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 312960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 313960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 314960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 315960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 316960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 317960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, 318960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 319960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 320960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 321960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 322960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 323960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 324960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 325960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 326960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 327960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 328960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 329960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 330960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 331960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 332960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 333960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 334960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 335960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 336960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 337960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 338960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 339960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 340960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 341960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, 342960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 343960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 344960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 345960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, 346960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil}; 347960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 348960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 349960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * Round loop unrolling macros, S is a pointer to a S-Box array 350960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * organized in 4 unsigned longs at a row. 351960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 352960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#define GET32_3(x) (((x) & 0xff)) 353960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#define GET32_2(x) (((x) >> (8)) & (0xff)) 354960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#define GET32_1(x) (((x) >> (16)) & (0xff)) 355960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#define GET32_0(x) (((x) >> (24)) & (0xff)) 356960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 357475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define bf_F(x) (((S[GET32_0(x)] + S[256 + GET32_1(x)]) ^ \ 358475be4d85a274d0961593db41cf85689db1d583cJoe Perches S[512 + GET32_2(x)]) + S[768 + GET32_3(x)]) 359960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 360960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#define EROUND(a, b, n) do { b ^= P[n]; a ^= bf_F(b); } while (0) 361960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil#define DROUND(a, b, n) do { a ^= bf_F(b); b ^= P[n]; } while (0) 362960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 363960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 364960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 365960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * encrypt isdn data frame 366960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * every block with 9 samples is encrypted 367960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 368960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilvoid 369960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keildsp_bf_encrypt(struct dsp *dsp, u8 *data, int len) 370960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil{ 371960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil int i = 0, j = dsp->bf_crypt_pos; 372960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 *bf_data_in = dsp->bf_data_in; 373960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 *bf_crypt_out = dsp->bf_crypt_out; 374960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 *P = dsp->bf_p; 375960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 *S = dsp->bf_s; 376960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 yl, yr; 377960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 cs; 378960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 nibble; 379960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 380960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil while (i < len) { 381960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* collect a block of 9 samples */ 382960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil if (j < 9) { 383960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil bf_data_in[j] = *data; 384960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil *data++ = bf_crypt_out[j++]; 385960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil i++; 386960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil continue; 387960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 388960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil j = 0; 389960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* transcode 9 samples xlaw to 8 bytes */ 390960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yl = dsp_audio_law2seven[bf_data_in[0]]; 391475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 7) | dsp_audio_law2seven[bf_data_in[1]]; 392475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 7) | dsp_audio_law2seven[bf_data_in[2]]; 393475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 7) | dsp_audio_law2seven[bf_data_in[3]]; 394960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil nibble = dsp_audio_law2seven[bf_data_in[4]]; 395960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yr = nibble; 396475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 4) | (nibble >> 3); 397475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[5]]; 398475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[6]]; 399475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[7]]; 400475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 7) | dsp_audio_law2seven[bf_data_in[8]]; 401475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 1) | (bf_data_in[0] & 1); 402960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 403960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* fill unused bit with random noise of audio input */ 404960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* encrypt */ 405960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 406960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 0); 407960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 1); 408960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 2); 409960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 3); 410960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 4); 411960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 5); 412960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 6); 413960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 7); 414960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 8); 415960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 9); 416960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 10); 417960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 11); 418960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 12); 419960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 13); 420960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 14); 421960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 15); 422960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yl ^= P[16]; 423960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yr ^= P[17]; 424960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 425960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* calculate 3-bit checksumme */ 426475be4d85a274d0961593db41cf85689db1d583cJoe Perches cs = yl ^ (yl >> 3) ^ (yl >> 6) ^ (yl >> 9) ^ (yl >> 12) ^ (yl >> 15) 427475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yl >> 18) ^ (yl >> 21) ^ (yl >> 24) ^ (yl >> 27) ^ (yl >> 30) 428475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yr << 2) ^ (yr >> 1) ^ (yr >> 4) ^ (yr >> 7) ^ (yr >> 10) 429475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yr >> 13) ^ (yr >> 16) ^ (yr >> 19) ^ (yr >> 22) ^ (yr >> 25) 430475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yr >> 28) ^ (yr >> 31); 431960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 432960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* 433960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * transcode 8 crypted bytes to 9 data bytes with sync 434960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * and checksum information 435960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 436475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[0] = (yl >> 25) | 0x80; 437475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[1] = (yl >> 18) & 0x7f; 438475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[2] = (yl >> 11) & 0x7f; 439475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[3] = (yl >> 4) & 0x7f; 440475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[4] = ((yl << 3) & 0x78) | ((yr >> 29) & 0x07); 441475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[5] = ((yr >> 22) & 0x7f) | ((cs << 5) & 0x80); 442475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[6] = ((yr >> 15) & 0x7f) | ((cs << 6) & 0x80); 443475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_crypt_out[7] = ((yr >> 8) & 0x7f) | (cs << 7); 444960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil bf_crypt_out[8] = yr; 445960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 446960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 447960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* write current count */ 448960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_crypt_pos = j; 449960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 450960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil} 451960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 452960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 453960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 454960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * decrypt isdn data frame 455960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * every block with 9 bytes is decrypted 456960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 457960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilvoid 458960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keildsp_bf_decrypt(struct dsp *dsp, u8 *data, int len) 459960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil{ 460960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil int i = 0; 461960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 j = dsp->bf_decrypt_in_pos; 462960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 k = dsp->bf_decrypt_out_pos; 463960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 *bf_crypt_inring = dsp->bf_crypt_inring; 464960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 *bf_data_out = dsp->bf_data_out; 465960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u16 sync = dsp->bf_sync; 466960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 *P = dsp->bf_p; 467960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 *S = dsp->bf_s; 468960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 yl, yr; 469960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 nibble; 470960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u8 cs, cs0, cs1, cs2; 471960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 472960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil while (i < len) { 473960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* 474960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * shift upper bit and rotate data to buffer ring 475960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * send current decrypted data 476960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 477475be4d85a274d0961593db41cf85689db1d583cJoe Perches sync = (sync << 1) | ((*data) >> 7); 478960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil bf_crypt_inring[j++ & 15] = *data; 479960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil *data++ = bf_data_out[k++]; 480960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil i++; 481960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil if (k == 9) 482960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil k = 0; /* repeat if no sync has been found */ 483960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* check if not in sync */ 484475be4d85a274d0961593db41cf85689db1d583cJoe Perches if ((sync & 0x1f0) != 0x100) 485960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil continue; 486960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil j -= 9; 487960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* transcode receive data to 64 bit block of encrypted data */ 488960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yl = bf_crypt_inring[j++ & 15]; 489475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 7) | bf_crypt_inring[j++ & 15]; /* bit7 = 0 */ 490475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 7) | bf_crypt_inring[j++ & 15]; /* bit7 = 0 */ 491475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 7) | bf_crypt_inring[j++ & 15]; /* bit7 = 0 */ 492960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil nibble = bf_crypt_inring[j++ & 15]; /* bit7 = 0 */ 493960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yr = nibble; 494475be4d85a274d0961593db41cf85689db1d583cJoe Perches yl = (yl << 4) | (nibble >> 3); 495960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil cs2 = bf_crypt_inring[j++ & 15]; 496475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 7) | (cs2 & 0x7f); 497960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil cs1 = bf_crypt_inring[j++ & 15]; 498475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 7) | (cs1 & 0x7f); 499960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil cs0 = bf_crypt_inring[j++ & 15]; 500475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 7) | (cs0 & 0x7f); 501475be4d85a274d0961593db41cf85689db1d583cJoe Perches yr = (yr << 8) | bf_crypt_inring[j++ & 15]; 502960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 503960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* calculate 3-bit checksumme */ 504475be4d85a274d0961593db41cf85689db1d583cJoe Perches cs = yl ^ (yl >> 3) ^ (yl >> 6) ^ (yl >> 9) ^ (yl >> 12) ^ (yl >> 15) 505475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yl >> 18) ^ (yl >> 21) ^ (yl >> 24) ^ (yl >> 27) ^ (yl >> 30) 506475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yr << 2) ^ (yr >> 1) ^ (yr >> 4) ^ (yr >> 7) ^ (yr >> 10) 507475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yr >> 13) ^ (yr >> 16) ^ (yr >> 19) ^ (yr >> 22) ^ (yr >> 25) 508475be4d85a274d0961593db41cf85689db1d583cJoe Perches ^ (yr >> 28) ^ (yr >> 31); 509960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 510960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* check if frame is valid */ 511475be4d85a274d0961593db41cf85689db1d583cJoe Perches if ((cs & 0x7) != (((cs2 >> 5) & 4) | ((cs1 >> 6) & 2) | (cs0 >> 7))) { 512960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil if (dsp_debug & DEBUG_DSP_BLOWFISH) 513960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil printk(KERN_DEBUG 514475be4d85a274d0961593db41cf85689db1d583cJoe Perches "DSP BLOWFISH: received corrupt frame, " 515475be4d85a274d0961593db41cf85689db1d583cJoe Perches "checksumme is not correct\n"); 516960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil continue; 517960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 518960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 519960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* decrypt */ 520960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yr ^= P[17]; 521960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yl ^= P[16]; 522960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 15); 523960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 14); 524960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 13); 525960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 12); 526960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 11); 527960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 10); 528960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 9); 529960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 8); 530960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 7); 531960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 6); 532960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 5); 533960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 4); 534960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 3); 535960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 2); 536960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yl, yr, 1); 537960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil DROUND(yr, yl, 0); 538960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 539960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* transcode 8 crypted bytes to 9 sample bytes */ 540475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[0] = dsp_audio_seven2law[(yl >> 25) & 0x7f]; 541475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[1] = dsp_audio_seven2law[(yl >> 18) & 0x7f]; 542475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[2] = dsp_audio_seven2law[(yl >> 11) & 0x7f]; 543475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[3] = dsp_audio_seven2law[(yl >> 4) & 0x7f]; 544475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[4] = dsp_audio_seven2law[((yl << 3) & 0x78) | 545475be4d85a274d0961593db41cf85689db1d583cJoe Perches ((yr >> 29) & 0x07)]; 546475be4d85a274d0961593db41cf85689db1d583cJoe Perches 547475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[5] = dsp_audio_seven2law[(yr >> 22) & 0x7f]; 548475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[6] = dsp_audio_seven2law[(yr >> 15) & 0x7f]; 549475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[7] = dsp_audio_seven2law[(yr >> 8) & 0x7f]; 550475be4d85a274d0961593db41cf85689db1d583cJoe Perches bf_data_out[8] = dsp_audio_seven2law[(yr >> 1) & 0x7f]; 551960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil k = 0; /* start with new decoded frame */ 552960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 553960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 554960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* write current count and sync */ 555960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_decrypt_in_pos = j; 556960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_decrypt_out_pos = k; 557960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_sync = sync; 558960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil} 559960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 560960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 561960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* used to encrypt S and P boxes */ 562960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilstatic inline void 563960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilencrypt_block(const u32 *P, const u32 *S, u32 *dst, u32 *src) 564960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil{ 565960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 yl = src[0]; 566960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 yr = src[1]; 567960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 568960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 0); 569960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 1); 570960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 2); 571960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 3); 572960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 4); 573960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 5); 574960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 6); 575960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 7); 576960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 8); 577960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 9); 578960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 10); 579960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 11); 580960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 12); 581960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 13); 582960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yr, yl, 14); 583960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil EROUND(yl, yr, 15); 584960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 585960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yl ^= P[16]; 586960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil yr ^= P[17]; 587960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 588960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dst[0] = yr; 589960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dst[1] = yl; 590960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil} 591960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 592960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 593960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * initialize the dsp for encryption and decryption using the same key 594960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * Calculates the blowfish S and P boxes for encryption and decryption. 595960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * The margin of keylen must be 4-56 bytes. 596960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * returns 0 if ok. 597960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 598960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilint 599960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keildsp_bf_init(struct dsp *dsp, const u8 *key, uint keylen) 600960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil{ 601960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil short i, j, count; 602960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 data[2], temp; 603960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 *P = (u32 *)dsp->bf_p; 604960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil u32 *S = (u32 *)dsp->bf_s; 605960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 606960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil if (keylen < 4 || keylen > 56) 607960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil return 1; 608960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 609960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* Set dsp states */ 610960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil i = 0; 611960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil while (i < 9) { 612960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_crypt_out[i] = 0xff; 613960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_data_out[i] = dsp_silence; 614960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil i++; 615960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 616960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_crypt_pos = 0; 617960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_decrypt_in_pos = 0; 618960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_decrypt_out_pos = 0; 619960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_sync = 0x1ff; 620960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_enable = 1; 621960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 622960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* Copy the initialization s-boxes */ 623960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil for (i = 0, count = 0; i < 256; i++) 624960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil for (j = 0; j < 4; j++, count++) 625960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil S[count] = bf_sbox[count]; 626960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 627960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* Set the p-boxes */ 628960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil for (i = 0; i < 16 + 2; i++) 629960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil P[i] = bf_pbox[i]; 630960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 631960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil /* Actual subkey generation */ 632960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil for (j = 0, i = 0; i < 16 + 2; i++) { 633960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil temp = (((u32)key[j] << 24) | 634475be4d85a274d0961593db41cf85689db1d583cJoe Perches ((u32)key[(j + 1) % keylen] << 16) | 635475be4d85a274d0961593db41cf85689db1d583cJoe Perches ((u32)key[(j + 2) % keylen] << 8) | 636475be4d85a274d0961593db41cf85689db1d583cJoe Perches ((u32)key[(j + 3) % keylen])); 637960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 638960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil P[i] = P[i] ^ temp; 639960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil j = (j + 4) % keylen; 640960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 641960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 642960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil data[0] = 0x00000000; 643960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil data[1] = 0x00000000; 644960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 645960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil for (i = 0; i < 16 + 2; i += 2) { 646960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil encrypt_block(P, S, data, data); 647960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 648960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil P[i] = data[0]; 649960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil P[i + 1] = data[1]; 650960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 651960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 652960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil for (i = 0; i < 4; i++) { 653960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil for (j = 0, count = i * 256; j < 256; j += 2, count += 2) { 654960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil encrypt_block(P, S, data, data); 655960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 656960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil S[count] = data[0]; 657960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil S[count + 1] = data[1]; 658960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 659960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil } 660960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 661960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil return 0; 662960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil} 663960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 664960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil 665960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil/* 666960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil * turn encryption off 667960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil */ 668960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keilvoid 669960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keildsp_bf_cleanup(struct dsp *dsp) 670960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil{ 671960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil dsp->bf_enable = 0; 672960366cf8dbb3359afaca30cf7fdbf69a6d6dda7Karsten Keil} 673