@@ -3,44 +3,6 @@ function define_tests() {
33 // May want to test prefixed implementations.
44 var subtle = self . crypto . subtle ;
55
6- var pkcs8 = {
7- "X25519" : new Uint8Array ( [ 48 , 46 , 2 , 1 , 0 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 4 , 34 , 4 , 32 , 200 , 131 , 142 , 118 , 208 , 87 , 223 , 183 , 216 , 201 , 90 , 105 , 225 , 56 , 22 , 10 , 221 , 99 , 115 , 253 , 113 , 164 , 210 , 118 , 187 , 86 , 227 , 168 , 27 , 100 , 255 , 97 ] ) ,
8- "X448" : new Uint8Array ( [ 48 , 70 , 2 , 1 , 0 , 48 , 5 , 6 , 3 , 43 , 101 , 111 , 4 , 58 , 4 , 56 , 88 , 199 , 210 , 154 , 62 , 181 , 25 , 178 , 157 , 0 , 207 , 177 , 145 , 187 , 100 , 252 , 109 , 138 , 66 , 216 , 241 , 113 , 118 , 39 , 43 , 137 , 242 , 39 , 45 , 24 , 25 , 41 , 92 , 101 , 37 , 192 , 130 , 150 , 113 , 176 , 82 , 239 , 7 , 39 , 83 , 15 , 24 , 142 , 49 , 208 , 204 , 83 , 191 , 38 , 146 , 158 ] )
9- } ;
10-
11- var spki = {
12- "X25519" : new Uint8Array ( [ 48 , 42 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 3 , 33 , 0 , 28 , 242 , 177 , 230 , 2 , 46 , 197 , 55 , 55 , 30 , 215 , 245 , 62 , 84 , 250 , 17 , 84 , 216 , 62 , 152 , 235 , 100 , 234 , 81 , 250 , 229 , 179 , 48 , 124 , 254 , 151 , 6 ] ) ,
13- "X448" : new Uint8Array ( [ 48 , 66 , 48 , 5 , 6 , 3 , 43 , 101 , 111 , 3 , 57 , 0 , 182 , 4 , 161 , 209 , 165 , 205 , 29 , 148 , 38 , 213 , 97 , 239 , 99 , 10 , 158 , 177 , 108 , 190 , 105 , 213 , 185 , 202 , 97 , 94 , 220 , 83 , 99 , 62 , 251 , 82 , 234 , 49 , 230 , 230 , 160 , 161 , 219 , 172 , 198 , 231 , 108 , 188 , 230 , 72 , 45 , 126 , 75 , 163 , 213 , 93 , 158 , 128 , 39 , 101 , 206 , 111 ] )
14- } ;
15-
16- var sizes = {
17- "X25519" : 32 ,
18- "X448" : 56
19- } ;
20-
21- var derivations = {
22- "X25519" : new Uint8Array ( [ 39 , 104 , 64 , 157 , 250 , 185 , 158 , 194 , 59 , 140 , 137 , 185 , 63 , 245 , 136 , 2 , 149 , 247 , 97 , 118 , 8 , 143 , 137 , 228 , 61 , 254 , 190 , 126 , 161 , 149 , 0 , 8 ] ) ,
23- "X448" : new Uint8Array ( [ 240 , 246 , 197 , 241 , 127 , 148 , 244 , 41 , 30 , 171 , 113 , 120 , 134 , 109 , 55 , 236 , 137 , 6 , 221 , 108 , 81 , 65 , 67 , 220 , 133 , 190 , 124 , 242 , 141 , 239 , 243 , 155 , 114 , 110 , 15 , 109 , 207 , 129 , 14 , 181 , 148 , 220 , 169 , 123 , 72 , 130 , 189 , 68 , 196 , 62 , 167 , 220 , 103 , 244 , 154 , 78 ] )
24- } ;
25-
26- var kSmallOrderPoint = {
27- "X25519" : [
28- { order : "0" , vector : new Uint8Array ( [ 48 , 42 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 3 , 33 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) } ,
29- { order : "1" , vector : new Uint8Array ( [ 48 , 42 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 3 , 33 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) } ,
30- { order : "8" , vector : new Uint8Array ( [ 48 , 42 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 3 , 33 , 0 , 224 , 235 , 122 , 124 , 59 , 65 , 184 , 174 , 22 , 86 , 227 , 250 , 241 , 159 , 196 , 106 , 218 , 9 , 141 , 235 , 156 , 50 , 177 , 253 , 134 , 98 , 5 , 22 , 95 , 73 , 184 , 0 ] ) } ,
31- { order : "p-1 (order 2)" , vector : new Uint8Array ( [ 48 , 42 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 3 , 33 , 0 , 236 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 127 ] ) } ,
32- { order : "p (=0, order 4)" , vector : new Uint8Array ( [ 48 , 42 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 3 , 33 , 0 , 237 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 127 ] ) } ,
33- { order : "p+1 (=1, order 1)" , vector : new Uint8Array ( [ 48 , 42 , 48 , 5 , 6 , 3 , 43 , 101 , 110 , 3 , 33 , 0 , 238 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 127 ] ) } ,
34- ] ,
35- "X448" : [
36- { order : "0" , vector : new Uint8Array ( [ 48 , 66 , 48 , 5 , 6 , 3 , 43 , 101 , 111 , 3 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) } ,
37- { order : "1" , vector : new Uint8Array ( [ 48 , 66 , 48 , 5 , 6 , 3 , 43 , 101 , 111 , 3 , 57 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) } ,
38- { order : "p-1 (order 2)" , vector : new Uint8Array ( [ 48 , 66 , 48 , 5 , 6 , 3 , 43 , 101 , 111 , 3 , 57 , 0 , 254 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 254 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ] ) } ,
39- { order : "p (=0, order 4)" , vector : new Uint8Array ( [ 48 , 66 , 48 , 5 , 6 , 3 , 43 , 101 , 111 , 3 , 57 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 254 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ] ) } ,
40- { order : "p+1 (=1, order 1)" , vector : new Uint8Array ( [ 48 , 66 , 48 , 5 , 6 , 3 , 43 , 101 , 111 , 3 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ] ) } ,
41- ]
42- } ;
43-
446 // Verify the derive functions perform checks against the all-zero value results,
457 // ensuring small-order points are rejected.
468 // https://www.rfc-editor.org/rfc/rfc7748#section-6.1
@@ -50,16 +12,16 @@ function define_tests() {
5012 kSmallOrderPoint [ algorithmName ] . forEach ( function ( test ) {
5113 promise_test ( async ( ) => {
5214 let derived ;
53- let privateKey = await subtle . importKey ( "pkcs8" , pkcs8 [ algorithmName ] ,
15+ let privateKey ;
16+ let publicKey ;
17+ try {
18+ privateKey = await subtle . importKey ( "pkcs8" , pkcs8 [ algorithmName ] ,
5419 { name : algorithmName } ,
5520 false , [ "deriveBits" , "deriveKey" ] ) ;
56- let publicKey = await subtle . importKey ( "spki" , test . vector ,
21+ publicKey = await subtle . importKey ( "spki" , test . vector ,
5722 { name : algorithmName } ,
5823 false , [ ] )
59- try {
60- derived = await subtle . deriveKey ( { name : algorithmName , public : publicKey } , privateKey ,
61- { name : "HMAC" , hash : "SHA-256" , length : 256 } , true ,
62- [ "sign" , "verify" ] ) ;
24+ derived = await subtle . deriveBits ( { name : algorithmName , public : publicKey } , privateKey , 8 * sizes [ algorithmName ] ) ;
6325 } catch ( err ) {
6426 assert_false ( privateKey === undefined , "Private key should be valid." ) ;
6527 assert_false ( publicKey === undefined , "Public key should be valid." ) ;
0 commit comments