/* * Copyright 2003 Federal Chancellery Austria * MOA-SPSS has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, 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.egovernment.moa.spss.server.config; import iaik.asn1.structures.Name; import iaik.pki.revocation.RevocationSourceTypes; import iaik.utils.RFC2253NameParserException; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; import at.gv.egovernment.moa.spss.util.MessageProvider; import at.gv.egovernment.moaspss.logging.LogMsg; import at.gv.egovernment.moaspss.logging.Logger; /** * A class representing a CRL distribution point. * * @author Sven Aigner * @author Patrick Peck * @version $Id$ */ public class CRLDistributionPoint extends DistributionPoint implements iaik.pki.revocation.CRLDistributionPoint { private static Map RC_MAPPING = new HashMap(); static { // create the mapping between reason code strings and their integer // values RC_MAPPING.put("unused", new Integer(iaik.asn1.structures.DistributionPoint.unused)); RC_MAPPING.put("keyCompromise", new Integer(iaik.asn1.structures.DistributionPoint.keyCompromise)); RC_MAPPING.put("cACompromise", new Integer(iaik.asn1.structures.DistributionPoint.cACompromise)); RC_MAPPING.put("affiliationChanged", new Integer(iaik.asn1.structures.DistributionPoint.affiliationChanged)); RC_MAPPING.put("superseded", new Integer(iaik.asn1.structures.DistributionPoint.superseded)); RC_MAPPING.put("cessationOfOperation", new Integer(iaik.asn1.structures.DistributionPoint.cessationOfOperation)); RC_MAPPING.put("certificateHold", new Integer(iaik.asn1.structures.DistributionPoint.certificateHold)); RC_MAPPING.put("privilegeWithdrawn", new Integer(iaik.asn1.structures.DistributionPoint.privilegeWithdrawn)); RC_MAPPING.put("aACompromise", new Integer(iaik.asn1.structures.DistributionPoint.aACompromise)); } /** * The name of the CA issuing the CRL referred to by this DP. */ private String issuerName_; /** * The reason codes applicable for the distribution point. */ private int reasonCodes; /** * Create a CRLDistributionPoint. * * @param issuerName * The name of the CA issuing the CRL referred to by this DP. * * @param uri * The URI of the distribution point. * * @param reasonCodeStr * A list of reason codes (a space-separated enumeration). */ public CRLDistributionPoint(String issuerName, String uri, String reasonCodeStr) { super(uri); issuerName_ = issuerName; this.reasonCodes = extractReasonCodes(reasonCodeStr); } /** * @see DistributionPoint#getType() */ public String getType() { return RevocationSourceTypes.CRL; } /** * Convert a list of reason codes provided as a String to a * binary representation. * * @param reasonCodeStr * A String containing a blank-separated, textual * representation of reason codes. * @return int A binary representation of reason codes. * @see iaik.asn1.structures.DistributionPoint */ private int extractReasonCodes(String reasonCodeStr) { int codes = 0; StringTokenizer tokenizer = new StringTokenizer(reasonCodeStr); String token; Integer reasonCode; while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); reasonCode = (Integer) RC_MAPPING.get(token); if (reasonCode != null) { codes |= reasonCode.intValue(); } else { MessageProvider msg = MessageProvider.getInstance(); Logger.warn(new LogMsg(msg.getMessage("config.07", new Object[] { token }))); } } // If reasonCodeStr is empty, set all possible reason codes if (codes == 0) codes = iaik.asn1.structures.DistributionPoint.unused | iaik.asn1.structures.DistributionPoint.keyCompromise | iaik.asn1.structures.DistributionPoint.cACompromise | iaik.asn1.structures.DistributionPoint.affiliationChanged | iaik.asn1.structures.DistributionPoint.superseded | iaik.asn1.structures.DistributionPoint.cessationOfOperation | iaik.asn1.structures.DistributionPoint.certificateHold | iaik.asn1.structures.DistributionPoint.privilegeWithdrawn | iaik.asn1.structures.DistributionPoint.aACompromise; return codes; } /** * Return a binary representation of the reason codes of this distribution * point. * * @return The binary representation of the reason codes. */ public int getReasonCodes() { return reasonCodes; } /** * Return a String representation of this distribution point. * * @return The String representation of this distribution * point. * @see java.lang.Object#toString() */ public String toString() { return "(DistributionPoint - " + ("URI<" + getUri()) + ("> REASONCODES<" + getReasonCodes() + ">)"); } /** * @see iaik.pki.revocation.CRLDistributionPoint#getIssuerName() */ public String getIssuerName() { return issuerName_; } @Override public Name getIssuerDN() { try { return new Name(this.issuerName_); } catch (RFC2253NameParserException e) { throw new RuntimeException(e); } } }