summaryrefslogtreecommitdiff
path: root/passlib/handlers/oracle.py
diff options
context:
space:
mode:
Diffstat (limited to 'passlib/handlers/oracle.py')
-rw-r--r--passlib/handlers/oracle.py88
1 files changed, 44 insertions, 44 deletions
diff --git a/passlib/handlers/oracle.py b/passlib/handlers/oracle.py
index ac45589..b826520 100644
--- a/passlib/handlers/oracle.py
+++ b/passlib/handlers/oracle.py
@@ -1,30 +1,29 @@
"""passlib.handlers.oracle - Oracle DB Password Hashes"""
-#=========================================================
-#imports
-#=========================================================
-#core
+#=============================================================================
+# imports
+#=============================================================================
+# core
from binascii import hexlify, unhexlify
from hashlib import sha1
import re
import logging; log = logging.getLogger(__name__)
from warnings import warn
-#site
-#libs
-#pkg
+# site
+# pkg
from passlib.utils import to_unicode, to_native_str, xor_bytes
from passlib.utils.compat import b, bytes, bascii_to_str, irange, u, \
uascii_to_str, unicode, str_to_uascii
from passlib.utils.des import des_encrypt_block
import passlib.utils.handlers as uh
-#local
+# local
__all__ = [
"oracle10g",
"oracle11g"
]
-#=========================================================
-#oracle10
-#=========================================================
+#=============================================================================
+# oracle10
+#=============================================================================
def des_cbc_encrypt(key, value, iv=b('\x00') * 8, pad=b('\x00')):
"""performs des-cbc encryption, returns only last block.
@@ -41,14 +40,14 @@ def des_cbc_encrypt(key, value, iv=b('\x00') * 8, pad=b('\x00')):
:returns: last block of DES-CBC encryption of all ``value``'s byte blocks.
"""
- value += pad * (-len(value) % 8) #null pad to multiple of 8
- hash = iv #start things off
+ value += pad * (-len(value) % 8) # null pad to multiple of 8
+ hash = iv # start things off
for offset in irange(0,len(value),8):
chunk = xor_bytes(hash, value[offset:offset+8])
hash = des_encrypt_block(key, chunk)
return hash
-#: magic string used as initial des key by oracle10
+# magic string used as initial des key by oracle10
ORACLE10_MAGIC = b("\x01\x23\x45\x67\x89\xAB\xCD\xEF")
class oracle10(uh.HasUserContext, uh.StaticHandler):
@@ -62,31 +61,32 @@ class oracle10(uh.HasUserContext, uh.StaticHandler):
:type user: str
:param user: name of oracle user account this password is associated with.
"""
- #=========================================================
+ #===================================================================
# algorithm information
- #=========================================================
+ #===================================================================
name = "oracle10"
checksum_chars = uh.HEX_CHARS
checksum_size = 16
- #=========================================================
+ #===================================================================
# methods
- #=========================================================
+ #===================================================================
@classmethod
def _norm_hash(cls, hash):
return hash.upper()
def _calc_checksum(self, secret):
- #FIXME: not sure how oracle handles unicode.
- # online docs about 10g hash indicate it puts ascii chars
- # in a 2-byte encoding w/ the high byte set to null.
- # they don't say how it handles other chars, or what encoding.
+ # FIXME: not sure how oracle handles unicode.
+ # online docs about 10g hash indicate it puts ascii chars
+ # in a 2-byte encoding w/ the high byte set to null.
+ # they don't say how it handles other chars, or what encoding.
#
- # so for now, encoding secret & user to utf-16-be, since that fits,
- # and if secret/user is bytes, we assume utf-8, and decode first.
+ # so for now, encoding secret & user to utf-16-be,
+ # since that fits, and if secret/user is bytes,
+ # we assume utf-8, and decode first.
#
- # this whole mess really needs someone w/ an oracle system,
- # and some answers :)
+ # this whole mess really needs someone w/ an oracle system,
+ # and some answers :)
if isinstance(secret, bytes):
secret = secret.decode("utf-8")
user = to_unicode(self.user, "utf-8", param="user")
@@ -95,13 +95,13 @@ class oracle10(uh.HasUserContext, uh.StaticHandler):
hash = des_cbc_encrypt(hash, input)
return hexlify(hash).decode("ascii").upper()
- #=========================================================
- #eoc
- #=========================================================
+ #===================================================================
+ # eoc
+ #===================================================================
-#=========================================================
-#oracle11
-#=========================================================
+#=============================================================================
+# oracle11
+#=============================================================================
class oracle11(uh.HasSalt, uh.GenericHandler):
"""This class implements the Oracle11g password hash, and follows the :ref:`password-hash-api`.
@@ -125,9 +125,9 @@ class oracle11(uh.HasSalt, uh.GenericHandler):
.. versionadded:: 1.6
"""
- #=========================================================
- #class attrs
- #=========================================================
+ #===================================================================
+ # class attrs
+ #===================================================================
#--GenericHandler--
name = "oracle11"
setting_kwds = ("salt",)
@@ -141,9 +141,9 @@ class oracle11(uh.HasSalt, uh.GenericHandler):
salt_chars = uh.UPPER_HEX_CHARS
- #=========================================================
- #methods
- #=========================================================
+ #===================================================================
+ # methods
+ #===================================================================
_hash_regex = re.compile(u("^S:(?P<chk>[0-9a-f]{40})(?P<salt>[0-9a-f]{20})$"), re.I)
@classmethod
@@ -166,10 +166,10 @@ class oracle11(uh.HasSalt, uh.GenericHandler):
chk = sha1(secret + unhexlify(self.salt.encode("ascii"))).hexdigest()
return str_to_uascii(chk).upper()
- #=========================================================
- #eoc
- #=========================================================
+ #===================================================================
+ # eoc
+ #===================================================================
-#=========================================================
-#eof
-#=========================================================
+#=============================================================================
+# eof
+#=============================================================================