Esempio n. 1
0
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())
Esempio n. 2
0
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())
Esempio n. 3
0
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]
Esempio n. 4
0
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]