Go 代码测试覆盖度

在 Go 语言中,本身提供了一些命令来展示代码的覆盖度,我们可以通过执行这些命令来查看哪些语句被测试覆盖到了,哪些没有,进而可以编写更多的 case 来提高代码的覆盖度。

执行下面的命令,可以得出项目里面所有 package 的覆盖度

1
go test ./... -cover
阅读更多

SPHINCS

SPHINCS 于 2015 年由 Bernstein, Daniel J., Daira Hopwood, Andreas Hülsing 等人提出,具体的论文见 SPHINCS: practical stateless hash-based signatures

SPHINCS 是一个无状态的签名系统。有状态指的是每次签名时需要记录系统的信息,比如是第几次签名,在验证的时候需要使用该参数,而无状态的签名系统则不需要保存这些信息。相对于有状态的签名系统,无状态的签名系统不需要记录签名的状态,符合标准的 API 且方便在不同主机上移植,无状态的签名系统是更好的选择。

SPNHICS 基于多种签名算法,比如 WOTS+, HORST 等,如果不了解相关内容,建议先参考之前的文章。

阅读更多

cargo 中的语义版本控制系统

Cargo 和其他很多工具一样,遵循语义版本控制系统,程序库以

$$\text{major.minor.patch}$$

格式指定,其中

  • major:项目进行重大更新,且包含不向后兼容的功能
  • minor:仅在以向后兼容的方式添加新功能
  • patch:仅在以向后兼容的方式修复错误,并且没有添加任何新的功能
阅读更多

WOTS+

本文建立在 WOTS 签名系统基础上,若还尚不熟悉该签名系统,可参考另一篇文章 Winternitz One Time Signature,论文见 W-OTS+ – Shorter Signatures for Hash-Based Signature Schemes,该算法产生的一对密钥只能签名一条消息。

下面按照 $(GEN, SIG, VER)$ 三元组描述该算法。

密钥生成($GEN$)

$$(pk, sk) \leftarrow GEN(1^k)$$

首先,我们需要确定 $w$ 参数该参数决定哈希私钥多少次构造公钥,此外还需确定哈希之后摘要的长度 $m$ ,或者可以认为是采用的哈希函数族,$n$ 为其他哈希值长度。

阅读更多

HORS with trees (HORST)

HORST 属于 FTS,由 HORS 改进而来,相比较 HORS 而言,牺牲了运行时间,但是减少了公钥的大小,同时算法中引入了掩码的计算。

HORST 中的公钥是二叉哈希树 (binary hash tree) 的根节点,叶子节点是 HOSR 公钥的 $(t=2^\tau)$ 个 $block$ 。

本文的介绍建立在 HORS 之上,若还尚未了解 HORS 签名系统机制,可以参考另一篇文章 Hash to Obtain Random Subset (HORS),此外,提出 HORST 的论文见 SPHINCS: practical stateless hash-based signatures

阅读更多