| Index: tools/crx_id/crx_id.py
|
| diff --git a/tools/crx_id/crx_id.py b/tools/crx_id/crx_id.py
|
| index 5f8e2b227907fde1f204e14ef8f7ee696f9f695c..dc30b736dc6916af6c9f392cd4bd57e484d92d12 100755
|
| --- a/tools/crx_id/crx_id.py
|
| +++ b/tools/crx_id/crx_id.py
|
| @@ -75,7 +75,7 @@ def GetPublicKeyPacked(f):
|
| pub_key = f.read(pub_key_len_bytes)
|
| return pub_key
|
|
|
| -def GetPublicKeyFromPath(filepath):
|
| +def GetPublicKeyFromPath(filepath, is_win_path=False):
|
| # Normalize the path for windows to have capital drive letters.
|
| # We intentionally don't check if sys.platform == 'win32' and just
|
| # check if this looks like drive letter so that we can test this
|
| @@ -83,7 +83,15 @@ def GetPublicKeyFromPath(filepath):
|
| if (len(filepath) >= 2 and
|
| filepath[0].islower() and
|
| filepath[1] == ':'):
|
| - return filepath[0].upper() + filepath[1:]
|
| + filepath = filepath[0].upper() + filepath[1:]
|
| +
|
| + # On Windows, filepaths are encoded using UTF-16, little endian byte order,
|
| + # using "wide characters" that are 16 bits in size. On POSIX systems, the
|
| + # encoding is generally UTF-8, which has the property of being equivalent to
|
| + # ASCII when only ASCII characters are in the path.
|
| + if is_win_path:
|
| + filepath = filepath.encode('utf-16le')
|
| +
|
| return filepath
|
|
|
| def GetPublicKeyUnpacked(f, filepath):
|
| @@ -102,9 +110,10 @@ def HasPublicKey(filename):
|
| return 'key' in manifest
|
| return False
|
|
|
| -def GetPublicKey(filename, from_file_path):
|
| +def GetPublicKey(filename, from_file_path, is_win_path=False):
|
| if from_file_path:
|
| - return GetPublicKeyFromPath(filename)
|
| + return GetPublicKeyFromPath(
|
| + filename, is_win_path=is_win_path)
|
|
|
| pub_key = ''
|
| if os.path.isdir(filename):
|
| @@ -119,13 +128,13 @@ def GetPublicKey(filename, from_file_path):
|
| f.close()
|
| return pub_key
|
|
|
| -def GetCRXHash(filename, from_file_path=False):
|
| - pub_key = GetPublicKey(filename, from_file_path)
|
| +def GetCRXHash(filename, from_file_path=False, is_win_path=False):
|
| + pub_key = GetPublicKey(filename, from_file_path, is_win_path=is_win_path)
|
| pub_key_hash = hashlib.sha256(pub_key).digest()
|
| return HexTo256(pub_key_hash)
|
|
|
| -def GetCRXAppID(filename, from_file_path=False):
|
| - pub_key = GetPublicKey(filename, from_file_path)
|
| +def GetCRXAppID(filename, from_file_path=False, is_win_path=False):
|
| + pub_key = GetPublicKey(filename, from_file_path, is_win_path=is_win_path)
|
| pub_key_hash = hashlib.sha256(pub_key).digest()
|
| # AppID is the MPDecimal of only the first 128 bits of the hash.
|
| return HexToMPDecimal(pub_key_hash[:128/8])
|
|
|