From df82a06c16493e9ba24f50828c2e9ab2874b2a84 Mon Sep 17 00:00:00 2001 From: chudov Date: Wed, 3 Dec 2008 21:42:22 +0000 Subject: [PATCH] CRCs needed by ripper --- CUETools.Ripper.SCSI/CRC16CCITT.cs | 55 +++++++++++++++++++++++++++++ CUETools.Ripper.SCSI/Galois.cs | Bin 0 -> 6368 bytes CUETools.Ripper.SCSI/RsDecode.cs | Bin 0 -> 12560 bytes CUETools.Ripper.SCSI/RsEncode.cs | Bin 0 -> 3950 bytes 4 files changed, 55 insertions(+) create mode 100644 CUETools.Ripper.SCSI/CRC16CCITT.cs create mode 100644 CUETools.Ripper.SCSI/Galois.cs create mode 100644 CUETools.Ripper.SCSI/RsDecode.cs create mode 100644 CUETools.Ripper.SCSI/RsEncode.cs diff --git a/CUETools.Ripper.SCSI/CRC16CCITT.cs b/CUETools.Ripper.SCSI/CRC16CCITT.cs new file mode 100644 index 0000000..e8409e3 --- /dev/null +++ b/CUETools.Ripper.SCSI/CRC16CCITT.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CUETools.Ripper.SCSI +{ + public enum InitialCrcValue { Zeros, NonZero1 = 0xffff, NonZero2 = 0x1D0F } + + class Crc16Ccitt + { + const ushort poly = 4129; + ushort[] table = new ushort[256]; + ushort initialValue = 0; + + public ushort ComputeChecksum(byte[] bytes, int pos, int count) + { + ushort crc = this.initialValue; + for (int i = pos; i < pos + count; i++) + { + crc = (ushort)((crc << 8) ^ table[((crc >> 8) ^ (0xff & bytes[i]))]); + } + return crc; + } + + public byte[] ComputeChecksumBytes(byte[] bytes, int pos, int count) + { + ushort crc = ComputeChecksum(bytes, pos, count); + return new byte[] { (byte)(crc >> 8), (byte)(crc & 0x00ff) }; + } + + public Crc16Ccitt(InitialCrcValue initialValue) + { + this.initialValue = (ushort)initialValue; + ushort temp, a; + for (int i = 0; i < table.Length; i++) + { + temp = 0; + a = (ushort)(i << 8); + for (int j = 0; j < 8; j++) + { + if (((temp ^ a) & 0x8000) != 0) + { + temp = (ushort)((temp << 1) ^ poly); + } + else + { + temp <<= 1; + } + a <<= 1; + } + table[i] = temp; + } + } + } +} diff --git a/CUETools.Ripper.SCSI/Galois.cs b/CUETools.Ripper.SCSI/Galois.cs new file mode 100644 index 0000000000000000000000000000000000000000..1153420ceecd1ff06262872e500d69300866582b GIT binary patch literal 6368 zcmezWuau#fA(J7GA)P^iA()|(p_rkBA(bJQ!J2`Wfr|l`tR90iLq0eKLo!1N zLncE$LmophgC2uBLn=caLn=cNLncEqK~q8)QW+{3N}%dMHs&!TGUPI(G88iuFeEZ0 zGo&&oFgP=WGPp8?Fyw>n1lbbAkjYTMPyn_^k0F@BnIV|L6YSz@Fv-bKz);GN#E=7a zg#tq|Lk>eCLoq`!g93v)Ln1>CLq0<$Lork>Ob@0mh_6Z*6u@Bwq5~NG8GINb8T=Uh z8GIQ$85|jW7!(+6859@{7%CVH8B(Br;bcHJ4HUA8;IK+Ya|Oh7h);aHBQ zR)ay4!J2`K0b)KVl*<@Erh>u=6ptkg(G0N+3gB=pU3>p;5np|Q=0k^(^CsQ@(_ zkq$WF@tp#VT|=aJ$Y&^GP+-u2tILF{Ghna=rxpbU8*sRS!Wbf=&7jSo33mf0 z1F~(LDDf4|kO_`MP#OT`4_G`#Gr-~u6ix^=$Y~A~UdZ7c&5!~&D-*>JoD3kp*)Z6E zQ!lFjK>kky`%eR`N)4XA4Hyg@_3Jkgob_@y(urvZn9fVqaM`24kO+>! zJcbge4WQHmQd7i`%22{k%233RheZVZ)d~z&Xsv)~aH|Ja4@WbA@{a-os3t*; zl_Z8(qDz>;87~`|;}}Sf8_cp9IpvcRL*&H0z$Rpn#S$KrsNx8IblCsBH{u8Y;$$%722jj^N;gm$MOsX-O(;l3 z)PM*Udfg5x$suJhsv2Tz0z(FUhC~u-0gzo~NcAi^?LSCJ;HpoFO{)c|{PB4P#FyX2 z45J0bG-3Tp5FgaDOk_Yc3DU<*WWe9c%w&M{>Jk}1eN0FT zfViFz#wj5s-^v;Rxb`!ZDKpId;X%fBq8Sjb zfVA6Sqc|YnB4Py6hefDGq&korIT;W=YixXESp*wjUAW!gv%yJ&w+4R<9$@sf&`W_7 za5@0_4wA}1c@9w)fZUTBI6DZ^$MT&h9)yrXHwlyjarf0gCP7TW*HbHIs6^`DW4c9y zp@IRD`am@+Xaoc_4umXb2p%CpRc8bi(_;X^JOkv=LG=x4&65Nj^Gsz(WXNMcs08_> zgrSI`lpz(|&PO&c-{5?0nt=h5YFwox%yiKBC}>PH89V}<$B@EM#E=gjg$3ovO7Ms< zC>%gzf1t5O|n;zarugRKkM75__K!qE3M!13WV83NA?@BbA^$ib$W> zax+35s6>H`wL#(yTd7E>OoWt7#BY>O?2p7O|1gLxf>4lUFpme4IR|T<~l=d#je2__?G6Xbw2&#QRDG4&_3zCI| zE6jFCxdagh^>;z(Jrij(4!zWX!~n?6AX`B01L;LAol#@E23*#mt3s48oM?S=RNb&% QFTw^;i3D;L7qmPB08Nc;)c^nh literal 0 HcmV?d00001 diff --git a/CUETools.Ripper.SCSI/RsDecode.cs b/CUETools.Ripper.SCSI/RsDecode.cs new file mode 100644 index 0000000000000000000000000000000000000000..8450ce1fafa254806c9b2fd378057de1b53de438 GIT binary patch literal 12560 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 literal 0 HcmV?d00001 diff --git a/CUETools.Ripper.SCSI/RsEncode.cs b/CUETools.Ripper.SCSI/RsEncode.cs new file mode 100644 index 0000000000000000000000000000000000000000..707c9dfab10a36bfc909b09b2f24c52ab4f5ad7a GIT binary patch literal 3950 zcmezWuau#fA(J7GA)P^iA()|(p_rkBA(bJQ!J2`Wfr|l`tR90iLq0eKLo!1N zLncE$LmophgC2uBLn=caLn=cNLncEqK~q8)QW+{3N}%dMHs&!TGUPI(G88iuFeEZ0 zGo&&oFgP=WGPp8?Fyw>n1lbbAkjYTMPyn_^k0F@BnIV|L6YSz@Fv-cF&!EMi#lXeD z$)LcX#h}2j-(ZQs34_-LRtyRZK@7nRn+^ULoHY1tu)^T80f>FT0Hzj3D=;`PBr=pT zlrUs4f@Xfos(u+AW4Cdenq=7HF_%rwGkrXB+b60!#t zmoV3XVhm=F0h&u;=@yhSkW+3D18Qp30H-PBl%feu!JG_;G|UOko1iqRhZII2yJ2pE zlwzP5=fp@w3JegHsSM=|3Q+r^;pW6bQyF%>2zBVbHbl_}$?FOX2>)b*O9F`91`O5= z3Jfq28QeB@xf#F}VMmQ)3KuUImyCE)Q@Jlh^_RE9jMb;U}?!!z4(F~d3ya#e4 zYS`s6lrrQnXkerphz=caxdbXh6d2;bY(!ZLDx*NEAnpO>L*#VG$xsVV%b*a(EDd0( z7Zy6O97U}AF!du`3yFP5tTLo?`}z8_&d4+1=$c-Q2q%R5AS{>+W=V^vN%P<}=}B-+ z3MnlSWe2D>1=Z+9;QC#GAq8CXBqHU!SoBghaCXpfgFgoQ4M3$hZj(T55K#LCR8Pb5 zF+w#sgyANYPesU}y9naCOokGMN<6N*Xz)oxO7a>f-Rmzqz;(V!9&)bcEVw`?^Slo-(KC{RnX9NcmP*@?1HpMK|Dyw zg&Nz4v;@gJ3Jf6Av9}Ev(z*P6{UI@qsv6;ANLv9^c0lqu$X@go2~2OWL61SY0n9y< z4A>^H&B!)T^Q$!QHt;aWGVnJ@Gw3jIF~~DWH()dXrDIS&t^~I(3m7UHd<^RSJq)^` zIUiywA{BC?r7)1cAhi`N#1W|m=6=-r7hAoO!T_uDU?~=oIw5rlL>81jP-P)yGIATccI1Sn5JU}z$jh1x z8gN;NpF#Byq^`nVkAVCI%A=U|5y*T^c!~z4BM^r89u{BdbrrHpNVN~sOjvFL*^63# z!pa5Y5=DVQ5!$u`)!;d3Io^?>hyjv%A-z~o`h|oQ$oHUrfC9940;vl?qR6JBmscQp Rn2V9!38_0luH}N(_yFqnVzU4M literal 0 HcmV?d00001