исправь все ошибки пароль не потверждаеться и не применяеться, подключения и отправка проверь весь код  и напиши его целиком
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Децентрализованный P2P Чат</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f2f2f2;
            display: flex;
            flex-direction: column;
            align-items: center;
            margin: 0;
            padding: 20px;
        }

        h1 {
            color: #333;
        }

        .container {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            width: 500px;
            margin-top: 20px;
        }

        .section {
            margin-bottom: 15px;
        }

        label {
            display: block;
            margin-bottom: 5px;
            color: #555;
        }

        input[type="text"], input[type="password"] {
            width: calc(100% - 12px);
            padding: 5px;
            border: 1px solid #ccc;
            border-radius: 4px;
        }

        button {
            padding: 7px 15px;
            border: none;
            border-radius: 4px;
            background-color: #4CAF50;
            color: white;
            cursor: pointer;
            margin-top: 5px;
        }

        button:hover {
            background-color: #45a049;
        }

        #messages {
            width: 100%;
            height: 300px;
            overflow-y: scroll;
            border: 1px solid #ccc;
            padding: 10px;
            background-color: #f9f9f9;
            border-radius: 4px;
        }

        #online-users {
            list-style-type: none;
            padding: 0;
            max-height: 100px;
            overflow-y: auto;
            border: 1px solid #ccc;
            border-radius: 4px;
            background-color: #fafafa;
        }

        #online-users li {
            padding: 5px 10px;
            border-bottom: 1px solid #eee;
            color: #333;
        }

        #online-users li:last-child {
            border-bottom: none;
        }

        .hidden {
            display: none;
        }

        a.file-link {
            display: block;
            margin-top: 5px;
            color: #0066cc;
            text-decoration: none;
        }

        a.file-link:hover {
            text-decoration: underline;
        }
    </style>
</head>
<body>
    <h1>Децентрализованный P2P Чат</h1>
    <div class="container">
        <div class="section">
            <p>Ваш Peer ID: <span id="peer-id">Подключение...</span></p>
        </div>
        <div class="section">
            <label for="password">Пароль для шифрования:</label>
            <input type="password" id="password" placeholder="Введите пароль">
        </div>
        <div class="section password-confirmation hidden">
            <label for="confirm-password">Подтвердите пароль:</label>
            <input type="password" id="confirm-password" placeholder="Подтвердите пароль">
        </div>
        <div class="section">
            <button id="toggle-confirm-password-btn">Подтвердить пароль</button>
        </div>
        <div class="section">
            <label for="remote-id">Peer ID для подключения:</label>
            <input type="text" id="remote-id" placeholder="Введите Peer ID другого пользователя">
            <button id="connect-btn">Подключиться</button>
        </div>
        <div class="section">
            <h3>Онлайн пользователи:</h3>
            <ul id="online-users">
                <!-- Список онлайн пользователей будет здесь -->
            </ul>
        </div>
        <div class="section">
            <div id="messages"></div>
        </div>
        <div class="section">
            <input type="text" id="message-input" placeholder="Введите сообщение" style="width: 80%;">
            <button id="send-btn">Отправить</button>
        </div>
        <div class="section">
            <input type="file" id="file-input">
            <button id="send-file-btn">Отправить файл</button>
        </div>
    </div>

    <!-- Подключение необходимых библиотек через CDN -->
    <script src="https://unpkg.com/peerjs@1.4.7/dist/peerjs.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
    <script src="chat.js">// Инициализация Peer
const peer = new Peer();

// Элементы интерфейса
const peerIdDisplay = document.getElementById('peer-id');
const connectBtn = document.getElementById('connect-btn');
const remoteIdInput = document.getElementById('remote-id');
const messagesArea = document.getElementById('messages');
const sendBtn = document.getElementById('send-btn');
const messageInput = document.getElementById('message-input');
const passwordInput = document.getElementById('password');
const confirmPasswordInput = document.getElementById('confirm-password');
const toggleConfirmPasswordBtn = document.getElementById('toggle-confirm-password-btn');
const onlineUsersList = document.getElementById('online-users');
const fileInput = document.getElementById('file-input');
const sendFileBtn = document.getElementById('send-file-btn');

