{ "info": { "author": "Anton Ovchinnikov", "author_email": "anton.ovchi2nikov@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Topic :: Security :: Cryptography" ], "description": "pyope\n=====\n\n|PyPi version| |Travis build|\n\nThis is an implementation of Boldyreva symmetric `order-preserving encryption`_ scheme (`Boldyreva's paper`_).\n\nSupported Python versions: 2.7 and 3.4+\n\n**Disclaimer 1** This is an experimental implementation, which should be thoroughly reviewed and evaluated before using in production and/or sensitive applications.\n\n**Disclaimer 2** The Boldyreva scheme is not a standardized algorithm, so there are no test vectors and fixed plaintext-ciphertext\nmapping for a given key. It means that, generally speaking, a plaintext encrypted with the same key by two different versions of the package might not be equal to each other.\n\nQuick examples\n--------------\n\nQuick start\n\n.. code:: python\n\n from pyope.ope import OPE\n random_key = OPE.generate_key()\n cipher = OPE(random_key)\n assert cipher.encrypt(1000) < cipher.encrypt(2000) < cipher.encrypt(3000)\n assert cipher.decrypt(cipher.encrypt(1337)) == 1337\n\n\nYou can specify input and output ranges. Otherwise, default input (0..2^15-1) and output (0..2^31-1) ranges are used.\n\n.. code:: python\n\n from pyope.ope import OPE, ValueRange\n cipher = OPE(b'long key' * 2, in_range=ValueRange(-100, 100),\n out_range=ValueRange(0, 9999))\n assert 0 < cipher.encrypt(10) < cipher.encrypt(42) < 9999\n\n\nAbout order-preserving encryption\n---------------------------------\n\nOrder-preserving encryption (OPE) allows to compare ciphertext values in order to learn the corresponding relation\nbetween the underlying plaintexts. By definition, order-preserving encryption methods are **less secure** than\nconventional encryption algorithms for the same data sizes, because the former leak ordering information of the plaintext \nvalues.\n\nHow can OPE be useful? For example, some systems may need OPE to perform a certain set of queries (such as range SQL\nqueries) over encrypted data. These systems include `CryptDB`_ and `Monomi`_ to name a few.\n\nSecurity\n--------\n\nAs mentioned above, security guarantees for Boldyreva's schema are weaker than those of deterministic encryption schemes,\nbut security can still be improved if the encryption keys are long enough. It is advised to use randomly generated keys at\nleast 256 bits long.\n\n\nRunning tests\n-------------\n\nPyTest is used as a test framework. Run all tests:\n\n::\n\n$ py.test tests/\n\nTODO\n----\n\n- More tests\n- Optimize performance\n- Security guarantees?\n\n.. |PyPi version| image:: https://img.shields.io/pypi/v/pyope.svg\n :target: https://pypi.python.org/pypi/pyope/\n.. |Travis build| image:: https://travis-ci.org/tonyo/pyope.svg?branch=master\n :target: https://travis-ci.org/tonyo/pyope/\n.. _order-preserving encryption: https://crypto.stackexchange.com/questions/3813/how-does-order-preserving-encryption-work\n.. _Boldyreva's paper: http://www.cc.gatech.edu/~aboldyre/papers/bclo.pdf\n.. _CryptDB: http://css.csail.mit.edu/cryptdb/\n.. _Monomi: http://people.csail.mit.edu/nickolai/papers/tu-monomi.pdf\n\n\n\n=======\nHistory\n=======\n\n0.1.0 (2017-01-01)\n------------------\n\n* Use 'cryptography' instead of 'pycrypto'\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/tonyo/pyope/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pyope", "package_url": "https://pypi.org/project/pyope/", "platform": "", "project_url": "https://pypi.org/project/pyope/", "project_urls": { "Homepage": "https://github.com/tonyo/pyope/" }, "release_url": "https://pypi.org/project/pyope/0.2.2/", "requires_dist": null, "requires_python": "", "summary": "Implementation of symmetric order-preserving encryption scheme", "version": "0.2.2" }, "last_serial": 4111808, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "fd6d7c4f041eacced2354aadc869c88f", "sha256": "b19d57b8c39bca058818bd95e4f9def03af96ee7cee7890e568a35538511a33e" }, "downloads": -1, "filename": "pyope-0.0.1.tar.gz", "has_sig": false, "md5_digest": "fd6d7c4f041eacced2354aadc869c88f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3577, "upload_time": "2015-01-01T21:06:09", "url": "https://files.pythonhosted.org/packages/13/d1/74b5577f9a3e65df732cc11770bf8b0b85d734ccde3c1f4d6e1e7e09d939/pyope-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "c669ec96d657a0bea3db75d365ad2922", "sha256": "532f0e9d1ae25ddbd76aeafc8b9f7ea64cde1e9ad1e8811bb38d24d59de6a5b1" }, "downloads": -1, "filename": "pyope-0.0.2.tar.gz", "has_sig": false, "md5_digest": "c669ec96d657a0bea3db75d365ad2922", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8459, "upload_time": "2015-02-24T22:25:49", "url": "https://files.pythonhosted.org/packages/74/9d/c96fd1b791cdfe00a27667224b3e01b351b7386da6c5a3738a0616e6d577/pyope-0.0.2.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0583a02180f37f0ab402116fbee9efbf", "sha256": "b0cec5fc45063beac52bfb0b3b23f17b7450b6898c7870e479ff3e1d607af2b9" }, "downloads": -1, "filename": "pyope-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0583a02180f37f0ab402116fbee9efbf", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10623, "upload_time": "2017-01-01T22:56:16", "url": "https://files.pythonhosted.org/packages/bc/b0/271a020f2e88de41d256698cda9c8ca31752595240f558299fc37fac788b/pyope-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08a2084ca297cb4779ae206b57587397", "sha256": "3b9ebdc0f042b317bc02c502969c5e9b524e8bae242051ebc948632c8540e9f3" }, "downloads": -1, "filename": "pyope-0.1.1.tar.gz", "has_sig": false, "md5_digest": "08a2084ca297cb4779ae206b57587397", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9025, "upload_time": "2017-01-01T22:56:13", "url": "https://files.pythonhosted.org/packages/6a/45/33343deab9db01fcf5c7af6420ca9bc3eacdf0d59def8ff35cf3da0cbb98/pyope-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "50d2a6fb98d44d95395d508769db7cc6", "sha256": "537ebf235000ce13daaba9a109b1ece3941479d81374fd0ab1bc0d774d455e60" }, "downloads": -1, "filename": "pyope-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "50d2a6fb98d44d95395d508769db7cc6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10573, "upload_time": "2018-04-16T11:50:40", "url": "https://files.pythonhosted.org/packages/ed/8a/0947a8800a691beabdb6f5b277ddaa0ac907ac291c303c52f012c7f3b6cd/pyope-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "95fb4d4b5359bf187eeeb031954dde6a", "sha256": "2a2a1d4c5dee8c22ff0222739330ee7c6d0a3d12c39c93b1f98c05c092a6f4e1" }, "downloads": -1, "filename": "pyope-0.2.0.tar.gz", "has_sig": false, "md5_digest": "95fb4d4b5359bf187eeeb031954dde6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9318, "upload_time": "2018-04-16T11:50:39", "url": "https://files.pythonhosted.org/packages/10/9f/0381847a7073792da8e6250190803700919f20ce741b3339c3b874b563be/pyope-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "c82592cd59ded2c1e2c90a68e2a5c95d", "sha256": "6282ddad776e8162af8b71497eb354dc1fa681cb03365d7f8ff61673c55b35b3" }, "downloads": -1, "filename": "pyope-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c82592cd59ded2c1e2c90a68e2a5c95d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10588, "upload_time": "2018-04-20T12:56:15", "url": "https://files.pythonhosted.org/packages/54/6c/15d6550c27dc915bb3c920c7f7dd229f07d4580db27bb1cba8fca0b0f93a/pyope-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b632e43a6c0a410ecae1dc3d136af2d", "sha256": "f4b84ed0bfb056fa1baca12801bdaffcd079afb7f55221cb0ee088b70b38cf70" }, "downloads": -1, "filename": "pyope-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8b632e43a6c0a410ecae1dc3d136af2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9326, "upload_time": "2018-04-20T12:56:12", "url": "https://files.pythonhosted.org/packages/70/cb/561f38ae1d0b0f30708faf67641859d525d88378445fe3974925a34b9384/pyope-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "f73c4d73e1094b6622fd56b59aadf461", "sha256": "45f71fdc1b3a4b6c97232be71d6b05218bf09d84bf2dc5ec09f76038fbbf1c61" }, "downloads": -1, "filename": "pyope-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f73c4d73e1094b6622fd56b59aadf461", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11412, "upload_time": "2018-07-28T14:57:51", "url": "https://files.pythonhosted.org/packages/64/a8/45506e7ce0843a31c49ed5f2e7e2f76cdb7992664c3b4448fe3077cfd482/pyope-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3080dd6a561065e8d91d75d16ff9c32", "sha256": "58b55738212b54c78a1a192f014e7fa9d693d970d260238f76803fa87f49af3c" }, "downloads": -1, "filename": "pyope-0.2.2.tar.gz", "has_sig": false, "md5_digest": "f3080dd6a561065e8d91d75d16ff9c32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10072, "upload_time": "2018-07-28T14:57:49", "url": "https://files.pythonhosted.org/packages/ee/bb/67e2b2822ad3dc1bcb6af471685ce3a35d3b3d3581e8d14468da0fc9dec5/pyope-0.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f73c4d73e1094b6622fd56b59aadf461", "sha256": "45f71fdc1b3a4b6c97232be71d6b05218bf09d84bf2dc5ec09f76038fbbf1c61" }, "downloads": -1, "filename": "pyope-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f73c4d73e1094b6622fd56b59aadf461", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11412, "upload_time": "2018-07-28T14:57:51", "url": "https://files.pythonhosted.org/packages/64/a8/45506e7ce0843a31c49ed5f2e7e2f76cdb7992664c3b4448fe3077cfd482/pyope-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3080dd6a561065e8d91d75d16ff9c32", "sha256": "58b55738212b54c78a1a192f014e7fa9d693d970d260238f76803fa87f49af3c" }, "downloads": -1, "filename": "pyope-0.2.2.tar.gz", "has_sig": false, "md5_digest": "f3080dd6a561065e8d91d75d16ff9c32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10072, "upload_time": "2018-07-28T14:57:49", "url": "https://files.pythonhosted.org/packages/ee/bb/67e2b2822ad3dc1bcb6af471685ce3a35d3b3d3581e8d14468da0fc9dec5/pyope-0.2.2.tar.gz" } ] }