add handling of old ONS names too
This commit is contained in:
parent
60f40c44c6
commit
0aefd1b2bf
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue