diff options
Diffstat (limited to 'passlib/handlers/oracle.py')
-rw-r--r-- | passlib/handlers/oracle.py | 88 |
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 +#============================================================================= |