{ "info": { "author": "OPS", "author_email": "noreply@mail.orpheus.network", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "\n# EAC Logchecker\n\n![Travis-CI Status](https://img.shields.io/travis/com/OPSnet/eac_logchecker.py/master.svg) \n![PyPI](https://img.shields.io/pypi/v/eac_logchecker.svg)\n\nThis is a transparent implementation of the Exact Audio Copy log checksum algorithm in Python 3.5+.\n\nThis is a fork of https://github.com/puddly/eac_logsigner, with modifications to have it\nbetter match the output of the actual EAC Logchecker to be used in downstream applications. All\ncredit goes to puddly for reverse-engineering the closed source EAC to develop the base.\n\n# Requirements\n\n* Python 3.5+\n* [pprp](http://pypi.org/project/pprp)\n\n# Installation\n\nFrom PyPI:\n\n $ pip install eac-logchecker\n\nFrom source:\n\n $ git clone https://github.com/OPSnet/eac_logchecker.py\n $ cd eac_logchecker.py\n $ python setup.py install\n\n# Usage\n\n usage: eac_logchecker.py [-h] [--json] file\n\n Verifies and resigns EAC logs\n\n positional arguments:\n file input log file\n\n optional arguments:\n -h, --help show this help message and exit\n --json Output as JSON\n\n# Example\n\n $ eac_logchecker logs/01.log\n Log Integrity Checker (C) 2010 by Andre Wiethoff\n\n 1. Log entry is fine!\n $ eac_logchecker logs/01.log\n $ eac_logchecker logs/05.log\n Log Integrity Checker (C) 2010 by Andre Wiethoff\n\n 1. Log entry is fine!\n 2. Log entry is fine!\n $ eac_logchecker --json logs/05.log \n [{\"message\": \"Log entry is fine!\", \"status\": \"OK\"}, {\"message\": \"Log entry is fine!\", \"status\": \"OK\"}]\n\n# Algorithm\n\n 1. Strip the log file of newlines and BOMs.\n 2. Cut off the existing signature block and (re-)encode the log text back into little-endian UTF-16\n 3. Encrypt the log file with Rijndael-256:\n - in CBC mode\n - with a 256-bit block size (most AES implementations hard-code a 128-bit block size)\n - all-zeroes IV\n - zero-padding\n - the hex key `9378716cf13e4265ae55338e940b376184da389e50647726b35f6f341ee3efd9`\n 4. XOR together all of the resulting 256-bit ciphertext blocks. You can do it byte-by-byte, it doesn't matter in the end.\n 5. Output the little-endian representation of the above number, in uppercase hex.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/OPSnet/eac_logchecker.py", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "eac-logchecker", "package_url": "https://pypi.org/project/eac-logchecker/", "platform": "", "project_url": "https://pypi.org/project/eac-logchecker/", "project_urls": { "Homepage": "https://github.com/OPSnet/eac_logchecker.py" }, "release_url": "https://pypi.org/project/eac-logchecker/0.8.0/", "requires_dist": [ "pprp" ], "requires_python": ">=3.5.0", "summary": "Logchecker for logs generated by EAC", "version": "0.8.0" }, "last_serial": 5376679, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "c565c08c9e6a155911a5c91fe8ab45b4", "sha256": "33bb75f7d37a6c48bb8f27465941f7f96aafe7b33fbf0c550ff5ae0e12a4f81c" }, "downloads": -1, "filename": "eac_logchecker-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c565c08c9e6a155911a5c91fe8ab45b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 8144, "upload_time": "2018-10-22T17:28:00", "url": "https://files.pythonhosted.org/packages/89/fc/799a9a02d996a648df0a2d8fedf444c1ad36e0577badbe569c816b2e7162/eac_logchecker-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1ae766e284b4ee439ce6432ceabcef7", "sha256": "4381f53860cf188bbd7e7dc6b8612ed3da2c555d2fdb56a5647e496d6e480f1a" }, "downloads": -1, "filename": "eac_logchecker-0.5.0.tar.gz", "has_sig": false, "md5_digest": "c1ae766e284b4ee439ce6432ceabcef7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 7910, "upload_time": "2018-10-22T17:28:02", "url": "https://files.pythonhosted.org/packages/c8/db/ce3218e6e8678f6b0f4b1ec99c25ba1245eed3f4c72f879875b1a47d6d50/eac_logchecker-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "4a1657d732cd4058864f8ffff858b8d5", "sha256": "a5e005c2857f55bd557d7ab46e8538d27aa353b0b695e9b6369a8d966442b566" }, "downloads": -1, "filename": "eac_logchecker-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4a1657d732cd4058864f8ffff858b8d5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 8271, "upload_time": "2018-10-22T19:45:19", "url": "https://files.pythonhosted.org/packages/eb/45/ee49865112337fa9841185149365734420fadf41f56e0aa6a756d4b35ae9/eac_logchecker-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "896098ed0f694dc97bc98d203cec36c4", "sha256": "e4ac5ae44002de6ba88f6d25ee2ce9025865848fa9d8033216d45eee74f9f4a3" }, "downloads": -1, "filename": "eac_logchecker-0.6.0.tar.gz", "has_sig": false, "md5_digest": "896098ed0f694dc97bc98d203cec36c4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 8035, "upload_time": "2018-10-22T19:45:20", "url": "https://files.pythonhosted.org/packages/a8/97/1e3652cf09a3a7aacb6492d08ab0356e24995f33f991978797a50144cf4a/eac_logchecker-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "b839486cadf1fcf3ef22eb123b3175c8", "sha256": "8535b9af27bbdadf71b691960ea0d39bb21ef04aaf01f3d391171194acd7c3af" }, "downloads": -1, "filename": "eac_logchecker-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b839486cadf1fcf3ef22eb123b3175c8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 8267, "upload_time": "2018-10-22T20:08:57", "url": "https://files.pythonhosted.org/packages/ab/14/c80da34d8a1b70bfb0da8b71c9280a11fbb4d499117e7a6c6131833c5bfe/eac_logchecker-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e8a1d5c8365cf2e3326c33a20630dc2c", "sha256": "aa4dc94d95e2dfaf56efc37498e9d1011ee650de609f305b22ea8f319db3ce78" }, "downloads": -1, "filename": "eac_logchecker-0.6.1.tar.gz", "has_sig": false, "md5_digest": "e8a1d5c8365cf2e3326c33a20630dc2c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 8032, "upload_time": "2018-10-22T20:08:59", "url": "https://files.pythonhosted.org/packages/47/c1/205f8ef8bbe7018f7279534cefee33c3845d7837796050b2cd6095bb8eaa/eac_logchecker-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "1e51a349ebd1f7ec355a98ff1697bbcf", "sha256": "1dc59cc9da7e9025c6dfb5cf7dfdf2342228ff96bd531c5ce4268c0bc1f7ffd6" }, "downloads": -1, "filename": "eac_logchecker-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e51a349ebd1f7ec355a98ff1697bbcf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 4941, "upload_time": "2018-11-09T16:26:32", "url": "https://files.pythonhosted.org/packages/46/d0/078956af425233208e24d1826d1d44364f5004d0ca7becad6c78b9a2808e/eac_logchecker-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b80af75b7e1504a8b47a08a42b8efb85", "sha256": "4aa31db6eddc2da468df0bccf8ae3a1c56dba109f8a12b2de88c0beaad85bbe4" }, "downloads": -1, "filename": "eac_logchecker-0.7.0.tar.gz", "has_sig": false, "md5_digest": "b80af75b7e1504a8b47a08a42b8efb85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 4366, "upload_time": "2018-11-09T16:26:34", "url": "https://files.pythonhosted.org/packages/92/ce/65f579e0b0554b7e10622c57883be71e08f83429c370b846d4567b26dbfb/eac_logchecker-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "2c646af4eed07b291798852aadc219eb", "sha256": "0af07d5bda01fbeba184a5f1b2d03ed250fcb8df518679172d9b2aeae9b7e4a8" }, "downloads": -1, "filename": "eac_logchecker-0.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2c646af4eed07b291798852aadc219eb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 5385, "upload_time": "2018-11-22T16:23:40", "url": "https://files.pythonhosted.org/packages/52/ab/ce4cab3ebae4d7656f8e5667bee25ea1ccc43474f80e4ef1a4c97c23be1f/eac_logchecker-0.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3819dbe2ea777cd2b8ad820e793e4038", "sha256": "1fe305b237c3b8372a26d6588b6a633aea358c23326ae087e24fcf1723d57efa" }, "downloads": -1, "filename": "eac_logchecker-0.7.1.tar.gz", "has_sig": false, "md5_digest": "3819dbe2ea777cd2b8ad820e793e4038", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 4750, "upload_time": "2018-11-22T16:23:41", "url": "https://files.pythonhosted.org/packages/2b/a3/f29321fb6672dbdfb30cfc93ba86e0967edc992ea34ef04f376a862a66fd/eac_logchecker-0.7.1.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "1cb511aa8a2791be1c58381622677e78", "sha256": "87b6369be82f4506408d237beded7423b79a7b9fee22cf2c91c4b07eae6c6aea" }, "downloads": -1, "filename": "eac_logchecker-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1cb511aa8a2791be1c58381622677e78", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 5650, "upload_time": "2019-06-09T01:56:12", "url": "https://files.pythonhosted.org/packages/d4/2b/77fd528a43e85d35a556fd54ddf5912d1878d9010a8aae214c66176f2e6f/eac_logchecker-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7fab27f10a9cc8253f958524b4c951cf", "sha256": "cfa2fd8493b1718a5399158df013e018022aef040a131e08bebea97cc756d5bd" }, "downloads": -1, "filename": "eac_logchecker-0.8.0.tar.gz", "has_sig": false, "md5_digest": "7fab27f10a9cc8253f958524b4c951cf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5050, "upload_time": "2019-06-09T01:56:14", "url": "https://files.pythonhosted.org/packages/2a/a7/1d138087d7eef7b1c09694852b6c06e34f1a62fc91c6cb2f50fb8c6dc8ca/eac_logchecker-0.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1cb511aa8a2791be1c58381622677e78", "sha256": "87b6369be82f4506408d237beded7423b79a7b9fee22cf2c91c4b07eae6c6aea" }, "downloads": -1, "filename": "eac_logchecker-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1cb511aa8a2791be1c58381622677e78", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 5650, "upload_time": "2019-06-09T01:56:12", "url": "https://files.pythonhosted.org/packages/d4/2b/77fd528a43e85d35a556fd54ddf5912d1878d9010a8aae214c66176f2e6f/eac_logchecker-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7fab27f10a9cc8253f958524b4c951cf", "sha256": "cfa2fd8493b1718a5399158df013e018022aef040a131e08bebea97cc756d5bd" }, "downloads": -1, "filename": "eac_logchecker-0.8.0.tar.gz", "has_sig": false, "md5_digest": "7fab27f10a9cc8253f958524b4c951cf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5050, "upload_time": "2019-06-09T01:56:14", "url": "https://files.pythonhosted.org/packages/2a/a7/1d138087d7eef7b1c09694852b6c06e34f1a62fc91c6cb2f50fb8c6dc8ca/eac_logchecker-0.8.0.tar.gz" } ] }