MCPcopy Create free account
hub / github.com/LanceLRQ/deer-executor / validateProblemPackage

Function validateProblemPackage

common/persistence/problems/reader_deer.go:89–126  ·  view source on GitHub ↗

校验判题结果数据包

(pack *ProblemPackage)

Source from the content-addressed store, hash-verified

87
88// 校验判题结果数据包
89func validateProblemPackage(pack *ProblemPackage) error {
90 // 打开临时文件
91 tmpBodyFile, err := os.Open(pack.BodyPackageFile)
92 if err != nil {
93 return errors.Errorf("open body package temp file error: %s", err.Error())
94 }
95 defer tmpBodyFile.Close()
96
97 hash, err := persistence.SHA256Streams([]io.Reader{
98 bytes.NewReader(pack.Configs),
99 tmpBodyFile,
100 })
101 if err != nil {
102 return err
103 }
104 // 进行签名校验
105 if pack.CertSize > 0 {
106 // Read GPG Keys
107 elist, err := openpgp.ReadArmoredKeyRing(bytes.NewReader(pack.Certificate))
108 if err != nil {
109 return err
110 }
111 if len(elist) < 1 {
112 return errors.Errorf("GPG key error")
113 }
114 publicKey := elist[0].PrimaryKey.PublicKey.(*rsa.PublicKey)
115 err = persistence.RSA2048Verify(hash, pack.Signature, publicKey)
116 if err != nil {
117 return err
118 }
119 } else {
120 isOk := reflect.DeepEqual(hash, pack.Signature)
121 if !isOk {
122 return errors.Errorf("validate package signature error")
123 }
124 }
125 return nil
126}
127
128func readProblemPackage(problemFile string, unpack bool) (*ProblemPackage, error) {
129 fp, err := os.Open(problemFile)

Callers 1

Calls 4

SHA256StreamsFunction · 0.92
RSA2048VerifyFunction · 0.92
ErrorfMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected