diff -urN ../cert-cvc-1.2.11/build.xml ./build.xml --- ../cert-cvc-1.2.11/build.xml 2009-12-10 16:42:36.000000000 +0100 +++ ./build.xml 2010-11-26 09:58:34.000000000 +0100 @@ -1,11 +1,36 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -21,6 +46,24 @@ + + + + + + + + + + + + + + + + + + @@ -34,7 +77,8 @@ - + + diff -urN ../cert-cvc-1.2.11/changelog.txt ./changelog.txt --- ../cert-cvc-1.2.11/changelog.txt 2009-12-16 15:56:48.000000000 +0100 +++ ./changelog.txt 2010-11-26 09:58:32.000000000 +0100 @@ -1,3 +1,8 @@ +1.2.12 +----- +- Code cleanup fixing PMD warnings +- Relaxed testing of country codes to allow testing with fake countries like XX + 1.2.11 ----- - Fixed slight chance that EC public points would still be wrongly encoded (1 out of 2^16). Patch from Mark Baaijens of Ministerie van Binnenlandse Zaken en Koninkrijksrelaties, Netherlands. diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/AbstractDataField.java ./src/main/java/org/ejbca/cvc/AbstractDataField.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/AbstractDataField.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/AbstractDataField.java 2010-08-23 13:20:40.000000000 +0200 @@ -19,13 +19,16 @@ * Represents a data field (difference from sequence is no sub fields). * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: AbstractDataField.java 5999 2008-08-12 15:41:09Z keijox $ + * @version $Id: AbstractDataField.java 9076 2010-05-20 09:19:37Z anatom $ * */ public abstract class AbstractDataField extends CVCObject { - /** + private static final long serialVersionUID = 1L; + + +/** * Constructor, must supply the tag * @param pType */ diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/AbstractSequence.java ./src/main/java/org/ejbca/cvc/AbstractSequence.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/AbstractSequence.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/AbstractSequence.java 2010-08-23 13:20:40.000000000 +0200 @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Map; import org.ejbca.cvc.exception.ConstructionException; @@ -28,19 +29,21 @@ * Represents a CVC sequence, i e contains one or more subfields * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: AbstractSequence.java 5999 2008-08-12 15:41:09Z keijox $ + * @version $Id: AbstractSequence.java 9077 2010-05-20 10:57:01Z anatom $ * */ public abstract class AbstractSequence extends CVCObject { - private HashMap subfields = new HashMap(); - private List allowedFields; + private static final long serialVersionUID = 1L; + + private final Map subfields = new HashMap(); + private final List allowedFields; /** * Constructor, must supply the tag * @param type */ - AbstractSequence(CVCTagEnum type){ + AbstractSequence(final CVCTagEnum type){ super(type); this.allowedFields = Arrays.asList(getAllowedFields()); } @@ -50,7 +53,7 @@ * @param field * @throws IllegalArgumentException if the supplied field is not allowed in this sequence. */ - void addSubfield(CVCObject field) throws ConstructionException { + void addSubfield(final CVCObject field) throws ConstructionException { if( field!=null ){ if( allowedFields.contains(field.getTag() )) { if( subfields.containsKey(field.getTag()) ){ @@ -73,7 +76,7 @@ * appear when DER-encoded * @return */ - abstract CVCTagEnum[] getAllowedFields(); + protected abstract CVCTagEnum[] getAllowedFields(); /** @@ -82,13 +85,12 @@ * @return * @throws NoSuchFieldException if the subfield hasn't been added */ - CVCObject getSubfield(CVCTagEnum fieldTag) throws NoSuchFieldException { - CVCObject subfield = subfields.get(fieldTag); - if( subfield!=null ){ - return subfield; - } - else { - throw new NoSuchFieldException("Could not find subfield " + fieldTag); + CVCObject getSubfield(final CVCTagEnum fieldTag) throws NoSuchFieldException { + final CVCObject subfield = subfields.get(fieldTag); + if( subfield==null ){ + throw new NoSuchFieldException("Could not find subfield " + fieldTag); + } else { + return subfield; } } @@ -98,7 +100,7 @@ * @param tag * @return AbstractDataField or null if the field hasn't been added */ - CVCObject getOptionalSubfield(CVCTagEnum tag) { + CVCObject getOptionalSubfield(final CVCTagEnum tag) { return subfields.get(tag); } @@ -106,7 +108,7 @@ * Returns all added subfields * @return */ - Collection getSubfields() { + protected Collection getSubfields() { return subfields.values(); } diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CertificateGenerator.java ./src/main/java/org/ejbca/cvc/CertificateGenerator.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CertificateGenerator.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/CertificateGenerator.java 2010-08-23 13:20:40.000000000 +0200 @@ -32,10 +32,10 @@ * Generates CV-certificates and CVC-requests * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: CertificateGenerator.java 6324 2008-09-15 15:03:27Z anatom $ + * @version $Id: CertificateGenerator.java 9077 2010-05-20 10:57:01Z anatom $ * */ -public class CertificateGenerator { +public final class CertificateGenerator { // Only static methods... private CertificateGenerator(){ diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CertificateParser.java ./src/main/java/org/ejbca/cvc/CertificateParser.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CertificateParser.java 2009-12-16 15:57:00.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/CertificateParser.java 2010-08-23 13:20:40.000000000 +0200 @@ -25,10 +25,10 @@ * CVCertificate or any other instance of CVCObject. * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: CertificateParser.java 8438 2009-12-16 14:28:48Z keijox $ + * @version $Id: CertificateParser.java 9077 2010-05-20 10:57:01Z anatom $ * */ -public class CertificateParser { +public final class CertificateParser { // Only static methods... private CertificateParser(){ diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCAuthenticatedRequest.java ./src/main/java/org/ejbca/cvc/CVCAuthenticatedRequest.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCAuthenticatedRequest.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/CVCAuthenticatedRequest.java 2010-08-23 13:20:40.000000000 +0200 @@ -30,13 +30,13 @@ * Represents a CVC-request having an outer signature * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: CVCAuthenticatedRequest.java 6324 2008-09-15 15:03:27Z anatom $ + * @version $Id: CVCAuthenticatedRequest.java 9077 2010-05-20 10:57:01Z anatom $ * */ -public class CVCAuthenticatedRequest - extends AbstractSequence implements Signable { - +public class CVCAuthenticatedRequest extends AbstractSequence implements Signable { + private static final long serialVersionUID = 1L; + private static CVCTagEnum[] allowedFields = new CVCTagEnum[] { CVCTagEnum.CV_CERTIFICATE, CVCTagEnum.CA_REFERENCE, @@ -44,7 +44,7 @@ }; @Override - CVCTagEnum[] getAllowedFields() { + protected CVCTagEnum[] getAllowedFields() { return allowedFields; } diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCAuthorizationTemplate.java ./src/main/java/org/ejbca/cvc/CVCAuthorizationTemplate.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCAuthorizationTemplate.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/CVCAuthorizationTemplate.java 2010-08-23 13:20:40.000000000 +0200 @@ -19,19 +19,20 @@ * Represents the field 'Certificate Holder Authorization Template' * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: CVCAuthorizationTemplate.java 5999 2008-08-12 15:41:09Z keijox $ + * @version $Id: CVCAuthorizationTemplate.java 9077 2010-05-20 10:57:01Z anatom $ * */ -public class CVCAuthorizationTemplate - extends AbstractSequence { +public class CVCAuthorizationTemplate extends AbstractSequence { + private static final long serialVersionUID = 1L; + private static CVCTagEnum[] allowedFields = new CVCTagEnum[] { CVCTagEnum.OID, CVCTagEnum.ROLE_AND_ACCESS_RIGHTS }; @Override - CVCTagEnum[] getAllowedFields() { + protected CVCTagEnum[] getAllowedFields() { return allowedFields; } diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCertificateBody.java ./src/main/java/org/ejbca/cvc/CVCertificateBody.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCertificateBody.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/CVCertificateBody.java 2010-08-23 13:20:40.000000000 +0200 @@ -21,12 +21,13 @@ * Represents a CertificateBody * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: CVCertificateBody.java 6221 2008-09-01 10:51:41Z keijox $ + * @version $Id: CVCertificateBody.java 9077 2010-05-20 10:57:01Z anatom $ * */ -public class CVCertificateBody - extends AbstractSequence { +public class CVCertificateBody extends AbstractSequence { + private static final long serialVersionUID = 1L; + private static CVCTagEnum[] allowedFields = new CVCTagEnum[] { CVCTagEnum.PROFILE_IDENTIFIER, CVCTagEnum.CA_REFERENCE, @@ -38,7 +39,7 @@ }; @Override - CVCTagEnum[] getAllowedFields() { + protected CVCTagEnum[] getAllowedFields() { return allowedFields; } diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCertificate.java ./src/main/java/org/ejbca/cvc/CVCertificate.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCertificate.java 2009-05-12 15:15:20.000000000 +0200 +++ ./src/main/java/org/ejbca/cvc/CVCertificate.java 2010-08-23 13:20:40.000000000 +0200 @@ -29,17 +29,19 @@ * Represents a Card Verifiable Certificate according to the specification for EAC 1.11. * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: CVCertificate.java 5999 2008-08-12 15:41:09Z keijox $ + * @version $Id: CVCertificate.java 9077 2010-05-20 10:57:01Z anatom $ */ public class CVCertificate extends AbstractSequence implements Signable { + private static final long serialVersionUID = 1L; + private static CVCTagEnum[] allowedFields = new CVCTagEnum[] { CVCTagEnum.CERTIFICATE_BODY, CVCTagEnum.SIGNATURE }; @Override - CVCTagEnum[] getAllowedFields() { + protected CVCTagEnum[] getAllowedFields() { return allowedFields; } diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCObject.java ./src/main/java/org/ejbca/cvc/CVCObject.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/CVCObject.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/CVCObject.java 2010-08-23 13:20:40.000000000 +0200 @@ -22,11 +22,12 @@ * Base class for all objects in a CV-certificate * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: CVCObject.java 5999 2008-08-12 15:41:09Z keijox $ + * @version $Id: CVCObject.java 9077 2010-05-20 10:57:01Z anatom $ * */ -public abstract class CVCObject - implements Serializable { +public abstract class CVCObject implements Serializable { + + private static final long serialVersionUID = 1L; public static final int CVC_VERSION = 0; @@ -36,14 +37,14 @@ private static final int LONG_LENGTH = 8; - private CVCTagEnum tag; + final private CVCTagEnum tag; private AbstractSequence parent; /** * Constructor taking a tag * @param tag */ - public CVCObject(CVCTagEnum tag){ + public CVCObject(final CVCTagEnum tag){ this.tag = tag; } @@ -67,7 +68,7 @@ * Sets the parent * @param parent */ - public void setParent(AbstractSequence parent) { + public void setParent(final AbstractSequence parent) { this.parent = parent; } @@ -83,7 +84,7 @@ * @param lenValue * @return */ - protected static byte[] encodeLength(int lenValue){ + protected static byte[] encodeLength(final int lenValue){ byte lenBytes = 0; if( lenValue>0x7F ){ // Assume that one byte is sufficient for representing the length @@ -93,7 +94,7 @@ lenBytes = 2; } } - ByteBuffer bb = ByteBuffer.allocate(1 + lenBytes); + final ByteBuffer bb = ByteBuffer.allocate(1 + lenBytes); if( lenBytes==0 ){ // One byte is enough - write the length value directly bb.put(0, (byte)lenValue); @@ -118,10 +119,10 @@ * @param in * @return */ - protected static int decodeLength(DataInputStream in) throws IOException { + protected static int decodeLength(final DataInputStream in) throws IOException { int lenBytes = 1; int length = 0; - int b1 = in.read(); + final int b1 = in.read(); if( b1>0x7F ) { // If the MSB is set then the number of bytes is stored here lenBytes = b1 & 0xF; if( lenBytes==1 ) { @@ -145,8 +146,8 @@ * @return * @see trimByteArray(byte[] */ - protected static byte[] toByteArray(Integer intVal) { - ByteBuffer bb = ByteBuffer.allocate(INT_LENGTH); + protected static byte[] toByteArray(final Integer intVal) { + final ByteBuffer bb = ByteBuffer.allocate(INT_LENGTH); bb.putInt(intVal); return trimByteArray(bb.array()); } @@ -158,7 +159,7 @@ * @see trimByteArray(byte[] */ protected static byte[] toByteArray(Long longVal) { - ByteBuffer bb = ByteBuffer.allocate(LONG_LENGTH); + final ByteBuffer bb = ByteBuffer.allocate(LONG_LENGTH); bb.putLong(longVal); return trimByteArray(bb.array()); } @@ -175,19 +176,19 @@ // Locate the first position of a non-zero for( pos=0; pos= 'A' && c <= 'Z'; + } - // Validates country code according to ISO 3166 + // Validates country code according to ISO 3166. AR: Not anymore :-) Testing needs "unusual" countries private boolean isValidCountry(String countryCode) { - return Arrays.asList(Locale.getISOCountries()).contains(countryCode); + return okChar (countryCode.charAt(0)) && okChar (countryCode.charAt(1)); + } @Override diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/Signable.java ./src/main/java/org/ejbca/cvc/Signable.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/Signable.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/Signable.java 2010-08-23 13:20:40.000000000 +0200 @@ -17,8 +17,8 @@ /** * Interface for signable classes, forcing them to implement * a method for getting the data to be signed - * $Author: $ $Date: $ - * $Revision: $ + * + * @version $Id: Signable.java 9075 2010-05-20 08:09:08Z anatom $ */ public interface Signable { diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/util/BCECUtil.java ./src/main/java/org/ejbca/cvc/util/BCECUtil.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/util/BCECUtil.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/util/BCECUtil.java 2010-08-23 13:20:40.000000000 +0200 @@ -4,6 +4,7 @@ import java.io.IOException; import java.math.BigInteger; import java.security.SignatureException; +import java.util.Locale; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.ASN1InputStream; @@ -15,24 +16,27 @@ /** This is directly copied from org.bouncycastle.jce.provider.asymmetric.ec.Signature * BC version 1.41b04 was the base of the copy-paste operation. * - * @version $Id$ + * @version $Id: BCECUtil.java 9075 2010-05-20 08:09:08Z anatom $ */ -public class BCECUtil +public final class BCECUtil { - public static byte[] convertX962SigToCVC(String algorithmName, byte[] xsig) throws IOException { + /** private constructor this is a static utility class */ + private BCECUtil() {} + + public static byte[] convertX962SigToCVC(final String algorithmName, final byte[] xsig) throws IOException { // Only do this if it's an ECDSA algorithm - if (!algorithmName.toUpperCase().contains("ECDSA")) { + if (!algorithmName.toUpperCase(Locale.getDefault()).contains("ECDSA")) { return xsig; } // Read r and s from asn.1 encoded x9.62 signature - ASN1InputStream aIn = new ASN1InputStream(xsig); - ASN1Sequence seq = (ASN1Sequence)aIn.readObject(); - BigInteger r = ((DERInteger)seq.getObjectAt(0)).getValue(); - BigInteger s = ((DERInteger)seq.getObjectAt(1)).getValue(); + final ASN1InputStream aIn = new ASN1InputStream(xsig); + final ASN1Sequence seq = (ASN1Sequence)aIn.readObject(); + final BigInteger r = ((DERInteger)seq.getObjectAt(0)).getValue(); + final BigInteger s = ((DERInteger)seq.getObjectAt(1)).getValue(); // Write r and s to not asn.1 encoded cvc signature - byte[] first = makeUnsigned(r); - byte[] second = makeUnsigned(s); + final byte[] first = makeUnsigned(r); + final byte[] second = makeUnsigned(s); byte[] res; if (first.length > second.length) @@ -50,25 +54,25 @@ return res; } - public static byte[] convertCVCSigToX962(String algorithmName, byte[] xsig) throws SignatureException { + public static byte[] convertCVCSigToX962(final String algorithmName, final byte[] xsig) throws SignatureException { // Only do this if it's an ECDSA algorithm - if (!algorithmName.toUpperCase().contains("ECDSA")) { + if (!algorithmName.toUpperCase(Locale.getDefault()).contains("ECDSA")) { return xsig; } // Read r and s from non asn.1 encoded CVC signature - byte[] first = new byte[xsig.length / 2]; - byte[] second = new byte[xsig.length / 2]; + final byte[] first = new byte[xsig.length / 2]; + final byte[] second = new byte[xsig.length / 2]; System.arraycopy(xsig, 0, first, 0, first.length); System.arraycopy(xsig, first.length, second, 0, second.length); - BigInteger r = new BigInteger(1, first); - BigInteger s = new BigInteger(1, second); + final BigInteger r = new BigInteger(1, first); + final BigInteger s = new BigInteger(1, second); // Write r and s to asn.1 encoded X9.62 signature - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - DEROutputStream dOut = new DEROutputStream(bOut); - ASN1EncodableVector v = new ASN1EncodableVector(); + final ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + final DEROutputStream dOut = new DEROutputStream(bOut); + final ASN1EncodableVector v = new ASN1EncodableVector(); v.add(new DERInteger(r)); v.add(new DERInteger(s)); @@ -82,19 +86,16 @@ return bOut.toByteArray(); } - private static byte[] makeUnsigned(BigInteger val) + private static byte[] makeUnsigned(final BigInteger val) { byte[] res = val.toByteArray(); if (res[0] == 0) { - byte[] tmp = new byte[res.length - 1]; - + final byte[] tmp = new byte[res.length - 1]; System.arraycopy(res, 1, tmp, 0, tmp.length); - - return tmp; + res = tmp; } - return res; } diff -urN ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/util/StringConverter.java ./src/main/java/org/ejbca/cvc/util/StringConverter.java --- ../cert-cvc-1.2.11/src/main/java/org/ejbca/cvc/util/StringConverter.java 2008-11-24 11:50:10.000000000 +0100 +++ ./src/main/java/org/ejbca/cvc/util/StringConverter.java 2010-08-23 13:20:40.000000000 +0200 @@ -1,2 +1,2 @@ /************************************************************************* * * * CERT-CVC: EAC 1.11 Card Verifiable Certificate Library * * * * This software is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or any later version. * * * * See terms of license at gnu.org. * * * *************************************************************************/ package org.ejbca.cvc.util; -/** * Utility for mapping between byte values and hex codes * * @author Keijo Kurkinen, Swedish National Police Board * @version $Id: StringConverter.java 6012 2008-08-13 09:15:56Z keijox $ */ public class StringConverter { private static final char HEXCHAR[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; private static final String HEXINDEX = "0123456789abcdef ABCDEF"; public static byte[] hexToByte(String s) { int l = s.length() / 2; byte data[] = new byte[l]; int j = 0; for (int i = 0; i < l; i++) { char c = s.charAt(j++); int n, b; n = HEXINDEX.indexOf(c); b = (n & 0xf) << 4; c = s.charAt(j++); n = HEXINDEX.indexOf(c); b += (n & 0xf); data[i] = (byte)b; } return data; } public static String byteToHex(byte b[]) { return byteToHex(b, null); } public static String byteToHex(byte b[], String sep) { int len = b.length; StringBuffer sb = new StringBuffer(); for (int i = 0; i < len; i++) { sb.append(byteToHex(b[i])); if (sep != null && (i + 1) < len) sb.append(sep); } return sb.toString(); } public static String byteToHex(byte b) { int c = ((int)b) & 0xff; char c1 = HEXCHAR[c >> 4 & 0xF]; char c2 = HEXCHAR[c & 0xF]; return "" + c1 + c2; } } +/** * Utility for mapping between byte values and hex codes * * @author Keijo Kurkinen, Swedish National Police Board * @version $Id: StringConverter.java 9074 2010-05-20 08:06:39Z anatom $ */ public final class StringConverter { private static final char HEXCHAR[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; private static final String HEXINDEX = "0123456789abcdef ABCDEF"; private StringConverter() {} public static byte[] hexToByte(final String s) { final int l = s.length() / 2; byte data[] = new byte[l]; int j = 0; for (int i = 0; i < l; i++) { char c = s.charAt(j++); int n, b; n = HEXINDEX.indexOf(c); b = (n & 0xf) << 4; c = s.charAt(j++); n = HEXINDEX.indexOf(c); b += (n & 0xf); data[i] = (byte)b; } return data; } public static String byteToHex(final byte b[]) { return byteToHex(b, null); } public static String byteToHex(final byte b[], final String sep) { final int len = b.length; final StringBuffer sb = new StringBuffer(); for (int i = 0; i < len; i++) { sb.append(byteToHex(b[i])); if (sep != null && (i + 1) < len) { sb.append(sep); } } return sb.toString(); } public static String byteToHex(final byte b) { final int c = ((int)b) & 0xff; final char c1 = HEXCHAR[c >> 4 & 0xF]; final char c2 = HEXCHAR[c & 0xF]; return Character.toString(c1) + c2; } } diff -urN ../cert-cvc-1.2.11/src/test/java/org/ejbca/cvc/TestCVCRequestABSP.java ./src/test/java/org/ejbca/cvc/TestCVCRequestABSP.java --- ../cert-cvc-1.2.11/src/test/java/org/ejbca/cvc/TestCVCRequestABSP.java 2008-11-24 11:50:08.000000000 +0100 +++ ./src/test/java/org/ejbca/cvc/TestCVCRequestABSP.java 2010-08-23 13:20:40.000000000 +0200 @@ -25,7 +25,7 @@ * Tests CVCRequest with outer signature * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: TestCVCRequest.java 6030 2008-08-13 13:35:31Z keijox $ + * @version $Id: TestCVCRequestABSP.java 9075 2010-05-20 08:09:08Z anatom $ */ public class TestCVCRequestABSP extends TestCase implements CVCTest { diff -urN ../cert-cvc-1.2.11/src/test/java/org/ejbca/cvc/TestDatafields.java ./src/test/java/org/ejbca/cvc/TestDatafields.java --- ../cert-cvc-1.2.11/src/test/java/org/ejbca/cvc/TestDatafields.java 2009-12-16 15:57:00.000000000 +0100 +++ ./src/test/java/org/ejbca/cvc/TestDatafields.java 2010-11-26 09:58:34.000000000 +0100 @@ -26,7 +26,7 @@ * Tests basic functionality for AbstractDataField * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: TestDatafields.java 8439 2009-12-16 14:29:25Z keijox $ + * @version $Id: TestDatafields.java 10579 2010-11-18 20:00:32Z anderspki $ */ public class TestDatafields extends TestCase implements CVCTest { @@ -148,6 +148,35 @@ } try { + new HolderReferenceField("S",HR_HOLDER_MNEMONIC,HR_SEQUENCE_NO); + throw new Exception("Too short countryCode should throw IllegalArgumentException!"); + } + catch( IllegalArgumentException e ){ + // This is expected + } + + try { + new HolderReferenceField("A1",HR_HOLDER_MNEMONIC,HR_SEQUENCE_NO); + throw new Exception("Bad countryCode should throw IllegalArgumentException!"); + } + catch( IllegalArgumentException e ){ + // This is expected + } + + try { + new HolderReferenceField("aa",HR_HOLDER_MNEMONIC,HR_SEQUENCE_NO); + throw new Exception("Bad countryCode should throw IllegalArgumentException!"); + } + catch( IllegalArgumentException e ){ + // This is expected + } + + new HolderReferenceField("AA",HR_HOLDER_MNEMONIC,HR_SEQUENCE_NO); + new HolderReferenceField("AZ",HR_HOLDER_MNEMONIC,HR_SEQUENCE_NO); + new HolderReferenceField("ZA",HR_HOLDER_MNEMONIC,HR_SEQUENCE_NO); + new HolderReferenceField("ZZ",HR_HOLDER_MNEMONIC,HR_SEQUENCE_NO); + + try { new HolderReferenceField(HR_COUNTRY_CODE,"",HR_SEQUENCE_NO); throw new Exception("Empty mnemonic should throw IllegalArgumentException!"); } diff -urN ../cert-cvc-1.2.11/src/test/java/org/ejbca/cvc/TestECCCVCertificate.java ./src/test/java/org/ejbca/cvc/TestECCCVCertificate.java --- ../cert-cvc-1.2.11/src/test/java/org/ejbca/cvc/TestECCCVCertificate.java 2008-11-24 11:50:08.000000000 +0100 +++ ./src/test/java/org/ejbca/cvc/TestECCCVCertificate.java 2010-08-23 13:20:40.000000000 +0200 @@ -34,7 +34,7 @@ * Tests specific for ECC CV Certificates * * @author Keijo Kurkinen, Swedish National Police Board - * @version $Id: TestCVCertificate.java 5876 2008-07-11 12:41:03Z anatom $ + * @version $Id: TestECCCVCertificate.java 9075 2010-05-20 08:09:08Z anatom $ */ public class TestECCCVCertificate extends TestCase implements CVCTest {