...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package xap
18
19 import (
20 "io"
21 "os"
22
23 "github.com/sassoftware/relic/lib/certloader"
24 "github.com/sassoftware/relic/lib/magic"
25 "github.com/sassoftware/relic/lib/signxap"
26 "github.com/sassoftware/relic/signers"
27 "github.com/sassoftware/relic/signers/zipbased"
28 )
29
30
31
32 var XapSigner = &signers.Signer{
33 Name: "xap",
34 Magic: magic.FileTypeXAP,
35 CertTypes: signers.CertTypeX509,
36 Transform: zipbased.Transform,
37 Sign: sign,
38 Verify: verify,
39 }
40
41 func init() {
42 signers.Register(XapSigner)
43 }
44
45 func sign(r io.Reader, cert *certloader.Certificate, opts signers.SignOpts) ([]byte, error) {
46 digest, err := signxap.DigestXapTar(r, opts.Hash, false)
47 if err != nil {
48 return nil, err
49 }
50 patch, sig, err := digest.Sign(opts.Context(), cert)
51 if err != nil {
52 return nil, err
53 }
54 opts.Audit.SetCounterSignature(sig.CounterSignature)
55 return opts.SetBinPatch(patch)
56 }
57
58 func verify(f *os.File, opts signers.VerifyOpts) ([]*signers.Signature, error) {
59 size, err := f.Seek(0, io.SeekEnd)
60 sig, err := signxap.Verify(f, size, opts.NoDigests)
61 if err != nil {
62 return nil, err
63 }
64 return []*signers.Signature{&signers.Signature{
65 Hash: sig.Hash,
66 X509Signature: &sig.TimestampedSignature,
67 }}, nil
68 }
69
View as plain text