OAEP填充过程:
需要准备:
- Hash 函数:输出长度为hLen字节的摘要函数;
- MGF :掩码产生函数;
- 随机数生成函数(用于生成seed,seed长度和hLen相同
- RSA密钥对模长k bytes
- 明文最大长度mLen小于等于k – 2hLen – 2(2hLen=seedLen+lHash, 2: 00 and 01)
- lHash为L, L为可选标识,如果L为空时,取空值HASH;
填充生成过程:
- L长度判断,不能超出限制(比如261 – 1 octets for SHA-1);
- 如果mLen > k – 2hLen – 2,报错;
- L为可选标识,如果L为空时,取空值HASH,结果为lHash;
- 产生PS,PS长度k – mLen – 2hLen – 2(2hLen=seedLen+lHash, 2: 00 and 01, mLen 明文长度);
- 计算DB = lHash || PS || 0x01 || M
- 产生随机seed,长度为hLen;
- 计算dbMask = MGF (seed, k – hLen – 1), 其中k为模长、hLen为seed长度,1为00l;
- 计算maskedDB = DB 异或 dbMask
- 计算seedMask = MGF (maskedDB, hLen);
- 计算maskedSeed = seed 异或 seedMask;
- EM = 0x00 || maskedSeed || maskedDB