@@ -64,7 +64,7 @@ func main() {
64
64
var (
65
65
userid , pass , data , hash , url , infile , outfile , outkeyfile , keyid , cn , pk7digest , rootPath , verificationTimeInput string
66
66
iter , maxworkers , sa int
67
- debug bool
67
+ debug , noVerify bool
68
68
err error
69
69
requests []formats.SignatureRequest
70
70
algs coseAlgs
@@ -140,13 +140,14 @@ examples:
140
140
flag .Var (& algs , "c" , "a COSE Signature algorithm to sign an XPI with can be used multiple times" )
141
141
flag .StringVar (& pk7digest , "pk7digest" , "" , "an optional PK7 digest algorithm to use for XPI file signing, either 'sha1' (default) or 'sha256'." )
142
142
flag .StringVar (& rootPath , "r" , "/path/to/root.pem" , "Path to a PEM file of root certificates" )
143
- flag .StringVar (& verificationTimeInput , "vt" , "" , "Time to verify XPI signatures at in RFC3339 format. Defaults to time.Now()." )
143
+ flag .StringVar (& verificationTimeInput , "vt" , "" , "Time to verify XPI signatures at in RFC3339 format. Defaults to at client invokation + 1 minute to account for time to transfer and sign the XPI" )
144
+ flag .BoolVar (& noVerify , "noverify" , false , "Skip verifying successful responses. Default false." )
144
145
145
146
flag .BoolVar (& debug , "D" , false , "debug logs: show raw requests & responses" )
146
147
flag .Parse ()
147
148
148
149
if verificationTimeInput == "" {
149
- verificationTime = time .Now ()
150
+ verificationTime = time .Now (). UTC (). Add ( time . Minute )
150
151
if debug {
151
152
fmt .Printf ("Using default verification time: %q\n " , verificationTime )
152
153
}
@@ -279,7 +280,9 @@ examples:
279
280
)
280
281
switch response .Type {
281
282
case contentsignature .Type :
282
- sigStatus = verifyContentSignature (input , response , req .URL .RequestURI ())
283
+ if ! noVerify {
284
+ sigStatus = verifyContentSignature (input , response , req .URL .RequestURI ())
285
+ }
283
286
sig , err := csigverifier .Unmarshal (response .Signature )
284
287
if err != nil {
285
288
log .Fatal (err )
@@ -293,7 +296,9 @@ examples:
293
296
sigStr += sig .Mode + "=" + response .Signature + "\n "
294
297
sigData = []byte (sigStr )
295
298
case xpi .Type :
296
- sigStatus = verifyXPI (input , request , response , reqType , roots , verificationTime )
299
+ if ! noVerify {
300
+ sigStatus = verifyXPI (input , request , response , reqType , roots , verificationTime )
301
+ }
297
302
switch reqType {
298
303
case requestTypeData :
299
304
sigData , err = base64 .StdEncoding .DecodeString (response .Signature )
@@ -310,33 +315,43 @@ examples:
310
315
if err != nil {
311
316
log .Fatal (err )
312
317
}
313
- sigStatus = verifyAPK2 (sigData )
318
+ if ! noVerify {
319
+ sigStatus = verifyAPK2 (sigData )
320
+ }
314
321
case mar .Type :
315
- sigStatus = verifyMAR (input )
322
+ if ! noVerify {
323
+ sigStatus = verifyMAR (input )
324
+ }
316
325
sigData , err = base64 .StdEncoding .DecodeString (response .SignedFile )
317
326
if err != nil {
318
327
log .Fatal (err )
319
328
}
320
329
case genericrsa .Type :
321
- err = genericrsa .VerifyGenericRsaSignatureResponse (input , response )
322
- if err != nil {
323
- log .Fatal (err )
330
+ if ! noVerify {
331
+ err = genericrsa .VerifyGenericRsaSignatureResponse (input , response )
332
+ if err != nil {
333
+ log .Fatal (err )
334
+ }
335
+ sigStatus = true
324
336
}
325
- sigStatus = true
326
337
sigData , err = base64 .StdEncoding .DecodeString (response .Signature )
327
338
if err != nil {
328
339
log .Fatal (err )
329
340
}
330
341
case gpg2 .Type :
331
- sigStatus = verifyPGP (input , response .Signature , response .PublicKey )
342
+ if ! noVerify {
343
+ sigStatus = verifyPGP (input , response .Signature , response .PublicKey )
344
+ }
332
345
sigData = []byte (response .Signature )
333
346
default :
334
347
log .Fatalf ("unsupported signature type: %s" , response .Type )
335
348
}
336
- if sigStatus {
337
- log .Printf ("signature %d from signer %q passes" , i , response .SignerID )
338
- } else {
339
- log .Fatalf ("response %d from signer %q does not pass!" , i , response .SignerID )
349
+ if ! noVerify {
350
+ if sigStatus {
351
+ log .Printf ("signature %d from signer %q passes" , i , response .SignerID )
352
+ } else {
353
+ log .Fatalf ("response %d from signer %q does not pass!" , i , response .SignerID )
354
+ }
340
355
}
341
356
if outfile != "" {
342
357
err = ioutil .WriteFile (outfile , sigData , 0644 )
0 commit comments