...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package apk
18
19 import (
20 "io"
21
22 "github.com/pkg/errors"
23 "github.com/sassoftware/relic/lib/certloader"
24 "github.com/sassoftware/relic/lib/magic"
25 "github.com/sassoftware/relic/signers"
26 "github.com/sassoftware/relic/signers/zipbased"
27 )
28
29
30
31 var ApkSigner = &signers.Signer{
32 Name: "apk",
33 Magic: magic.FileTypeAPK,
34 CertTypes: signers.CertTypeX509,
35 Transform: zipbased.Transform,
36 Sign: sign,
37 Verify: verify,
38 }
39
40 const (
41 sigMagic = "APK Sig Block 42"
42 sigApkV2 = 0x7109871a
43
44 directoryEndSignature = 0x06054b50
45 directoryEndLen = 22
46 )
47
48 var (
49 errMalformed = errors.New("malformed APK signing block")
50 errTruncated = errors.New("truncated APK signing block sequence")
51 )
52
53 func init() {
54 signers.Register(ApkSigner)
55 }
56
57 func sign(r io.Reader, cert *certloader.Certificate, opts signers.SignOpts) ([]byte, error) {
58 digest, err := digestApkStream(r, opts.Hash)
59 if err != nil {
60 return nil, err
61 }
62 patchset, err := digest.Sign(cert)
63 if err != nil {
64 return nil, err
65 }
66 return opts.SetBinPatch(patchset)
67 }
68
View as plain text