send ephermal pubkey not privkey, file_proxy JSON encode body

pull/734/head
Ryan Tharp 5 years ago
parent 6ab16d7e56
commit ce2e85cd38

@ -301,8 +301,14 @@ class LokiAppDotNetServerAPI {
// make temporary key for this request/response
const ephemeralKey = libsignal.Curve.generateKeyPair();
function buf2hex(buffer) { // buffer is an ArrayBuffer
return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}
// some randomness
const iv = libsignal.crypto.getRandomBytes(IV_LENGTH);
// console.log('iv ', buf2hex(iv))
// console.log('epk', buf2hex(ephemeralKey.pubKey))
// mix server pub key with our priv key
const symKey = libsignal.Curve.calculateAgreement(
@ -339,19 +345,30 @@ class LokiAppDotNetServerAPI {
const cipherText64 = dcodeIO.ByteBuffer.wrap(ivAndCiphertext).toString(
'base64'
);
//console.log('ephemeralKey.privKey', ephemeralKey.privKey.toString('hex'))
const ephemeralPubKey64 = dcodeIO.ByteBuffer.wrap(
ephemeralKey.privKey
ephemeralKey.pubKey
).toString('base64');
// console.log('ephemeralKey', ephemeralPubKey64);
// console.log('cipherText64', cipherText64);
const finalRequestHeader = {
'X-Loki-File-Server-Ephemeral-Key': ephemeralPubKey64,
};
const firstHopOptions = {
method: 'POST',
cipherText64,
// not sure why I can't use anything but json...
// text/plain would be preferred...
body: JSON.stringify({ cipherText64 }),
headers: {
'Content-Type': 'application/json',
'X-Loki-File-Server-Target': `/loki/v1/secure_rpc`,
'X-Loki-File-Server-Verb': 'POST',
'X-Loki-File-Server-Headers': JSON.stringify({
'X-Loki-File-Server-Ephemeral-Key': ephemeralPubKey64,
}),
'X-Loki-File-Server-Headers': JSON.stringify(finalRequestHeader),
},
};
@ -404,11 +421,12 @@ class LokiAppDotNetServerAPI {
endpoint,
method
);
log.info('Got proxy response', result, 'for', method || 'GET', endpoint);
} else {
result = await nodeFetch(url, fetchOptions || undefined);
}
} catch (e) {
log.info(`serverRequest nodeFetch/_sendToProxy error: ${e}`);
log.info('serverRequest nodeFetch/_sendToProxy error:', JSON.stringify(e));
return {
err: e,
};

Loading…
Cancel
Save