diff --git a/www/common/common-hash.js b/www/common/common-hash.js index e089852cc..0f5341d9b 100644 --- a/www/common/common-hash.js +++ b/www/common/common-hash.js @@ -76,9 +76,10 @@ define([ return s.replace(/\/+/g, '/'); }; - Hash.createChannelId = function () { - var id = uint8ArrayToHex(Crypto.Nacl.randomBytes(16)); - if (id.length !== 32 || /[^a-f0-9]/.test(id)) { + Hash.ephemeralChannelLength = 34; + Hash.createChannelId = function (ephemeral) { + var id = uint8ArrayToHex(Crypto.Nacl.randomBytes(ephemeral? 17: 16)); + if ([32, 34].indexOf(id.length) === -1 || /[^a-f0-9]/.test(id)) { throw new Error('channel ids must consist of 32 hex characters'); } return id; diff --git a/www/common/sframe-common.js b/www/common/sframe-common.js index 468d724dd..bbbbe266b 100644 --- a/www/common/sframe-common.js +++ b/www/common/sframe-common.js @@ -197,7 +197,10 @@ define([ }; funcs.openCursorChannel = function (saveChanges) { var md = JSON.parse(JSON.stringify(ctx.metadataMgr.getMetadata())); - var channel = md.cursor || Hash.createChannelId(); + var channel = md.cursor; + if (typeof(channel) !== 'string' || channel.length !== Hash.ephemeralChannelLength) { + channel = Hash.createChannelId(true); // true indicates that it's an ephemeral channel + } if (!md.cursor) { md.cursor = channel; ctx.metadataMgr.updateMetadata(md);