package com.webank.weid.service.impl;
import com.networknt.schema.ValidationMessage;
import com.webank.wedpr.common.Utils;
import com.webank.wedpr.selectivedisclosure.*;
import com.webank.wedpr.selectivedisclosure.proto.Predicate;
import com.webank.wedpr.selectivedisclosure.proto.VerificationRule;
import com.webank.weid.constant.*;
import com.webank.weid.constant.CredentialConstant.CredentialProofType;
import com.webank.weid.exception.DataTypeCastException;
import com.webank.weid.exception.WeIdBaseException;
import com.webank.weid.protocol.base.*;
import com.webank.weid.protocol.cpt.Cpt101;
import com.webank.weid.protocol.cpt.Cpt111;
import com.webank.weid.protocol.request.CreateCredentialPojoArgs;
import com.webank.weid.protocol.response.ResponseData;
import com.webank.weid.service.rpc.CptService;
import com.webank.weid.service.rpc.CredentialPojoService;
import com.webank.weid.service.rpc.WeIdService;
import com.webank.weid.suite.persistence.PersistenceFactory;
import com.webank.weid.suite.persistence.Persistence;
import com.webank.weid.suite.persistence.PersistenceType;
import com.webank.weid.util.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.math.BigInteger;
import java.util.*;
import java.util.stream.Collectors;
/**
* Service implementations for operations on CredentialPojo.
*
* @author tonychen 2019年4月17日
*/
public class CredentialPojoServiceImpl implements CredentialPojoService {
private static final Logger logger = LoggerFactory.getLogger(CredentialPojoServiceImpl.class);
private static final String NOT_DISCLOSED =
CredentialFieldDisclosureValue.NOT_DISCLOSED.getStatus().toString();
private static final String DISCLOSED =
CredentialFieldDisclosureValue.DISCLOSED.getStatus().toString();
private static final String EXISTED =
CredentialFieldDisclosureValue.EXISTED.getStatus().toString();
private static WeIdService weIdService;
private static CptService cptService;
private static Persistence dataDriver;
private static PersistenceType persistenceType;
//private static PdfTransportation pdfTransportation;
private static Persistence getDataDriver() {
String type = PropertyUtils.getProperty("persistence_type");
if (type.equals("mysql")) {
persistenceType = PersistenceType.Mysql;
} else if (type.equals("redis")) {
persistenceType = PersistenceType.Redis;
}
if (dataDriver == null) {
dataDriver = PersistenceFactory.build(persistenceType);
}
return dataDriver;
}
private static WeIdService getWeIdService() {
if (weIdService == null) {
weIdService = new WeIdServiceImpl();
}
return weIdService;
}
private static CptService getCptService() {
if (cptService == null) {
cptService = new CptServiceImpl();
}
return cptService;
}
/*private static PdfTransportation getPdfTransportation() {
if (pdfTransportation == null) {
pdfTransportation = new PdfTransportationImpl();
}
return pdfTransportation;
}*/
/**
* Salt generator. Automatically fillin the map structure in a recursive manner.
*
* @param map the passed map (claim, salt or alike)
* @param fixed fixed value if required to use
*/
public static void generateSalt(Map<String, Object> map, Object fixed) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
Object value = entry.getValue();
if (value instanceof Map) {
generateSalt((HashMap) value, fixed);
} else if (value instanceof List) {
boolean isMapOrList = generateSaltFromList((ArrayList<Object>) value, fixed);
if (!isMapOrList) {
if (fixed == null) {
addSalt(entry);
} else {
entry.setValue(fixed);
}
}
} else {
if (fixed == null) {
addSalt(entry);
} else {
entry.setValue(fixed);
}
}
}
}
private static void addSalt(Map.Entry<String, Object> entry) {
String salt = DataToolUtils.getRandomSalt();
entry.setValue(salt);
}
private static boolean generateSaltFromList(List<Object> objList, Object fixed) {
List<Object> list = (List<Object>) objList;
for (Object obj : list) {
if (obj instanceof Map) {
generateSalt((HashMap) obj, fixed);
} else if (obj instanceof List) {
boolean result = generateSaltFromList((ArrayList<Object>) obj, fixed);
if (!result) {
return result;
}
} else {
return false;
}
}
return true;
}
/**
* 校验claim、salt和disclosureMap的格式是否一致.
*/
private static boolean validCredentialMapArgs(Map<String, Object> claim,
Map<String, Object> salt, Map<String, Object> disclosureMap) {
//检查是否为空
if (claim == null || salt == null || disclosureMap == null) {
return false;
}
//检查每个map里的key个数是否相同
if (!claim.keySet().equals(salt.keySet())) {
return false;
}
//检查key值是否一致
for (Map.Entry<String, Object> entry : disclosureMap.entrySet()) {
String k = entry.getKey();
Object v = entry.getValue();
//如果disclosureMap中的key在claim中没有则返回false
if (!claim.containsKey(k)) {
return false;
}
Object saltV = salt.get(k);
Object claimV = claim.get(k);
if (v instanceof Map) {
//递归检查
if (!validCredentialMapArgs((HashMap) claimV, (HashMap) saltV, (HashMap) v)) {
return false;
}
} else if (v instanceof List) {
if (!validCredentialListArgs(
(ArrayList<Object>) claimV,
(ArrayList<Object>) saltV,
(ArrayList<Object>) v
)) {
return false;
}
}
}
return true;
}
private static boolean validCredentialListArgs(
List<Object> claimList,
List<Object> saltList,
List<Object> disclosureList) {
//检查是否为空
if (claimList == null || saltList == null || disclosureList == null) {
return false;
}
if (claimList.size() != saltList.size()) {
return false;
}
for (int i = 0; i < disclosureList.size(); i++) {
Object disclosureObj = disclosureList.get(i);
Object claimObj = claimList.get(i);
Object saltObj = saltList.get(i);
if (disclosureObj instanceof Map) {
boolean result =
validCredentialListArgs(
claimList,
saltList,
(HashMap) disclosureObj
);
if (!result) {
return result;
}
} else if (disclosureObj instanceof List) {
boolean result =
validCredentialListArgs(
(ArrayList<Object>) claimObj,
(ArrayList<Object>) saltObj,
(ArrayList<Object>) disclosureObj
);
if (!result) {
return result;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
WeIdentity-develop.zip

共367个文件
java:236个
json:25个
sh:11个

13 浏览量
2023-03-25
16:12:31
上传
评论
收藏 5.07MB ZIP 举报
温馨提示
基于区块链实现的符合W3C DID和Verifiable Credential规范的分布式身份解决方案。
资源推荐
资源详情
资源评论












收起资源包目录





































































































共 367 条
- 1
- 2
- 3
- 4
资源评论


m0_72731342
- 粉丝: 1
- 资源: 1833
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
