OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli / deobfuscated / lib / invitations / index.js

252 lines · javascript ref:
const Autobase=require('autobase'),Hypercore=require('hypercore'),DeterministicSealedBox=require('deterministic-sealed-box'),IdentityKey=require('keet-identity-key'),crypto=require('hypercore-crypto'),{
  contract:{
    hyperschema:{
      encode:encodeContractStruct,decode:decodeContractStruct},hyperdispatch:{
      encode:encodeOperation}
  }
}
=require('../../spec'),{
  KeetContractError}
=require('./../contract/errors'),KeetRegistry=require('@holepunchto/keet-registry'),[NS_SIGNING_KEY_PAIR,NS_REQUEST,NS_RESPONSE,NS_MAILBOX,NS_HASH_KEY,NS_IDENTITY_INVITATION,NS_ROOM_INVITATION]=crypto.namespace("@holepunchto/keet-core/invitations",--0x46a3);
function verifyAttestation(_0x52efab,_0x551580,_0x4eea43){
  _0x1c94be={
    _0x56a8cd:0xab},_0x47deef={
    _0x3e7c9c:0x182,_0x2c484c:0x141,_0x52fa61:0x34}
  ;
  let _0x599714=null;
  try{
    _0x599714=IdentityKey.verify(_0x52efab.proof,_0x551580,{'expectedIdentity':_0x52efab.memberKey});
  }catch{
  throw KeetContractError.ABORT();
}
if(!_0x599714)throw KeetContractError.ABORT();
return _0x599714.receipt;
}
function createInvitation(_0x286fa8,_0x556cef={}){
  _0x1f34ae={
    _0xe7a0d7:0x4e,_0x35b9b7:0x18b},_0x6f03f8={
    _0x3de3a6:0xe6,_0x2f24d5:0x64,_0x2bb3cf:0x207},{
    canModerate:canModerate=![],canAdmin:canAdmin=![],expiration:expiration=-0x3b5e}
  =_0x556cef,_0x5683c4=crypto.randomBytes(0x20);
  const _0x3eb78c=createSigningKeyPair(_0x5683c4),_0x2e3286=_0x3eb78c.publicKey,_0x238f58=encodeContractStruct("@keet/room-keys",_0x286fa8);
  const _0xd6ce22=crypto.sign(crypto.hash([NS_RESPONSE,_0x238f58]),_0x3eb78c.secretKey),_0x3c7d84={
    'canModerate':canModerate,'canAdmin':canAdmin,'expiration':expiration},_0x4dee50={
    'id':_0x2e3286,'metadata':_0x3c7d84,'anchor':null,'response':{
      'id':_0x2e3286,'data':_0x238f58,'signature':_0xd6ce22}
  }
;
return{
  'invitation':_0x4dee50,'seed':_0x5683c4}
;
}
function createBlindContactRequest(_0x1d7090,_0x86c6e1,_0x1d84dc){
  _0xa4f88e={
    _0x4e2408:0x58,_0x571f68:0x145,_0x4ec85f:0x3a9},_0x1015eb={
    _0x10c0be:0x9b,_0x233935:0x4d3},_0xede745=encodeContractStruct("@keet-private-id/contact-request-body",_0x1d84dc),_0x2fef1a=IdentityKey.attestData(_0xede745,_0x86c6e1.deviceKeyPair,_0x86c6e1.deviceProof),_0x54d9c5={
    'memberKey':_0x86c6e1.publicKey,'proof':_0x2fef1a}
  ;
  const _0x3cba34=encodeContractStruct("@keet-private-id/contact-request",{'body':_0x1d84dc,'attestation':_0x54d9c5});
  return crypto.encrypt(_0x3cba34,_0x1d7090);
}
function createContactRequestOperation(_0x2d346a,_0x3a4047,_0x3e0d05){
  _0x174dd1={
    _0x11f291:0x149,_0x5da89e:0x41},_0x42a345={
    _0x46e099:0x138,_0x173b17:0xb4,_0x4f5044:0x27},_0x17d269=createBlindContactRequest(_0x2d346a,_0x3a4047,_0x3e0d05);
  const _0x5ae967=encodeOperation("@keet-private-id/add-contact-request",{'header':{'timestamp':Date.now()},'blindRequest':_0x17d269});
  return Autobase.encodeValue(_0x5ae967,{'optimistic':!![],'encrypted':!![]});
}
function createJoinOperation(_0x25e431,{heads:_0x12d907}={}){
  _0x2c9e79={
    _0x4719d6:0x14e,_0x389a07:0xe9,_0x1b5165:0xe1},_0x7df6ce={
    _0x5a8b4d:0x29f,_0x3d50cc:0xc9},_0x591a68=encodeOperation("@keet/add-device",{'header':{'timestamp':Date.now()},'blindRequest':_0x25e431});
  return Autobase.encodeValue(_0x591a68,{'optimistic':!![],'encrypted':!![],'heads':_0x12d907});
}
function createInvitationJoinOperation(_0x439cb6,_0x607ffd,_0x5ce937,_0x52ecc5,_0x33706c,_0x57d965){
  const {
    blindRequest:_0x47e7a1}
  =createInvitationJoinRequest(_0x439cb6,_0x607ffd,_0x5ce937,_0x52ecc5,_0x33706c,_0x57d965);
  return createJoinOperation(_0x47e7a1,_0x57d965);
}
function createMemberProofJoinOperation(_0x304fcd,_0x593da4,_0x5a2471){
  const {
    blindRequest:_0x54e0ec}
  =createMemberProofJoinRequest(_0x304fcd,_0x593da4);
  return createJoinOperation(_0x54e0ec,_0x5a2471);
}
function createMemberProofJoinRequest(_0x1475db,{device:_0x9f4116,member:_0x2cc394}){
  _0x244637={
    _0x320c86:0x1d3,_0x57d3db:0xbb,_0x5d805a:0xbb},_0x4f2766={
    _0x972b17:0x3f,_0x57df39:0x77},_0xd2718f=encodeContractStruct("@keet/device-request",{'withMemberProof':{'device':_0x9f4116,'member':_0x2cc394}}),_0x237380=crypto.encrypt(_0xd2718f,_0x1475db);
  return{
    'blindRequest':_0x237380}
  ;
}
function createInvitationJoinRequest(_0x3a7410,_0x4a6fe8,_0x788201,_0xea08f6,{device:_0x525019,member:_0x3d7fd4},_0x56f359){
  _0x3f429c={
    _0xc9e9ca:0xa3},_0x22b29c={
    _0xdc19fa:0x64,_0x2cde9f:0x126,_0x4f17ad:0x176}
  ;
  const _0x55bc05=createSigningKeyPair(_0xea08f6),_0x111a79=_0x55bc05.publicKey,_0x171034={
    'deviceKey':_0x3a7410,'identity':_0x56f359?..identity,'keyPair':_0x788201,'device':_0x525019,'member':_0x3d7fd4},_0x34e8b5=encodeContractStruct("@keet/device-request-with-invitation",_0x171034),_0x10c537=crypto.sign(crypto.hash([NS_REQUEST,_0x34e8b5]),_0x55bc05.secretKey),_0x16af20=encodeContractStruct("@keet/device-request",{'withInvitation':{'id':_0x111a79,'request':_0x171034,'signature':_0x10c537}});
  const _0x1efc55=crypto.encrypt(_0x16af20,_0x4a6fe8);
  return{
    'blindRequest':_0x1efc55}
  ;
}
function createDeviceResponse(_0x3331b7,_0x4329cf,_0x2d9fff){
  _0x21746a={
    _0x3ed5d1:0xf6,_0xd2f569:0xcb,_0x2d051f:0xc},_0x45f247={
    _0x23bd25:0x136,_0x254104:0x20}
  ;
  const _0x52af42=encodeContractStruct("@keet/device-response",{'signedKeys':_0x2d9fff.response});
  const _0x5e455e=crypto.hash([NS_HASH_KEY,_0x4329cf]),_0x5be1f4=DeterministicSealedBox.encrypt(_0x52af42,_0x3331b7,_0x5e455e);
  return{
    'blindResponse':_0x5be1f4}
  ;
}
function createUsernameReservationRequest(_0x2e5aea,{publicKey:_0x48dc54,deviceKeyPair:_0x44dbf1,deviceProof:_0x550c08}){
  _0x807f75={
    _0x440e55:0x33},_0x325bff={
    _0x162a43:0x1cd,_0x1a51d0:0x167,_0x1a8681:0x48},_0x58a067=KeetRegistry.encodeReservation({'username':_0x2e5aea});
  return{
    'username':_0x2e5aea,'attestation':{
      'memberKey':_0x48dc54,'proof':IdentityKey.attestData(_0x58a067,_0x44dbf1,_0x550c08)}
  }
;
}
function verifyInvitationDeviceRequest({id:_0x74bb15,request:_0x434f97,signature:_0x404af5}){
  _0x2bc2ab={
    _0x8c5e64:0x4d,_0x11988a:0x75},_0x25ebef={
    _0x16dd3e:0x179,_0x364cd8:0x536},_0x16f689=encodeContractStruct("@keet/device-request-with-invitation",_0x434f97),_0x1c826e=crypto.verify(crypto.hash([NS_REQUEST,_0x16f689]),_0x404af5,_0x74bb15);
  if(!_0x1c826e)return null;
  return{
    'id':_0x74bb15,'request':_0x434f97}
  ;
}
function decryptDeviceRequest(_0x58248f,_0x124936){
  _0x447b00={
    _0x3e123a:0x147},_0x1096fd={
    _0x4d4120:0xf6,_0x108ead:0x123,_0x48e8ca:0x17d}
  ;
  const _0x5232da=DeterministicSealedBox.decrypt(_0x124936,_0x58248f);
  if(!_0x5232da)return null;
  const _0x24d59f=decodeContractStruct("@keet/device-request",_0x5232da);
  return _0x24d59f;
}
function decryptContactRequest(_0x41df78,_0x35fc8d){
  _0x103dcf={
    _0x2de45b:0xca,_0x224023:0x47f},_0x138152={
    _0x373e52:0x7f,_0x1a6d45:0x2f8,_0x3a16e9:0x10a}
  ;
  const _0x276bca=crypto.decrypt(_0x35fc8d,_0x41df78);
  if(!_0x276bca)return null;
  const _0xb98ac=decodeContractStruct("@keet-private-id/contact-request",_0x276bca);
  return _0xb98ac;
}
function verifyDeviceResponse(_0x79d0e2,_0x24d52c){
  _0x17ec2a={
    _0x255082:0x6,_0x135973:0xbe},_0x5ce3ff={
    _0x3e20df:0x81,_0x1fbb09:0x31,_0x12948a:0x288},_0x2fc72e=crypto.decrypt(_0x24d52c,_0x79d0e2);
  if(!_0x2fc72e)return null;
  const _0x513a20=decodeContractStruct("@keet/device-response",_0x2fc72e),{
    signedKeys:{
      id:_0x1c48d2,data:_0xe8cb2e,signature:_0x433b2f},identity:_0x3fdf0b}
  =_0x513a20,_0x436187=crypto.verify(crypto.hash([NS_RESPONSE,_0xe8cb2e]),_0x433b2f,_0x1c48d2);
  if(!_0x436187)return null;
  const _0x1cd2f8=decodeContractStruct("@keet/room-keys",_0xe8cb2e),_0x23ba47={
    'roomKeys':_0x1cd2f8,'identity':_0x3fdf0b}
  ;
  return{
    'id':_0x1c48d2,'response':_0x23ba47}
  ;
}
function verifyIdentityProofs(_0x5a5ebe,_0xf1a1f){
  _0x464105={
    _0x120e5b:0x10f,_0x4306de:0x43f,_0x40d11c:0x19e},_0xfcb3c8={
    _0x5c92c1:0x65,_0x4da9d7:0x34d},_0x1768f8=_0xf1a1f?..deviceProof,_0xd1bfd0=_0xf1a1f?..privateProfileIdentity;
  const _0x4b04fc=_0x5a5ebe.writerKey,_0x51312b=_0x5a5ebe.publicKey,_0x2033fc=_0x5a5ebe.devicePublicKey;
  if(!_0x1768f8||!_0xd1bfd0)return null;
  if(!_0xd1bfd0.memberKey||!_0xd1bfd0.proof)return null;
  const _0x585cc8=IdentityKey.verify(_0x1768f8,null,{'expectedIdentity':_0x51312b,'expectedDevice':_0x2033fc}),_0x29d96d=IdentityKey.verify(_0xd1bfd0.proof,_0x4b04fc,{'expectedIdentity':_0x51312b});
  return _0x585cc8&&_0x29d96d;
}
function createMailboxKeyPair(){
  return crypto.encryptionKeyPair();
}
function createDiscoveryKeyPair(){
  _0x4c1d2b={
    _0x7af84b:0x146,_0x322a32:0x1dd}
  ;
  return crypto.keyPair();
}
function createSigningKeyPair(_0x3a84f7){
  _0x3906a4={
    _0x1b7e81:0x20,_0x42d9ec:0x478,_0x3d1840:0x1a3}
  ;
  return crypto.keyPair(crypto.hash([NS_SIGNING_KEY_PAIR,_0x3a84f7]));
}
function getInvitationId(_0x1e0c98){
  const _0x342864=createSigningKeyPair(_0x1e0c98);
  return _0x342864.publicKey;
}
function getWriterKey(_0x3f671d){
  return Hypercore.key({'version':0x2,'signers':[{'publicKey':_0x3f671d}]});
}
function getWakeup(_0x1c7227){
  _0x688451={
    _0x531763:0x98}
  ;
  return{
    'key':_0x1c7227,'discoveryKey':crypto.discoveryKey(_0x1c7227)}
  ;
}
function generateMailboxKeyPair(_0x47507b,_0x1cc0b0){
  _0x46a49a={
    _0x523117:0x106}
  ;
  return crypto.encryptionKeyPair(crypto.hash([NS_MAILBOX,_0x47507b,_0x1cc0b0]));
}
function generateDiscoveryKeyPair(_0x7c08c0){
  return crypto.keyPair(_0x7c08c0);
}
function generateWakeupTopic(_0x259136){
  _0x40dc70={
    _0x2dec04:0x447}
  ;
  return crypto.discoveryKey(_0x259136);
}
function generateSwarmTopic(_0x253305){
  _0x5bbcdf={
    _0x27ec44:0x3f,_0x1e3c1a:0x278,_0x435697:0xa3}
  ;
  return crypto.discoveryKey(_0x253305);
}
function generateRoomCapabilities(_0x519be6,_0x3d3af2){
  _0x14637e={
    _0x4276c4:0x109,_0x28556d:0x29c},_0x21f1ad={
    _0x3d5979:0xd9,_0x155708:0x6c},_0xcff211=generateMailboxKeyPair(_0x519be6,_0x3d3af2);
  const _0x56d919=generateDiscoveryKeyPair(_0xcff211.publicKey),_0x599895=generateWakeupTopic(_0xcff211.publicKey),_0x1edc3d=generateSwarmTopic(_0x56d919.publicKey);
  return{
    'mailboxKeyPair':_0xcff211,'discoveryKeyPair':_0x56d919,'swarmTopic':_0x1edc3d,'wakeupTopic':_0x599895}
  ;
}
function generatePairingCapabilities(_0x75763a){
  _0x25e673={
    _0x5e3282:0x7a},_0x298419=generateDiscoveryKeyPair(_0x75763a),_0x2e3b2b=generateWakeupTopic(_0x75763a),_0x2aa29b=generateSwarmTopic(_0x298419.publicKey);
  return{
    'discoveryKeyPair':_0x298419,'swarmTopic':_0x2aa29b,'wakeupTopic':_0x2e3b2b}
  ;
}
function generateIdentityPairingName(_0x5ab34e){
  return crypto.hash([NS_IDENTITY_INVITATION,_0x5ab34e]);
}
function generateRoomPairingName(_0x284785){
  _0x52f75f={
    _0x340270:0x1d6,_0x2cbdfb:0xb4,_0x324ad5:0xbe}
  ;
  return crypto.hash([NS_ROOM_INVITATION,_0x284785]);
}
module.exports={
  'generateIdentityPairingName':generateIdentityPairingName,'generateRoomPairingName':generateRoomPairingName,'generateSwarmTopic':generateSwarmTopic,'generateWakeupTopic':generateWakeupTopic,'generateMailboxKeyPair':generateMailboxKeyPair,'generateDiscoveryKeyPair':generateDiscoveryKeyPair,'generateRoomCapabilities':generateRoomCapabilities,'generatePairingCapabilities':generatePairingCapabilities,'getWakeup':getWakeup,'getWriterKey':getWriterKey,'getInvitationId':getInvitationId,'createInvitation':createInvitation,'createDeviceResponse':createDeviceResponse,'decryptDeviceRequest':decryptDeviceRequest,'decryptContactRequest':decryptContactRequest,'verifyAttestation':verifyAttestation,'verifyDeviceResponse':verifyDeviceResponse,'verifyIdentityProofs':verifyIdentityProofs,'verifyInvitationDeviceRequest':verifyInvitationDeviceRequest,'createMailboxKeyPair':createMailboxKeyPair,'createDiscoveryKeyPair':createDiscoveryKeyPair,'createInvitationJoinRequest':createInvitationJoinRequest,'createInvitationJoinOperation':createInvitationJoinOperation,'createMemberProofJoinRequest':createMemberProofJoinRequest,'createMemberProofJoinOperation':createMemberProofJoinOperation,'createBlindContactRequest':createBlindContactRequest,'createContactRequestOperation':createContactRequestOperation,'createUsernameReservationRequest':createUsernameReservationRequest}
;