{ "info": { "author": "Federico Capoano", "author_email": "f.capoano@cineca.it", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Topic :: Internet :: WWW/HTTP", "Topic :: Security :: Cryptography" ], "description": "django-x509\n===========\n\n.. image:: https://travis-ci.org/openwisp/django-x509.svg\n :target: https://travis-ci.org/openwisp/django-x509\n\n.. image:: https://coveralls.io/repos/openwisp/django-x509/badge.svg\n :target: https://coveralls.io/r/openwisp/django-x509\n\n.. image:: https://requires.io/github/openwisp/django-x509/requirements.svg?branch=master\n :target: https://requires.io/github/openwisp/django-x509/requirements/?branch=master\n :alt: Requirements Status\n\n.. image:: https://badge.fury.io/py/django-x509.svg\n :target: http://badge.fury.io/py/django-x509\n\n------------\n\nSimple reusable django app implementing x509 PKI certificates management.\n\n**Want to help OpenWISP?** `Find out how to help us grow here\n`_.\n\n------------\n\n.. contents:: **Table of Contents**:\n :backlinks: none\n :depth: 3\n\n------------\n\nCurrent features\n----------------\n\n* CA generation\n* Import existing CAs\n* End entity certificate generation\n* Import existing certificates\n* Certificate revocation\n* CRL view (public or protected)\n* Possibility to specify x509 extensions on each certificate\n* Random serial numbers based on uuid4 integers (see `why is this a good idea\n `_)\n\nProject goals\n-------------\n\n* provide a simple and reusable x509 PKI management django app\n* provide abstract models that can be imported and extended in larger django projects\n\nDependencies\n------------\n\n* Python 2.7 or Python >= 3.4\n* OpenSSL\n\nInstall stable version from pypi\n--------------------------------\n\nInstall from pypi:\n\n.. code-block:: shell\n\n pip install django-x509\n\nInstall development version\n---------------------------\n\nInstall tarball:\n\n.. code-block:: shell\n\n pip install https://github.com/openwisp/django-x509/tarball/master\n\nAlternatively you can install via pip using git:\n\n.. code-block:: shell\n\n pip install -e git+git://github.com/openwisp/django-x509#egg=django-x509\n\nIf you want to contribute, install your cloned fork:\n\n.. code-block:: shell\n\n git clone git@github.com:/django-x509.git\n cd django-x509\n python setup.py develop\n\nSetup (integrate in an existing django project)\n-----------------------------------------------\n\nAdd ``django_x509`` to ``INSTALLED_APPS``:\n\n.. code-block:: python\n\n INSTALLED_APPS = [\n # other apps\n 'django_x509',\n ]\n\nAdd the URLs to your main ``urls.py``:\n\n.. code-block:: python\n\n urlpatterns = [\n # ... other urls in your project ...\n\n # django-x509 urls\n # keep the namespace argument unchanged\n url(r'^', include('django_x509.urls', namespace='x509')),\n ]\n\nThen run:\n\n.. code-block:: shell\n\n ./manage.py migrate\n\nInstalling for development\n--------------------------\n\nInstall sqlite:\n\n.. code-block:: shell\n\n sudo apt-get install sqlite3 libsqlite3-dev\n\nInstall your forked repo:\n\n.. code-block:: shell\n\n git clone git://github.com//django-x509\n cd django-x509/\n python setup.py develop\n\nInstall test requirements:\n\n.. code-block:: shell\n\n pip install -r requirements-test.txt\n\nCreate database:\n\n.. code-block:: shell\n\n cd tests/\n ./manage.py migrate\n ./manage.py createsuperuser\n\nLaunch development server:\n\n.. code-block:: shell\n\n ./manage.py runserver\n\nYou can access the admin interface at http://127.0.0.1:8000/admin/.\n\nRun tests with:\n\n.. code-block:: shell\n\n ./runtests.py\n\nInstall and run on docker\n--------------------------\n\nBuild from docker file:\n\n.. code-block:: shell\n\n sudo docker build -t openwisp/djangox509 .\n\nRun the docker container:\n\n.. code-block:: shell\n\n sudo docker run -it -p 8000:8000 openwisp/djangox509\n\nSettings\n--------\n``DJANGO_X509_DEFAULT_CERT_VALIDITY``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+-------------+\n| **type**: | ``int`` |\n+--------------+-------------+\n| **default**: | ``365`` |\n+--------------+-------------+\n\nDefault validity period (in days) when creating new x509 certificates.\n\n\n``DJANGO_X509_DEFAULT_CA_VALIDITY``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+-------------+\n| **type**: | ``int`` |\n+--------------+-------------+\n| **default**: | ``3650`` |\n+--------------+-------------+\n\nDefault validity period (in days) when creating new Certification Authorities.\n\n``DJANGO_X509_DEFAULT_KEY_LENGTH``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+-------------+\n| **type**: | ``int`` |\n+--------------+-------------+\n| **default**: | ``2048`` |\n+--------------+-------------+\n\nDefault key length for new CAs and new certificates.\n\nMust be one of the following values:\n\n* ``512``\n* ``1024``\n* ``2048``\n* ``4096``\n\n``DJANGO_X509_DEFAULT_DIGEST_ALGORITHM``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+-------------+\n| **type**: | ``str`` |\n+--------------+-------------+\n| **default**: | ``sha256`` |\n+--------------+-------------+\n\nDefault digest algorithm for new CAs and new certificates.\n\nMust be one of the following values:\n\n* ``sha1``\n* ``sha224``\n* ``sha256``\n* ``sha384``\n* ``sha512``\n\n``DJANGO_X509_CA_BASIC_CONSTRAINTS_CRITICAL``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+-----------+\n| **type**: | ``bool`` |\n+--------------+-----------+\n| **default**: | ``True`` |\n+--------------+-----------+\n\nWhether the ``basicConstraint`` x509 extension must be flagged as critical when creating new CAs.\n\n``DJANGO_X509_CA_BASIC_CONSTRAINTS_PATHLEN``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+---------------------+\n| **type**: | ``int`` or ``None`` |\n+--------------+---------------------+\n| **default**: | ``0`` |\n+--------------+---------------------+\n\nValue of the ``pathLenConstraint`` of ``basicConstraint`` x509 extension used when creating new CAs.\n\nWhen this value is a positive ``int`` it represents the maximum number of non-self-issued\nintermediate certificates that may follow the generated certificate in a valid certification path.\n\nSet this value to ``None`` to avoid imposing any limit.\n\n``DJANGO_X509_CA_KEYUSAGE_CRITICAL``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+--------------------------+\n| **type**: | ``bool`` |\n+--------------+--------------------------+\n| **default**: | ``True`` |\n+--------------+--------------------------+\n\nWhether the ``keyUsage`` x509 extension should be flagged as \"critical\" for new CAs.\n\n``DJANGO_X509_CA_KEYUSAGE_VALUE``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+--------------------------+\n| **type**: | ``str`` |\n+--------------+--------------------------+\n| **default**: | ``cRLSign, keyCertSign`` |\n+--------------+--------------------------+\n\nValue of the ``keyUsage`` x509 extension for new CAs.\n\n``DJANGO_X509_CERT_KEYUSAGE_CRITICAL``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+--------------------------+\n| **type**: | ``bool`` |\n+--------------+--------------------------+\n| **default**: | ``False`` |\n+--------------+--------------------------+\n\nWhether the ``keyUsage`` x509 extension should be flagged as \"critical\" for new\nend-entity certificates.\n\n``DJANGO_X509_CERT_KEYUSAGE_VALUE``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+---------------------------------------+\n| **type**: | ``str`` |\n+--------------+---------------------------------------+\n| **default**: | ``digitalSignature, keyEncipherment`` |\n+--------------+---------------------------------------+\n\nValue of the ``keyUsage`` x509 extension for new end-entity certificates.\n\n``DJANGO_X509_CRL_PROTECTED``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n+--------------+-----------+\n| **type**: | ``bool`` |\n+--------------+-----------+\n| **default**: | ``False`` |\n+--------------+-----------+\n\nWhether the view for downloading Certificate Revocation Lists should\nbe protected with authentication or not.\n\nExtending django-x509\n---------------------\n\n*django-x509* provides a set of models and admin classes which can be imported,\nextended and reused by third party apps.\n\nTo extend *django-x509*, **you MUST NOT** add it to ``settings.INSTALLED_APPS``,\nbut you must create your own app (which goes into ``settings.INSTALLED_APPS``), import the\nbase classes from django-x509 and add your customizations.\n\nIn order to help django find the static files and templates of *django-x509*,\nyou need to perform the steps described below.\n\n1. Install ``openwisp-utils``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nInstall (and add to the requirement of your project) `openwisp-utils\n`_::\n\n pip install openwisp-utils\n\n2. Add ``EXTENDED_APPS``\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nAdd the following to your ``settings.py``:\n\n.. code-block:: python\n\n EXTENDED_APPS = ('django_x509',)\n\n3. Add ``openwisp_utils.staticfiles.DependencyFinder``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAdd ``openwisp_utils.staticfiles.DependencyFinder`` to\n``STATICFILES_FINDERS`` in your ``settings.py``:\n\n.. code-block:: python\n\n STATICFILES_FINDERS = [\n 'django.contrib.staticfiles.finders.FileSystemFinder',\n 'django.contrib.staticfiles.finders.AppDirectoriesFinder',\n 'openwisp_utils.staticfiles.DependencyFinder',\n ]\n\n4. Add ``openwisp_utils.loaders.DependencyLoader``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAdd ``openwisp_utils.loaders.DependencyLoader`` to ``TEMPLATES`` in your ``settings.py``:\n\n.. code-block:: python\n\n TEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'OPTIONS': {\n 'loaders': [\n 'django.template.loaders.filesystem.Loader',\n 'django.template.loaders.app_directories.Loader',\n 'openwisp_utils.loaders.DependencyLoader',\n ],\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n }\n ]\n\nExtending models\n~~~~~~~~~~~~~~~~\n\nThis example provides an example of how to extend the base models of\n*django-x509* by adding a relation to another django model named `Organization`.\n\n.. code-block:: python\n\n # models.py of your app\n from django.db import models\n from django_x509.base.models import AbstractCa, AbstractCert\n\n # the model ``organizations.Organization`` is omitted for brevity\n # if you are curious to see a real implementation, check out django-organizations\n\n\n class OrganizationMixin(models.Model):\n organization = models.ForeignKey('organizations.Organization')\n\n class Meta:\n abstract = True\n\n\n class Ca(OrganizationMixin, AbstractCa):\n class Meta(AbstractCa.Meta):\n abstract = False\n\n def clean(self):\n # your own validation logic here...\n pass\n\n\n class Cert(OrganizationMixin, AbstractCert):\n ca = models.ForeignKey(Ca)\n\n class Meta(AbstractCert.Meta):\n abstract = False\n\n def clean(self):\n # your own validation logic here...\n pass\n\nExtending the admin\n~~~~~~~~~~~~~~~~~~~\n\nFollowing the previous `Organization` example, you can avoid duplicating the admin\ncode by importing the base admin classes and registering your models with.\n\n.. code-block:: python\n\n # admin.py of your app\n from django.contrib import admin\n\n from django_x509.base.admin import CaAdmin as BaseCaAdmin\n from django_x509.base.admin import CertAdmin as BaseCertAdmin\n\n from .models import Ca, Cert\n\n\n class CaAdmin(BaseCaAdmin):\n # extend/modify the default behaviour here\n pass\n\n\n class CertAdmin(BaseCertAdmin):\n # extend/modify the default behaviour here\n pass\n\n\n admin.site.register(Ca, CaAdmin)\n admin.site.register(Cert, CertAdmin)\n\nContributing\n------------\n\nPlease read the `OpenWISP contributing guidelines\n`_\nand also keep in mind the following:\n\n1. Announce your intentions in the `OpenWISP Mailing List `_\n2. Fork this repo and install it\n3. Follow `PEP8, Style Guide for Python Code`_\n4. Write code\n5. Write tests for your code\n6. Ensure all tests pass\n7. Ensure test coverage does not decrease\n8. Document your changes\n9. Send pull request\n\n.. _PEP8, Style Guide for Python Code: http://www.python.org/dev/peps/pep-0008/\n\nChangelog\n---------\n\nSee `CHANGES `_.\n\nLicense\n-------\n\nSee `LICENSE `_.\n\nSupport\n-------\n\nSee `OpenWISP Support Channels `_.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/openwisp/django-x509/releases", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/openwisp/django-x509", "keywords": "django,x509,pki,PEM,openwisp", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-x509", "package_url": "https://pypi.org/project/django-x509/", "platform": "Platform Indipendent", "project_url": "https://pypi.org/project/django-x509/", "project_urls": { "Download": "https://github.com/openwisp/django-x509/releases", "Homepage": "https://github.com/openwisp/django-x509" }, "release_url": "https://pypi.org/project/django-x509/0.4.1/", "requires_dist": [ "six", "django (<2.2,>=1.11)", "django-model-utils", "jsonfield", "cryptography (<2.4.0,>=2.3.0)", "pyopenssl (<18.1.0,>=17.5.0)" ], "requires_python": "", "summary": "Reusable django app to generate and manage x509 certificates", "version": "0.4.1" }, "last_serial": 4240079, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "8c6862e41afeda4f356b01c918cecc11", "sha256": "55cf0cc19e6ebd149d503d3f52452d4320c19a7eb2874aff3c3d396d970805f5" }, "downloads": -1, "filename": "django_x509-0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "8c6862e41afeda4f356b01c918cecc11", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 25321, "upload_time": "2016-07-18T10:53:14", "url": "https://files.pythonhosted.org/packages/72/c9/ec8a4219a1a1b45c6ab7d03f3ab2272ef86233c5e554bee0d656f46dc7f8/django_x509-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bbc0f5e5382beea672a9eb17157f6308", "sha256": "970d89459ec03aa120cffc301d0aebb6407ee8821d2f7addd975d536d0e15d17" }, "downloads": -1, "filename": "django-x509-0.1.tar.gz", "has_sig": true, "md5_digest": "bbc0f5e5382beea672a9eb17157f6308", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20292, "upload_time": "2016-07-18T10:53:11", "url": "https://files.pythonhosted.org/packages/f0/07/01a0cd9d6d4d0b569ab968616c545d3674b58404bdf1748e65a51a4707e0/django-x509-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1a97e55d6969659cd9eb8b1b8ed010e2", "sha256": "166882c8deb87b2b1461da6afc1c5ca9a1bc9a9792e3e673a6f4ea5c492b1349" }, "downloads": -1, "filename": "django_x509-0.1.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1a97e55d6969659cd9eb8b1b8ed010e2", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 26503, "upload_time": "2016-08-03T10:06:42", "url": "https://files.pythonhosted.org/packages/a1/6d/eecb70b0002355eca004ff0ffae4529206183d6e45c5f67d8704776a26c5/django_x509-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d48a57cb1824406951fc36d89ce8598", "sha256": "9939753be911b99b444885c664d9b3332dcb77e0d70271a8ce321f0a504bdedf" }, "downloads": -1, "filename": "django-x509-0.1.1.tar.gz", "has_sig": true, "md5_digest": "8d48a57cb1824406951fc36d89ce8598", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21018, "upload_time": "2016-08-03T10:06:39", "url": "https://files.pythonhosted.org/packages/22/e4/0d5c30593936135510c3a8e9f789d93dced33d3928ec529d578698797d17/django-x509-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "6208867400e92a693944d75a55170602", "sha256": "dc512cbbd321c8d57e5913219033e586a3e4a32074d5cee6d6b786dad1077754" }, "downloads": -1, "filename": "django_x509-0.1.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "6208867400e92a693944d75a55170602", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 26696, "upload_time": "2016-09-08T15:47:52", "url": "https://files.pythonhosted.org/packages/86/7a/fa33ec5e08144c5e90ee3af8a8242bf76958d96916bdc077feaf6634cf72/django_x509-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "483354cacf6811f8e3df225e0a68efdd", "sha256": "2a212b82a6d1a2ffdb69e80911616a7725ed95a9310583342a8321f94c98299c" }, "downloads": -1, "filename": "django-x509-0.1.2.tar.gz", "has_sig": true, "md5_digest": "483354cacf6811f8e3df225e0a68efdd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21258, "upload_time": "2016-09-08T15:47:49", "url": "https://files.pythonhosted.org/packages/46/21/710f8b22b9330d85978bb48ce1e974c6631ed89d3449b5ddb0a55f7b1f36/django-x509-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "d2e27b0e19409526303e9efa917d493f", "sha256": "c08f8039592b97b3f4424c95c32300abcd76b3f144c915bf8f1abbd0cabbf8c2" }, "downloads": -1, "filename": "django_x509-0.1.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "d2e27b0e19409526303e9efa917d493f", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 29256, "upload_time": "2016-09-22T12:54:03", "url": "https://files.pythonhosted.org/packages/ab/96/595c45da6292115c2067cacf37220d5d0c19ffb57200cbca913345ac2b53/django_x509-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c55bdb12a6f61fab4667cedeae960a94", "sha256": "b3051c294c018f24800d9ec64ef9e676b39a1c4bd914c1a79e35ffd1f41e45f5" }, "downloads": -1, "filename": "django-x509-0.1.3.tar.gz", "has_sig": true, "md5_digest": "c55bdb12a6f61fab4667cedeae960a94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24122, "upload_time": "2016-09-22T12:54:00", "url": "https://files.pythonhosted.org/packages/3b/21/9d7403f0fbda2747714e4d041ab1c4e6849d9d8a9cece614491144cf1bb6/django-x509-0.1.3.tar.gz" } ], "0.1.alpha": [], "0.2": [ { "comment_text": "", "digests": { "md5": "2101be31d73a2235d9a5d8dd787db20c", "sha256": "a9501720ae60f930b0f1bc5d2c49de40e1344f8649a4defb7567039b77fde762" }, "downloads": -1, "filename": "django_x509-0.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "2101be31d73a2235d9a5d8dd787db20c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 30528, "upload_time": "2017-01-11T16:35:09", "url": "https://files.pythonhosted.org/packages/09/ac/967918a60046e1d0ab2c15aac44ac3d9d678d7742b487b41729acdca8417/django_x509-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "779858d5b604c94d13535e61cf96b416", "sha256": "d778f23c3d35da6ce1cfb5745c9052de0b6635f1643d8e974f1c0e0d7378edc7" }, "downloads": -1, "filename": "django-x509-0.2.tar.gz", "has_sig": true, "md5_digest": "779858d5b604c94d13535e61cf96b416", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25811, "upload_time": "2017-01-11T16:35:03", "url": "https://files.pythonhosted.org/packages/7f/92/f2bfa468a5bc701f8d17028074656f36fa2d06865debf6b2c4a797e930a3/django-x509-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "6bde1f32d1a7f63620a174b6aa9c19a5", "sha256": "cdb28949165a93be47802865a7a3c0637f9426a68b30ac22afe5738cbb76c722" }, "downloads": -1, "filename": "django_x509-0.2.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "6bde1f32d1a7f63620a174b6aa9c19a5", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 30607, "upload_time": "2017-05-02T08:09:40", "url": "https://files.pythonhosted.org/packages/46/a2/7670d652dfd12d8b9eb54e418291fe3b3d0cb105e9aa2990d091e3ff9dab/django_x509-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f88bf9065a9dbc526f27eed92443cde2", "sha256": "f144539925d6936f9ff7341fb8a7e60622c91a3ccc6be174df394dd449601e74" }, "downloads": -1, "filename": "django-x509-0.2.1.tar.gz", "has_sig": true, "md5_digest": "f88bf9065a9dbc526f27eed92443cde2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25880, "upload_time": "2017-05-02T08:09:38", "url": "https://files.pythonhosted.org/packages/d0/ab/718c65fb309db8a529b4d1a3e6f4e38b4f04ac9a1665660c59e723453e47/django-x509-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "46bf187f500dca94722be873f1e28f1a", "sha256": "3c101d4f545a08bb670dffd7d34f7ad3d6a8a6703b9aaa8a68d87b252f957ec9" }, "downloads": -1, "filename": "django_x509-0.2.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "46bf187f500dca94722be873f1e28f1a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30870, "upload_time": "2017-05-11T20:13:52", "url": "https://files.pythonhosted.org/packages/5f/be/3a6c0c1a07fb239c37a049117474179176751a1794c351b46738b967cc1d/django_x509-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b5372624735db6c08c49558f28b7bfb", "sha256": "0a25df5be3170c6c4ed0bb640487ca17157b1b7cd6fa028acdc075e707d911ca" }, "downloads": -1, "filename": "django-x509-0.2.2.tar.gz", "has_sig": true, "md5_digest": "4b5372624735db6c08c49558f28b7bfb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26199, "upload_time": "2017-05-11T20:13:55", "url": "https://files.pythonhosted.org/packages/31/08/108099e2f859b54460aa3a9c06e655266a5e0ec9cbff3a9e370cf6a4710f/django-x509-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "f043ef4918d3abf875881fc22527a1e0", "sha256": "cbc59b528862ae90bd467710aa22d9d72f1d9a63fdcb37370b9881d6412520d1" }, "downloads": -1, "filename": "django_x509-0.2.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "f043ef4918d3abf875881fc22527a1e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30873, "upload_time": "2017-05-15T16:50:19", "url": "https://files.pythonhosted.org/packages/d2/be/f64dd45cac60a97efe2c09aabe153b863801cbdd88eaebe464a3417cb91b/django_x509-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aa846221bd828590b3c462ae4165c225", "sha256": "ef52b5adfb172a7f29f7dca3a1e0bdc34a11d34d6bdc4ea18c622e61dd33ef3e" }, "downloads": -1, "filename": "django-x509-0.2.3.tar.gz", "has_sig": true, "md5_digest": "aa846221bd828590b3c462ae4165c225", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26240, "upload_time": "2017-05-15T16:50:16", "url": "https://files.pythonhosted.org/packages/32/c2/5c63cc81d34b5a912147d879fa99429e519ee8a2b5ffccb8c7d9ae7319a2/django-x509-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "3e7e0c75c1c654cc47615c5c46800c00", "sha256": "8153e58bb4f3431748da54680937e5af72efd33f75c38bf85d251c6e0a94c3ea" }, "downloads": -1, "filename": "django_x509-0.2.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "3e7e0c75c1c654cc47615c5c46800c00", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30920, "upload_time": "2017-07-04T12:21:01", "url": "https://files.pythonhosted.org/packages/e2/35/fc0e9c5c98ec599838858e79a82103ca230366e758be289fa22ec65ee850/django_x509-0.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f27e37e1290556370f84e5d060d23b3e", "sha256": "72eca3e1873f0f3afc819f4bdc766e4609697225faa5aab25ce5f482b74da1bc" }, "downloads": -1, "filename": "django-x509-0.2.4.tar.gz", "has_sig": true, "md5_digest": "f27e37e1290556370f84e5d060d23b3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26310, "upload_time": "2017-07-04T12:20:59", "url": "https://files.pythonhosted.org/packages/46/c0/9541ebedfd449821df28a44b875161579bf1c7964e6dc936b64b334b00a1/django-x509-0.2.4.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "a7528770ff5d89e5351de9cf8137519f", "sha256": "5feb6ef8979b400894f5b276ac295e5ca112a6ca6565075163742cdd6c07de26" }, "downloads": -1, "filename": "django_x509-0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "a7528770ff5d89e5351de9cf8137519f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33660, "upload_time": "2017-11-03T18:58:41", "url": "https://files.pythonhosted.org/packages/e9/fb/4eccd546e8c90bf2ec0587942d4218120a755853397b1963b0252ced3e41/django_x509-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e4ae3dbf75e4120407d01a718f4402c", "sha256": "35a402268a1eab8866cd90838b83709c67ab633eaab0b09a148f4f463299c920" }, "downloads": -1, "filename": "django-x509-0.3.tar.gz", "has_sig": true, "md5_digest": "0e4ae3dbf75e4120407d01a718f4402c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29726, "upload_time": "2017-11-03T18:58:39", "url": "https://files.pythonhosted.org/packages/4a/ff/39b71c1a10db56c35f5d1030ee64ad79d5b0a7fdf11bb1754edf33330336/django-x509-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c9c7df4d702239fbe1ae625dd175b287", "sha256": "edf694626833ad04a7f7c4843419340326870d0904c562eddb4477b158b9cbf1" }, "downloads": -1, "filename": "django_x509-0.3.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "c9c7df4d702239fbe1ae625dd175b287", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33802, "upload_time": "2017-12-01T11:01:57", "url": "https://files.pythonhosted.org/packages/6f/e9/93ea8c2a196be8b7fc623825a130e35a598ddbd194dbfa519c0119dd5cca/django_x509-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96197028edc50a1eb0e1f9a6c2a7dfa2", "sha256": "662f03f0fe3433f6f2daf78be941ce549daa7aebc0029b335287f570fc0ee5a8" }, "downloads": -1, "filename": "django-x509-0.3.1.tar.gz", "has_sig": true, "md5_digest": "96197028edc50a1eb0e1f9a6c2a7dfa2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29842, "upload_time": "2017-12-01T11:01:55", "url": "https://files.pythonhosted.org/packages/72/bb/469955a3ea322780143e1b6527487fb25cd94d86768f4a2cb903cf8d1c56/django-x509-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "ec303b0ef5ee61aed232fb9c3b05d82d", "sha256": "c64dcffe3a91726c2734913e9d051fad3f5ea94a646ab1e7b6456bfc0dc5d926" }, "downloads": -1, "filename": "django_x509-0.3.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "ec303b0ef5ee61aed232fb9c3b05d82d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34438, "upload_time": "2017-12-06T14:39:14", "url": "https://files.pythonhosted.org/packages/6b/b4/0194782bfca37f61855b082dd4504aa1ba059eef62adf1477cd540141ff9/django_x509-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4bb526b617f32f9398e1bcf343895f3a", "sha256": "2e216094c240ffd395ca2d55c29013fa5bbac4445524144d9e9e8e38c7bce6a6" }, "downloads": -1, "filename": "django-x509-0.3.2.tar.gz", "has_sig": true, "md5_digest": "4bb526b617f32f9398e1bcf343895f3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30513, "upload_time": "2017-12-06T14:39:12", "url": "https://files.pythonhosted.org/packages/96/d7/41cf0fa8716eba861464338b714f14ceca8554b9b664b7c813a33ea5be12/django-x509-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "636f5933c77d35d139ded8fb4909c5c1", "sha256": "0cf3a5c10e51392122d56035170ed1b496d50ab5f5e20b68dcea08f4b2d52fd9" }, "downloads": -1, "filename": "django_x509-0.3.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "636f5933c77d35d139ded8fb4909c5c1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36441, "upload_time": "2017-12-20T16:35:46", "url": "https://files.pythonhosted.org/packages/15/db/dec9532a7ef990b0111d79547fcf6b5921ffdc805b289fc575b8154229e4/django_x509-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e25834426646d5312cc07dab691ca53a", "sha256": "0e4f200eb7cb92646e3c5c3db04e414d7b9cc111c675c979d4887cb1b668f7f6" }, "downloads": -1, "filename": "django-x509-0.3.3.tar.gz", "has_sig": true, "md5_digest": "e25834426646d5312cc07dab691ca53a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31886, "upload_time": "2017-12-20T16:35:44", "url": "https://files.pythonhosted.org/packages/a3/d7/f277e87865005f2ffcf290af55760f8112aa8099e25b14743b6ea908ec90/django-x509-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "a2f33896e9b90ff5b60cb2398c4fb83c", "sha256": "d52685651f0c00ce42e986c5873450154d347e56acce78668165b3f95c582c9f" }, "downloads": -1, "filename": "django_x509-0.3.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "a2f33896e9b90ff5b60cb2398c4fb83c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36429, "upload_time": "2017-12-20T16:49:54", "url": "https://files.pythonhosted.org/packages/19/6c/67b0255d8a334a7081457d1cae98633c43158e541b15e2bd7720a1aa8a6d/django_x509-0.3.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c07880271783ca3c7227961d69dd0a0", "sha256": "ac4c40f3f15b3119b201772451ea1757fa7e150ca4d07ef5f121d2827787ab3c" }, "downloads": -1, "filename": "django-x509-0.3.4.tar.gz", "has_sig": true, "md5_digest": "7c07880271783ca3c7227961d69dd0a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31905, "upload_time": "2017-12-20T16:49:52", "url": "https://files.pythonhosted.org/packages/79/80/54e1b4bc7c6d3f50b293372a835fd697e0a99c57cfed3eef62e7758a8f5c/django-x509-0.3.4.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "5b6d85c7b3411e903b92d4969ae95df5", "sha256": "11316ad4fcdebc83429d5ea5f08a2844f67174930b9c0a2f8b387a4d467d0e6c" }, "downloads": -1, "filename": "django_x509-0.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "5b6d85c7b3411e903b92d4969ae95df5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38851, "upload_time": "2018-02-19T11:54:32", "url": "https://files.pythonhosted.org/packages/33/89/ec431a4cb1cba119561a38ab1e6d7a61bf92fc38318afa98ff3f2ad8850a/django_x509-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cb6b3f4205b51c6426457ef30c8cbfb6", "sha256": "bfa0fff760ab7d98708d4dabb0bb7655d151434a1a45b4dc6178fb6d6b2c1ec3" }, "downloads": -1, "filename": "django-x509-0.4.tar.gz", "has_sig": true, "md5_digest": "cb6b3f4205b51c6426457ef30c8cbfb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29983, "upload_time": "2018-02-19T11:54:35", "url": "https://files.pythonhosted.org/packages/87/e6/a683b9c4d9096ab4bf91774f329001931e2f1ce3950f3bdfffa7ffd8d8fa/django-x509-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "975437e4c3477f427a678085362d501e", "sha256": "74c4db6bb0105d1bec6f352460d0bdc101d10d7d57c0b021e592532e58af6dac" }, "downloads": -1, "filename": "django_x509-0.4.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "975437e4c3477f427a678085362d501e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35388, "upload_time": "2018-09-05T07:23:29", "url": "https://files.pythonhosted.org/packages/f9/9a/276efec8d5bbd068dabd84b9a9615cad0431313e365f6843cc48306ddf7e/django_x509-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4332a8b20f51ea99e36ee330263a3628", "sha256": "aec72d5ff2c7e7bb0ecbaf83efc7b0bded658c77a3f94797cb7e95f904ca7d52" }, "downloads": -1, "filename": "django-x509-0.4.1.tar.gz", "has_sig": true, "md5_digest": "4332a8b20f51ea99e36ee330263a3628", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31111, "upload_time": "2018-09-05T07:23:31", "url": "https://files.pythonhosted.org/packages/74/52/7b30818e205b4c5a3ec0b4bdf32b70d4dca2c050e27b9bd35eceefef528f/django-x509-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "975437e4c3477f427a678085362d501e", "sha256": "74c4db6bb0105d1bec6f352460d0bdc101d10d7d57c0b021e592532e58af6dac" }, "downloads": -1, "filename": "django_x509-0.4.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "975437e4c3477f427a678085362d501e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35388, "upload_time": "2018-09-05T07:23:29", "url": "https://files.pythonhosted.org/packages/f9/9a/276efec8d5bbd068dabd84b9a9615cad0431313e365f6843cc48306ddf7e/django_x509-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4332a8b20f51ea99e36ee330263a3628", "sha256": "aec72d5ff2c7e7bb0ecbaf83efc7b0bded658c77a3f94797cb7e95f904ca7d52" }, "downloads": -1, "filename": "django-x509-0.4.1.tar.gz", "has_sig": true, "md5_digest": "4332a8b20f51ea99e36ee330263a3628", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31111, "upload_time": "2018-09-05T07:23:31", "url": "https://files.pythonhosted.org/packages/74/52/7b30818e205b4c5a3ec0b4bdf32b70d4dca2c050e27b9bd35eceefef528f/django-x509-0.4.1.tar.gz" } ] }