@@ -643,6 +643,25 @@ class CipherSuite:
643643 TLS_DH_ANON_WITH_AES_256_GCM_SHA384 = 0x00A7
644644 ietfNames [0x00A7 ] = 'TLS_DH_ANON_WITH_AES_256_GCM_SHA384'
645645
646+ # RFC 6655 - AES-CCM ciphers for TLSv1.2
647+ TLS_RSA_WITH_AES_128_CCM = 0xC09C
648+ ietfNames [0xC09C ] = 'TLS_RSA_WITH_AES_128_CCM'
649+ TLS_RSA_WITH_AES_256_CCM = 0xC09D
650+ ietfNames [0xC09D ] = 'TLS_RSA_WITH_AES_256_CCM'
651+ TLS_DHE_RSA_WITH_AES_128_CCM = 0xC09E
652+ ietfNames [0xC09E ] = 'TLS_DHE_RSA_WITH_AES_128_CCM'
653+ TLS_DHE_RSA_WITH_AES_256_CCM = 0xC09F
654+ ietfNames [0xC09F ] = 'TLS_DHE_RSA_WITH_AES_256_CCM'
655+ TLS_RSA_WITH_AES_128_CCM_8 = 0xC0A0
656+ ietfNames [0xC0A0 ] = 'TLS_RSA_WITH_AES_128_CCM_8'
657+ TLS_RSA_WITH_AES_256_CCM_8 = 0xC0A1
658+ ietfNames [0xC0A1 ] = 'TLS_RSA_WITH_AES_256_CCM_8'
659+ TLS_DHE_RSA_WITH_AES_128_CCM_8 = 0xC0A2
660+ ietfNames [0xC0A2 ] = 'TLS_DHE_RSA_WITH_AES_128_CCM_8'
661+ TLS_DHE_RSA_WITH_AES_256_CCM_8 = 0xC0A3
662+ ietfNames [0xC0A3 ] = 'TLS_DHE_RSA_WITH_AES_256_CCM_8'
663+
664+
646665 # Weird pseudo-ciphersuite from RFC 5746
647666 # Signals that "secure renegotiation" is supported
648667 # We actually don't do any renegotiation, but this
@@ -657,6 +676,10 @@ class CipherSuite:
657676 ietfNames [0x1302 ] = 'TLS_AES_256_GCM_SHA384'
658677 TLS_CHACHA20_POLY1305_SHA256 = 0x1303
659678 ietfNames [0x1303 ] = 'TLS_CHACHA20_POLY1305_SHA256'
679+ TLS_AES_128_CCM_SHA256 = 0x1304
680+ ietfNames [0x1304 ] = 'TLS_AES_128_CCM_SHA256'
681+ TLS_AES_128_CCM_8_SHA256 = 0x1305
682+ ietfNames [0x1305 ] = 'TLS_AES_128_CCM_8_SHA256'
660683
661684 # RFC 7507 - Fallback Signaling Cipher Suite Value for Preventing Protocol
662685 # Downgrade Attacks
@@ -794,6 +817,16 @@ class CipherSuite:
794817 TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAA
795818 ietfNames [0xCCAA ] = 'TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256'
796819
820+ # RFC 7251 - AES-CCM ECC Ciphers for TLS
821+ TLS_ECDHE_ECDSA_WITH_AES_128_CCM = 0xC0AC
822+ ietfNames [0xC0AC ] = 'TLS_ECDHE_ECDSA_WITH_AES_128_CCM'
823+ TLS_ECDHE_ECDSA_WITH_AES_256_CCM = 0xC0AD
824+ ietfNames [0xC0AD ] = 'TLS_ECDHE_ECDSA_WITH_AES_256_CCM'
825+ TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 = 0xC0AE
826+ ietfNames [0xC0AE ] = 'TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8'
827+ TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 = 0xC0AF
828+ ietfNames [0xC0AF ] = 'TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8'
829+
797830#pylint: enable = invalid-name
798831 #
799832 # Define cipher suite families below
@@ -874,6 +907,32 @@ class CipherSuite:
874907 aes256GcmSuites .append (TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 )
875908 aes256GcmSuites .append (TLS_AES_256_GCM_SHA384 )
876909
910+ #: AES-128 CCM_8 ciphers
911+ aes128Ccm_8Suites = []
912+ aes128Ccm_8Suites .append (TLS_RSA_WITH_AES_128_CCM_8 )
913+ aes128Ccm_8Suites .append (TLS_DHE_RSA_WITH_AES_128_CCM_8 )
914+ aes128Ccm_8Suites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 )
915+ aes128Ccm_8Suites .append (TLS_AES_128_CCM_8_SHA256 )
916+
917+ #: AES-128 CCM ciphers
918+ aes128CcmSuites = []
919+ aes128CcmSuites .append (TLS_RSA_WITH_AES_128_CCM )
920+ aes128CcmSuites .append (TLS_DHE_RSA_WITH_AES_128_CCM )
921+ aes128CcmSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM )
922+ aes128CcmSuites .append (TLS_AES_128_CCM_SHA256 )
923+
924+ #: AES-256 CCM_8 ciphers
925+ aes256Ccm_8Suites = []
926+ aes256Ccm_8Suites .append (TLS_RSA_WITH_AES_256_CCM_8 )
927+ aes256Ccm_8Suites .append (TLS_DHE_RSA_WITH_AES_256_CCM_8 )
928+ aes256Ccm_8Suites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 )
929+
930+ # AES-256 CCM ciphers
931+ aes256CcmSuites = []
932+ aes256CcmSuites .append (TLS_RSA_WITH_AES_256_CCM )
933+ aes256CcmSuites .append (TLS_DHE_RSA_WITH_AES_256_CCM )
934+ aes256CcmSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM )
935+
877936 #: CHACHA20 cipher, 00'th IETF draft (implicit POLY1305 authenticator)
878937 chacha20draft00Suites = []
879938 chacha20draft00Suites .append (TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_draft_00 )
@@ -985,6 +1044,10 @@ class CipherSuite:
9851044 aeadSuites = []
9861045 aeadSuites .extend (aes128GcmSuites )
9871046 aeadSuites .extend (aes256GcmSuites )
1047+ aeadSuites .extend (aes128CcmSuites )
1048+ aeadSuites .extend (aes128Ccm_8Suites )
1049+ aeadSuites .extend (aes256CcmSuites )
1050+ aeadSuites .extend (aes256Ccm_8Suites )
9881051 aeadSuites .extend (chacha20Suites )
9891052 aeadSuites .extend (chacha20draft00Suites )
9901053
@@ -1022,6 +1085,10 @@ class CipherSuite:
10221085 tls12Suites .remove (TLS_AES_128_GCM_SHA256 )
10231086 tls13Suites .append (TLS_CHACHA20_POLY1305_SHA256 )
10241087 tls12Suites .remove (TLS_CHACHA20_POLY1305_SHA256 )
1088+ tls13Suites .append (TLS_AES_128_CCM_SHA256 )
1089+ tls12Suites .remove (TLS_AES_128_CCM_SHA256 )
1090+ tls13Suites .append (TLS_AES_128_CCM_8_SHA256 )
1091+ tls12Suites .remove (TLS_AES_128_CCM_8_SHA256 )
10251092
10261093 @staticmethod
10271094 def filterForVersion (suites , minVersion , maxVersion ):
@@ -1085,6 +1152,14 @@ def _filterSuites(suites, settings, version=None):
10851152 cipherSuites += CipherSuite .aes128GcmSuites
10861153 if "aes256gcm" in cipherNames and version >= (3 , 3 ):
10871154 cipherSuites += CipherSuite .aes256GcmSuites
1155+ if "aes128ccm" in cipherNames and version >= (3 , 3 ):
1156+ cipherSuites += CipherSuite .aes128CcmSuites
1157+ if "aes128ccm_8" in cipherNames and version >= (3 , 3 ):
1158+ cipherSuites += CipherSuite .aes128Ccm_8Suites
1159+ if "aes256ccm" in cipherNames and version >= (3 , 3 ):
1160+ cipherSuites += CipherSuite .aes256CcmSuites
1161+ if "aes256ccm_8" in cipherNames and version >= (3 , 3 ):
1162+ cipherSuites += CipherSuite .aes256Ccm_8Suites
10881163 if "aes128" in cipherNames :
10891164 cipherSuites += CipherSuite .aes128Suites
10901165 if "aes256" in cipherNames :
@@ -1158,10 +1233,14 @@ def getSrpAllSuites(cls, settings, version=None):
11581233 certSuites = []
11591234 certSuites .append (TLS_RSA_WITH_AES_256_GCM_SHA384 )
11601235 certSuites .append (TLS_RSA_WITH_AES_128_GCM_SHA256 )
1236+ certSuites .append (TLS_RSA_WITH_AES_256_CCM )
1237+ certSuites .append (TLS_RSA_WITH_AES_128_CCM )
11611238 certSuites .append (TLS_RSA_WITH_AES_256_CBC_SHA256 )
11621239 certSuites .append (TLS_RSA_WITH_AES_128_CBC_SHA256 )
11631240 certSuites .append (TLS_RSA_WITH_AES_256_CBC_SHA )
11641241 certSuites .append (TLS_RSA_WITH_AES_128_CBC_SHA )
1242+ certSuites .append (TLS_RSA_WITH_AES_256_CCM_8 )
1243+ certSuites .append (TLS_RSA_WITH_AES_128_CCM_8 )
11651244 certSuites .append (TLS_RSA_WITH_3DES_EDE_CBC_SHA )
11661245 certSuites .append (TLS_RSA_WITH_RC4_128_SHA )
11671246 certSuites .append (TLS_RSA_WITH_RC4_128_MD5 )
@@ -1180,10 +1259,14 @@ def getCertSuites(cls, settings, version=None):
11801259 dheCertSuites .append (TLS_DHE_RSA_WITH_CHACHA20_POLY1305_draft_00 )
11811260 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 )
11821261 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 )
1262+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CCM )
1263+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CCM )
11831264 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 )
11841265 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 )
11851266 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CBC_SHA )
11861267 dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CBC_SHA )
1268+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_256_CCM_8 )
1269+ dheCertSuites .append (TLS_DHE_RSA_WITH_AES_128_CCM_8 )
11871270 dheCertSuites .append (TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA )
11881271
11891272 @classmethod
@@ -1219,11 +1302,15 @@ def getEcdheCertSuites(cls, settings, version=None):
12191302 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_draft_00 )
12201303 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 )
12211304 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 )
1305+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM )
1306+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM )
12221307 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 )
12231308 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 )
12241309 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA )
12251310 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA )
12261311 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA )
1312+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 )
1313+ ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 )
12271314 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_RC4_128_SHA )
12281315 ecdheEcdsaSuites .append (TLS_ECDHE_ECDSA_WITH_NULL_SHA )
12291316
@@ -1274,6 +1361,14 @@ def canonicalCipherName(ciphersuite):
12741361 return "aes128gcm"
12751362 elif ciphersuite in CipherSuite .aes256GcmSuites :
12761363 return "aes256gcm"
1364+ elif ciphersuite in CipherSuite .aes128Ccm_8Suites :
1365+ return "aes128ccm_8"
1366+ elif ciphersuite in CipherSuite .aes128CcmSuites :
1367+ return "aes128ccm"
1368+ elif ciphersuite in CipherSuite .aes256CcmSuites :
1369+ return "aes256ccm"
1370+ elif ciphersuite in CipherSuite .aes256Ccm_8Suites :
1371+ return "aes256ccm_8"
12771372 elif ciphersuite in CipherSuite .aes128Suites :
12781373 return "aes128"
12791374 elif ciphersuite in CipherSuite .aes256Suites :
0 commit comments