阅读此文,需要具备一定的DID数字身份体系专业知识。
上文中已经深度解析了VP的签发过程,本文将着重探讨VP验证过程。
1、基础参数校验、格式校验以及参数封装
//获取presentation即VP
presentationENode = functionArgNode.get(WeIdentityParamKeyConstant.PRESENTATION);
//获取可披露策略
presentationPolicyENode = functionArgNode.get(WeIdentityParamKeyConstant.PRESENTATION_POLICY_E);
//获取签发者weid(presentationWeid)
weidNode = functionArgNode.get(WeIdentityParamKeyConstant.PRESENTATION_WEID);
2、解析VP
3、生成动态挑战
基于weid和当前时间戳生成挑战码,这一步和生成vp里面的挑战码是一样的,指定一个随机的字母数字nonce, WeIdentity DID所有者将签署一个包含nonce的凭证,以证明该WeIdentity DID的所有权。依赖方应在挑战中包含随机字母数字(即nonce),以防止重放攻击。这也被称为动态挑战。
challenge = Challenge.create(weid, String.valueOf(System.currentTimeMillis()));
入参为weid和当前时间的毫秒时间戳
challenge = Challenge.create(WeId, currentTimeMillis)
这里的seed就是currentTimeMillis
生成随机种子=当前时间戳+uuid(字符串拼接)
String randomSeed = seed + DataToolUtils.getUuId32()
字符集将此randomSeed编码为字节序列,生成新的字节数组存储到Seed中。
random.setSe