Skip to content

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
}

Clone this wiki locally