@@ -567,6 +567,43 @@ extension AESTests {
567567 let decrypted = decrypt ( encrypted)
568568 XCTAssertEqual ( decrypted, plaintext)
569569 }
570+
571+ func testAESGCMTagLengthCombined2( ) {
572+ let key = Data ( base64Encoded: " X2V2b2x2ZV91c2FnZV9zZXJ2ZXJfZW5jcnlwdGlvbl8= " ) !. bytes
573+ let plaintext = Array < UInt8 > ( hex: " 0x0000000000000000000000000000000000000000 " )
574+ let iv = Array < UInt8 > ( hex: " 0x000000000000 " )
575+
576+ let gcm = GCM ( iv: iv, tagLength: 12 , mode: . combined)
577+ let aes = try ! AES ( key: key, blockMode: gcm, padding: . noPadding)
578+ let encrypted = try ! aes. encrypt ( plaintext)
579+
580+ // decrypt
581+ func decrypt( _ encrypted: Array < UInt8 > ) -> Array < UInt8 > {
582+ let decGCM = GCM ( iv: iv, authenticationTag: gcm. authenticationTag!, mode: . combined)
583+ let aes = try ! AES ( key: key, blockMode: decGCM, padding: . noPadding)
584+ return try ! aes. decrypt ( encrypted)
585+ }
586+
587+ let decrypted = decrypt ( encrypted)
588+ XCTAssertEqual ( decrypted, plaintext)
589+ }
590+
591+ func testAESGCMTagLengthCombined3( ) {
592+ let data = Data ( base64Encoded: " jkVoOail9ZLbGBX/glT5S7Sql7OcH9Fr3sGt0liSBPKaykJ4+Gc= " ) !. bytes
593+ let key = Data ( base64Encoded: " X2V2b2x2ZV91c2FnZV9zZXJ2ZXJfZW5jcnlwdGlvbl8= " ) !. bytes
594+ let plaintext = Data ( base64Encoded: " fg/LQuxydo5JwrbqBkEAOlweBxs= " ) !. bytes
595+
596+ let ciphertextLength = 32
597+ let encrypted = data. prefix ( upTo: ciphertextLength)
598+ let iv = Array ( data. dropFirst ( ciphertextLength) )
599+
600+ // decrypt
601+ let gcm = GCM ( iv: iv, tagLength: 12 , mode: . combined)
602+ let aes = try ! AES ( key: key, blockMode: gcm, padding: . noPadding)
603+ let decrypted = try ! aes. decrypt ( encrypted)
604+
605+ XCTAssertEqual ( decrypted, plaintext)
606+ }
570607
571608 func testAESGCMTestCaseIrregularCombined1( ) {
572609 // echo -n "0123456789010123456789012345" | openssl enc -aes-128-gcm -K feffe9928665731c6d6a8f9467308308 -iv cafebabefacedbaddecaf888 -nopad -nosalt
0 commit comments