Skip to content

Instantly share code, notes, and snippets.

@pudquick
Created June 10, 2014 20:08
Show Gist options
  • Select an option

  • Save pudquick/4bff77a7b81055d52fb4 to your computer and use it in GitHub Desktop.

Select an option

Save pudquick/4bff77a7b81055d52fb4 to your computer and use it in GitHub Desktop.
Dump a list of the available ciphers in SecureTransport in python
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