-
Notifications
You must be signed in to change notification settings - Fork 12
Problem Package
lanrongqi edited this page Feb 7, 2021
·
2 revisions
一直以来我们存储题目数据的方式都是直接在文件系统存储题目配置JSON和测试数据文件等的。v2判题机设计上是希望能够在没有OJ参与的情况下进行一次完整的评测,为此设计了一套自己的文件数据结构。
-
不要吐槽为啥我没有直接用ZIP,因为闲的蛋疼+装逼 =3=....
-
以后会支持一下zip版本的试题包,来兼容WeJudge那边的题目打包
-
到时爱用哪个用哪个吧,不强制要求
-
提高造假成本(确信脸.jpg)
题目包的操作代码在deer-common内
------------------------
|MAG|VER|CMT|CSZ|BSZ|PCSZ| Certificate |SSZ| Signature | Config | Body
------------------------
| 2 | 2 | 4 | 4 | 4 | 2 | ... | 2 | ...
------------------------
MAG 魔术数(0x1319)
VER 题目包版本
CMT CommitID
CSZ 配置信息长度
BSZ Body信息长度
PCSZ 公钥证书长度
SSZ 签名长度
Certificate 证书内容
Signature 签名内容,算法:SHA256(Configs+Body)
Configs 配置内容
Body Body内容,一般是题目的测试数据、特判源代码那些
type ProblemPackage struct {
Version uint16 // (VER) Package Version
CommitVersion uint32 // (CMT) Commit Version
ConfigSize uint32 // (CSZ) Config JSON Text Size
BodySize uint32 // (BSZ) Result Body Size
CertSize uint16 // (PCSZ) Public Certificate Size
SignSize uint16 // (SSZ) Signature Size
Certificate []byte // Public Certificate
Signature []byte // Signature: SHA256(Result + Body)
Configs []byte // Configs JSON
BodyPackageFile string // Body package file
}© 2018 - 2021 LanceLRQ,All rights reserved.