diff options
| author | Tobias Kellner <tobias.kellner@iaik.tugraz.at> | 2016-11-03 16:17:03 +0100 | 
|---|---|---|
| committer | Tobias Kellner <tobias.kellner@iaik.tugraz.at> | 2016-11-03 16:17:03 +0100 | 
| commit | 33dfef091acd2d28e68658c8e0bcb4e67027d1e1 (patch) | |
| tree | 220e38349c809d87bd2a91a8767033aeff81f71b /utils/src/main/java/at | |
| parent | 0022a997e90bb9554b62853222b4aad7fbde1e11 (diff) | |
| download | mocca-33dfef091acd2d28e68658c8e0bcb4e67027d1e1.tar.gz mocca-33dfef091acd2d28e68658c8e0bcb4e67027d1e1.tar.bz2 mocca-33dfef091acd2d28e68658c8e0bcb4e67027d1e1.zip | |
Workaround for finding EC OID if ECCelerate not loaded first
Diffstat (limited to 'utils/src/main/java/at')
| -rw-r--r-- | utils/src/main/java/at/gv/egiz/idlink/CompressedIdentityLinkFactory.java | 16 | ||||
| -rw-r--r-- | utils/src/main/java/at/gv/egiz/idlink/asn1/CitizenPublicKey.java (renamed from utils/src/main/java/at/gv/egiz/idlink/ans1/CitizenPublicKey.java) | 2 | ||||
| -rw-r--r-- | utils/src/main/java/at/gv/egiz/idlink/asn1/IdentityLink.java (renamed from utils/src/main/java/at/gv/egiz/idlink/ans1/IdentityLink.java) | 2 | ||||
| -rw-r--r-- | utils/src/main/java/at/gv/egiz/idlink/asn1/PersonData.java (renamed from utils/src/main/java/at/gv/egiz/idlink/ans1/PersonData.java) | 2 | ||||
| -rw-r--r-- | utils/src/main/java/at/gv/egiz/idlink/asn1/PhysicalPersonData.java (renamed from utils/src/main/java/at/gv/egiz/idlink/ans1/PhysicalPersonData.java) | 2 | ||||
| -rw-r--r-- | utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java | 62 | 
6 files changed, 68 insertions, 18 deletions
| diff --git a/utils/src/main/java/at/gv/egiz/idlink/CompressedIdentityLinkFactory.java b/utils/src/main/java/at/gv/egiz/idlink/CompressedIdentityLinkFactory.java index 510f303e..11908540 100644 --- a/utils/src/main/java/at/gv/egiz/idlink/CompressedIdentityLinkFactory.java +++ b/utils/src/main/java/at/gv/egiz/idlink/CompressedIdentityLinkFactory.java @@ -51,14 +51,14 @@ import org.w3c.dom.NodeList;  import at.buergerkarte.namespaces.personenbindung._20020506_.CompressedIdentityLinkType;  import at.gv.e_government.reference.namespace.persondata._20020228_.AbstractPersonType;  import at.gv.e_government.reference.namespace.persondata._20020228_.IdentificationType; -import at.gv.e_government.reference.namespace.persondata._20020228_.PersonNameType; -import at.gv.e_government.reference.namespace.persondata._20020228_.PhysicalPersonType;  import at.gv.e_government.reference.namespace.persondata._20020228_.IdentificationType.Value; +import at.gv.e_government.reference.namespace.persondata._20020228_.PersonNameType;  import at.gv.e_government.reference.namespace.persondata._20020228_.PersonNameType.FamilyName; -import at.gv.egiz.idlink.ans1.CitizenPublicKey; -import at.gv.egiz.idlink.ans1.IdentityLink; -import at.gv.egiz.idlink.ans1.PersonData; -import at.gv.egiz.idlink.ans1.PhysicalPersonData; +import at.gv.e_government.reference.namespace.persondata._20020228_.PhysicalPersonType; +import at.gv.egiz.idlink.asn1.CitizenPublicKey; +import at.gv.egiz.idlink.asn1.IdentityLink; +import at.gv.egiz.idlink.asn1.PersonData; +import at.gv.egiz.idlink.asn1.PhysicalPersonData;  import at.gv.egiz.marshal.MarshallerFactory;  import at.gv.egiz.xmldsig.KeyTypeNotSupportedException;  import at.gv.egiz.xmldsig.KeyValueFactory; @@ -201,7 +201,7 @@ public class CompressedIdentityLinkFactory {     *           of the <code>certificates</code> list     */    public JAXBElement<CompressedIdentityLinkType> createCompressedIdentityLink( -      at.gv.egiz.idlink.ans1.IdentityLink idLink, +      at.gv.egiz.idlink.asn1.IdentityLink idLink,        List<X509Certificate> certificates, String domainId) {      at.gv.e_government.reference.namespace.persondata._20020228_.ObjectFactory prFactory =  @@ -254,7 +254,7 @@ public class CompressedIdentityLinkFactory {        X509Certificate certificate = certificates.get(__citizenPublicKey.getOnToken());        PublicKey publicKey = certificate.getPublicKey(); -       +        JAXBElement<?> keyValue;        try {          keyValue = keyValueFactory.createKeyValue(publicKey); diff --git a/utils/src/main/java/at/gv/egiz/idlink/ans1/CitizenPublicKey.java b/utils/src/main/java/at/gv/egiz/idlink/asn1/CitizenPublicKey.java index 5e342b8d..f89511ff 100644 --- a/utils/src/main/java/at/gv/egiz/idlink/ans1/CitizenPublicKey.java +++ b/utils/src/main/java/at/gv/egiz/idlink/asn1/CitizenPublicKey.java @@ -22,7 +22,7 @@   */ -package at.gv.egiz.idlink.ans1; +package at.gv.egiz.idlink.asn1;  import java.math.BigInteger; diff --git a/utils/src/main/java/at/gv/egiz/idlink/ans1/IdentityLink.java b/utils/src/main/java/at/gv/egiz/idlink/asn1/IdentityLink.java index 6a250b9a..c2663971 100644 --- a/utils/src/main/java/at/gv/egiz/idlink/ans1/IdentityLink.java +++ b/utils/src/main/java/at/gv/egiz/idlink/asn1/IdentityLink.java @@ -22,7 +22,7 @@   */ -package at.gv.egiz.idlink.ans1;
 +package at.gv.egiz.idlink.asn1;
  import iaik.asn1.ASN1Object;
  import iaik.asn1.ASN1Type;
 diff --git a/utils/src/main/java/at/gv/egiz/idlink/ans1/PersonData.java b/utils/src/main/java/at/gv/egiz/idlink/asn1/PersonData.java index 6204e370..786486f1 100644 --- a/utils/src/main/java/at/gv/egiz/idlink/ans1/PersonData.java +++ b/utils/src/main/java/at/gv/egiz/idlink/asn1/PersonData.java @@ -22,7 +22,7 @@   */ -package at.gv.egiz.idlink.ans1; +package at.gv.egiz.idlink.asn1;  import iaik.asn1.*; diff --git a/utils/src/main/java/at/gv/egiz/idlink/ans1/PhysicalPersonData.java b/utils/src/main/java/at/gv/egiz/idlink/asn1/PhysicalPersonData.java index 995a40f6..be92ac30 100644 --- a/utils/src/main/java/at/gv/egiz/idlink/ans1/PhysicalPersonData.java +++ b/utils/src/main/java/at/gv/egiz/idlink/asn1/PhysicalPersonData.java @@ -22,7 +22,7 @@   */ -package at.gv.egiz.idlink.ans1; +package at.gv.egiz.idlink.asn1;  import iaik.asn1.*; diff --git a/utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java b/utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java index 6377bf9f..2388405f 100644 --- a/utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java +++ b/utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java @@ -24,6 +24,7 @@  package at.gv.egiz.xmldsig; +import iaik.security.ec.common.ECStandardizedParameterFactory;  import iaik.security.ec.errorhandling.InvalidCurveParameterSpecException;  import java.math.BigInteger; @@ -39,6 +40,7 @@ import java.security.spec.ECFieldFp;  import java.security.spec.ECParameterSpec;  import java.security.spec.ECPoint;  import java.security.spec.EllipticCurve; +import java.util.Enumeration;  import javax.xml.bind.JAXBElement; @@ -48,6 +50,7 @@ import org.w3._2001._04.xmldsig_more_.BasePointParamsType;  import org.w3._2001._04.xmldsig_more_.CharTwoFieldElemType;  import org.w3._2001._04.xmldsig_more_.CurveParamsType;  import org.w3._2001._04.xmldsig_more_.DomainParamsType; +import org.w3._2001._04.xmldsig_more_.DomainParamsType.NamedCurve;  import org.w3._2001._04.xmldsig_more_.ECDSAKeyValueType;  import org.w3._2001._04.xmldsig_more_.ECPointType;  import org.w3._2001._04.xmldsig_more_.ExplicitParamsType; @@ -57,10 +60,8 @@ import org.w3._2001._04.xmldsig_more_.PnBFieldParamsType;  import org.w3._2001._04.xmldsig_more_.PrimeFieldElemType;  import org.w3._2001._04.xmldsig_more_.PrimeFieldParamsType;  import org.w3._2001._04.xmldsig_more_.TnBFieldParamsType; -import org.w3._2001._04.xmldsig_more_.DomainParamsType.NamedCurve;  public class KeyValueFactory { -      private static byte[] bigInteger2byteArray(BigInteger bigPositiveInt) {      if (bigPositiveInt == null)        throw new NullPointerException("Argument 'bigPositiveInt' must not be null"); @@ -216,7 +217,53 @@ public class KeyValueFactory {      }    } -   + +  private boolean fieldsEqual(ECField f1, ECField f2) { +    if (f1 instanceof ECFieldF2m) { +      if (!(f2 instanceof ECFieldF2m)) { +        return false; +      } +      ECFieldF2m f2m1 = (ECFieldF2m) f1; +      ECFieldF2m f2m2 = (ECFieldF2m) f2; +      return (f2m1.getM() == f2m2.getM() && f2m1.getReductionPolynomial().equals(f2m2.getReductionPolynomial())); +    } else if (f1 instanceof ECFieldFp) { +      if (!(f2 instanceof ECFieldFp)) { +        return false; +      } +      ECFieldFp fp1 = (ECFieldFp) f1; +      ECFieldFp fp2 = (ECFieldFp) f2; +      return (fp1.getP().equals(fp2.getP())); +    } +    return false; +  } + +  private boolean curvesEqual(EllipticCurve c1, EllipticCurve c2) { +    if (c1.getA().equals(c2.getA()) && c1.getB().equals(c2.getB())) +      return fieldsEqual(c1.getField(), c2.getField()); +    return false; +  } + +  private String findOID(ECParameterSpec params) { +    EllipticCurve curve = params.getCurve(); +    Enumeration<String> oids = ECStandardizedParameterFactory.getPrimeCurveOIDs(); +    while (oids.hasMoreElements()) { +      String oid = oids.nextElement(); +      iaik.security.ec.common.ECParameterSpec params2 = ECStandardizedParameterFactory.getParametersByOID(oid); +      if (curvesEqual(curve, params2.getCurve())) { +        return oid; +      } +    } +    oids = ECStandardizedParameterFactory.getBinaryCurveOIDs(); +    while (oids.hasMoreElements()) { +      String oid = oids.nextElement(); +      iaik.security.ec.common.ECParameterSpec params2 = ECStandardizedParameterFactory.getParametersByOID(oid); +      if (curvesEqual(curve, params2.getCurve())) { +        return oid; +      } +    } +    return null; +  } +    public DomainParamsType createDomainParamsType(ECParameterSpec params) throws KeyTypeNotSupportedException {      iaik.security.ec.common.ECParameterSpec params2;      try { @@ -225,16 +272,19 @@ public class KeyValueFactory {        throw new KeyTypeNotSupportedException(e);      }      DomainParamsType domainParamsType = ecFactory.createDomainParamsType(); -    EllipticCurve curve = params.getCurve(); -      String oid = params2.getOID(); -    if (oid !=  null) { +    if (oid == null) { +      oid = findOID(params); +    } +    if (oid != null) {        // NamedCurve        NamedCurve namedCurve = ecFactory.createDomainParamsTypeNamedCurve();        namedCurve.setURN("urn:oid:" + oid);        domainParamsType.setNamedCurve(namedCurve);      } else {        // Explicit parameters +      EllipticCurve curve = params.getCurve(); +        ExplicitParamsType explicitParamsType = ecFactory.createExplicitParamsType();        explicitParamsType.setFieldParams(createFieldParamsType(curve.getField())); | 
