示例#1
0
    def test_scram_sha_256_rfc_example(self):
        # Test SCRAM-SHA-256 against an example in RFC 7677

        username = '******'
        password = '******'
        client_nonce = 'rOprNGfwEbeRWgbNEkqO'
        server_nonce = 'rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0'
        salt = 'W22ZaJ0SNY7soEsUEjb6gQ=='
        channel_binding = 'biws'
        iterations = 4096

        client_first = f'n={username},r={client_nonce}'
        server_first = f'r={server_nonce},s={salt},i={iterations}'
        client_final = f'c={channel_binding},r={server_nonce}'

        AuthMessage = f'{client_first},{server_first},{client_final}'.encode()
        SaltedPassword = scram.get_salted_password(
            scram.saslprep(password).encode('utf-8'), base64.b64decode(salt),
            iterations)
        ClientKey = scram.get_client_key(SaltedPassword)
        ServerKey = scram.get_server_key(SaltedPassword)
        StoredKey = scram.H(ClientKey)
        ClientSignature = scram.HMAC(StoredKey, AuthMessage)
        ClientProof = scram.XOR(ClientKey, ClientSignature)
        ServerProof = scram.HMAC(ServerKey, AuthMessage)

        self.assertEqual(scram.B64(ClientProof),
                         'dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=')

        self.assertEqual(scram.B64(ServerProof),
                         '6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4=')
async def _populate_misc_instance_data(schema, cluster):

    mock_auth_nonce = scram.B64(scram.generate_nonce())

    instance_data = {
        'mock_auth_nonce': mock_auth_nonce,
    }

    data_dir = cluster.get_data_dir()
    fn = os.path.join(data_dir, 'instance_data.pickle')

    with open(fn, 'wb') as f:
        pickle.dump(instance_data, f)

    ver = buildmeta.get_version()
    json_instance_data = {
        'version': {
            'major': ver.major,
            'minor': ver.minor,
            'stage': ver.stage.name.lower(),
            'stage_no': ver.stage_no,
            'local': tuple(ver.local) if ver.local else (),
        }
    }

    fn = os.path.join(data_dir, 'instance_data.json')

    with open(fn, 'wt') as f:
        json.dump(json_instance_data, f)