package hamaster.gradesign.idmgmt.impl;
import hamaster.gradesgin.ibe.IBESystemParameter;
import hamaster.gradesgin.ibe.core.IBEEngine;
import hamaster.gradesgin.ibs.IBSCertificate;
import hamaster.gradesgin.util.Hash;
import hamaster.gradesign.IBESystem;
import hamaster.gradesign.SecureConstraints;
import hamaster.gradesign.entity.IBESystemEntity;
import hamaster.gradesign.ibe.util.Hex;
import hamaster.gradesign.idmgmt.IBESystemBean;
import hamaster.gradesign.idmgmt.IBESystemBeanLocal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
/**
* IBESystemBeanImpl
*/
@Stateless(mappedName = "IBESystemBean")
public class IBESystemBeanImpl extends CommonDAOImpl implements IBESystemBean, IBESystemBeanLocal {
public IBESystemBeanImpl() {
}
/*
* (non-Javadoc)
* @see hamaster.gradesign.idmgmt.IBESystemBean#list(int, int)
*/
@Override
public Map<Integer, String> list(int page, int amount) {
EntityManager manager = factory.createEntityManager();
CriteriaBuilder cb = manager.getCriteriaBuilder();
CriteriaQuery<IBESystemEntity> query = cb.createQuery(IBESystemEntity.class);
query.from(IBESystemEntity.class);
List<IBESystemEntity> systems = manager.createQuery(query)
.setFirstResult(page * amount)
.setMaxResults(amount).getResultList();
Map<Integer, String> results = new HashMap<Integer, String>((int) (systems.size() * 1.4));
for (IBESystemEntity system : systems)
results.put(system.getSystemId(), system.getSystemOwner());
return results;
}
/*
* (non-Javadoc)
* @see hamaster.gradesign.idmgmt.IBESystemBean#totalSystems()
*/
@Override
public int totalSystems() {
EntityManager manager = factory.createEntityManager();
String jpql = "select count(s) as syscounts from IBESystemEntity s";
Query query = manager.createQuery(jpql);
Integer syscounts = (Integer) query.getSingleResult();
return syscounts.intValue();
}
@Override
public void generateDemoSystem() {
String owner = "IBE_SERVER";
String pairing = "type a q 8780710799663312522437781984754049815806883199414208211028653399266475630880222957078625179422662221423155858769582317459277713367317481324925129998224791 h 12016012264891146079388821366740534204802954401251311822919615131047207289359704531102844802183906537786776 r 730750818665451621361119245571504901405976559617 exp2 159 exp1 107 sign1 1 sign0 1 ";
IBESystemParameter systemParameter = IBEEngine.setup(pairing.getBytes());
IBSCertificate fake = new IBSCertificate();
fake.setPublicParameter(systemParameter.getPublicParameter());
IBSCertificate certificate = IBEEngine.generateCertificate(owner, fake, new Date(), Integer.MAX_VALUE);
IBESystem system = new IBESystem();
byte[] keyIV = new byte[SecureConstraints.IV_LENGTH_IN_BYTES + SecureConstraints.KEY_LENGTH_IN_BYTES];
byte[] key = Hash.sha256(getSystemAccessPassword(0));
byte[] iv = Hash.md5(getSystemAccessPassword(0));
System.arraycopy(key, 0, keyIV, 0, key.length);
System.arraycopy(iv, 0, keyIV, key.length, iv.length);
system.setCryptionKeyAndIV(keyIV);
system.setCertificate(certificate);
system.setParameter(systemParameter);
IBESystemEntity entity = new IBESystemEntity();
entity.setSystem(system);
entity.setSystemOwner(owner);
entity.setSystemKeyHash(Hex.hex(Hash.sha1(getSystemAccessPassword(0))));
save(entity);
}
}