tsdecrypt reads and decrypts CSA encrypted incoming mpeg transport stream over UDP/RTP using code words obtained from OSCAM or similar CAM server. tsdecrypt communicates with CAM server using cs378x (camd35 over tcp) protocol or newcamd protocol. https://georgi.unixsol.org/programs/tsdecrypt/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

parallel_128_16char.h 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. /* FFdecsa -- fast decsa algorithm
  2. *
  3. * Copyright (C) 2003-2004 fatih89r
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. struct group_t{
  20. unsigned char s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16;
  21. };
  22. typedef struct group_t group;
  23. #define GROUP_PARALLELISM 128
  24. group static inline FF0(){
  25. group res;
  26. res.s1=0x0;
  27. res.s2=0x0;
  28. res.s3=0x0;
  29. res.s4=0x0;
  30. res.s5=0x0;
  31. res.s6=0x0;
  32. res.s7=0x0;
  33. res.s8=0x0;
  34. res.s9=0x0;
  35. res.s10=0x0;
  36. res.s11=0x0;
  37. res.s12=0x0;
  38. res.s13=0x0;
  39. res.s14=0x0;
  40. res.s15=0x0;
  41. res.s16=0x0;
  42. return res;
  43. }
  44. group static inline FF1(){
  45. group res;
  46. res.s1=0xff;
  47. res.s2=0xff;
  48. res.s3=0xff;
  49. res.s4=0xff;
  50. res.s5=0xff;
  51. res.s6=0xff;
  52. res.s7=0xff;
  53. res.s8=0xff;
  54. res.s9=0xff;
  55. res.s10=0xff;
  56. res.s11=0xff;
  57. res.s12=0xff;
  58. res.s13=0xff;
  59. res.s14=0xff;
  60. res.s15=0xff;
  61. res.s16=0xff;
  62. return res;
  63. }
  64. group static inline FFAND(group a,group b){
  65. group res;
  66. res.s1=a.s1&b.s1;
  67. res.s2=a.s2&b.s2;
  68. res.s3=a.s3&b.s3;
  69. res.s4=a.s4&b.s4;
  70. res.s5=a.s5&b.s5;
  71. res.s6=a.s6&b.s6;
  72. res.s7=a.s7&b.s7;
  73. res.s8=a.s8&b.s8;
  74. res.s9=a.s9&b.s9;
  75. res.s10=a.s10&b.s10;
  76. res.s11=a.s11&b.s11;
  77. res.s12=a.s12&b.s12;
  78. res.s13=a.s13&b.s13;
  79. res.s14=a.s14&b.s14;
  80. res.s15=a.s15&b.s15;
  81. res.s16=a.s16&b.s16;
  82. return res;
  83. }
  84. group static inline FFOR(group a,group b){
  85. group res;
  86. res.s1=a.s1|b.s1;
  87. res.s2=a.s2|b.s2;
  88. res.s3=a.s3|b.s3;
  89. res.s4=a.s4|b.s4;
  90. res.s5=a.s5|b.s5;
  91. res.s6=a.s6|b.s6;
  92. res.s7=a.s7|b.s7;
  93. res.s8=a.s8|b.s8;
  94. res.s9=a.s9|b.s9;
  95. res.s10=a.s10|b.s10;
  96. res.s11=a.s11|b.s11;
  97. res.s12=a.s12|b.s12;
  98. res.s13=a.s13|b.s13;
  99. res.s14=a.s14|b.s14;
  100. res.s15=a.s15|b.s15;
  101. res.s16=a.s16|b.s16;
  102. return res;
  103. }
  104. group static inline FFXOR(group a,group b){
  105. group res;
  106. res.s1=a.s1^b.s1;
  107. res.s2=a.s2^b.s2;
  108. res.s3=a.s3^b.s3;
  109. res.s4=a.s4^b.s4;
  110. res.s5=a.s5^b.s5;
  111. res.s6=a.s6^b.s6;
  112. res.s7=a.s7^b.s7;
  113. res.s8=a.s8^b.s8;
  114. res.s9=a.s9^b.s9;
  115. res.s10=a.s10^b.s10;
  116. res.s11=a.s11^b.s11;
  117. res.s12=a.s12^b.s12;
  118. res.s13=a.s13^b.s13;
  119. res.s14=a.s14^b.s14;
  120. res.s15=a.s15^b.s15;
  121. res.s16=a.s16^b.s16;
  122. return res;
  123. }
  124. group static inline FFNOT(group a){
  125. group res;
  126. res.s1=~a.s1;
  127. res.s2=~a.s2;
  128. res.s3=~a.s3;
  129. res.s4=~a.s4;
  130. res.s5=~a.s5;
  131. res.s6=~a.s6;
  132. res.s7=~a.s7;
  133. res.s8=~a.s8;
  134. res.s9=~a.s9;
  135. res.s10=~a.s10;
  136. res.s11=~a.s11;
  137. res.s12=~a.s12;
  138. res.s13=~a.s13;
  139. res.s14=~a.s14;
  140. res.s15=~a.s15;
  141. res.s16=~a.s16;
  142. return res;
  143. }
  144. /* 64 rows of 128 bits */
  145. void static inline FFTABLEIN(unsigned char *tab, int g, unsigned char *data){
  146. *(((int *)tab)+2*g)=*((int *)data);
  147. *(((int *)tab)+2*g+1)=*(((int *)data)+1);
  148. }
  149. void static inline FFTABLEOUT(unsigned char *data, unsigned char *tab, int g){
  150. *((int *)data)=*(((int *)tab)+2*g);
  151. *(((int *)data)+1)=*(((int *)tab)+2*g+1);
  152. }
  153. void static inline FFTABLEOUTXORNBY(int n, unsigned char *data, unsigned char *tab, int g){
  154. int j;
  155. for(j=0;j<n;j++){
  156. *(data+j)^=*(tab+8*g+j);
  157. }
  158. }
  159. struct batch_t{
  160. unsigned char s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16;
  161. };
  162. typedef struct batch_t batch;
  163. #define BYTES_PER_BATCH 16
  164. batch static inline B_FFAND(batch a,batch b){
  165. batch res;
  166. res.s1=a.s1&b.s1;
  167. res.s2=a.s2&b.s2;
  168. res.s3=a.s3&b.s3;
  169. res.s4=a.s4&b.s4;
  170. res.s5=a.s5&b.s5;
  171. res.s6=a.s6&b.s6;
  172. res.s7=a.s7&b.s7;
  173. res.s8=a.s8&b.s8;
  174. res.s9=a.s9&b.s9;
  175. res.s10=a.s10&b.s10;
  176. res.s11=a.s11&b.s11;
  177. res.s12=a.s12&b.s12;
  178. res.s13=a.s13&b.s13;
  179. res.s14=a.s14&b.s14;
  180. res.s15=a.s15&b.s15;
  181. res.s16=a.s16&b.s16;
  182. return res;
  183. }
  184. batch static inline B_FFOR(batch a,batch b){
  185. batch res;
  186. res.s1=a.s1|b.s1;
  187. res.s2=a.s2|b.s2;
  188. res.s3=a.s3|b.s3;
  189. res.s4=a.s4|b.s4;
  190. res.s5=a.s5|b.s5;
  191. res.s6=a.s6|b.s6;
  192. res.s7=a.s7|b.s7;
  193. res.s8=a.s8|b.s8;
  194. res.s9=a.s9|b.s9;
  195. res.s10=a.s10|b.s10;
  196. res.s11=a.s11|b.s11;
  197. res.s12=a.s12|b.s12;
  198. res.s13=a.s13|b.s13;
  199. res.s14=a.s14|b.s14;
  200. res.s15=a.s15|b.s15;
  201. res.s16=a.s16|b.s16;
  202. return res;
  203. }
  204. batch static inline B_FFXOR(batch a,batch b){
  205. batch res;
  206. res.s1=a.s1^b.s1;
  207. res.s2=a.s2^b.s2;
  208. res.s3=a.s3^b.s3;
  209. res.s4=a.s4^b.s4;
  210. res.s5=a.s5^b.s5;
  211. res.s6=a.s6^b.s6;
  212. res.s7=a.s7^b.s7;
  213. res.s8=a.s8^b.s8;
  214. res.s9=a.s9^b.s9;
  215. res.s10=a.s10^b.s10;
  216. res.s11=a.s11^b.s11;
  217. res.s12=a.s12^b.s12;
  218. res.s13=a.s13^b.s13;
  219. res.s14=a.s14^b.s14;
  220. res.s15=a.s15^b.s15;
  221. res.s16=a.s16^b.s16;
  222. return res;
  223. }
  224. batch static inline B_FFN_ALL_29(){
  225. batch res;
  226. res.s1=0x29;
  227. res.s2=0x29;
  228. res.s3=0x29;
  229. res.s4=0x29;
  230. res.s5=0x29;
  231. res.s6=0x29;
  232. res.s7=0x29;
  233. res.s8=0x29;
  234. res.s9=0x29;
  235. res.s10=0x29;
  236. res.s11=0x29;
  237. res.s12=0x29;
  238. res.s13=0x29;
  239. res.s14=0x29;
  240. res.s15=0x29;
  241. res.s16=0x29;
  242. return res;
  243. }
  244. batch static inline B_FFN_ALL_02(){
  245. batch res;
  246. res.s1=0x02;
  247. res.s2=0x02;
  248. res.s3=0x02;
  249. res.s4=0x02;
  250. res.s5=0x02;
  251. res.s6=0x02;
  252. res.s7=0x02;
  253. res.s8=0x02;
  254. res.s9=0x02;
  255. res.s10=0x02;
  256. res.s11=0x02;
  257. res.s12=0x02;
  258. res.s13=0x02;
  259. res.s14=0x02;
  260. res.s15=0x02;
  261. res.s16=0x02;
  262. return res;
  263. }
  264. batch static inline B_FFN_ALL_04(){
  265. batch res;
  266. res.s1=0x04;
  267. res.s2=0x04;
  268. res.s3=0x04;
  269. res.s4=0x04;
  270. res.s5=0x04;
  271. res.s6=0x04;
  272. res.s7=0x04;
  273. res.s8=0x04;
  274. res.s9=0x04;
  275. res.s10=0x04;
  276. res.s11=0x04;
  277. res.s12=0x04;
  278. res.s13=0x04;
  279. res.s14=0x04;
  280. res.s15=0x04;
  281. res.s16=0x04;
  282. return res;
  283. }
  284. batch static inline B_FFN_ALL_10(){
  285. batch res;
  286. res.s1=0x10;
  287. res.s2=0x10;
  288. res.s3=0x10;
  289. res.s4=0x10;
  290. res.s5=0x10;
  291. res.s6=0x10;
  292. res.s7=0x10;
  293. res.s8=0x10;
  294. res.s9=0x10;
  295. res.s10=0x10;
  296. res.s11=0x10;
  297. res.s12=0x10;
  298. res.s13=0x10;
  299. res.s14=0x10;
  300. res.s15=0x10;
  301. res.s16=0x10;
  302. return res;
  303. }
  304. batch static inline B_FFN_ALL_40(){
  305. batch res;
  306. res.s1=0x40;
  307. res.s2=0x40;
  308. res.s3=0x40;
  309. res.s4=0x40;
  310. res.s5=0x40;
  311. res.s6=0x40;
  312. res.s7=0x40;
  313. res.s8=0x40;
  314. res.s9=0x40;
  315. res.s10=0x40;
  316. res.s11=0x40;
  317. res.s12=0x40;
  318. res.s13=0x40;
  319. res.s14=0x40;
  320. res.s15=0x40;
  321. res.s16=0x40;
  322. return res;
  323. }
  324. batch static inline B_FFN_ALL_80(){
  325. batch res;
  326. res.s1=0x80;
  327. res.s2=0x80;
  328. res.s3=0x80;
  329. res.s4=0x80;
  330. res.s5=0x80;
  331. res.s6=0x80;
  332. res.s7=0x80;
  333. res.s8=0x80;
  334. res.s9=0x80;
  335. res.s10=0x80;
  336. res.s11=0x80;
  337. res.s12=0x80;
  338. res.s13=0x80;
  339. res.s14=0x80;
  340. res.s15=0x80;
  341. res.s16=0x80;
  342. return res;
  343. }
  344. batch static inline B_FFSH8L(batch a,int n){
  345. batch res;
  346. res.s1=a.s1<<n;
  347. res.s2=a.s2<<n;
  348. res.s3=a.s3<<n;
  349. res.s4=a.s4<<n;
  350. res.s5=a.s5<<n;
  351. res.s6=a.s6<<n;
  352. res.s7=a.s7<<n;
  353. res.s8=a.s8<<n;
  354. res.s9=a.s9<<n;
  355. res.s10=a.s10<<n;
  356. res.s11=a.s11<<n;
  357. res.s12=a.s12<<n;
  358. res.s13=a.s13<<n;
  359. res.s14=a.s14<<n;
  360. res.s15=a.s15<<n;
  361. res.s16=a.s16<<n;
  362. return res;
  363. }
  364. batch static inline B_FFSH8R(batch a,int n){
  365. batch res;
  366. res.s1=a.s1>>n;
  367. res.s2=a.s2>>n;
  368. res.s3=a.s3>>n;
  369. res.s4=a.s4>>n;
  370. res.s5=a.s5>>n;
  371. res.s6=a.s6>>n;
  372. res.s7=a.s7>>n;
  373. res.s8=a.s8>>n;
  374. res.s9=a.s9>>n;
  375. res.s10=a.s10>>n;
  376. res.s11=a.s11>>n;
  377. res.s12=a.s12>>n;
  378. res.s13=a.s13>>n;
  379. res.s14=a.s14>>n;
  380. res.s15=a.s15>>n;
  381. res.s16=a.s16>>n;
  382. return res;
  383. }
  384. void static inline M_EMPTY(void){
  385. }