|
|
@@ -5,13 +5,30 @@
|
|
|
|
|
|
# This script parses Firefox and OpenSSL sources, and uses this information
|
|
|
# to generate a ciphers.inc file.
|
|
|
+#
|
|
|
+# It takes two arguments: the location of a firefox source directory, and the
|
|
|
+# location of an openssl source directory.
|
|
|
|
|
|
+import os
|
|
|
import re
|
|
|
+import sys
|
|
|
+
|
|
|
+if len(sys.argv) != 3:
|
|
|
+ print >>sys.stderr, "Syntax: get_mozilla_ciphers.py <firefox-source-dir> <openssl-source-dir>"
|
|
|
+ sys.exit(1)
|
|
|
+
|
|
|
+ff_root = sys.argv[1]
|
|
|
+ossl_root = sys.argv[2]
|
|
|
+
|
|
|
+def ff(s):
|
|
|
+ return os.path.join(ff_root, s)
|
|
|
+def ossl(s):
|
|
|
+ return os.path.join(ossl_root, s)
|
|
|
|
|
|
#####
|
|
|
# Read the cpp file to understand what Ciphers map to what name :
|
|
|
# Make "ciphers" a map from name used in the javascript to a cipher macro name
|
|
|
-fileA = open('security/manager/ssl/src/nsNSSComponent.cpp','r')
|
|
|
+fileA = open(ff('security/manager/ssl/src/nsNSSComponent.cpp'),'r')
|
|
|
|
|
|
# The input format is a file containing exactly one section of the form:
|
|
|
# static CipherPref CipherPrefs[] = {
|
|
|
@@ -49,7 +66,7 @@ for line in cipherLines:
|
|
|
# Build a map enabled_ciphers from javascript name to "true" or "false",
|
|
|
# and an (unordered!) list of the macro names for those ciphers that are
|
|
|
# enabled.
|
|
|
-fileB = open('netwerk/base/public/security-prefs.js', 'r')
|
|
|
+fileB = open(ff('netwerk/base/public/security-prefs.js'), 'r')
|
|
|
|
|
|
enabled_ciphers = {}
|
|
|
for line in fileB:
|
|
|
@@ -66,15 +83,18 @@ for k, v in enabled_ciphers.items():
|
|
|
if v == "true":
|
|
|
used_ciphers.append(ciphers[k])
|
|
|
|
|
|
-oSSLinclude = ('/usr/include/openssl/ssl3.h', '/usr/include/openssl/ssl.h',
|
|
|
- '/usr/include/openssl/ssl2.h', '/usr/include/openssl/ssl23.h',
|
|
|
- '/usr/include/openssl/tls1.h')
|
|
|
+#oSSLinclude = ('/usr/include/openssl/ssl3.h', '/usr/include/openssl/ssl.h',
|
|
|
+# '/usr/include/openssl/ssl2.h', '/usr/include/openssl/ssl23.h',
|
|
|
+# '/usr/include/openssl/tls1.h')
|
|
|
+oSSLinclude = ('ssl/ssl3.h', 'ssl/ssl.h',
|
|
|
+ 'ssl/ssl2.h', 'ssl/ssl23.h',
|
|
|
+ 'ssl/tls1.h')
|
|
|
|
|
|
#####
|
|
|
# This reads the hex code for the ciphers that are used by firefox.
|
|
|
# sslProtoD is set to a map from macro name to macro value in sslproto.h;
|
|
|
# cipher_codes is set to an (unordered!) list of these hex values.
|
|
|
-sslProto = open('security/nss/lib/ssl/sslproto.h', 'r')
|
|
|
+sslProto = open(ff('security/nss/lib/ssl/sslproto.h'), 'r')
|
|
|
sslProtoD = {}
|
|
|
|
|
|
for line in sslProto:
|
|
|
@@ -93,7 +113,7 @@ for x in used_ciphers:
|
|
|
# macro names for those files.
|
|
|
cipher_hex = {}
|
|
|
for fl in oSSLinclude:
|
|
|
- fp = open(fl, 'r')
|
|
|
+ fp = open(ossl(fl), 'r')
|
|
|
for line in fp.readlines():
|
|
|
m = re.match('#define\s+(\S+)\s+(\S+)', line)
|
|
|
if m:
|