{ "info": { "author": "Matthew Wilson", "author_email": "automationator@runbox.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Build Tools" ], "description": "# critswhitelist\nPython library that interacts with CRITS to build an indicator whitelist system.\n\n## Requirements\n https://pypi.org/project/tld/ 0.9+\n https://github.com/lolnate/critsapi.git\n https://github.com/IntegralDefense/urltools\n\n## CritsWhitelist parameters\n whitelist_tags: Required.\n mongo_connection: Required if NOT supplying mongo_uri and mongo_db.\n mongo_uri: Required if NOT supplying mongo_connection.\n mongo_db: Required if NOT supplying mongo_connection.\n urlshortener_tags: Optional.\n\n## Example Usage\nIf you already have a CRITsDBAPI object elsewhere in your code, creating a CritsWhitelist object will look something like this:\n\n from critswhitelist import CritsWhitelist\n\n mongo_connection = CRITsDBAPI(mongo_uri=mongo_uri, db_name=mongo_db)\n mongo_connection.connect()\n\n w = CritsWhitelist(['whitelist:e2w'], mongo_connection=mongo_connection, urlshortener_tags=['urlshortener:e2w'])\n\nIf you do not already have a CRITsDBAPI object, the CritsWhitelist class can create one for you:\n\n from critswhitelist import CritsWhitelist\n\n w = CritsWhitelist(['whitelist:e2w'], mongo_uri='mongodb://your.crits.server:27017/', mongo_db='crits', urlshortener_tags=['urlshortener:e2w'])\n\n## Functionality\nWhen you create the CritsWhitelist object, you must specify the \"whitelist_tags\" attribute. This is a list of tags you want include when searching the Deprecated indicators in CRITS to build the whitelist.\n\nFor example, if you want the domain \"google.com\" to be whitelisted, two conditions must be met in CRITS:\n\n1. The indicator must be set to Deprecated in CRITS.\n2. The indicator must have one of the tags you specified in the \"whitelist_tags\" attribute when you created the CritsWhitelist object. The example above uses the \"whitelist:e2w\" tag.\n\nWhen these two criteria are met, CritsWhitelist will include that indicator in its whitelist.\n\n### value_in_indicator vs. indicator_in_value\nMost of the public functions available in the CritsWhitelist class provide both a \"value_in_indicator\" and an \"indicator_in_value\" boolean parameter. These parameters allow you to mirror the functionality of how CRITS indicator matching is performed as though they are wildcard/substring values.\n\nIf you are checking if \"thing\" is whitelisted, these parameters mean:\n* **value_in_indicator**: If the \"thing\" string exists in a whitelisted indicator, \"thing\" is considered to be whitelisted.\n\n * This is set to **True** when we want the whitelisted indicators to match against less specific \"thing\" values. Think file paths, for example. If we whitelisted the path \"C:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Office\\something.tmp\", and one of the sandbox reports showed a dropped file but listed the path as \"AppData\\Roaming\\Microsoft\\Office\\something.tmp\", then presumably we would want to consider this path whitelisted as well.\n\n* **indicator_in_value**: If a whitelisted indicator exists in \"thing\", then \"thing\" is considered to be whitelisted.\n\n * This is set to **True** when we want less specific whitelisted indicators to match against \"thing\" values. Again, think about file paths. We can't realistically whitelist every combination of file paths, but we know that certain paths are almost always benign, such as any path containing the whitelisted string \"Microsoft\\CryptnetUrlCache\\\".\n\n### Default Behavior\nThe behavior of the following public functions in the CritsWhitelist class have been customized to the best default behavior for our events and [Event Sentry](https://github.com/IntegralDefense/eventsentry).\n\nMost of the functions outlined below check to see if the given value is invalid.\n* **Example**: If you check if the domain name \"google.local\" is whitelisted, it will return True since \".local\" is not a valid top-level domain.\n\nThere is a caching system built-in, so if you check the same value twice, it will return faster whether it was cached as whitelisted or non-whitelisted.\n\n**is_md5_whitelisted(md5)**\n\n Checks whitelisted indicators: Hash - MD5\n Returns: True/False if the \"md5\" string is whitelisted or the md5 is invalid\n\n**is_sha1_whitelisted(sha1)**\n\n Checks whitelisted indicators: Hash - SHA1\n Returns: True/False if the \"sha1\" string is whitelisted or the sha1 is invalid\n\n**is_sha256_whitelisted(sha256)**\n\n Checks whitelisted indicators: Hash - SHA256\n Returns: True/False if the \"sha256\" string is whitelisted or the sha256 is invalid\n\n**is_sha512_whitelisted(sha512)**\n\n Checks whitelisted indicators: Hash - SHA512\n Returns: True/False if the \"sha512\" string is whitelisted or the sha512 is invalid\n\n**is_ssdeep_whitelisted(ssdeep)**\n\n Checks whitelisted indicators: Hash - SSDEEP\n Returns: True/False if the \"ssdeep\" string is whitelisted\n\n**is_file_name_whitelisted(name, value_in_indicator=False, indicator_in_value=True)**\n\n Checks whitelisted indicators: Windows - FileName\n Returns: True/False if the \"name\" string is whitelisted\n\nExample: If \"~WRS\" is whitelisted, then:\n* \"~WRS{ab90d-fade840abc-9e9da}\" is whitelisted.\n* \"WRS\" is NOT whitelisted.\n\n**is_file_path_whitelisted(path, value_in_indicator=True, indicator_in_value=True)**\n\n Checks whitelisted indicators: Windows - FilePath\n Returns: True/False if the \"path\" string is whitelisted\n\nExample: If \"AppData/Local/Microsoft\" is whitelisted, then:\n\n* \"Local/Microsoft\" is whitelisted (even though this is not a valid path)\n* \"C:/Users/Dude/AppData/Local/Microsoft/something.tmp\" is whitelisted.\n* \"C:/Users/Dude/AppData/Local/malicious.exe\" is NOT whitelisted.\n\n**is_email_subject_whitelisted(subject, value_in_indicator=True, indicator_in_value=False)**\n\n Checks whitelisted indicators: Email - Subject\n Returns: True/False if the \"subject\" string is whitelisted\n\nExample: If \"Hi There\" is whitelisted, then:\n\n* \"Hi\" is whitelisted.\n* \"Hi There friend\" is NOT whitelisted.\n\n**is_email_address_whitelisted(address, value_in_indicator=True, indicator_in_value=False)**\n\n Checks whitelisted indicators: Email - Address, WHOIS Registrant Email Address, Email Address From, Email Address Sender\n Returns: True/False if the \"address\" string is whitelisted or the domain is invalid\n\nExample: If \"noreply@microsoft.com\" is whitelisted, then:\n\n* \"reply@microsoft.com\" is whitelisted.\n* \"bad-noreply@microsoft.com\" is NOT whitelisted.\n\n**is_url_whitelisted(u, value_in_indicator=False, indicator_in_value=False)**\n\n Checks whitelisted indicators: URI - URL, Address - ipv4-net, Address - ipv4-addr, URI - Domain Name, URI - Path\n Returns: True/False if the \"u\" string/domain/IP/path is whitelisted or the domain/IP is invalid\n\nExample: If \"http://www.google.com/\" is whitelisted, then:\n\n* \"http://www.google.com/\" is whitelisted.\n* \"http://www.google.com/something.html\" is NOT whitelisted.\n\n**NOTE:** is_url_whitelisted also calls the functions is_uri_path_whitelisted, is_domain_whitelisted, and is_ip_whitelisted.\n\n**is_uri_path_whitelisted(path, relationships=None, value_in_indicator=True, indicator_in_value=True)**\n\n Checks whitelisted indicators: URI - Path, Address - ipv4-addr, URI - Domain Name\n Returns: True/False if the \"path\" string is whitelisted OR if any of the relationships are whitelisted\n\n\"relationships\" is an optional list of values the URI path is related to. For example, if you know the URI path you are checking came from the URL \"http://google.com/index.html\", then one of the relationships might be \"google.com\". In this case, if the URI - Domain Name indicator \"google.com\" was whitelisted, then this URI - Path indicator would also be whitelisted.\n\nExample: If \".css\" is whitelisted, then:\n\n* \"https://randomsite.com/style.css\" is whitelisted.\n\nExample: If \"/social/signin/\" is whitelisted, then:\n\n* \"/social\" is whitelisted.\n\nIf you specified the \"urlshortener_tags\" parameter when creating the CritsWhitelist object, the following is an example of its intended functionality:\n\n* If \"goo.gl\" is one of the Deprecated indicators tagged with one of your \"urlshortener_tags\", then:\n * The URL \"http://goo.gl/aE81b\" will NOT be whitelisted. However,\n * The URI path \"/aE81b\" will be whitelisted if \"goo.gl\" is listed as one of the relationships. The idea behind this is that URL shorteners use very short URI paths, which are commonly found as random base64 strings inside e-mails or other documents.\n\n**is_domain_whitelisted(domain, value_in_indicator=False, indicator_in_value=True)**\n\n Checks whitelisted indicators: URI - Domain Name\n Returns: True/False if the \"domain\" string is whitelisted or the domain is invalid\n\nExample: If \"blog.google.com\" is whitelisted, then:\n\n* \"http://blog.google.com\" is whitelisted.\n* \"google.com\" is NOT whitelisted.\n\n**is_ip_whitelisted(ip, value_in_indicator=False, indicator_in_value=False)**\n\n Checks whitelisted indicators: Address - ipv4-net, Address - ipv4-addr, Email Originating IP, Email X-Originating IP\n Returns: True/False if the \"ip\" string is whitelisted or the ip is invalid (including private addresses)\n\nExample: If \"100.0.0.0/8\" is whitelisted, then:\n\n* \"100.1.8.37\" is whitelisted.\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/automationator/critswhitelist", "keywords": "critswhitelist", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "critswhitelist", "package_url": "https://pypi.org/project/critswhitelist/", "platform": "", "project_url": "https://pypi.org/project/critswhitelist/", "project_urls": { "Homepage": "https://github.com/automationator/critswhitelist" }, "release_url": "https://pypi.org/project/critswhitelist/0.2.0/", "requires_dist": [ "urlfinderlib" ], "requires_python": "", "summary": "Library that interacts with CRITS to build an indicator whitelist system.", "version": "0.2.0" }, "last_serial": 4238236, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ea817c0074c5d31ee8b01f289f2c38ad", "sha256": "580440f9e9f5a45c19c141599aae122de2f1481a007888023f9b7a55c05c3d35" }, "downloads": -1, "filename": "critswhitelist-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ea817c0074c5d31ee8b01f289f2c38ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8276, "upload_time": "2018-08-20T19:06:01", "url": "https://files.pythonhosted.org/packages/dd/4e/b11721617f77a2144140c3bcdf61d0faf1ae875f32dd3594c43615e4e85b/critswhitelist-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c3f080c882b42bceab8386bb371d900", "sha256": "dc30f66626909d6577af705ebfa1f68796ca6b0b90492d7551913e893b61bbd2" }, "downloads": -1, "filename": "critswhitelist-0.1.0.tar.gz", "has_sig": false, "md5_digest": "7c3f080c882b42bceab8386bb371d900", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8702, "upload_time": "2018-08-20T19:06:02", "url": "https://files.pythonhosted.org/packages/db/a0/b05a7c66dba51acfa46c1eafa1dfdc9c2b01d2123517859e825be5c62598/critswhitelist-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ee3daed68d5726f5f1f23ea484e7183a", "sha256": "744e72d825f97727ccd1a4a8ba50be8c75c7260170e8560a8699262bec76e78e" }, "downloads": -1, "filename": "critswhitelist-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ee3daed68d5726f5f1f23ea484e7183a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8276, "upload_time": "2018-08-20T19:11:19", "url": "https://files.pythonhosted.org/packages/af/ee/eb64d994152831eabc7daaad2748ef5e14878da6c943ac523bb7767238fa/critswhitelist-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e7f78863381270f0dc6534594060a871", "sha256": "be5f54b5348404ffbf528e697b33a9d03159491179c4c82afc99ccaf3e88ed21" }, "downloads": -1, "filename": "critswhitelist-0.1.1.tar.gz", "has_sig": false, "md5_digest": "e7f78863381270f0dc6534594060a871", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8693, "upload_time": "2018-08-20T19:11:20", "url": "https://files.pythonhosted.org/packages/a8/04/ded1c28f715614f62acbbee597d593bb1bf854b222a9195e24c4c68495ae/critswhitelist-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c3bc6aeb1b45092afff875d2710514e0", "sha256": "ebe0175261b608c79899bfdfaac5dc4d7659af4a6fcb97989aa98e9dc3c0990e" }, "downloads": -1, "filename": "critswhitelist-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c3bc6aeb1b45092afff875d2710514e0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8276, "upload_time": "2018-08-20T19:15:40", "url": "https://files.pythonhosted.org/packages/11/b0/9f65782b7e387c50e2cf9750ab6afa431d4ba556491955b6a74d3759aafc/critswhitelist-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d25a5099497008777d72f7c6f8ac92c2", "sha256": "ed503453cecddc3e8b4faabe0b6852744ac1983f8f79c004f312fa7efd0854ed" }, "downloads": -1, "filename": "critswhitelist-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d25a5099497008777d72f7c6f8ac92c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8702, "upload_time": "2018-08-20T19:15:41", "url": "https://files.pythonhosted.org/packages/d8/77/3dc586bdeeb2fd62f4af4e31ab49611825beb03a3280caf9ea137fa4fa44/critswhitelist-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "b30ce284185297f6953713a5e57fe807", "sha256": "1801d3002d2579f50e0239e6efd02e83841d252d15273ac51b4f63860339e7c0" }, "downloads": -1, "filename": "critswhitelist-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b30ce284185297f6953713a5e57fe807", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8275, "upload_time": "2018-08-20T19:20:33", "url": "https://files.pythonhosted.org/packages/ca/4b/10275d71b6e56c466ff35a70b56d6c9c165e693ada9e80719a54b664ab7d/critswhitelist-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48af6252ca479f1586695bb4df6a5e32", "sha256": "bc8c2045d25ff593deef89a0c15f5f9a5bf69f227f5eb8143b564b97a3971a2e" }, "downloads": -1, "filename": "critswhitelist-0.1.3.tar.gz", "has_sig": false, "md5_digest": "48af6252ca479f1586695bb4df6a5e32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8689, "upload_time": "2018-08-20T19:20:34", "url": "https://files.pythonhosted.org/packages/65/a1/0ef0c93656c9cbbbbf30ffc8ebf548e8d212e9f58ce3c8da9559e5938516/critswhitelist-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "68c21fd4da0fc0a7dd917ad501595111", "sha256": "a91ab1738d2bec30af77795a03675b046ed5b1f71d951d5c88bf8a0e52ae2014" }, "downloads": -1, "filename": "critswhitelist-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "68c21fd4da0fc0a7dd917ad501595111", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8274, "upload_time": "2018-08-24T16:11:19", "url": "https://files.pythonhosted.org/packages/59/60/43dd5aed0ff55f7570aeffdf44ce61388bf8e0862b63496480ed96eea695/critswhitelist-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07b453ac16cd3112416e8cf8bf100dab", "sha256": "58a6a8ecb4ed50c6e89d51657be767c88b2c8da87daa694929a5669824f8417e" }, "downloads": -1, "filename": "critswhitelist-0.1.4.tar.gz", "has_sig": false, "md5_digest": "07b453ac16cd3112416e8cf8bf100dab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8692, "upload_time": "2018-08-24T16:11:21", "url": "https://files.pythonhosted.org/packages/86/d6/99485a7808ea8517c88fd25827bf0e0337b6759550fc1fe65f9995fd1da2/critswhitelist-0.1.4.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "b538922bca9a37ceacfc4a0d252fed55", "sha256": "4325fa24e43d746fce0aa646f51c73fa4e0ddaa3d3615dee55207b17cc1c5844" }, "downloads": -1, "filename": "critswhitelist-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "b538922bca9a37ceacfc4a0d252fed55", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8303, "upload_time": "2018-08-30T18:45:22", "url": "https://files.pythonhosted.org/packages/e9/7e/bd91566bdca05661940e96ae2092b92f84aa5a9db4dca7e5c734cb7ddaa5/critswhitelist-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ba71c2c91afbe79896ac9e31e7eefbc", "sha256": "cec61f1c452e95169e024f3f63817ba6863339061ccf31b9c6175442e30ed3df" }, "downloads": -1, "filename": "critswhitelist-0.1.6.tar.gz", "has_sig": false, "md5_digest": "6ba71c2c91afbe79896ac9e31e7eefbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9384, "upload_time": "2018-08-30T18:45:23", "url": "https://files.pythonhosted.org/packages/91/d7/2321576eb787896a5c64042ec8aa42c0782d40e277a96091ef2417810d6f/critswhitelist-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "dccc68ca68de220f240a930f98276699", "sha256": "2d4b8ded019a537b1c5e0138937fffbf86f52e489225c1674e799d365542d056" }, "downloads": -1, "filename": "critswhitelist-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "dccc68ca68de220f240a930f98276699", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8296, "upload_time": "2018-09-04T15:23:22", "url": "https://files.pythonhosted.org/packages/14/e4/0dc98292c66b77de91f17ec2c593e63d1712fa9150b42ae48918b4c31d0a/critswhitelist-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49c42395c9e66b352e188e2caa05c096", "sha256": "4c469ce2e0b597dbfbaa2e904f75cc68e97558ac88a568b8da7810790d7dc087" }, "downloads": -1, "filename": "critswhitelist-0.1.7.tar.gz", "has_sig": false, "md5_digest": "49c42395c9e66b352e188e2caa05c096", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9385, "upload_time": "2018-09-04T15:23:23", "url": "https://files.pythonhosted.org/packages/d0/00/82f45945ddc3597ea74b6c570d32d7d4e657918f09878661079fd89a2540/critswhitelist-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "065abcee80a57b92b5d286f537297b22", "sha256": "61d1e2ef6ec95c0937e7848488d645489276a90e03085d752d1793b510c1b665" }, "downloads": -1, "filename": "critswhitelist-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "065abcee80a57b92b5d286f537297b22", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8302, "upload_time": "2018-09-04T15:39:16", "url": "https://files.pythonhosted.org/packages/b1/2e/bcec5d53a3111eb4ffce58bd44fbbca7a30655427855b3347871667bab93/critswhitelist-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fb94aff04779bc75b2c1f747ffb725c", "sha256": "38693eae47ac9bd7123bba68dca776418d6a0ae1aed1b7e0f88e1149e29b7204" }, "downloads": -1, "filename": "critswhitelist-0.1.8.tar.gz", "has_sig": false, "md5_digest": "0fb94aff04779bc75b2c1f747ffb725c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9383, "upload_time": "2018-09-04T15:39:17", "url": "https://files.pythonhosted.org/packages/80/b8/7fc95374ed7614a576add19f2f9b74c85770664cd52082456969845bedf7/critswhitelist-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "52f99a081f70f109065c7be1962895c6", "sha256": "aff7097aa8423676d3cc9a4a2a859ccca24bc22924537e17ab7c7a26d904a2d1" }, "downloads": -1, "filename": "critswhitelist-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "52f99a081f70f109065c7be1962895c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7928, "upload_time": "2018-09-04T15:51:20", "url": "https://files.pythonhosted.org/packages/e4/12/109ca880a42dcb170df278027d505ca258493d1b93a34e80b47596abfaf9/critswhitelist-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ee54095e8ebf3014d134bd7958595cf", "sha256": "38ef050b34785dc70c3c5ba46934d42ef93d8b0af260d8764be5cb4b0c5ca782" }, "downloads": -1, "filename": "critswhitelist-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ee54095e8ebf3014d134bd7958595cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9069, "upload_time": "2018-09-04T15:51:21", "url": "https://files.pythonhosted.org/packages/34/28/e0447361ede31a7d51885e0f8c3bdf92c253d6da158d28be9f13c4e74439/critswhitelist-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "52f99a081f70f109065c7be1962895c6", "sha256": "aff7097aa8423676d3cc9a4a2a859ccca24bc22924537e17ab7c7a26d904a2d1" }, "downloads": -1, "filename": "critswhitelist-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "52f99a081f70f109065c7be1962895c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7928, "upload_time": "2018-09-04T15:51:20", "url": "https://files.pythonhosted.org/packages/e4/12/109ca880a42dcb170df278027d505ca258493d1b93a34e80b47596abfaf9/critswhitelist-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ee54095e8ebf3014d134bd7958595cf", "sha256": "38ef050b34785dc70c3c5ba46934d42ef93d8b0af260d8764be5cb4b0c5ca782" }, "downloads": -1, "filename": "critswhitelist-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ee54095e8ebf3014d134bd7958595cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9069, "upload_time": "2018-09-04T15:51:21", "url": "https://files.pythonhosted.org/packages/34/28/e0447361ede31a7d51885e0f8c3bdf92c253d6da158d28be9f13c4e74439/critswhitelist-0.2.0.tar.gz" } ] }