[Checkins] SVN: Sandbox/janwijbrand/z3c.bcrypt/ Initial checkin.

Jan-Wijbrand Kolman janwijbrand at gmail.com
Thu Feb 18 08:13:03 EST 2010


Log message for revision 109122:
  Initial checkin.
  
  

Changed:
  A   Sandbox/janwijbrand/z3c.bcrypt/
  A   Sandbox/janwijbrand/z3c.bcrypt/.installed.cfg
  A   Sandbox/janwijbrand/z3c.bcrypt/CHANGES.txt
  A   Sandbox/janwijbrand/z3c.bcrypt/LICENSE.txt
  A   Sandbox/janwijbrand/z3c.bcrypt/README.txt
  A   Sandbox/janwijbrand/z3c.bcrypt/bootstrap.py
  A   Sandbox/janwijbrand/z3c.bcrypt/buildout.cfg
  A   Sandbox/janwijbrand/z3c.bcrypt/setup.py
  A   Sandbox/janwijbrand/z3c.bcrypt/src/
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/__init__.py
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/USAGE.txt
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/__init__.py
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/configure.zcml
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/passwordmanager.py
  A   Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/tests.py

-=-
Added: Sandbox/janwijbrand/z3c.bcrypt/.installed.cfg
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/.installed.cfg	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/.installed.cfg	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,82 @@
+[buildout]
+installed_develop_eggs = /home/jw/project/grokdev/z3c.bcrypt/develop-eggs/z3c.bcrypt.egg-link
+parts = devtools test
+
+[devtools]
+__buildout_installed__ = /home/jw/project/grokdev/z3c.bcrypt/bin/ezmerge
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ezrevert
+	/home/jw/project/grokdev/z3c.bcrypt/bin/eazysvn
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ezswitch
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ezbranch
+	/home/jw/project/grokdev/z3c.bcrypt/bin/iptest
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ipythonx
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ipcluster
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ipython
+	/home/jw/project/grokdev/z3c.bcrypt/bin/pycolor
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ipcontroller
+	/home/jw/project/grokdev/z3c.bcrypt/bin/ipengine
+	/home/jw/project/grokdev/z3c.bcrypt/bin/easy_install
+	/home/jw/project/grokdev/z3c.bcrypt/bin/easy_install-2.5
+	/home/jw/project/grokdev/z3c.bcrypt/bin/fullrelease
+	/home/jw/project/grokdev/z3c.bcrypt/bin/postrelease
+	/home/jw/project/grokdev/z3c.bcrypt/bin/lasttagdiff
+	/home/jw/project/grokdev/z3c.bcrypt/bin/prerelease
+	/home/jw/project/grokdev/z3c.bcrypt/bin/release
+	/home/jw/project/grokdev/z3c.bcrypt/bin/longtest
+	/home/jw/project/grokdev/z3c.bcrypt/bin/python
+__buildout_signature__ = zc.recipe.egg-1.2.2-py2.5.egg setuptools-0.6c11-py2.5.egg zc.buildout-1.4.3-py2.5.egg
+_b = /home/jw/project/grokdev/z3c.bcrypt/bin
+_d = /home/jw/project/grokdev/z3c.bcrypt/develop-eggs
+_e = /home/jw/.buildout/eggs
+bin-directory = /home/jw/project/grokdev/z3c.bcrypt/bin
+develop-eggs-directory = /home/jw/project/grokdev/z3c.bcrypt/develop-eggs
+eggs = %(__buildout_space_n__)sz3c.bcrypt
+	z3c.bcrypt [test]
+	cryptacular
+	eazysvn
+	ipython
+	setuptools
+	zest.releaser
+eggs-directory = /home/jw/.buildout/eggs
+executable = /home/jw/py2.5/bin/python
+interpreter = python
+recipe = zc.recipe.egg
+
+[test]
+__buildout_installed__ = /home/jw/project/grokdev/z3c.bcrypt/parts/test
+	/home/jw/project/grokdev/z3c.bcrypt/bin/test
+__buildout_signature__ = zc.recipe.testrunner-1.2.0-py2.5.egg zc.recipe.egg-1.2.2-py2.5.egg setuptools-0.6c11-py2.5.egg zope.testing-3.8.7-py2.5.egg zc.buildout-1.4.3-py2.5.egg zope.interface-3.5.2-py2.5-linux-i686.egg zope.exceptions-3.5.2-py2.5.egg
+_b = /home/jw/project/grokdev/z3c.bcrypt/bin
+_d = /home/jw/project/grokdev/z3c.bcrypt/develop-eggs
+_e = /home/jw/.buildout/eggs
+bin-directory = /home/jw/project/grokdev/z3c.bcrypt/bin
+defaults = ['-v']
+develop-eggs-directory = /home/jw/project/grokdev/z3c.bcrypt/develop-eggs
+eggs = %(__buildout_space_n__)sz3c.bcrypt
+	z3c.bcrypt [test]
+eggs-directory = /home/jw/.buildout/eggs
+executable = /home/jw/py2.5/bin/python
+location = /home/jw/project/grokdev/z3c.bcrypt/parts/test
+recipe = zc.recipe.testrunner
+script = /home/jw/project/grokdev/z3c.bcrypt/bin/test
+
+[buildout]
+parts = test devtools
+
+[buildout]
+installed_develop_eggs = /home/jw/project/grokdev/z3c.bcrypt/develop-eggs/z3c.bcrypt.egg-link
+
+[buildout]
+parts = devtools test
+
+[buildout]
+parts = test devtools
+
+[buildout]
+installed_develop_eggs = /home/jw/project/grokdev/z3c.bcrypt/develop-eggs/z3c.bcrypt.egg-link
+
+[buildout]
+parts = devtools test
+
+[buildout]
+parts = test devtools

