@@ -102,137 +102,139 @@ var JWSVerifier = function(ks, globalOpts) {
102
102
}
103
103
protect = Object . keys ( protect ) ;
104
104
105
- return {
105
+ return Promise . resolve ( {
106
106
protected : protect ,
107
107
aad : s . protected || "" ,
108
108
header : header ,
109
109
signature : signature
110
- } ;
110
+ } ) ;
111
111
} ) ;
112
112
113
- var promise = new Promise ( function ( resolve , reject ) {
114
- var processSig = function ( ) {
115
- var sig = sigList . shift ( ) ;
116
- if ( ! sig ) {
117
- reject ( new Error ( "no key found" ) ) ;
118
- return ;
119
- }
120
-
121
- sig = merge ( { } , sig , {
122
- payload : input . payload
123
- } ) ;
124
- var p = Promise . resolve ( sig ) ;
125
- // find the key
126
- p = p . then ( function ( sig ) {
127
- var algKey ;
128
- // TODO: resolve jku, x5c, x5u
129
- if ( sig . header . jwk ) {
130
- algKey = JWK . asKey ( sig . header . jwk ) ;
131
- } else if ( sig . header . x5c ) {
132
- algKey = sig . header . x5c [ 0 ] ;
133
- algKey = new Buffer ( algKey , "base64" ) ;
134
- // TODO: callback to validate chain
135
- algKey = JWK . asKey ( algKey , "pkix" ) ;
136
- } else {
137
- algKey = Promise . resolve ( assumedKey || keystore . get ( {
138
- use : "sig" ,
139
- alg : sig . header . alg ,
140
- kid : sig . header . kid
141
- } ) ) ;
113
+ var promise = Promise . all ( sigList ) ;
114
+ promise = promise . then ( function ( sigList ) {
115
+ return new Promise ( function ( resolve , reject ) {
116
+ var processSig = function ( ) {
117
+ var sig = sigList . shift ( ) ;
118
+ if ( ! sig ) {
119
+ reject ( new Error ( "no key found" ) ) ;
120
+ return ;
142
121
}
143
- return algKey . then ( function ( k ) {
144
- if ( ! k ) {
145
- return Promise . reject ( new Error ( "key does not match" ) ) ;
146
- }
147
- sig . key = k ;
148
- return sig ;
149
- } ) ;
150
- } ) ;
151
122
152
- // process any prepare-verify handlers
153
- p = p . then ( function ( sig ) {
154
- var processing = [ ] ;
155
- handlerKeys . forEach ( function ( h ) {
156
- h = extraHandlers [ h ] ;
157
- var p ;
158
- if ( "function" === typeof h ) {
159
- p = h ( sig ) ;
160
- } else if ( "object" === typeof h && "function" === typeof h . prepare ) {
161
- p = h . prepare ( sig ) ;
162
- }
163
- if ( p ) {
164
- processing . push ( Promise . resolve ( p ) ) ;
123
+ sig = merge ( { } , sig , {
124
+ payload : input . payload
125
+ } ) ;
126
+ var p = Promise . resolve ( sig ) ;
127
+ // find the key
128
+ p = p . then ( function ( sig ) {
129
+ var algKey ;
130
+ // TODO: resolve jku, x5c, x5u
131
+ if ( sig . header . jwk ) {
132
+ algKey = JWK . asKey ( sig . header . jwk ) ;
133
+ } else if ( sig . header . x5c ) {
134
+ algKey = sig . header . x5c [ 0 ] ;
135
+ algKey = new Buffer ( algKey , "base64" ) ;
136
+ // TODO: callback to validate chain
137
+ algKey = JWK . asKey ( algKey , "pkix" ) ;
138
+ } else {
139
+ algKey = Promise . resolve ( assumedKey || keystore . get ( {
140
+ use : "sig" ,
141
+ alg : sig . header . alg ,
142
+ kid : sig . header . kid
143
+ } ) ) ;
165
144
}
145
+ return algKey . then ( function ( k ) {
146
+ if ( ! k ) {
147
+ return Promise . reject ( new Error ( "key does not match" ) ) ;
148
+ }
149
+ sig . key = k ;
150
+ return sig ;
151
+ } ) ;
166
152
} ) ;
167
- return Promise . all ( processing ) . then ( function ( ) {
168
- // don't actually care about individual handler results
169
- // assume {sig} is updated
170
- return sig ;
153
+
154
+ // process any prepare-verify handlers
155
+ p = p . then ( function ( sig ) {
156
+ var processing = [ ] ;
157
+ handlerKeys . forEach ( function ( h ) {
158
+ h = extraHandlers [ h ] ;
159
+ var p ;
160
+ if ( "function" === typeof h ) {
161
+ p = h ( sig ) ;
162
+ } else if ( "object" === typeof h && "function" === typeof h . prepare ) {
163
+ p = h . prepare ( sig ) ;
164
+ }
165
+ if ( p ) {
166
+ processing . push ( Promise . resolve ( p ) ) ;
167
+ }
168
+ } ) ;
169
+ return Promise . all ( processing ) . then ( function ( ) {
170
+ // don't actually care about individual handler results
171
+ // assume {sig} is updated
172
+ return sig ;
173
+ } ) ;
171
174
} ) ;
172
- } ) ;
173
175
174
- // prepare verify inputs
175
- p = p . then ( function ( sig ) {
176
- var aad = sig . aad || "" ,
177
- payload = sig . payload || "" ;
178
- var content = new Buffer ( 1 + aad . length + payload . length ) ,
179
- pos = 0 ;
180
- content . write ( aad , pos , "ascii" ) ;
181
- pos += aad . length ;
182
- content . write ( "." , pos , "ascii" ) ;
183
- pos ++ ;
176
+ // prepare verify inputs
177
+ p = p . then ( function ( sig ) {
178
+ var aad = sig . aad || "" ,
179
+ payload = sig . payload || "" ;
180
+ var content = new Buffer ( 1 + aad . length + payload . length ) ,
181
+ pos = 0 ;
182
+ content . write ( aad , pos , "ascii" ) ;
183
+ pos += aad . length ;
184
+ content . write ( "." , pos , "ascii" ) ;
185
+ pos ++ ;
184
186
185
- if ( Buffer . isBuffer ( payload ) ) {
186
- payload . copy ( content , pos ) ;
187
- } else {
188
- content . write ( payload , pos , "binary" ) ;
189
- }
190
- sig . content = content ;
191
- return sig ;
192
- } ) ;
193
-
194
- p = p . then ( function ( sig ) {
195
- return sig . key . verify ( sig . header . alg ,
196
- sig . content ,
197
- sig . signature ) ;
198
- } ) ;
187
+ if ( Buffer . isBuffer ( payload ) ) {
188
+ payload . copy ( content , pos ) ;
189
+ } else {
190
+ content . write ( payload , pos , "binary" ) ;
191
+ }
192
+ sig . content = content ;
193
+ return sig ;
194
+ } ) ;
199
195
200
- p = p . then ( function ( result ) {
201
- var payload = sig . payload ;
202
- payload = base64url . decode ( payload ) ;
203
- return {
204
- protected : sig . protected ,
205
- header : sig . header ,
206
- payload : payload ,
207
- signature : result . mac ,
208
- key : sig . key
209
- } ;
210
- } ) ;
196
+ p = p . then ( function ( sig ) {
197
+ return sig . key . verify ( sig . header . alg ,
198
+ sig . content ,
199
+ sig . signature ) ;
200
+ } ) ;
211
201
212
- // process any post-verify handlers
213
- p = p . then ( function ( jws ) {
214
- var processing = [ ] ;
215
- handlerKeys . forEach ( function ( h ) {
216
- h = extraHandlers [ h ] ;
217
- var p ;
218
- if ( "object" === typeof h && "function" === typeof h . complete ) {
219
- p = h . complete ( jws ) ;
220
- }
221
- if ( p ) {
222
- processing . push ( Promise . resolve ( p ) ) ;
223
- }
202
+ p = p . then ( function ( result ) {
203
+ var payload = sig . payload ;
204
+ payload = base64url . decode ( payload ) ;
205
+ return {
206
+ protected : sig . protected ,
207
+ header : sig . header ,
208
+ payload : payload ,
209
+ signature : result . mac ,
210
+ key : sig . key
211
+ } ;
224
212
} ) ;
225
- return Promise . all ( processing ) . then ( function ( ) {
226
- // don't actually care about individual handler results
227
- // assume {jws} is updated
228
- return jws ;
213
+
214
+ // process any post-verify handlers
215
+ p = p . then ( function ( jws ) {
216
+ var processing = [ ] ;
217
+ handlerKeys . forEach ( function ( h ) {
218
+ h = extraHandlers [ h ] ;
219
+ var p ;
220
+ if ( "object" === typeof h && "function" === typeof h . complete ) {
221
+ p = h . complete ( jws ) ;
222
+ }
223
+ if ( p ) {
224
+ processing . push ( Promise . resolve ( p ) ) ;
225
+ }
226
+ } ) ;
227
+ return Promise . all ( processing ) . then ( function ( ) {
228
+ // don't actually care about individual handler results
229
+ // assume {jws} is updated
230
+ return jws ;
231
+ } ) ;
229
232
} ) ;
230
- } ) ;
231
- p . then ( resolve , processSig ) ;
232
- } ;
233
- processSig ( ) ;
233
+ p . then ( resolve , processSig ) ;
234
+ } ;
235
+ processSig ( ) ;
236
+ } ) ;
234
237
} ) ;
235
-
236
238
return promise ;
237
239
}
238
240
} ) ;
0 commit comments