{"type":"rich","version":"1.0","provider_name":"phorkie","provider_url":"https:\/\/p.cweiske.de\/","title":"Onleihe LCP license code verification","author_name":"Christian Weiske","cache_age":86400,"width":900,"height":900,"html":"<!-- embedding all files of https:\/\/p.cweiske.de\/725 -->\n<link rel=\"stylesheet\" href=\"https:\/\/p.cweiske.de\/css\/embed.css\"\/>\n<div class=\"phork\" id=\"725\">\n    <div class=\"phork-file\">\n <div class=\"phork-content\">\n  \n<div class=\"document\">\n\n\n<p><a class=\"reference external\" href=\"https:\/\/github.com\/edrlab\/thorium-reader\/blob\/1a01c03e74d1504b0a521898f1ca76b5f6484cfc\/src\/main\/services\/lcp.ts#L624\">https:\/\/github.com\/edrlab\/thorium-reader\/blob\/1a01c03e74d1504b0a521898f1ca76b5f6484cfc\/src\/main\/services\/lcp.ts#L624<\/a>\n<a class=\"reference external\" href=\"https:\/\/github.com\/readium\/r2-lcp-js\/blob\/0b4533e496d9078566369b28ddf6cf05be40d3c2\/src\/parser\/epub\/lcp.ts\">https:\/\/github.com\/readium\/r2-lcp-js\/blob\/0b4533e496d9078566369b28ddf6cf05be40d3c2\/src\/parser\/epub\/lcp.ts<\/a><\/p>\n<\/div>\n\n <\/div>\n <div class=\"phork-meta\">\n  <a href=\"https:\/\/p.cweiske.de\/725\/rev-raw\/e01925f734046b5012054cbebb8daba7df6f6989\/README.rst\" style=\"float: right\">view raw source<\/a>\n  <a href=\"https:\/\/p.cweiske.de\/725#README.rst\">README.rst<\/a>\n <\/div>\n<\/div>\n    <div class=\"phork-file\">\n <div class=\"phork-content\">\n  <style type=\"text\/css\">\/**\n * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann\n * (http:\/\/qbnz.com\/highlighter\/ and http:\/\/geshi.org\/)\n *\/\n.php .de1, .php .de2 {font: normal normal 1em\/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}\n.php  {font-family:monospace;}\n.php .imp {font-weight: bold; color: red;}\n.php li, .php .li1 {color: #DDD;}\n.php .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}\n.php .kw1 {color: #b1b100;}\n.php .kw2 {color: #000000; font-weight: bold;}\n.php .kw3 {color: #990000;}\n.php .kw4 {color: #009900; font-weight: bold;}\n.php .co1 {color: #666666; font-style: italic;}\n.php .co2 {color: #666666; font-style: italic;}\n.php .co3 {color: #0000cc; font-style: italic;}\n.php .co4 {color: #009933; font-style: italic;}\n.php .coMULTI {color: #666666; font-style: italic;}\n.php .es0 {color: #000099; font-weight: bold;}\n.php .es1 {color: #000099; font-weight: bold;}\n.php .es2 {color: #660099; font-weight: bold;}\n.php .es3 {color: #660099; font-weight: bold;}\n.php .es4 {color: #006699; font-weight: bold;}\n.php .es5 {color: #006699; font-weight: bold; font-style: italic;}\n.php .es6 {color: #009933; font-weight: bold;}\n.php .es_h {color: #000099; font-weight: bold;}\n.php .br0 {color: #009900;}\n.php .sy0 {color: #339933;}\n.php .sy1 {color: #000000; font-weight: bold;}\n.php .st0 {color: #0000ff;}\n.php .st_h {color: #0000ff;}\n.php .nu0 {color: #cc66cc;}\n.php .nu8 {color: #208080;}\n.php .nu12 {color: #208080;}\n.php .nu19 {color:#800080;}\n.php .me1 {color: #004000;}\n.php .me2 {color: #004000;}\n.php .re0 {color: #000088;}\n.php span.xtra { display:block; }\n<\/style><div class=\"code\"><table class=\"php\"><tbody><tr class=\"li1\"><td class=\"ln\"><pre class=\"de1\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n<\/pre><\/td><td class=\"de1\"><pre class=\"de1\"><span class=\"kw2\">&lt;?php<\/span>\n<span class=\"co4\">\/**<\/span>\n<span class=\"co4\">&#160;* Verify that a Onleihe CODE is correct (able to decrypt the .epub file)<\/span>\n<span class=\"co4\">&#160;*\/<\/span>\n<span class=\"re0\">$userPassphrase<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'FIXME'<\/span><span class=\"sy0\">;<\/span><span class=\"co1\">\/\/Bitte geben Sie hier Ihren Onleihe CODE ein.<\/span>\n&#160;\n<span class=\"re0\">$lcplFile<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'example\/81f292a0-5989-4d02-8749-398cc0b5057f.lcpl'<\/span><span class=\"sy0\">;<\/span>\n<span class=\"re0\">$lcpl<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/json_decode\"><span class=\"kw3\">json_decode<\/span><\/a><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/file_get_contents\"><span class=\"kw3\">file_get_contents<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$lcplFile<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"re0\">$licenseId<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$lcpl<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">id<\/span><span class=\"sy0\">;<\/span>\n<span class=\"re0\">$encLicenseId<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$lcpl<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">encryption<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">user_key<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">key_check<\/span><span class=\"sy0\">;<\/span>\n&#160;\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$lcpl<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">encryption<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">user_key<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">algorithm<\/span> <span class=\"sy0\">!=<\/span> <span class=\"st_h\">'http:\/\/www.w3.org\/2001\/04\/xmlenc#sha256'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span>\n&#160; &#160; <span class=\"kw1\">echo<\/span> <span class=\"st0\">&quot;Unsupported user key hash algorithm<span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; <a href=\"http:\/\/www.php.net\/exit\"><span class=\"kw3\">exit<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"br0\">&#125;<\/span>\n<span class=\"re0\">$userKey<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'sha256'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$userPassphrase<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160;\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$lcpl<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">encryption<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">content_key<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">algorithm<\/span> <span class=\"sy0\">!=<\/span> <span class=\"st_h\">'http:\/\/www.w3.org\/2001\/04\/xmlenc#aes256-cbc'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span>\n&#160; &#160; <span class=\"kw1\">echo<\/span> <span class=\"st0\">&quot;Unsupported content key encryption algorithm<span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; <a href=\"http:\/\/www.php.net\/exit\"><span class=\"kw3\">exit<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"br0\">&#125;<\/span>\n&#160;\n&#160;\n<span class=\"co4\">\/**<\/span>\n<span class=\"co4\">&#160;* https:\/\/www.w3.org\/TR\/xmlenc-core1\/#sec-AES<\/span>\n<span class=\"co4\">&#160;*<\/span>\n<span class=\"co4\">&#160;* [AES] is used in the Cipher Block Chaining (CBC) mode with a 128 bit<\/span>\n<span class=\"co4\">&#160;* initialization vector (IV).<\/span>\n<span class=\"co4\">&#160;* The resulting cipher text is prefixed by the IV.<\/span>\n<span class=\"co4\">&#160;* If included in XML output, it is then base64 encoded.<\/span>\n<span class=\"co4\">&#160;*\/<\/span>\n<span class=\"re0\">$encLicenseIdBytes<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/base64_decode\"><span class=\"kw3\">base64_decode<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$encLicenseId<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"re0\">$encIv<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$encLicenseIdBytes<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">128<\/span> <span class=\"sy0\">\/<\/span> <span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"re0\">$encLicenseIdBytesData<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$encLicenseIdBytes<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">128<\/span> <span class=\"sy0\">\/<\/span> <span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160;\n<span class=\"re0\">$decrypted<\/span> <span class=\"sy0\">=<\/span> openssl_decrypt<span class=\"br0\">&#40;<\/span>\n&#160; &#160; <span class=\"re0\">$encLicenseIdBytesData<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'AES-256-CBC'<\/span><span class=\"sy0\">,<\/span>\n&#160; &#160; hex2bin<span class=\"br0\">&#40;<\/span><span class=\"re0\">$userKey<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span>\n&#160; &#160; OPENSSL_RAW_DATA <span class=\"sy0\">|<\/span> OPENSSL_ZERO_PADDING<span class=\"sy0\">,<\/span>\n&#160; &#160; <span class=\"re0\">$encIv<\/span>\n<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$decrypted<\/span> <span class=\"sy0\">===<\/span> <span class=\"kw4\">false<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span>\n&#160; &#160; <span class=\"kw1\">echo<\/span> <span class=\"st0\">&quot;Decryption failed<span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; <a href=\"http:\/\/www.php.net\/exit\"><span class=\"kw3\">exit<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"br0\">&#125;<\/span>\n<span class=\"re0\">$padLength<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/unpack\"><span class=\"kw3\">unpack<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'C'<\/span><span class=\"sy0\">,<\/span> <a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$decrypted<\/span><span class=\"sy0\">,<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span>\n&#160;\n<span class=\"re0\">$decrypted<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$decrypted<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"sy0\">-<\/span><span class=\"re0\">$padLength<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"kw1\">echo<\/span> <span class=\"st0\">&quot;License ID: &#160; <span class=\"es4\">$licenseId<\/span><span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"kw1\">echo<\/span> <span class=\"st0\">&quot;Decrypted ID: <span class=\"es4\">$decrypted<\/span><span class=\"es1\">\\n<\/span>&quot;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"sy1\">?&gt;<\/span>\n&#160;<\/pre><\/td><\/tr><\/tbody><\/table><\/div>\n <\/div>\n <div class=\"phork-meta\">\n  <a href=\"https:\/\/p.cweiske.de\/725\/rev-raw\/e01925f734046b5012054cbebb8daba7df6f6989\/verify-onleihe-code.php\" style=\"float: right\">view raw source<\/a>\n  <a href=\"https:\/\/p.cweiske.de\/725#verify-onleihe-code.php\">verify-onleihe-code.php<\/a>\n <\/div>\n<\/div>\n<\/div>\n"}