Added: Sandbox/janwijbrand/z3c.bcrypt/CHANGES.txt
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/CHANGES.txt	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/CHANGES.txt	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,7 @@
+Changelog of z3c.bcrypt
+=======================
+
+1.0 (unreleased)
+----------------
+
+- Initial public release.

Added: Sandbox/janwijbrand/z3c.bcrypt/LICENSE.txt
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/LICENSE.txt	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/LICENSE.txt	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,54 @@
+Zope Public License (ZPL) Version 2.1
+-------------------------------------
+
+A copyright notice accompanies this license document that
+identifies the copyright holders.
+
+This license has been certified as open source. It has also
+been designated as GPL compatible by the Free Software
+Foundation (FSF).
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions in source code must retain the
+   accompanying copyright notice, this list of conditions,
+   and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the accompanying
+   copyright notice, this list of conditions, and the
+   following disclaimer in the documentation and/or other
+   materials provided with the distribution.
+
+3. Names of the copyright holders must not be used to
+   endorse or promote products derived from this software
+   without prior written permission from the copyright
+   holders.
+
+4. The right to distribute this software or to use it for
+   any purpose does not give you the right to use
+   Servicemarks (sm) or Trademarks (tm) of the copyright
+   holders. Use of them is covered by separate agreement
+   with the copyright holders.
+
+5. If any files are modified, you must cause the modified
+   files to carry prominent notices stating that you changed
+   the files and the date of any change.
+
+Disclaimer
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS''
+  AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+  NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
+  NO EVENT SHALL THE COPYRIGHT HOLDERS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+  DAMAGE.

Added: Sandbox/janwijbrand/z3c.bcrypt/README.txt
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/README.txt	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/README.txt	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,11 @@
+z3c.bcrypt
+==========
+
+z3c.bcrypt provides `zope.password`_ compatible "password manager" utilities
+that use bcrypt (or alternatively pbkdf2) encoding for storing passwords.
+
+Both encoding schemes are implemented in the cryptacular_ library that is
+a dependency for this pacakge.
+
+.. _`zope.password`: http://pypi.python.org/pypi/zope.password
+.. _cryptacular: http://pypi.python.org/pypi/cryptacular

Added: Sandbox/janwijbrand/z3c.bcrypt/bootstrap.py
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/bootstrap.py	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/bootstrap.py	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,55 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id$
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+try:
+    import pkg_resources
+except ImportError:
+    ez = {}
+    exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                         ).read() in ez
+    ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+    import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)

Added: Sandbox/janwijbrand/z3c.bcrypt/buildout.cfg
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/buildout.cfg	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/buildout.cfg	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,25 @@
+[buildout]
+develop = .
+extensions = buildout.dumppickedversions
+parts = test devtools
+prefer-final = true
+unzip = true
+
+[test]
+recipe = zc.recipe.testrunner
+defaults = ['-v']
+eggs =
+    z3c.bcrypt
+    z3c.bcrypt [test]
+
+[devtools]
+recipe = zc.recipe.egg
+interpreter = python
+eggs =
+    z3c.bcrypt
+    z3c.bcrypt [test]
+    cryptacular
+    eazysvn
+    ipython
+    setuptools
+    zest.releaser

Added: Sandbox/janwijbrand/z3c.bcrypt/setup.py
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/setup.py	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/setup.py	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,53 @@
+from setuptools import setup, find_packages
+import os.path
+
+version = '1.0dev'
+
+readme = open('README.txt').read()
+changes = open('CHANGES.txt').read()
+usage = open(os.path.join(
+    'src', 'z3c', 'bcrypt', 'USAGE.txt')).read()
+
+long_description = '\n\n'.join([readme, usage, changes, ''])
+
+setup(name='z3c.bcrypt',
+      version=version,
+      description=(
+          "Password manager utility using bcrypt or pbkdf2 encoding. "
+          "Useful in combination with zope.password"),
+      long_description=long_description,
+      classifiers = [
+          'Development Status :: 5 - Production/Stable',
+          'Environment :: Web Environment',
+          'Intended Audience :: Developers',
+          'License :: OSI Approved :: Zope Public License',
+          'Programming Language :: Python',
+          'Natural Language :: English',
+          'Operating System :: OS Independent',
+          'Topic :: Internet :: WWW/HTTP',
+          'Framework :: Zope3'],
+      keywords='zope authentication password bcrypy pbkdf2',
+      author = "The Health Agency and the Zope Community",
+      author_email = "zope3-dev at zope.org",
+      url='http://pypi.python.org/pypi/z3c.bcrypt',
+      license='ZPL 2.1',
+      package_dir={'': 'src'},
+      packages=find_packages('src'),
+      namespace_packages=['z3c'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'cryptacular',
+          'zope.interface',
+          'zope.password',
+          ],
+      extras_require = dict(
+        test = [
+            'zope.testing',
+            ],
+        ),
+      entry_points={
+          'console_scripts': []
+          },
+      )

