From a591cdcc5f47fd7573b01b435144ccc5dcd2e409 Mon Sep 17 00:00:00 2001 From: Kevin Herrera Date: Mon, 22 Jul 2013 15:28:38 -0700 Subject: [PATCH] Adding getSignature(). --- res/invalid.phar | Bin 0 -> 6796 bytes res/md5.phar | Bin 0 -> 6796 bytes res/missing.phar | Bin 0 -> 6792 bytes res/openssl.phar | Bin 0 -> 6848 bytes res/openssl.phar.pubkey | 4 + res/sha1.phar | Bin 0 -> 6800 bytes res/sha256.phar | Bin 0 -> 6812 bytes res/sha512.phar | Bin 0 -> 6844 bytes src/lib/Herrera/Box/Box.php | 135 ++++++++++++++++++++++++ src/tests/Herrera/Box/Tests/BoxTest.php | 71 +++++++++++++ 10 files changed, 210 insertions(+) create mode 100644 res/invalid.phar create mode 100644 res/md5.phar create mode 100644 res/missing.phar create mode 100644 res/openssl.phar create mode 100644 res/openssl.phar.pubkey create mode 100644 res/sha1.phar create mode 100644 res/sha256.phar create mode 100644 res/sha512.phar diff --git a/res/invalid.phar b/res/invalid.phar new file mode 100644 index 0000000000000000000000000000000000000000..696b7ad8004bc590c0e6cef92c3a0dd8f65b3d41 GIT binary patch literal 6796 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 F`G08#7_0yQ literal 0 HcmV?d00001 diff --git a/res/md5.phar b/res/md5.phar new file mode 100644 index 0000000000000000000000000000000000000000..d2bb8d4a15c4484cc7157a2171f331b22e6de346 GIT binary patch literal 6796 zcmb_h%W~Vu6`d@@U49_dVlW06k)kNSCX_5o_Ry9qlEtAoO2r%(3Iv)YMtB7P^%~D7 zWIOBZQ^|5FRoSE}i+o2uAb*fW&g};Th@d@-$mJsY;=cR#y{Eyw=gA^zG>j`gWzU%D zM;^c40?FKMH2fK}{K$6F)VZ*ozR~1+`dYkB;jdhwOZ`K1Lg)!mf8H; z&+^PNhmw68&%SHWqTlzUoTn~N@>hPqUo9gSlDmxzn*7KOmL9hgCtpZQ{chJ}Tg9G{LrAQvivEohUL5Dk5?qGb@Y83l(&ikFE z9XGe7p0n}cXuR7}e-NyGaCkK|F!E4KaJEQZ#Xkv~AUwu6|8{1!x-k9%2GS+dN z48}*NUn-^=4f;8IhTV8Q7@O?F2exXc!ZtiT8=EbW=&Jkk*viu-N9;!Ehdjd$%gt;c z2T5kKXZviY-7sD8&CL0A-c16>k4z%gQvgxj&N%Br7dJ zUF4ypii~0vC~B~VT-L1FeK#(vzU~kK%D+u`nU3XLl2x9hCwF8#rqIoMbY&7JIPhI3 z_v5I0-TBtJbTT*flblqBzNgaTEImK&inXLmmG{W8%Dp0ENzC!3WX2btcmJ^T-HRN> zD4rz`D~hlri9~rUHzia7icb+qm7aKN3(BDo5vmehJTiD%f|^~`NMwuHy|{8Nd1r<` zwjjQ|y17^irQ)-cQcZ_&IT~6*$@Ns#f^>nFL`6vm6{13D)o$RJHWu9Rcxp9YI_`pZ zUdB2f+At&(Re)U_O^QL;dYOm#FyM-L!O3C#G^d8 zG4E1q9>?;C^cfAM)pjiMgeP)_z!qdN2y+@4hJ(m4GXpW)YSIR|FW-y?FEQ1AUm0*x zkJuq7K}afOq@Q-wG92v3o~G7l7TcxDLr1&K9&JBjZ{wW3ikFc`QF3+AtET%Bk&Z?n0otT(ZJj&3tFiB~9b&zyouzQ{HO~U)EG|)<$sdSNYb|6Nr8vt>79eA2|Ue61b0*%dhcWBg-*UTqgPgFrHe)sXs^c?l#;w%5wJl z9rk(qy0^W(tw}H5?FiaViFR^$_FF-GSRx8&25JSeO0~y>w|Ma6$rq2&0F~((;3f?@ z225l~JO`ec6J)#vca2#>%Q!(t(cQ7l%ydfUW0rA#VSxqcmj|5S83(Z&?}DwAk6m|WCnwV9F+!j5!f>lrhM5fbcbL1)|2wumg?t0oBJ!Wd-5u&8;0 zFg%}I=3q2B9rYO+s6XRy1nn6IjC!BPuAGcDQHt0P*|wp1%WN`?-DTjhDVI-WTxg_C zN<50opca6TWa4d=ZX={nW}u7b6Cl|4%0EyaDDKzq#8IOOr?U$3+rXc)qQNjf!}!e^hUhfFgy>KZCM)Ev7SqaE#JLBSS)2+b9XAe>l%r#K40kFg z&16vO8d35TRlnZV>8;1Lrd4mJw|=toNq5US)_6R<-T8>a;vg6MkcSCj09_Ls@+l_N zhM(bD=;xFxOM(JXwi&X3(?>mBC=n|=1Kg5#K4_x$hvEPbLH{iAV|eT~TWkZZQytgx zQ_?0-#eJdmsy2Jd+6J{yT@huaEgH5I3I$ntP}IsxQMObV0bv7+keq5CAG?U%c+Gg;OvOPy3OoKCY#+)A=*ZfW#Y?o6VdNTEC!g;LT{5LLTHj&N6Y zuRPkYgYZH`MT~8>{q*V6Hq)0x;Xnzj$PH8ntC}t8>l)w^dXMFJ(ydfpPSqJsIj#bH z944=5=*lW-7ao4x#RIWr$uhUm>S@v|`2u^bnnoL^JT-7CIWRQpgj&kP49)ipP05fo zxz7wzEsB)@TP0c~Oad+ywT5}9W@_y!r61$EmuWZP=mr>y0@WAiNcb|*9g-YtVGv*% z+~L^r_7y=3IcWm!e9t(h8k*Xta;3!Nwy1KWJ+agSkr9lwSt6oz7h#NvwweQ2e)8lA zSr-2q@`6w;9yN1Cms58HX;-~sA<>mtt=kL+^j&wbhDSsD^bFhjyEkuv?e7``LKYb6 z(n)2>^XSqt$0tK@J*NUIt^0TD0Wpwc3KkfUr&vgr>H%h#qJ|pu1$llnr6h;)k{Dk< zBPB|w=v-PU8K^o4{9o&Wk}hi|H%QS+vP!d&0F9cPWqhKqUm-TE%>*g|5`ZUbn0lH^ zV3(3~?-A}_MgW`wR}6Zsv_?arfJQhlo`ITA384rD85DqqAjJTeEObukjEWV;JHU@T zu;9hF%}vTUjPnQ_Ys^YBDnw;-6GnF-NHa%|A$1)^KC}es)nN%&A*N^$W=uMZ)-fp* z;dIKkYBnzAOEk2?DW`ir?Vh{cbFX{OyXSa$P~3n^CU>wAltz(;s^-Z&DXBAJ7>gMNR;Ox*wnT0dSa!rl)$u*9Y~6=7+8(_x&={fk z(upABwRK$Ah|uWM8`+7dw(;hJdNiSE!=;eK^9i}$P>9xWMXRB^m|MorLKHLhpp1=O zN*F0Zi5A@xgpS7L(&9ZafypTZjpw8nrH~~6)$ZOwMnQp1X-o916Y zP%FH-f7!F^v4)|55#9Xm4XXkr%!7DpnZHKQCy+4H)g)%B`i%orK~^{sJkQxd8VY!Y zMV}okqri{o>WE~~Hs6z`UrjX1l)BbHq*(1p-YHBfJ8DdX483 zvYmDIsbo2os%%n~MZO~+kUz*G=k@~vM9`ka$mJsY;=cR#y{Ez57s(=NG>j`gWzU)E zM;^c40?FKIH2fK}{K$6F)VZ*ozR~1+`dYkB;jdhwOZ`qL*@ofmf8H; z&+^PNPbB*`o_*V(#bDq^IZs`lbSWr^_-3mM&q4E%JXF!?KHlVIoY@T3|?CX+!>t>M-y{2{PL^e>Dc~i^u|0F$ymqn zb~rvf{z5U;Xwc8ubL__J;n-v!KCo3o6}FS()3MnSiLSaokF7jia>Q#Wuw6*L9gLtH3>;=6O{OD&ha$Kx(7!7&Y0jDG0Md6$-yk4z>^rioS{&i$EGAX#Y% z>LL#%Rb&*aKv9D=v2`Q2tHA%XBQ~lC1J1J-H*}F@&`dMrIWd-pX8)6^gWdxXX*KISF9yns=P;zRqhoTOJa^MB{RPGy!*$c?_T66 zM)53pR8fQ_NhHc+xhbIvP<)C=s`SKDTTl*#h)|X2;*r7A64dOfMj~6p?!}dJ$vZRj zu?6wv)y>6HC>5WjlxjMJ%hAvhO0K7>7NiTbBq~Zms1OxGt9Ap&w6Wlh$5X5M(s38O z^D>U|G!6zViaRb*+ALgVc_-zUPT+e^&YKX@GAF4s51l(^de$(ePR1iALn3;hXZZ&Cx+!t>~!paG>h$0<)Ne9W{ z5!)pR`oeZ|KM(jGjq5uJMI^?q=G>je-i;Jl^!CU=hY6`BiYLk2tXY!pf<;IxA*dnC z%~Hw;i%`1!XckkLYG>6@olZ_@CRW{?#V|6}!frpCTuKL<0A*a``pBZDcuSipxY_0LD|RIQ8eK-kpXUM_JBZ zzsEjrU-!1Rw>9av@B4z*FVWr}oc>M_AC-s#nt@t@tWxdK@EsmJefs$mG(cr~2DnK> zjsX)H63>BW<^&mU!ChmP&@xWYQFM1~Gc%pi`Iu##UszxP`sKlFFn|G&jU$LGqr`D9 zEb|P|Se$fg>PJp`)0$BYNukFCOpOrS`k_hi+KW*L@Wt`)9}#2q#PZ?W4Kc} zX(oeG*NBp*sQUG;PH#P~HLZF(z4ep+C*3XUSmW{Zw*L`_#X&CiArBM60Jg8o_J$MD!`w%7(*r#i0X zr=(4wiu*$ARc-c^wGC>ax+2O-TQqDb6biEPps1CXqHL)!0>TCyvnEX96epiSh`V`= zZ+T1`L-$EW+b?%tXR@qUmO80mIGtvfxRqqr+|uZ)+?hl@kwSSe3Zy0@WAiNcb|*9g-YtVGv*% z+~L^r_7y=3IcWm!e8)JZ8k*Xta;3!Nwy1KWJ+agSkr9lwSt6oz7h#NvwweQ2e){w& zSr-2q@`6w;9yN1Cms58HX;-~sA<>mtt=kL+^j&wbP7Y7(<5O(w@87%ww!do(2w7mL zODB~j&!bDr9KSsQ*9$7J(t2>W9ufmNreJ{qd5VQ}sUBc zGg6{-iq55#l7Xs&!2h)_DCx3ha)T7DB&#$V3DBsyS;i;&`W0fs+DxDlAOU!?hN-8y z1a>J&_a5W^Wdy(}aK)h4N^3L}3TT7_;~A*=ln{zgkU;@x2vQ7i$wKFp&Zt;nyaW8m z0}Eb!+uWp#!#Iz?vBs=4qe4_RH(_)Kf;4mV7*f|!o4ULBTj6=I48VaBAhXdRP6 z5l*Lkt7hX;zC=SSoN~Hn)9#tuJ@dL}ynBY12gMDzWU`Nqpfrj!R5ec?k@74_@#b`9 znV&5QWY+UF9s)?u)ZaRF&q$pS!&uBHusT(J+7h`9xWMXRB^m|MorLKHK0zl@Dt zN*F0Zi5A@xgpS7L(&9ZafypTZjpw8nrH~~6)$ZOwMnQp1X-o916G<{g!l4H zs1@GazwFudSi?}jh;DxOhE;(Q=0QBQ%wMDD6G)ipY7#S5{l)>RAS;{*o)>IC4F$Zy zV!-y7QQ${(bwsjgo9{`}uO=F0N?mIp(yW4y)R@(#Xf#3pDyC4O>0ni<4lBQK;5rOh z+de!v8rv_A-=5&-mJvwo#on_A4<7ss|9_!A@qxdePeT6({rD4^ literal 0 HcmV?d00001 diff --git a/res/openssl.phar b/res/openssl.phar new file mode 100644 index 0000000000000000000000000000000000000000..a2cd9b8d04a4bffccc66a6fd474824fc9f6a6e24 GIT binary patch literal 6848 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 literal 0 HcmV?d00001 diff --git a/res/openssl.phar.pubkey b/res/openssl.phar.pubkey new file mode 100644 index 0000000..811450e --- /dev/null +++ b/res/openssl.phar.pubkey @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKuZkrHT54KtuBCTrR36+4tibd+2un9b +aLFs3X+RHc/jDCXL8pJATz049ckfcfd2ZCMIzH1PHew8H+EMhy4CbSECAwEAAQ== +-----END PUBLIC KEY----- diff --git a/res/sha1.phar b/res/sha1.phar new file mode 100644 index 0000000000000000000000000000000000000000..d417151a38908dbd1d800b358abf165704edc0e2 GIT binary patch literal 6800 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 J=H>Cr{{e!?6Py45 literal 0 HcmV?d00001 diff --git a/res/sha256.phar b/res/sha256.phar new file mode 100644 index 0000000000000000000000000000000000000000..2d1a1c3664b4ba5a7a78f1bc57c0e849175a149b GIT binary patch literal 6812 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 literal 0 HcmV?d00001 diff --git a/res/sha512.phar b/res/sha512.phar new file mode 100644 index 0000000000000000000000000000000000000000..4be90d3f61e8b02c4f0602cbb8ad34731f71d5b5 GIT binary patch literal 6844 zcmb_hOKcn06?K7b%3aZY@kC5K!-^6`+LjXPW62I}8I>%BqE*z2K@4Xe$%*EdnW27h zR^1d`c9~s)0$sJ67Fl%>WYeH1x=4YdTem=W4YKW~$hq$`8j3?Zi^?#_cjx}!efOR> z+_)c)<4VOi=L5FMOfPi##WG0ddZpqGndOCjJ4x(I%Z$f%V%AxjCEO1BBcAoo6FZK1 zl3KMIyM3EEzMZChe&MBAYMFy3*TbFOZvUurxYOO~9dtn;7p4Sj&?YS*8v0^|6W^~h z3J#AHFB6f>>NkbK&PA5kPS%%tj(R)Y-g+hB*(3?qD<8|8Y+GImuPp=abdNjT6SLcS z?^)-l*MHW1V!jZ`n8&f->Fpl8tC&hO=;v$`yYaZwGug|RY}U{e+u^}c&#Z|=PrE;g ztSp&u#BKy$z*Fq7+{_Ac5T_>F++wYI#dO3sGvgOoBlc}CG>KSFjpI`0#lK%UE0Z|EzUSDP7lnd{K`|5}LRGAbM+Q$z zP}B1giF6z}r|0$=UmBv1jfpRt-drq&Qt??xsis4?7!56<k&bRl2Ez%(Jd1w`UQ_+wuYMNvcO|)Us1dh$0<)NcpVRu*VvZqnT z9z~PTr6{>Gj#zbr8qe1IA=@Ac`ocCcFZ1~pjq7U(MI^?C=G+)W?xhqNH@C>Z5))EY z6i=MhS+yYF0E>`TLQq4NtA&&i7NK-`;V_~w)y}G+Iyf;gsd$*8XRAd$d*tXO`Pk1A<~nc^_f z7l859DoVT&s&~EOL}8k-$Ir3PD;Ld`l@(2T@Vq5xtpaU-=jg|Rc&9)V&gwC~&;XU`A>bwrIR;E*NIVCgq3x%<26v5NOv@-nN73D}&dg*$=VO?1erkaQ z=$HG$b{hsjHufMg31iziwajBcV{y{0ffw4zWo<|`B!%u0Ff{^j>xU-6Yd1n6z!%%a zlee4iv}BbVdne5oI6u0-1$4&gv1nt8eU?eI8cZ(gv)W9-2VqCLvAoF)VuS=cAJf^k zv@IeF_^JuQxG)A;F)T`+APm>zmf7ic54vrJ2I>tt96@`=0i)jMvU59SRg@z3L$+;b zUN)-?V|U`aY{2DH85bI9l@gEQGN=V0B$@cWO1BYEC_~W2^AjN07s@|SZ!7M{&&5%r z38%L|zn+Y)pxDO*1#r&&Pm(BUvn$^lu)M)AFU9!H7>4M;$Anm-AWW9aTQ#PYvygKa zEW;=fN|u}`h!c*E;WFH*>?D;zscS^RQ&jzYR|i)v*P3R%9b9>F>y7RfbOo#B4@KEh zVfcg%IA%={M+r_ogAjMJ2;Z`ZHiqt#jJ99yzRqM(uPk*^!Eidw25~FNhPkZKSFtmR zdLo7LVB|_kM^04j7CFLQ**SMFXTe z61ex|c+#y@UQX2+PB^XtycfieXz0o+splTP-oKS#os6Wt-nu^I*erolCiEpA^Pw2+e~;LgX4W2&L4y(w2pOm2%RH`)_RJrEhe zSR2M7N@pBIm}s*(faTTIRkAGpRpbR>x_H#g6iJ7|_?>nIqTYvK8DX{%@V?f9PL!H@)EO{QDS!Qql5M1}EzzXa3^}0h0O*+_s!&CMb{ z(bum48&+oml>iCAlQ~RH%_Xo)LArSt_bky=wqsNfCjv^mg zg7oUJgsTu!Gzc>$oki<7$ra&r%C~BLT*@bCXt`5%<9N_Gb{fZSgyAmgQVT-J!t=#xv?iKw>m=7V}Pp=iUQki_#7a=oGu zt>K7PLw7N!h@XWhX6$wm8#|ORQiKxCyC(=s8kb9pH^c-crw}xrlU@`;mHclB3ZP}H>BxT6OA&Zt~n5CIE9bYnAN6e zG(rC?rcj~jU{$GhrhehTbr`b!{_f6RumA91{}4a7bU|YGx7Kdmy7e9W|GxUf2mZc? z|M{;(Kg8mT-~H!3`uy!H>$6XZAAcM4s}hs%m3F!BM|E}{CBD1xepp?v{Nc~9&VTTW z^VZLPv-`z)<--SG|7G>>U;X@Fm$&}-^(Vjl$M% array('MD5', 16), + 0x02 => array('SHA1', 20), + 0x03 => array('SHA256', 32), + 0x04 => array('SHA512', 64), + 0x10 => array('OpenSSL', null), + ); + /** * The placeholder values. * @@ -254,6 +269,71 @@ public function getPhar() return $this->phar; } + /** + * Returns the signature of the phar. + * + * This method does not use the extension to extract the phar's signature. + * + * @param string $path The phar file path. + * + * @return array The signature. + * + * @throws PharException If the phar is not valid. + * @throws RuntimeException If the file could not be read. + */ + public static function getSignature($path) + { + $signature = array(); + + $raw = self::readEnd($path, -12, 12); + + $flag = substr($raw, -4, 4); + + $type = unpack('V', substr($raw, -8, 4)); + $type = $type[1]; + + $size = unpack('V', substr($raw, 0, 4)); + $size = $size[1]; + + if ('GBMB' === $flag) { + if (isset(self::$types[$type])) { + $signature['hash_type'] = self::$types[$type][0]; + + if (self::$types[$type][1]) { + $size = self::$types[$type][1]; + } + + $signature['hash'] = self::readEnd( + $path, + self::$types[$type][1] ? -8 - $size : -12 - $size, + $size + ); + + $signature['hash'] = unpack('H*', $signature['hash']); + $signature['hash'] = strtoupper($signature['hash'][1]); + } else { + throw new PharException( + sprintf( + 'The signature type (%x) of "%s" is not recognized.', + $type, + $path + ) + ); + } + } else { + if (ini_get('phar.require_hash')) { + throw new PharException( + sprintf( + 'The phar "%s" is not signed.', + $path + ) + ); + } + } + + return $signature; + } + /** * Replaces the placeholders with their values. * @@ -392,4 +472,59 @@ public function signUsingFile($file, $password = null) $this->sign($key, $password); } + + /** + * Reads from the end of a file. + * + * @param string $file The file handle. + * @param integer $offset The end offset. + * @param integer $bytes The number of bytes to read. + * + * @return string The read bytes. + * + * @throws RuntimeException If the file could not be read. + */ + private static function readEnd($file, $offset, $bytes) + { + if (false === ($size = @filesize($file))) { + $error = error_get_last(); + + throw new RuntimeException( + sprintf( + 'The size of the file "%s" could not be retrieved: %s', + $file, + $error['message'] + ) + ); + } + + $read = @file_get_contents($file, false, null, $size + $offset, $bytes); + + if (false === $read) { + $error = error_get_last(); + + throw new RuntimeException( + sprintf( + 'The file "%s" could not be read at offset %d for %d bytes: %s', + $file, + $size + $offset, + $bytes, + $error['message'] + ) + ); + } + + if (($actual = strlen($read)) !== $bytes) { + throw new RuntimeException( + sprintf( + 'Could only read %d of %d bytes from "%s".', + $actual, + $bytes, + $file + ) + ); + } + + return $read; + } } diff --git a/src/tests/Herrera/Box/Tests/BoxTest.php b/src/tests/Herrera/Box/Tests/BoxTest.php index 2481cda..15fd37c 100644 --- a/src/tests/Herrera/Box/Tests/BoxTest.php +++ b/src/tests/Herrera/Box/Tests/BoxTest.php @@ -60,6 +60,37 @@ public function getPrivateKey() ); } + public function getSignatures() + { + return array( + array( + RES_DIR . '/md5.phar', + 'MD5', + '6772FC5AB8AB8D72BB69B6A0C323C796' + ), + array( + RES_DIR . '/sha1.phar', + 'SHA1', + 'A158DF4720C619E84A777982402B5D32394805E5' + ), + array( + RES_DIR . '/sha256.phar', + 'SHA256', + 'D0A6AB31437CA8485779E7603670ABDE05C911EA7FCEC051B8D3FB14A1480B7D' + ), + array( + RES_DIR . '/sha512.phar', + 'SHA512', + 'B4CAE177138A773283A748C8770A7142F0CC36D6EE88E37900BCF09A92D840D237CE3F3B47C2C7B39AC2D2C0F9A16D63FE70E1A455723DD36840B6E2E64E2130' + ), + array( + RES_DIR . '/openssl.phar', + 'OpenSSL', + '54AF1D4E5459D3A77B692E46FDB9C965D1C7579BD1F2AD2BECF4973677575444FE21E104B7655BA3D088090C28DF63D14876B277C423C8BFBCDB9E3E63F9D61A' + ), + ); + } + public function testAddCompactor() { $compactor = new Compactor(); @@ -319,6 +350,46 @@ public function testGetPhar() $this->assertSame($this->phar, $this->box->getPhar()); } + /** + * @dataProvider getSignatures + */ + public function testGetSignature($file, $type, $hash) + { + $signature = Box::getSignature($file); + + $this->assertEquals( + array( + 'hash_type' => $type, + 'hash' => $hash, + ), + $signature + ); + } + + public function testGetSignatureInvalid() + { + $path = RES_DIR . '/invalid.phar'; + + $this->setExpectedException( + 'PharException', + "The signature type (ffffffff) of \"$path\" is not recognized." + ); + + Box::getSignature($path); + } + + public function testGetSignatureMissing() + { + $path = RES_DIR . '/missing.phar'; + + $this->setExpectedException( + 'PharException', + "The phar \"$path\" is not signed." + ); + + Box::getSignature($path); + } + public function testReplaceValues() { $this->setPropertyValue(