package at.gv.util.demo; import iaik.security.ecc.interfaces.ECDSAParams; import iaik.security.ecc.interfaces.ECDSAPublicKey; import iaik.security.ecc.math.ecgroup.AffineCoordinate; import iaik.security.ecc.math.ecgroup.ECPoint; import iaik.security.ecc.provider.ECCProvider; import iaik.x509.X509Certificate; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.security.InvalidKeyException; import java.security.PublicKey; import java.security.cert.CertificateException; import java.security.interfaces.DSAParams; import java.security.interfaces.DSAPublicKey; import java.security.interfaces.ECPublicKey; import java.security.interfaces.RSAPublicKey; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.TimeZone; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import javax.xml.transform.TransformerException; import org.apache.cxf.common.util.Base64Utility; import org.apache.cxf.helpers.IOUtils; import org.w3c.dom.Element; import at.gv.util.BpkUtil; import at.gv.util.DOMUtils; import at.gv.util.MiscUtil; import at.gv.util.client.szr.SZRClient; import at.gv.util.client.ur_V5.URClient; import at.gv.util.client.ur_V5.URClient.URSearchResult; import at.gv.util.client.ur_V5.URClientException; import at.gv.util.config.EgovUtilPropertiesConfiguration; import at.gv.util.data.BPK; import at.gv.util.ex.EgovUtilException; import at.gv.util.wsdl.szr.SZRException; import at.gv.util.xsd.szr.GetIdentityLink; import at.gv.util.xsd.szr.IdentityLinkType; import at.gv.util.xsd.szr.PersonInfoType; import at.gv.util.xsd.szr.TravelDocumentType; import at.gv.util.xsd.szr.ecdsa.DomainParamsType; import at.gv.util.xsd.szr.ecdsa.ECDSAKeyValueType; import at.gv.util.xsd.szr.ecdsa.ECPointType; import at.gv.util.xsd.szr.ecdsa.NamedCurveType; import at.gv.util.xsd.szr.ecdsa.PrimeFieldElemType; import at.gv.util.xsd.szr.persondata.DeliveryAddressType; import at.gv.util.xsd.szr.persondata.IdentificationType; import at.gv.util.xsd.szr.persondata.PersonNameType; import at.gv.util.xsd.szr.persondata.PhysicalPersonType; import at.gv.util.xsd.szr.persondata.PostalAddressType; import at.gv.util.xsd.szr.xmldsig.DSAKeyValueType; import at.gv.util.xsd.szr.xmldsig.KeyValueType; import at.gv.util.xsd.szr.xmldsig.RSAKeyValueType; import at.gv.util.xsd.ur_V5.pd.NichtNatuerlichePersonTyp; public class Clienttests { public static String XFN_NAME = "Firmenbuchnummer"; public static String XFN_VALUE = "urn:publicid:gv.at:baseid+XFN"; public static String XFN_URT = "FBN"; public static String XZVR_NAME = "ZVR-Zahl"; public static String XZVR_VALUE = "urn:publicid:gv.at:baseid+XZVR"; public static String XZVR_URT = "ZVR"; public static String XERSB_NAME = "ERsB Ordnungsnummer"; public static String XERSB_VALUE = "urn:publicid:gv.at:baseid+XERSB"; public static String XERSB_URT = "ERJ"; public static List UR_TYPES = Arrays.asList(XFN_URT, XZVR_URT, XERSB_URT); public static HashSet ERSB_KEYS = new HashSet(); public static final String SSPIN_PREFIX = "urn:publicid:gv.at:cdid+"; private final static byte[] DEFAULT_PUBL_KEY = new byte[] {48, -127, -97, 48, 13, 6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 1, 5, 0, 3, -127, -115, 0, 48, -127, -119, 2, -127, -127, 0, -106, 114, -113, -1, -84, 116, 35, 3, 70, -81, 81, -110, -10, -59, 114, 4, -109, 86, 127, -50, 125, 47, 4, 80, 79, 53, 117, -36, 15, -16, -61, 110, 39, 89, 29, -43, 37, -127, 80, -109, -38, 65, 125, -119, 44, -111, -21, 47, -98, 38, -112, -24, 107, -110, 17, -10, 51, -4, -36, -72, -28, -18, -14, 117, -67, 76, -31, 32, 92, 104, -21, 68, 31, -12, 30, -104, -104, 42, -107, 126, 84, 50, 85, -117, 44, -100, -4, 102, -100, 52, -68, 77, -32, 9, -16, -30, -104, -90, 107, -88, 7, 97, -94, 72, -61, -40, 80, -112, -65, -25, -72, -19, -95, -54, 31, 15, 24, -105, 123, -81, 23, -123, 92, -103, -101, 47, 47, -105, 2, 3, 1, 0, 1}; public static final String DOCUMENT_TYPE = "ELEKTR_DOKUMENT"; public static final String ERnB_ISSUEDATE = "2014-01-01"; public static final String ERnB_ISSUINGAUTHORITY = "SZR-Gateway"; @SuppressWarnings("unused") public static void main(String[] args) throws IOException { String propertiesFileLocation = System.getProperty("mis.configuration"); if (propertiesFileLocation == null) { System.out.println("No system properties found. Cannot load default configuration."); throw new IOException("Cannot load default configuration. Please specify first mis.configuration location in system properties."); } File propertiesFile = new File(propertiesFileLocation); FileInputStream fis = new FileInputStream(propertiesFile); String configDir = propertiesFile.getParentFile().getAbsolutePath(); Properties props = new Properties(); props.load(fis); EgovUtilPropertiesConfiguration egovUtilConfiguration = new EgovUtilPropertiesConfiguration(props, configDir); ERSB_KEYS.add("136"); ERSB_KEYS.add("137"); ERSB_KEYS.add("138"); ERSB_KEYS.add("139"); ERSB_KEYS.add("140"); try { SZRClient szrClient = new SZRClient(egovUtilConfiguration); URClient urClient = new URClient(egovUtilConfiguration, UR_TYPES, ERSB_KEYS, false, true); PersonInfoType personInfo = new PersonInfoType(); PhysicalPersonType person = new PhysicalPersonType(); personInfo.setPerson(person); PersonNameType personName = new PersonNameType(); person.setName(personName ); IdentificationType id = new IdentificationType(); PostalAddressType address = new PostalAddressType(); // id.setType(SSPIN_PREFIX + "ZP"); // id.setValue("U/wThc0XOTZp9Tvsxrh8DhGTXsU="); // person.setIdentification(id); personName.setFamilyName("Lenz"); personName.setGivenName("Thomas"); person.setDateOfBirth("1982-09-06"); personName.setFamilyName("ALLMBlasznig ELGATest"); personName.setGivenName("Reinfried"); person.setDateOfBirth("1943-06-26"); personName.setFamilyName("Buxbaum"); personName.setGivenName("Georg"); person.setDateOfBirth("1964-10-09"); personName.setFamilyName("Eder"); personName.setGivenName("Michaela"); person.setDateOfBirth("1971-04-25"); // id.setType(SSPIN_PREFIX + "ZP"); // id.setValue("T2wnifoq7CJDyhhWod7+YiZilLA="); // person.setIdentification(id); // personName.setFamilyName("Buxbaum"); // personName.setGivenName("Doris"); // person.setDateOfBirth("1976-05-26"); // personName.setFamilyName("Lackner"); // personName.setGivenName("Christiane"); // person.setDateOfBirth("1965-04-22"); // personName.setFamilyName("Karning"); // personName.setGivenName("Bernhard"); // person.setDateOfBirth("1976-01-15"); // personName.setFamilyName("Müller"); // personName.setGivenName("Harald"); // person.setDateOfBirth("1964-10-30"); // personInfo.setRegularDomicile(address ); // address.setPostalCode("1130"); // personName.setFamilyName("Rudinger"); // personName.setGivenName("Franz"); // person.setDateOfBirth("1973-04-18"); // personName.setFamilyName("Pointner"); // personName.setGivenName("Johann"); //// person.setDateOfBirth("1954-07-07"); // personInfo.setRegularDomicile(address); // DeliveryAddressType delivAddr = new DeliveryAddressType(); //// address.setMunicipality("Linz"); // //address.setLocality("Wels"); // address.setPostalCode("4030"); //String bpks = szrClient.getBPK(personInfo, SSPIN_PREFIX + "ZP", "BBA-STA"); // String bpks = szrClient.getBPK(personInfo, SSPIN_PREFIX + "ZU", "BBA-STA"); // // //InputStream is = Clienttests.class.getResourceAsStream("/clearing_geburtstage_mit_UTC_versatz_20180214.csv"); InputStream is = Clienttests.class.getResourceAsStream("/clearing_geburtstage_mit_UTC_versatz_20180305.csv"); String data = IOUtils.toString(is); for (String line : data.split("\\n")) { try { String[] el = line.split(","); personName.setFamilyName(el[4]); personName.setGivenName(el[3]); String date = el[5].substring(1, el[5].length()-1); Date test = MiscUtil.parseDate(date, "yyyy-MM-dd", TimeZone.getTimeZone("UTC")); Date tomorrow = new Date(test.getTime() + (1000 * 60 * 60 * 24)); person.setDateOfBirth(MiscUtil.formatDate(tomorrow, "yyyy-MM-dd")); String baseID = szrClient.getStammzahl(personInfo ); System.out.println("OK!!! " + person.getName().getGivenName() + " " + person.getName().getFamilyName()); } catch ( Exception e) { e.printStackTrace(); } } personName.setFamilyName("Hembach"); personName.setGivenName("Alfred"); person.setDateOfBirth("1975-03-02"); personName.setFamilyName("Atzlinger"); personName.setGivenName("Manfred"); person.setDateOfBirth("1964-01-29"); personName.setFamilyName("Doppler"); personName.setGivenName("Dominik"); person.setDateOfBirth("1998-04-14"); String baseID = szrClient.getStammzahl(personInfo ); // BPK zpBpk = BpkUtil.createBPK(baseID, "ZP"); // // personInfo.getPerson().setDateOfBirth(null); // String test = szrClient.getBPK(personInfo, "BF", "BBA-STA"); // String encryptedbPK = szrClient.transformBPK(personInfo, zpBpk.getBpk(), SSPIN_PREFIX + "ZP", SSPIN_PREFIX + "WT-UR", "BBA-STA"); // GetIdentityLink idlReq = createGetIdentityLink(); //// ////// String baseIDResp = szrClient.getStammzahl(personInfo); ////// // IdentityLinkType idlResp = szrClient.getIdentityLink( // idlReq.getPersonInfo(), // idlReq.getKeyValue(), // false); // Element idl = (Element)idlResp.getAssertion(); // System.out.println(DOMUtils.serializeNode(idl)); // FileOutputStream writeToFile = new FileOutputStream("D:/local_work/zertifikate/ELGA_mocca_testcards/Allwsoker_Elgatest.idl"); // writeToFile.write(DOMUtils.serializeNode(idl).getBytes()); // writeToFile.close(); // List urResult = urClient.searchByRegisterNumber("9110008265019", "ERJ", 10); // urResult = urClient.searchByName("Bundesministerium*", null, 10); // List urResult = urClient.searchByBpk(encryptedbPK); // List urResult = urClient.searchByRegisterNumberFullInfo("237384w", "FBN", 10); System.out.println("Finish"); } catch (Exception e) { e.printStackTrace(); } } private static GetIdentityLink createGetIdentityLink() throws CertificateException, IOException{ // set parameter GetIdentityLink getIdentityLink = new GetIdentityLink(); SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); PersonInfoType personInfo = new PersonInfoType(); PhysicalPersonType physicalPerson = new PhysicalPersonType(); PostalAddressType address = new PostalAddressType(); // generate PersonData PersonNameType personName = new PersonNameType(); // personName.setFamilyName("Janez Vzorec"); // personName.setGivenName("Janez Vzorec"); // personName.setFamilyName("ALLWSoker ELGATest"); // personName.setGivenName("Zilli Winnimar"); // personName.setFamilyName("Pointner"); // personName.setGivenName("Johann"); // address.setMunicipality("Linz"); // address.setPostalCode("4030"); // String birthday = "1954-07-07"; // String birthday = "1928-04-10"; personName.setFamilyName("Kern"); personName.setGivenName("Thomas"); String birthday = null; address.setMunicipality("Obdach"); address.setPostalCode("8742"); //String birthday = "1998-12-06"; if (birthday != null) physicalPerson.setDateOfBirth(birthday); physicalPerson.setName(personName); if (address != null) personInfo.setRegularDomicile(address); personInfo.setPerson(physicalPerson); // add Traveldocument // TravelDocumentType trvlDoc = new TravelDocumentType(); // // // parse STORK-eID to his components // //ERnB allows only eIDs with a maximum length of 54 signs // trvlDoc.setDocumentNumber("33333333"); // trvlDoc.setIssuingCountry("SI"); // trvlDoc.setDocumentType(DOCUMENT_TYPE); // // //set default values from SZR because certificate for mandator natural person is not // //available in case of authentication with electronic mandates. // trvlDoc.setIssueDate(ERnB_ISSUEDATE); // trvlDoc.setIssuingAuthority(ERnB_ISSUINGAUTHORITY); // // JAXBElement jaxbtrvlDoc = personInfo.getTravelDocument(); // // if (jaxbtrvlDoc == null) // jaxbtrvlDoc = new JAXBElement(new QName("urn:SZRServices", "TravelDocument"), TravelDocumentType.class, trvlDoc); // else // jaxbtrvlDoc.setValue(trvlDoc); //personInfo.setTravelDocument(jaxbtrvlDoc); // Personendaten setzen getIdentityLink.setPersonInfo(personInfo); // add Keys PublicKey pb; List keyvalueList = getIdentityLink.getKeyValue(); if (keyvalueList == null) keyvalueList = new ArrayList(); InputStream importCertStream = new FileInputStream("F:/local_work/zertifikate/mocca_testcards/BRZ_testcards/test_identities/Achim XXXZastrow/secure.crt"); X509Certificate importCert = new X509Certificate(importCertStream ); pb = importCert.getPublicKey(); //pb = new iaik.security.rsa.RSAPublicKey(DEFAULT_PUBL_KEY); List keys = getKeyValueTypes(pb); keyvalueList.addAll(keys); // set Insert ERnP flag getIdentityLink.setInsertERnP(false); // Constants.DATA_LOGGER.debug("Person wird im SZR und ERnP gesucht bzw. gegebenenfalls im ERnP eingetragen: " // + natPerson.getFamilyName() + " " + natPerson.getGivenName() + " " + natPerson.getBirthday() // + " eID=" + natPerson.geteID() , tid); return getIdentityLink; } /** * Returns the according key value types from the given public key * @param pb * @return * @throws SZRGWException */ private static List getKeyValueTypes(PublicKey pb) { List keys = new ArrayList(); ECCProvider.addAsProvider(); //System.out.println(pb); if (pb instanceof RSAPublicKey) { //System.out.println("Is a RSAPublicKey"); //Extract key data RSAPublicKey rsapb = (RSAPublicKey)pb; BigInteger modulus = rsapb.getModulus(); BigInteger exponent = rsapb.getPublicExponent(); //System.out.println("Modulus: " + modulus); //System.out.println("PublicExponent: " + exponent); // set key values RSAKeyValueType rsa = new RSAKeyValueType(); ; rsa.setExponent(Base64Utility.encode(exponent.toByteArray())); rsa.setModulus(Base64Utility.encode(modulus.toByteArray())); KeyValueType key = new KeyValueType(); key.setRSAKeyValue(rsa); keys.add(key); } if (pb instanceof DSAPublicKey) { //System.out.println("Is a DSAPublicKey"); // extract key data DSAPublicKey dsapb = (DSAPublicKey) pb; BigInteger y = dsapb.getY(); DSAParams param = dsapb.getParams(); BigInteger g = param.getG(); BigInteger p = param.getP(); BigInteger q = param.getQ(); // System.out.println("Y: " + y); // System.out.println("G: " + g); // System.out.println("P: " + p); // System.out.println("Q: " + q); // //set key values DSAKeyValueType dsa = new DSAKeyValueType(); if (y != null) dsa.setY(y.toString()); if (g != null) dsa.setG(g.toString()); if (p != null) dsa.setP(p.toString()); if (q != null) dsa.setQ(q.toString()); KeyValueType key = new KeyValueType(); key.setDSAKeyValue(dsa); keys.add(key); } if (pb instanceof ECDSAPublicKey) { //Extract key data ECDSAPublicKey ecdsapb= (ECDSAPublicKey)pb; ECDSAParams params = ecdsapb.getParameter(); //EllipticCurve curve = params.getG().getCurve(); String oid = params.getOID(); //String name = ObjectID.getRegisteredName(oid); ECPoint w = ecdsapb.getW(); AffineCoordinate coordinate = (AffineCoordinate) w.getCoordinates().toAffine(); String x = coordinate.getX().toBigInt().toString(); String y = coordinate.getY().toBigInt().toString(); ECDSAKeyValueType ecdsa = new ECDSAKeyValueType(); DomainParamsType paramstype = new DomainParamsType(); NamedCurveType namedCurve = new NamedCurveType(); namedCurve.setURN("urn:oid:" + oid); paramstype.setNamedCurve(namedCurve); ecdsa.setDomainParameters(paramstype); ECPointType ecpointtype = new ECPointType(); PrimeFieldElemType xElem = new PrimeFieldElemType(); xElem.setValue(x); PrimeFieldElemType yElem = new PrimeFieldElemType(); yElem.setValue(y); ecpointtype.setX(xElem); ecpointtype.setY(yElem); ecdsa.setPublicKey(ecpointtype); KeyValueType key = new KeyValueType(); key.setECDSAKeyValue(ecdsa); keys.add(key); //throw new SZRGWException("Certificate enthält einen ECDSAPublicKey. Dieser wird momentan noch nicht unterstützt."); } if (pb instanceof ECPublicKey) { //System.out.println("Is a ECPublicKey"); // throw new SZRGWException("Certificate enthält einen ECPublicKey. Dieser wird momentan noch nicht unterstützt."); // ECPublicKey ecpb = (ECPublicKey) pb; // // System.out.println(ecpb.toString()); // // ECParameterSpec params = ecpb.getParams(); // EllipticCurve curve = params.getCurve(); // // ECDSAKeyValueType ecdsa = new ECDSAKeyValueType(); // DomainParamsType domainparams = new DomainParamsType(); // NamedCurveType curvetype = new NamedCurveType(); // curvetype.setURN("P-192"); // domainparams.setNamedCurve(curvetype); // ecdsa.setDomainParameters(domainparams); // ECPointType publicKey = new ECPointType(); // PrimeFieldElemType x = new PrimeFieldElemType(); // x.setValue("12345x"); // publicKey.setX(x); // PrimeFieldElemType y = new PrimeFieldElemType(); // y.setValue("12345y"); // publicKey.setY(y); // ecdsa.setPublicKey(publicKey); // keys[0].setECDSAKeyValue(ecdsa); } return keys; } }