1 /*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
89 DerInputStream str = derStrm;
90
91 byte nextByte = (byte)derStrm.peekByte();
92 // check for context specific byte 0; skip it
93 if (((nextByte & 0x0c0) == 0x080) &&
94 ((nextByte & 0x01f) == 0x000)) {
95 DerValue val = str.getDerValue();
96 str = val.data;
97 }
98
99 DerValue[] exts = str.getSequence(5);
100 for (int i = 0; i < exts.length; i++) {
101 Extension ext = new Extension(exts[i]);
102 parseExtension(ext);
103 }
104 } catch (IOException e) {
105 throw new CRLException("Parsing error: " + e.toString());
106 }
107 }
108
109 private static final Class[] PARAMS = {Boolean.class, Object.class};
110
111 // Parse the encoded extension
112 private void parseExtension(Extension ext) throws CRLException {
113 try {
114 Class<?> extClass = OIDMap.getClass(ext.getExtensionId());
115 if (extClass == null) { // Unsupported extension
116 if (ext.isCritical())
117 unsupportedCritExt = true;
118 if (map.put(ext.getExtensionId().toString(), ext) != null)
119 throw new CRLException("Duplicate extensions not allowed");
120 return;
121 }
122 Constructor<?> cons = extClass.getConstructor(PARAMS);
123 Object[] passed = new Object[] {Boolean.valueOf(ext.isCritical()),
124 ext.getExtensionValue()};
125 CertAttrSet<?> crlExt = (CertAttrSet<?>)cons.newInstance(passed);
126 if (map.put(crlExt.getName(), (Extension)crlExt) != null) {
127 throw new CRLException("Duplicate extensions not allowed");
128 }
129 } catch (InvocationTargetException invk) {
|
1 /*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
89 DerInputStream str = derStrm;
90
91 byte nextByte = (byte)derStrm.peekByte();
92 // check for context specific byte 0; skip it
93 if (((nextByte & 0x0c0) == 0x080) &&
94 ((nextByte & 0x01f) == 0x000)) {
95 DerValue val = str.getDerValue();
96 str = val.data;
97 }
98
99 DerValue[] exts = str.getSequence(5);
100 for (int i = 0; i < exts.length; i++) {
101 Extension ext = new Extension(exts[i]);
102 parseExtension(ext);
103 }
104 } catch (IOException e) {
105 throw new CRLException("Parsing error: " + e.toString());
106 }
107 }
108
109 private static final Class<?>[] PARAMS = {Boolean.class, Object.class};
110
111 // Parse the encoded extension
112 private void parseExtension(Extension ext) throws CRLException {
113 try {
114 Class<?> extClass = OIDMap.getClass(ext.getExtensionId());
115 if (extClass == null) { // Unsupported extension
116 if (ext.isCritical())
117 unsupportedCritExt = true;
118 if (map.put(ext.getExtensionId().toString(), ext) != null)
119 throw new CRLException("Duplicate extensions not allowed");
120 return;
121 }
122 Constructor<?> cons = extClass.getConstructor(PARAMS);
123 Object[] passed = new Object[] {Boolean.valueOf(ext.isCritical()),
124 ext.getExtensionValue()};
125 CertAttrSet<?> crlExt = (CertAttrSet<?>)cons.newInstance(passed);
126 if (map.put(crlExt.getName(), (Extension)crlExt) != null) {
127 throw new CRLException("Duplicate extensions not allowed");
128 }
129 } catch (InvocationTargetException invk) {
|