| Index: packagerChrome.py |
| =================================================================== |
| --- a/packagerChrome.py |
| +++ b/packagerChrome.py |
| @@ -1,19 +1,20 @@ |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| -import sys |
| +import errno |
| +import io |
| +import json |
| import os |
| import re |
| -import json |
| +from StringIO import StringIO |
| import struct |
| -import io |
| -from StringIO import StringIO |
| +import sys |
| import packager |
| from packager import readMetadata, getMetadataPath, getDefaultFileName, getBuildVersion, getTemplate, Files |
| defaultLocale = 'en_US' |
| def getIgnoredFiles(params): |
| @@ -290,28 +291,37 @@ def fixTranslationsForCWS(files): |
| data.setdefault(name, info) |
| for name, limit in limits.iteritems(): |
| if name in data: |
| data[name]['message'] = truncate(data[name]['message'], limit) |
| files[filename] = toJson(data) |
| def signBinary(zipdata, keyFile): |
| - import M2Crypto |
| - if not os.path.exists(keyFile): |
| - M2Crypto.RSA.gen_key(1024, 65537, callback=lambda x: None).save_key(keyFile, cipher=None) |
| - key = M2Crypto.EVP.load_key(keyFile) |
| - key.sign_init() |
| - key.sign_update(zipdata) |
| - return key.final() |
| + from Crypto.Hash import SHA |
| + from Crypto.PublicKey import RSA |
| + from Crypto.Signature import PKCS1_v1_5 |
| + |
| + try: |
| + with open(keyFile, 'rb') as file: |
| + key = RSA.importKey(file.read()) |
| + except IOError as e: |
| + if e.errno != errno.ENOENT: |
| + raise |
| + key = RSA.generate(2048) |
| + with open(keyFile, 'wb') as file: |
| + file.write(key.exportKey('PEM')) |
| + |
| + return PKCS1_v1_5.new(key).sign(SHA.new(zipdata)) |
| def getPublicKey(keyFile): |
| - import M2Crypto |
| - return M2Crypto.EVP.load_key(keyFile).as_der() |
| + from Crypto.PublicKey import RSA |
| + with open(keyFile, 'rb') as file: |
| + return RSA.importKey(file.read()).publickey().exportKey('DER') |
| def writePackage(outputFile, pubkey, signature, zipdata): |
| if isinstance(outputFile, basestring): |
| file = open(outputFile, 'wb') |
| else: |
| file = outputFile |
| if pubkey != None and signature != None: |