PSS填充过程:
需要准备:
- Hash 函数:输出长度为hLen字节的摘要函数;
- MGF :掩码产生函数;
- 随机数生成函数(可选,用于生成salt,salt长度用sLen表示,由密钥模长和摘要算法结果长度决定,sLen最大长度:sLen = nLen-hLen-2,(2代表最后的0xbc和padding2的0x01);
- emBits 至少8hLen + 8sLen + 9(9的含义0xBC 8位,另外一位是至少还应该包含一个字节)
参数:
emLen EM 的字节长度 = emBits / 8 向上取整;
填充padding1固定8字节0x00;
填充padding2若干个0x00后面跟着一个0x01;其长度为至少为1字节(0x01);
dbMask、DB长度一致:(emLen - sLen - hLen - 1)字节,(1代表最后的0xbc);
填充生成过程:
- 生成消息M 的Hash值,mHash = Hash(M)
- 生成伪随机字节串作为salt,得到M’= padding1|| mHash || salt 的数据块,M’长度
- 生成M’ 的Hash值,H = Hash(M’)
- 构造数据块DB = padding2|| salt
- 计算H 的MGF值:dbMask = MGF(H, emLen - hLen - 1)
- 计算maskedDB = DB xor dbMask
- 将maskedDB 的最左8*emLen - emBits设为0
- EM = maskedDB || H || 0xbc