// Хранение соединений и ключей шифрования
let connections = {};
let encryptionKey = null;

// Отображение вашего Peer ID
peer.on('open', (id) => {
    peerIdDisplay.textContent = id;
    addOnlineUser(id);
});

// Обработка входящих соединений
peer.on('connection', (connection) => {
    if (connections[connection.peer]) {
        connection.close();
        return;
    }
    connections[connection.peer] = connection;
    setupConnection(connection);
    addOnlineUser(connection.peer);
});

// Обработка ошибок
peer.on('error', (err) => {
    console.error(err);
    alert('Произошла ошибка: ' + err);
});

// Переключение отображения подтверждения пароля
toggleConfirmPasswordBtn.addEventListener('click', () => {
    const confirmationSection = document.querySelector('.password-confirmation');
    confirmationSection.classList.toggle('hidden');
    if (!confirmationSection.classList.contains('hidden')) {
        toggleConfirmPasswordBtn.textContent = 'Скрыть подтверждение';
    } else {
        toggleConfirmPasswordBtn.textContent = 'Подтвердить пароль';
        confirmPasswordInput.value = '';
    }
});

// Функция подключения к другому Peer с валидацией пароля
connectBtn.addEventListener('click', () => {
    const remoteId = remoteIdInput.value.trim();
    const password = passwordInput.value;
    const confirmPassword = confirmPasswordInput.value;

    if (!remoteId) {
        alert('Введите Peer ID для подключения.');
        return;
    }

    if (!password) {
        alert('Введите пароль для шифрования.');
        return;
    }

    // Если поле подтверждения пароля активно, проверяем соответствие
    const confirmationSection = document.querySelector('.password-confirmation');
    if (!confirmationSection.classList.contains('hidden')) {
        if (!confirmPassword) {
            alert('Пожалуйста, подтвердите пароль.');
            return;
        }
        if (password !== confirmPassword) {
            alert('Пароли не совпадают. Пожалуйста, попробуйте снова.');
            return;
        }
    }

    // Установка ключа шифрования как WordArray
    encryptionKey = CryptoJS.SHA256(password);

    const conn = peer.connect(remoteId);
    connections[remoteId] = conn;

    conn.on('open', () => {
        setupConnection(conn);
        addOnlineUser(remoteId);
        appendMessage(`Установлено соединение с ${remoteId}.`);
    });

    conn.on('error', (err) => {
        console.error('Соединение ошибка:', err);
        appendMessage(`Ошибка соединения с ${remoteId}: ${err}`);
    });
});

// Функция настройки соединения
function setupConnection(conn) {
    conn.on('data', (data) => {
        try {
            const parsedData = JSON.parse(data);
            if (parsedData.type === 'message') {
                const decryptedMessage = decryptMessage(parsedData.content);
                appendMessage(`Друг: ${decryptedMessage}`);
            } else if (parsedData.type === 'file') {
                handleIncomingFile(parsedData);
            }
        } catch (e) {
            console.error('Ошибка при разборе данных:', e);
            appendMessage(`Друг (ошибка дешифровки): ${data}`);
        }
    });

    conn.on('close', () => {
        appendMessage(`Соединение с ${conn.peer} закрыто.`);
        removeOnlineUser(conn.peer);
        delete connections[conn.peer];
    });

    // Отправка уведомления о подключении
    appendMessage(`Соединение с ${conn.peer} установлено.`);
}

// Функция дешифровки сообщения
function decryptMessage(encrypted) {
    try {
        const bytes = CryptoJS.AES.decrypt(encrypted, encryptionKey);
        const decryptedMessage = bytes.toString(CryptoJS.enc.Utf8);
        return decryptedMessage || '[Не удалось дешифровать сообщение]';
    } catch (e) {
        console.error('Ошибка дешифровки сообщения:', e);
        return '[Не удалось дешифровать сообщение]';
    }
}

