| 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 |