add handling of old ONS names too

This commit is contained in:
Audric Ackermann 2021-06-02 13:59:48 +10:00
parent 60f40c44c6
commit 0aefd1b2bf
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4
1 changed files with 34 additions and 4 deletions

View File

@ -282,6 +282,7 @@ export async function getSessionIDForOnsName(onsNameCase: string) {
throw new Error('ONSresolve:Failed to resolve ONS');
}
let parsedBody;
try {
parsedBody = JSON.parse(result.body);
} catch (e) {
@ -297,8 +298,38 @@ export async function getSessionIDForOnsName(onsNameCase: string) {
const isArgon2Based = !Boolean(intermediate?.nonce);
const ciphertext = fromHexToArray(hexEncodedCipherText);
let sessionIDAsData: Uint8Array;
let nonce: Uint8Array;
let key: Uint8Array;
if (isArgon2Based) {
return '';
// Handle old Argon2-based encryption used before HF16
const salt = new Uint8Array(sodium.crypto_pwhash_SALTBYTES);
nonce = new Uint8Array(sodium.crypto_secretbox_NONCEBYTES);
try {
const keyHex = sodium.crypto_pwhash(
sodium.crypto_secretbox_KEYBYTES,
onsNameLowerCase,
salt,
sodium.crypto_pwhash_OPSLIMIT_MODERATE,
sodium.crypto_pwhash_MEMLIMIT_MODERATE,
sodium.crypto_pwhash_ALG_ARGON2ID13,
'hex'
);
if (!keyHex) {
throw new Error('ONSresolve: key invalid argon2');
}
key = fromHexToArray(keyHex);
} catch (e) {
throw new Error('ONSresolve: Hashing failed');
}
sessionIDAsData = sodium.crypto_secretbox_open_easy(ciphertext, nonce, key);
if (!sessionIDAsData) {
throw new Error('ONSresolve: Decryption failed');
}
return toHex(sessionIDAsData);
}
// not argon2Based
@ -306,9 +337,8 @@ export async function getSessionIDForOnsName(onsNameCase: string) {
if (!hexEncodedNonce) {
throw new Error('ONSresolve: No hexEncodedNonce');
}
const nonce = fromHexToArray(hexEncodedNonce);
nonce = fromHexToArray(hexEncodedNonce);
let key;
try {
key = sodium.crypto_generichash(sodium.crypto_generichash_BYTES, nameAsData, nameHash);
if (!key) {
@ -319,7 +349,7 @@ export async function getSessionIDForOnsName(onsNameCase: string) {
throw new Error('ONSresolve: Hashing failed');
}
const sessionIDAsData = sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(
sessionIDAsData = sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(
null,
ciphertext,
null,