add time to associated data
This commit is contained in:
parent
4b7d9f363d
commit
fbabcf36d6
@ -2,7 +2,7 @@ import { genKeys, sharedKey } from "./ecdh.js";
|
|||||||
import { keccakAEAD } from "./aead.js";
|
import { keccakAEAD } from "./aead.js";
|
||||||
import { keccakKDF } from "./kdf.js";
|
import { keccakKDF } from "./kdf.js";
|
||||||
import { render_room, render_rooms_wrapper } from "./rooms.js";
|
import { render_room, render_rooms_wrapper } from "./rooms.js";
|
||||||
import { fromHexString, toHexString, generateRandomUint8Array } from "./arrayutils.js";
|
import { fromHexString, toHexString, generateRandomUint8Array, concatUint8Arrays } from "./arrayutils.js";
|
||||||
|
|
||||||
const socket = io();
|
const socket = io();
|
||||||
let secret = null;
|
let secret = null;
|
||||||
@ -44,7 +44,7 @@ socket.on('chat message', (msg, room, tag_received, iv, nonce, pubkey_received)
|
|||||||
render_room(room, pubkey_received);
|
render_room(room, pubkey_received);
|
||||||
messages = document.getElementById(`messages-${room}`);
|
messages = document.getElementById(`messages-${room}`);
|
||||||
}
|
}
|
||||||
const associated_data = fromHexString(Array.from((document.getElementById('pubkey')).classList).find(className => className.startsWith('key-')).replace('key-', ''));
|
const associated_data = concatUint8Arrays(fromHexString(Array.from((document.getElementById('pubkey')).classList).find(className => className.startsWith('key-')).replace('key-', '')), getRoundedUTCTime());
|
||||||
const pubkey = Array.from(messages.classList).find(className => className.startsWith('key-')).replace('key-', '');
|
const pubkey = Array.from(messages.classList).find(className => className.startsWith('key-')).replace('key-', '');
|
||||||
let {plaintext, tag} = decrypt_message(msg, pubkey, fromHexString(iv), fromHexString(nonce), associated_data);
|
let {plaintext, tag} = decrypt_message(msg, pubkey, fromHexString(iv), fromHexString(nonce), associated_data);
|
||||||
if (tag === tag_received && pubkey == pubkey_received) {
|
if (tag === tag_received && pubkey == pubkey_received) {
|
||||||
@ -113,7 +113,7 @@ function encrypt_message(message, user_pubkey) {
|
|||||||
let encoded_msg = (new TextEncoder()).encode(message);
|
let encoded_msg = (new TextEncoder()).encode(message);
|
||||||
let iv = generateRandomUint8Array();
|
let iv = generateRandomUint8Array();
|
||||||
let nonce = generateRandomUint8Array();
|
let nonce = generateRandomUint8Array();
|
||||||
let associated_data = fromHexString(user_pubkey);
|
let associated_data = concatUint8Arrays(fromHexString(user_pubkey), getRoundedUTCTime());
|
||||||
let {cipher, tag} = keccakAEAD.encrypt(encryption_key, encoded_msg, iv, associated_data, nonce);
|
let {cipher, tag} = keccakAEAD.encrypt(encryption_key, encoded_msg, iv, associated_data, nonce);
|
||||||
return {cipher: toHexString(cipher),
|
return {cipher: toHexString(cipher),
|
||||||
tag: toHexString(tag),
|
tag: toHexString(tag),
|
||||||
@ -161,3 +161,21 @@ export async function reconnectSocket() {
|
|||||||
console.log("Socket reconnected.");
|
console.log("Socket reconnected.");
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getRoundedUTCTime() {
|
||||||
|
const roundedTime = Math.round(Date.now() / 60000) * 60000;
|
||||||
|
const date = new Date(roundedTime);
|
||||||
|
|
||||||
|
const year = date.getUTCFullYear();
|
||||||
|
const month = date.getUTCMonth();
|
||||||
|
const day = date.getUTCDate();
|
||||||
|
|
||||||
|
const yearHigh = Math.floor(year / 256);
|
||||||
|
const yearLow = year % 256;
|
||||||
|
|
||||||
|
const hours = date.getUTCHours();
|
||||||
|
const minutes = date.getUTCMinutes();
|
||||||
|
|
||||||
|
return new Uint8Array([yearHigh, yearLow, month, day, hours, minutes]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user