Created
June 10, 2014 20:08
-
-
Save pudquick/4bff77a7b81055d52fb4 to your computer and use it in GitHub Desktop.
Dump a list of the available ciphers in SecureTransport in python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from ctypes import CDLL, Structure, POINTER, byref, c_uint64, c_uint32 | |
| Security = CDLL('/System/Library/Frameworks/Security.framework/Versions/Current/Security') | |
| class OpaqueType(Structure): | |
| pass | |
| OpaqueTypeRef = POINTER(OpaqueType) | |
| BooleanFalse = 0 | |
| BooleanTrue = 1 | |
| SSLContext = OpaqueTypeRef | |
| SSLNewContext = Security.SSLNewContext | |
| SSLGetEnabledCiphers = Security.SSLGetEnabledCiphers | |
| SSLGetNumberEnabledCiphers = Security.SSLGetNumberEnabledCiphers | |
| CipherSuites = {'0x0000': 'SSL/TLS_NULL_WITH_NULL_NULL', | |
| '0x0001': 'SSL/TLS_RSA_WITH_NULL_MD5', | |
| '0x0002': 'SSL/TLS_RSA_WITH_NULL_SHA', | |
| '0x0003': 'SSL_RSA_EXPORT_WITH_RC4_40_MD5', | |
| '0x0004': 'SSL/TLS_RSA_WITH_RC4_128_MD5', | |
| '0x0005': 'SSL/TLS_RSA_WITH_RC4_128_SHA', | |
| '0x0006': 'SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5', | |
| '0x0007': 'SSL_RSA_WITH_IDEA_CBC_SHA', | |
| '0x0008': 'SSL_RSA_EXPORT_WITH_DES40_CBC_SHA', | |
| '0x0009': 'SSL_RSA_WITH_DES_CBC_SHA', | |
| '0x000A': 'SSL/TLS_RSA_WITH_3DES_EDE_CBC_SHA', | |
| '0x000B': 'SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA', | |
| '0x000C': 'SSL_DH_DSS_WITH_DES_CBC_SHA', | |
| '0x000D': 'SSL/TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA', | |
| '0x000E': 'SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA', | |
| '0x000F': 'SSL_DH_RSA_WITH_DES_CBC_SHA', | |
| '0x0010': 'SSL/TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA', | |
| '0x0011': 'SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA', | |
| '0x0012': 'SSL_DHE_DSS_WITH_DES_CBC_SHA', | |
| '0x0013': 'SSL/TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA', | |
| '0x0014': 'SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA', | |
| '0x0015': 'SSL_DHE_RSA_WITH_DES_CBC_SHA', | |
| '0x0016': 'SSL/TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA', | |
| '0x0017': 'SSL_DH_anon_EXPORT_WITH_RC4_40_MD5', | |
| '0x0018': 'SSL/TLS_DH_anon_WITH_RC4_128_MD5', | |
| '0x0019': 'SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA', | |
| '0x001A': 'SSL_DH_anon_WITH_DES_CBC_SHA', | |
| '0x001B': 'SSL/TLS_DH_anon_WITH_3DES_EDE_CBC_SHA', | |
| '0x001C': 'SSL_FORTEZZA_DMS_WITH_NULL_SHA', | |
| '0x001D': 'SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA', | |
| '0x002C': 'TLS_PSK_WITH_NULL_SHA', | |
| '0x002D': 'TLS_DHE_PSK_WITH_NULL_SHA', | |
| '0x002E': 'TLS_RSA_PSK_WITH_NULL_SHA', | |
| '0x002F': 'TLS_RSA_WITH_AES_128_CBC_SHA', | |
| '0x0030': 'TLS_DH_DSS_WITH_AES_128_CBC_SHA', | |
| '0x0031': 'TLS_DH_RSA_WITH_AES_128_CBC_SHA', | |
| '0x0032': 'TLS_DHE_DSS_WITH_AES_128_CBC_SHA', | |
| '0x0033': 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA', | |
| '0x0034': 'TLS_DH_anon_WITH_AES_128_CBC_SHA', | |
| '0x0035': 'TLS_RSA_WITH_AES_256_CBC_SHA', | |
| '0x0036': 'TLS_DH_DSS_WITH_AES_256_CBC_SHA', | |
| '0x0037': 'TLS_DH_RSA_WITH_AES_256_CBC_SHA', | |
| '0x0038': 'TLS_DHE_DSS_WITH_AES_256_CBC_SHA', | |
| '0x0039': 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', | |
| '0x003A': 'TLS_DH_anon_WITH_AES_256_CBC_SHA', | |
| '0x003B': 'TLS_RSA_WITH_NULL_SHA256', | |
| '0x003C': 'TLS_RSA_WITH_AES_128_CBC_SHA256', | |
| '0x003D': 'TLS_RSA_WITH_AES_256_CBC_SHA256', | |
| '0x003E': 'TLS_DH_DSS_WITH_AES_128_CBC_SHA256', | |
| '0x003F': 'TLS_DH_RSA_WITH_AES_128_CBC_SHA256', | |
| '0x0040': 'TLS_DHE_DSS_WITH_AES_128_CBC_SHA256', | |
| '0x0067': 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA256', | |
| '0x0068': 'TLS_DH_DSS_WITH_AES_256_CBC_SHA256', | |
| '0x0069': 'TLS_DH_RSA_WITH_AES_256_CBC_SHA256', | |
| '0x006A': 'TLS_DHE_DSS_WITH_AES_256_CBC_SHA256', | |
| '0x006B': 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA256', | |
| '0x006C': 'TLS_DH_anon_WITH_AES_128_CBC_SHA256', | |
| '0x006D': 'TLS_DH_anon_WITH_AES_256_CBC_SHA256', | |
| '0x008A': 'TLS_PSK_WITH_RC4_128_SHA', | |
| '0x008B': 'TLS_PSK_WITH_3DES_EDE_CBC_SHA', | |
| '0x008C': 'TLS_PSK_WITH_AES_128_CBC_SHA', | |
| '0x008D': 'TLS_PSK_WITH_AES_256_CBC_SHA', | |
| '0x008E': 'TLS_DHE_PSK_WITH_RC4_128_SHA', | |
| '0x008F': 'TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA', | |
| '0x0090': 'TLS_DHE_PSK_WITH_AES_128_CBC_SHA', | |
| '0x0091': 'TLS_DHE_PSK_WITH_AES_256_CBC_SHA', | |
| '0x0092': 'TLS_RSA_PSK_WITH_RC4_128_SHA', | |
| '0x0093': 'TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA', | |
| '0x0094': 'TLS_RSA_PSK_WITH_AES_128_CBC_SHA', | |
| '0x0095': 'TLS_RSA_PSK_WITH_AES_256_CBC_SHA', | |
| '0x009C': 'TLS_RSA_WITH_AES_128_GCM_SHA256', | |
| '0x009D': 'TLS_RSA_WITH_AES_256_GCM_SHA384', | |
| '0x009E': 'TLS_DHE_RSA_WITH_AES_128_GCM_SHA256', | |
| '0x009F': 'TLS_DHE_RSA_WITH_AES_256_GCM_SHA384', | |
| '0x00A0': 'TLS_DH_RSA_WITH_AES_128_GCM_SHA256', | |
| '0x00A1': 'TLS_DH_RSA_WITH_AES_256_GCM_SHA384', | |
| '0x00A2': 'TLS_DHE_DSS_WITH_AES_128_GCM_SHA256', | |
| '0x00A3': 'TLS_DHE_DSS_WITH_AES_256_GCM_SHA384', | |
| '0x00A4': 'TLS_DH_DSS_WITH_AES_128_GCM_SHA256', | |
| '0x00A5': 'TLS_DH_DSS_WITH_AES_256_GCM_SHA384', | |
| '0x00A6': 'TLS_DH_anon_WITH_AES_128_GCM_SHA256', | |
| '0x00A7': 'TLS_DH_anon_WITH_AES_256_GCM_SHA384', | |
| '0x00A8': 'TLS_PSK_WITH_AES_128_GCM_SHA256', | |
| '0x00A9': 'TLS_PSK_WITH_AES_256_GCM_SHA384', | |
| '0x00AA': 'TLS_DHE_PSK_WITH_AES_128_GCM_SHA256', | |
| '0x00AB': 'TLS_DHE_PSK_WITH_AES_256_GCM_SHA384', | |
| '0x00AC': 'TLS_RSA_PSK_WITH_AES_128_GCM_SHA256', | |
| '0x00AD': 'TLS_RSA_PSK_WITH_AES_256_GCM_SHA384', | |
| '0x00AE': 'TLS_PSK_WITH_AES_128_CBC_SHA256', | |
| '0x00AF': 'TLS_PSK_WITH_AES_256_CBC_SHA384', | |
| '0x00B0': 'TLS_PSK_WITH_NULL_SHA256', | |
| '0x00B1': 'TLS_PSK_WITH_NULL_SHA384', | |
| '0x00B2': 'TLS_DHE_PSK_WITH_AES_128_CBC_SHA256', | |
| '0x00B3': 'TLS_DHE_PSK_WITH_AES_256_CBC_SHA384', | |
| '0x00B4': 'TLS_DHE_PSK_WITH_NULL_SHA256', | |
| '0x00B5': 'TLS_DHE_PSK_WITH_NULL_SHA384', | |
| '0x00B6': 'TLS_RSA_PSK_WITH_AES_128_CBC_SHA256', | |
| '0x00B7': 'TLS_RSA_PSK_WITH_AES_256_CBC_SHA384', | |
| '0x00B8': 'TLS_RSA_PSK_WITH_NULL_SHA256', | |
| '0x00B9': 'TLS_RSA_PSK_WITH_NULL_SHA384', | |
| '0x00FF': 'TLS_EMPTY_RENEGOTIATION_INFO_SCSV', | |
| '0xC001': 'TLS_ECDH_ECDSA_WITH_NULL_SHA', | |
| '0xC002': 'TLS_ECDH_ECDSA_WITH_RC4_128_SHA', | |
| '0xC003': 'TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA', | |
| '0xC004': 'TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA', | |
| '0xC005': 'TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA', | |
| '0xC006': 'TLS_ECDHE_ECDSA_WITH_NULL_SHA', | |
| '0xC007': 'TLS_ECDHE_ECDSA_WITH_RC4_128_SHA', | |
| '0xC008': 'TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA', | |
| '0xC009': 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA', | |
| '0xC00A': 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA', | |
| '0xC00B': 'TLS_ECDH_RSA_WITH_NULL_SHA', | |
| '0xC00C': 'TLS_ECDH_RSA_WITH_RC4_128_SHA', | |
| '0xC00D': 'TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA', | |
| '0xC00E': 'TLS_ECDH_RSA_WITH_AES_128_CBC_SHA', | |
| '0xC00F': 'TLS_ECDH_RSA_WITH_AES_256_CBC_SHA', | |
| '0xC010': 'TLS_ECDHE_RSA_WITH_NULL_SHA', | |
| '0xC011': 'TLS_ECDHE_RSA_WITH_RC4_128_SHA', | |
| '0xC012': 'TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA', | |
| '0xC013': 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA', | |
| '0xC014': 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA', | |
| '0xC015': 'TLS_ECDH_anon_WITH_NULL_SHA', | |
| '0xC016': 'TLS_ECDH_anon_WITH_RC4_128_SHA', | |
| '0xC017': 'TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA', | |
| '0xC018': 'TLS_ECDH_anon_WITH_AES_128_CBC_SHA', | |
| '0xC019': 'TLS_ECDH_anon_WITH_AES_256_CBC_SHA', | |
| '0xC023': 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256', | |
| '0xC024': 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384', | |
| '0xC025': 'TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256', | |
| '0xC026': 'TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384', | |
| '0xC027': 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', | |
| '0xC028': 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384', | |
| '0xC029': 'TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256', | |
| '0xC02A': 'TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384', | |
| '0xC02B': 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256', | |
| '0xC02C': 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384', | |
| '0xC02D': 'TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256', | |
| '0xC02E': 'TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384', | |
| '0xC02F': 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', | |
| '0xC030': 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384', | |
| '0xC031': 'TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256', | |
| '0xC032': 'TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384', | |
| '0xFF80': 'SSL_RSA_WITH_RC2_CBC_MD5', | |
| '0xFF81': 'SSL_RSA_WITH_IDEA_CBC_MD5', | |
| '0xFF82': 'SSL_RSA_WITH_DES_CBC_MD5', | |
| '0xFF83': 'SSL_RSA_WITH_3DES_EDE_CBC_MD5', | |
| '0xFFFF': 'SSL_NO_SUCH_CIPHERSUITE', | |
| } | |
| # Create a new SSL client context | |
| blank_ctx = SSLContext() | |
| isServer = BooleanFalse | |
| result = SSLNewContext(isServer, byref(blank_ctx)) | |
| # Get how many ciphers are enabled so we can allocate a buffer for the list | |
| cipher_count = c_uint64(0) | |
| result = SSLGetNumberEnabledCiphers(blank_ctx, byref(cipher_count)) | |
| # Retrieve list | |
| cipher_list = (c_uint32 * (int(cipher_count.value)))() | |
| result = SSLGetEnabledCiphers(blank_ctx, byref(cipher_list), byref(cipher_count)) | |
| # Map hex codes to known ciphers from CipherSuite.h | |
| ciphers = set() | |
| for x in range(cipher_count.value): | |
| cipher_hex = "0x%04X" % (cipher_list[x]) | |
| cipher_name = CipherSuites.get(cipher_hex, "Unknown CipherSuite: %s" % cipher_hex) | |
| ciphers.add(cipher_name) | |
| # Sort the results | |
| ciphers = sorted(ciphers) | |
| for x in ciphers: | |
| print x |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment