Skip to content

Result Package

lanrongqi edited this page Feb 7, 2021 · 2 revisions

结果数据包

WeJudge支持评测回放功能,需要保存运行数据。通常评测一次,硬盘上便多了一堆零碎文件。故需要把他们整合到一起,便于存储和管理。另外,回放目的是为了看哪些数据没过,为了不浪费存储空间,默认情况下以AC的测试数据是不保存的。

数据结构

------------------------
|MAG|VER|CMP|RSZ|BSZ|CSZ| Certificate |SSZ| Signature | Result | Body
------------------------
| 2 | 1 | 1 | 4 | 4 | 2 | ... | 2 | ...
------------------------

MAG          魔术数 (0xB540)
VER          数据包版本
CMP          Body压缩方式(0-禁用压缩;1-gzip;默认是1)
RSZ          结果信息长度
BSZ          Body信息长度
CSZ          公钥证书长度
SSZ          签名长度
Certificate  证书内容
Signature    签名内容,算法:SHA256(Result+Body)
Result       结果信息内容
Body         Body内容,主要是每个测试数据的运行后的out文件那些
type JudgeResultPackage struct {
    Version         uint8  // (VER) Package Version
    CompressorType  uint8  // (CMP) Compressor type: 0-disabled; 1-gzip
    ResultSize      uint32 // (RSZ) Result JSON Text Size
    BodySize        uint32 // (BSZ) Result Body Size
    CertSize        uint16 // (CSZ) Public Certificate Size
    SignSize        uint16 // (SSZ) Signature Size
    Certificate     []byte // Public Certificate
    Signature       []byte // Signature: SHA256(Result + Body)
    Result          []byte // Result JSON
    BodyPackageFile string // Body package file (内部成员,不输出)
}

Clone this wiki locally