@@ -651,6 +651,25 @@ class CipherSuite:
651651 TLS_DH_ANON_WITH_AES_256_GCM_SHA384 = 0x00A7
652652 ietfNames [0x00A7 ] = 'TLS_DH_ANON_WITH_AES_256_GCM_SHA384'
653653
654+ # RFC 6655 - AES-CCM ciphers for TLSv1.2
655+ TLS_RSA_WITH_AES_128_CCM = 0xC09C
656+ ietfNames [0xC09C ] = 'TLS_RSA_WITH_AES_128_CCM'
657+ TLS_RSA_WITH_AES_256_CCM = 0xC09D
658+ ietfNames [0xC09D ] = 'TLS_RSA_WITH_AES_256_CCM'
659+ TLS_DHE_RSA_WITH_AES_128_CCM = 0xC09E
660+ ietfNames [0xC09E ] = 'TLS_DHE_RSA_WITH_AES_128_CCM'
661+ TLS_DHE_RSA_WITH_AES_256_CCM = 0xC09F
662+ ietfNames [0xC09F ] = 'TLS_DHE_RSA_WITH_AES_256_CCM'
663+ TLS_RSA_WITH_AES_128_CCM_8 = 0xC0A0
664+ ietfNames [0xC0A0 ] = 'TLS_RSA_WITH_AES_128_CCM_8'
665+ TLS_RSA_WITH_AES_256_CCM_8 = 0xC0A1
666+ ietfNames [0xC0A1 ] = 'TLS_RSA_WITH_AES_256_CCM_8'
667+ TLS_DHE_RSA_WITH_AES_128_CCM_8 = 0xC0A2
668+ ietfNames [0xC0A2 ] = 'TLS_DHE_RSA_WITH_AES_128_CCM_8'
669+ TLS_DHE_RSA_WITH_AES_256_CCM_8 = 0xC0A3
670+ ietfNames [0xC0A3 ] = 'TLS_DHE_RSA_WITH_AES_256_CCM_8'
671+
672+
654673 # Weird pseudo-ciphersuite from RFC 5746
655674 # Signals that "secure renegotiation" is supported
656675 # We actually don't do any renegotiation, but this
@@ -665,6 +684,10 @@ class CipherSuite:
665684 ietfNames [0x1302 ] = 'TLS_AES_256_GCM_SHA384'
666685 TLS_CHACHA20_POLY1305_SHA256 = 0x1303
667686 ietfNames [0x1303 ] = 'TLS_CHACHA20_POLY1305_SHA256'
687+ TLS_AES_128_CCM_SHA256 = 0x1304
688+ ietfNames [0x1304 ] = 'TLS_AES_128_CCM_SHA256'
689+ TLS_AES_128_CCM_8_SHA256 = 0x1305
690+ ietfNames [0x1305 ] = 'TLS_AES_128_CCM_8_SHA256'
668691
669692 # RFC 7507 - Fallback Signaling Cipher Suite Value for Preventing Protocol
670693 # Downgrade Attacks
@@ -802,6 +825,16 @@ class CipherSuite:
802825 TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAA
803826 ietfNames [0xCCAA ] = 'TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256'
804827
828+ # RFC 7251 - AES-CCM ECC Ciphers for TLS
829+ TLS_ECDHE_ECDSA_WITH_AES_128_CCM = 0xC0AC
830+ ietfNames [0xC0AC ] = 'TLS_ECDHE_ECDSA_WITH_AES_128_CCM'
831+ TLS_ECDHE_ECDSA_WITH_AES_256_CCM = 0xC0AD
832+ ietfNames [0xC0AD ] = 'TLS_ECDHE_ECDSA_WITH_AES_256_CCM'
833+ TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 = 0xC0AE
834+ ietfNames [0xC0AE ] = 'TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8'
835+ TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 = 0xC0AF
836+ ietfNames [0xC0AF ] = 'TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8'
837+
805838#pylint: enable = invalid-name
806839 #
807840 # Define cipher suite families below
@@ -882,6 +915,32 @@ class CipherSuite:
882915 aes256GcmSuites .append (TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 )
883916 aes256GcmSuites .append (TLS_AES_256_GCM_SHA384 )
884917
918+ #: AES-128 CCM_8 ciphers
919+ aes128Ccm_8Suites = []
920+ aes128Ccm_8Suites .append (TLS_RSA_WITH_AES_128_CCM_8 )
921+ aes128Ccm_8Suites .append (TLS_DHE_RSA_WITH_AES_128_CCM_8 )
922+ aes128Ccm_8Suites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 )
923+ aes128Ccm_8Suites .append (TLS_AES_128_CCM_8_SHA256 )
924+
925+ #: AES-128 CCM ciphers
926+ aes128CcmSuites = []
927+ aes128CcmSuites .append (TLS_RSA_WITH_AES_128_CCM )
928+ aes128CcmSuites .append (TLS_DHE_RSA_WITH_AES_128_CCM )
929+ aes128CcmSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM )
930+ aes128CcmSuites .append (TLS_AES_128_CCM_SHA256 )
931+
932+ #: AES-256 CCM_8 ciphers
933+ aes256Ccm_8Suites = []
934+ aes256Ccm_8Suites .append (TLS_RSA_WITH_AES_256_CCM_8 )
935+ aes256Ccm_8Suites .append (TLS_DHE_RSA_WITH_AES_256_CCM_8 )
936+ aes256Ccm_8Suites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 )
937+
938+ # AES-256 CCM ciphers
939+ aes256CcmSuites = []
940+ aes256CcmSuites .append (TLS_RSA_WITH_AES_256_CCM )
941+ aes256CcmSuites .append (TLS_DHE_RSA_WITH_AES_256_CCM )
942+ aes256CcmSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM )
943+
885944 #: CHACHA20 cipher, 00'th IETF draft (implicit POLY1305 authenticator)
886945 chacha20draft00Suites = []
887946 chacha20draft00Suites .append (TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_draft_00 )
@@ -993,6 +1052,10 @@ class CipherSuite:
9931052 aeadSuites = []
9941053 aeadSuites .extend (aes128GcmSuites )
9951054 aeadSuites .extend (aes256GcmSuites )
1055+ aeadSuites .extend (aes128CcmSuites )
1056+ aeadSuites .extend (aes128Ccm_8Suites )
1057+ aeadSuites .extend (aes256CcmSuites )
1058+ aeadSuites .extend (aes256Ccm_8Suites )
9961059 aeadSuites .extend (chacha20Suites )
9971060 aeadSuites .extend (chacha20draft00Suites )
9981061
@@ -1030,6 +1093,10 @@ class CipherSuite:
10301093 tls12Suites .remove (TLS_AES_128_GCM_SHA256 )
10311094 tls13Suites .append (TLS_CHACHA20_POLY1305_SHA256 )
10321095 tls12Suites .remove (TLS_CHACHA20_POLY1305_SHA256 )
1096+ tls13Suites .append (TLS_AES_128_CCM_SHA256 )
1097+ tls12Suites .remove (TLS_AES_128_CCM_SHA256 )
1098+ tls13Suites .append (TLS_AES_128_CCM_8_SHA256 )
1099+ tls12Suites .remove (TLS_AES_128_CCM_8_SHA256 )
10331100
10341101 @staticmethod
10351102 def filterForVersion (suites , minVersion , maxVersion ):
@@ -1093,6 +1160,14 @@ def _filterSuites(suites, settings, version=None):
10931160 cipherSuites += CipherSuite .aes128GcmSuites
10941161 if "aes256gcm" in cipherNames and version >= (3 , 3 ):
10951162 cipherSuites += CipherSuite .aes256GcmSuites
1163+ if "aes128ccm" in cipherNames and version >= (3 , 3 ):
1164+ cipherSuites += CipherSuite .aes128CcmSuites
1165+ if "aes128ccm_8" in cipherNames and version >= (3 , 3 ):
1166+ cipherSuites += CipherSuite .aes128Ccm_8Suites
1167+ if "aes256ccm" in cipherNames and version >= (3 , 3 ):
1168+ cipherSuites += CipherSuite .aes256CcmSuites
1169+ if "aes256ccm_8" in cipherNames and version >= (3 , 3 ):
1170+ cipherSuites += CipherSuite .aes256Ccm_8Suites
10961171 if "aes128" in cipherNames :
10971172 cipherSuites += CipherSuite .aes128Suites
10981173 if "aes256" in cipherNames :
@@ -1166,10 +1241,14 @@ def getSrpAllSuites(cls, settings, version=None):
11661241 certSuites = []
11671242 certSuites .append (TLS_RSA_WITH_AES_256_GCM_SHA384 )
11681243 certSuites .append (TLS_RSA_WITH_AES_128_GCM_SHA256 )
1244+ certSuites .append (TLS_RSA_WITH_AES_256_CCM )
1245+ certSuites .append (TLS_RSA_WITH_AES_128_CCM )
11691246 certSuites .append (TLS_RSA_WITH_AES_256_CBC_SHA256 )
11701247 certSuites .append (TLS_RSA_WITH_AES_128_CBC_SHA256 )
11711248 certSuites .append (TLS_RSA_WITH_AES_256_CBC_SHA )
11721249 certSuites .append (TLS_RSA_WITH_AES_128_CBC_SHA )
1250+ certSuites .append (TLS_RSA_WITH_AES_256_CCM_8 )
1251+ certSuites .append (TLS_RSA_WITH_AES_128_CCM_8 )
11731252 certSuites .append (TLS_RSA_WITH_3DES_EDE_CBC_SHA )
11741253 certSuites .append (TLS_RSA_WITH_RC4_128_SHA )
11751254 certSuites .append (TLS_RSA_WITH_RC4_128_MD5 )
@@ -1188,10 +1267,14 @@ def getCertSuites(cls, settings, version=None):
11881267 dheCertSuites .append (TLS_DHE_RSA_WITH_CHACHA20_POLY1305_draft_00 )
11891268 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 )
11901269 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 )
1270+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CCM )
1271+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CCM )
11911272 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 )
11921273 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 )
11931274 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CBC_SHA )
11941275 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CBC_SHA )
1276+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CCM_8 )
1277+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CCM_8 )
11951278 dheCertSuites .append (TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA )
11961279
11971280 @classmethod
@@ -1227,11 +1310,15 @@ def getEcdheCertSuites(cls, settings, version=None):
12271310 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_draft_00 )
12281311 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 )
12291312 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 )
1313+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM )
1314+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM )
12301315 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 )
12311316 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 )
12321317 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA )
12331318 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA )
12341319 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA )
1320+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 )
1321+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 )
12351322 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_RC4_128_SHA )
12361323 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_NULL_SHA )
12371324
@@ -1282,6 +1369,14 @@ def canonicalCipherName(ciphersuite):
12821369 return "aes128gcm"
12831370 elif ciphersuite in CipherSuite .aes256GcmSuites :
12841371 return "aes256gcm"
1372+ elif ciphersuite in CipherSuite .aes128Ccm_8Suites :
1373+ return "aes128ccm_8"
1374+ elif ciphersuite in CipherSuite .aes128CcmSuites :
1375+ return "aes128ccm"
1376+ elif ciphersuite in CipherSuite .aes256CcmSuites :
1377+ return "aes256ccm"
1378+ elif ciphersuite in CipherSuite .aes256Ccm_8Suites :
1379+ return "aes256ccm_8"
12851380 elif ciphersuite in CipherSuite .aes128Suites :
12861381 return "aes128"
12871382 elif ciphersuite in CipherSuite .aes256Suites :
0 commit comments