{ "info": { "author": "Christoph Diehl", "author_email": "cdiehl@mozilla.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Security", "Topic :: Software Development :: Testing" ], "description": "

\n \"Logo\"\n

\n\n

\nGeneration-based, context-free grammar fuzzer.\n

\n\n

\n\"Build\n\"IRC\"\n

\n\n

\n\n

\n\n

Table of Contents

\n\n- [Run](#Run)\n - [pip](#pip)\n - [pipenv](#pipenv)\n - [package](#package)\n - [Docker](#Docker)\n- [Examples](#Examples)\n- [Development](#Development)\n- [Dharma Grammar Cheatsheet](#Dharma-Grammar-Cheatsheet)\n- [API Documentation](#API-Documentation)\n- [Dharma in the Public](#Dharma-in-the-Public)\n\n## Run\n\nAll roads lead to Rome but Python 3.x is the prefered vehicle.\n\n### pip\n\n```bash\npip install dharma\ndharma --help\n```\n\n### pipenv\n\n```bash\npipenv install --dev\npipenv run dharma --help\n```\n\n### package\n\n```bash\npython -m dharma --help\n```\n\n### Docker\n\n```bash\ndocker build -t dharma .\ndocker run --rm -it dharma -grammars dharma/grammars/canvas2d.dg\n```\n\n## Examples\n\nGenerate a single test-case and print it to `stdout`. Multiple grammars can be appended to the `-grammars` argument.\n\n```bash\ndharma -grammars dharma/grammars/canvas2d.dg\n```\n\nGenerating multiple test-cases and save the result to disk.\n\n```bash\ndharma -grammars dharma/grammars/canvas2d.dg -storage . -count 5\n```\n\nGenerate test-cases and serve them in a template via WebSocket.\nLaunch `dharma/grammars/var/index.html` in the browser after Dharma launched.\n\n```bash\ndharma -grammars dharma/grammars/canvas2d.dg -server -template grammars/var/templates/html5/default.html\n```\n\nBenchmark the generator.\n\n```bash\ntime dharma -grammars dharma/grammars/canvas2d.dg -count 10000 > /dev/null\n```\n\n## Development\n\n### PyLint\n\nIn case you run PyLint 1.9.2 and Python 3.7 you need to upgrade PyLint.\n\n```bash\npip3 install pylint astroid --pre -U\n```\n\n## Dharma Grammar Cheatsheet\n\n### Comments\n\n```\n%%% comment\n```\n\n### Controls\n\n```\n%const% name := value\n```\n\n### Sections\n\n```\n%section% := value\n%section% := variable\n%section% := variance\n```\n\n### Extension Methods\n\nRefer to `extensions.py` in `dharma/core/` and to the `xref_registry` in the `DharmaMachine` class to add further extensions.\n\n```\n%range%(0-9)\n%range%(0.0-9.0)\n%range%(a-z)\n%range%(!-~)\n%range%(0x100-0x200)\n\n%repeat%(+variable+)\n%repeat%(+variable+, \", \")\n\n%uri%(path)\n%uri%(lookup_key)\n\n%block%(path)\n\n%choice%(foo, \"bar\", 1)\n```\n\n### Assigning Values\n\n```\ndigit :=\n %range%(0-9)\n\nsign :=\n +\n -\n\nvalue :=\n +sign+%repeat%(+digit+)\n```\n\n### Using Values\n\n```\n+value+\n```\n\n### Assigning Variables\n\n```\nvariable :=\n @variable@ = new Foo();\n```\n\n### Using Variables\n\n```\nvalue :=\n !variable!.bar();\n```\n\n### Referencing values from `common.dg`\n\n```\nvalue :=\n attribute=+common:number+\n```\n\n### Calling JavaScript library methods\n\n```\nfoo :=\n Random.pick([0,1]);\n```\n\n## API Documentation\n\n- https://mozillasecurity.github.io/dharma\n\n## Dharma in the Public\n\nDharma mentionings in the news.\n\n- http://blog.ret2.io/2018/06/13/pwn2own-2018-vulnerability-discovery/\n- https://blog.mozilla.org/security/2015/06/29/dharma/\n- https://www.redpacketsecurity.com/dharma-generation-based-context-free-grammar-fuzzing-tool/\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/MozillaSecurity/dharma/tarball/1.2.0", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MozillaSecurity/dharma", "keywords": "fuzzer fuzzing security testing generator", "license": "MPL 2.0", "maintainer": "Mozilla Fuzzing Team", "maintainer_email": "fuzzing@mozilla.com", "name": "dharma", "package_url": "https://pypi.org/project/dharma/", "platform": "", "project_url": "https://pypi.org/project/dharma/", "project_urls": { "Bug Tracker": "https://github.com/MozillaSecurity/dharma/issues", "Download": "https://github.com/MozillaSecurity/dharma/tarball/1.2.0", "Homepage": "https://github.com/MozillaSecurity/dharma" }, "release_url": "https://pypi.org/project/dharma/1.2.0/", "requires_dist": null, "requires_python": "", "summary": "Generation-based, context-free grammar fuzzer.", "version": "1.2.0" }, "last_serial": 4601985, "releases": { "1.1": [ { "comment_text": "", "digests": { "md5": "8204e50e3c8c4c02f77ea740c8ca1b33", "sha256": "3768a5b5c078be5bc10289dd7d6a6df458c7e09e92d4e718fbf289684f765e90" }, "downloads": -1, "filename": "dharma-1.1.tar.gz", "has_sig": false, "md5_digest": "8204e50e3c8c4c02f77ea740c8ca1b33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2607, "upload_time": "2015-04-21T21:07:57", "url": "https://files.pythonhosted.org/packages/15/ba/730a797cd913337c24adcfaa7c50f70648c8f0bf77f12c4511c13c845f9d/dharma-1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "1071c2d56840b340f15d4c3eb07d14cb", "sha256": "7e989ad28427c1e0ea0535c76fa1f7d25cfbb9e02e28176166a2604c4ab37aad" }, "downloads": -1, "filename": "dharma-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1071c2d56840b340f15d4c3eb07d14cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42603, "upload_time": "2018-12-15T07:01:46", "url": "https://files.pythonhosted.org/packages/e6/84/b791c49dc3008e65e5e12cabb68de5e29d86a413c98d96fb50f1e7c265fe/dharma-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3df67c90a0e9ecdb3e088a0a1eeff261", "sha256": "e14cbc420275721931da8dd4d8d876024c0eb56e4f9f31de5679a66f65103c1e" }, "downloads": -1, "filename": "dharma-1.2.0.tar.gz", "has_sig": false, "md5_digest": "3df67c90a0e9ecdb3e088a0a1eeff261", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34403, "upload_time": "2018-12-15T07:01:48", "url": "https://files.pythonhosted.org/packages/a8/5e/889d79e5bf6148e4c5dfa53022cf7e0fc4fb5aaac9178bb45854651267d2/dharma-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1071c2d56840b340f15d4c3eb07d14cb", "sha256": "7e989ad28427c1e0ea0535c76fa1f7d25cfbb9e02e28176166a2604c4ab37aad" }, "downloads": -1, "filename": "dharma-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1071c2d56840b340f15d4c3eb07d14cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42603, "upload_time": "2018-12-15T07:01:46", "url": "https://files.pythonhosted.org/packages/e6/84/b791c49dc3008e65e5e12cabb68de5e29d86a413c98d96fb50f1e7c265fe/dharma-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3df67c90a0e9ecdb3e088a0a1eeff261", "sha256": "e14cbc420275721931da8dd4d8d876024c0eb56e4f9f31de5679a66f65103c1e" }, "downloads": -1, "filename": "dharma-1.2.0.tar.gz", "has_sig": false, "md5_digest": "3df67c90a0e9ecdb3e088a0a1eeff261", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34403, "upload_time": "2018-12-15T07:01:48", "url": "https://files.pythonhosted.org/packages/a8/5e/889d79e5bf6148e4c5dfa53022cf7e0fc4fb5aaac9178bb45854651267d2/dharma-1.2.0.tar.gz" } ] }