@@ -35,6 +35,38 @@ function run_test() {
3535 all_promises . push ( promise ) ;
3636 } ) ;
3737
38+ // Check for successful encryption even if the buffer is changed while calling encrypt.
39+ passingVectors . forEach ( function ( vector ) {
40+ var plaintext = copyBuffer ( vector . plaintext ) ;
41+ plaintext [ 0 ] = 255 - plaintext [ 0 ] ;
42+ var promise = importVectorKey ( vector , [ "encrypt" , "decrypt" ] )
43+ . then ( function ( vector ) {
44+ promise_test ( function ( test ) {
45+ var operation = subtle . encrypt ( {
46+ ...vector . algorithm ,
47+ get name ( ) {
48+ plaintext [ 0 ] = vector . plaintext [ 0 ] ;
49+ return vector . algorithm . name ;
50+ }
51+ } , vector . key , plaintext )
52+ . then ( function ( result ) {
53+ assert_true ( equalBuffers ( result , vector . result ) , "Should return expected result" ) ;
54+ } , function ( err ) {
55+ assert_unreached ( "encrypt error for test " + vector . name + ": " + err . message ) ;
56+ } ) ;
57+ return operation ;
58+ } , vector . name + " with altered plaintext during call" ) ;
59+ } , function ( err ) {
60+ // We need a failed test if the importVectorKey operation fails, so
61+ // we know we never tested encryption
62+ promise_test ( function ( test ) {
63+ assert_unreached ( "importKey failed for " + vector . name ) ;
64+ } , "importKey step: " + vector . name + " with altered plaintext during call" ) ;
65+ } ) ;
66+
67+ all_promises . push ( promise ) ;
68+ } ) ;
69+
3870 // Check for successful encryption even if the buffer is changed after calling encrypt.
3971 passingVectors . forEach ( function ( vector ) {
4072 var plaintext = copyBuffer ( vector . plaintext ) ;
@@ -49,13 +81,13 @@ function run_test() {
4981 } ) ;
5082 plaintext [ 0 ] = 255 - plaintext [ 0 ] ;
5183 return operation ;
52- } , vector . name + " with altered plaintext" ) ;
84+ } , vector . name + " with altered plaintext after call " ) ;
5385 } , function ( err ) {
5486 // We need a failed test if the importVectorKey operation fails, so
5587 // we know we never tested encryption
5688 promise_test ( function ( test ) {
5789 assert_unreached ( "importKey failed for " + vector . name ) ;
58- } , "importKey step: " + vector . name + " with altered plaintext" ) ;
90+ } , "importKey step: " + vector . name + " with altered plaintext after call " ) ;
5991 } ) ;
6092
6193 all_promises . push ( promise ) ;
@@ -84,7 +116,39 @@ function run_test() {
84116 all_promises . push ( promise ) ;
85117 } ) ;
86118
87- // Check for successful decryption even if ciphertext is altered.
119+ // Check for successful decryption even if ciphertext is altered while calling encrypt.
120+ passingVectors . forEach ( function ( vector ) {
121+ var ciphertext = copyBuffer ( vector . result ) ;
122+ ciphertext [ 0 ] = 255 - ciphertext [ 0 ] ;
123+ var promise = importVectorKey ( vector , [ "encrypt" , "decrypt" ] )
124+ . then ( function ( vector ) {
125+ promise_test ( function ( test ) {
126+ var operation = subtle . decrypt ( {
127+ ...vector . algorithm ,
128+ get name ( ) {
129+ ciphertext [ 0 ] = vector . result [ 0 ] ;
130+ return vector . algorithm . name ;
131+ }
132+ } , vector . key , ciphertext )
133+ . then ( function ( result ) {
134+ assert_true ( equalBuffers ( result , vector . plaintext ) , "Should return expected result" ) ;
135+ } , function ( err ) {
136+ assert_unreached ( "decrypt error for test " + vector . name + ": " + err . message ) ;
137+ } ) ;
138+ return operation ;
139+ } , vector . name + " decryption with altered ciphertext during call" ) ;
140+ } , function ( err ) {
141+ // We need a failed test if the importVectorKey operation fails, so
142+ // we know we never tested encryption
143+ promise_test ( function ( test ) {
144+ assert_unreached ( "importKey failed for " + vector . name ) ;
145+ } , "importKey step for decryption: " + vector . name + " with altered ciphertext during call" ) ;
146+ } ) ;
147+
148+ all_promises . push ( promise ) ;
149+ } ) ;
150+
151+ // Check for successful decryption even if ciphertext is altered after calling encrypt.
88152 passingVectors . forEach ( function ( vector ) {
89153 var ciphertext = copyBuffer ( vector . result ) ;
90154 var promise = importVectorKey ( vector , [ "encrypt" , "decrypt" ] )
@@ -98,13 +162,13 @@ function run_test() {
98162 } ) ;
99163 ciphertext [ 0 ] = 255 - ciphertext [ 0 ] ;
100164 return operation ;
101- } , vector . name + " decryption with altered ciphertext" ) ;
165+ } , vector . name + " decryption with altered ciphertext after call " ) ;
102166 } , function ( err ) {
103167 // We need a failed test if the importVectorKey operation fails, so
104168 // we know we never tested encryption
105169 promise_test ( function ( test ) {
106170 assert_unreached ( "importKey failed for " + vector . name ) ;
107- } , "importKey step for decryption: " + vector . name + " with altered ciphertext" ) ;
171+ } , "importKey step for decryption: " + vector . name + " with altered ciphertext after call " ) ;
108172 } ) ;
109173
110174 all_promises . push ( promise ) ;
0 commit comments