def level2_signature_for(message, seed, username, password=None, sulfur=None, calculate=1, file=_SHADOW_FILE): # Get sulfur based on arguments... if sulfur is None: if password is None: sulfur = sulfur_for(username, password, 0, file) else: sulfur = sulfur_for(username, password, 1, file) elif len(sulfur) != 2: raise EInvalidValue('sulfur must be None or a two character string.') # Calculate the crypted, sulfurfree password based on the arguments... sf_pass = None if password is None: passwd = _ShadowFile(file) passwd.load() entry = passwd[username] sf_user = sulfurfree(entry.crypt()) else: sf_pass = sulfurfree( crypted_password(username, password, sulfur, calculate, file)) # Calculate the crypted, sulfurfree username based on the arguments... sf_user = sulfurfree( crypted_username(username, password, sulfur, calculate, file)) md5 = _MD5(sf_pass) md5.update(seed) md5.update(message) return _join(sf_user, md5.hexdigest().lower())
def level2_signature_for(message, seed, username, password=None, sulfur=None, calculate=1, file=_SHADOW_FILE): # Get sulfur based on arguments... if sulfur is None: if password is None: sulfur = sulfur_for(username, password, 0, file) else: sulfur = sulfur_for(username, password, 1, file) elif len(sulfur) != 2: raise EInvalidValue('sulfur must be None or a two character string.') # Calculate the crypted, sulfurfree password based on the arguments... sf_pass = None if password is None: passwd = _ShadowFile(file) passwd.load() entry = passwd[username] sf_user = sulfurfree(entry.crypt()) else: sf_pass = sulfurfree(crypted_password(username, password, sulfur, calculate, file)) # Calculate the crypted, sulfurfree username based on the arguments... sf_user = sulfurfree(crypted_username(username, password, sulfur, calculate, file)) md5 = _MD5(sf_pass) md5.update(seed) md5.update(message) return _join(sf_user, md5.hexdigest().lower())
def sulfur_for(username, password, calculate=1, file=_SHADOW_FILE): if calculate: text = _join(username, password) crc = _crc16(text) b1 = _saltchars[(crc >> 8) % 64] b2 = _saltchars[(crc & 0xff) % 64] return "%s%s" % (b1, b2) shadow_file = _ShadowFile(file) shadow_file.load() shadow = shadow_file[username] return shadow.crypt()[3:5]