View Javadoc

1   package org.eparapher.core.signature;
2   
3   import javax.xml.crypto.dsig.CanonicalizationMethod;
4   import javax.xml.crypto.dsig.DigestMethod;
5   import javax.xml.crypto.dsig.SignatureMethod;
6   import javax.xml.crypto.dsig.Transform;
7   
8   import org.eparapher.core.EParapherManager;
9   import org.eparapher.core.tools.StringUtils;
10  
11  
12  public class XMLSignatureParameters extends DefaultSignatureParameters {
13  
14  	public final static String[][] XMLHashAlgFamilies = { { "SHA 1",     DigestMethod.SHA1 },
15  		  												  { "SHA 256",   DigestMethod.SHA256 },
16  		  												  { "SHA 512",   DigestMethod.SHA512 },
17  		  												  { "RIPEMD160", DigestMethod.RIPEMD160 } };
18  
19  	public final static String[][] XMLSigAlgFamilies = { { "RSA SHA 1",     SignatureMethod.RSA_SHA1 },
20  		  												 { "DSA SHA 1",   SignatureMethod.DSA_SHA1 },
21  		  												 { "HMAC SHA1",   SignatureMethod.HMAC_SHA1 } };
22  	
23  	public final static String[][] XMLTransformFamilies = { { "ENVELOPED", Transform.ENVELOPED },
24  		  												    { "BASE64",    Transform.BASE64 },
25  		  												    //{ "XSLT",      Transform.XSLT },
26  		  												    { "XPATH",     Transform.XPATH },
27  		  												    { "XPATH2",    Transform.XPATH2 } };
28  	
29  	public final static String[][] XMLCanonicalFamilies = { { "EXCLUSIVE", CanonicalizationMethod.EXCLUSIVE },
30  		  												    { "EXCLUSIVE_WITH_COMMENTS",   CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS },
31  		  												    { "INCLUSIVE", CanonicalizationMethod.INCLUSIVE },
32  		  												    { "INCLUSIVE_WITH_COMMENTS",     CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS } };
33  	
34  	public final static String[][] XMLSigFormatFamilies = { { "Detached",     "Detached" },
35  															{ "Enveloped",    "Enveloped" },
36  															//{ "Enveloping",   "Enveloping" }
37  														  };
38  
39  	public static final String[] XMLExtentions          = { "xml","htm","html","xhtml","xst",
40  															"xslt","xsl","xbrl","shtml"};
41  	
42  	private String  digestAlg;
43  	private String  signatureAlg;
44  	
45  	private String  transform;
46  	private String  canonical;
47  	
48  	private String ObjectIds ;
49  
50  	private boolean detached;
51  	private boolean enveloped;
52  	private boolean enveloping;
53  	
54  	private boolean overwritesignedfile;
55  	
56  	private boolean dtdVerification;
57  
58  	
59  	public XMLSignatureParameters() {
60  
61  		digestAlg          = DigestMethod.SHA512;
62  		signatureAlg       = SignatureMethod.RSA_SHA1;
63  		transform          = Transform.ENVELOPED;
64  		canonical          = CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS;
65  		detached           = false;
66  		enveloped          = true;
67  		enveloping         = false;
68  		dtdVerification    = true;
69  	}
70  
71  	public void setXMLSignatureParamsFromPreferences() {
72  		
73  		loadDefaultSignatureParameters();
74  		
75  		if (EParapherManager.getInstance().getSettings().getXMLSignatureFormat().equals(XMLSigFormatFamilies[0][1]))
76  			detached        =  true;
77  		else 
78  			detached        =  false;
79  		if (EParapherManager.getInstance().getSettings().getXMLSignatureFormat().equals(XMLSigFormatFamilies[1][1]))
80  			enveloped       =  true;
81  		else 
82  			enveloped        =  false;
83  		//TODO : reactivate XML envelopping signature here
84  		//if (EPConfig.getXMLSignatureFormat().equals(XMLSigFormatFamilies[2][1]))
85  			//enveloping      =  true;
86  		//else 
87  			enveloping        =  false;
88  		
89  		overwritesignedfile =  EParapherManager.getInstance().getSettings().isXMLSignatureReplaceFile();
90  
91  		digestAlg           =  EParapherManager.getInstance().getSettings().getXMLDigestAlgorithm();
92  		signatureAlg        =  EParapherManager.getInstance().getSettings().getXMLSignatureAlgorithm();
93  		
94  		transform           =  EParapherManager.getInstance().getSettings().getXMLTransform();
95  		canonical           =  EParapherManager.getInstance().getSettings().getXMLCanonical();
96  		
97  		ObjectIds           =  EParapherManager.getInstance().getSettings().getXMLObjectID();
98  		
99  		dtdVerification     = EParapherManager.getInstance().getSettings().isXMLDTDValidation();
100 	}
101 
102 	public boolean isDetached() {
103 		return detached;
104 	}
105 
106 	public void setDetached() {
107 		this.detached   = true;
108 		this.enveloped  = false;
109 		this.enveloping = false;
110 	}
111 
112 	public boolean isEnveloped() {
113 		return enveloped;
114 	}
115 
116 	public void setEnveloped() {
117 		this.detached   = false;
118 		this.enveloped  = true;
119 		this.enveloping = false;
120 	}
121 
122 	public boolean isEnveloping() {
123 		return enveloping;
124 	}
125 
126 	public void setEnveloping() {
127 		this.detached   = false;
128 		this.enveloped  = false;
129 		this.enveloping = true;
130 	}
131 
132 	public String getDigestAlg() {
133 		return digestAlg;
134 	}
135 
136 	public void setDigestAlg(String digestAlg) {
137 		this.digestAlg = digestAlg;
138 	}
139 
140 	public String getTransform() {
141 		return transform;
142 	}
143 
144 	public void setTransform(String transform) {
145 		this.transform = transform;
146 	}
147 
148 	public String getCanonical() {
149 		return canonical;
150 	}
151 
152 	public void setCanonical(String canonical) {
153 		this.canonical = canonical;
154 	}
155 
156 	public String getObjectIds() {
157 		return ObjectIds;
158 	}
159 
160 	public void setObjectIds(String objectIds) {
161 		ObjectIds = objectIds;
162 	}
163 
164 	public int getTransformAsInt() {
165 		return StringUtils.getPositionFromFamilies(transform,XMLTransformFamilies);
166 	}
167 
168 	public int getCanonicalAsInt() {
169 		return StringUtils.getPositionFromFamilies(canonical,XMLCanonicalFamilies);
170 	}
171 
172 	public int getDigestAlgAsInt() {
173 		return StringUtils.getPositionFromFamilies(digestAlg,XMLHashAlgFamilies);
174 	}
175 
176 	public int getSignatureAlgAsInt() {
177 		return StringUtils.getPositionFromFamilies(this.signatureAlg,XMLSigAlgFamilies);
178 	}
179 	
180 	public void setFormat(int format) {
181 		//int key = eParapherTools.getPositionFromFamilies(format,XMLSigFormatFamilies);
182 		switch (format) {
183 		case 0:
184 			this.setDetached();
185 			break;
186 		case 1:
187 			this.setEnveloped();
188 			break;
189 		case 2:
190 			this.setEnveloping();
191 			break;
192 		default:
193 			this.setEnveloped();
194 			break;
195 		}
196 	}
197 	
198 	public int getFormatAsInt() {
199 		if (detached)
200 			return 0;
201 		if (enveloped)
202 			return 1;
203 		if (enveloping)
204 			return 2;
205 
206 		//log.warn("Could not define Default XML DSig Format!");
207 		
208 		return 1;
209 	}
210 
211 	public String getSignatureAlg() {
212 		return signatureAlg;
213 	}
214 
215 	public void setSignatureAlg(String signatureAlg) {
216 		this.signatureAlg = signatureAlg;
217 	}
218 
219 	public boolean isOverwritesignedfile() {
220 		return overwritesignedfile;
221 	}
222 
223 	public void setOverwritesignedfile(boolean overwritesignedfile) {
224 		this.overwritesignedfile = overwritesignedfile;
225 	}
226 
227 	public void setDTDValidation(boolean dtdvalidation) {
228 		dtdVerification = dtdvalidation;
229 	}
230 
231 	public boolean isDTDValidation() {
232 		return dtdVerification;
233 	}
234 
235 }