-
Notifications
You must be signed in to change notification settings - Fork 8
/
rpm_signature.go
46 lines (38 loc) · 1.19 KB
/
rpm_signature.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package pack
import (
"fmt"
"os"
"github.com/tarantool/tt/cli/util"
)
// genSignature generates the signature for rpm.
func genSignature(rpmBodyFilePath, rpmHeaderFilePath, cpioPath string) (*rpmTagSetType, error) {
// SHA1
sha1, err := util.FileSHA1Hex(rpmHeaderFilePath)
if err != nil {
return nil, fmt.Errorf("failed to get header sha1: %s", err)
}
// SIG_SIZE
rpmBodyFileInfo, err := os.Stat(rpmBodyFilePath)
if err != nil {
return nil, fmt.Errorf("failed to get RPM body size: %s", err)
}
rpmBodyFileSize := rpmBodyFileInfo.Size()
// PAYLOADSIZE
cpioFileInfo, err := os.Stat(cpioPath)
if err != nil {
return nil, fmt.Errorf("failed to get CPIO payload size: %s", err)
}
cpioSize := cpioFileInfo.Size()
// MD5
md5, err := util.FileMD5(rpmBodyFilePath)
if err != nil {
return nil, fmt.Errorf("failed to get RPM body MD5: %s", err)
}
signature := rpmTagSetType{
{ID: signatureTagSHA1, Type: rpmTypeString, Value: sha1},
{ID: signatureTagSize, Type: rpmTypeInt32, Value: []int32{int32(rpmBodyFileSize)}},
{ID: signatureTagPayloadSize, Type: rpmTypeInt32, Value: []int32{int32(cpioSize)}},
{ID: signatureTagMD5, Type: rpmTypeBin, Value: md5},
}
return &signature, nil
}