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

Loading…
Cancel
Save