You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
| /*
 | |
|  * vim: ts=4:sw=4:expandtab
 | |
|  */
 | |
| (function () {
 | |
|     'use strict';
 | |
|     window.Whisper = window.Whisper || {};
 | |
| 
 | |
|     Whisper.KeyVerificationView = Whisper.View.extend({
 | |
|         className: 'key-verification',
 | |
|         templateName: 'key_verification',
 | |
|         initialize: function(options) {
 | |
|             this.our_number = textsecure.storage.user.getNumber();
 | |
|             if (options.newKey) {
 | |
|               this.their_key = options.newKey;
 | |
|             }
 | |
|             Promise.all([
 | |
|                 this.loadTheirKey(),
 | |
|                 this.loadOurKey(),
 | |
|             ]).then(this.generateSecurityNumber.bind(this))
 | |
|               .then(this.render.bind(this));
 | |
|               //.then(this.makeQRCode.bind(this));
 | |
|         },
 | |
|         makeQRCode: function() {
 | |
|             new QRCode(this.$('.qr')[0]).makeCode(
 | |
|                 dcodeIO.ByteBuffer.wrap(this.our_key).toString('base64')
 | |
|             );
 | |
|         },
 | |
|         loadTheirKey: function() {
 | |
|             if (this.their_key) {
 | |
|                 return Promise.resolve(this.their_key);
 | |
|             } else {
 | |
|                 return textsecure.storage.protocol.loadIdentityKey(
 | |
|                     this.model.id
 | |
|                 ).then(function(their_key) {
 | |
|                     this.their_key = their_key;
 | |
|                 }.bind(this));
 | |
|             }
 | |
|         },
 | |
|         loadOurKey: function() {
 | |
|             if (this.our_key) {
 | |
|                 return Promise.resolve(this.our_key);
 | |
|             } else {
 | |
|                 return textsecure.storage.protocol.loadIdentityKey(
 | |
|                     this.our_number
 | |
|                 ).then(function(our_key) {
 | |
|                     this.our_key = our_key;
 | |
|                 }.bind(this));
 | |
|             }
 | |
|         },
 | |
|         generateSecurityNumber: function() {
 | |
|             return new libsignal.FingerprintGenerator(5200).createFor(
 | |
|                 this.our_number, this.our_key, this.model.id, this.their_key
 | |
|             ).then(function(securityNumber) {
 | |
|                 this.securityNumber = securityNumber;
 | |
|             }.bind(this));
 | |
|         },
 | |
|         render_attributes: function() {
 | |
|             var s = this.securityNumber;
 | |
|             var chunks = [];
 | |
|             for (var i = 0; i < s.length; i += 5) {
 | |
|                 chunks.push(s.substring(i, i+5));
 | |
|             }
 | |
|             var yourSafetyNumberWith = i18n(
 | |
|                 'yourSafetyNumberWith', this.model.getTitle()
 | |
|             );
 | |
|             return {
 | |
|                 learnMore            : i18n('learnMore'),
 | |
|                 their_key_unknown    : i18n('theirIdentityUnknown'),
 | |
|                 yourSafetyNumberWith : i18n('yourSafetyNumberWith', this.model.getTitle()),
 | |
|                 has_their_key        : this.their_key !== undefined,
 | |
|                 chunks               : chunks,
 | |
|             };
 | |
|         }
 | |
|     });
 | |
|     Whisper.KeyVerificationPanelView = Whisper.KeyVerificationView.extend({
 | |
|         className: 'key-verification panel',
 | |
|         templateName: 'key_verification_panel',
 | |
|     });
 | |
| })();
 |