// Функция шифрования сообщения
function encryptMessage(message) {
    return CryptoJS.AES.encrypt(message, encryptionKey).toString();
}

// Функция добавления сообщения в область сообщений
function appendMessage(message) {
    const messageDiv = document.createElement('div');
    messageDiv.innerHTML = `${message}<br>`;
    messagesArea.appendChild(messageDiv);
    messagesArea.scrollTop = messagesArea.scrollHeight;
}

// Обработка отправки текстовых сообщений
sendBtn.addEventListener('click', () => {
    const message = messageInput.value.trim();
    if (!message) return;
    if (!encryptionKey) {
        alert('Установите пароль для шифрования перед отправкой сообщений.');
        return;
    }

    const encryptedMessage = encryptMessage(message);
    const data = JSON.stringify({ type: 'message', content: encryptedMessage });

    Object.values(connections).forEach((conn) => {
        if (conn.open) {
            conn.send(data);
            appendMessage(`Вы: ${message}`);
        }
    });

    messageInput.value = '';
});

// Функции для обновления списка онлайн-пользователей
function addOnlineUser(userId) {
    // Проверяем, есть ли уже пользователь в списке
    if (![...onlineUsersList.children].some(li => li.textContent === userId)) {
        const li = document.createElement('li');
        li.textContent = userId;
        onlineUsersList.appendChild(li);
        appendMessage(`${userId} подключился.`);
    }
}

function removeOnlineUser(userId) {
    [...onlineUsersList.children].forEach(li => {
        if (li.textContent === userId) {
            onlineUsersList.removeChild(li);
            appendMessage(`${userId} отключился.`);
        }
    });
}

// Обработка отправки файлов
sendFileBtn.addEventListener('click', () => {
    const file = fileInput.files[0];
    if (!file) {
        alert('Пожалуйста, выберите файл для отправки.');
        return;
    }
    if (!encryptionKey) {
        alert('Установите пароль для шифрования перед отправкой файлов.');
        return;
    }

    const reader = new FileReader();
    reader.onload = () => {
        const arrayBuffer = reader.result;
        const wordArray = CryptoJS.lib.WordArray.create(arrayBuffer);
        const encryptedFile = CryptoJS.AES.encrypt(wordArray, encryptionKey).toString();

        const data = JSON.stringify({
            type: 'file',
            content: encryptedFile,
            fileName: file.name,
            fileType: file.type
        });

        Object.values(connections).forEach((conn) => {
            if (conn.open) {
                conn.send(data);
                appendMessage(`Вы отправили файл: ${file.name}`);
            }
        });
    };
    reader.readAsArrayBuffer(file);
});

// Функция обработки входящих файлов
function handleIncomingFile(data) {
    const { content, fileName, fileType } = data;
    try {
        const decrypted = CryptoJS.AES.decrypt(content, encryptionKey);
        const decryptedBase64 = decrypted.toString(CryptoJS.enc.Base64);
        const byteCharacters = atob(decryptedBase64);
        const byteNumbers = new Array(byteCharacters.length);

        for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }

        const byteArray = new Uint8Array(byteNumbers);
        const blob = new Blob([byteArray], { type: fileType });

        // Создаем ссылку для скачивания файла
        const link = document.createElement('a');
        const url = URL.createObjectURL(blob);
        link.href = url;
        link.download = fileName;
        link.textContent = `Скачать файл: ${fileName}`;
        link.className = 'file-link';
        link.target = '_blank';

        // Добавляем ссылку в область сообщений
        const fileMessage = document.createElement('div');
        fileMessage.innerHTML = `Друг отправил файл: ${fileName}<br>`;
        fileMessage.appendChild(link);
        messagesArea.appendChild(fileMessage);
        messagesArea.scrollTop = messagesArea.scrollHeight;

    } catch (e) {
        console.error('Ошибка при получении файла:', e);
        appendMessage(`Ошибка при получении файла: ${fileName}`);
    }
}</script>
</body>
</html>