Added: Sandbox/janwijbrand/z3c.bcrypt/src/z3c/__init__.py
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/src/z3c/__init__.py	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/src/z3c/__init__.py	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)

Added: Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/USAGE.txt
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/USAGE.txt	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/USAGE.txt	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,42 @@
+z3c.bcrypt
+===========
+
+    >>> from zope.interface.verify import verifyObject
+    >>> from zope.password.interfaces import IPasswordManager
+    >>> from z3c.bcrypt import BcryptPasswordManager
+    >>> manager = BcryptPasswordManager()
+    >>> verifyObject(IPasswordManager, manager)
+    True
+
+    >>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
+
+    >>> encoded = manager.encodePassword(password)
+    >>> encoded
+    '$2a$...'
+    >>> manager.checkPassword(encoded, password)
+    True
+    >>> manager.checkPassword(encoded, password + u"wrong")
+    False
+
+    >>> from z3c.bcrypt import PBKDF2PasswordManager
+    >>> manager = PBKDF2PasswordManager()
+    >>> verifyObject(IPasswordManager, manager)
+    True
+
+    >>> encoded = manager.encodePassword(password)
+    >>> encoded
+    '$p5k2$...'
+    >>> manager.checkPassword(encoded, password)
+    True
+    >>> manager.checkPassword(encoded, password + u"wrong")
+    False
+
+    >>> # A previously encoded password, should be decodable even if the
+    >>> # current encoding of the same password is different::
+    >>> previouslyencoded = (
+    ...     '$p5k2$1000$LgAFPIlc9CgrlSaxHyTUMA='
+    ...     '=$IuUYplhMkR4qCl8-ONRVjEgJNwE=')
+    >>> encoded == previouslyencoded
+    False
+    >>> manager.checkPassword(previouslyencoded , password)
+    True

Added: Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/__init__.py
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/__init__.py	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/__init__.py	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,2 @@
+from z3c.bcrypt.passwordmanager import BcryptPasswordManager
+from z3c.bcrypt.passwordmanager import PBKDF2PasswordManager

Added: Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/configure.zcml
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/configure.zcml	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/configure.zcml	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,26 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="zope.password" />
+
+  <utility
+    name="bcrypt"
+    provides="zope.password.interfaces.IPasswordManager"
+    factory=".passwordmanager.BcryptPasswordManager"
+  />
+  <utility
+    name="pbkdf2"
+    provides="zope.password.interfaces.IPasswordManager"
+    factory=".passwordmanager.PBKDF2PasswordManager"
+  />
+
+  <configure zcml:condition="installed zope.security">
+    <class class=".passwordmanager.BcryptPasswordManager">
+      <allow interface="zope.password.interfaces.IPasswordManager" />
+    </class>
+    <class class=".passwordmanager.PBKDF2PasswordManager">
+      <allow interface=".interfaces.IPasswordManager" />
+    </class>
+  </configure>
+</configure>
\ No newline at end of file

Added: Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/passwordmanager.py
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/passwordmanager.py	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/passwordmanager.py	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,41 @@
+##############################################################################
+#
+# Copyright (c) 2007-2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Password Managers using bcrypt or pbkdf2 encoding.
+"""
+
+from zope.interface import implements
+from zope.password.interfaces import IPasswordManager
+from cryptacular import bcrypt, pbkdf2
+
+class BcryptPasswordManager(object):
+    """bcrypt password manager.
+    """
+
+    implements(IPasswordManager)
+
+    def __init__(self):
+        self._manager = bcrypt.BCRYPTPasswordManager()
+
+    def encodePassword(self, password, salt=None):
+        return self._manager.encode(password)
+
+    def checkPassword(self, encoded_password, password):
+        return self._manager.check(encoded_password, password)
+
+class PBKDF2PasswordManager(BcryptPasswordManager):
+    """pbkdf2 password manager.
+    """
+
+    def __init__(self):
+        self._manager = pbkdf2.PBKDF2PasswordManager()

Added: Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/tests.py
===================================================================
--- Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/tests.py	                        (rev 0)
+++ Sandbox/janwijbrand/z3c.bcrypt/src/z3c/bcrypt/tests.py	2010-02-18 13:13:02 UTC (rev 109122)
@@ -0,0 +1,21 @@
+##############################################################################
+#
+# Copyright (c) 2007-2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+import unittest
+from zope.testing import doctest
+
+def test_suite():
+    return unittest.TestSuite((
+        doctest.DocFileSuite(
+            'USAGE.txt', optionflags=doctest.ELLIPSIS),
+            ))
\ No newline at end of file



More information about the checkins mailing list