| OLD | NEW | 
|---|
| 1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public | 
| 2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 
| 4 | 4 | 
| 5 import sys | 5 import errno | 
|  | 6 import io | 
|  | 7 import json | 
| 6 import os | 8 import os | 
| 7 import re | 9 import re | 
| 8 import json | 10 from StringIO import StringIO | 
| 9 import struct | 11 import struct | 
| 10 import io | 12 import sys | 
| 11 from StringIO import StringIO |  | 
| 12 | 13 | 
| 13 import packager | 14 import packager | 
| 14 from packager import readMetadata, getMetadataPath, getDefaultFileName, getBuild
     Version, getTemplate, Files | 15 from packager import readMetadata, getMetadataPath, getDefaultFileName, getBuild
     Version, getTemplate, Files | 
| 15 | 16 | 
| 16 defaultLocale = 'en_US' | 17 defaultLocale = 'en_US' | 
| 17 | 18 | 
| 18 | 19 | 
| 19 def getIgnoredFiles(params): | 20 def getIgnoredFiles(params): | 
| 20     return {'store.description'} | 21     return {'store.description'} | 
| 21 | 22 | 
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 288         data = json.loads(files[filename]) | 289         data = json.loads(files[filename]) | 
| 289         for name, info in defaults.iteritems(): | 290         for name, info in defaults.iteritems(): | 
| 290             data.setdefault(name, info) | 291             data.setdefault(name, info) | 
| 291         for name, limit in limits.iteritems(): | 292         for name, limit in limits.iteritems(): | 
| 292             if name in data: | 293             if name in data: | 
| 293                 data[name]['message'] = truncate(data[name]['message'], limit) | 294                 data[name]['message'] = truncate(data[name]['message'], limit) | 
| 294         files[filename] = toJson(data) | 295         files[filename] = toJson(data) | 
| 295 | 296 | 
| 296 | 297 | 
| 297 def signBinary(zipdata, keyFile): | 298 def signBinary(zipdata, keyFile): | 
| 298     import M2Crypto | 299     from Crypto.Hash import SHA | 
| 299     if not os.path.exists(keyFile): | 300     from Crypto.PublicKey import RSA | 
| 300         M2Crypto.RSA.gen_key(1024, 65537, callback=lambda x: None).save_key(keyF
     ile, cipher=None) | 301     from Crypto.Signature import PKCS1_v1_5 | 
| 301     key = M2Crypto.EVP.load_key(keyFile) | 302 | 
| 302     key.sign_init() | 303     try: | 
| 303     key.sign_update(zipdata) | 304         with open(keyFile, 'rb') as file: | 
| 304     return key.final() | 305             key = RSA.importKey(file.read()) | 
|  | 306     except IOError as e: | 
|  | 307         if e.errno != errno.ENOENT: | 
|  | 308             raise | 
|  | 309         key = RSA.generate(2048) | 
|  | 310         with open(keyFile, 'wb') as file: | 
|  | 311             file.write(key.exportKey('PEM')) | 
|  | 312 | 
|  | 313     return PKCS1_v1_5.new(key).sign(SHA.new(zipdata)) | 
| 305 | 314 | 
| 306 | 315 | 
| 307 def getPublicKey(keyFile): | 316 def getPublicKey(keyFile): | 
| 308     import M2Crypto | 317     from Crypto.PublicKey import RSA | 
| 309     return M2Crypto.EVP.load_key(keyFile).as_der() | 318     with open(keyFile, 'rb') as file: | 
|  | 319         return RSA.importKey(file.read()).publickey().exportKey('DER') | 
| 310 | 320 | 
| 311 | 321 | 
| 312 def writePackage(outputFile, pubkey, signature, zipdata): | 322 def writePackage(outputFile, pubkey, signature, zipdata): | 
| 313     if isinstance(outputFile, basestring): | 323     if isinstance(outputFile, basestring): | 
| 314         file = open(outputFile, 'wb') | 324         file = open(outputFile, 'wb') | 
| 315     else: | 325     else: | 
| 316         file = outputFile | 326         file = outputFile | 
| 317     if pubkey != None and signature != None: | 327     if pubkey != None and signature != None: | 
| 318         file.write(struct.pack('<4sIII', 'Cr24', 2, len(pubkey), len(signature))
     ) | 328         file.write(struct.pack('<4sIII', 'Cr24', 2, len(pubkey), len(signature))
     ) | 
| 319         file.write(pubkey) | 329         file.write(pubkey) | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 375         files['qunit/index.html'] = createScriptPage(params, 'testIndex.html.tmp
     l', | 385         files['qunit/index.html'] = createScriptPage(params, 'testIndex.html.tmp
     l', | 
| 376                                                      ('general', 'testScripts')) | 386                                                      ('general', 'testScripts')) | 
| 377 | 387 | 
| 378     zipdata = files.zipToString() | 388     zipdata = files.zipToString() | 
| 379     signature = None | 389     signature = None | 
| 380     pubkey = None | 390     pubkey = None | 
| 381     if keyFile != None: | 391     if keyFile != None: | 
| 382         signature = signBinary(zipdata, keyFile) | 392         signature = signBinary(zipdata, keyFile) | 
| 383         pubkey = getPublicKey(keyFile) | 393         pubkey = getPublicKey(keyFile) | 
| 384     writePackage(outFile, pubkey, signature, zipdata) | 394     writePackage(outFile, pubkey, signature, zipdata) | 
| OLD | NEW | 
|---|