diff options
Diffstat (limited to 'utils/src/main/java/at')
| -rw-r--r-- | utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java | 536 | 
1 files changed, 268 insertions, 268 deletions
| 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 4d5b35d3..6377bf9f 100644 --- a/utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java +++ b/utils/src/main/java/at/gv/egiz/xmldsig/KeyValueFactory.java @@ -1,268 +1,268 @@ -/*
 - * Copyright 2011 by Graz University of Technology, Austria
 - * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint
 - * initiative of the Federal Chancellery Austria and Graz University of Technology.
 - *
 - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
 - * the European Commission - subsequent versions of the EUPL (the "Licence");
 - * You may not use this work except in compliance with the Licence.
 - * You may obtain a copy of the Licence at:
 - * http://www.osor.eu/eupl/
 - *
 - * Unless required by applicable law or agreed to in writing, software
 - * distributed under the Licence is distributed on an "AS IS" basis,
 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 - * See the Licence for the specific language governing permissions and
 - * limitations under the Licence.
 - *
 - * This product combines work with different licenses. See the "NOTICE" text
 - * file for details on the various modules and licenses.
 - * The "NOTICE" text file is part of the distribution. Any derivative works
 - * that you distribute must include a readable copy of the "NOTICE" text file.
 - */
 -
 -
 -package at.gv.egiz.xmldsig;
 -
 -import iaik.security.ec.errorhandling.InvalidCurveParameterSpecException;
 -
 -import java.math.BigInteger;
 -import java.security.InvalidKeyException;
 -import java.security.PublicKey;
 -import java.security.interfaces.DSAParams;
 -import java.security.interfaces.DSAPublicKey;
 -import java.security.interfaces.ECPublicKey;
 -import java.security.interfaces.RSAPublicKey;
 -import java.security.spec.ECField;
 -import java.security.spec.ECFieldF2m;
 -import java.security.spec.ECFieldFp;
 -import java.security.spec.ECParameterSpec;
 -import java.security.spec.ECPoint;
 -import java.security.spec.EllipticCurve;
 -
 -import javax.xml.bind.JAXBElement;
 -
 -import org.w3._2000._09.xmldsig_.DSAKeyValueType;
 -import org.w3._2000._09.xmldsig_.RSAKeyValueType;
 -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_.ECDSAKeyValueType;
 -import org.w3._2001._04.xmldsig_more_.ECPointType;
 -import org.w3._2001._04.xmldsig_more_.ExplicitParamsType;
 -import org.w3._2001._04.xmldsig_more_.FieldElemType;
 -import org.w3._2001._04.xmldsig_more_.FieldParamsType;
 -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");
 -    if (bigPositiveInt.signum() != 1)
 -      throw new IllegalArgumentException("Argument 'bigPositiveInt' must not be negative");
 -
 -    byte[] byteRepresentation = bigPositiveInt.toByteArray();
 -    if (byteRepresentation[0] == 0) {
 -      byte[] oldByteRepresentation = byteRepresentation;
 -      byteRepresentation = new byte[oldByteRepresentation.length - 1];
 -      System.arraycopy(oldByteRepresentation, 1, byteRepresentation, 0, oldByteRepresentation.length - 1);
 -    }
 -    return byteRepresentation;
 -  }
 -  
 -  org.w3._2001._04.xmldsig_more_.ObjectFactory ecFactory = new org.w3._2001._04.xmldsig_more_.ObjectFactory();
 -
 -  org.w3._2000._09.xmldsig_.ObjectFactory dsFactory = new org.w3._2000._09.xmldsig_.ObjectFactory();
 -
 -  public JAXBElement<?> createKeyValue(PublicKey publicKey) throws KeyTypeNotSupportedException {
 -    
 -    if (publicKey instanceof RSAPublicKey) {
 -      RSAKeyValueType keyValueType = createRSAKeyValueType((RSAPublicKey) publicKey);
 -      return dsFactory.createRSAKeyValue(keyValueType);
 -    } else if (publicKey instanceof DSAPublicKey) {
 -      DSAKeyValueType keyValueType = createKeyValueType((DSAPublicKey) publicKey);
 -      return dsFactory.createDSAKeyValue(keyValueType);
 -    } else if (publicKey instanceof ECPublicKey) {
 -      ECDSAKeyValueType keyValueType = createKeyValueType((ECPublicKey) publicKey);
 -      return ecFactory.createECDSAKeyValue(keyValueType);
 -    } else if ("EC".equals(publicKey.getAlgorithm())) {
 -      byte[] encoded = publicKey.getEncoded();
 -      try {
 -        ECPublicKey key = new iaik.security.ec.common.ECPublicKey(encoded);
 -        ECDSAKeyValueType keyValueType = createKeyValueType(key);
 -        return ecFactory.createECDSAKeyValue(keyValueType);
 -      } catch (InvalidKeyException e) {
 -        throw new KeyTypeNotSupportedException("Public key of type "
 -            + publicKey.getAlgorithm() + " (" + publicKey.getClass()
 -            + ") not supported.");
 -      }
 -    } else {
 -      throw new KeyTypeNotSupportedException("Public key of type "
 -          + publicKey.getAlgorithm() + " (" + publicKey.getClass()
 -          + ") not supported.");
 -    }
 -    
 -  }
 -  
 -  public RSAKeyValueType createRSAKeyValueType(RSAPublicKey publicKey) {
 -    
 -    RSAKeyValueType keyValueType = dsFactory.createRSAKeyValueType();
 -    keyValueType.setExponent(bigInteger2byteArray(publicKey.getPublicExponent()));
 -    keyValueType.setModulus(bigInteger2byteArray(publicKey.getModulus()));
 -    
 -    return keyValueType;
 -  }
 -  
 -  public DSAKeyValueType createKeyValueType(DSAPublicKey publicKey) {
 -    
 -    DSAKeyValueType keyValueType = dsFactory.createDSAKeyValueType();
 -    
 -    if (publicKey.getParams() != null) {
 -      // P, Q, G
 -      DSAParams params = publicKey.getParams();
 -      if (params.getP() != null && params.getQ() != null) {
 -        keyValueType.setP(bigInteger2byteArray(params.getP()));
 -        keyValueType.setQ(bigInteger2byteArray(params.getQ()));
 -      }
 -      if (params.getG() != null) {
 -        keyValueType.setG(bigInteger2byteArray(params.getG()));
 -      }
 -    }
 -    //
 -    keyValueType.setY(bigInteger2byteArray(publicKey.getY()));
 -    
 -    return keyValueType;
 -  }
 -  
 -  public ECDSAKeyValueType createKeyValueType(ECPublicKey publicKey) throws KeyTypeNotSupportedException {
 -    
 -    ECDSAKeyValueType keyValueType = ecFactory.createECDSAKeyValueType();
 -
 -    ECParameterSpec params = publicKey.getParams();
 -    if (params != null) {
 -      keyValueType.setDomainParameters(createDomainParamsType(params));
 -    }
 -
 -    if (!publicKey.getW().equals(java.security.spec.ECPoint.POINT_INFINITY)) {
 -      keyValueType.setPublicKey(createPointType(publicKey.getW(), params.getCurve().getField()));
 -    }
 -    
 -    return keyValueType;
 -  }
 -  
 -  public ECPointType createPointType(ECPoint point, ECField field) throws KeyTypeNotSupportedException {
 -    ECPointType pointType = ecFactory.createECPointType();
 -    pointType.setX(createFieldElemType(point.getAffineX(), field));
 -    pointType.setY(createFieldElemType(point.getAffineY(), field));
 -    return pointType;
 -  }
 -  
 -  public FieldElemType createFieldElemType(BigInteger point, ECField field) throws KeyTypeNotSupportedException {
 -    if (field instanceof ECFieldFp) {
 -      PrimeFieldElemType fieldElemType = ecFactory.createPrimeFieldElemType();
 -      fieldElemType.setValue(point);
 -      return fieldElemType;
 -    } else if (field instanceof ECFieldF2m) {
 -      CharTwoFieldElemType fieldElemType = ecFactory.createCharTwoFieldElemType();
 -      fieldElemType.setValue(bigInteger2byteArray(point));
 -      return fieldElemType;
 -    } else {
 -      throw new KeyTypeNotSupportedException("Field element type not supported.");
 -    }
 -  }
 -  
 -  public FieldParamsType createFieldParamsType(ECField field) throws KeyTypeNotSupportedException {
 -    
 -    if (field instanceof ECFieldFp) {
 -      // PrimeFieldParamsType
 -      PrimeFieldParamsType primeFieldParamsType = ecFactory.createPrimeFieldParamsType();
 -      primeFieldParamsType.setP(((ECFieldFp) field).getP());
 -      return primeFieldParamsType;
 -    } else if (field instanceof ECFieldF2m) {
 -      // CharTwoFieldParamsType
 -      ECFieldF2m fieldf2m = (ECFieldF2m) field;
 -      int[] ks = fieldf2m.getMidTermsOfReductionPolynomial();
 -
 -      // detect if trinomial or pentanomial base is present...
 -      switch (ks.length) {
 -      case 1:
 -        // trinomial base
 -        TnBFieldParamsType tnBFieldParamsType = ecFactory.createTnBFieldParamsType();
 -        tnBFieldParamsType.setM(BigInteger.valueOf(fieldf2m.getM()));
 -        tnBFieldParamsType.setK(BigInteger.valueOf(ks[0]));
 -        return tnBFieldParamsType;
 -
 -      case 3:
 -        // pentanomial base
 -        PnBFieldParamsType pnBFieldParamsType = ecFactory.createPnBFieldParamsType();
 -        pnBFieldParamsType.setM(BigInteger.valueOf(fieldf2m.getM()));
 -        pnBFieldParamsType.setK1(BigInteger.valueOf(ks[0]));
 -        pnBFieldParamsType.setK2(BigInteger.valueOf(ks[1]));
 -        pnBFieldParamsType.setK3(BigInteger.valueOf(ks[2]));
 -        return pnBFieldParamsType;
 -      
 -      default:
 -        throw new KeyTypeNotSupportedException("Only trinomial and pentanomial base is supported.");
 -      }
 -      
 -    } else {
 -      throw new KeyTypeNotSupportedException("Field element type not supported.");
 -    }
 -    
 -  }
 -  
 -  public DomainParamsType createDomainParamsType(ECParameterSpec params) throws KeyTypeNotSupportedException {
 -    iaik.security.ec.common.ECParameterSpec params2;
 -    try {
 -      params2 = iaik.security.ec.common.ECParameterSpec.getParameterSpec(params);
 -    } catch (InvalidCurveParameterSpecException e) {
 -      throw new KeyTypeNotSupportedException(e);
 -    }
 -    DomainParamsType domainParamsType = ecFactory.createDomainParamsType();
 -    EllipticCurve curve = params.getCurve();
 -
 -    String oid = params2.getOID();
 -    if (oid !=  null) {
 -      // NamedCurve
 -      NamedCurve namedCurve = ecFactory.createDomainParamsTypeNamedCurve();
 -      namedCurve.setURN("urn:oid:" + oid);
 -      domainParamsType.setNamedCurve(namedCurve);
 -    } else {
 -      // Explicit parameters
 -      ExplicitParamsType explicitParamsType = ecFactory.createExplicitParamsType();
 -      explicitParamsType.setFieldParams(createFieldParamsType(curve.getField()));
 -
 -      CurveParamsType curveParamsType = ecFactory.createCurveParamsType();
 -      ECField field = params.getCurve().getField();
 -
 -      // curve coefficients
 -      curveParamsType.setA(createFieldElemType(curve.getA(), field));
 -      curveParamsType.setB(createFieldElemType(curve.getB(), field));
 -      
 -      // seed
 -      if (curve.getSeed() != null)
 -        curveParamsType.setSeed(curve.getSeed());
 -      explicitParamsType.setCurveParams(curveParamsType);
 -
 -      // BasePoint parameters
 -      BasePointParamsType basePointParamsType = ecFactory.createBasePointParamsType();
 -      if (!params.getGenerator().equals(ECPoint.POINT_INFINITY)) {
 -        basePointParamsType.setBasePoint(createPointType(params.getGenerator(), field));
 -      }
 -      basePointParamsType.setOrder(params.getOrder());
 -      basePointParamsType.setCofactor(BigInteger.valueOf(params.getCofactor()));
 -      explicitParamsType.setBasePointParams(basePointParamsType);
 -      domainParamsType.setExplicitParams(explicitParamsType);
 -    }
 -
 -    return domainParamsType;
 -    
 -  }
 -  
 -}
 +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + + +package at.gv.egiz.xmldsig; + +import iaik.security.ec.errorhandling.InvalidCurveParameterSpecException; + +import java.math.BigInteger; +import java.security.InvalidKeyException; +import java.security.PublicKey; +import java.security.interfaces.DSAParams; +import java.security.interfaces.DSAPublicKey; +import java.security.interfaces.ECPublicKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.ECField; +import java.security.spec.ECFieldF2m; +import java.security.spec.ECFieldFp; +import java.security.spec.ECParameterSpec; +import java.security.spec.ECPoint; +import java.security.spec.EllipticCurve; + +import javax.xml.bind.JAXBElement; + +import org.w3._2000._09.xmldsig_.DSAKeyValueType; +import org.w3._2000._09.xmldsig_.RSAKeyValueType; +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_.ECDSAKeyValueType; +import org.w3._2001._04.xmldsig_more_.ECPointType; +import org.w3._2001._04.xmldsig_more_.ExplicitParamsType; +import org.w3._2001._04.xmldsig_more_.FieldElemType; +import org.w3._2001._04.xmldsig_more_.FieldParamsType; +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"); +    if (bigPositiveInt.signum() != 1) +      throw new IllegalArgumentException("Argument 'bigPositiveInt' must not be negative"); + +    byte[] byteRepresentation = bigPositiveInt.toByteArray(); +    if (byteRepresentation[0] == 0) { +      byte[] oldByteRepresentation = byteRepresentation; +      byteRepresentation = new byte[oldByteRepresentation.length - 1]; +      System.arraycopy(oldByteRepresentation, 1, byteRepresentation, 0, oldByteRepresentation.length - 1); +    } +    return byteRepresentation; +  } +   +  org.w3._2001._04.xmldsig_more_.ObjectFactory ecFactory = new org.w3._2001._04.xmldsig_more_.ObjectFactory(); + +  org.w3._2000._09.xmldsig_.ObjectFactory dsFactory = new org.w3._2000._09.xmldsig_.ObjectFactory(); + +  public JAXBElement<?> createKeyValue(PublicKey publicKey) throws KeyTypeNotSupportedException { +     +    if (publicKey instanceof RSAPublicKey) { +      RSAKeyValueType keyValueType = createRSAKeyValueType((RSAPublicKey) publicKey); +      return dsFactory.createRSAKeyValue(keyValueType); +    } else if (publicKey instanceof DSAPublicKey) { +      DSAKeyValueType keyValueType = createKeyValueType((DSAPublicKey) publicKey); +      return dsFactory.createDSAKeyValue(keyValueType); +    } else if (publicKey instanceof ECPublicKey) { +      ECDSAKeyValueType keyValueType = createKeyValueType((ECPublicKey) publicKey); +      return ecFactory.createECDSAKeyValue(keyValueType); +    } else if ("EC".equals(publicKey.getAlgorithm())) { +      byte[] encoded = publicKey.getEncoded(); +      try { +        ECPublicKey key = new iaik.security.ec.common.ECPublicKey(encoded); +        ECDSAKeyValueType keyValueType = createKeyValueType(key); +        return ecFactory.createECDSAKeyValue(keyValueType); +      } catch (InvalidKeyException e) { +        throw new KeyTypeNotSupportedException("Public key of type " +            + publicKey.getAlgorithm() + " (" + publicKey.getClass() +            + ") not supported."); +      } +    } else { +      throw new KeyTypeNotSupportedException("Public key of type " +          + publicKey.getAlgorithm() + " (" + publicKey.getClass() +          + ") not supported."); +    } +     +  } +   +  public RSAKeyValueType createRSAKeyValueType(RSAPublicKey publicKey) { +     +    RSAKeyValueType keyValueType = dsFactory.createRSAKeyValueType(); +    keyValueType.setExponent(bigInteger2byteArray(publicKey.getPublicExponent())); +    keyValueType.setModulus(bigInteger2byteArray(publicKey.getModulus())); +     +    return keyValueType; +  } +   +  public DSAKeyValueType createKeyValueType(DSAPublicKey publicKey) { +     +    DSAKeyValueType keyValueType = dsFactory.createDSAKeyValueType(); +     +    if (publicKey.getParams() != null) { +      // P, Q, G +      DSAParams params = publicKey.getParams(); +      if (params.getP() != null && params.getQ() != null) { +        keyValueType.setP(bigInteger2byteArray(params.getP())); +        keyValueType.setQ(bigInteger2byteArray(params.getQ())); +      } +      if (params.getG() != null) { +        keyValueType.setG(bigInteger2byteArray(params.getG())); +      } +    } +    // +    keyValueType.setY(bigInteger2byteArray(publicKey.getY())); +     +    return keyValueType; +  } +   +  public ECDSAKeyValueType createKeyValueType(ECPublicKey publicKey) throws KeyTypeNotSupportedException { +     +    ECDSAKeyValueType keyValueType = ecFactory.createECDSAKeyValueType(); + +    ECParameterSpec params = publicKey.getParams(); +    if (params != null) { +      keyValueType.setDomainParameters(createDomainParamsType(params)); +    } + +    if (!publicKey.getW().equals(java.security.spec.ECPoint.POINT_INFINITY)) { +      keyValueType.setPublicKey(createPointType(publicKey.getW(), params.getCurve().getField())); +    } +     +    return keyValueType; +  } +   +  public ECPointType createPointType(ECPoint point, ECField field) throws KeyTypeNotSupportedException { +    ECPointType pointType = ecFactory.createECPointType(); +    pointType.setX(createFieldElemType(point.getAffineX(), field)); +    pointType.setY(createFieldElemType(point.getAffineY(), field)); +    return pointType; +  } +   +  public FieldElemType createFieldElemType(BigInteger point, ECField field) throws KeyTypeNotSupportedException { +    if (field instanceof ECFieldFp) { +      PrimeFieldElemType fieldElemType = ecFactory.createPrimeFieldElemType(); +      fieldElemType.setValue(point); +      return fieldElemType; +    } else if (field instanceof ECFieldF2m) { +      CharTwoFieldElemType fieldElemType = ecFactory.createCharTwoFieldElemType(); +      fieldElemType.setValue(bigInteger2byteArray(point)); +      return fieldElemType; +    } else { +      throw new KeyTypeNotSupportedException("Field element type not supported."); +    } +  } +   +  public FieldParamsType createFieldParamsType(ECField field) throws KeyTypeNotSupportedException { +     +    if (field instanceof ECFieldFp) { +      // PrimeFieldParamsType +      PrimeFieldParamsType primeFieldParamsType = ecFactory.createPrimeFieldParamsType(); +      primeFieldParamsType.setP(((ECFieldFp) field).getP()); +      return primeFieldParamsType; +    } else if (field instanceof ECFieldF2m) { +      // CharTwoFieldParamsType +      ECFieldF2m fieldf2m = (ECFieldF2m) field; +      int[] ks = fieldf2m.getMidTermsOfReductionPolynomial(); + +      // detect if trinomial or pentanomial base is present... +      switch (ks.length) { +      case 1: +        // trinomial base +        TnBFieldParamsType tnBFieldParamsType = ecFactory.createTnBFieldParamsType(); +        tnBFieldParamsType.setM(BigInteger.valueOf(fieldf2m.getM())); +        tnBFieldParamsType.setK(BigInteger.valueOf(ks[0])); +        return tnBFieldParamsType; + +      case 3: +        // pentanomial base +        PnBFieldParamsType pnBFieldParamsType = ecFactory.createPnBFieldParamsType(); +        pnBFieldParamsType.setM(BigInteger.valueOf(fieldf2m.getM())); +        pnBFieldParamsType.setK1(BigInteger.valueOf(ks[0])); +        pnBFieldParamsType.setK2(BigInteger.valueOf(ks[1])); +        pnBFieldParamsType.setK3(BigInteger.valueOf(ks[2])); +        return pnBFieldParamsType; +       +      default: +        throw new KeyTypeNotSupportedException("Only trinomial and pentanomial base is supported."); +      } +       +    } else { +      throw new KeyTypeNotSupportedException("Field element type not supported."); +    } +     +  } +   +  public DomainParamsType createDomainParamsType(ECParameterSpec params) throws KeyTypeNotSupportedException { +    iaik.security.ec.common.ECParameterSpec params2; +    try { +      params2 = iaik.security.ec.common.ECParameterSpec.getParameterSpec(params); +    } catch (InvalidCurveParameterSpecException e) { +      throw new KeyTypeNotSupportedException(e); +    } +    DomainParamsType domainParamsType = ecFactory.createDomainParamsType(); +    EllipticCurve curve = params.getCurve(); + +    String oid = params2.getOID(); +    if (oid !=  null) { +      // NamedCurve +      NamedCurve namedCurve = ecFactory.createDomainParamsTypeNamedCurve(); +      namedCurve.setURN("urn:oid:" + oid); +      domainParamsType.setNamedCurve(namedCurve); +    } else { +      // Explicit parameters +      ExplicitParamsType explicitParamsType = ecFactory.createExplicitParamsType(); +      explicitParamsType.setFieldParams(createFieldParamsType(curve.getField())); + +      CurveParamsType curveParamsType = ecFactory.createCurveParamsType(); +      ECField field = params.getCurve().getField(); + +      // curve coefficients +      curveParamsType.setA(createFieldElemType(curve.getA(), field)); +      curveParamsType.setB(createFieldElemType(curve.getB(), field)); +       +      // seed +      if (curve.getSeed() != null) +        curveParamsType.setSeed(curve.getSeed()); +      explicitParamsType.setCurveParams(curveParamsType); + +      // BasePoint parameters +      BasePointParamsType basePointParamsType = ecFactory.createBasePointParamsType(); +      if (!params.getGenerator().equals(ECPoint.POINT_INFINITY)) { +        basePointParamsType.setBasePoint(createPointType(params.getGenerator(), field)); +      } +      basePointParamsType.setOrder(params.getOrder()); +      basePointParamsType.setCofactor(BigInteger.valueOf(params.getCofactor())); +      explicitParamsType.setBasePointParams(basePointParamsType); +      domainParamsType.setExplicitParams(explicitParamsType); +    } + +    return domainParamsType; +     +  } +   +} | 
