mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-04 21:20:17 +00:00
Merge
This commit is contained in:
commit
ee1b9621d9
@ -102,7 +102,7 @@ SUNWprivate_1.1 {
|
||||
Java_sun_security_pkcs11_Secmod_nssGetLibraryHandle;
|
||||
Java_sun_security_pkcs11_Secmod_nssLoadLibrary;
|
||||
Java_sun_security_pkcs11_Secmod_nssVersionCheck;
|
||||
Java_sun_security_pkcs11_Secmod_nssInit;
|
||||
Java_sun_security_pkcs11_Secmod_nssInitialize;
|
||||
Java_sun_security_pkcs11_Secmod_nssGetModuleList;
|
||||
|
||||
local:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -102,7 +102,7 @@ SUNWprivate_1.1 {
|
||||
Java_sun_security_pkcs11_Secmod_nssGetLibraryHandle;
|
||||
Java_sun_security_pkcs11_Secmod_nssLoadLibrary;
|
||||
Java_sun_security_pkcs11_Secmod_nssVersionCheck;
|
||||
Java_sun_security_pkcs11_Secmod_nssInit;
|
||||
Java_sun_security_pkcs11_Secmod_nssInitialize;
|
||||
Java_sun_security_pkcs11_Secmod_nssGetModuleList;
|
||||
|
||||
local:
|
||||
|
||||
@ -32,6 +32,7 @@ import java.util.List;
|
||||
import javax.swing.RootPaneContainer;
|
||||
|
||||
import com.apple.eawt.AppEvent.FullScreenEvent;
|
||||
import sun.awt.SunToolkit;
|
||||
|
||||
import java.lang.annotation.Native;
|
||||
|
||||
@ -75,7 +76,7 @@ final class FullScreenHandler {
|
||||
static void handleFullScreenEventFromNative(final Window window, final int type) {
|
||||
if (!(window instanceof RootPaneContainer)) return; // handles null
|
||||
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
SunToolkit.executeOnEventHandlerThread(window, new Runnable() {
|
||||
public void run() {
|
||||
final FullScreenHandler handler = getHandlerFor((RootPaneContainer)window);
|
||||
if (handler != null) handler.notifyListener(new FullScreenEvent(window), type);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,6 +31,8 @@ import java.io.File;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import sun.awt.AppContext;
|
||||
import sun.awt.SunToolkit;
|
||||
|
||||
import com.apple.eawt.AppEvent.*;
|
||||
|
||||
@ -269,11 +271,9 @@ class _AppEventHandler {
|
||||
}
|
||||
|
||||
class _AppReOpenedDispatcher extends _AppEventMultiplexor<AppReOpenedListener> {
|
||||
void performOnListeners(final List<AppReOpenedListener> listeners, final _NativeEvent event) {
|
||||
void performOnListener(AppReOpenedListener listener, final _NativeEvent event) {
|
||||
final AppReOpenedEvent e = new AppReOpenedEvent();
|
||||
for (final AppReOpenedListener listener : listeners) {
|
||||
listener.appReOpened(e);
|
||||
}
|
||||
listener.appReOpened(e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -415,50 +415,67 @@ class _AppEventHandler {
|
||||
}
|
||||
|
||||
abstract class _AppEventMultiplexor<L> {
|
||||
final List<L> _listeners = new ArrayList<L>(0);
|
||||
private final Map<L, AppContext> listenerToAppContext =
|
||||
new IdentityHashMap<L, AppContext>();
|
||||
boolean nativeListenerRegistered;
|
||||
|
||||
// called from AppKit Thread-0
|
||||
void dispatch(final _NativeEvent event, final Object... args) {
|
||||
// grab a local ref to the listeners
|
||||
final List<L> localListeners;
|
||||
// grab a local ref to the listeners and its contexts as an array of the map's entries
|
||||
final ArrayList<Map.Entry<L, AppContext>> localEntries;
|
||||
synchronized (this) {
|
||||
if (_listeners.size() == 0) return;
|
||||
localListeners = new ArrayList<L>(_listeners);
|
||||
if (listenerToAppContext.size() == 0) {
|
||||
return;
|
||||
}
|
||||
localEntries = new ArrayList<Map.Entry<L, AppContext>>(listenerToAppContext.size());
|
||||
localEntries.addAll(listenerToAppContext.entrySet());
|
||||
}
|
||||
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
performOnListeners(localListeners, event);
|
||||
}
|
||||
});
|
||||
for (final Map.Entry<L, AppContext> e : localEntries) {
|
||||
final L listener = e.getKey();
|
||||
final AppContext listenerContext = e.getValue();
|
||||
SunToolkit.invokeLaterOnAppContext(listenerContext, new Runnable() {
|
||||
public void run() {
|
||||
performOnListener(listener, event);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
synchronized void addListener(final L listener) {
|
||||
setListenerContext(listener, AppContext.getAppContext());
|
||||
|
||||
if (!nativeListenerRegistered) {
|
||||
registerNativeListener();
|
||||
nativeListenerRegistered = true;
|
||||
}
|
||||
_listeners.add(listener);
|
||||
}
|
||||
|
||||
synchronized void removeListener(final L listener) {
|
||||
_listeners.remove(listener);
|
||||
listenerToAppContext.remove(listener);
|
||||
}
|
||||
|
||||
abstract void performOnListeners(final List<L> listeners, final _NativeEvent event);
|
||||
abstract void performOnListener(L listener, final _NativeEvent event);
|
||||
void registerNativeListener() { }
|
||||
|
||||
private void setListenerContext(L listener, AppContext listenerContext) {
|
||||
if (listenerContext == null) {
|
||||
throw new RuntimeException(
|
||||
"Attempting to add a listener from a thread group without AppContext");
|
||||
}
|
||||
listenerToAppContext.put(listener, AppContext.getAppContext());
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _BooleanAppEventMultiplexor<L, E> extends _AppEventMultiplexor<L> {
|
||||
@Override
|
||||
void performOnListeners(final List<L> listeners, final _NativeEvent event) {
|
||||
void performOnListener(L listener, final _NativeEvent event) {
|
||||
final boolean isTrue = Boolean.TRUE.equals(event.get(0));
|
||||
final E e = createEvent(isTrue);
|
||||
if (isTrue) {
|
||||
for (final L listener : listeners) performTrueEventOn(listener, e);
|
||||
performTrueEventOn(listener, e);
|
||||
} else {
|
||||
for (final L listener : listeners) performFalseEventOn(listener, e);
|
||||
performFalseEventOn(listener, e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -479,30 +496,34 @@ class _AppEventHandler {
|
||||
*/
|
||||
abstract class _AppEventDispatcher<H> {
|
||||
H _handler;
|
||||
AppContext handlerContext;
|
||||
|
||||
// called from AppKit Thread-0
|
||||
void dispatch(final _NativeEvent event) {
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
// grab a local ref to the handler
|
||||
final H localHandler;
|
||||
synchronized (_AppEventDispatcher.this) {
|
||||
localHandler = _handler;
|
||||
}
|
||||
// grab a local ref to the handler
|
||||
final H localHandler;
|
||||
final AppContext localHandlerContext;
|
||||
synchronized (_AppEventDispatcher.this) {
|
||||
localHandler = _handler;
|
||||
localHandlerContext = handlerContext;
|
||||
}
|
||||
|
||||
// invoke the handler outside of the synchronized block
|
||||
if (localHandler == null) {
|
||||
performDefaultAction(event);
|
||||
} else {
|
||||
if (localHandler == null) {
|
||||
performDefaultAction(event);
|
||||
} else {
|
||||
SunToolkit.invokeLaterOnAppContext(localHandlerContext, new Runnable() {
|
||||
public void run() {
|
||||
performUsing(localHandler, event);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
synchronized void setHandler(final H handler) {
|
||||
this._handler = handler;
|
||||
|
||||
setHandlerContext(AppContext.getAppContext());
|
||||
|
||||
// if a new handler is installed, block addition of legacy ApplicationListeners
|
||||
if (handler == legacyHandler) return;
|
||||
legacyHandler.blockLegacyAPI();
|
||||
@ -510,6 +531,15 @@ class _AppEventHandler {
|
||||
|
||||
void performDefaultAction(final _NativeEvent event) { } // by default, do nothing
|
||||
abstract void performUsing(final H handler, final _NativeEvent event);
|
||||
|
||||
protected void setHandlerContext(AppContext ctx) {
|
||||
if (ctx == null) {
|
||||
throw new RuntimeException(
|
||||
"Attempting to set a handler from a thread group without AppContext");
|
||||
}
|
||||
|
||||
handlerContext = ctx;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _QueuingAppEventDispatcher<H> extends _AppEventDispatcher<H> {
|
||||
@ -531,6 +561,8 @@ class _AppEventHandler {
|
||||
synchronized void setHandler(final H handler) {
|
||||
this._handler = handler;
|
||||
|
||||
setHandlerContext(AppContext.getAppContext());
|
||||
|
||||
// dispatch any events in the queue
|
||||
if (queuedEvents != null) {
|
||||
// grab a local ref to the queue, so the real one can be nulled out
|
||||
|
||||
@ -25,6 +25,8 @@
|
||||
|
||||
package com.apple.eawt.event;
|
||||
|
||||
import sun.awt.SunToolkit;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
@ -70,7 +72,7 @@ final class GestureHandler {
|
||||
static void handleGestureFromNative(final Window window, final int type, final double x, final double y, final double a, final double b) {
|
||||
if (window == null) return; // should never happen...
|
||||
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
SunToolkit.executeOnEventHandlerThread(window, new Runnable() {
|
||||
public void run() {
|
||||
final Component component = SwingUtilities.getDeepestComponentAt(window, (int)x, (int)y);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -32,6 +32,7 @@ import java.util.Hashtable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
import sun.awt.SunToolkit;
|
||||
import sun.lwawt.LWToolkit;
|
||||
import sun.lwawt.macosx.*;
|
||||
|
||||
@ -144,7 +145,7 @@ class ScreenMenu extends Menu implements ContainerListener, ComponentListener, S
|
||||
updateItems();
|
||||
fItemBounds = new Rectangle[invoker.getMenuComponentCount()];
|
||||
}
|
||||
}, null);
|
||||
}, invoker);
|
||||
} catch (final Exception e) {
|
||||
System.err.println(e);
|
||||
e.printStackTrace();
|
||||
@ -172,7 +173,7 @@ class ScreenMenu extends Menu implements ContainerListener, ComponentListener, S
|
||||
|
||||
fItemBounds = null;
|
||||
}
|
||||
}, null);
|
||||
}, invoker);
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -200,7 +201,7 @@ class ScreenMenu extends Menu implements ContainerListener, ComponentListener, S
|
||||
if (kind == 0) return;
|
||||
if (fItemBounds == null) return;
|
||||
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
SunToolkit.executeOnEventHandlerThread(fInvoker, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Component target = null;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -53,7 +53,7 @@ public class CCheckboxMenuItem extends CMenuItem implements CheckboxMenuItemPeer
|
||||
|
||||
public void handleAction(final boolean state) {
|
||||
final CheckboxMenuItem target = (CheckboxMenuItem)getTarget();
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
|
||||
public void run() {
|
||||
target.setState(state);
|
||||
}
|
||||
|
||||
@ -107,10 +107,6 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
|
||||
loc = rootComponent.getLocation();
|
||||
}
|
||||
|
||||
//It sure will be LWComponentPeer instance as rootComponent is a Window
|
||||
PlatformWindow platformWindow = ((LWComponentPeer)rootComponent.getPeer()).getPlatformWindow();
|
||||
long nativeViewPtr = CPlatformWindow.getNativeViewPtr(platformWindow);
|
||||
|
||||
// If there isn't any drag image make one of default appearance:
|
||||
if (fDragImage == null)
|
||||
this.setDefaultDragImage(component);
|
||||
@ -137,6 +133,11 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
|
||||
}
|
||||
|
||||
try {
|
||||
//It sure will be LWComponentPeer instance as rootComponent is a Window
|
||||
PlatformWindow platformWindow = ((LWComponentPeer)rootComponent.getPeer()).getPlatformWindow();
|
||||
long nativeViewPtr = CPlatformWindow.getNativeViewPtr(platformWindow);
|
||||
if (nativeViewPtr == 0L) throw new InvalidDnDOperationException("Unsupported platform window implementation");
|
||||
|
||||
// Create native dragging source:
|
||||
final long nativeDragSource = createNativeDragSource(component, nativeViewPtr, transferable, triggerEvent,
|
||||
(int) (dragOrigin.getX()), (int) (dragOrigin.getY()), extModifiers,
|
||||
|
||||
@ -52,6 +52,8 @@ public final class CDropTarget {
|
||||
fPeer = peer;
|
||||
|
||||
long nativePeer = CPlatformWindow.getNativeViewPtr(((LWComponentPeer) peer).getPlatformWindow());
|
||||
if (nativePeer == 0L) return; // Unsupported for a window without a native view (plugin)
|
||||
|
||||
// Create native dragging destination:
|
||||
fNativeDropTarget = this.createNativeDropTarget(dropTarget, component, peer, nativePeer);
|
||||
if (fNativeDropTarget == 0) {
|
||||
|
||||
@ -479,12 +479,14 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
deliverZoom(true);
|
||||
|
||||
this.normalBounds = peer.getBounds();
|
||||
long screen = CWrapper.NSWindow.screen(getNSWindowPtr());
|
||||
Rectangle toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds();
|
||||
// Flip the y coordinate
|
||||
Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds();
|
||||
toBounds.y = frame.height - toBounds.y - toBounds.height;
|
||||
setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height);
|
||||
|
||||
GraphicsConfiguration config = getPeer().getGraphicsConfiguration();
|
||||
Insets i = ((CGraphicsDevice)config.getDevice()).getScreenInsets();
|
||||
Rectangle toBounds = config.getBounds();
|
||||
setBounds(toBounds.x + i.left,
|
||||
toBounds.y + i.top,
|
||||
toBounds.width - i.left - i.right,
|
||||
toBounds.height - i.top - i.bottom);
|
||||
}
|
||||
}
|
||||
|
||||
@ -751,13 +753,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
// the move/size notification from the underlying system comes
|
||||
// but it contains a bounds smaller than the whole screen
|
||||
// and therefore we need to create the synthetic notifications
|
||||
Rectangle screenBounds;
|
||||
final long screenPtr = CWrapper.NSWindow.screen(getNSWindowPtr());
|
||||
try {
|
||||
screenBounds = CWrapper.NSScreen.frame(screenPtr).getBounds();
|
||||
} finally {
|
||||
CWrapper.NSObject.release(screenPtr);
|
||||
}
|
||||
Rectangle screenBounds = getPeer().getGraphicsConfiguration().getBounds();
|
||||
peer.notifyReshape(screenBounds.x, screenBounds.y, screenBounds.width,
|
||||
screenBounds.height);
|
||||
}
|
||||
@ -900,8 +896,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
nativePeer = ((CPlatformWindow) platformWindow).getContentView().getAWTView();
|
||||
} else if (platformWindow instanceof CViewPlatformEmbeddedFrame){
|
||||
nativePeer = ((CViewPlatformEmbeddedFrame) platformWindow).getNSViewPtr();
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unsupported platformWindow implementation");
|
||||
}
|
||||
return nativePeer;
|
||||
}
|
||||
@ -932,25 +926,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
|
||||
|
||||
final Rectangle oldB = nativeBounds;
|
||||
nativeBounds = new Rectangle(x, y, width, height);
|
||||
final GraphicsConfiguration oldGC = peer.getGraphicsConfiguration();
|
||||
|
||||
final GraphicsConfiguration newGC = peer.getGraphicsConfiguration();
|
||||
// System-dependent appearance optimization.
|
||||
if (peer != null) {
|
||||
peer.notifyReshape(x, y, width, height);
|
||||
}
|
||||
|
||||
if ((byUser && !oldB.getSize().equals(nativeBounds.getSize()))
|
||||
|| isFullScreenAnimationOn || !Objects.equals(newGC, oldGC)) {
|
||||
flushBuffers();
|
||||
// System-dependent appearance optimization.
|
||||
if ((byUser && !oldB.getSize().equals(nativeBounds.getSize()))
|
||||
|| isFullScreenAnimationOn) {
|
||||
flushBuffers();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deliverWindowClosingEvent() {
|
||||
if (peer != null) {
|
||||
if (peer.getBlocker() == null) {
|
||||
peer.postEvent(new WindowEvent(target, WindowEvent.WINDOW_CLOSING));
|
||||
}
|
||||
if (peer != null && peer.getBlocker() == null) {
|
||||
peer.postEvent(new WindowEvent(target, WindowEvent.WINDOW_CLOSING));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -96,7 +96,7 @@ public class CViewEmbeddedFrame extends EmbeddedFrame {
|
||||
validate();
|
||||
setVisible(true);
|
||||
}
|
||||
}, null);
|
||||
}, this);
|
||||
} catch (InterruptedException | InvocationTargetException ex) {}
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,8 +71,6 @@ public final class CWrapper {
|
||||
public static native void zoom(long window);
|
||||
|
||||
public static native void makeFirstResponder(long window, long responder);
|
||||
|
||||
public static native long screen(long window);
|
||||
}
|
||||
|
||||
public static final class NSView {
|
||||
@ -95,12 +93,6 @@ public final class CWrapper {
|
||||
public static native void release(long object);
|
||||
}
|
||||
|
||||
public static final class NSScreen {
|
||||
public static native Rectangle2D frame(long screen);
|
||||
public static native Rectangle2D visibleFrame(long screen);
|
||||
public static native long screenByDisplayId(int displayID);
|
||||
}
|
||||
|
||||
public static final class NSColor {
|
||||
public static native long clearColor();
|
||||
}
|
||||
|
||||
@ -82,8 +82,13 @@ JNF_COCOA_ENTER(env);
|
||||
// keys, so we need to do the same translation here that we do
|
||||
// for the regular key down events
|
||||
if ([eventKey length] == 1) {
|
||||
unichar ch = NsCharToJavaChar([eventKey characterAtIndex:0], 0);
|
||||
eventKey = [NSString stringWithCharacters: &ch length: 1];
|
||||
unichar origChar = [eventKey characterAtIndex:0];
|
||||
unichar newChar = NsCharToJavaChar(origChar, 0);
|
||||
if (newChar == java_awt_event_KeyEvent_CHAR_UNDEFINED) {
|
||||
newChar = origChar;
|
||||
}
|
||||
|
||||
eventKey = [NSString stringWithCharacters: &newChar length: 1];
|
||||
}
|
||||
|
||||
if ([menuKey isEqualToString:eventKey]) {
|
||||
|
||||
@ -396,31 +396,6 @@ JNF_COCOA_ENTER(env);
|
||||
JNF_COCOA_EXIT(env);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CWrapper$NSWindow
|
||||
* Method: screen
|
||||
* Signature: (J)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_sun_lwawt_macosx_CWrapper_00024NSWindow_screen
|
||||
(JNIEnv *env, jclass cls, jlong windowPtr)
|
||||
{
|
||||
__block jlong screenPtr = 0L;
|
||||
|
||||
JNF_COCOA_ENTER(env);
|
||||
|
||||
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
|
||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
||||
const NSScreen *screen = [window screen];
|
||||
CFRetain(screen); // GC
|
||||
screenPtr = ptr_to_jlong(screen);
|
||||
}];
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
|
||||
return screenPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Method: miniaturize
|
||||
* Signature: (J)V
|
||||
@ -690,92 +665,6 @@ JNF_COCOA_ENTER(env);
|
||||
JNF_COCOA_EXIT(env);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CWrapper$NSScreen
|
||||
* Method: frame
|
||||
* Signature: (J)Ljava/awt/Rectangle;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_sun_lwawt_macosx_CWrapper_00024NSScreen_frame
|
||||
(JNIEnv *env, jclass cls, jlong screenPtr)
|
||||
{
|
||||
jobject jRect = NULL;
|
||||
|
||||
JNF_COCOA_ENTER(env);
|
||||
|
||||
__block NSRect rect = NSZeroRect;
|
||||
|
||||
NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr);
|
||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
||||
rect = [screen frame];
|
||||
}];
|
||||
|
||||
jRect = NSToJavaRect(env, rect);
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
|
||||
return jRect;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CWrapper_NSScreen
|
||||
* Method: visibleFrame
|
||||
* Signature: (J)Ljava/awt/geom/Rectangle2D;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_sun_lwawt_macosx_CWrapper_00024NSScreen_visibleFrame
|
||||
(JNIEnv *env, jclass cls, jlong screenPtr)
|
||||
{
|
||||
jobject jRect = NULL;
|
||||
|
||||
JNF_COCOA_ENTER(env);
|
||||
|
||||
__block NSRect rect = NSZeroRect;
|
||||
|
||||
NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr);
|
||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
||||
rect = [screen visibleFrame];
|
||||
}];
|
||||
|
||||
jRect = NSToJavaRect(env, rect);
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
|
||||
return jRect;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CWrapper_NSScreen
|
||||
* Method: screenByDisplayId
|
||||
* Signature: (J)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_sun_lwawt_macosx_CWrapper_00024NSScreen_screenByDisplayId
|
||||
(JNIEnv *env, jclass cls, jint displayID)
|
||||
{
|
||||
__block jlong screenPtr = 0L;
|
||||
|
||||
JNF_COCOA_ENTER(env);
|
||||
|
||||
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
|
||||
NSArray *screens = [NSScreen screens];
|
||||
for (NSScreen *screen in screens) {
|
||||
NSDictionary *screenInfo = [screen deviceDescription];
|
||||
NSNumber *screenID = [screenInfo objectForKey:@"NSScreenNumber"];
|
||||
if ([screenID intValue] == displayID){
|
||||
CFRetain(screen); // GC
|
||||
screenPtr = ptr_to_jlong(screen);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
JNF_COCOA_EXIT(env);
|
||||
|
||||
return screenPtr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_lwawt_macosx_CWrapper$NSColor
|
||||
* Method: clearColor
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=horizontal
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=toggle expand
|
||||
toggleexpand=toggle expand
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=horizontal
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=ein-/ausblenden
|
||||
toggleexpand=ein-/ausblenden
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=horizontal
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=activar/desactivar ampliaci\u00F3n
|
||||
toggleexpand=activar/desactivar ampliaci\u00F3n
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=horizontal
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=basculer le d\u00E9veloppement
|
||||
toggleexpand=basculer le d\u00E9veloppement
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=orizzontale
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=abilita/disabilita espansione
|
||||
toggleexpand=abilita/disabilita espansione
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=\u6C34\u5E73
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=\u5C55\u958B\u306E\u30C8\u30B0\u30EB
|
||||
toggleexpand=\u5C55\u958B\u306E\u30C8\u30B0\u30EB
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=\uAC00\uB85C
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=\uD1A0\uAE00 \uD655\uC7A5
|
||||
toggleexpand=\uD1A0\uAE00 \uD655\uC7A5
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=horizontal
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=alternar expans\u00E3o
|
||||
toggleexpand=alternar expans\u00E3o
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=horisontell
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=v\u00E4xla ut\u00F6ka
|
||||
toggleexpand=v\u00E4xla ut\u00F6ka
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=\u6C34\u5E73
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=\u5207\u6362\u5C55\u5F00
|
||||
toggleexpand=\u5207\u6362\u5C55\u5F00
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ horizontal=\u6C34\u5E73
|
||||
#
|
||||
# accessible actions
|
||||
#
|
||||
toggle expand=\u5207\u63DB\u64F4\u5C55
|
||||
toggleexpand=\u5207\u63DB\u64F4\u5C55
|
||||
|
||||
# new relations, roles and states for J2SE 1.5.0
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,6 +31,7 @@ import javax.crypto.spec.DESKeySpec;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.spec.KeySpec;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
/**
|
||||
* This class implements the DES key factory of the Sun provider.
|
||||
@ -60,20 +61,22 @@ public final class DESKeyFactory extends SecretKeyFactorySpi {
|
||||
*/
|
||||
protected SecretKey engineGenerateSecret(KeySpec keySpec)
|
||||
throws InvalidKeySpecException {
|
||||
DESKey desKey = null;
|
||||
|
||||
try {
|
||||
if (!(keySpec instanceof DESKeySpec)) {
|
||||
throw new InvalidKeySpecException
|
||||
("Inappropriate key specification");
|
||||
if (keySpec instanceof DESKeySpec) {
|
||||
return new DESKey(((DESKeySpec)keySpec).getKey());
|
||||
}
|
||||
else {
|
||||
DESKeySpec desKeySpec = (DESKeySpec)keySpec;
|
||||
desKey = new DESKey(desKeySpec.getKey());
|
||||
|
||||
if (keySpec instanceof SecretKeySpec) {
|
||||
return new DESKey(((SecretKeySpec)keySpec).getEncoded());
|
||||
}
|
||||
|
||||
throw new InvalidKeySpecException(
|
||||
"Inappropriate key specification");
|
||||
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new InvalidKeySpecException(e.getMessage());
|
||||
}
|
||||
return desKey;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,6 +31,7 @@ import javax.crypto.spec.DESedeKeySpec;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.spec.KeySpec;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
/**
|
||||
* This class implements the DES-EDE key factory of the Sun provider.
|
||||
@ -60,20 +61,20 @@ public final class DESedeKeyFactory extends SecretKeyFactorySpi {
|
||||
*/
|
||||
protected SecretKey engineGenerateSecret(KeySpec keySpec)
|
||||
throws InvalidKeySpecException {
|
||||
DESedeKey desEdeKey = null;
|
||||
|
||||
try {
|
||||
if (keySpec instanceof DESedeKeySpec) {
|
||||
DESedeKeySpec desEdeKeySpec = (DESedeKeySpec)keySpec;
|
||||
desEdeKey = new DESedeKey(desEdeKeySpec.getKey());
|
||||
|
||||
} else {
|
||||
throw new InvalidKeySpecException
|
||||
("Inappropriate key specification");
|
||||
return new DESedeKey(((DESedeKeySpec)keySpec).getKey());
|
||||
}
|
||||
if (keySpec instanceof SecretKeySpec) {
|
||||
return new DESedeKey(((SecretKeySpec)keySpec).getEncoded());
|
||||
|
||||
}
|
||||
throw new InvalidKeySpecException
|
||||
("Inappropriate key specification");
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new InvalidKeySpecException(e.getMessage());
|
||||
}
|
||||
return desEdeKey;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -83,7 +83,7 @@ public final class DHKeyFactory extends KeyFactorySpi {
|
||||
}
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new InvalidKeySpecException
|
||||
("Inappropriate key specification");
|
||||
("Inappropriate key specification", e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -118,7 +118,7 @@ public final class DHKeyFactory extends KeyFactorySpi {
|
||||
}
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new InvalidKeySpecException
|
||||
("Inappropriate key specification");
|
||||
("Inappropriate key specification", e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -227,7 +227,7 @@ public final class DHKeyFactory extends KeyFactorySpi {
|
||||
}
|
||||
|
||||
} catch (InvalidKeySpecException e) {
|
||||
throw new InvalidKeyException("Cannot translate key");
|
||||
throw new InvalidKeyException("Cannot translate key", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -167,15 +167,16 @@ public final class DHKeyPairGenerator extends KeyPairGeneratorSpi {
|
||||
BigInteger pMinus2 = p.subtract(BigInteger.valueOf(2));
|
||||
|
||||
//
|
||||
// Handbook of Applied Cryptography: Menezes, et.al.
|
||||
// Repeat if the following does not hold:
|
||||
// 1 <= x <= p-2
|
||||
// PKCS#3 section 7.1 "Private-value generation"
|
||||
// Repeat if either of the followings does not hold:
|
||||
// 0 < x < p-1
|
||||
// 2^(lSize-1) <= x < 2^(lSize)
|
||||
//
|
||||
do {
|
||||
// generate random x up to 2^lSize bits long
|
||||
x = new BigInteger(lSize, random);
|
||||
} while ((x.compareTo(BigInteger.ONE) < 0) ||
|
||||
((x.compareTo(pMinus2) > 0)));
|
||||
((x.compareTo(pMinus2) > 0)) || (x.bitLength() != lSize));
|
||||
|
||||
// calculate public value y
|
||||
BigInteger y = g.modPow(x, p);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,6 +26,7 @@
|
||||
package com.sun.crypto.provider;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Objects;
|
||||
import java.math.BigInteger;
|
||||
import java.security.KeyRep;
|
||||
import java.security.PrivateKey;
|
||||
@ -67,7 +68,7 @@ javax.crypto.interfaces.DHPrivateKey, Serializable {
|
||||
// the base generator
|
||||
private BigInteger g;
|
||||
|
||||
// the private-value length
|
||||
// the private-value length (optional)
|
||||
private int l;
|
||||
|
||||
private int DH_data[] = { 1, 2, 840, 113549, 1, 3, 1 };
|
||||
@ -179,20 +180,9 @@ javax.crypto.interfaces.DHPrivateKey, Serializable {
|
||||
this.key = val.data.getOctetString();
|
||||
parseKeyBits();
|
||||
|
||||
// ignore OPTIONAL attributes
|
||||
|
||||
this.encodedKey = encodedKey.clone();
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
InvalidKeyException ike = new InvalidKeyException(
|
||||
"Private-value length too big");
|
||||
ike.initCause(e);
|
||||
throw ike;
|
||||
} catch (IOException e) {
|
||||
InvalidKeyException ike = new InvalidKeyException(
|
||||
"Error parsing key encoding: " + e.getMessage());
|
||||
ike.initCause(e);
|
||||
throw ike;
|
||||
} catch (IOException | NumberFormatException e) {
|
||||
throw new InvalidKeyException("Error parsing key encoding", e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -234,8 +224,9 @@ javax.crypto.interfaces.DHPrivateKey, Serializable {
|
||||
DerOutputStream params = new DerOutputStream();
|
||||
params.putInteger(this.p);
|
||||
params.putInteger(this.g);
|
||||
if (this.l != 0)
|
||||
if (this.l != 0) {
|
||||
params.putInteger(this.l);
|
||||
}
|
||||
// wrap parameters into SEQUENCE
|
||||
DerValue paramSequence = new DerValue(DerValue.tag_Sequence,
|
||||
params.toByteArray());
|
||||
@ -273,10 +264,11 @@ javax.crypto.interfaces.DHPrivateKey, Serializable {
|
||||
* @return the key parameters
|
||||
*/
|
||||
public DHParameterSpec getParams() {
|
||||
if (this.l != 0)
|
||||
if (this.l != 0) {
|
||||
return new DHParameterSpec(this.p, this.g, this.l);
|
||||
else
|
||||
} else {
|
||||
return new DHParameterSpec(this.p, this.g);
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
@ -312,26 +304,21 @@ javax.crypto.interfaces.DHPrivateKey, Serializable {
|
||||
* Objects that are equal will also have the same hashcode.
|
||||
*/
|
||||
public int hashCode() {
|
||||
int retval = 0;
|
||||
byte[] enc = getEncoded();
|
||||
|
||||
for (int i = 1; i < enc.length; i++) {
|
||||
retval += enc[i] * i;
|
||||
}
|
||||
return(retval);
|
||||
return Objects.hash(x, p, g);
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (this == obj) return true;
|
||||
|
||||
if (!(obj instanceof PrivateKey))
|
||||
if (!(obj instanceof javax.crypto.interfaces.DHPrivateKey)) {
|
||||
return false;
|
||||
|
||||
byte[] thisEncoded = this.getEncoded();
|
||||
byte[] thatEncoded = ((PrivateKey)obj).getEncoded();
|
||||
|
||||
return java.util.Arrays.equals(thisEncoded, thatEncoded);
|
||||
}
|
||||
javax.crypto.interfaces.DHPrivateKey other =
|
||||
(javax.crypto.interfaces.DHPrivateKey) obj;
|
||||
DHParameterSpec otherParams = other.getParams();
|
||||
return ((this.x.compareTo(other.getX()) == 0) &&
|
||||
(this.p.compareTo(otherParams.getP()) == 0) &&
|
||||
(this.g.compareTo(otherParams.getG()) == 0));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,6 +26,7 @@
|
||||
package com.sun.crypto.provider;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Objects;
|
||||
import java.math.BigInteger;
|
||||
import java.security.KeyRep;
|
||||
import java.security.InvalidKeyException;
|
||||
@ -64,7 +65,7 @@ javax.crypto.interfaces.DHPublicKey, Serializable {
|
||||
// the base generator
|
||||
private BigInteger g;
|
||||
|
||||
// the private-value length
|
||||
// the private-value length (optional)
|
||||
private int l;
|
||||
|
||||
private int DH_data[] = { 1, 2, 840, 113549, 1, 3, 1 };
|
||||
@ -173,13 +174,8 @@ javax.crypto.interfaces.DHPublicKey, Serializable {
|
||||
}
|
||||
|
||||
this.encodedKey = encodedKey.clone();
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
throw new InvalidKeyException("Private-value length too big");
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new InvalidKeyException(
|
||||
"Error parsing key encoding: " + e.toString());
|
||||
} catch (IOException | NumberFormatException e) {
|
||||
throw new InvalidKeyException("Error parsing key encoding", e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -212,8 +208,9 @@ javax.crypto.interfaces.DHPublicKey, Serializable {
|
||||
DerOutputStream params = new DerOutputStream();
|
||||
params.putInteger(this.p);
|
||||
params.putInteger(this.g);
|
||||
if (this.l != 0)
|
||||
if (this.l != 0) {
|
||||
params.putInteger(this.l);
|
||||
}
|
||||
// wrap parameters into SEQUENCE
|
||||
DerValue paramSequence = new DerValue(DerValue.tag_Sequence,
|
||||
params.toByteArray());
|
||||
@ -253,10 +250,11 @@ javax.crypto.interfaces.DHPublicKey, Serializable {
|
||||
* @return the key parameters
|
||||
*/
|
||||
public DHParameterSpec getParams() {
|
||||
if (this.l != 0)
|
||||
if (this.l != 0) {
|
||||
return new DHParameterSpec(this.p, this.g, this.l);
|
||||
else
|
||||
} else {
|
||||
return new DHParameterSpec(this.p, this.g);
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
@ -290,26 +288,22 @@ javax.crypto.interfaces.DHPublicKey, Serializable {
|
||||
* Objects that are equal will also have the same hashcode.
|
||||
*/
|
||||
public int hashCode() {
|
||||
int retval = 0;
|
||||
byte[] enc = getEncoded();
|
||||
|
||||
for (int i = 1; i < enc.length; i++) {
|
||||
retval += enc[i] * i;
|
||||
}
|
||||
return(retval);
|
||||
return Objects.hash(y, p, g);
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (this == obj) return true;
|
||||
|
||||
if (!(obj instanceof PublicKey))
|
||||
if (!(obj instanceof javax.crypto.interfaces.DHPublicKey)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
byte[] thisEncoded = this.getEncoded();
|
||||
byte[] thatEncoded = ((PublicKey)obj).getEncoded();
|
||||
|
||||
return java.util.Arrays.equals(thisEncoded, thatEncoded);
|
||||
javax.crypto.interfaces.DHPublicKey other =
|
||||
(javax.crypto.interfaces.DHPublicKey) obj;
|
||||
DHParameterSpec otherParams = other.getParams();
|
||||
return ((this.y.compareTo(other.getY()) == 0) &&
|
||||
(this.p.compareTo(otherParams.getP()) == 0) &&
|
||||
(this.g.compareTo(otherParams.getG()) == 0));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -134,7 +134,7 @@ public class UnpackerImpl extends TLGlobals implements Pack200.Unpacker {
|
||||
} else {
|
||||
try {
|
||||
(new NativeUnpack(this)).run(in0, out);
|
||||
} catch (UnsatisfiedLinkError ule) {
|
||||
} catch (UnsatisfiedLinkError | NoClassDefFoundError ex) {
|
||||
// failover to java implementation
|
||||
(new DoUnpack()).run(in0, out);
|
||||
}
|
||||
|
||||
@ -52,6 +52,7 @@ import javax.management.NotCompliantMBeanException;
|
||||
import com.sun.jmx.remote.util.EnvHelp;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.security.AccessController;
|
||||
import javax.management.AttributeNotFoundException;
|
||||
import javax.management.openmbean.CompositeData;
|
||||
import sun.reflect.misc.MethodUtil;
|
||||
@ -64,7 +65,11 @@ import sun.reflect.misc.ReflectUtil;
|
||||
* @since 1.5
|
||||
*/
|
||||
public class Introspector {
|
||||
|
||||
final public static boolean ALLOW_NONPUBLIC_MBEAN;
|
||||
static {
|
||||
String val = AccessController.doPrivileged(new GetPropertyAction("jdk.jmx.mbeans.allowNonPublic"));
|
||||
ALLOW_NONPUBLIC_MBEAN = Boolean.parseBoolean(val);
|
||||
}
|
||||
|
||||
/*
|
||||
* ------------------------------------------
|
||||
@ -223,11 +228,27 @@ public class Introspector {
|
||||
return testCompliance(baseClass, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the given interface class for being a compliant MXBean interface.
|
||||
* A compliant MXBean interface is any publicly accessible interface
|
||||
* following the {@link MXBean} conventions.
|
||||
* @param interfaceClass An interface class to test for the MXBean compliance
|
||||
* @throws NotCompliantMBeanException Thrown when the tested interface
|
||||
* is not public or contradicts the {@link MXBean} conventions.
|
||||
*/
|
||||
public static void testComplianceMXBeanInterface(Class<?> interfaceClass)
|
||||
throws NotCompliantMBeanException {
|
||||
MXBeanIntrospector.getInstance().getAnalyzer(interfaceClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the given interface class for being a compliant MBean interface.
|
||||
* A compliant MBean interface is any publicly accessible interface
|
||||
* following the {@code MBean} conventions.
|
||||
* @param interfaceClass An interface class to test for the MBean compliance
|
||||
* @throws NotCompliantMBeanException Thrown when the tested interface
|
||||
* is not public or contradicts the {@code MBean} conventions.
|
||||
*/
|
||||
public static void testComplianceMBeanInterface(Class<?> interfaceClass)
|
||||
throws NotCompliantMBeanException{
|
||||
StandardMBeanIntrospector.getInstance().getAnalyzer(interfaceClass);
|
||||
@ -299,18 +320,18 @@ public class Introspector {
|
||||
* not a JMX compliant Standard MBean.
|
||||
*/
|
||||
public static <T> Class<? super T> getStandardMBeanInterface(Class<T> baseClass)
|
||||
throws NotCompliantMBeanException {
|
||||
Class<? super T> current = baseClass;
|
||||
Class<? super T> mbeanInterface = null;
|
||||
while (current != null) {
|
||||
mbeanInterface =
|
||||
findMBeanInterface(current, current.getName());
|
||||
if (mbeanInterface != null) break;
|
||||
current = current.getSuperclass();
|
||||
}
|
||||
if (mbeanInterface != null) {
|
||||
return mbeanInterface;
|
||||
} else {
|
||||
throws NotCompliantMBeanException {
|
||||
Class<? super T> current = baseClass;
|
||||
Class<? super T> mbeanInterface = null;
|
||||
while (current != null) {
|
||||
mbeanInterface =
|
||||
findMBeanInterface(current, current.getName());
|
||||
if (mbeanInterface != null) break;
|
||||
current = current.getSuperclass();
|
||||
}
|
||||
if (mbeanInterface != null) {
|
||||
return mbeanInterface;
|
||||
} else {
|
||||
final String msg =
|
||||
"Class " + baseClass.getName() +
|
||||
" is not a JMX compliant Standard MBean";
|
||||
@ -507,8 +528,11 @@ public class Introspector {
|
||||
}
|
||||
Class<?>[] interfaces = c.getInterfaces();
|
||||
for (int i = 0;i < interfaces.length; i++) {
|
||||
if (interfaces[i].getName().equals(clMBeanName))
|
||||
if (interfaces[i].getName().equals(clMBeanName) &&
|
||||
(Modifier.isPublic(interfaces[i].getModifiers()) ||
|
||||
ALLOW_NONPUBLIC_MBEAN)) {
|
||||
return Util.cast(interfaces[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
@ -28,6 +28,8 @@ package com.sun.jmx.mbeanserver;
|
||||
import static com.sun.jmx.mbeanserver.Util.*;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.security.AccessController;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
@ -50,7 +52,6 @@ import javax.management.NotCompliantMBeanException;
|
||||
* @since 1.6
|
||||
*/
|
||||
class MBeanAnalyzer<M> {
|
||||
|
||||
static interface MBeanVisitor<M> {
|
||||
public void visitAttribute(String attributeName,
|
||||
M getter,
|
||||
@ -107,6 +108,10 @@ class MBeanAnalyzer<M> {
|
||||
if (!mbeanType.isInterface()) {
|
||||
throw new NotCompliantMBeanException("Not an interface: " +
|
||||
mbeanType.getName());
|
||||
} else if (!Modifier.isPublic(mbeanType.getModifiers()) &&
|
||||
!Introspector.ALLOW_NONPUBLIC_MBEAN) {
|
||||
throw new NotCompliantMBeanException("Interface is not public: " +
|
||||
mbeanType.getName());
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
@ -2,82 +2,78 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.algorithms;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Constants;
|
||||
import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
* The Algorithm class which stores the Algorithm URI as a string.
|
||||
*
|
||||
*/
|
||||
public abstract class Algorithm extends SignatureElementProxy {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param doc
|
||||
* @param algorithmURI is the URI of the algorithm as String
|
||||
*/
|
||||
public Algorithm(Document doc, String algorithmURI) {
|
||||
/**
|
||||
*
|
||||
* @param doc
|
||||
* @param algorithmURI is the URI of the algorithm as String
|
||||
*/
|
||||
public Algorithm(Document doc, String algorithmURI) {
|
||||
super(doc);
|
||||
|
||||
super(doc);
|
||||
this.setAlgorithmURI(algorithmURI);
|
||||
}
|
||||
|
||||
this.setAlgorithmURI(algorithmURI);
|
||||
}
|
||||
/**
|
||||
* Constructor Algorithm
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public Algorithm(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor Algorithm
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public Algorithm(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
/**
|
||||
* Method getAlgorithmURI
|
||||
*
|
||||
* @return The URI of the algorithm
|
||||
*/
|
||||
public String getAlgorithmURI() {
|
||||
return this.constructionElement.getAttributeNS(null, Constants._ATT_ALGORITHM);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getAlgorithmURI
|
||||
*
|
||||
* @return The URI of the alogrithm
|
||||
*/
|
||||
public String getAlgorithmURI() {
|
||||
return this._constructionElement.getAttributeNS(null, Constants._ATT_ALGORITHM);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the algorithm's URI as used in the signature.
|
||||
*
|
||||
* @param algorithmURI is the URI of the algorithm as String
|
||||
*/
|
||||
protected void setAlgorithmURI(String algorithmURI) {
|
||||
|
||||
if ( (algorithmURI != null)) {
|
||||
this._constructionElement.setAttributeNS(null, Constants._ATT_ALGORITHM,
|
||||
algorithmURI);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Sets the algorithm's URI as used in the signature.
|
||||
*
|
||||
* @param algorithmURI is the URI of the algorithm as String
|
||||
*/
|
||||
protected void setAlgorithmURI(String algorithmURI) {
|
||||
if (algorithmURI != null) {
|
||||
this.constructionElement.setAttributeNS(
|
||||
null, Constants._ATT_ALGORITHM, algorithmURI
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,6 +114,18 @@ public class JCEMapper {
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1,
|
||||
new Algorithm("", "SHA1withECDSA", "Signature")
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA256,
|
||||
new Algorithm("", "SHA256withECDSA", "Signature")
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA384,
|
||||
new Algorithm("", "SHA384withECDSA", "Signature")
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA512,
|
||||
new Algorithm("", "SHA512withECDSA", "Signature")
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLSignature.ALGO_ID_MAC_HMAC_NOT_RECOMMENDED_MD5,
|
||||
new Algorithm("", "HmacMD5", "Mac")
|
||||
@ -154,6 +166,18 @@ public class JCEMapper {
|
||||
XMLCipher.AES_256,
|
||||
new Algorithm("AES", "AES/CBC/ISO10126Padding", "BlockEncryption", 256)
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLCipher.AES_128_GCM,
|
||||
new Algorithm("AES", "AES/GCM/NoPadding", "BlockEncryption", 128)
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLCipher.AES_192_GCM,
|
||||
new Algorithm("AES", "AES/GCM/NoPadding", "BlockEncryption", 192)
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLCipher.AES_256_GCM,
|
||||
new Algorithm("AES", "AES/GCM/NoPadding", "BlockEncryption", 256)
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLCipher.RSA_v1dot5,
|
||||
new Algorithm("RSA", "RSA/ECB/PKCS1Padding", "KeyTransport")
|
||||
@ -162,6 +186,10 @@ public class JCEMapper {
|
||||
XMLCipher.RSA_OAEP,
|
||||
new Algorithm("RSA", "RSA/ECB/OAEPPadding", "KeyTransport")
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLCipher.RSA_OAEP_11,
|
||||
new Algorithm("RSA", "RSA/ECB/OAEPPadding", "KeyTransport")
|
||||
);
|
||||
algorithmsMap.put(
|
||||
XMLCipher.DIFFIE_HELLMAN,
|
||||
new Algorithm("", "", "KeyAgreement")
|
||||
|
||||
@ -2,265 +2,254 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.algorithms;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Constants;
|
||||
import com.sun.org.apache.xml.internal.security.utils.EncryptionConstants;
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
|
||||
/**
|
||||
* Digest Message wrapper & selector class.
|
||||
*
|
||||
* <pre>
|
||||
* MessageDigestAlgorithm.getInstance()
|
||||
* </pre>
|
||||
*
|
||||
*/
|
||||
public class MessageDigestAlgorithm extends Algorithm {
|
||||
|
||||
/** Message Digest - NOT RECOMMENDED MD5*/
|
||||
public static final String ALGO_ID_DIGEST_NOT_RECOMMENDED_MD5 = Constants.MoreAlgorithmsSpecNS + "md5";
|
||||
/** Digest - Required SHA1*/
|
||||
public static final String ALGO_ID_DIGEST_SHA1 = Constants.SignatureSpecNS + "sha1";
|
||||
/** Message Digest - RECOMMENDED SHA256*/
|
||||
public static final String ALGO_ID_DIGEST_SHA256 = EncryptionConstants.EncryptionSpecNS + "sha256";
|
||||
/** Message Digest - OPTIONAL SHA384*/
|
||||
public static final String ALGO_ID_DIGEST_SHA384 = Constants.MoreAlgorithmsSpecNS + "sha384";
|
||||
/** Message Digest - OPTIONAL SHA512*/
|
||||
public static final String ALGO_ID_DIGEST_SHA512 = EncryptionConstants.EncryptionSpecNS + "sha512";
|
||||
/** Message Digest - OPTIONAL RIPEMD-160*/
|
||||
public static final String ALGO_ID_DIGEST_RIPEMD160 = EncryptionConstants.EncryptionSpecNS + "ripemd160";
|
||||
public static final String ALGO_ID_DIGEST_NOT_RECOMMENDED_MD5 =
|
||||
Constants.MoreAlgorithmsSpecNS + "md5";
|
||||
/** Digest - Required SHA1*/
|
||||
public static final String ALGO_ID_DIGEST_SHA1 = Constants.SignatureSpecNS + "sha1";
|
||||
/** Message Digest - RECOMMENDED SHA256*/
|
||||
public static final String ALGO_ID_DIGEST_SHA256 =
|
||||
EncryptionConstants.EncryptionSpecNS + "sha256";
|
||||
/** Message Digest - OPTIONAL SHA384*/
|
||||
public static final String ALGO_ID_DIGEST_SHA384 =
|
||||
Constants.MoreAlgorithmsSpecNS + "sha384";
|
||||
/** Message Digest - OPTIONAL SHA512*/
|
||||
public static final String ALGO_ID_DIGEST_SHA512 =
|
||||
EncryptionConstants.EncryptionSpecNS + "sha512";
|
||||
/** Message Digest - OPTIONAL RIPEMD-160*/
|
||||
public static final String ALGO_ID_DIGEST_RIPEMD160 =
|
||||
EncryptionConstants.EncryptionSpecNS + "ripemd160";
|
||||
|
||||
/** Field algorithm stores the actual {@link java.security.MessageDigest} */
|
||||
java.security.MessageDigest algorithm = null;
|
||||
/** Field algorithm stores the actual {@link java.security.MessageDigest} */
|
||||
private final MessageDigest algorithm;
|
||||
|
||||
/**
|
||||
* Constructor for the brave who pass their own message digest algorithms and the corresponding URI.
|
||||
* @param doc
|
||||
* @param messageDigest
|
||||
* @param algorithmURI
|
||||
*/
|
||||
private MessageDigestAlgorithm(Document doc, MessageDigest messageDigest,
|
||||
String algorithmURI) {
|
||||
/**
|
||||
* Constructor for the brave who pass their own message digest algorithms and the
|
||||
* corresponding URI.
|
||||
* @param doc
|
||||
* @param algorithmURI
|
||||
*/
|
||||
private MessageDigestAlgorithm(Document doc, String algorithmURI)
|
||||
throws XMLSignatureException {
|
||||
super(doc, algorithmURI);
|
||||
|
||||
super(doc, algorithmURI);
|
||||
algorithm = getDigestInstance(algorithmURI);
|
||||
}
|
||||
|
||||
this.algorithm = messageDigest;
|
||||
}
|
||||
/**
|
||||
* Factory method for constructing a message digest algorithm by name.
|
||||
*
|
||||
* @param doc
|
||||
* @param algorithmURI
|
||||
* @return The MessageDigestAlgorithm element to attach in document and to digest
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public static MessageDigestAlgorithm getInstance(
|
||||
Document doc, String algorithmURI
|
||||
) throws XMLSignatureException {
|
||||
return new MessageDigestAlgorithm(doc, algorithmURI);
|
||||
}
|
||||
|
||||
static ThreadLocal<Map<String, MessageDigest>> instances=new
|
||||
ThreadLocal<Map<String, MessageDigest>>() {
|
||||
protected Map<String, MessageDigest> initialValue() {
|
||||
return new HashMap<String, MessageDigest>();
|
||||
};
|
||||
};
|
||||
private static MessageDigest getDigestInstance(String algorithmURI) throws XMLSignatureException {
|
||||
String algorithmID = JCEMapper.translateURItoJCEID(algorithmURI);
|
||||
|
||||
/**
|
||||
* Factory method for constructing a message digest algorithm by name.
|
||||
*
|
||||
* @param doc
|
||||
* @param algorithmURI
|
||||
* @return The MessageDigestAlgorithm element to attach in document and to digest
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public static MessageDigestAlgorithm getInstance(
|
||||
Document doc, String algorithmURI) throws XMLSignatureException {
|
||||
MessageDigest md = getDigestInstance(algorithmURI);
|
||||
return new MessageDigestAlgorithm(doc, md, algorithmURI);
|
||||
}
|
||||
|
||||
private static MessageDigest getDigestInstance(String algorithmURI) throws XMLSignatureException {
|
||||
MessageDigest result= instances.get().get(algorithmURI);
|
||||
if (result!=null)
|
||||
return result;
|
||||
String algorithmID = JCEMapper.translateURItoJCEID(algorithmURI);
|
||||
|
||||
if (algorithmID == null) {
|
||||
Object[] exArgs = { algorithmURI };
|
||||
throw new XMLSignatureException("algorithms.NoSuchMap", exArgs);
|
||||
}
|
||||
|
||||
MessageDigest md;
|
||||
String provider=JCEMapper.getProviderId();
|
||||
try {
|
||||
if (provider==null) {
|
||||
md = MessageDigest.getInstance(algorithmID);
|
||||
} else {
|
||||
md = MessageDigest.getInstance(algorithmID,provider);
|
||||
}
|
||||
} catch (java.security.NoSuchAlgorithmException ex) {
|
||||
Object[] exArgs = { algorithmID,
|
||||
ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
} catch (NoSuchProviderException ex) {
|
||||
Object[] exArgs = { algorithmID,
|
||||
ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
if (algorithmID == null) {
|
||||
Object[] exArgs = { algorithmURI };
|
||||
throw new XMLSignatureException("algorithms.NoSuchMap", exArgs);
|
||||
}
|
||||
instances.get().put(algorithmURI, md);
|
||||
|
||||
MessageDigest md;
|
||||
String provider = JCEMapper.getProviderId();
|
||||
try {
|
||||
if (provider == null) {
|
||||
md = MessageDigest.getInstance(algorithmID);
|
||||
} else {
|
||||
md = MessageDigest.getInstance(algorithmID, provider);
|
||||
}
|
||||
} catch (java.security.NoSuchAlgorithmException ex) {
|
||||
Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
} catch (NoSuchProviderException ex) {
|
||||
Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
}
|
||||
|
||||
return md;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the actual {@link java.security.MessageDigest} algorithm object
|
||||
*
|
||||
* @return the actual {@link java.security.MessageDigest} algorithm object
|
||||
*/
|
||||
public java.security.MessageDigest getAlgorithm() {
|
||||
return this.algorithm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#isEqual}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param digesta
|
||||
* @param digestb
|
||||
* @return the result of the {@link java.security.MessageDigest#isEqual} method
|
||||
*/
|
||||
public static boolean isEqual(byte[] digesta, byte[] digestb) {
|
||||
return java.security.MessageDigest.isEqual(digesta, digestb);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#digest()}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#digest()} method
|
||||
*/
|
||||
public byte[] digest() {
|
||||
return this.algorithm.digest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#digest(byte[])}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param input
|
||||
* @return the result of the {@link java.security.MessageDigest#digest(byte[])} method
|
||||
*/
|
||||
public byte[] digest(byte input[]) {
|
||||
return this.algorithm.digest(input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#digest(byte[], int, int)}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param buf
|
||||
* @param offset
|
||||
* @param len
|
||||
* @return the result of the {@link java.security.MessageDigest#digest(byte[], int, int)} method
|
||||
* @throws java.security.DigestException
|
||||
*/
|
||||
public int digest(byte buf[], int offset, int len)
|
||||
throws java.security.DigestException {
|
||||
return this.algorithm.digest(buf, offset, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#getAlgorithm}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#getAlgorithm} method
|
||||
*/
|
||||
public String getJCEAlgorithmString() {
|
||||
return this.algorithm.getAlgorithm();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#getProvider}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#getProvider} method
|
||||
*/
|
||||
public java.security.Provider getJCEProvider() {
|
||||
return this.algorithm.getProvider();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#getDigestLength}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#getDigestLength} method
|
||||
*/
|
||||
public int getDigestLength() {
|
||||
return this.algorithm.getDigestLength();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#reset}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
*/
|
||||
public void reset() {
|
||||
this.algorithm.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#update(byte[])}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param input
|
||||
*/
|
||||
public void update(byte[] input) {
|
||||
this.algorithm.update(input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#update(byte)}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param input
|
||||
*/
|
||||
public void update(byte input) {
|
||||
this.algorithm.update(input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#update(byte[], int, int)}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param buf
|
||||
* @param offset
|
||||
* @param len
|
||||
*/
|
||||
public void update(byte buf[], int offset, int len) {
|
||||
this.algorithm.update(buf, offset, len);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseNamespace() {
|
||||
return Constants.SignatureSpecNS;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_DIGESTMETHOD;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the actual {@link java.security.MessageDigest} algorithm object
|
||||
*
|
||||
* @return the actual {@link java.security.MessageDigest} algorithm object
|
||||
*/
|
||||
public java.security.MessageDigest getAlgorithm() {
|
||||
return algorithm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#isEqual}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param digesta
|
||||
* @param digestb
|
||||
* @return the result of the {@link java.security.MessageDigest#isEqual} method
|
||||
*/
|
||||
public static boolean isEqual(byte[] digesta, byte[] digestb) {
|
||||
return java.security.MessageDigest.isEqual(digesta, digestb);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#digest()}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#digest()} method
|
||||
*/
|
||||
public byte[] digest() {
|
||||
return algorithm.digest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#digest(byte[])}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param input
|
||||
* @return the result of the {@link java.security.MessageDigest#digest(byte[])} method
|
||||
*/
|
||||
public byte[] digest(byte input[]) {
|
||||
return algorithm.digest(input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#digest(byte[], int, int)}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param buf
|
||||
* @param offset
|
||||
* @param len
|
||||
* @return the result of the {@link java.security.MessageDigest#digest(byte[], int, int)} method
|
||||
* @throws java.security.DigestException
|
||||
*/
|
||||
public int digest(byte buf[], int offset, int len) throws java.security.DigestException {
|
||||
return algorithm.digest(buf, offset, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#getAlgorithm}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#getAlgorithm} method
|
||||
*/
|
||||
public String getJCEAlgorithmString() {
|
||||
return algorithm.getAlgorithm();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#getProvider}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#getProvider} method
|
||||
*/
|
||||
public java.security.Provider getJCEProvider() {
|
||||
return algorithm.getProvider();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#getDigestLength}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.MessageDigest#getDigestLength} method
|
||||
*/
|
||||
public int getDigestLength() {
|
||||
return algorithm.getDigestLength();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#reset}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
*/
|
||||
public void reset() {
|
||||
algorithm.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#update(byte[])}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param input
|
||||
*/
|
||||
public void update(byte[] input) {
|
||||
algorithm.update(input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#update(byte)}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param input
|
||||
*/
|
||||
public void update(byte input) {
|
||||
algorithm.update(input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.MessageDigest#update(byte[], int, int)}
|
||||
* which is executed on the internal {@link java.security.MessageDigest} object.
|
||||
*
|
||||
* @param buf
|
||||
* @param offset
|
||||
* @param len
|
||||
*/
|
||||
public void update(byte buf[], int offset, int len) {
|
||||
algorithm.update(buf, offset, len);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseNamespace() {
|
||||
return Constants.SignatureSpecNS;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_DIGESTMETHOD;
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ public class SignatureAlgorithm extends Algorithm {
|
||||
this.algorithmURI = algorithmURI;
|
||||
|
||||
signatureAlgorithm = getSignatureAlgorithmSpi(algorithmURI);
|
||||
signatureAlgorithm.engineGetContextFromElement(this._constructionElement);
|
||||
signatureAlgorithm.engineGetContextFromElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -92,10 +92,10 @@ public class SignatureAlgorithm extends Algorithm {
|
||||
this.algorithmURI = algorithmURI;
|
||||
|
||||
signatureAlgorithm = getSignatureAlgorithmSpi(algorithmURI);
|
||||
signatureAlgorithm.engineGetContextFromElement(this._constructionElement);
|
||||
signatureAlgorithm.engineGetContextFromElement(this.constructionElement);
|
||||
|
||||
signatureAlgorithm.engineSetHMACOutputLength(hmacOutputLength);
|
||||
((IntegrityHmac)signatureAlgorithm).engineAddContextToElement(_constructionElement);
|
||||
((IntegrityHmac)signatureAlgorithm).engineAddContextToElement(constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -136,7 +136,7 @@ public class SignatureAlgorithm extends Algorithm {
|
||||
}
|
||||
|
||||
signatureAlgorithm = getSignatureAlgorithmSpi(algorithmURI);
|
||||
signatureAlgorithm.engineGetContextFromElement(this._constructionElement);
|
||||
signatureAlgorithm.engineGetContextFromElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -310,7 +310,7 @@ public class SignatureAlgorithm extends Algorithm {
|
||||
* @return the URI representation of Transformation algorithm
|
||||
*/
|
||||
public final String getURI() {
|
||||
return _constructionElement.getAttributeNS(null, Constants._ATT_ALGORITHM);
|
||||
return constructionElement.getAttributeNS(null, Constants._ATT_ALGORITHM);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -380,9 +380,7 @@ public class SignatureAlgorithm extends Algorithm {
|
||||
* This method registers the default algorithms.
|
||||
*/
|
||||
public static void registerDefaultAlgorithms() {
|
||||
algorithmHash.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_DSA, SignatureDSA.class
|
||||
);
|
||||
algorithmHash.put(SignatureDSA.URI, SignatureDSA.class);
|
||||
algorithmHash.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1, SignatureBaseRSA.SignatureRSASHA1.class
|
||||
);
|
||||
@ -409,6 +407,15 @@ public class SignatureAlgorithm extends Algorithm {
|
||||
algorithmHash.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1, SignatureECDSA.SignatureECDSASHA1.class
|
||||
);
|
||||
algorithmHash.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA256, SignatureECDSA.SignatureECDSASHA256.class
|
||||
);
|
||||
algorithmHash.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA384, SignatureECDSA.SignatureECDSASHA384.class
|
||||
);
|
||||
algorithmHash.put(
|
||||
XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA512, SignatureECDSA.SignatureECDSASHA512.class
|
||||
);
|
||||
algorithmHash.put(
|
||||
XMLSignature.ALGO_ID_MAC_HMAC_NOT_RECOMMENDED_MD5, IntegrityHmac.IntegrityHmacMD5.class
|
||||
);
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.algorithms;
|
||||
|
||||
@ -27,157 +29,149 @@ import java.security.spec.AlgorithmParameterSpec;
|
||||
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
*/
|
||||
public abstract class SignatureAlgorithmSpi {
|
||||
|
||||
/**
|
||||
* Returns the URI representation of <code>Transformation algorithm</code>
|
||||
*
|
||||
* @return the URI representation of <code>Transformation algorithm</code>
|
||||
*/
|
||||
protected abstract String engineGetURI();
|
||||
/**
|
||||
* Returns the URI representation of <code>Transformation algorithm</code>
|
||||
*
|
||||
* @return the URI representation of <code>Transformation algorithm</code>
|
||||
*/
|
||||
protected abstract String engineGetURI();
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#getAlgorithm}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.Signature#getAlgorithm} method
|
||||
*/
|
||||
protected abstract String engineGetJCEAlgorithmString();
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#getAlgorithm}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.Signature#getAlgorithm} method
|
||||
*/
|
||||
protected abstract String engineGetJCEAlgorithmString();
|
||||
|
||||
/**
|
||||
* Method engineGetJCEProviderName
|
||||
*
|
||||
* @return the JCE ProviderName
|
||||
*/
|
||||
protected abstract String engineGetJCEProviderName();
|
||||
/**
|
||||
* Method engineGetJCEProviderName
|
||||
*
|
||||
* @return the JCE ProviderName
|
||||
*/
|
||||
protected abstract String engineGetJCEProviderName();
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#update(byte[])}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param input
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineUpdate(byte[] input)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#update(byte[])}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param input
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineUpdate(byte[] input) throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#update(byte[])}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param input
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineUpdate(byte input)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#update(byte[])}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param input
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineUpdate(byte input) throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#update(byte[], int, int)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param buf
|
||||
* @param offset
|
||||
* @param len
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineUpdate(byte buf[], int offset, int len)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#update(byte[], int, int)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param buf
|
||||
* @param offset
|
||||
* @param len
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineUpdate(byte buf[], int offset, int len)
|
||||
throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#initSign(java.security.PrivateKey)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param signingKey
|
||||
* @throws XMLSignatureException if this method is called on a MAC
|
||||
*/
|
||||
protected abstract void engineInitSign(Key signingKey)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#initSign(java.security.PrivateKey)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param signingKey
|
||||
* @throws XMLSignatureException if this method is called on a MAC
|
||||
*/
|
||||
protected abstract void engineInitSign(Key signingKey) throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#initSign(java.security.PrivateKey, java.security.SecureRandom)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param signingKey
|
||||
* @param secureRandom
|
||||
* @throws XMLSignatureException if this method is called on a MAC
|
||||
*/
|
||||
protected abstract void engineInitSign(
|
||||
Key signingKey, SecureRandom secureRandom) throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#initSign(java.security.PrivateKey,
|
||||
* java.security.SecureRandom)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param signingKey
|
||||
* @param secureRandom
|
||||
* @throws XMLSignatureException if this method is called on a MAC
|
||||
*/
|
||||
protected abstract void engineInitSign(Key signingKey, SecureRandom secureRandom)
|
||||
throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link javax.crypto.Mac}
|
||||
* which is executed on the internal {@link javax.crypto.Mac#init(Key)} object.
|
||||
*
|
||||
* @param signingKey
|
||||
* @param algorithmParameterSpec
|
||||
* @throws XMLSignatureException if this method is called on a Signature
|
||||
*/
|
||||
protected abstract void engineInitSign(
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link javax.crypto.Mac}
|
||||
* which is executed on the internal {@link javax.crypto.Mac#init(Key)} object.
|
||||
*
|
||||
* @param signingKey
|
||||
* @param algorithmParameterSpec
|
||||
* @throws XMLSignatureException if this method is called on a Signature
|
||||
*/
|
||||
protected abstract void engineInitSign(
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec
|
||||
) throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#sign()}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.Signature#sign()} method
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract byte[] engineSign() throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#sign()}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @return the result of the {@link java.security.Signature#sign()} method
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract byte[] engineSign() throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Method engineInitVerify
|
||||
*
|
||||
* @param verificationKey
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineInitVerify(Key verificationKey)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Method engineInitVerify
|
||||
*
|
||||
* @param verificationKey
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineInitVerify(Key verificationKey) throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#verify(byte[])}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param signature
|
||||
* @return true if the signature is correct
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract boolean engineVerify(byte[] signature)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#verify(byte[])}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param signature
|
||||
* @return true if the signature is correct
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract boolean engineVerify(byte[] signature) throws XMLSignatureException;
|
||||
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#setParameter(java.security.spec.AlgorithmParameterSpec)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param params
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineSetParameter(AlgorithmParameterSpec params)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Proxy method for {@link java.security.Signature#setParameter(
|
||||
* java.security.spec.AlgorithmParameterSpec)}
|
||||
* which is executed on the internal {@link java.security.Signature} object.
|
||||
*
|
||||
* @param params
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineSetParameter(AlgorithmParameterSpec params)
|
||||
throws XMLSignatureException;
|
||||
|
||||
|
||||
/**
|
||||
* Method engineGetContextFromElement
|
||||
*
|
||||
* @param element
|
||||
*/
|
||||
protected void engineGetContextFromElement(Element element) {
|
||||
}
|
||||
/**
|
||||
* Method engineGetContextFromElement
|
||||
*
|
||||
* @param element
|
||||
*/
|
||||
protected void engineGetContextFromElement(Element element) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Method engineSetHMACOutputLength
|
||||
*
|
||||
* @param HMACOutputLength
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineSetHMACOutputLength(int HMACOutputLength)
|
||||
throws XMLSignatureException;
|
||||
/**
|
||||
* Method engineSetHMACOutputLength
|
||||
*
|
||||
* @param HMACOutputLength
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected abstract void engineSetHMACOutputLength(int HMACOutputLength)
|
||||
throws XMLSignatureException;
|
||||
|
||||
public void reset() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2007 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.algorithms.implementations;
|
||||
|
||||
@ -36,22 +38,17 @@ import com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithmSpi
|
||||
import com.sun.org.apache.xml.internal.security.signature.XMLSignature;
|
||||
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
*/
|
||||
public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/** {@link java.util.logging} logging facility */
|
||||
static java.util.logging.Logger log =
|
||||
java.util.logging.Logger.getLogger
|
||||
(SignatureBaseRSA.class.getName());
|
||||
/** {@link org.apache.commons.logging} logging facility */
|
||||
private static java.util.logging.Logger log =
|
||||
java.util.logging.Logger.getLogger(SignatureBaseRSA.class.getName());
|
||||
|
||||
/** @inheritDoc */
|
||||
public abstract String engineGetURI();
|
||||
|
||||
/** Field algorithm */
|
||||
private java.security.Signature _signatureAlgorithm = null;
|
||||
private java.security.Signature signatureAlgorithm = null;
|
||||
|
||||
/**
|
||||
* Constructor SignatureRSA
|
||||
@ -59,17 +56,17 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureBaseRSA() throws XMLSignatureException {
|
||||
|
||||
String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI());
|
||||
|
||||
if (log.isLoggable(java.util.logging.Level.FINE))
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Created SignatureRSA using " + algorithmID);
|
||||
String provider=JCEMapper.getProviderId();
|
||||
}
|
||||
String provider = JCEMapper.getProviderId();
|
||||
try {
|
||||
if (provider==null) {
|
||||
this._signatureAlgorithm = Signature.getInstance(algorithmID);
|
||||
if (provider == null) {
|
||||
this.signatureAlgorithm = Signature.getInstance(algorithmID);
|
||||
} else {
|
||||
this._signatureAlgorithm = Signature.getInstance(algorithmID,provider);
|
||||
this.signatureAlgorithm = Signature.getInstance(algorithmID,provider);
|
||||
}
|
||||
} catch (java.security.NoSuchAlgorithmException ex) {
|
||||
Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
|
||||
@ -85,20 +82,17 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
/** @inheritDoc */
|
||||
protected void engineSetParameter(AlgorithmParameterSpec params)
|
||||
throws XMLSignatureException {
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.setParameter(params);
|
||||
this.signatureAlgorithm.setParameter(params);
|
||||
} catch (InvalidAlgorithmParameterException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected boolean engineVerify(byte[] signature)
|
||||
throws XMLSignatureException {
|
||||
|
||||
protected boolean engineVerify(byte[] signature) throws XMLSignatureException {
|
||||
try {
|
||||
return this._signatureAlgorithm.verify(signature);
|
||||
return this.signatureAlgorithm.verify(signature);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -106,32 +100,29 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
|
||||
|
||||
if (!(publicKey instanceof PublicKey)) {
|
||||
String supplied = publicKey.getClass().getName();
|
||||
String needed = PublicKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
throw new XMLSignatureException
|
||||
("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initVerify((PublicKey) publicKey);
|
||||
this.signatureAlgorithm.initVerify((PublicKey) publicKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
// reinstantiate Signature object to work around bug in JDK
|
||||
// see: http://bugs.sun.com/view_bug.do?bug_id=4953555
|
||||
Signature sig = this._signatureAlgorithm;
|
||||
Signature sig = this.signatureAlgorithm;
|
||||
try {
|
||||
this._signatureAlgorithm = Signature.getInstance
|
||||
(_signatureAlgorithm.getAlgorithm());
|
||||
this.signatureAlgorithm = Signature.getInstance(signatureAlgorithm.getAlgorithm());
|
||||
} catch (Exception e) {
|
||||
// this shouldn't occur, but if it does, restore previous
|
||||
// Signature
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Exception when reinstantiating Signature:" + e);
|
||||
}
|
||||
this._signatureAlgorithm = sig;
|
||||
this.signatureAlgorithm = sig;
|
||||
}
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -140,7 +131,7 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
/** @inheritDoc */
|
||||
protected byte[] engineSign() throws XMLSignatureException {
|
||||
try {
|
||||
return this._signatureAlgorithm.sign();
|
||||
return this.signatureAlgorithm.sign();
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -149,19 +140,16 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
|
||||
throws XMLSignatureException {
|
||||
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
throw new XMLSignatureException
|
||||
("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initSign
|
||||
((PrivateKey) privateKey, secureRandom);
|
||||
this.signatureAlgorithm.initSign((PrivateKey) privateKey, secureRandom);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -169,18 +157,16 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(Key privateKey) throws XMLSignatureException {
|
||||
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
throw new XMLSignatureException
|
||||
("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initSign((PrivateKey) privateKey);
|
||||
this.signatureAlgorithm.initSign((PrivateKey) privateKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -189,7 +175,7 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte[] input) throws XMLSignatureException {
|
||||
try {
|
||||
this._signatureAlgorithm.update(input);
|
||||
this.signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -198,17 +184,16 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte input) throws XMLSignatureException {
|
||||
try {
|
||||
this._signatureAlgorithm.update(input);
|
||||
this.signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte buf[], int offset, int len)
|
||||
throws XMLSignatureException {
|
||||
protected void engineUpdate(byte buf[], int offset, int len) throws XMLSignatureException {
|
||||
try {
|
||||
this._signatureAlgorithm.update(buf, offset, len);
|
||||
this.signatureAlgorithm.update(buf, offset, len);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -216,34 +201,29 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/** @inheritDoc */
|
||||
protected String engineGetJCEAlgorithmString() {
|
||||
return this._signatureAlgorithm.getAlgorithm();
|
||||
return this.signatureAlgorithm.getAlgorithm();
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected String engineGetJCEProviderName() {
|
||||
return this._signatureAlgorithm.getProvider().getName();
|
||||
return this.signatureAlgorithm.getProvider().getName();
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineSetHMACOutputLength(int HMACOutputLength)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException
|
||||
("algorithms.HMACOutputLengthOnlyForHMAC");
|
||||
throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC");
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException(
|
||||
"algorithms.CannotUseAlgorithmParameterSpecOnRSA");
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec
|
||||
) throws XMLSignatureException {
|
||||
throw new XMLSignatureException("algorithms.CannotUseAlgorithmParameterSpecOnRSA");
|
||||
}
|
||||
|
||||
/**
|
||||
* Class SignatureRSASHA1
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public static class SignatureRSASHA1 extends SignatureBaseRSA {
|
||||
|
||||
@ -264,9 +244,6 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/**
|
||||
* Class SignatureRSASHA256
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public static class SignatureRSASHA256 extends SignatureBaseRSA {
|
||||
|
||||
@ -287,9 +264,6 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/**
|
||||
* Class SignatureRSASHA384
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public static class SignatureRSASHA384 extends SignatureBaseRSA {
|
||||
|
||||
@ -310,9 +284,6 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/**
|
||||
* Class SignatureRSASHA512
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public static class SignatureRSASHA512 extends SignatureBaseRSA {
|
||||
|
||||
@ -333,9 +304,6 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/**
|
||||
* Class SignatureRSARIPEMD160
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public static class SignatureRSARIPEMD160 extends SignatureBaseRSA {
|
||||
|
||||
@ -356,9 +324,6 @@ public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/**
|
||||
* Class SignatureRSAMD5
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public static class SignatureRSAMD5 extends SignatureBaseRSA {
|
||||
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.algorithms.implementations;
|
||||
|
||||
@ -37,21 +39,17 @@ import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Base64;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Constants;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
*/
|
||||
public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/** {@link java.util.logging} logging facility */
|
||||
static java.util.logging.Logger log =
|
||||
/** {@link org.apache.commons.logging} logging facility */
|
||||
private static java.util.logging.Logger log =
|
||||
java.util.logging.Logger.getLogger(SignatureDSA.class.getName());
|
||||
|
||||
/** Field _URI */
|
||||
public static final String _URI = Constants.SignatureSpecNS + "dsa-sha1";
|
||||
/** Field URI */
|
||||
public static final String URI = Constants.SignatureSpecNS + "dsa-sha1";
|
||||
|
||||
/** Field algorithm */
|
||||
private java.security.Signature _signatureAlgorithm = null;
|
||||
private java.security.Signature signatureAlgorithm = null;
|
||||
|
||||
/**
|
||||
* Method engineGetURI
|
||||
@ -59,7 +57,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected String engineGetURI() {
|
||||
return SignatureDSA._URI;
|
||||
return SignatureDSA.URI;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,17 +66,17 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureDSA() throws XMLSignatureException {
|
||||
|
||||
String algorithmID = JCEMapper.translateURItoJCEID(SignatureDSA._URI);
|
||||
if (log.isLoggable(java.util.logging.Level.FINE))
|
||||
String algorithmID = JCEMapper.translateURItoJCEID(SignatureDSA.URI);
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Created SignatureDSA using " + algorithmID);
|
||||
}
|
||||
|
||||
String provider = JCEMapper.getProviderId();
|
||||
try {
|
||||
if (provider == null) {
|
||||
this._signatureAlgorithm = Signature.getInstance(algorithmID);
|
||||
this.signatureAlgorithm = Signature.getInstance(algorithmID);
|
||||
} else {
|
||||
this._signatureAlgorithm =
|
||||
this.signatureAlgorithm =
|
||||
Signature.getInstance(algorithmID, provider);
|
||||
}
|
||||
} catch (java.security.NoSuchAlgorithmException ex) {
|
||||
@ -95,9 +93,8 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
*/
|
||||
protected void engineSetParameter(AlgorithmParameterSpec params)
|
||||
throws XMLSignatureException {
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.setParameter(params);
|
||||
this.signatureAlgorithm.setParameter(params);
|
||||
} catch (InvalidAlgorithmParameterException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -107,15 +104,15 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected boolean engineVerify(byte[] signature)
|
||||
throws XMLSignatureException {
|
||||
|
||||
throws XMLSignatureException {
|
||||
try {
|
||||
if (log.isLoggable(java.util.logging.Level.FINE))
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Called DSA.verify() on " + Base64.encode(signature));
|
||||
}
|
||||
|
||||
byte[] jcebytes = SignatureDSA.convertXMLDSIGtoASN1(signature);
|
||||
|
||||
return this._signatureAlgorithm.verify(jcebytes);
|
||||
return this.signatureAlgorithm.verify(jcebytes);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
} catch (IOException ex) {
|
||||
@ -127,32 +124,29 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
|
||||
|
||||
if (!(publicKey instanceof PublicKey)) {
|
||||
String supplied = publicKey.getClass().getName();
|
||||
String needed = PublicKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
throw new XMLSignatureException
|
||||
("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initVerify((PublicKey) publicKey);
|
||||
this.signatureAlgorithm.initVerify((PublicKey) publicKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
// reinstantiate Signature object to work around bug in JDK
|
||||
// see: http://bugs.sun.com/view_bug.do?bug_id=4953555
|
||||
Signature sig = this._signatureAlgorithm;
|
||||
Signature sig = this.signatureAlgorithm;
|
||||
try {
|
||||
this._signatureAlgorithm = Signature.getInstance
|
||||
(_signatureAlgorithm.getAlgorithm());
|
||||
this.signatureAlgorithm = Signature.getInstance(signatureAlgorithm.getAlgorithm());
|
||||
} catch (Exception e) {
|
||||
// this shouldn't occur, but if it does, restore previous
|
||||
// Signature
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Exception when reinstantiating Signature:" + e);
|
||||
}
|
||||
this._signatureAlgorithm = sig;
|
||||
this.signatureAlgorithm = sig;
|
||||
}
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -162,9 +156,8 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected byte[] engineSign() throws XMLSignatureException {
|
||||
|
||||
try {
|
||||
byte jcebytes[] = this._signatureAlgorithm.sign();
|
||||
byte jcebytes[] = this.signatureAlgorithm.sign();
|
||||
|
||||
return SignatureDSA.convertASN1toXMLDSIG(jcebytes);
|
||||
} catch (IOException ex) {
|
||||
@ -178,20 +171,17 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
|
||||
throws XMLSignatureException {
|
||||
|
||||
throws XMLSignatureException {
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
throw new XMLSignatureException
|
||||
("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initSign((PrivateKey) privateKey,
|
||||
secureRandom);
|
||||
this.signatureAlgorithm.initSign((PrivateKey) privateKey, secureRandom);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -201,18 +191,16 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected void engineInitSign(Key privateKey) throws XMLSignatureException {
|
||||
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
throw new XMLSignatureException
|
||||
("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initSign((PrivateKey) privateKey);
|
||||
this.signatureAlgorithm.initSign((PrivateKey) privateKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -223,7 +211,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
*/
|
||||
protected void engineUpdate(byte[] input) throws XMLSignatureException {
|
||||
try {
|
||||
this._signatureAlgorithm.update(input);
|
||||
this.signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -234,7 +222,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
*/
|
||||
protected void engineUpdate(byte input) throws XMLSignatureException {
|
||||
try {
|
||||
this._signatureAlgorithm.update(input);
|
||||
this.signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -243,10 +231,9 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected void engineUpdate(byte buf[], int offset, int len)
|
||||
throws XMLSignatureException {
|
||||
protected void engineUpdate(byte buf[], int offset, int len) throws XMLSignatureException {
|
||||
try {
|
||||
this._signatureAlgorithm.update(buf, offset, len);
|
||||
this.signatureAlgorithm.update(buf, offset, len);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
@ -258,7 +245,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected String engineGetJCEAlgorithmString() {
|
||||
return this._signatureAlgorithm.getAlgorithm();
|
||||
return this.signatureAlgorithm.getAlgorithm();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -267,7 +254,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected String engineGetJCEProviderName() {
|
||||
return this._signatureAlgorithm.getProvider().getName();
|
||||
return this.signatureAlgorithm.getProvider().getName();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -282,8 +269,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @throws IOException
|
||||
* @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
|
||||
*/
|
||||
private static byte[] convertASN1toXMLDSIG(byte asn1Bytes[])
|
||||
throws IOException {
|
||||
private static byte[] convertASN1toXMLDSIG(byte asn1Bytes[]) throws IOException {
|
||||
|
||||
byte rLength = asn1Bytes[3];
|
||||
int i;
|
||||
@ -294,19 +280,18 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
int j;
|
||||
|
||||
for (j = sLength;
|
||||
(j > 0) && (asn1Bytes[(6 + rLength + sLength) - j] == 0); j--);
|
||||
(j > 0) && (asn1Bytes[(6 + rLength + sLength) - j] == 0); j--);
|
||||
|
||||
if ((asn1Bytes[0] != 48) || (asn1Bytes[1] != asn1Bytes.length - 2)
|
||||
|| (asn1Bytes[2] != 2) || (i > 20)
|
||||
|| (asn1Bytes[4 + rLength] != 2) || (j > 20)) {
|
||||
|| (asn1Bytes[2] != 2) || (i > 20)
|
||||
|| (asn1Bytes[4 + rLength] != 2) || (j > 20)) {
|
||||
throw new IOException("Invalid ASN.1 format of DSA signature");
|
||||
}
|
||||
byte xmldsigBytes[] = new byte[40];
|
||||
|
||||
System.arraycopy(asn1Bytes, (4 + rLength) - i, xmldsigBytes, 20 - i,
|
||||
i);
|
||||
System.arraycopy(asn1Bytes, (4 + rLength) - i, xmldsigBytes, 20 - i, i);
|
||||
System.arraycopy(asn1Bytes, (6 + rLength + sLength) - j, xmldsigBytes,
|
||||
40 - j, j);
|
||||
40 - j, j);
|
||||
|
||||
return xmldsigBytes;
|
||||
}
|
||||
@ -323,8 +308,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @throws IOException
|
||||
* @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
|
||||
*/
|
||||
private static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[])
|
||||
throws IOException {
|
||||
private static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[]) throws IOException {
|
||||
|
||||
if (xmldsigBytes.length != 40) {
|
||||
throw new IOException("Invalid XMLDSIG format of DSA signature");
|
||||
@ -337,7 +321,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
int j = i;
|
||||
|
||||
if (xmldsigBytes[20 - i] < 0) {
|
||||
j += 1;
|
||||
j += 1;
|
||||
}
|
||||
|
||||
int k;
|
||||
@ -373,10 +357,8 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @param HMACOutputLength
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected void engineSetHMACOutputLength(int HMACOutputLength)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException(
|
||||
"algorithms.HMACOutputLengthOnlyForHMAC");
|
||||
protected void engineSetHMACOutputLength(int HMACOutputLength) throws XMLSignatureException {
|
||||
throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -387,9 +369,8 @@ public class SignatureDSA extends SignatureAlgorithmSpi {
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
protected void engineInitSign(
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException(
|
||||
"algorithms.CannotUseAlgorithmParameterSpecOnDSA");
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec
|
||||
) throws XMLSignatureException {
|
||||
throw new XMLSignatureException("algorithms.CannotUseAlgorithmParameterSpecOnDSA");
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,26 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.algorithms.implementations;
|
||||
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.InvalidAlgorithmParameterException;
|
||||
import java.security.InvalidKeyException;
|
||||
@ -40,345 +40,417 @@ import com.sun.org.apache.xml.internal.security.signature.XMLSignature;
|
||||
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Base64;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: raul $
|
||||
* @author Alex Dupre
|
||||
*/
|
||||
public abstract class SignatureECDSA extends SignatureAlgorithmSpi {
|
||||
|
||||
/** {@link java.util.logging} logging facility */
|
||||
static java.util.logging.Logger log =
|
||||
/** {@link org.apache.commons.logging} logging facility */
|
||||
private static java.util.logging.Logger log =
|
||||
java.util.logging.Logger.getLogger(SignatureECDSA.class.getName());
|
||||
|
||||
/** @inheritDoc */
|
||||
public abstract String engineGetURI();
|
||||
public abstract String engineGetURI();
|
||||
|
||||
/** Field algorithm */
|
||||
private java.security.Signature _signatureAlgorithm = null;
|
||||
/** Field algorithm */
|
||||
private java.security.Signature signatureAlgorithm = null;
|
||||
|
||||
/**
|
||||
* Converts an ASN.1 ECDSA value to a XML Signature ECDSA Value.
|
||||
*
|
||||
* The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r,s) value
|
||||
* pairs; the XML Signature requires the core BigInteger values.
|
||||
*
|
||||
* @param asn1Bytes
|
||||
* @return the decode bytes
|
||||
*
|
||||
* @throws IOException
|
||||
* @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
|
||||
* @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
|
||||
*/
|
||||
private static byte[] convertASN1toXMLDSIG(byte asn1Bytes[])
|
||||
throws IOException {
|
||||
/**
|
||||
* Converts an ASN.1 ECDSA value to a XML Signature ECDSA Value.
|
||||
*
|
||||
* The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r,s) value
|
||||
* pairs; the XML Signature requires the core BigInteger values.
|
||||
*
|
||||
* @param asn1Bytes
|
||||
* @return the decode bytes
|
||||
*
|
||||
* @throws IOException
|
||||
* @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
|
||||
* @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
|
||||
*/
|
||||
public static byte[] convertASN1toXMLDSIG(byte asn1Bytes[]) throws IOException {
|
||||
|
||||
byte rLength = asn1Bytes[3];
|
||||
int i;
|
||||
|
||||
for (i = rLength; (i > 0) && (asn1Bytes[(4 + rLength) - i] == 0); i--);
|
||||
|
||||
byte sLength = asn1Bytes[5 + rLength];
|
||||
int j;
|
||||
|
||||
for (j = sLength;
|
||||
(j > 0) && (asn1Bytes[(6 + rLength + sLength) - j] == 0); j--);
|
||||
|
||||
if ((asn1Bytes[0] != 48) || (asn1Bytes[1] != asn1Bytes.length - 2)
|
||||
|| (asn1Bytes[2] != 2) || (i > 24)
|
||||
|| (asn1Bytes[4 + rLength] != 2) || (j > 24)) {
|
||||
throw new IOException("Invalid ASN.1 format of ECDSA signature");
|
||||
}
|
||||
byte xmldsigBytes[] = new byte[48];
|
||||
|
||||
System.arraycopy(asn1Bytes, (4 + rLength) - i, xmldsigBytes, 24 - i,
|
||||
i);
|
||||
System.arraycopy(asn1Bytes, (6 + rLength + sLength) - j, xmldsigBytes,
|
||||
48 - j, j);
|
||||
|
||||
return xmldsigBytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a XML Signature ECDSA Value to an ASN.1 DSA value.
|
||||
*
|
||||
* The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r,s) value
|
||||
* pairs; the XML Signature requires the core BigInteger values.
|
||||
*
|
||||
* @param xmldsigBytes
|
||||
* @return the encoded ASN.1 bytes
|
||||
*
|
||||
* @throws IOException
|
||||
* @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
|
||||
* @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
|
||||
*/
|
||||
private static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[])
|
||||
throws IOException {
|
||||
|
||||
if (xmldsigBytes.length != 48) {
|
||||
throw new IOException("Invalid XMLDSIG format of ECDSA signature");
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 24; (i > 0) && (xmldsigBytes[24 - i] == 0); i--);
|
||||
|
||||
int j = i;
|
||||
|
||||
if (xmldsigBytes[24 - i] < 0) {
|
||||
j += 1;
|
||||
}
|
||||
|
||||
int k;
|
||||
|
||||
for (k = 24; (k > 0) && (xmldsigBytes[48 - k] == 0); k--);
|
||||
|
||||
int l = k;
|
||||
|
||||
if (xmldsigBytes[48 - k] < 0) {
|
||||
l += 1;
|
||||
}
|
||||
|
||||
byte asn1Bytes[] = new byte[6 + j + l];
|
||||
|
||||
asn1Bytes[0] = 48;
|
||||
asn1Bytes[1] = (byte) (4 + j + l);
|
||||
asn1Bytes[2] = 2;
|
||||
asn1Bytes[3] = (byte) j;
|
||||
|
||||
System.arraycopy(xmldsigBytes, 24 - i, asn1Bytes, (4 + j) - i, i);
|
||||
|
||||
asn1Bytes[4 + j] = 2;
|
||||
asn1Bytes[5 + j] = (byte) l;
|
||||
|
||||
System.arraycopy(xmldsigBytes, 48 - k, asn1Bytes, (6 + j + l) - k, k);
|
||||
|
||||
return asn1Bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor SignatureRSA
|
||||
*
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureECDSA() throws XMLSignatureException {
|
||||
|
||||
String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI());
|
||||
|
||||
if (log.isLoggable(java.util.logging.Level.FINE))
|
||||
log.log(java.util.logging.Level.FINE, "Created SignatureECDSA using " + algorithmID);
|
||||
String provider=JCEMapper.getProviderId();
|
||||
try {
|
||||
if (provider==null) {
|
||||
this._signatureAlgorithm = Signature.getInstance(algorithmID);
|
||||
} else {
|
||||
this._signatureAlgorithm = Signature.getInstance(algorithmID,provider);
|
||||
}
|
||||
} catch (java.security.NoSuchAlgorithmException ex) {
|
||||
Object[] exArgs = { algorithmID,
|
||||
ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
} catch (NoSuchProviderException ex) {
|
||||
Object[] exArgs = { algorithmID,
|
||||
ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
if (asn1Bytes.length < 8 || asn1Bytes[0] != 48) {
|
||||
throw new IOException("Invalid ASN.1 format of ECDSA signature");
|
||||
}
|
||||
int offset;
|
||||
if (asn1Bytes[1] > 0) {
|
||||
offset = 2;
|
||||
} else if (asn1Bytes[1] == (byte) 0x81) {
|
||||
offset = 3;
|
||||
} else {
|
||||
throw new IOException("Invalid ASN.1 format of ECDSA signature");
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineSetParameter(AlgorithmParameterSpec params)
|
||||
throws XMLSignatureException {
|
||||
byte rLength = asn1Bytes[offset + 1];
|
||||
int i;
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.setParameter(params);
|
||||
} catch (InvalidAlgorithmParameterException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
for (i = rLength; (i > 0) && (asn1Bytes[(offset + 2 + rLength) - i] == 0); i--);
|
||||
|
||||
/** @inheritDoc */
|
||||
protected boolean engineVerify(byte[] signature)
|
||||
throws XMLSignatureException {
|
||||
byte sLength = asn1Bytes[offset + 2 + rLength + 1];
|
||||
int j;
|
||||
|
||||
try {
|
||||
byte[] jcebytes = SignatureECDSA.convertXMLDSIGtoASN1(signature);
|
||||
for (j = sLength;
|
||||
(j > 0) && (asn1Bytes[(offset + 2 + rLength + 2 + sLength) - j] == 0); j--);
|
||||
|
||||
if (log.isLoggable(java.util.logging.Level.FINE))
|
||||
log.log(java.util.logging.Level.FINE, "Called ECDSA.verify() on " + Base64.encode(signature));
|
||||
int rawLen = Math.max(i, j);
|
||||
|
||||
return this._signatureAlgorithm.verify(jcebytes);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
} catch (IOException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
if ((asn1Bytes[offset - 1] & 0xff) != asn1Bytes.length - offset
|
||||
|| (asn1Bytes[offset - 1] & 0xff) != 2 + rLength + 2 + sLength
|
||||
|| asn1Bytes[offset] != 2
|
||||
|| asn1Bytes[offset + 2 + rLength] != 2) {
|
||||
throw new IOException("Invalid ASN.1 format of ECDSA signature");
|
||||
}
|
||||
byte xmldsigBytes[] = new byte[2*rawLen];
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
|
||||
System.arraycopy(asn1Bytes, (offset + 2 + rLength) - i, xmldsigBytes, rawLen - i, i);
|
||||
System.arraycopy(asn1Bytes, (offset + 2 + rLength + 2 + sLength) - j, xmldsigBytes,
|
||||
2*rawLen - j, j);
|
||||
|
||||
if (!(publicKey instanceof PublicKey)) {
|
||||
String supplied = publicKey.getClass().getName();
|
||||
String needed = PublicKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
return xmldsigBytes;
|
||||
}
|
||||
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
|
||||
exArgs);
|
||||
}
|
||||
/**
|
||||
* Converts a XML Signature ECDSA Value to an ASN.1 DSA value.
|
||||
*
|
||||
* The JAVA JCE ECDSA Signature algorithm creates ASN.1 encoded (r,s) value
|
||||
* pairs; the XML Signature requires the core BigInteger values.
|
||||
*
|
||||
* @param xmldsigBytes
|
||||
* @return the encoded ASN.1 bytes
|
||||
*
|
||||
* @throws IOException
|
||||
* @see <A HREF="http://www.w3.org/TR/xmldsig-core/#dsa-sha1">6.4.1 DSA</A>
|
||||
* @see <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc4050.txt">3.3. ECDSA Signatures</A>
|
||||
*/
|
||||
public static byte[] convertXMLDSIGtoASN1(byte xmldsigBytes[]) throws IOException {
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initVerify((PublicKey) publicKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
int rawLen = xmldsigBytes.length/2;
|
||||
|
||||
int i;
|
||||
|
||||
for (i = rawLen; (i > 0) && (xmldsigBytes[rawLen - i] == 0); i--);
|
||||
|
||||
int j = i;
|
||||
|
||||
if (xmldsigBytes[rawLen - i] < 0) {
|
||||
j += 1;
|
||||
}
|
||||
|
||||
int k;
|
||||
|
||||
for (k = rawLen; (k > 0) && (xmldsigBytes[2*rawLen - k] == 0); k--);
|
||||
|
||||
int l = k;
|
||||
|
||||
if (xmldsigBytes[2*rawLen - k] < 0) {
|
||||
l += 1;
|
||||
}
|
||||
|
||||
int len = 2 + j + 2 + l;
|
||||
if (len > 255) {
|
||||
throw new IOException("Invalid XMLDSIG format of ECDSA signature");
|
||||
}
|
||||
int offset;
|
||||
byte asn1Bytes[];
|
||||
if (len < 128) {
|
||||
asn1Bytes = new byte[2 + 2 + j + 2 + l];
|
||||
offset = 1;
|
||||
} else {
|
||||
asn1Bytes = new byte[3 + 2 + j + 2 + l];
|
||||
asn1Bytes[1] = (byte) 0x81;
|
||||
offset = 2;
|
||||
}
|
||||
asn1Bytes[0] = 48;
|
||||
asn1Bytes[offset++] = (byte) len;
|
||||
asn1Bytes[offset++] = 2;
|
||||
asn1Bytes[offset++] = (byte) j;
|
||||
|
||||
System.arraycopy(xmldsigBytes, rawLen - i, asn1Bytes, (offset + j) - i, i);
|
||||
|
||||
offset += j;
|
||||
|
||||
asn1Bytes[offset++] = 2;
|
||||
asn1Bytes[offset++] = (byte) l;
|
||||
|
||||
System.arraycopy(xmldsigBytes, 2*rawLen - k, asn1Bytes, (offset + l) - k, k);
|
||||
|
||||
return asn1Bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor SignatureRSA
|
||||
*
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureECDSA() throws XMLSignatureException {
|
||||
|
||||
String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI());
|
||||
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Created SignatureECDSA using " + algorithmID);
|
||||
}
|
||||
String provider = JCEMapper.getProviderId();
|
||||
try {
|
||||
if (provider == null) {
|
||||
this.signatureAlgorithm = Signature.getInstance(algorithmID);
|
||||
} else {
|
||||
this.signatureAlgorithm = Signature.getInstance(algorithmID,provider);
|
||||
}
|
||||
} catch (java.security.NoSuchAlgorithmException ex) {
|
||||
Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
} catch (NoSuchProviderException ex) {
|
||||
Object[] exArgs = { algorithmID, ex.getLocalizedMessage() };
|
||||
|
||||
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineSetParameter(AlgorithmParameterSpec params)
|
||||
throws XMLSignatureException {
|
||||
try {
|
||||
this.signatureAlgorithm.setParameter(params);
|
||||
} catch (InvalidAlgorithmParameterException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected boolean engineVerify(byte[] signature) throws XMLSignatureException {
|
||||
try {
|
||||
byte[] jcebytes = SignatureECDSA.convertXMLDSIGtoASN1(signature);
|
||||
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Called ECDSA.verify() on " + Base64.encode(signature));
|
||||
}
|
||||
|
||||
return this.signatureAlgorithm.verify(jcebytes);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
} catch (IOException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitVerify(Key publicKey) throws XMLSignatureException {
|
||||
|
||||
if (!(publicKey instanceof PublicKey)) {
|
||||
String supplied = publicKey.getClass().getName();
|
||||
String needed = PublicKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
try {
|
||||
this.signatureAlgorithm.initVerify((PublicKey) publicKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
// reinstantiate Signature object to work around bug in JDK
|
||||
// see: http://bugs.sun.com/view_bug.do?bug_id=4953555
|
||||
Signature sig = this._signatureAlgorithm;
|
||||
Signature sig = this.signatureAlgorithm;
|
||||
try {
|
||||
this._signatureAlgorithm = Signature.getInstance
|
||||
(_signatureAlgorithm.getAlgorithm());
|
||||
this.signatureAlgorithm = Signature.getInstance(signatureAlgorithm.getAlgorithm());
|
||||
} catch (Exception e) {
|
||||
// this shouldn't occur, but if it does, restore previous
|
||||
// Signature
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "Exception when reinstantiating Signature:" + e);
|
||||
}
|
||||
this._signatureAlgorithm = sig;
|
||||
this.signatureAlgorithm = sig;
|
||||
}
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected byte[] engineSign() throws XMLSignatureException {
|
||||
/** @inheritDoc */
|
||||
protected byte[] engineSign() throws XMLSignatureException {
|
||||
try {
|
||||
byte jcebytes[] = this.signatureAlgorithm.sign();
|
||||
|
||||
try {
|
||||
byte jcebytes[] = this._signatureAlgorithm.sign();
|
||||
return SignatureECDSA.convertASN1toXMLDSIG(jcebytes);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
} catch (IOException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
return SignatureECDSA.convertASN1toXMLDSIG(jcebytes);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
} catch (IOException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
|
||||
throws XMLSignatureException {
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(Key privateKey, SecureRandom secureRandom)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
try {
|
||||
this.signatureAlgorithm.initSign((PrivateKey) privateKey, secureRandom);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
|
||||
exArgs);
|
||||
}
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(Key privateKey) throws XMLSignatureException {
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initSign((PrivateKey) privateKey,
|
||||
secureRandom);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation", exArgs);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(Key privateKey) throws XMLSignatureException {
|
||||
try {
|
||||
this.signatureAlgorithm.initSign((PrivateKey) privateKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(privateKey instanceof PrivateKey)) {
|
||||
String supplied = privateKey.getClass().getName();
|
||||
String needed = PrivateKey.class.getName();
|
||||
Object exArgs[] = { supplied, needed };
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte[] input) throws XMLSignatureException {
|
||||
try {
|
||||
this.signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
throw new XMLSignatureException("algorithms.WrongKeyForThisOperation",
|
||||
exArgs);
|
||||
}
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte input) throws XMLSignatureException {
|
||||
try {
|
||||
this.signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.initSign((PrivateKey) privateKey);
|
||||
} catch (InvalidKeyException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte buf[], int offset, int len) throws XMLSignatureException {
|
||||
try {
|
||||
this.signatureAlgorithm.update(buf, offset, len);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte[] input) throws XMLSignatureException {
|
||||
/** @inheritDoc */
|
||||
protected String engineGetJCEAlgorithmString() {
|
||||
return this.signatureAlgorithm.getAlgorithm();
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
/** @inheritDoc */
|
||||
protected String engineGetJCEProviderName() {
|
||||
return this.signatureAlgorithm.getProvider().getName();
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte input) throws XMLSignatureException {
|
||||
/** @inheritDoc */
|
||||
protected void engineSetHMACOutputLength(int HMACOutputLength)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC");
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.update(input);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec
|
||||
) throws XMLSignatureException {
|
||||
throw new XMLSignatureException("algorithms.CannotUseAlgorithmParameterSpecOnRSA");
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineUpdate(byte buf[], int offset, int len)
|
||||
throws XMLSignatureException {
|
||||
/**
|
||||
* Class SignatureRSASHA1
|
||||
*
|
||||
* @author $Author: marcx $
|
||||
*/
|
||||
public static class SignatureECDSASHA1 extends SignatureECDSA {
|
||||
/**
|
||||
* Constructor SignatureRSASHA1
|
||||
*
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureECDSASHA1() throws XMLSignatureException {
|
||||
super();
|
||||
}
|
||||
|
||||
try {
|
||||
this._signatureAlgorithm.update(buf, offset, len);
|
||||
} catch (SignatureException ex) {
|
||||
throw new XMLSignatureException("empty", ex);
|
||||
}
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String engineGetURI() {
|
||||
return XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1;
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected String engineGetJCEAlgorithmString() {
|
||||
return this._signatureAlgorithm.getAlgorithm();
|
||||
}
|
||||
/**
|
||||
* Class SignatureRSASHA256
|
||||
*
|
||||
* @author Alex Dupre
|
||||
*/
|
||||
public static class SignatureECDSASHA256 extends SignatureECDSA {
|
||||
|
||||
/** @inheritDoc */
|
||||
protected String engineGetJCEProviderName() {
|
||||
return this._signatureAlgorithm.getProvider().getName();
|
||||
}
|
||||
/**
|
||||
* Constructor SignatureRSASHA256
|
||||
*
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureECDSASHA256() throws XMLSignatureException {
|
||||
super();
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineSetHMACOutputLength(int HMACOutputLength)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC");
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String engineGetURI() {
|
||||
return XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA256;
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
protected void engineInitSign(
|
||||
Key signingKey, AlgorithmParameterSpec algorithmParameterSpec)
|
||||
throws XMLSignatureException {
|
||||
throw new XMLSignatureException(
|
||||
"algorithms.CannotUseAlgorithmParameterSpecOnRSA");
|
||||
}
|
||||
/**
|
||||
* Class SignatureRSASHA384
|
||||
*
|
||||
* @author Alex Dupre
|
||||
*/
|
||||
public static class SignatureECDSASHA384 extends SignatureECDSA {
|
||||
|
||||
/**
|
||||
* Class SignatureRSASHA1
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @version $Revision: 1.2 $
|
||||
*/
|
||||
public static class SignatureECDSASHA1 extends SignatureECDSA {
|
||||
/**
|
||||
* Constructor SignatureRSASHA384
|
||||
*
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureECDSASHA384() throws XMLSignatureException {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor SignatureRSASHA1
|
||||
*
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureECDSASHA1() throws XMLSignatureException {
|
||||
super();
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String engineGetURI() {
|
||||
return XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA384;
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String engineGetURI() {
|
||||
return XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA1;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Class SignatureRSASHA512
|
||||
*
|
||||
* @author Alex Dupre
|
||||
*/
|
||||
public static class SignatureECDSASHA512 extends SignatureECDSA {
|
||||
|
||||
/**
|
||||
* Constructor SignatureRSASHA512
|
||||
*
|
||||
* @throws XMLSignatureException
|
||||
*/
|
||||
public SignatureECDSASHA512() throws XMLSignatureException {
|
||||
super();
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String engineGetURI() {
|
||||
return XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA512;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,29 +2,28 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
|
||||
|
||||
/**
|
||||
* Class CanonicalizationException
|
||||
*
|
||||
@ -32,57 +31,58 @@ import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
*/
|
||||
public class CanonicalizationException extends XMLSecurityException {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
*/
|
||||
public CanonicalizationException() {
|
||||
super();
|
||||
}
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
*/
|
||||
public CanonicalizationException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public CanonicalizationException(String _msgID) {
|
||||
super(_msgID);
|
||||
}
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public CanonicalizationException(String msgID) {
|
||||
super(msgID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public CanonicalizationException(String _msgID, Object exArgs[]) {
|
||||
super(_msgID, exArgs);
|
||||
}
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public CanonicalizationException(String msgID, Object exArgs[]) {
|
||||
super(msgID, exArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public CanonicalizationException(String _msgID, Exception _originalException) {
|
||||
super(_msgID, _originalException);
|
||||
}
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public CanonicalizationException(String msgID, Exception originalException) {
|
||||
super(msgID, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public CanonicalizationException(String _msgID, Object exArgs[],
|
||||
Exception _originalException) {
|
||||
super(_msgID, exArgs, _originalException);
|
||||
}
|
||||
/**
|
||||
* Constructor CanonicalizationException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public CanonicalizationException(
|
||||
String msgID, Object exArgs[], Exception originalException
|
||||
) {
|
||||
super(msgID, exArgs, originalException);
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,6 +39,7 @@ import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicaliz
|
||||
import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315ExclWithComments;
|
||||
import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315OmitComments;
|
||||
import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315WithComments;
|
||||
import com.sun.org.apache.xml.internal.security.c14n.implementations.CanonicalizerPhysical;
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.AlgorithmAlreadyRegisteredException;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
@ -91,6 +92,11 @@ public class Canonicalizer {
|
||||
*/
|
||||
public static final String ALGO_ID_C14N11_WITH_COMMENTS =
|
||||
ALGO_ID_C14N11_OMIT_COMMENTS + "#WithComments";
|
||||
/**
|
||||
* Non-standard algorithm to serialize the physical representation for XML Encryption
|
||||
*/
|
||||
public static final String ALGO_ID_C14N_PHYSICAL =
|
||||
"http://santuario.apache.org/c14n/physical";
|
||||
|
||||
private static Map<String, Class<? extends CanonicalizerSpi>> canonicalizerHash =
|
||||
new ConcurrentHashMap<String, Class<? extends CanonicalizerSpi>>();
|
||||
@ -202,6 +208,10 @@ public class Canonicalizer {
|
||||
Canonicalizer.ALGO_ID_C14N11_WITH_COMMENTS,
|
||||
Canonicalizer11_WithComments.class
|
||||
);
|
||||
canonicalizerHash.put(
|
||||
Canonicalizer.ALGO_ID_C14N_PHYSICAL,
|
||||
CanonicalizerPhysical.class
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -2,26 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n;
|
||||
|
||||
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Set;
|
||||
@ -29,7 +29,6 @@ import java.util.Set;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.xpath.XPath;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
|
||||
import org.w3c.dom.Document;
|
||||
@ -37,166 +36,134 @@ import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
|
||||
/**
|
||||
* Base class which all Caninicalization algorithms extend.
|
||||
* Base class which all Canonicalization algorithms extend.
|
||||
*
|
||||
* $todo$ cange JavaDoc
|
||||
* @author Christian Geuer-Pollmann
|
||||
*/
|
||||
public abstract class CanonicalizerSpi {
|
||||
|
||||
/**
|
||||
* Method canonicalize
|
||||
*
|
||||
*
|
||||
* @param inputBytes
|
||||
* @return the c14n bytes.
|
||||
*
|
||||
*
|
||||
* @throws CanonicalizationException
|
||||
* @throws java.io.IOException
|
||||
* @throws javax.xml.parsers.ParserConfigurationException
|
||||
* @throws org.xml.sax.SAXException
|
||||
*
|
||||
*/
|
||||
public byte[] engineCanonicalize(byte[] inputBytes)
|
||||
throws javax.xml.parsers.ParserConfigurationException,
|
||||
java.io.IOException, org.xml.sax.SAXException,
|
||||
CanonicalizationException {
|
||||
/** Reset the writer after a c14n */
|
||||
protected boolean reset = false;
|
||||
|
||||
java.io.ByteArrayInputStream bais = new ByteArrayInputStream(inputBytes);
|
||||
InputSource in = new InputSource(bais);
|
||||
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
|
||||
dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
|
||||
/**
|
||||
* Method canonicalize
|
||||
*
|
||||
* @param inputBytes
|
||||
* @return the c14n bytes.
|
||||
*
|
||||
* @throws CanonicalizationException
|
||||
* @throws java.io.IOException
|
||||
* @throws javax.xml.parsers.ParserConfigurationException
|
||||
* @throws org.xml.sax.SAXException
|
||||
*/
|
||||
public byte[] engineCanonicalize(byte[] inputBytes)
|
||||
throws javax.xml.parsers.ParserConfigurationException, java.io.IOException,
|
||||
org.xml.sax.SAXException, CanonicalizationException {
|
||||
|
||||
// needs to validate for ID attribute nomalization
|
||||
dfactory.setNamespaceAware(true);
|
||||
java.io.InputStream bais = new ByteArrayInputStream(inputBytes);
|
||||
InputSource in = new InputSource(bais);
|
||||
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
|
||||
dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
|
||||
|
||||
DocumentBuilder db = dfactory.newDocumentBuilder();
|
||||
// needs to validate for ID attribute normalization
|
||||
dfactory.setNamespaceAware(true);
|
||||
|
||||
/*
|
||||
* for some of the test vectors from the specification,
|
||||
* there has to be a validatin parser for ID attributes, default
|
||||
* attribute values, NMTOKENS, etc.
|
||||
* Unfortunaltely, the test vectors do use different DTDs or
|
||||
* even no DTD. So Xerces 1.3.1 fires many warnings about using
|
||||
* ErrorHandlers.
|
||||
*
|
||||
* Text from the spec:
|
||||
*
|
||||
* The input octet stream MUST contain a well-formed XML document,
|
||||
* but the input need not be validated. However, the attribute
|
||||
* value normalization and entity reference resolution MUST be
|
||||
* performed in accordance with the behaviors of a validating
|
||||
* XML processor. As well, nodes for default attributes (declared
|
||||
* in the ATTLIST with an AttValue but not specified) are created
|
||||
* in each element. Thus, the declarations in the document type
|
||||
* declaration are used to help create the canonical form, even
|
||||
* though the document type declaration is not retained in the
|
||||
* canonical form.
|
||||
*
|
||||
*/
|
||||
DocumentBuilder db = dfactory.newDocumentBuilder();
|
||||
|
||||
// ErrorHandler eh = new C14NErrorHandler();
|
||||
// db.setErrorHandler(eh);
|
||||
Document document = db.parse(in);
|
||||
byte result[] = this.engineCanonicalizeSubTree(document);
|
||||
return result;
|
||||
}
|
||||
Document document = db.parse(in);
|
||||
return this.engineCanonicalizeSubTree(document);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method engineCanonicalizeXPathNodeSet
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(NodeList xpathNodeSet)
|
||||
throws CanonicalizationException {
|
||||
/**
|
||||
* Method engineCanonicalizeXPathNodeSet
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(NodeList xpathNodeSet)
|
||||
throws CanonicalizationException {
|
||||
return this.engineCanonicalizeXPathNodeSet(
|
||||
XMLUtils.convertNodelistToSet(xpathNodeSet)
|
||||
);
|
||||
}
|
||||
|
||||
return this
|
||||
.engineCanonicalizeXPathNodeSet(XMLUtils
|
||||
.convertNodelistToSet(xpathNodeSet));
|
||||
}
|
||||
/**
|
||||
* Method engineCanonicalizeXPathNodeSet
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(NodeList xpathNodeSet, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
return this.engineCanonicalizeXPathNodeSet(
|
||||
XMLUtils.convertNodelistToSet(xpathNodeSet), inclusiveNamespaces
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method engineCanonicalizeXPathNodeSet
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(NodeList xpathNodeSet, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
/**
|
||||
* Returns the URI of this engine.
|
||||
* @return the URI
|
||||
*/
|
||||
public abstract String engineGetURI();
|
||||
|
||||
return this
|
||||
.engineCanonicalizeXPathNodeSet(XMLUtils
|
||||
.convertNodelistToSet(xpathNodeSet), inclusiveNamespaces);
|
||||
}
|
||||
/**
|
||||
* Returns true if comments are included
|
||||
* @return true if comments are included
|
||||
*/
|
||||
public abstract boolean engineGetIncludeComments();
|
||||
|
||||
//J-
|
||||
/** Returns the URI of this engine.
|
||||
* @return the URI
|
||||
*/
|
||||
public abstract String engineGetURI();
|
||||
/**
|
||||
* C14n a nodeset
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet)
|
||||
throws CanonicalizationException;
|
||||
|
||||
/** Returns the URI if include comments
|
||||
* @return true if include.
|
||||
*/
|
||||
public abstract boolean engineGetIncludeComments();
|
||||
/**
|
||||
* C14n a nodeset
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeXPathNodeSet(
|
||||
Set<Node> xpathNodeSet, String inclusiveNamespaces
|
||||
) throws CanonicalizationException;
|
||||
|
||||
/**
|
||||
* C14n a nodeset
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet)
|
||||
throws CanonicalizationException;
|
||||
/**
|
||||
* C14n a node tree.
|
||||
*
|
||||
* @param rootNode
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeSubTree(Node rootNode)
|
||||
throws CanonicalizationException;
|
||||
|
||||
/**
|
||||
* C14n a nodeset
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet, String inclusiveNamespaces)
|
||||
throws CanonicalizationException;
|
||||
/**
|
||||
* C14n a node tree.
|
||||
*
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces)
|
||||
throws CanonicalizationException;
|
||||
|
||||
/**
|
||||
* C14n a node tree.
|
||||
*
|
||||
* @param rootNode
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeSubTree(Node rootNode)
|
||||
throws CanonicalizationException;
|
||||
/**
|
||||
* Sets the writer where the canonicalization ends. ByteArrayOutputStream if
|
||||
* none is set.
|
||||
* @param os
|
||||
*/
|
||||
public abstract void setWriter(OutputStream os);
|
||||
|
||||
/**
|
||||
* C14n a node tree.
|
||||
*
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @return the c14n bytes
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public abstract byte[] engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces)
|
||||
throws CanonicalizationException;
|
||||
|
||||
/**
|
||||
* Sets the writter where the cannocalization ends. ByteArrayOutputStream if
|
||||
* none is setted.
|
||||
* @param os
|
||||
*/
|
||||
public abstract void setWriter(OutputStream os);
|
||||
|
||||
/** Reset the writter after a c14n */
|
||||
protected boolean reset=false;
|
||||
//J+
|
||||
}
|
||||
|
||||
@ -2,87 +2,82 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Christian Geuer-Pollmann
|
||||
*/
|
||||
public class InvalidCanonicalizerException extends XMLSecurityException {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
*/
|
||||
public InvalidCanonicalizerException() {
|
||||
super();
|
||||
}
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
*/
|
||||
public InvalidCanonicalizerException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public InvalidCanonicalizerException(String _msgID) {
|
||||
super(_msgID);
|
||||
}
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public InvalidCanonicalizerException(String msgID) {
|
||||
super(msgID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public InvalidCanonicalizerException(String _msgID, Object exArgs[]) {
|
||||
super(_msgID, exArgs);
|
||||
}
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public InvalidCanonicalizerException(String msgID, Object exArgs[]) {
|
||||
super(msgID, exArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public InvalidCanonicalizerException(String _msgID,
|
||||
Exception _originalException) {
|
||||
super(_msgID, _originalException);
|
||||
}
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public InvalidCanonicalizerException(String msgID, Exception originalException) {
|
||||
super(msgID, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public InvalidCanonicalizerException(String _msgID, Object exArgs[],
|
||||
Exception _originalException) {
|
||||
super(_msgID, exArgs, _originalException);
|
||||
}
|
||||
/**
|
||||
* Constructor InvalidCanonicalizerException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public InvalidCanonicalizerException(
|
||||
String msgID, Object exArgs[], Exception originalException
|
||||
) {
|
||||
super(msgID, exArgs, originalException);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.helper;
|
||||
|
||||
@ -43,10 +45,10 @@ import java.util.Comparator;
|
||||
*/
|
||||
public class AttrCompare implements Comparator<Attr>, Serializable {
|
||||
|
||||
private final static long serialVersionUID = -7113259629930576230L;
|
||||
private final static int ATTR0_BEFORE_ATTR1 = -1;
|
||||
private final static int ATTR1_BEFORE_ATTR0 = 1;
|
||||
private final static String XMLNS=Constants.NamespaceSpecNS;
|
||||
private static final long serialVersionUID = -7113259629930576230L;
|
||||
private static final int ATTR0_BEFORE_ATTR1 = -1;
|
||||
private static final int ATTR1_BEFORE_ATTR0 = 1;
|
||||
private static final String XMLNS = Constants.NamespaceSpecNS;
|
||||
|
||||
/**
|
||||
* Compares two attributes based on the C14n specification.
|
||||
@ -69,12 +71,11 @@ public class AttrCompare implements Comparator<Attr>, Serializable {
|
||||
*
|
||||
*/
|
||||
public int compare(Attr attr0, Attr attr1) {
|
||||
|
||||
String namespaceURI0 = attr0.getNamespaceURI();
|
||||
String namespaceURI1 = attr1.getNamespaceURI();
|
||||
|
||||
boolean isNamespaceAttr0 = XMLNS==namespaceURI0;
|
||||
boolean isNamespaceAttr1 = XMLNS==namespaceURI1;
|
||||
boolean isNamespaceAttr0 = XMLNS.equals(namespaceURI0);
|
||||
boolean isNamespaceAttr1 = XMLNS.equals(namespaceURI1);
|
||||
|
||||
if (isNamespaceAttr0) {
|
||||
if (isNamespaceAttr1) {
|
||||
@ -82,11 +83,11 @@ public class AttrCompare implements Comparator<Attr>, Serializable {
|
||||
String localname0 = attr0.getLocalName();
|
||||
String localname1 = attr1.getLocalName();
|
||||
|
||||
if (localname0.equals("xmlns")) {
|
||||
if ("xmlns".equals(localname0)) {
|
||||
localname0 = "";
|
||||
}
|
||||
|
||||
if (localname1.equals("xmlns")) {
|
||||
if ("xmlns".equals(localname1)) {
|
||||
localname1 = "";
|
||||
}
|
||||
|
||||
@ -94,9 +95,7 @@ public class AttrCompare implements Comparator<Attr>, Serializable {
|
||||
}
|
||||
// attr0 is a namespace, attr1 is not
|
||||
return ATTR0_BEFORE_ATTR1;
|
||||
}
|
||||
|
||||
if (isNamespaceAttr1) {
|
||||
} else if (isNamespaceAttr1) {
|
||||
// attr1 is a namespace, attr0 is not
|
||||
return ATTR1_BEFORE_ATTR0;
|
||||
}
|
||||
@ -109,9 +108,7 @@ public class AttrCompare implements Comparator<Attr>, Serializable {
|
||||
return name0.compareTo(name1);
|
||||
}
|
||||
return ATTR0_BEFORE_ATTR1;
|
||||
}
|
||||
|
||||
if (namespaceURI1 == null) {
|
||||
} else if (namespaceURI1 == null) {
|
||||
return ATTR1_BEFORE_ATTR0;
|
||||
}
|
||||
|
||||
|
||||
@ -2,33 +2,32 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.helper;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
|
||||
|
||||
/**
|
||||
* Temporary swapped static functions from the normalizer Section
|
||||
*
|
||||
@ -36,129 +35,121 @@ import org.w3c.dom.NamedNodeMap;
|
||||
*/
|
||||
public class C14nHelper {
|
||||
|
||||
/**
|
||||
* Constructor C14nHelper
|
||||
*
|
||||
*/
|
||||
private C14nHelper() {
|
||||
/**
|
||||
* Constructor C14nHelper
|
||||
*
|
||||
*/
|
||||
private C14nHelper() {
|
||||
// don't allow instantiation
|
||||
}
|
||||
|
||||
// don't allow instantiation
|
||||
}
|
||||
/**
|
||||
* Method namespaceIsRelative
|
||||
*
|
||||
* @param namespace
|
||||
* @return true if the given namespace is relative.
|
||||
*/
|
||||
public static boolean namespaceIsRelative(Attr namespace) {
|
||||
return !namespaceIsAbsolute(namespace);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method namespaceIsRelative
|
||||
*
|
||||
* @param namespace
|
||||
* @return true if the given namespace is relative.
|
||||
*/
|
||||
public static boolean namespaceIsRelative(Attr namespace) {
|
||||
return !namespaceIsAbsolute(namespace);
|
||||
}
|
||||
/**
|
||||
* Method namespaceIsRelative
|
||||
*
|
||||
* @param namespaceValue
|
||||
* @return true if the given namespace is relative.
|
||||
*/
|
||||
public static boolean namespaceIsRelative(String namespaceValue) {
|
||||
return !namespaceIsAbsolute(namespaceValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method namespaceIsRelative
|
||||
*
|
||||
* @param namespaceValue
|
||||
* @return true if the given namespace is relative.
|
||||
*/
|
||||
public static boolean namespaceIsRelative(String namespaceValue) {
|
||||
return !namespaceIsAbsolute(namespaceValue);
|
||||
}
|
||||
/**
|
||||
* Method namespaceIsAbsolute
|
||||
*
|
||||
* @param namespace
|
||||
* @return true if the given namespace is absolute.
|
||||
*/
|
||||
public static boolean namespaceIsAbsolute(Attr namespace) {
|
||||
return namespaceIsAbsolute(namespace.getValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method namespaceIsAbsolute
|
||||
*
|
||||
* @param namespace
|
||||
* @return true if the given namespace is absolute.
|
||||
*/
|
||||
public static boolean namespaceIsAbsolute(Attr namespace) {
|
||||
return namespaceIsAbsolute(namespace.getValue());
|
||||
}
|
||||
/**
|
||||
* Method namespaceIsAbsolute
|
||||
*
|
||||
* @param namespaceValue
|
||||
* @return true if the given namespace is absolute.
|
||||
*/
|
||||
public static boolean namespaceIsAbsolute(String namespaceValue) {
|
||||
// assume empty namespaces are absolute
|
||||
if (namespaceValue.length() == 0) {
|
||||
return true;
|
||||
}
|
||||
return namespaceValue.indexOf(':') > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method namespaceIsAbsolute
|
||||
*
|
||||
* @param namespaceValue
|
||||
* @return true if the given namespace is absolute.
|
||||
*/
|
||||
public static boolean namespaceIsAbsolute(String namespaceValue) {
|
||||
/**
|
||||
* This method throws an exception if the Attribute value contains
|
||||
* a relative URI.
|
||||
*
|
||||
* @param attr
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public static void assertNotRelativeNS(Attr attr) throws CanonicalizationException {
|
||||
if (attr == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// assume empty namespaces are absolute
|
||||
if (namespaceValue.length() == 0) {
|
||||
return true;
|
||||
}
|
||||
return namespaceValue.indexOf(':')>0;
|
||||
}
|
||||
String nodeAttrName = attr.getNodeName();
|
||||
boolean definesDefaultNS = nodeAttrName.equals("xmlns");
|
||||
boolean definesNonDefaultNS = nodeAttrName.startsWith("xmlns:");
|
||||
|
||||
/**
|
||||
* This method throws an exception if the Attribute value contains
|
||||
* a relative URI.
|
||||
*
|
||||
* @param attr
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public static void assertNotRelativeNS(Attr attr)
|
||||
throws CanonicalizationException {
|
||||
|
||||
if (attr == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String nodeAttrName = attr.getNodeName();
|
||||
boolean definesDefaultNS = nodeAttrName.equals("xmlns");
|
||||
boolean definesNonDefaultNS = nodeAttrName.startsWith("xmlns:");
|
||||
|
||||
if (definesDefaultNS || definesNonDefaultNS) {
|
||||
if (namespaceIsRelative(attr)) {
|
||||
if ((definesDefaultNS || definesNonDefaultNS) && namespaceIsRelative(attr)) {
|
||||
String parentName = attr.getOwnerElement().getTagName();
|
||||
String attrValue = attr.getValue();
|
||||
Object exArgs[] = { parentName, nodeAttrName, attrValue };
|
||||
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method throws a CanonicalizationException if the supplied Document
|
||||
* is not able to be traversed using a TreeWalker.
|
||||
*
|
||||
* @param document
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public static void checkTraversability(Document document)
|
||||
throws CanonicalizationException {
|
||||
/**
|
||||
* This method throws a CanonicalizationException if the supplied Document
|
||||
* is not able to be traversed using a TreeWalker.
|
||||
*
|
||||
* @param document
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public static void checkTraversability(Document document)
|
||||
throws CanonicalizationException {
|
||||
if (!document.isSupported("Traversal", "2.0")) {
|
||||
Object exArgs[] = {document.getImplementation().getClass().getName() };
|
||||
|
||||
if (!document.isSupported("Traversal", "2.0")) {
|
||||
Object exArgs[] = {
|
||||
document.getImplementation().getClass().getName() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.TraversalNotSupported", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.TraversalNotSupported", exArgs);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* This method throws a CanonicalizationException if the supplied Element
|
||||
* contains any relative namespaces.
|
||||
*
|
||||
* @param ctxNode
|
||||
* @throws CanonicalizationException
|
||||
* @see C14nHelper#assertNotRelativeNS(Attr)
|
||||
*/
|
||||
public static void checkForRelativeNamespace(Element ctxNode)
|
||||
throws CanonicalizationException {
|
||||
if (ctxNode != null) {
|
||||
NamedNodeMap attributes = ctxNode.getAttributes();
|
||||
|
||||
/**
|
||||
* This method throws a CanonicalizationException if the supplied Element
|
||||
* contains any relative namespaces.
|
||||
*
|
||||
* @param ctxNode
|
||||
* @throws CanonicalizationException
|
||||
* @see C14nHelper#assertNotRelativeNS(Attr)
|
||||
*/
|
||||
public static void checkForRelativeNamespace(Element ctxNode)
|
||||
throws CanonicalizationException {
|
||||
|
||||
if (ctxNode != null) {
|
||||
NamedNodeMap attributes = ctxNode.getAttributes();
|
||||
|
||||
for (int i = 0; i < attributes.getLength(); i++) {
|
||||
C14nHelper.assertNotRelativeNS((Attr) attributes.item(i));
|
||||
}
|
||||
} else {
|
||||
throw new CanonicalizationException(
|
||||
"Called checkForRelativeNamespace() on null");
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < attributes.getLength(); i++) {
|
||||
C14nHelper.assertNotRelativeNS((Attr) attributes.item(i));
|
||||
}
|
||||
} else {
|
||||
throw new CanonicalizationException("Called checkForRelativeNamespace() on null");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2008 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
@ -25,7 +27,6 @@ import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@ -34,7 +35,6 @@ import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.xpath.XPath;
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
@ -42,8 +42,6 @@ import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.Logger;
|
||||
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
|
||||
import com.sun.org.apache.xml.internal.security.c14n.helper.C14nHelper;
|
||||
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
|
||||
@ -57,40 +55,46 @@ import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
|
||||
*
|
||||
* @author Sean Mullan
|
||||
* @author Raul Benito
|
||||
* @version $Revision: 1.2 $
|
||||
*/
|
||||
public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
boolean firstCall = true;
|
||||
final SortedSet<Attr> result = new TreeSet<Attr>(COMPARE);
|
||||
static final String XMLNS_URI = Constants.NamespaceSpecNS;
|
||||
static final String XML_LANG_URI = Constants.XML_LANG_SPACE_SpecNS;
|
||||
|
||||
static Logger log = Logger.getLogger(Canonicalizer11.class.getName());
|
||||
private static final String XMLNS_URI = Constants.NamespaceSpecNS;
|
||||
private static final String XML_LANG_URI = Constants.XML_LANG_SPACE_SpecNS;
|
||||
private static java.util.logging.Logger log =
|
||||
java.util.logging.Logger.getLogger(Canonicalizer11.class.getName());
|
||||
private final SortedSet<Attr> result = new TreeSet<Attr>(COMPARE);
|
||||
|
||||
static class XmlAttrStack {
|
||||
int currentLevel = 0;
|
||||
int lastlevel = 0;
|
||||
XmlsStackElement cur;
|
||||
private boolean firstCall = true;
|
||||
|
||||
private static class XmlAttrStack {
|
||||
static class XmlsStackElement {
|
||||
int level;
|
||||
boolean rendered = false;
|
||||
List<Attr> nodes = new ArrayList<Attr>();
|
||||
};
|
||||
|
||||
int currentLevel = 0;
|
||||
int lastlevel = 0;
|
||||
XmlsStackElement cur;
|
||||
List<XmlsStackElement> levels = new ArrayList<XmlsStackElement>();
|
||||
|
||||
void push(int level) {
|
||||
currentLevel = level;
|
||||
if (currentLevel == -1)
|
||||
if (currentLevel == -1) {
|
||||
return;
|
||||
}
|
||||
cur = null;
|
||||
while (lastlevel >= currentLevel) {
|
||||
levels.remove(levels.size() - 1);
|
||||
if (levels.size() == 0) {
|
||||
int newSize = levels.size();
|
||||
if (newSize == 0) {
|
||||
lastlevel = 0;
|
||||
return;
|
||||
}
|
||||
lastlevel=(levels.get(levels.size()-1)).level;
|
||||
lastlevel = (levels.get(newSize - 1)).level;
|
||||
}
|
||||
}
|
||||
|
||||
void addXmlnsAttr(Attr n) {
|
||||
if (cur == null) {
|
||||
cur = new XmlsStackElement();
|
||||
@ -100,22 +104,24 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
}
|
||||
cur.nodes.add(n);
|
||||
}
|
||||
|
||||
void getXmlnsAttr(Collection<Attr> col) {
|
||||
int size = levels.size() - 1;
|
||||
if (cur == null) {
|
||||
cur = new XmlsStackElement();
|
||||
cur.level = currentLevel;
|
||||
lastlevel = currentLevel;
|
||||
levels.add(cur);
|
||||
}
|
||||
int size = levels.size() - 2;
|
||||
boolean parentRendered = false;
|
||||
XmlsStackElement e = null;
|
||||
if (size == -1) {
|
||||
parentRendered = true;
|
||||
} else {
|
||||
e = levels.get(size);
|
||||
if (e.rendered && e.level+1 == currentLevel)
|
||||
if (e.rendered && e.level + 1 == currentLevel) {
|
||||
parentRendered = true;
|
||||
}
|
||||
}
|
||||
if (parentRendered) {
|
||||
col.addAll(cur.nodes);
|
||||
@ -126,7 +132,7 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
Map<String, Attr> loa = new HashMap<String, Attr>();
|
||||
List<Attr> baseAttrs = new ArrayList<Attr>();
|
||||
boolean successiveOmitted = true;
|
||||
for (;size>=0;size--) {
|
||||
for (; size >= 0; size--) {
|
||||
e = levels.get(size);
|
||||
if (e.rendered) {
|
||||
successiveOmitted = false;
|
||||
@ -134,16 +140,15 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
Iterator<Attr> it = e.nodes.iterator();
|
||||
while (it.hasNext() && successiveOmitted) {
|
||||
Attr n = it.next();
|
||||
if (n.getLocalName().equals("base")) {
|
||||
if (!e.rendered) {
|
||||
baseAttrs.add(n);
|
||||
}
|
||||
} else if (!loa.containsKey(n.getName()))
|
||||
if (n.getLocalName().equals("base") && !e.rendered) {
|
||||
baseAttrs.add(n);
|
||||
} else if (!loa.containsKey(n.getName())) {
|
||||
loa.put(n.getName(), n);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!baseAttrs.isEmpty()) {
|
||||
Iterator<Attr> it = cur.nodes.iterator();
|
||||
Iterator<Attr> it = col.iterator();
|
||||
String base = null;
|
||||
Attr baseAttr = null;
|
||||
while (it.hasNext()) {
|
||||
@ -164,7 +169,9 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
try {
|
||||
base = joinURI(n.getValue(), base);
|
||||
} catch (URISyntaxException ue) {
|
||||
ue.printStackTrace();
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, ue.getMessage(), ue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -178,7 +185,8 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
col.addAll(loa.values());
|
||||
}
|
||||
};
|
||||
XmlAttrStack xmlattrStack = new XmlAttrStack();
|
||||
|
||||
private XmlAttrStack xmlattrStack = new XmlAttrStack();
|
||||
|
||||
/**
|
||||
* Constructor Canonicalizer11
|
||||
@ -189,194 +197,6 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
super(includeComments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be outputted for the given element.
|
||||
* <br>
|
||||
* The code of this method is a copy of {@link #handleAttributes(Element,
|
||||
* NameSpaceSymbTable)},
|
||||
* whereas it takes into account that subtree-c14n is -- well --
|
||||
* subtree-based.
|
||||
* So if the element in question isRoot of c14n, it's parent is not in the
|
||||
* node set, as well as all other ancestors.
|
||||
*
|
||||
* @param E
|
||||
* @param ns
|
||||
* @return the Attr[]s to be outputted
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
Iterator<Attr> handleAttributesSubtree(Element E, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
if (!E.hasAttributes() && !firstCall) {
|
||||
return null;
|
||||
}
|
||||
// result will contain the attrs which have to be outputted
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
NamedNodeMap attrs = E.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr) attrs.item(i);
|
||||
String NUri = N.getNamespaceURI();
|
||||
|
||||
if (XMLNS_URI != NUri) {
|
||||
// It's not a namespace attr node. Add to the result and
|
||||
// continue.
|
||||
result.add(N);
|
||||
continue;
|
||||
}
|
||||
|
||||
String NName = N.getLocalName();
|
||||
String NValue = N.getValue();
|
||||
if (XML.equals(NName)
|
||||
&& XML_LANG_URI.equals(NValue)) {
|
||||
// The default mapping for xml must not be output.
|
||||
continue;
|
||||
}
|
||||
|
||||
Node n = ns.addMappingAndRender(NName, NValue, N);
|
||||
|
||||
if (n != null) {
|
||||
// Render the ns definition
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(N)) {
|
||||
Object exArgs[] = {E.getTagName(), NName, N.getNodeValue()};
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (firstCall) {
|
||||
// It is the first node of the subtree
|
||||
// Obtain all the namespaces defined in the parents, and added
|
||||
// to the output.
|
||||
ns.getUnrenderedNodes(result);
|
||||
// output the attributes in the xml namespace.
|
||||
xmlattrStack.getXmlnsAttr(getSortedSetAsCollection(result));
|
||||
firstCall = false;
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be outputted for the given element.
|
||||
* <br>
|
||||
* IMPORTANT: This method expects to work on a modified DOM tree, i.e. a
|
||||
* DOM which has been prepared using
|
||||
* {@link com.sun.org.apache.xml.internal.security.utils.XMLUtils#circumventBug2650(
|
||||
* org.w3c.dom.Document)}.
|
||||
*
|
||||
* @param E
|
||||
* @param ns
|
||||
* @return the Attr[]s to be outputted
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
Iterator<Attr> handleAttributes(Element E, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
// result will contain the attrs which have to be output
|
||||
xmlattrStack.push(ns.getLevel());
|
||||
boolean isRealVisible = isVisibleDO(E, ns.getLevel()) == 1;
|
||||
NamedNodeMap attrs = null;
|
||||
int attrsLength = 0;
|
||||
if (E.hasAttributes()) {
|
||||
attrs = E.getAttributes();
|
||||
attrsLength = attrs.getLength();
|
||||
}
|
||||
|
||||
SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr)attrs.item(i);
|
||||
String NUri = N.getNamespaceURI();
|
||||
|
||||
if (XMLNS_URI != NUri) {
|
||||
// A non namespace definition node.
|
||||
if (XML_LANG_URI == NUri) {
|
||||
if (N.getLocalName().equals("id")) {
|
||||
if (isRealVisible) {
|
||||
// treat xml:id like any other attribute
|
||||
// (emit it, but don't inherit it)
|
||||
result.add(N);
|
||||
}
|
||||
} else {
|
||||
xmlattrStack.addXmlnsAttr(N);
|
||||
}
|
||||
} else if (isRealVisible) {
|
||||
// The node is visible add the attribute to the list of
|
||||
// output attributes.
|
||||
result.add(N);
|
||||
}
|
||||
// keep working
|
||||
continue;
|
||||
}
|
||||
|
||||
String NName = N.getLocalName();
|
||||
String NValue = N.getValue();
|
||||
if ("xml".equals(NName)
|
||||
&& XML_LANG_URI.equals(NValue)) {
|
||||
/* except omit namespace node with local name xml, which defines
|
||||
* the xml prefix, if its string value is
|
||||
* http://www.w3.org/XML/1998/namespace.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
// add the prefix binding to the ns symb table.
|
||||
// ns.addInclusiveMapping(NName,NValue,N,isRealVisible);
|
||||
if (isVisible(N)) {
|
||||
if (!isRealVisible && ns.removeMappingIfRender(NName)) {
|
||||
continue;
|
||||
}
|
||||
// The xpath select this node output it if needed.
|
||||
// Node n = ns.addMappingAndRenderXNodeSet
|
||||
// (NName, NValue, N, isRealVisible);
|
||||
Node n = ns.addMappingAndRender(NName, NValue, N);
|
||||
if (n != null) {
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(N)) {
|
||||
Object exArgs[] =
|
||||
{ E.getTagName(), NName, N.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isRealVisible && NName != XMLNS) {
|
||||
ns.removeMapping(NName);
|
||||
} else {
|
||||
ns.addMapping(NName, NValue, N);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isRealVisible) {
|
||||
// The element is visible, handle the xmlns definition
|
||||
Attr xmlns = E.getAttributeNodeNS(XMLNS_URI, XMLNS);
|
||||
Node n = null;
|
||||
if (xmlns == null) {
|
||||
// No xmlns def just get the already defined.
|
||||
n = ns.getMapping(XMLNS);
|
||||
} else if (!isVisible(xmlns)) {
|
||||
// There is a defn but the xmlns is not selected by the xpath.
|
||||
// then xmlns=""
|
||||
n = ns.addMappingAndRender(XMLNS, "", nullNode);
|
||||
}
|
||||
// output the xmlns def if needed.
|
||||
if (n != null) {
|
||||
result.add((Attr)n);
|
||||
}
|
||||
// Float all xml:* attributes of the unselected parent elements to
|
||||
// this one. addXmlAttributes(E,result);
|
||||
xmlattrStack.getXmlnsAttr(result);
|
||||
ns.getUnrenderedNodes(result);
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Always throws a CanonicalizationException because this is inclusive c14n.
|
||||
*
|
||||
@ -385,10 +205,10 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException always
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet,
|
||||
String inclusiveNamespaces) throws CanonicalizationException {
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.UnsupportedOperation");
|
||||
public byte[] engineCanonicalizeXPathNodeSet(
|
||||
Set<Node> xpathNodeSet, String inclusiveNamespaces
|
||||
) throws CanonicalizationException {
|
||||
throw new CanonicalizationException("c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -399,17 +219,189 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode,
|
||||
String inclusiveNamespaces) throws CanonicalizationException {
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.UnsupportedOperation");
|
||||
public byte[] engineCanonicalizeSubTree(
|
||||
Node rootNode, String inclusiveNamespaces
|
||||
) throws CanonicalizationException {
|
||||
throw new CanonicalizationException("c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
|
||||
void circumventBugIfNeeded(XMLSignatureInput input)
|
||||
/**
|
||||
* Returns the Attr[]s to be output for the given element.
|
||||
* <br>
|
||||
* The code of this method is a copy of {@link #handleAttributes(Element,
|
||||
* NameSpaceSymbTable)},
|
||||
* whereas it takes into account that subtree-c14n is -- well --
|
||||
* subtree-based.
|
||||
* So if the element in question isRoot of c14n, it's parent is not in the
|
||||
* node set, as well as all other ancestors.
|
||||
*
|
||||
* @param element
|
||||
* @param ns
|
||||
* @return the Attr[]s to be output
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@Override
|
||||
protected Iterator<Attr> handleAttributesSubtree(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
if (!element.hasAttributes() && !firstCall) {
|
||||
return null;
|
||||
}
|
||||
// result will contain the attrs which have to be output
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
if (element.hasAttributes()) {
|
||||
NamedNodeMap attrs = element.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
String NUri = attribute.getNamespaceURI();
|
||||
String NName = attribute.getLocalName();
|
||||
String NValue = attribute.getValue();
|
||||
|
||||
if (!XMLNS_URI.equals(NUri)) {
|
||||
// It's not a namespace attr node. Add to the result and continue.
|
||||
result.add(attribute);
|
||||
} else if (!(XML.equals(NName) && XML_LANG_URI.equals(NValue))) {
|
||||
// The default mapping for xml must not be output.
|
||||
Node n = ns.addMappingAndRender(NName, NValue, attribute);
|
||||
|
||||
if (n != null) {
|
||||
// Render the ns definition
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(attribute)) {
|
||||
Object exArgs[] = {element.getTagName(), NName, attribute.getNodeValue()};
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (firstCall) {
|
||||
// It is the first node of the subtree
|
||||
// Obtain all the namespaces defined in the parents, and added to the output.
|
||||
ns.getUnrenderedNodes(result);
|
||||
// output the attributes in the xml namespace.
|
||||
xmlattrStack.getXmlnsAttr(result);
|
||||
firstCall = false;
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be output for the given element.
|
||||
* <br>
|
||||
* IMPORTANT: This method expects to work on a modified DOM tree, i.e. a
|
||||
* DOM which has been prepared using
|
||||
* {@link com.sun.org.apache.xml.internal.security.utils.XMLUtils#circumventBug2650(
|
||||
* org.w3c.dom.Document)}.
|
||||
*
|
||||
* @param element
|
||||
* @param ns
|
||||
* @return the Attr[]s to be output
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@Override
|
||||
protected Iterator<Attr> handleAttributes(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
// result will contain the attrs which have to be output
|
||||
xmlattrStack.push(ns.getLevel());
|
||||
boolean isRealVisible = isVisibleDO(element, ns.getLevel()) == 1;
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
if (element.hasAttributes()) {
|
||||
NamedNodeMap attrs = element.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
String NUri = attribute.getNamespaceURI();
|
||||
String NName = attribute.getLocalName();
|
||||
String NValue = attribute.getValue();
|
||||
|
||||
if (!XMLNS_URI.equals(NUri)) {
|
||||
//A non namespace definition node.
|
||||
if (XML_LANG_URI.equals(NUri)) {
|
||||
if (NName.equals("id")) {
|
||||
if (isRealVisible) {
|
||||
// treat xml:id like any other attribute
|
||||
// (emit it, but don't inherit it)
|
||||
result.add(attribute);
|
||||
}
|
||||
} else {
|
||||
xmlattrStack.addXmlnsAttr(attribute);
|
||||
}
|
||||
} else if (isRealVisible) {
|
||||
//The node is visible add the attribute to the list of output attributes.
|
||||
result.add(attribute);
|
||||
}
|
||||
} else if (!XML.equals(NName) || !XML_LANG_URI.equals(NValue)) {
|
||||
/* except omit namespace node with local name xml, which defines
|
||||
* the xml prefix, if its string value is
|
||||
* http://www.w3.org/XML/1998/namespace.
|
||||
*/
|
||||
// add the prefix binding to the ns symb table.
|
||||
if (isVisible(attribute)) {
|
||||
if (isRealVisible || !ns.removeMappingIfRender(NName)) {
|
||||
// The xpath select this node output it if needed.
|
||||
Node n = ns.addMappingAndRender(NName, NValue, attribute);
|
||||
if (n != null) {
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(attribute)) {
|
||||
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isRealVisible && !XMLNS.equals(NName)) {
|
||||
ns.removeMapping(NName);
|
||||
} else {
|
||||
ns.addMapping(NName, NValue, attribute);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isRealVisible) {
|
||||
//The element is visible, handle the xmlns definition
|
||||
Attr xmlns = element.getAttributeNodeNS(XMLNS_URI, XMLNS);
|
||||
Node n = null;
|
||||
if (xmlns == null) {
|
||||
//No xmlns def just get the already defined.
|
||||
n = ns.getMapping(XMLNS);
|
||||
} else if (!isVisible(xmlns)) {
|
||||
//There is a definition but the xmlns is not selected by the xpath.
|
||||
//then xmlns=""
|
||||
n = ns.addMappingAndRender(XMLNS, "", nullNode);
|
||||
}
|
||||
//output the xmlns def if needed.
|
||||
if (n != null) {
|
||||
result.add((Attr)n);
|
||||
}
|
||||
//Float all xml:* attributes of the unselected parent elements to this one.
|
||||
xmlattrStack.getXmlnsAttr(result);
|
||||
ns.getUnrenderedNodes(result);
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
protected void circumventBugIfNeeded(XMLSignatureInput input)
|
||||
throws CanonicalizationException, ParserConfigurationException,
|
||||
IOException, SAXException {
|
||||
if (!input.isNeedsToBeExpanded())
|
||||
if (!input.isNeedsToBeExpanded()) {
|
||||
return;
|
||||
}
|
||||
Document doc = null;
|
||||
if (input.getSubNode() != null) {
|
||||
doc = XMLUtils.getOwnerDocument(input.getSubNode());
|
||||
@ -419,40 +411,47 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
XMLUtils.circumventBug2650(doc);
|
||||
}
|
||||
|
||||
void handleParent(Element e, NameSpaceSymbTable ns) {
|
||||
if (!e.hasAttributes()) {
|
||||
protected void handleParent(Element e, NameSpaceSymbTable ns) {
|
||||
if (!e.hasAttributes() && e.getNamespaceURI() == null) {
|
||||
return;
|
||||
}
|
||||
xmlattrStack.push(-1);
|
||||
NamedNodeMap attrs = e.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr) attrs.item(i);
|
||||
if (Constants.NamespaceSpecNS != N.getNamespaceURI()) {
|
||||
// Not a namespace definition, ignore.
|
||||
if (XML_LANG_URI == N.getNamespaceURI()) {
|
||||
xmlattrStack.addXmlnsAttr(N);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
String NName = attribute.getLocalName();
|
||||
String NValue = attribute.getNodeValue();
|
||||
|
||||
String NName = N.getLocalName();
|
||||
String NValue = N.getNodeValue();
|
||||
if (XML.equals(NName)
|
||||
&& Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
|
||||
continue;
|
||||
if (Constants.NamespaceSpecNS.equals(attribute.getNamespaceURI())) {
|
||||
if (!XML.equals(NName) || !Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
|
||||
ns.addMapping(NName, NValue, attribute);
|
||||
}
|
||||
} else if (!"id".equals(NName) && XML_LANG_URI.equals(attribute.getNamespaceURI())) {
|
||||
xmlattrStack.addXmlnsAttr(attribute);
|
||||
}
|
||||
ns.addMapping(NName,NValue,N);
|
||||
}
|
||||
if (e.getNamespaceURI() != null) {
|
||||
String NName = e.getPrefix();
|
||||
String NValue = e.getNamespaceURI();
|
||||
String Name;
|
||||
if (NName == null || NName.equals("")) {
|
||||
NName = "xmlns";
|
||||
Name = "xmlns";
|
||||
} else {
|
||||
Name = "xmlns:" + NName;
|
||||
}
|
||||
Attr n = e.getOwnerDocument().createAttributeNS("http://www.w3.org/2000/xmlns/", Name);
|
||||
n.setValue(NValue);
|
||||
ns.addMapping(NName, NValue, n);
|
||||
}
|
||||
}
|
||||
|
||||
private static String joinURI(String baseURI, String relativeURI)
|
||||
throws URISyntaxException {
|
||||
private static String joinURI(String baseURI, String relativeURI) throws URISyntaxException {
|
||||
String bscheme = null;
|
||||
String bauthority = null;
|
||||
String bpath = "";
|
||||
String bquery = null;
|
||||
String bfragment = null; // Is this correct?
|
||||
|
||||
// pre-parse the baseURI
|
||||
if (baseURI != null) {
|
||||
@ -464,7 +463,6 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
bauthority = base.getAuthority();
|
||||
bpath = base.getPath();
|
||||
bquery = base.getQuery();
|
||||
bfragment = base.getFragment();
|
||||
}
|
||||
|
||||
URI r = new URI(relativeURI);
|
||||
@ -472,9 +470,8 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
String rauthority = r.getAuthority();
|
||||
String rpath = r.getPath();
|
||||
String rquery = r.getQuery();
|
||||
String rfragment = null;
|
||||
|
||||
String tscheme, tauthority, tpath, tquery, tfragment;
|
||||
String tscheme, tauthority, tpath, tquery;
|
||||
if (rscheme != null && rscheme.equals(bscheme)) {
|
||||
rscheme = null;
|
||||
}
|
||||
@ -518,13 +515,13 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
}
|
||||
tscheme = bscheme;
|
||||
}
|
||||
tfragment = rfragment;
|
||||
return new URI(tscheme, tauthority, tpath, tquery, tfragment).toString();
|
||||
return new URI(tscheme, tauthority, tpath, tquery, null).toString();
|
||||
}
|
||||
|
||||
private static String removeDotSegments(String path) {
|
||||
|
||||
log.log(java.util.logging.Level.FINE, "STEP OUTPUT BUFFER\t\tINPUT BUFFER");
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "STEP OUTPUT BUFFER\t\tINPUT BUFFER");
|
||||
}
|
||||
|
||||
// 1. The input buffer is initialized with the now-appended path
|
||||
// components then replace occurrences of "//" in the input buffer
|
||||
@ -535,7 +532,7 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
}
|
||||
|
||||
// Initialize the output buffer with the empty string.
|
||||
StringBuffer output = new StringBuffer();
|
||||
StringBuilder output = new StringBuilder();
|
||||
|
||||
// If the input buffer starts with a root slash "/" then move this
|
||||
// character to the output buffer.
|
||||
@ -563,9 +560,9 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
output.append("../");
|
||||
}
|
||||
printStep("2A", output.toString(), input);
|
||||
// 2B. if the input buffer begins with a prefix of "/./" or "/.",
|
||||
// where "." is a complete path segment, then replace that prefix
|
||||
// with "/" in the input buffer; otherwise,
|
||||
// 2B. if the input buffer begins with a prefix of "/./" or "/.",
|
||||
// where "." is a complete path segment, then replace that prefix
|
||||
// with "/" in the input buffer; otherwise,
|
||||
} else if (input.startsWith("/./")) {
|
||||
input = input.substring(2);
|
||||
printStep("2B", output.toString(), input);
|
||||
@ -573,16 +570,16 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
// FIXME: what is complete path segment?
|
||||
input = input.replaceFirst("/.", "/");
|
||||
printStep("2B", output.toString(), input);
|
||||
// 2C. if the input buffer begins with a prefix of "/../" or "/..",
|
||||
// where ".." is a complete path segment, then replace that prefix
|
||||
// with "/" in the input buffer and if also the output buffer is
|
||||
// empty, last segment in the output buffer equals "../" or "..",
|
||||
// where ".." is a complete path segment, then append ".." or "/.."
|
||||
// for the latter case respectively to the output buffer else
|
||||
// remove the last segment and its preceding "/" (if any) from the
|
||||
// output buffer and if hereby the first character in the output
|
||||
// buffer was removed and it was not the root slash then delete a
|
||||
// leading slash from the input buffer; otherwise,
|
||||
// 2C. if the input buffer begins with a prefix of "/../" or "/..",
|
||||
// where ".." is a complete path segment, then replace that prefix
|
||||
// with "/" in the input buffer and if also the output buffer is
|
||||
// empty, last segment in the output buffer equals "../" or "..",
|
||||
// where ".." is a complete path segment, then append ".." or "/.."
|
||||
// for the latter case respectively to the output buffer else
|
||||
// remove the last segment and its preceding "/" (if any) from the
|
||||
// output buffer and if hereby the first character in the output
|
||||
// buffer was removed and it was not the root slash then delete a
|
||||
// leading slash from the input buffer; otherwise,
|
||||
} else if (input.startsWith("/../")) {
|
||||
input = input.substring(3);
|
||||
if (output.length() == 0) {
|
||||
@ -594,7 +591,7 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
} else {
|
||||
int index = output.lastIndexOf("/");
|
||||
if (index == -1) {
|
||||
output = new StringBuffer();
|
||||
output = new StringBuilder();
|
||||
if (input.charAt(0) == '/') {
|
||||
input = input.substring(1);
|
||||
}
|
||||
@ -615,7 +612,7 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
} else {
|
||||
int index = output.lastIndexOf("/");
|
||||
if (index == -1) {
|
||||
output = new StringBuffer();
|
||||
output = new StringBuilder();
|
||||
if (input.charAt(0) == '/') {
|
||||
input = input.substring(1);
|
||||
}
|
||||
@ -624,23 +621,24 @@ public abstract class Canonicalizer11 extends CanonicalizerBase {
|
||||
}
|
||||
}
|
||||
printStep("2C", output.toString(), input);
|
||||
// 2D. if the input buffer consists only of ".", then remove
|
||||
// that from the input buffer else if the input buffer consists
|
||||
// only of ".." and if the output buffer does not contain only
|
||||
// the root slash "/", then move the ".." to the output buffer
|
||||
// else delte it.; otherwise,
|
||||
// 2D. if the input buffer consists only of ".", then remove
|
||||
// that from the input buffer else if the input buffer consists
|
||||
// only of ".." and if the output buffer does not contain only
|
||||
// the root slash "/", then move the ".." to the output buffer
|
||||
// else delte it.; otherwise,
|
||||
} else if (input.equals(".")) {
|
||||
input = "";
|
||||
printStep("2D", output.toString(), input);
|
||||
} else if (input.equals("..")) {
|
||||
if (!output.toString().equals("/"))
|
||||
if (!output.toString().equals("/")) {
|
||||
output.append("..");
|
||||
}
|
||||
input = "";
|
||||
printStep("2D", output.toString(), input);
|
||||
// 2E. move the first path segment (if any) in the input buffer
|
||||
// to the end of the output buffer, including the initial "/"
|
||||
// character (if any) and any subsequent characters up to, but not
|
||||
// including, the next "/" character or the end of the input buffer.
|
||||
// 2E. move the first path segment (if any) in the input buffer
|
||||
// to the end of the output buffer, including the initial "/"
|
||||
// character (if any) and any subsequent characters up to, but not
|
||||
// including, the next "/" character or the end of the input buffer.
|
||||
} else {
|
||||
int end = -1;
|
||||
int begin = input.indexOf('/');
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2008 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2008 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
|
||||
@ -2,26 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@ -47,344 +47,348 @@ import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
|
||||
/**
|
||||
* Implements <A HREF="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">Canonical
|
||||
* XML Version 1.0</A>, a W3C Recommendation from 15 March 2001.
|
||||
*
|
||||
* @author Christian Geuer-Pollmann <geuerp@apache.org>
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public abstract class Canonicalizer20010315 extends CanonicalizerBase {
|
||||
boolean firstCall=true;
|
||||
final SortedSet<Attr> result= new TreeSet<Attr>(COMPARE);
|
||||
static final String XMLNS_URI=Constants.NamespaceSpecNS;
|
||||
static final String XML_LANG_URI=Constants.XML_LANG_SPACE_SpecNS;
|
||||
static class XmlAttrStack {
|
||||
int currentLevel=0;
|
||||
int lastlevel=0;
|
||||
XmlsStackElement cur;
|
||||
private static final String XMLNS_URI = Constants.NamespaceSpecNS;
|
||||
private static final String XML_LANG_URI = Constants.XML_LANG_SPACE_SpecNS;
|
||||
|
||||
private boolean firstCall = true;
|
||||
private final SortedSet<Attr> result = new TreeSet<Attr>(COMPARE);
|
||||
|
||||
private static class XmlAttrStack {
|
||||
static class XmlsStackElement {
|
||||
int level;
|
||||
boolean rendered=false;
|
||||
List<Attr> nodes=new ArrayList<Attr>();
|
||||
int level;
|
||||
boolean rendered = false;
|
||||
List<Attr> nodes = new ArrayList<Attr>();
|
||||
};
|
||||
List<XmlsStackElement> levels=new ArrayList<XmlsStackElement>();
|
||||
|
||||
int currentLevel = 0;
|
||||
int lastlevel = 0;
|
||||
XmlsStackElement cur;
|
||||
List<XmlsStackElement> levels = new ArrayList<XmlsStackElement>();
|
||||
|
||||
void push(int level) {
|
||||
currentLevel=level;
|
||||
if (currentLevel==-1)
|
||||
return;
|
||||
cur=null;
|
||||
while (lastlevel>=currentLevel) {
|
||||
levels.remove(levels.size()-1);
|
||||
if (levels.size()==0) {
|
||||
lastlevel=0;
|
||||
return;
|
||||
}
|
||||
lastlevel=(levels.get(levels.size()-1)).level;
|
||||
currentLevel = level;
|
||||
if (currentLevel == -1) {
|
||||
return;
|
||||
}
|
||||
cur = null;
|
||||
while (lastlevel >= currentLevel) {
|
||||
levels.remove(levels.size() - 1);
|
||||
int newSize = levels.size();
|
||||
if (newSize == 0) {
|
||||
lastlevel = 0;
|
||||
return;
|
||||
}
|
||||
lastlevel = (levels.get(newSize - 1)).level;
|
||||
}
|
||||
}
|
||||
|
||||
void addXmlnsAttr(Attr n) {
|
||||
if (cur==null) {
|
||||
cur=new XmlsStackElement();
|
||||
cur.level=currentLevel;
|
||||
levels.add(cur);
|
||||
lastlevel=currentLevel;
|
||||
}
|
||||
cur.nodes.add(n);
|
||||
if (cur == null) {
|
||||
cur = new XmlsStackElement();
|
||||
cur.level = currentLevel;
|
||||
levels.add(cur);
|
||||
lastlevel = currentLevel;
|
||||
}
|
||||
cur.nodes.add(n);
|
||||
}
|
||||
|
||||
void getXmlnsAttr(Collection<Attr> col) {
|
||||
int size=levels.size()-1;
|
||||
if (cur==null) {
|
||||
cur=new XmlsStackElement();
|
||||
cur.level=currentLevel;
|
||||
lastlevel=currentLevel;
|
||||
levels.add(cur);
|
||||
int size = levels.size() - 1;
|
||||
if (cur == null) {
|
||||
cur = new XmlsStackElement();
|
||||
cur.level = currentLevel;
|
||||
lastlevel = currentLevel;
|
||||
levels.add(cur);
|
||||
}
|
||||
boolean parentRendered = false;
|
||||
XmlsStackElement e = null;
|
||||
if (size == -1) {
|
||||
parentRendered = true;
|
||||
} else {
|
||||
e = levels.get(size);
|
||||
if (e.rendered && e.level + 1 == currentLevel) {
|
||||
parentRendered = true;
|
||||
}
|
||||
boolean parentRendered=false;
|
||||
XmlsStackElement e=null;
|
||||
if (size==-1) {
|
||||
parentRendered=true;
|
||||
} else {
|
||||
e=levels.get(size);
|
||||
if (e.rendered && e.level+1==currentLevel)
|
||||
parentRendered=true;
|
||||
}
|
||||
if (parentRendered) {
|
||||
col.addAll(cur.nodes);
|
||||
cur.rendered = true;
|
||||
return;
|
||||
}
|
||||
|
||||
Map<String, Attr> loa = new HashMap<String, Attr>();
|
||||
for (; size >= 0; size--) {
|
||||
e = levels.get(size);
|
||||
Iterator<Attr> it = e.nodes.iterator();
|
||||
while (it.hasNext()) {
|
||||
Attr n = it.next();
|
||||
if (!loa.containsKey(n.getName())) {
|
||||
loa.put(n.getName(), n);
|
||||
}
|
||||
}
|
||||
if (parentRendered) {
|
||||
col.addAll(cur.nodes);
|
||||
cur.rendered=true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Map<String,Attr> loa = new HashMap<String,Attr>();
|
||||
for (;size>=0;size--) {
|
||||
e=levels.get(size);
|
||||
Iterator<Attr> it=e.nodes.iterator();
|
||||
while (it.hasNext()) {
|
||||
Attr n=it.next();
|
||||
if (!loa.containsKey(n.getName()))
|
||||
loa.put(n.getName(),n);
|
||||
}
|
||||
//if (e.rendered)
|
||||
//break;
|
||||
|
||||
};
|
||||
//cur.nodes.clear();
|
||||
//cur.nodes.addAll(loa.values());
|
||||
cur.rendered=true;
|
||||
col.addAll(loa.values());
|
||||
cur.rendered = true;
|
||||
col.addAll(loa.values());
|
||||
}
|
||||
|
||||
}
|
||||
XmlAttrStack xmlattrStack=new XmlAttrStack();
|
||||
|
||||
private XmlAttrStack xmlattrStack = new XmlAttrStack();
|
||||
|
||||
/**
|
||||
* Constructor Canonicalizer20010315
|
||||
*
|
||||
* @param includeComments
|
||||
*/
|
||||
public Canonicalizer20010315(boolean includeComments) {
|
||||
super(includeComments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be outputted for the given element.
|
||||
* <br>
|
||||
* The code of this method is a copy of {@link #handleAttributes(Element,
|
||||
* NameSpaceSymbTable)},
|
||||
* whereas it takes into account that subtree-c14n is -- well -- subtree-based.
|
||||
* So if the element in question isRoot of c14n, it's parent is not in the
|
||||
* node set, as well as all other ancestors.
|
||||
*
|
||||
* @param E
|
||||
* @param ns
|
||||
* @return the Attr[]s to be outputted
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
Iterator<Attr> handleAttributesSubtree(Element E, NameSpaceSymbTable ns )
|
||||
throws CanonicalizationException {
|
||||
if (!E.hasAttributes() && !firstCall) {
|
||||
return null;
|
||||
}
|
||||
// result will contain the attrs which have to be outputted
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
NamedNodeMap attrs = E.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr) attrs.item(i);
|
||||
String NUri =N.getNamespaceURI();
|
||||
|
||||
if (XMLNS_URI!=NUri) {
|
||||
//It's not a namespace attr node. Add to the result and continue.
|
||||
result.add(N);
|
||||
continue;
|
||||
}
|
||||
|
||||
String NName=N.getLocalName();
|
||||
String NValue=N.getValue();
|
||||
if (XML.equals(NName)
|
||||
&& XML_LANG_URI.equals(NValue)) {
|
||||
//The default mapping for xml must not be output.
|
||||
continue;
|
||||
}
|
||||
|
||||
Node n=ns.addMappingAndRender(NName,NValue,N);
|
||||
|
||||
if (n!=null) {
|
||||
//Render the ns definition
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(N)) {
|
||||
Object exArgs[] = { E.getTagName(), NName, N.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (firstCall) {
|
||||
//It is the first node of the subtree
|
||||
//Obtain all the namespaces defined in the parents, and added to the output.
|
||||
ns.getUnrenderedNodes(getSortedSetAsCollection(result));
|
||||
//output the attributes in the xml namespace.
|
||||
xmlattrStack.getXmlnsAttr(result);
|
||||
firstCall=false;
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be outputted for the given element.
|
||||
* <br>
|
||||
* IMPORTANT: This method expects to work on a modified DOM tree, i.e. a DOM which has
|
||||
* been prepared using {@link com.sun.org.apache.xml.internal.security.utils.XMLUtils#circumventBug2650(
|
||||
* org.w3c.dom.Document)}.
|
||||
*
|
||||
* @param E
|
||||
* @param ns
|
||||
* @return the Attr[]s to be outputted
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
Iterator<Attr> handleAttributes(Element E, NameSpaceSymbTable ns ) throws CanonicalizationException {
|
||||
// result will contain the attrs which have to be outputted
|
||||
xmlattrStack.push(ns.getLevel());
|
||||
boolean isRealVisible=isVisibleDO(E,ns.getLevel())==1;
|
||||
NamedNodeMap attrs = null;
|
||||
int attrsLength = 0;
|
||||
if (E.hasAttributes()) {
|
||||
attrs=E.getAttributes();
|
||||
attrsLength= attrs.getLength();
|
||||
* Constructor Canonicalizer20010315
|
||||
*
|
||||
* @param includeComments
|
||||
*/
|
||||
public Canonicalizer20010315(boolean includeComments) {
|
||||
super(includeComments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Always throws a CanonicalizationException because this is inclusive c14n.
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException always
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
|
||||
SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
/** $todo$ well, should we throw UnsupportedOperationException ? */
|
||||
throw new CanonicalizationException("c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr) attrs.item(i);
|
||||
String NUri =N.getNamespaceURI();
|
||||
/**
|
||||
* Always throws a CanonicalizationException because this is inclusive c14n.
|
||||
*
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
|
||||
if (XMLNS_URI!=NUri) {
|
||||
//A non namespace definition node.
|
||||
if (XML_LANG_URI==NUri) {
|
||||
xmlattrStack.addXmlnsAttr(N);
|
||||
} else if (isRealVisible){
|
||||
//The node is visible add the attribute to the list of output attributes.
|
||||
result.add(N);
|
||||
}
|
||||
//keep working
|
||||
continue;
|
||||
}
|
||||
/** $todo$ well, should we throw UnsupportedOperationException ? */
|
||||
throw new CanonicalizationException("c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
|
||||
String NName=N.getLocalName();
|
||||
String NValue=N.getValue();
|
||||
if ("xml".equals(NName)
|
||||
&& XML_LANG_URI.equals(NValue)) {
|
||||
/* except omit namespace node with local name xml, which defines
|
||||
* the xml prefix, if its string value is http://www.w3.org/XML/1998/namespace.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
//add the prefix binding to the ns symb table.
|
||||
//ns.addInclusiveMapping(NName,NValue,N,isRealVisible);
|
||||
if (isVisible(N)) {
|
||||
if (!isRealVisible && ns.removeMappingIfRender(NName)) {
|
||||
continue;
|
||||
}
|
||||
//The xpath select this node output it if needed.
|
||||
//Node n=ns.addMappingAndRenderXNodeSet(NName,NValue,N,isRealVisible);
|
||||
Node n=ns.addMappingAndRender(NName,NValue,N);
|
||||
if (n!=null) {
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(N)) {
|
||||
Object exArgs[] = { E.getTagName(), NName, N.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isRealVisible && NName!=XMLNS) {
|
||||
ns.removeMapping(NName);
|
||||
} else {
|
||||
ns.addMapping(NName,NValue,N);
|
||||
}
|
||||
/**
|
||||
* Returns the Attr[]s to be output for the given element.
|
||||
* <br>
|
||||
* The code of this method is a copy of {@link #handleAttributes(Element,
|
||||
* NameSpaceSymbTable)},
|
||||
* whereas it takes into account that subtree-c14n is -- well -- subtree-based.
|
||||
* So if the element in question isRoot of c14n, it's parent is not in the
|
||||
* node set, as well as all other ancestors.
|
||||
*
|
||||
* @param element
|
||||
* @param ns
|
||||
* @return the Attr[]s to be output
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@Override
|
||||
protected Iterator<Attr> handleAttributesSubtree(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
if (!element.hasAttributes() && !firstCall) {
|
||||
return null;
|
||||
}
|
||||
// result will contain the attrs which have to be output
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
if (element.hasAttributes()) {
|
||||
NamedNodeMap attrs = element.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
String NUri = attribute.getNamespaceURI();
|
||||
String NName = attribute.getLocalName();
|
||||
String NValue = attribute.getValue();
|
||||
|
||||
if (!XMLNS_URI.equals(NUri)) {
|
||||
//It's not a namespace attr node. Add to the result and continue.
|
||||
result.add(attribute);
|
||||
} else if (!(XML.equals(NName) && XML_LANG_URI.equals(NValue))) {
|
||||
//The default mapping for xml must not be output.
|
||||
Node n = ns.addMappingAndRender(NName, NValue, attribute);
|
||||
|
||||
if (n != null) {
|
||||
//Render the ns definition
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(attribute)) {
|
||||
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (firstCall) {
|
||||
//It is the first node of the subtree
|
||||
//Obtain all the namespaces defined in the parents, and added to the output.
|
||||
ns.getUnrenderedNodes(result);
|
||||
//output the attributes in the xml namespace.
|
||||
xmlattrStack.getXmlnsAttr(result);
|
||||
firstCall = false;
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
if (isRealVisible) {
|
||||
//The element is visible, handle the xmlns definition
|
||||
Attr xmlns = E.getAttributeNodeNS(XMLNS_URI, XMLNS);
|
||||
Node n=null;
|
||||
if (xmlns == null) {
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be output for the given element.
|
||||
* <br>
|
||||
* IMPORTANT: This method expects to work on a modified DOM tree, i.e. a DOM which has
|
||||
* been prepared using {@link com.sun.org.apache.xml.internal.security.utils.XMLUtils#circumventBug2650(
|
||||
* org.w3c.dom.Document)}.
|
||||
*
|
||||
* @param element
|
||||
* @param ns
|
||||
* @return the Attr[]s to be output
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@Override
|
||||
protected Iterator<Attr> handleAttributes(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
// result will contain the attrs which have to be output
|
||||
xmlattrStack.push(ns.getLevel());
|
||||
boolean isRealVisible = isVisibleDO(element, ns.getLevel()) == 1;
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
if (element.hasAttributes()) {
|
||||
NamedNodeMap attrs = element.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
String NUri = attribute.getNamespaceURI();
|
||||
String NName = attribute.getLocalName();
|
||||
String NValue = attribute.getValue();
|
||||
|
||||
if (!XMLNS_URI.equals(NUri)) {
|
||||
//A non namespace definition node.
|
||||
if (XML_LANG_URI.equals(NUri)) {
|
||||
xmlattrStack.addXmlnsAttr(attribute);
|
||||
} else if (isRealVisible) {
|
||||
//The node is visible add the attribute to the list of output attributes.
|
||||
result.add(attribute);
|
||||
}
|
||||
} else if (!XML.equals(NName) || !XML_LANG_URI.equals(NValue)) {
|
||||
/* except omit namespace node with local name xml, which defines
|
||||
* the xml prefix, if its string value is http://www.w3.org/XML/1998/namespace.
|
||||
*/
|
||||
//add the prefix binding to the ns symb table.
|
||||
if (isVisible(attribute)) {
|
||||
if (isRealVisible || !ns.removeMappingIfRender(NName)) {
|
||||
//The xpath select this node output it if needed.
|
||||
Node n = ns.addMappingAndRender(NName, NValue, attribute);
|
||||
if (n != null) {
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(attribute)) {
|
||||
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isRealVisible && !XMLNS.equals(NName)) {
|
||||
ns.removeMapping(NName);
|
||||
} else {
|
||||
ns.addMapping(NName, NValue, attribute);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isRealVisible) {
|
||||
//The element is visible, handle the xmlns definition
|
||||
Attr xmlns = element.getAttributeNodeNS(XMLNS_URI, XMLNS);
|
||||
Node n = null;
|
||||
if (xmlns == null) {
|
||||
//No xmlns def just get the already defined.
|
||||
n=ns.getMapping(XMLNS);
|
||||
} else if ( !isVisible(xmlns)) {
|
||||
n = ns.getMapping(XMLNS);
|
||||
} else if (!isVisible(xmlns)) {
|
||||
//There is a definition but the xmlns is not selected by the xpath.
|
||||
//then xmlns=""
|
||||
n=ns.addMappingAndRender(XMLNS,"",nullNode);
|
||||
n = ns.addMappingAndRender(XMLNS, "", nullNode);
|
||||
}
|
||||
//output the xmlns def if needed.
|
||||
if (n != null) {
|
||||
result.add((Attr)n);
|
||||
}
|
||||
//Float all xml:* attributes of the unselected parent elements to this one.
|
||||
xmlattrStack.getXmlnsAttr(result);
|
||||
ns.getUnrenderedNodes(result);
|
||||
}
|
||||
//output the xmlns def if needed.
|
||||
if (n!=null) {
|
||||
result.add((Attr)n);
|
||||
}
|
||||
//Float all xml:* attributes of the unselected parent elements to this one.
|
||||
//addXmlAttributes(E,result);
|
||||
xmlattrStack.getXmlnsAttr(result);
|
||||
ns.getUnrenderedNodes(getSortedSetAsCollection(result));
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
/**
|
||||
* Always throws a CanonicalizationException because this is inclusive c14n.
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException always
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
protected void circumventBugIfNeeded(XMLSignatureInput input)
|
||||
throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
|
||||
if (!input.isNeedsToBeExpanded()) {
|
||||
return;
|
||||
}
|
||||
Document doc = null;
|
||||
if (input.getSubNode() != null) {
|
||||
doc = XMLUtils.getOwnerDocument(input.getSubNode());
|
||||
} else {
|
||||
doc = XMLUtils.getOwnerDocument(input.getNodeSet());
|
||||
}
|
||||
XMLUtils.circumventBug2650(doc);
|
||||
}
|
||||
|
||||
/** $todo$ well, should we throw UnsupportedOperationException ? */
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
@Override
|
||||
protected void handleParent(Element e, NameSpaceSymbTable ns) {
|
||||
if (!e.hasAttributes() && e.getNamespaceURI() == null) {
|
||||
return;
|
||||
}
|
||||
xmlattrStack.push(-1);
|
||||
NamedNodeMap attrs = e.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
String NName = attribute.getLocalName();
|
||||
String NValue = attribute.getNodeValue();
|
||||
|
||||
/**
|
||||
* Always throws a CanonicalizationException because this is inclusive c14n.
|
||||
*
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
|
||||
/** $todo$ well, should we throw UnsupportedOperationException ? */
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
void circumventBugIfNeeded(XMLSignatureInput input) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
|
||||
if (!input.isNeedsToBeExpanded())
|
||||
return;
|
||||
Document doc = null;
|
||||
if (input.getSubNode() != null) {
|
||||
doc=XMLUtils.getOwnerDocument(input.getSubNode());
|
||||
} else {
|
||||
doc=XMLUtils.getOwnerDocument(input.getNodeSet());
|
||||
}
|
||||
XMLUtils.circumventBug2650(doc);
|
||||
|
||||
}
|
||||
|
||||
void handleParent(Element e, NameSpaceSymbTable ns) {
|
||||
if (!e.hasAttributes()) {
|
||||
return;
|
||||
}
|
||||
xmlattrStack.push(-1);
|
||||
NamedNodeMap attrs = e.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr) attrs.item(i);
|
||||
if (Constants.NamespaceSpecNS!=N.getNamespaceURI()) {
|
||||
//Not a namespace definition, ignore.
|
||||
if (XML_LANG_URI==N.getNamespaceURI()) {
|
||||
xmlattrStack.addXmlnsAttr(N);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
String NName=N.getLocalName();
|
||||
String NValue=N.getNodeValue();
|
||||
if (XML.equals(NName)
|
||||
&& Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
|
||||
continue;
|
||||
}
|
||||
ns.addMapping(NName,NValue,N);
|
||||
}
|
||||
}
|
||||
if (Constants.NamespaceSpecNS.equals(attribute.getNamespaceURI())) {
|
||||
if (!XML.equals(NName) || !Constants.XML_LANG_SPACE_SpecNS.equals(NValue)) {
|
||||
ns.addMapping(NName, NValue, attribute);
|
||||
}
|
||||
} else if (XML_LANG_URI.equals(attribute.getNamespaceURI())) {
|
||||
xmlattrStack.addXmlnsAttr(attribute);
|
||||
}
|
||||
}
|
||||
if (e.getNamespaceURI() != null) {
|
||||
String NName = e.getPrefix();
|
||||
String NValue = e.getNamespaceURI();
|
||||
String Name;
|
||||
if (NName == null || NName.equals("")) {
|
||||
NName = "xmlns";
|
||||
Name = "xmlns";
|
||||
} else {
|
||||
Name = "xmlns:" + NName;
|
||||
}
|
||||
Attr n = e.getOwnerDocument().createAttributeNS("http://www.w3.org/2000/xmlns/", Name);
|
||||
n.setValue(NValue);
|
||||
ns.addMapping(NName, NValue, n);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
@ -25,7 +27,6 @@ import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
|
||||
@ -40,6 +41,7 @@ import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* Implements " <A
|
||||
* HREF="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/">Exclusive XML
|
||||
@ -52,301 +54,279 @@ import org.xml.sax.SAXException;
|
||||
* <i>THIS </i> implementation is a complete rewrite of the algorithm.
|
||||
*
|
||||
* @author Christian Geuer-Pollmann <geuerp@apache.org>
|
||||
* @version $Revision: 1.5 $
|
||||
* @version $Revision: 1147448 $
|
||||
* @see <a href="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/ Exclusive#">
|
||||
* XML Canonicalization, Version 1.0</a>
|
||||
*/
|
||||
public abstract class Canonicalizer20010315Excl extends CanonicalizerBase {
|
||||
|
||||
private static final String XML_LANG_URI = Constants.XML_LANG_SPACE_SpecNS;
|
||||
private static final String XMLNS_URI = Constants.NamespaceSpecNS;
|
||||
|
||||
/**
|
||||
* This Set contains the names (Strings like "xmlns" or "xmlns:foo") of
|
||||
* the inclusive namespaces.
|
||||
*/
|
||||
TreeSet<String> _inclusiveNSSet = new TreeSet<String>();
|
||||
static final String XMLNS_URI=Constants.NamespaceSpecNS;
|
||||
final SortedSet<Attr> result = new TreeSet<Attr>(COMPARE);
|
||||
/**
|
||||
* Constructor Canonicalizer20010315Excl
|
||||
*
|
||||
* @param includeComments
|
||||
*/
|
||||
public Canonicalizer20010315Excl(boolean includeComments) {
|
||||
super(includeComments);
|
||||
}
|
||||
private SortedSet<String> inclusiveNSSet;
|
||||
|
||||
/**
|
||||
* Method engineCanonicalizeSubTree
|
||||
* @inheritDoc
|
||||
* @param rootNode
|
||||
*
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode)
|
||||
throws CanonicalizationException {
|
||||
return this.engineCanonicalizeSubTree(rootNode, "",null);
|
||||
}
|
||||
/**
|
||||
* Method engineCanonicalizeSubTree
|
||||
* @inheritDoc
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
*
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode,
|
||||
String inclusiveNamespaces) throws CanonicalizationException {
|
||||
return this.engineCanonicalizeSubTree(rootNode, inclusiveNamespaces,null);
|
||||
}
|
||||
/**
|
||||
* Method engineCanonicalizeSubTree
|
||||
* @param rootNode
|
||||
private final SortedSet<Attr> result = new TreeSet<Attr>(COMPARE);
|
||||
|
||||
/**
|
||||
* Constructor Canonicalizer20010315Excl
|
||||
*
|
||||
* @param includeComments
|
||||
*/
|
||||
public Canonicalizer20010315Excl(boolean includeComments) {
|
||||
super(includeComments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method engineCanonicalizeSubTree
|
||||
* @inheritDoc
|
||||
* @param rootNode
|
||||
*
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode)
|
||||
throws CanonicalizationException {
|
||||
return engineCanonicalizeSubTree(rootNode, "", null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method engineCanonicalizeSubTree
|
||||
* @inheritDoc
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
*
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(
|
||||
Node rootNode, String inclusiveNamespaces
|
||||
) throws CanonicalizationException {
|
||||
return engineCanonicalizeSubTree(rootNode, inclusiveNamespaces, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method engineCanonicalizeSubTree
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @param excl A element to exclude from the c14n process.
|
||||
* @return the rootNode c14n.
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode,
|
||||
String inclusiveNamespaces,Node excl) throws CanonicalizationException {
|
||||
this._inclusiveNSSet = getInclusiveNameSpace(inclusiveNamespaces);
|
||||
return super.engineCanonicalizeSubTree(rootNode,excl);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @return the rootNode c14n.
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public byte[] engineCanonicalize(XMLSignatureInput rootNode,
|
||||
String inclusiveNamespaces) throws CanonicalizationException {
|
||||
this._inclusiveNSSet = getInclusiveNameSpace(inclusiveNamespaces);
|
||||
return super.engineCanonicalize(rootNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method handleAttributesSubtree
|
||||
* @inheritDoc
|
||||
* @param E
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
Iterator<Attr> handleAttributesSubtree(Element E,NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
// System.out.println("During the traversal, I encountered " +
|
||||
// XMLUtils.getXPath(E));
|
||||
// result will contain the attrs which have to be outputted
|
||||
SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
NamedNodeMap attrs=null;
|
||||
|
||||
int attrsLength = 0;
|
||||
if (E.hasAttributes()) {
|
||||
attrs = E.getAttributes();
|
||||
attrsLength = attrs.getLength();
|
||||
}
|
||||
//The prefix visibly utilized(in the attribute or in the name) in the element
|
||||
SortedSet<String> visiblyUtilized = getNSSetClone();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr) attrs.item(i);
|
||||
|
||||
if (XMLNS_URI!=N.getNamespaceURI()) {
|
||||
//Not a namespace definition.
|
||||
//The Element is output element, add his prefix(if used) to visibyUtilized
|
||||
String prefix = N.getPrefix();
|
||||
if ( (prefix != null) && (!prefix.equals(XML) && !prefix.equals(XMLNS)) ) {
|
||||
visiblyUtilized.add(prefix);
|
||||
}
|
||||
//Add to the result.
|
||||
result.add(N);
|
||||
continue;
|
||||
}
|
||||
String NName=N.getLocalName();
|
||||
String NNodeValue=N.getNodeValue();
|
||||
|
||||
if (ns.addMapping(NName, NNodeValue,N)) {
|
||||
//New definition check if it is relative.
|
||||
if (C14nHelper.namespaceIsRelative(NNodeValue)) {
|
||||
Object exArgs[] = {E.getTagName(), NName,
|
||||
N.getNodeValue()};
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
String prefix;
|
||||
if (E.getNamespaceURI() != null) {
|
||||
prefix = E.getPrefix();
|
||||
if ((prefix == null) || (prefix.length() == 0)) {
|
||||
prefix=XMLNS;
|
||||
}
|
||||
|
||||
} else {
|
||||
prefix=XMLNS;
|
||||
}
|
||||
visiblyUtilized.add(prefix);
|
||||
|
||||
//This can be optimezed by I don't have time
|
||||
Iterator<String> it=visiblyUtilized.iterator();
|
||||
while (it.hasNext()) {
|
||||
String s=it.next();
|
||||
Attr key=ns.getMapping(s);
|
||||
if (key==null) {
|
||||
continue;
|
||||
}
|
||||
result.add(key);
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method engineCanonicalizeXPathNodeSet
|
||||
* @inheritDoc
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet,
|
||||
String inclusiveNamespaces) throws CanonicalizationException {
|
||||
|
||||
this._inclusiveNSSet = getInclusiveNameSpace(inclusiveNamespaces);
|
||||
return super.engineCanonicalizeXPathNodeSet(xpathNodeSet);
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private TreeSet<String> getInclusiveNameSpace(String inclusiveNameSpaces) {
|
||||
return (TreeSet<String>)InclusiveNamespaces.prefixStr2Set(inclusiveNameSpaces);
|
||||
* @return the rootNode c14n.
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(
|
||||
Node rootNode, String inclusiveNamespaces, Node excl
|
||||
) throws CanonicalizationException{
|
||||
inclusiveNSSet = InclusiveNamespaces.prefixStr2Set(inclusiveNamespaces);
|
||||
return super.engineCanonicalizeSubTree(rootNode, excl);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private SortedSet<String> getNSSetClone() {
|
||||
return (SortedSet<String>) this._inclusiveNSSet.clone();
|
||||
/**
|
||||
*
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @return the rootNode c14n.
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalize(
|
||||
XMLSignatureInput rootNode, String inclusiveNamespaces
|
||||
) throws CanonicalizationException {
|
||||
inclusiveNSSet = InclusiveNamespaces.prefixStr2Set(inclusiveNamespaces);
|
||||
return super.engineCanonicalize(rootNode);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* Method engineCanonicalizeXPathNodeSet
|
||||
* @inheritDoc
|
||||
* @param E
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
final Iterator<Attr> handleAttributes(Element E, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
// result will contain the attrs which have to be outputted
|
||||
SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
NamedNodeMap attrs = null;
|
||||
int attrsLength = 0;
|
||||
if (E.hasAttributes()) {
|
||||
attrs = E.getAttributes();
|
||||
attrsLength = attrs.getLength();
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(
|
||||
Set<Node> xpathNodeSet, String inclusiveNamespaces
|
||||
) throws CanonicalizationException {
|
||||
inclusiveNSSet = InclusiveNamespaces.prefixStr2Set(inclusiveNamespaces);
|
||||
return super.engineCanonicalizeXPathNodeSet(xpathNodeSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Iterator<Attr> handleAttributesSubtree(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
// result will contain the attrs which have to be output
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
// The prefix visibly utilized (in the attribute or in the name) in
|
||||
// the element
|
||||
SortedSet<String> visiblyUtilized = new TreeSet<String>();
|
||||
if (inclusiveNSSet != null && !inclusiveNSSet.isEmpty()) {
|
||||
visiblyUtilized.addAll(inclusiveNSSet);
|
||||
}
|
||||
//The prefix visibly utilized(in the attribute or in the name) in the element
|
||||
Set<String> visiblyUtilized =null;
|
||||
//It's the output selected.
|
||||
boolean isOutputElement=isVisibleDO(E,ns.getLevel())==1;
|
||||
if (isOutputElement) {
|
||||
visiblyUtilized = getNSSetClone();
|
||||
}
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr N = (Attr) attrs.item(i);
|
||||
if (element.hasAttributes()) {
|
||||
NamedNodeMap attrs = element.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
String NName = attribute.getLocalName();
|
||||
String NNodeValue = attribute.getNodeValue();
|
||||
|
||||
|
||||
if (XMLNS_URI!=N.getNamespaceURI()) {
|
||||
if ( !isVisible(N) ) {
|
||||
//The node is not in the nodeset(if there is a nodeset)
|
||||
continue;
|
||||
}
|
||||
//Not a namespace definition.
|
||||
if (isOutputElement) {
|
||||
//The Element is output element, add his prefix(if used) to visibyUtilized
|
||||
String prefix = N.getPrefix();
|
||||
if ((prefix != null) && (!prefix.equals(XML) && !prefix.equals(XMLNS)) ){
|
||||
visiblyUtilized.add(prefix);
|
||||
}
|
||||
//Add to the result.
|
||||
result.add(N);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
String NName=N.getLocalName();
|
||||
if (isOutputElement && !isVisible(N) && NName!=XMLNS) {
|
||||
ns.removeMappingIfNotRender(NName);
|
||||
continue;
|
||||
}
|
||||
String NNodeValue=N.getNodeValue();
|
||||
|
||||
if (!isOutputElement && isVisible(N) && _inclusiveNSSet.contains(NName) && !ns.removeMappingIfRender(NName)) {
|
||||
Node n=ns.addMappingAndRender(NName,NNodeValue,N);
|
||||
if (n!=null) {
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(N)) {
|
||||
Object exArgs[] = { E.getTagName(), NName, N.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (ns.addMapping(NName, NNodeValue,N)) {
|
||||
//New definiton check if it is relative
|
||||
if (C14nHelper.namespaceIsRelative(NNodeValue)) {
|
||||
Object exArgs[] = {E.getTagName(), NName,
|
||||
N.getNodeValue()};
|
||||
if (!XMLNS_URI.equals(attribute.getNamespaceURI())) {
|
||||
// Not a namespace definition.
|
||||
// The Element is output element, add the prefix (if used) to
|
||||
// visiblyUtilized
|
||||
String prefix = attribute.getPrefix();
|
||||
if (prefix != null && !(prefix.equals(XML) || prefix.equals(XMLNS))) {
|
||||
visiblyUtilized.add(prefix);
|
||||
}
|
||||
// Add to the result.
|
||||
result.add(attribute);
|
||||
} else if (!(XML.equals(NName) && XML_LANG_URI.equals(NNodeValue))
|
||||
&& ns.addMapping(NName, NNodeValue, attribute)
|
||||
&& C14nHelper.namespaceIsRelative(NNodeValue)) {
|
||||
// The default mapping for xml must not be output.
|
||||
// New definition check if it is relative.
|
||||
Object exArgs[] = {element.getTagName(), NName, attribute.getNodeValue()};
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs);
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isOutputElement) {
|
||||
//The element is visible, handle the xmlns definition
|
||||
Attr xmlns = E.getAttributeNodeNS(XMLNS_URI, XMLNS);
|
||||
if ((xmlns!=null) && (!isVisible(xmlns))) {
|
||||
//There is a definition but the xmlns is not selected by the xpath.
|
||||
//then xmlns=""
|
||||
ns.addMapping(XMLNS,"",nullNode);
|
||||
}
|
||||
|
||||
if (E.getNamespaceURI() != null) {
|
||||
String prefix = E.getPrefix();
|
||||
if ((prefix == null) || (prefix.length() == 0)) {
|
||||
visiblyUtilized.add(XMLNS);
|
||||
} else {
|
||||
visiblyUtilized.add( prefix);
|
||||
}
|
||||
} else {
|
||||
visiblyUtilized.add(XMLNS);
|
||||
}
|
||||
//This can be optimezed by I don't have time
|
||||
//visiblyUtilized.addAll(this._inclusiveNSSet);
|
||||
Iterator<String> it=visiblyUtilized.iterator();
|
||||
while (it.hasNext()) {
|
||||
String s=it.next();
|
||||
Attr key=ns.getMapping(s);
|
||||
if (key==null) {
|
||||
continue;
|
||||
}
|
||||
result.add(key);
|
||||
}
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
void circumventBugIfNeeded(XMLSignatureInput input) throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
|
||||
if (!input.isNeedsToBeExpanded() || _inclusiveNSSet.isEmpty())
|
||||
return;
|
||||
Document doc = null;
|
||||
if (input.getSubNode() != null) {
|
||||
doc=XMLUtils.getOwnerDocument(input.getSubNode());
|
||||
} else {
|
||||
doc=XMLUtils.getOwnerDocument(input.getNodeSet());
|
||||
}
|
||||
String prefix = null;
|
||||
if (element.getNamespaceURI() != null
|
||||
&& !(element.getPrefix() == null || element.getPrefix().length() == 0)) {
|
||||
prefix = element.getPrefix();
|
||||
} else {
|
||||
prefix = XMLNS;
|
||||
}
|
||||
visiblyUtilized.add(prefix);
|
||||
|
||||
XMLUtils.circumventBug2650(doc);
|
||||
}
|
||||
for (String s : visiblyUtilized) {
|
||||
Attr key = ns.getMapping(s);
|
||||
if (key != null) {
|
||||
result.add(key);
|
||||
}
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param element
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@Override
|
||||
protected final Iterator<Attr> handleAttributes(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
// result will contain the attrs which have to be output
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
// The prefix visibly utilized (in the attribute or in the name) in
|
||||
// the element
|
||||
Set<String> visiblyUtilized = null;
|
||||
// It's the output selected.
|
||||
boolean isOutputElement = isVisibleDO(element, ns.getLevel()) == 1;
|
||||
if (isOutputElement) {
|
||||
visiblyUtilized = new TreeSet<String>();
|
||||
if (inclusiveNSSet != null && !inclusiveNSSet.isEmpty()) {
|
||||
visiblyUtilized.addAll(inclusiveNSSet);
|
||||
}
|
||||
}
|
||||
|
||||
if (element.hasAttributes()) {
|
||||
NamedNodeMap attrs = element.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
|
||||
String NName = attribute.getLocalName();
|
||||
String NNodeValue = attribute.getNodeValue();
|
||||
|
||||
if (!XMLNS_URI.equals(attribute.getNamespaceURI())) {
|
||||
if (isVisible(attribute) && isOutputElement) {
|
||||
// The Element is output element, add the prefix (if used)
|
||||
// to visibyUtilized
|
||||
String prefix = attribute.getPrefix();
|
||||
if (prefix != null && !(prefix.equals(XML) || prefix.equals(XMLNS))) {
|
||||
visiblyUtilized.add(prefix);
|
||||
}
|
||||
// Add to the result.
|
||||
result.add(attribute);
|
||||
}
|
||||
} else if (isOutputElement && !isVisible(attribute) && !XMLNS.equals(NName)) {
|
||||
ns.removeMappingIfNotRender(NName);
|
||||
} else {
|
||||
if (!isOutputElement && isVisible(attribute)
|
||||
&& inclusiveNSSet.contains(NName)
|
||||
&& !ns.removeMappingIfRender(NName)) {
|
||||
Node n = ns.addMappingAndRender(NName, NNodeValue, attribute);
|
||||
if (n != null) {
|
||||
result.add((Attr)n);
|
||||
if (C14nHelper.namespaceIsRelative(attribute)) {
|
||||
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ns.addMapping(NName, NNodeValue, attribute)
|
||||
&& C14nHelper.namespaceIsRelative(NNodeValue)) {
|
||||
// New definition check if it is relative
|
||||
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
||||
throw new CanonicalizationException(
|
||||
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isOutputElement) {
|
||||
// The element is visible, handle the xmlns definition
|
||||
Attr xmlns = element.getAttributeNodeNS(XMLNS_URI, XMLNS);
|
||||
if (xmlns != null && !isVisible(xmlns)) {
|
||||
// There is a definition but the xmlns is not selected by the
|
||||
// xpath. then xmlns=""
|
||||
ns.addMapping(XMLNS, "", nullNode);
|
||||
}
|
||||
|
||||
String prefix = null;
|
||||
if (element.getNamespaceURI() != null
|
||||
&& !(element.getPrefix() == null || element.getPrefix().length() == 0)) {
|
||||
prefix = element.getPrefix();
|
||||
} else {
|
||||
prefix = XMLNS;
|
||||
}
|
||||
visiblyUtilized.add(prefix);
|
||||
|
||||
for (String s : visiblyUtilized) {
|
||||
Attr key = ns.getMapping(s);
|
||||
if (key != null) {
|
||||
result.add(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
protected void circumventBugIfNeeded(XMLSignatureInput input)
|
||||
throws CanonicalizationException, ParserConfigurationException,
|
||||
IOException, SAXException {
|
||||
if (!input.isNeedsToBeExpanded() || inclusiveNSSet.isEmpty() || inclusiveNSSet.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Document doc = null;
|
||||
if (input.getSubNode() != null) {
|
||||
doc = XMLUtils.getOwnerDocument(input.getSubNode());
|
||||
} else {
|
||||
doc = XMLUtils.getOwnerDocument(input.getNodeSet());
|
||||
}
|
||||
XMLUtils.circumventBug2650(doc);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,48 +2,44 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class Canonicalizer20010315ExclOmitComments
|
||||
extends Canonicalizer20010315Excl {
|
||||
public class Canonicalizer20010315ExclOmitComments extends Canonicalizer20010315Excl {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Canonicalizer20010315ExclOmitComments() {
|
||||
super(false);
|
||||
}
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Canonicalizer20010315ExclOmitComments() {
|
||||
super(false);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return false;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,52 +2,48 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
|
||||
|
||||
|
||||
/**
|
||||
* Class Canonicalizer20010315ExclWithComments
|
||||
*
|
||||
* @version $Revision: 1.5 $
|
||||
*/
|
||||
public class Canonicalizer20010315ExclWithComments
|
||||
extends Canonicalizer20010315Excl {
|
||||
public class Canonicalizer20010315ExclWithComments extends Canonicalizer20010315Excl {
|
||||
|
||||
/**
|
||||
* Constructor Canonicalizer20010315ExclWithComments
|
||||
*
|
||||
*/
|
||||
public Canonicalizer20010315ExclWithComments() {
|
||||
super(true);
|
||||
}
|
||||
/**
|
||||
* Constructor Canonicalizer20010315ExclWithComments
|
||||
*
|
||||
*/
|
||||
public Canonicalizer20010315ExclWithComments() {
|
||||
super(true);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_EXCL_WITH_COMMENTS;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_EXCL_WITH_COMMENTS;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return true;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,50 +2,48 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Christian Geuer-Pollmann
|
||||
*/
|
||||
public class Canonicalizer20010315OmitComments extends Canonicalizer20010315 {
|
||||
|
||||
/**
|
||||
* Constructor Canonicalizer20010315WithXPathOmitComments
|
||||
*
|
||||
*/
|
||||
public Canonicalizer20010315OmitComments() {
|
||||
super(false);
|
||||
}
|
||||
/**
|
||||
* Constructor Canonicalizer20010315WithXPathOmitComments
|
||||
*
|
||||
*/
|
||||
public Canonicalizer20010315OmitComments() {
|
||||
super(false);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return false;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,47 +2,47 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Christian Geuer-Pollmann
|
||||
*/
|
||||
public class Canonicalizer20010315WithComments extends Canonicalizer20010315 {
|
||||
|
||||
/**
|
||||
* Constructor Canonicalizer20010315WithXPathWithComments
|
||||
*
|
||||
*/
|
||||
public Canonicalizer20010315WithComments() {
|
||||
super(true);
|
||||
}
|
||||
/**
|
||||
* Constructor Canonicalizer20010315WithXPathWithComments
|
||||
*/
|
||||
public Canonicalizer20010315WithComments() {
|
||||
super(true);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return true;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,184 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
|
||||
import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
|
||||
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Comment;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.ProcessingInstruction;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* Serializes the physical representation of the subtree. All the attributes
|
||||
* present in the subtree are emitted. The attributes are sorted within an element,
|
||||
* with the namespace declarations appearing before the regular attributes.
|
||||
* This algorithm is not a true canonicalization since equivalent subtrees
|
||||
* may produce different output. It is therefore unsuitable for digital signatures.
|
||||
* This same property makes it ideal for XML Encryption Syntax and Processing,
|
||||
* because the decrypted XML content will share the same physical representation
|
||||
* as the original XML content that was encrypted.
|
||||
*/
|
||||
public class CanonicalizerPhysical extends CanonicalizerBase {
|
||||
|
||||
private final SortedSet<Attr> result = new TreeSet<Attr>(COMPARE);
|
||||
|
||||
/**
|
||||
* Constructor Canonicalizer20010315
|
||||
*/
|
||||
public CanonicalizerPhysical() {
|
||||
super(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Always throws a CanonicalizationException.
|
||||
*
|
||||
* @param xpathNodeSet
|
||||
* @param inclusiveNamespaces
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException always
|
||||
*/
|
||||
public byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
|
||||
/** $todo$ well, should we throw UnsupportedOperationException ? */
|
||||
throw new CanonicalizationException("c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
|
||||
/**
|
||||
* Always throws a CanonicalizationException.
|
||||
*
|
||||
* @param rootNode
|
||||
* @param inclusiveNamespaces
|
||||
* @return none it always fails
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
public byte[] engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces)
|
||||
throws CanonicalizationException {
|
||||
|
||||
/** $todo$ well, should we throw UnsupportedOperationException ? */
|
||||
throw new CanonicalizationException("c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be output for the given element.
|
||||
* <br>
|
||||
* The code of this method is a copy of {@link #handleAttributes(Element,
|
||||
* NameSpaceSymbTable)},
|
||||
* whereas it takes into account that subtree-c14n is -- well -- subtree-based.
|
||||
* So if the element in question isRoot of c14n, it's parent is not in the
|
||||
* node set, as well as all other ancestors.
|
||||
*
|
||||
* @param element
|
||||
* @param ns
|
||||
* @return the Attr[]s to be output
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@Override
|
||||
protected Iterator<Attr> handleAttributesSubtree(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
if (!element.hasAttributes()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// result will contain all the attrs declared directly on that element
|
||||
final SortedSet<Attr> result = this.result;
|
||||
result.clear();
|
||||
|
||||
if (element.hasAttributes()) {
|
||||
NamedNodeMap attrs = element.getAttributes();
|
||||
int attrsLength = attrs.getLength();
|
||||
|
||||
for (int i = 0; i < attrsLength; i++) {
|
||||
Attr attribute = (Attr) attrs.item(i);
|
||||
result.add(attribute);
|
||||
}
|
||||
}
|
||||
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Attr[]s to be output for the given element.
|
||||
*
|
||||
* @param element
|
||||
* @param ns
|
||||
* @return the Attr[]s to be output
|
||||
* @throws CanonicalizationException
|
||||
*/
|
||||
@Override
|
||||
protected Iterator<Attr> handleAttributes(Element element, NameSpaceSymbTable ns)
|
||||
throws CanonicalizationException {
|
||||
|
||||
/** $todo$ well, should we throw UnsupportedOperationException ? */
|
||||
throw new CanonicalizationException("c14n.Canonicalizer.UnsupportedOperation");
|
||||
}
|
||||
|
||||
protected void circumventBugIfNeeded(XMLSignatureInput input)
|
||||
throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleParent(Element e, NameSpaceSymbTable ns) {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final String engineGetURI() {
|
||||
return Canonicalizer.ALGO_ID_C14N_PHYSICAL;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public final boolean engineGetIncludeComments() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void outputPItoWriter(ProcessingInstruction currentPI,
|
||||
OutputStream writer, int position) throws IOException {
|
||||
// Processing Instructions before or after the document element are not treated specially
|
||||
super.outputPItoWriter(currentPI, writer, NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void outputCommentToWriter(Comment currentComment,
|
||||
OutputStream writer, int position) throws IOException {
|
||||
// Comments before or after the document element are not treated specially
|
||||
super.outputCommentToWriter(currentComment, writer, NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT);
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
@ -29,191 +31,185 @@ import java.util.List;
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* A stack based Symble Table.
|
||||
* A stack based Symbol Table.
|
||||
*<br>For speed reasons all the symbols are introduced in the same map,
|
||||
* and at the same time in a list so it can be removed when the frame is pop back.
|
||||
* @author Raul Benito
|
||||
**/
|
||||
*/
|
||||
public class NameSpaceSymbTable {
|
||||
|
||||
/**The map betwen prefix-> entry table. */
|
||||
SymbMap symb;
|
||||
/**The level of nameSpaces (for Inclusive visibility).*/
|
||||
int nameSpaces=0;
|
||||
/**The stacks for removing the definitions when doing pop.*/
|
||||
List<SymbMap> level;
|
||||
boolean cloned=true;
|
||||
static final String XMLNS="xmlns";
|
||||
final static SymbMap initialMap=new SymbMap();
|
||||
static {
|
||||
NameSpaceSymbEntry ne=new NameSpaceSymbEntry("",null,true,XMLNS);
|
||||
ne.lastrendered="";
|
||||
initialMap.put(XMLNS,ne);
|
||||
}
|
||||
private static final String XMLNS = "xmlns";
|
||||
private static final SymbMap initialMap = new SymbMap();
|
||||
|
||||
static {
|
||||
NameSpaceSymbEntry ne = new NameSpaceSymbEntry("", null, true, XMLNS);
|
||||
ne.lastrendered = "";
|
||||
initialMap.put(XMLNS, ne);
|
||||
}
|
||||
|
||||
/**The map betwen prefix-> entry table. */
|
||||
private SymbMap symb;
|
||||
|
||||
/**The stacks for removing the definitions when doing pop.*/
|
||||
private List<SymbMap> level;
|
||||
private boolean cloned = true;
|
||||
|
||||
/**
|
||||
* Default constractor
|
||||
**/
|
||||
public NameSpaceSymbTable() {
|
||||
level = new ArrayList<SymbMap>(10);
|
||||
level = new ArrayList<SymbMap>();
|
||||
//Insert the default binding for xmlns.
|
||||
symb=(SymbMap) initialMap.clone();
|
||||
symb = (SymbMap) initialMap.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the unrendered nodes in the name space.
|
||||
* For Inclusive rendering
|
||||
* Get all the unrendered nodes in the name space.
|
||||
* For Inclusive rendering
|
||||
* @param result the list where to fill the unrendered xmlns definitions.
|
||||
**/
|
||||
public void getUnrenderedNodes(Collection<Attr> result) {
|
||||
//List result=new ArrayList();
|
||||
Iterator<NameSpaceSymbEntry> it=symb.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
NameSpaceSymbEntry n= it.next();
|
||||
//put them rendered?
|
||||
if ((!n.rendered) && (n.n!=null)) {
|
||||
n=(NameSpaceSymbEntry) n.clone();
|
||||
**/
|
||||
public void getUnrenderedNodes(Collection<Attr> result) {
|
||||
Iterator<NameSpaceSymbEntry> it = symb.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
NameSpaceSymbEntry n = it.next();
|
||||
//put them rendered?
|
||||
if ((!n.rendered) && (n.n != null)) {
|
||||
n = (NameSpaceSymbEntry) n.clone();
|
||||
needsClone();
|
||||
symb.put(n.prefix,n);
|
||||
n.lastrendered=n.uri;
|
||||
n.rendered=true;
|
||||
symb.put(n.prefix, n);
|
||||
n.lastrendered = n.uri;
|
||||
n.rendered = true;
|
||||
|
||||
result.add(n.n);
|
||||
|
||||
}
|
||||
}
|
||||
result.add(n.n);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Push a frame for visible namespace.
|
||||
* For Inclusive rendering.
|
||||
**/
|
||||
public void outputNodePush() {
|
||||
nameSpaces++;
|
||||
push();
|
||||
}
|
||||
public void outputNodePush() {
|
||||
push();
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Pop a frame for visible namespace.
|
||||
**/
|
||||
public void outputNodePop() {
|
||||
nameSpaces--;
|
||||
pop();
|
||||
}
|
||||
public void outputNodePop() {
|
||||
pop();
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Push a frame for a node.
|
||||
* Inclusive or Exclusive.
|
||||
**/
|
||||
public void push() {
|
||||
//Put the number of namespace definitions in the stack.
|
||||
public void push() {
|
||||
//Put the number of namespace definitions in the stack.
|
||||
level.add(null);
|
||||
cloned=false;
|
||||
}
|
||||
cloned = false;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Pop a frame.
|
||||
* Inclusive or Exclusive.
|
||||
**/
|
||||
public void pop() {
|
||||
int size=level.size()-1;
|
||||
Object ob= level.remove(size);
|
||||
if (ob!=null) {
|
||||
symb=(SymbMap)ob;
|
||||
if (size==0) {
|
||||
cloned=false;
|
||||
} else
|
||||
cloned=(level.get(size-1)!=symb);
|
||||
public void pop() {
|
||||
int size = level.size() - 1;
|
||||
Object ob = level.remove(size);
|
||||
if (ob != null) {
|
||||
symb = (SymbMap)ob;
|
||||
if (size == 0) {
|
||||
cloned = false;
|
||||
} else {
|
||||
cloned = (level.get(size - 1) != symb);
|
||||
}
|
||||
} else {
|
||||
cloned=false;
|
||||
cloned = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
final void needsClone() {
|
||||
if (!cloned) {
|
||||
level.set(level.size()-1,symb);
|
||||
symb=(SymbMap) symb.clone();
|
||||
cloned=true;
|
||||
final void needsClone() {
|
||||
if (!cloned) {
|
||||
level.set(level.size() - 1, symb);
|
||||
symb = (SymbMap) symb.clone();
|
||||
cloned = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the attribute node that defines the binding for the prefix.
|
||||
/**
|
||||
* Gets the attribute node that defines the binding for the prefix.
|
||||
* @param prefix the prefix to obtain the attribute.
|
||||
* @return null if there is no need to render the prefix. Otherwise the node of
|
||||
* definition.
|
||||
**/
|
||||
public Attr getMapping(String prefix) {
|
||||
NameSpaceSymbEntry entry=symb.get(prefix);
|
||||
if (entry==null) {
|
||||
//There is no definition for the prefix(a bug?).
|
||||
return null;
|
||||
}
|
||||
if (entry.rendered) {
|
||||
//No need to render an entry already rendered.
|
||||
return null;
|
||||
}
|
||||
// Mark this entry as render.
|
||||
entry=(NameSpaceSymbEntry) entry.clone();
|
||||
needsClone();
|
||||
symb.put(prefix,entry);
|
||||
entry.rendered=true;
|
||||
entry.level=nameSpaces;
|
||||
entry.lastrendered=entry.uri;
|
||||
// Return the node for outputing.
|
||||
return entry.n;
|
||||
public Attr getMapping(String prefix) {
|
||||
NameSpaceSymbEntry entry = symb.get(prefix);
|
||||
if (entry == null) {
|
||||
//There is no definition for the prefix(a bug?).
|
||||
return null;
|
||||
}
|
||||
if (entry.rendered) {
|
||||
//No need to render an entry already rendered.
|
||||
return null;
|
||||
}
|
||||
// Mark this entry as render.
|
||||
entry = (NameSpaceSymbEntry) entry.clone();
|
||||
needsClone();
|
||||
symb.put(prefix, entry);
|
||||
entry.rendered = true;
|
||||
entry.lastrendered = entry.uri;
|
||||
// Return the node for outputing.
|
||||
return entry.n;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Gets a definition without mark it as render.
|
||||
* For render in exclusive c14n the namespaces in the include prefixes.
|
||||
* @param prefix The prefix whose definition is neaded.
|
||||
* @return the attr to render, null if there is no need to render
|
||||
**/
|
||||
public Attr getMappingWithoutRendered(String prefix) {
|
||||
NameSpaceSymbEntry entry= symb.get(prefix);
|
||||
if (entry==null) {
|
||||
return null;
|
||||
}
|
||||
if (entry.rendered) {
|
||||
return null;
|
||||
}
|
||||
return entry.n;
|
||||
public Attr getMappingWithoutRendered(String prefix) {
|
||||
NameSpaceSymbEntry entry = symb.get(prefix);
|
||||
if (entry == null) {
|
||||
return null;
|
||||
}
|
||||
if (entry.rendered) {
|
||||
return null;
|
||||
}
|
||||
return entry.n;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Adds the mapping for a prefix.
|
||||
* @param prefix the prefix of definition
|
||||
* @param uri the Uri of the definition
|
||||
* @param n the attribute that have the definition
|
||||
* @return true if there is already defined.
|
||||
**/
|
||||
public boolean addMapping(String prefix, String uri,Attr n) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
if ((ob!=null) && uri.equals(ob.uri)) {
|
||||
//If we have it previously defined. Don't keep working.
|
||||
return false;
|
||||
}
|
||||
//Creates and entry in the table for this new definition.
|
||||
NameSpaceSymbEntry ne=new NameSpaceSymbEntry(uri,n,false,prefix);
|
||||
needsClone();
|
||||
symb.put(prefix, ne);
|
||||
if (ob != null) {
|
||||
//We have a previous definition store it for the pop.
|
||||
//Check if a previous definition(not the inmidiatly one) has been rendered.
|
||||
ne.lastrendered=ob.lastrendered;
|
||||
if ((ob.lastrendered!=null)&& (ob.lastrendered.equals(uri))) {
|
||||
//Yes it is. Mark as rendered.
|
||||
ne.rendered=true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
public boolean addMapping(String prefix, String uri, Attr n) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
if ((ob != null) && uri.equals(ob.uri)) {
|
||||
//If we have it previously defined. Don't keep working.
|
||||
return false;
|
||||
}
|
||||
//Creates and entry in the table for this new definition.
|
||||
NameSpaceSymbEntry ne = new NameSpaceSymbEntry(uri, n, false, prefix);
|
||||
needsClone();
|
||||
symb.put(prefix, ne);
|
||||
if (ob != null) {
|
||||
//We have a previous definition store it for the pop.
|
||||
//Check if a previous definition(not the inmidiatly one) has been rendered.
|
||||
ne.lastrendered = ob.lastrendered;
|
||||
if ((ob.lastrendered != null) && (ob.lastrendered.equals(uri))) {
|
||||
//Yes it is. Mark as rendered.
|
||||
ne.rendered = true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a definition and mark it as render.
|
||||
@ -223,79 +219,91 @@ public class NameSpaceSymbTable {
|
||||
* @param n the attribute that have the definition
|
||||
* @return the attr to render, null if there is no need to render
|
||||
**/
|
||||
public Node addMappingAndRender(String prefix, String uri,Attr n) {
|
||||
public Node addMappingAndRender(String prefix, String uri, Attr n) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
|
||||
if ((ob!=null) && uri.equals(ob.uri)) {
|
||||
if ((ob != null) && uri.equals(ob.uri)) {
|
||||
if (!ob.rendered) {
|
||||
ob=(NameSpaceSymbEntry) ob.clone();
|
||||
ob = (NameSpaceSymbEntry) ob.clone();
|
||||
needsClone();
|
||||
symb.put(prefix,ob);
|
||||
ob.lastrendered=uri;
|
||||
ob.rendered=true;
|
||||
symb.put(prefix, ob);
|
||||
ob.lastrendered = uri;
|
||||
ob.rendered = true;
|
||||
return ob.n;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
NameSpaceSymbEntry ne=new NameSpaceSymbEntry(uri,n,true,prefix);
|
||||
ne.lastrendered=uri;
|
||||
NameSpaceSymbEntry ne = new NameSpaceSymbEntry(uri,n,true,prefix);
|
||||
ne.lastrendered = uri;
|
||||
needsClone();
|
||||
symb.put(prefix, ne);
|
||||
if (ob != null) {
|
||||
|
||||
if ((ob.lastrendered!=null)&& (ob.lastrendered.equals(uri))) {
|
||||
ne.rendered=true;
|
||||
return null;
|
||||
}
|
||||
if ((ob != null) && (ob.lastrendered != null) && (ob.lastrendered.equals(uri))) {
|
||||
ne.rendered = true;
|
||||
return null;
|
||||
}
|
||||
return ne.n;
|
||||
}
|
||||
|
||||
public int getLevel() {
|
||||
// TODO Auto-generated method stub
|
||||
return level.size();
|
||||
}
|
||||
public int getLevel() {
|
||||
return level.size();
|
||||
}
|
||||
|
||||
public void removeMapping(String prefix) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
public void removeMapping(String prefix) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
|
||||
if (ob!=null) {
|
||||
if (ob != null) {
|
||||
needsClone();
|
||||
symb.put(prefix,null);
|
||||
}
|
||||
symb.put(prefix, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeMappingIfNotRender(String prefix) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
public void removeMappingIfNotRender(String prefix) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
|
||||
if (ob!=null && !ob.rendered) {
|
||||
if (ob != null && !ob.rendered) {
|
||||
needsClone();
|
||||
symb.put(prefix,null);
|
||||
}
|
||||
symb.put(prefix, null);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean removeMappingIfRender(String prefix) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
public boolean removeMappingIfRender(String prefix) {
|
||||
NameSpaceSymbEntry ob = symb.get(prefix);
|
||||
|
||||
if (ob!=null && ob.rendered) {
|
||||
if (ob != null && ob.rendered) {
|
||||
needsClone();
|
||||
symb.put(prefix,null);
|
||||
symb.put(prefix, null);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The internal structure of NameSpaceSymbTable.
|
||||
**/
|
||||
class NameSpaceSymbEntry implements Cloneable {
|
||||
NameSpaceSymbEntry(String name,Attr n,boolean rendered,String prefix) {
|
||||
this.uri=name;
|
||||
this.rendered=rendered;
|
||||
this.n=n;
|
||||
this.prefix=prefix;
|
||||
|
||||
String prefix;
|
||||
|
||||
/**The URI that the prefix defines */
|
||||
String uri;
|
||||
|
||||
/**The last output in the URI for this prefix (This for speed reason).*/
|
||||
String lastrendered = null;
|
||||
|
||||
/**This prefix-URI has been already render or not.*/
|
||||
boolean rendered = false;
|
||||
|
||||
/**The attribute to include.*/
|
||||
Attr n;
|
||||
|
||||
NameSpaceSymbEntry(String name, Attr n, boolean rendered, String prefix) {
|
||||
this.uri = name;
|
||||
this.rendered = rendered;
|
||||
this.n = n;
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public Object clone() {
|
||||
try {
|
||||
@ -304,46 +312,35 @@ class NameSpaceSymbEntry implements Cloneable {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/** The level where the definition was rendered(Only for inclusive) */
|
||||
int level=0;
|
||||
String prefix;
|
||||
/**The URI that the prefix defines */
|
||||
String uri;
|
||||
/**The last output in the URI for this prefix (This for speed reason).*/
|
||||
String lastrendered=null;
|
||||
/**This prefix-URI has been already render or not.*/
|
||||
boolean rendered=false;
|
||||
/**The attribute to include.*/
|
||||
Attr n;
|
||||
};
|
||||
|
||||
class SymbMap implements Cloneable {
|
||||
int free=23;
|
||||
int free = 23;
|
||||
NameSpaceSymbEntry[] entries;
|
||||
String[] keys;
|
||||
SymbMap() {
|
||||
entries=new NameSpaceSymbEntry[free];
|
||||
keys=new String[free];
|
||||
}
|
||||
|
||||
SymbMap() {
|
||||
entries = new NameSpaceSymbEntry[free];
|
||||
keys = new String[free];
|
||||
}
|
||||
|
||||
void put(String key, NameSpaceSymbEntry value) {
|
||||
int index = index(key);
|
||||
Object oldKey = keys[index];
|
||||
keys[index] = key;
|
||||
entries[index] = value;
|
||||
if (oldKey==null || !oldKey.equals(key)) {
|
||||
if (--free == 0) {
|
||||
free=entries.length;
|
||||
int newCapacity = free<<2;
|
||||
rehash(newCapacity);
|
||||
}
|
||||
if ((oldKey == null || !oldKey.equals(key)) && (--free == 0)) {
|
||||
free = entries.length;
|
||||
int newCapacity = free << 2;
|
||||
rehash(newCapacity);
|
||||
}
|
||||
}
|
||||
|
||||
List<NameSpaceSymbEntry> entrySet() {
|
||||
List<NameSpaceSymbEntry> a=new ArrayList<NameSpaceSymbEntry>();
|
||||
for (int i=0;i<entries.length;i++) {
|
||||
if ((entries[i]!=null) && !("".equals(entries[i].uri))) {
|
||||
a.add(entries[i]);
|
||||
List<NameSpaceSymbEntry> a = new ArrayList<NameSpaceSymbEntry>();
|
||||
for (int i = 0;i < entries.length;i++) {
|
||||
if ((entries[i] != null) && !("".equals(entries[i].uri))) {
|
||||
a.add(entries[i]);
|
||||
}
|
||||
}
|
||||
return a;
|
||||
@ -353,16 +350,16 @@ class SymbMap implements Cloneable {
|
||||
Object[] set = keys;
|
||||
int length = set.length;
|
||||
//abs of index
|
||||
int index = (obj.hashCode() & 0x7fffffff) % length;
|
||||
int index = (obj.hashCode() & 0x7fffffff) % length;
|
||||
Object cur = set[index];
|
||||
|
||||
if (cur == null || (cur.equals( obj))) {
|
||||
return index;
|
||||
if (cur == null || (cur.equals(obj))) {
|
||||
return index;
|
||||
}
|
||||
length=length-1;
|
||||
length--;
|
||||
do {
|
||||
index=index==length? 0:++index;
|
||||
cur = set[index];
|
||||
index = index == length ? 0 : ++index;
|
||||
cur = set[index];
|
||||
} while (cur != null && (!cur.equals(obj)));
|
||||
return index;
|
||||
}
|
||||
@ -381,7 +378,7 @@ class SymbMap implements Cloneable {
|
||||
entries = new NameSpaceSymbEntry[newCapacity];
|
||||
|
||||
for (int i = oldCapacity; i-- > 0;) {
|
||||
if(oldKeys[i] != null) {
|
||||
if (oldKeys[i] != null) {
|
||||
String o = oldKeys[i];
|
||||
int index = index(o);
|
||||
keys[index] = o;
|
||||
@ -391,20 +388,19 @@ class SymbMap implements Cloneable {
|
||||
}
|
||||
|
||||
NameSpaceSymbEntry get(String key) {
|
||||
return entries[index(key)];
|
||||
return entries[index(key)];
|
||||
}
|
||||
|
||||
protected Object clone() {
|
||||
try {
|
||||
SymbMap copy=(SymbMap) super.clone();
|
||||
copy.entries=new NameSpaceSymbEntry[entries.length];
|
||||
System.arraycopy(entries,0,copy.entries,0,entries.length);
|
||||
copy.keys=new String[keys.length];
|
||||
System.arraycopy(keys,0,copy.keys,0,keys.length);
|
||||
SymbMap copy = (SymbMap) super.clone();
|
||||
copy.entries = new NameSpaceSymbEntry[entries.length];
|
||||
System.arraycopy(entries, 0, copy.entries, 0, entries.length);
|
||||
copy.keys = new String[keys.length];
|
||||
System.arraycopy(keys, 0, copy.keys, 0, keys.length);
|
||||
|
||||
return copy;
|
||||
return copy;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
|
||||
@ -1,3 +1,25 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.c14n.implementations;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -6,150 +28,153 @@ import java.util.Map;
|
||||
|
||||
public class UtfHelpper {
|
||||
|
||||
final static void writeByte(final String str,final OutputStream out,Map<String,byte[]> cache) throws IOException {
|
||||
byte []result= cache.get(str);
|
||||
if (result==null) {
|
||||
result=getStringInUtf8(str);
|
||||
cache.put(str,result);
|
||||
}
|
||||
static final void writeByte(
|
||||
final String str,
|
||||
final OutputStream out,
|
||||
Map<String, byte[]> cache
|
||||
) throws IOException {
|
||||
byte[] result = cache.get(str);
|
||||
if (result == null) {
|
||||
result = getStringInUtf8(str);
|
||||
cache.put(str, result);
|
||||
}
|
||||
|
||||
out.write(result);
|
||||
out.write(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
final static void writeCharToUtf8(final char c,final OutputStream out) throws IOException{
|
||||
if (c < 0x80) {
|
||||
out.write(c);
|
||||
return;
|
||||
static final void writeCharToUtf8(final char c, final OutputStream out) throws IOException {
|
||||
if (c < 0x80) {
|
||||
out.write(c);
|
||||
return;
|
||||
}
|
||||
if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF)) {
|
||||
//No Surrogates in sun java
|
||||
out.write(0x3f);
|
||||
return;
|
||||
}
|
||||
int bias;
|
||||
int write;
|
||||
char ch;
|
||||
if (c > 0x07FF) {
|
||||
ch = (char)(c>>>12);
|
||||
write = 0xE0;
|
||||
if (ch > 0) {
|
||||
write |= (ch & 0x0F);
|
||||
}
|
||||
if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF) ){
|
||||
out.write(write);
|
||||
write = 0x80;
|
||||
bias = 0x3F;
|
||||
} else {
|
||||
write = 0xC0;
|
||||
bias = 0x1F;
|
||||
}
|
||||
ch = (char)(c>>>6);
|
||||
if (ch > 0) {
|
||||
write |= (ch & bias);
|
||||
}
|
||||
out.write(write);
|
||||
out.write(0x80 | ((c) & 0x3F));
|
||||
|
||||
}
|
||||
|
||||
static final void writeStringToUtf8(
|
||||
final String str,
|
||||
final OutputStream out
|
||||
) throws IOException{
|
||||
final int length = str.length();
|
||||
int i = 0;
|
||||
char c;
|
||||
while (i < length) {
|
||||
c = str.charAt(i++);
|
||||
if (c < 0x80) {
|
||||
out.write(c);
|
||||
continue;
|
||||
}
|
||||
if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF)) {
|
||||
//No Surrogates in sun java
|
||||
out.write(0x3f);
|
||||
return;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
char ch;
|
||||
int bias;
|
||||
int write;
|
||||
char ch;
|
||||
if (c > 0x07FF) {
|
||||
ch=(char)(c>>>12);
|
||||
write=0xE0;
|
||||
if (ch>0) {
|
||||
write |= ( ch & 0x0F);
|
||||
ch = (char)(c>>>12);
|
||||
write = 0xE0;
|
||||
if (ch > 0) {
|
||||
write |= (ch & 0x0F);
|
||||
}
|
||||
out.write(write);
|
||||
write=0x80;
|
||||
bias=0x3F;
|
||||
write = 0x80;
|
||||
bias = 0x3F;
|
||||
} else {
|
||||
write=0xC0;
|
||||
bias=0x1F;
|
||||
write = 0xC0;
|
||||
bias = 0x1F;
|
||||
}
|
||||
ch=(char)(c>>>6);
|
||||
if (ch>0) {
|
||||
write|= (ch & bias);
|
||||
ch = (char)(c>>>6);
|
||||
if (ch > 0) {
|
||||
write |= (ch & bias);
|
||||
}
|
||||
out.write(write);
|
||||
out.write(0x80 | ((c) & 0x3F));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
final static void writeStringToUtf8(final String str,final OutputStream out) throws IOException{
|
||||
final int length=str.length();
|
||||
int i=0;
|
||||
char c;
|
||||
while (i<length) {
|
||||
c=str.charAt(i++);
|
||||
if (c < 0x80) {
|
||||
out.write(c);
|
||||
continue;
|
||||
}
|
||||
|
||||
public static final byte[] getStringInUtf8(final String str) {
|
||||
final int length = str.length();
|
||||
boolean expanded = false;
|
||||
byte[] result = new byte[length];
|
||||
int i = 0;
|
||||
int out = 0;
|
||||
char c;
|
||||
while (i < length) {
|
||||
c = str.charAt(i++);
|
||||
if (c < 0x80) {
|
||||
result[out++] = (byte)c;
|
||||
continue;
|
||||
}
|
||||
if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF)) {
|
||||
//No Surrogates in sun java
|
||||
result[out++] = 0x3f;
|
||||
continue;
|
||||
}
|
||||
if (!expanded) {
|
||||
byte newResult[] = new byte[3*length];
|
||||
System.arraycopy(result, 0, newResult, 0, out);
|
||||
result = newResult;
|
||||
expanded = true;
|
||||
}
|
||||
char ch;
|
||||
int bias;
|
||||
byte write;
|
||||
if (c > 0x07FF) {
|
||||
ch = (char)(c>>>12);
|
||||
write = (byte)0xE0;
|
||||
if (ch > 0) {
|
||||
write |= (ch & 0x0F);
|
||||
}
|
||||
if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF) ){
|
||||
//No Surrogates in sun java
|
||||
out.write(0x3f);
|
||||
continue;
|
||||
}
|
||||
char ch;
|
||||
int bias;
|
||||
int write;
|
||||
if (c > 0x07FF) {
|
||||
ch=(char)(c>>>12);
|
||||
write=0xE0;
|
||||
if (ch>0) {
|
||||
write |= ( ch & 0x0F);
|
||||
}
|
||||
out.write(write);
|
||||
write=0x80;
|
||||
bias=0x3F;
|
||||
} else {
|
||||
write=0xC0;
|
||||
bias=0x1F;
|
||||
}
|
||||
ch=(char)(c>>>6);
|
||||
if (ch>0) {
|
||||
write|= (ch & bias);
|
||||
}
|
||||
out.write(write);
|
||||
out.write(0x80 | ((c) & 0x3F));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final static byte[] getStringInUtf8(final String str) {
|
||||
final int length=str.length();
|
||||
boolean expanded=false;
|
||||
byte []result=new byte[length];
|
||||
int i=0;
|
||||
int out=0;
|
||||
char c;
|
||||
while (i<length) {
|
||||
c=str.charAt(i++);
|
||||
if ( c < 0x80 ) {
|
||||
result[out++]=(byte)c;
|
||||
continue;
|
||||
}
|
||||
if ((c >= 0xD800 && c <= 0xDBFF) || (c >= 0xDC00 && c <= 0xDFFF) ){
|
||||
//No Surrogates in sun java
|
||||
result[out++]=0x3f;
|
||||
|
||||
continue;
|
||||
}
|
||||
if (!expanded) {
|
||||
byte newResult[]=new byte[3*length];
|
||||
System.arraycopy(result, 0, newResult, 0, out);
|
||||
result=newResult;
|
||||
expanded=true;
|
||||
}
|
||||
char ch;
|
||||
int bias;
|
||||
byte write;
|
||||
if (c > 0x07FF) {
|
||||
ch=(char)(c>>>12);
|
||||
write=(byte)0xE0;
|
||||
if (ch>0) {
|
||||
write |= ( ch & 0x0F);
|
||||
}
|
||||
result[out++]=write;
|
||||
write=(byte)0x80;
|
||||
bias=0x3F;
|
||||
} else {
|
||||
write=(byte)0xC0;
|
||||
bias=0x1F;
|
||||
}
|
||||
ch=(char)(c>>>6);
|
||||
if (ch>0) {
|
||||
write|= (ch & bias);
|
||||
}
|
||||
result[out++]=write;
|
||||
result[out++]=(byte)(0x80 | ((c) & 0x3F));/**/
|
||||
|
||||
}
|
||||
if (expanded) {
|
||||
byte newResult[]=new byte[out];
|
||||
System.arraycopy(result, 0, newResult, 0, out);
|
||||
result=newResult;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
result[out++] = write;
|
||||
write = (byte)0x80;
|
||||
bias = 0x3F;
|
||||
} else {
|
||||
write = (byte)0xC0;
|
||||
bias = 0x1F;
|
||||
}
|
||||
ch = (char)(c>>>6);
|
||||
if (ch > 0) {
|
||||
write |= (ch & bias);
|
||||
}
|
||||
result[out++] = write;
|
||||
result[out++] = (byte)(0x80 | ((c) & 0x3F));
|
||||
}
|
||||
if (expanded) {
|
||||
byte newResult[] = new byte[out];
|
||||
System.arraycopy(result, 0, newResult, 0, out);
|
||||
result = newResult;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,249 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
* Converts <code>String</code>s into <code>Node</code>s and visa versa.
|
||||
*
|
||||
* An abstract class for common Serializer functionality
|
||||
*/
|
||||
public abstract class AbstractSerializer implements Serializer {
|
||||
|
||||
protected Canonicalizer canon;
|
||||
|
||||
public void setCanonicalizer(Canonicalizer canon) {
|
||||
this.canon = canon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a <code>String</code> representation of the specified
|
||||
* <code>Element</code>.
|
||||
* <p/>
|
||||
* Refer also to comments about setup of format.
|
||||
*
|
||||
* @param element the <code>Element</code> to serialize.
|
||||
* @return the <code>String</code> representation of the serilaized
|
||||
* <code>Element</code>.
|
||||
* @throws Exception
|
||||
*/
|
||||
public String serialize(Element element) throws Exception {
|
||||
return canonSerialize(element);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a <code>byte[]</code> representation of the specified
|
||||
* <code>Element</code>.
|
||||
*
|
||||
* @param element the <code>Element</code> to serialize.
|
||||
* @return the <code>byte[]</code> representation of the serilaized
|
||||
* <code>Element</code>.
|
||||
* @throws Exception
|
||||
*/
|
||||
public byte[] serializeToByteArray(Element element) throws Exception {
|
||||
return canonSerializeToByteArray(element);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a <code>String</code> representation of the specified
|
||||
* <code>NodeList</code>.
|
||||
* <p/>
|
||||
* This is a special case because the NodeList may represent a
|
||||
* <code>DocumentFragment</code>. A document fragment may be a
|
||||
* non-valid XML document (refer to appropriate description of
|
||||
* W3C) because it my start with a non-element node, e.g. a text
|
||||
* node.
|
||||
* <p/>
|
||||
* The methods first converts the node list into a document fragment.
|
||||
* Special care is taken to not destroy the current document, thus
|
||||
* the method clones the nodes (deep cloning) before it appends
|
||||
* them to the document fragment.
|
||||
* <p/>
|
||||
* Refer also to comments about setup of format.
|
||||
*
|
||||
* @param content the <code>NodeList</code> to serialize.
|
||||
* @return the <code>String</code> representation of the serialized
|
||||
* <code>NodeList</code>.
|
||||
* @throws Exception
|
||||
*/
|
||||
public String serialize(NodeList content) throws Exception {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
canon.setWriter(baos);
|
||||
canon.notReset();
|
||||
for (int i = 0; i < content.getLength(); i++) {
|
||||
canon.canonicalizeSubtree(content.item(i));
|
||||
}
|
||||
String ret = baos.toString("UTF-8");
|
||||
baos.reset();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a <code>byte[]</code> representation of the specified
|
||||
* <code>NodeList</code>.
|
||||
*
|
||||
* @param content the <code>NodeList</code> to serialize.
|
||||
* @return the <code>byte[]</code> representation of the serialized
|
||||
* <code>NodeList</code>.
|
||||
* @throws Exception
|
||||
*/
|
||||
public byte[] serializeToByteArray(NodeList content) throws Exception {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
canon.setWriter(baos);
|
||||
canon.notReset();
|
||||
for (int i = 0; i < content.getLength(); i++) {
|
||||
canon.canonicalizeSubtree(content.item(i));
|
||||
}
|
||||
return baos.toByteArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the Canonicalizer to serialize the node
|
||||
* @param node
|
||||
* @return the canonicalization of the node
|
||||
* @throws Exception
|
||||
*/
|
||||
public String canonSerialize(Node node) throws Exception {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
canon.setWriter(baos);
|
||||
canon.notReset();
|
||||
canon.canonicalizeSubtree(node);
|
||||
String ret = baos.toString("UTF-8");
|
||||
baos.reset();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the Canonicalizer to serialize the node
|
||||
* @param node
|
||||
* @return the (byte[]) canonicalization of the node
|
||||
* @throws Exception
|
||||
*/
|
||||
public byte[] canonSerializeToByteArray(Node node) throws Exception {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
canon.setWriter(baos);
|
||||
canon.notReset();
|
||||
canon.canonicalizeSubtree(node);
|
||||
return baos.toByteArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param source
|
||||
* @param ctx
|
||||
* @return the Node resulting from the parse of the source
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
public abstract Node deserialize(String source, Node ctx) throws XMLEncryptionException;
|
||||
|
||||
/**
|
||||
* @param source
|
||||
* @param ctx
|
||||
* @return the Node resulting from the parse of the source
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
public abstract Node deserialize(byte[] source, Node ctx) throws XMLEncryptionException;
|
||||
|
||||
protected static byte[] createContext(byte[] source, Node ctx) throws XMLEncryptionException {
|
||||
// Create the context to parse the document against
|
||||
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
try {
|
||||
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(byteArrayOutputStream, "UTF-8");
|
||||
outputStreamWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><dummy");
|
||||
|
||||
// Run through each node up to the document node and find any xmlns: nodes
|
||||
Map<String, String> storedNamespaces = new HashMap<String, String>();
|
||||
Node wk = ctx;
|
||||
while (wk != null) {
|
||||
NamedNodeMap atts = wk.getAttributes();
|
||||
if (atts != null) {
|
||||
for (int i = 0; i < atts.getLength(); ++i) {
|
||||
Node att = atts.item(i);
|
||||
String nodeName = att.getNodeName();
|
||||
if ((nodeName.equals("xmlns") || nodeName.startsWith("xmlns:"))
|
||||
&& !storedNamespaces.containsKey(att.getNodeName())) {
|
||||
outputStreamWriter.write(" ");
|
||||
outputStreamWriter.write(nodeName);
|
||||
outputStreamWriter.write("=\"");
|
||||
outputStreamWriter.write(att.getNodeValue());
|
||||
outputStreamWriter.write("\"");
|
||||
storedNamespaces.put(nodeName, att.getNodeValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
wk = wk.getParentNode();
|
||||
}
|
||||
outputStreamWriter.write(">");
|
||||
outputStreamWriter.flush();
|
||||
byteArrayOutputStream.write(source);
|
||||
|
||||
outputStreamWriter.write("</dummy>");
|
||||
outputStreamWriter.close();
|
||||
|
||||
return byteArrayOutputStream.toByteArray();
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new XMLEncryptionException("empty", e);
|
||||
} catch (IOException e) {
|
||||
throw new XMLEncryptionException("empty", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected static String createContext(String source, Node ctx) {
|
||||
// Create the context to parse the document against
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><dummy");
|
||||
|
||||
// Run through each node up to the document node and find any xmlns: nodes
|
||||
Map<String, String> storedNamespaces = new HashMap<String, String>();
|
||||
Node wk = ctx;
|
||||
while (wk != null) {
|
||||
NamedNodeMap atts = wk.getAttributes();
|
||||
if (atts != null) {
|
||||
for (int i = 0; i < atts.getLength(); ++i) {
|
||||
Node att = atts.item(i);
|
||||
String nodeName = att.getNodeName();
|
||||
if ((nodeName.equals("xmlns") || nodeName.startsWith("xmlns:"))
|
||||
&& !storedNamespaces.containsKey(att.getNodeName())) {
|
||||
sb.append(" " + nodeName + "=\"" + att.getNodeValue() + "\"");
|
||||
storedNamespaces.put(nodeName, att.getNodeValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
wk = wk.getParentNode();
|
||||
}
|
||||
sb.append(">" + source + "</dummy>");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,30 +2,30 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
import com.sun.org.apache.xml.internal.security.keys.KeyInfo;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
* A Key Agreement algorithm provides for the derivation of a shared secret key
|
||||
* based on a shared secret computed from certain types of compatible public
|
||||
@ -79,9 +79,10 @@ import org.w3c.dom.Element;
|
||||
* @author Axl Mattheus
|
||||
*/
|
||||
public interface AgreementMethod {
|
||||
|
||||
/**
|
||||
* Returns an <code>byte</code> array.
|
||||
* @return
|
||||
* Returns a <code>byte</code> array.
|
||||
* @return a <code>byte</code> array.
|
||||
*/
|
||||
byte[] getKANonce();
|
||||
|
||||
@ -92,8 +93,8 @@ public interface AgreementMethod {
|
||||
void setKANonce(byte[] kanonce);
|
||||
|
||||
/**
|
||||
* Returns aditional information regarding the <code>AgreementMethod</code>.
|
||||
* @return
|
||||
* Returns additional information regarding the <code>AgreementMethod</code>.
|
||||
* @return additional information regarding the <code>AgreementMethod</code>.
|
||||
*/
|
||||
Iterator<Element> getAgreementMethodInformation();
|
||||
|
||||
@ -134,7 +135,7 @@ public interface AgreementMethod {
|
||||
void setOriginatorKeyInfo(KeyInfo keyInfo);
|
||||
|
||||
/**
|
||||
* Retruns information relating to the recipient's shared secret.
|
||||
* Returns information relating to the recipient's shared secret.
|
||||
*
|
||||
* @return information relating to the recipient's shared secret.
|
||||
*/
|
||||
|
||||
@ -2,25 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
/**
|
||||
* <code>CipherData</code> provides encrypted data. It must either contain the
|
||||
* encrypted octet sequence as base64 encoded text of the
|
||||
@ -42,10 +43,12 @@ package com.sun.org.apache.xml.internal.security.encryption;
|
||||
* @author Axl Mattheus
|
||||
*/
|
||||
public interface CipherData {
|
||||
|
||||
/** VALUE_TYPE ASN */
|
||||
public static final int VALUE_TYPE = 0x00000001;
|
||||
int VALUE_TYPE = 0x00000001;
|
||||
|
||||
/** REFERENCE_TYPE ASN */
|
||||
public static final int REFERENCE_TYPE = 0x00000002;
|
||||
int REFERENCE_TYPE = 0x00000002;
|
||||
|
||||
/**
|
||||
* Returns the type of encrypted data contained in the
|
||||
@ -76,18 +79,17 @@ public interface CipherData {
|
||||
* Returns a reference to an external location containing the encrypted
|
||||
* octet sequence (<code>byte</code> array).
|
||||
*
|
||||
* @return the reference to an external location containing the enctrypted
|
||||
* octet sequence.
|
||||
* @return the reference to an external location containing the encrypted
|
||||
* octet sequence.
|
||||
*/
|
||||
CipherReference getCipherReference();
|
||||
|
||||
/**
|
||||
* Sets the <code>CipherData</code>'s reference.
|
||||
*
|
||||
* @param reference an external location containing the enctrypted octet
|
||||
* sequence.
|
||||
* @param reference an external location containing the encrypted octet sequence.
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
void setCipherReference(CipherReference reference) throws
|
||||
XMLEncryptionException;
|
||||
void setCipherReference(CipherReference reference) throws XMLEncryptionException;
|
||||
}
|
||||
|
||||
|
||||
@ -2,34 +2,34 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
import org.w3c.dom.Attr;
|
||||
|
||||
|
||||
/**
|
||||
* <code>CipherReference</code> identifies a source which, when processed,
|
||||
* yields the encrypted octet sequence.
|
||||
* <p>
|
||||
* The actual value is obtained as follows. The <code>CipherReference URI</code>
|
||||
* contains an identifier that is dereferenced. Should the
|
||||
* <code>CipherReference</code> element contain an OPTIONAL sequence of
|
||||
* Transforms, the data resulting from dereferencing the <code>URI</code> is
|
||||
* transformed as specified so as to yield the intended cipher value. For
|
||||
* example, if the value is base64 encoded within an XML document; the
|
||||
@ -62,20 +62,21 @@ public interface CipherReference {
|
||||
/**
|
||||
* Returns an <code>URI</code> that contains an identifier that should be
|
||||
* dereferenced.
|
||||
* @return
|
||||
* @return an <code>URI</code> that contains an identifier that should be
|
||||
* dereferenced.
|
||||
*/
|
||||
String getURI();
|
||||
|
||||
/**
|
||||
* Gets the URI as an Attribute node. Used to meld the CipherREference
|
||||
* with the XMLSignature ResourceResolvers
|
||||
* @return
|
||||
*/
|
||||
public Attr getURIAsAttr();
|
||||
/**
|
||||
* Gets the URI as an Attribute node. Used to meld the CipherReference
|
||||
* with the XMLSignature ResourceResolvers
|
||||
* @return the URI as an Attribute node
|
||||
*/
|
||||
Attr getURIAsAttr();
|
||||
|
||||
/**
|
||||
* Returns the <code>Transforms</code> that specifies how to transform the
|
||||
* <code>URI</code> to yield the appropiate cipher value.
|
||||
* <code>URI</code> to yield the appropriate cipher value.
|
||||
*
|
||||
* @return the transform that specifies how to transform the reference to
|
||||
* yield the intended cipher value.
|
||||
@ -84,10 +85,11 @@ public interface CipherReference {
|
||||
|
||||
/**
|
||||
* Sets the <code>Transforms</code> that specifies how to transform the
|
||||
* <code>URI</code> to yield the appropiate cipher value.
|
||||
* <code>URI</code> to yield the appropriate cipher value.
|
||||
*
|
||||
* @param transforms the set of <code>Transforms</code> that specifies how
|
||||
* to transform the reference to yield the intended cipher value.
|
||||
*/
|
||||
void setTransforms(Transforms transforms);
|
||||
}
|
||||
|
||||
|
||||
@ -2,25 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
/**
|
||||
* <code>CipherValue</code> is the wrapper for cipher text.
|
||||
*
|
||||
@ -28,20 +29,18 @@ package com.sun.org.apache.xml.internal.security.encryption;
|
||||
*/
|
||||
public interface CipherValue {
|
||||
/**
|
||||
* Resturns the Base 64 encoded, encrypted octets that is the
|
||||
* <code>CihperValue</code>.
|
||||
* Returns the Base 64 encoded, encrypted octets that is the
|
||||
* <code>CipherValue</code>.
|
||||
*
|
||||
* @return cipher value.
|
||||
*/
|
||||
String getValue();
|
||||
// byte[] getValue();
|
||||
String getValue();
|
||||
|
||||
/**
|
||||
* Sets the Base 64 encoded, encrypted octets that is the
|
||||
* <code>CihperValue</code>.
|
||||
* <code>CipherValue</code>.
|
||||
*
|
||||
* @param value the cipher value.
|
||||
*/
|
||||
void setValue(String value);
|
||||
// void setValue(byte[] value);
|
||||
void setValue(String value);
|
||||
}
|
||||
|
||||
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentFragment;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* Converts <code>String</code>s into <code>Node</code>s and visa versa.
|
||||
*/
|
||||
public class DocumentSerializer extends AbstractSerializer {
|
||||
|
||||
protected DocumentBuilderFactory dbf;
|
||||
|
||||
/**
|
||||
* @param source
|
||||
* @param ctx
|
||||
* @return the Node resulting from the parse of the source
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
public Node deserialize(byte[] source, Node ctx) throws XMLEncryptionException {
|
||||
byte[] fragment = createContext(source, ctx);
|
||||
return deserialize(ctx, new InputSource(new ByteArrayInputStream(fragment)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param source
|
||||
* @param ctx
|
||||
* @return the Node resulting from the parse of the source
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
public Node deserialize(String source, Node ctx) throws XMLEncryptionException {
|
||||
String fragment = createContext(source, ctx);
|
||||
return deserialize(ctx, new InputSource(new StringReader(fragment)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ctx
|
||||
* @param inputSource
|
||||
* @return the Node resulting from the parse of the source
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
private Node deserialize(Node ctx, InputSource inputSource) throws XMLEncryptionException {
|
||||
try {
|
||||
if (dbf == null) {
|
||||
dbf = DocumentBuilderFactory.newInstance();
|
||||
dbf.setNamespaceAware(true);
|
||||
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
|
||||
dbf.setAttribute("http://xml.org/sax/features/namespaces", Boolean.TRUE);
|
||||
dbf.setValidating(false);
|
||||
}
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
Document d = db.parse(inputSource);
|
||||
|
||||
Document contextDocument = null;
|
||||
if (Node.DOCUMENT_NODE == ctx.getNodeType()) {
|
||||
contextDocument = (Document)ctx;
|
||||
} else {
|
||||
contextDocument = ctx.getOwnerDocument();
|
||||
}
|
||||
|
||||
Element fragElt =
|
||||
(Element) contextDocument.importNode(d.getDocumentElement(), true);
|
||||
DocumentFragment result = contextDocument.createDocumentFragment();
|
||||
Node child = fragElt.getFirstChild();
|
||||
while (child != null) {
|
||||
fragElt.removeChild(child);
|
||||
result.appendChild(child);
|
||||
child = fragElt.getFirstChild();
|
||||
}
|
||||
return result;
|
||||
} catch (SAXException se) {
|
||||
throw new XMLEncryptionException("empty", se);
|
||||
} catch (ParserConfigurationException pce) {
|
||||
throw new XMLEncryptionException("empty", pce);
|
||||
} catch (IOException ioe) {
|
||||
throw new XMLEncryptionException("empty", ioe);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,25 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
/**
|
||||
* The <code>EncryptedData</code> element is the core element in the syntax. Not
|
||||
* only does its <code>CipherData</code> child contain the encrypted data, but
|
||||
@ -42,3 +43,4 @@ package com.sun.org.apache.xml.internal.security.encryption;
|
||||
*/
|
||||
public interface EncryptedData extends EncryptedType {
|
||||
}
|
||||
|
||||
|
||||
@ -2,26 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The <code>EncryptedKey</code> element is used to transport encryption keys
|
||||
* from the originator to a known recipient(s). It may be used as a stand-alone
|
||||
@ -51,9 +51,9 @@ package com.sun.org.apache.xml.internal.security.encryption;
|
||||
* @author Axl Mattheus
|
||||
*/
|
||||
public interface EncryptedKey extends EncryptedType {
|
||||
|
||||
/**
|
||||
* Returns a hint as to which recipient this encrypted key value is intended
|
||||
* for.
|
||||
* Returns a hint as to which recipient this encrypted key value is intended for.
|
||||
*
|
||||
* @return the recipient of the <code>EncryptedKey</code>.
|
||||
*/
|
||||
@ -110,3 +110,4 @@ public interface EncryptedKey extends EncryptedType {
|
||||
*/
|
||||
void setCarriedName(String name);
|
||||
}
|
||||
|
||||
|
||||
@ -2,28 +2,28 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.keys.KeyInfo;
|
||||
|
||||
|
||||
/**
|
||||
* EncryptedType is the abstract type from which <code>EncryptedData</code> and
|
||||
* <code>EncryptedKey</code> are derived. While these two latter element types
|
||||
@ -50,6 +50,7 @@ import com.sun.org.apache.xml.internal.security.keys.KeyInfo;
|
||||
* @author Axl Mattheus
|
||||
*/
|
||||
public interface EncryptedType {
|
||||
|
||||
/**
|
||||
* Returns a <code>String</code> providing for the standard method of
|
||||
* assigning an id to the element within the document context.
|
||||
@ -61,7 +62,7 @@ public interface EncryptedType {
|
||||
/**
|
||||
* Sets the id.
|
||||
*
|
||||
* @param id.
|
||||
* @param id
|
||||
*/
|
||||
void setId(String id);
|
||||
|
||||
@ -117,7 +118,7 @@ public interface EncryptedType {
|
||||
void setMimeType(String type);
|
||||
|
||||
/**
|
||||
* Retusn an <code>URI</code> representing the encoding of the
|
||||
* Return an <code>URI</code> representing the encoding of the
|
||||
* <code>EncryptedType</code>.
|
||||
*
|
||||
* @return the encoding of this <code>EncryptedType</code>.
|
||||
@ -128,7 +129,7 @@ public interface EncryptedType {
|
||||
* Sets the <code>URI</code> representing the encoding of the
|
||||
* <code>EncryptedType</code>.
|
||||
*
|
||||
* @param encoding.
|
||||
* @param encoding
|
||||
*/
|
||||
void setEncoding(String encoding);
|
||||
|
||||
@ -189,7 +190,8 @@ public interface EncryptedType {
|
||||
* Sets the <code>EncryptionProperties</code> that supplies additional
|
||||
* information about the generation of the <code>EncryptedType</code>.
|
||||
*
|
||||
* @param properties.
|
||||
* @param properties
|
||||
*/
|
||||
void setEncryptionProperties(EncryptionProperties properties);
|
||||
}
|
||||
|
||||
|
||||
@ -2,29 +2,29 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
* <code>EncryptionMethod</code> describes the encryption algorithm applied to
|
||||
* the cipher data. If the element is absent, the encryption algorithm must be
|
||||
@ -82,6 +82,30 @@ public interface EncryptionMethod {
|
||||
*/
|
||||
void setOAEPparams(byte[] parameters);
|
||||
|
||||
/**
|
||||
* Set the Digest Algorithm to use
|
||||
* @param digestAlgorithm the Digest Algorithm to use
|
||||
*/
|
||||
void setDigestAlgorithm(String digestAlgorithm);
|
||||
|
||||
/**
|
||||
* Get the Digest Algorithm to use
|
||||
* @return the Digest Algorithm to use
|
||||
*/
|
||||
String getDigestAlgorithm();
|
||||
|
||||
/**
|
||||
* Set the MGF Algorithm to use
|
||||
* @param mgfAlgorithm the MGF Algorithm to use
|
||||
*/
|
||||
void setMGFAlgorithm(String mgfAlgorithm);
|
||||
|
||||
/**
|
||||
* Get the MGF Algorithm to use
|
||||
* @return the MGF Algorithm to use
|
||||
*/
|
||||
String getMGFAlgorithm();
|
||||
|
||||
/**
|
||||
* Returns an iterator over all the additional elements contained in the
|
||||
* <code>EncryptionMethod</code>.
|
||||
@ -106,3 +130,4 @@ public interface EncryptionMethod {
|
||||
*/
|
||||
void removeEncryptionMethodInformation(Element information);
|
||||
}
|
||||
|
||||
|
||||
@ -2,28 +2,28 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
|
||||
/**
|
||||
* <code>EncryptionProperties</code> can hold additional information concerning
|
||||
* the generation of the <code>EncryptedData</code> or
|
||||
@ -46,6 +46,7 @@ import java.util.Iterator;
|
||||
* @author Axl Mattheus
|
||||
*/
|
||||
public interface EncryptionProperties {
|
||||
|
||||
/**
|
||||
* Returns the <code>EncryptionProperties</code>' id.
|
||||
*
|
||||
@ -72,14 +73,15 @@ public interface EncryptionProperties {
|
||||
/**
|
||||
* Adds an <code>EncryptionProperty</code>.
|
||||
*
|
||||
* @param property.
|
||||
* @param property
|
||||
*/
|
||||
void addEncryptionProperty(EncryptionProperty property);
|
||||
|
||||
/**
|
||||
* Removes the specified <code>EncryptionProperty</code>.
|
||||
*
|
||||
* @param property.
|
||||
* @param property
|
||||
*/
|
||||
void removeEncryptionProperty(EncryptionProperty property);
|
||||
}
|
||||
|
||||
|
||||
@ -2,25 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
@ -50,6 +51,7 @@ import org.w3c.dom.Element;
|
||||
* @author Axl Mattheus
|
||||
*/
|
||||
public interface EncryptionProperty {
|
||||
|
||||
/**
|
||||
* Returns the <code>EncryptedType</code> being described.
|
||||
*
|
||||
@ -61,7 +63,7 @@ public interface EncryptionProperty {
|
||||
/**
|
||||
* Sets the target.
|
||||
*
|
||||
* @param target.
|
||||
* @param target
|
||||
*/
|
||||
void setTarget(String target);
|
||||
|
||||
@ -75,7 +77,7 @@ public interface EncryptionProperty {
|
||||
/**
|
||||
* Sets the id.
|
||||
*
|
||||
* @param id.
|
||||
* @param id
|
||||
*/
|
||||
void setId(String id);
|
||||
|
||||
@ -98,7 +100,7 @@ public interface EncryptionProperty {
|
||||
/**
|
||||
* Returns the properties of the <CODE>EncryptionProperty</CODE>.
|
||||
*
|
||||
* @return an <code>Iterator</code> over all the addiitonal encryption
|
||||
* @return an <code>Iterator</code> over all the additional encryption
|
||||
* information contained in this class.
|
||||
*/
|
||||
Iterator<Element> getEncryptionInformation();
|
||||
|
||||
@ -2,29 +2,29 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
* A wrapper for a pointer from a key value of an <code>EncryptedKey</code> to
|
||||
* items encrypted by that key value (<code>EncryptedData</code> or
|
||||
@ -44,6 +44,13 @@ import org.w3c.dom.Element;
|
||||
* @see ReferenceList
|
||||
*/
|
||||
public interface Reference {
|
||||
/**
|
||||
* Returns the <code>Element</code> tag name for this <code>Reference</code>.
|
||||
*
|
||||
* @return the tag name of this <code>Reference</code>.
|
||||
*/
|
||||
String getType();
|
||||
|
||||
/**
|
||||
* Returns a <code>URI</code> that points to an <code>Element</code> that
|
||||
* were encrypted using the key defined in the enclosing
|
||||
@ -79,14 +86,14 @@ public interface Reference {
|
||||
/**
|
||||
* Adds retrieval information.
|
||||
*
|
||||
* @param info.
|
||||
* @param info
|
||||
*/
|
||||
void addElementRetrievalInformation(Element info);
|
||||
|
||||
/**
|
||||
* Removes the specified retrieval information.
|
||||
*
|
||||
* @param info.
|
||||
* @param info
|
||||
*/
|
||||
void removeElementRetrievalInformation(Element info);
|
||||
}
|
||||
|
||||
@ -2,28 +2,28 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
|
||||
/**
|
||||
* <code>ReferenceList</code> is an element that contains pointers from a key
|
||||
* value of an <code>EncryptedKey</code> to items encrypted by that key value
|
||||
@ -45,10 +45,12 @@ import java.util.Iterator;
|
||||
* @see Reference
|
||||
*/
|
||||
public interface ReferenceList {
|
||||
/** DATA TAG */
|
||||
public static final int DATA_REFERENCE = 0x00000001;
|
||||
|
||||
/** DATA TAG */
|
||||
int DATA_REFERENCE = 0x00000001;
|
||||
|
||||
/** KEY TAG */
|
||||
public static final int KEY_REFERENCE = 0x00000002;
|
||||
int KEY_REFERENCE = 0x00000002;
|
||||
|
||||
/**
|
||||
* Adds a reference to this reference list.
|
||||
@ -57,21 +59,21 @@ public interface ReferenceList {
|
||||
* @throws IllegalAccessException if the <code>Reference</code> is not an
|
||||
* instance of <code>DataReference</code> or <code>KeyReference</code>.
|
||||
*/
|
||||
public void add(Reference reference);
|
||||
void add(Reference reference);
|
||||
|
||||
/**
|
||||
* Removes a reference from the <code>ReferenceList</code>.
|
||||
*
|
||||
* @param reference the reference to remove.
|
||||
*/
|
||||
public void remove(Reference reference);
|
||||
void remove(Reference reference);
|
||||
|
||||
/**
|
||||
* Returns the size of the <code>ReferenceList</code>.
|
||||
*
|
||||
* @return the size of the <code>ReferenceList</code>.
|
||||
*/
|
||||
public int size();
|
||||
int size();
|
||||
|
||||
/**
|
||||
* Indicates if the <code>ReferenceList</code> is empty.
|
||||
@ -79,29 +81,29 @@ public interface ReferenceList {
|
||||
* @return <code><b>true</b></code> if the <code>ReferenceList</code> is
|
||||
* empty, else <code><b>false</b></code>.
|
||||
*/
|
||||
public boolean isEmpty();
|
||||
boolean isEmpty();
|
||||
|
||||
/**
|
||||
* Returns an <code>Iterator</code> over all the <code>Reference</code>s
|
||||
* contatined in this <code>ReferenceList</code>.
|
||||
* contained in this <code>ReferenceList</code>.
|
||||
*
|
||||
* @return Iterator.
|
||||
*/
|
||||
public Iterator<Reference> getReferences();
|
||||
Iterator<Reference> getReferences();
|
||||
|
||||
/**
|
||||
* <code>DataReference</code> factory method. Returns a
|
||||
* <code>DataReference</code>.
|
||||
* @param uri
|
||||
* @return
|
||||
* @return a <code>DataReference</code>.
|
||||
*/
|
||||
public Reference newDataReference(String uri);
|
||||
Reference newDataReference(String uri);
|
||||
|
||||
/**
|
||||
* <code>KeyReference</code> factory method. Returns a
|
||||
* <code>KeyReference</code>.
|
||||
* @param uri
|
||||
* @return
|
||||
* @return a <code>KeyReference</code>.
|
||||
*/
|
||||
public Reference newKeyReference(String uri);
|
||||
Reference newKeyReference(String uri);
|
||||
}
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
* Converts <code>String</code>s into <code>Node</code>s and visa versa.
|
||||
*/
|
||||
public interface Serializer {
|
||||
|
||||
/**
|
||||
* Set the Canonicalizer object to use.
|
||||
*/
|
||||
void setCanonicalizer(Canonicalizer canon);
|
||||
|
||||
/**
|
||||
* Returns a <code>byte[]</code> representation of the specified
|
||||
* <code>Element</code>.
|
||||
*
|
||||
* @param element the <code>Element</code> to serialize.
|
||||
* @return the <code>byte[]</code> representation of the serilaized
|
||||
* <code>Element</code>.
|
||||
* @throws Exception
|
||||
*/
|
||||
byte[] serializeToByteArray(Element element) throws Exception;
|
||||
|
||||
/**
|
||||
* Returns a <code>byte[]</code> representation of the specified
|
||||
* <code>NodeList</code>.
|
||||
*
|
||||
* @param content the <code>NodeList</code> to serialize.
|
||||
* @return the <code>byte[]</code> representation of the serialized
|
||||
* <code>NodeList</code>.
|
||||
* @throws Exception
|
||||
*/
|
||||
byte[] serializeToByteArray(NodeList content) throws Exception;
|
||||
|
||||
/**
|
||||
* Use the Canonicalizer to serialize the node
|
||||
* @param node
|
||||
* @return the (byte[]) canonicalization of the node
|
||||
* @throws Exception
|
||||
*/
|
||||
byte[] canonSerializeToByteArray(Node node) throws Exception;
|
||||
|
||||
/**
|
||||
* @param source
|
||||
* @param ctx
|
||||
* @return the Node resulting from the parse of the source
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
Node deserialize(byte[] source, Node ctx) throws XMLEncryptionException;
|
||||
}
|
||||
@ -2,27 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* A container for <code>ds:Transform</code>s.
|
||||
* <p>
|
||||
@ -40,36 +39,12 @@ package com.sun.org.apache.xml.internal.security.encryption;
|
||||
*/
|
||||
public interface Transforms {
|
||||
/**
|
||||
* Returns an <code>Iterator</code> over all the transforms contained in
|
||||
* this transform list.
|
||||
*
|
||||
* @return all transforms.
|
||||
* Temporary method to turn the XMLEncryption Transforms class
|
||||
* into a DS class. The main logic is currently implemented in the
|
||||
* DS class, so we need to get to get the base class.
|
||||
* <p>
|
||||
* <b>Note</b> This will be removed in future versions
|
||||
*/
|
||||
/* Iterator getTransforms(); */
|
||||
|
||||
/**
|
||||
* Adds a <code>ds:Transform</code> to the list of transforms.
|
||||
*
|
||||
* @param transform.
|
||||
*/
|
||||
/* void addTransform(Transform transform); */
|
||||
|
||||
/**
|
||||
* Removes the specified transform.
|
||||
*
|
||||
* @param transform.
|
||||
*/
|
||||
/* void removeTransform(Transform transform); */
|
||||
|
||||
/**
|
||||
* Temporary method to turn the XMLEncryption Transforms class
|
||||
* into a DS class. The main logic is currently implemented in the
|
||||
* DS class, so we need to get to get the base class.
|
||||
* <p>
|
||||
* <b>Note</b> This will be removed in future versions
|
||||
* @return
|
||||
*/
|
||||
|
||||
com.sun.org.apache.xml.internal.security.transforms.Transforms getDSTransforms();
|
||||
com.sun.org.apache.xml.internal.security.transforms.Transforms getDSTransforms();
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,23 +2,24 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -32,7 +33,6 @@ import com.sun.org.apache.xml.internal.security.transforms.TransformationExcepti
|
||||
import org.w3c.dom.Attr;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Base64;
|
||||
|
||||
|
||||
/**
|
||||
* <code>XMLCipherInput</code> is used to wrap input passed into the
|
||||
* XMLCipher encryption operations.
|
||||
@ -50,77 +50,79 @@ import com.sun.org.apache.xml.internal.security.utils.Base64;
|
||||
public class XMLCipherInput {
|
||||
|
||||
private static java.util.logging.Logger logger =
|
||||
java.util.logging.Logger.getLogger(XMLCipher.class.getName());
|
||||
java.util.logging.Logger.getLogger(XMLCipherInput.class.getName());
|
||||
|
||||
/** The data we are working with */
|
||||
private CipherData _cipherData;
|
||||
/** The data we are working with */
|
||||
private CipherData cipherData;
|
||||
|
||||
/** MODES */
|
||||
private int _mode;
|
||||
/** MODES */
|
||||
private int mode;
|
||||
|
||||
/**
|
||||
* Constructor for processing encrypted octets
|
||||
*
|
||||
* @param data The <code>CipherData</code> object to read the bytes from
|
||||
* @throws XMLEncryptionException {@link XMLEncryptionException}
|
||||
*/
|
||||
|
||||
public XMLCipherInput(CipherData data) throws XMLEncryptionException {
|
||||
|
||||
_cipherData = data;
|
||||
_mode = XMLCipher.DECRYPT_MODE;
|
||||
if (_cipherData == null) {
|
||||
throw new XMLEncryptionException("CipherData is null");
|
||||
}
|
||||
private boolean secureValidation;
|
||||
|
||||
/**
|
||||
* Constructor for processing encrypted octets
|
||||
*
|
||||
* @param data The <code>CipherData</code> object to read the bytes from
|
||||
* @throws XMLEncryptionException {@link XMLEncryptionException}
|
||||
*/
|
||||
public XMLCipherInput(CipherData data) throws XMLEncryptionException {
|
||||
cipherData = data;
|
||||
mode = XMLCipher.DECRYPT_MODE;
|
||||
if (cipherData == null) {
|
||||
throw new XMLEncryptionException("CipherData is null");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for processing encrypted octets
|
||||
*
|
||||
* @param input The <code>EncryptedType</code> object to read
|
||||
* the bytes from.
|
||||
* @throws XMLEncryptionException {@link XMLEncryptionException}
|
||||
*/
|
||||
|
||||
public XMLCipherInput(EncryptedType input) throws XMLEncryptionException {
|
||||
|
||||
_cipherData = ((input == null) ? null : input.getCipherData());
|
||||
_mode = XMLCipher.DECRYPT_MODE;
|
||||
if (_cipherData == null) {
|
||||
throw new XMLEncryptionException("CipherData is null");
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for processing encrypted octets
|
||||
*
|
||||
* @param input The <code>EncryptedType</code> object to read
|
||||
* the bytes from.
|
||||
* @throws XMLEncryptionException {@link XMLEncryptionException}
|
||||
*/
|
||||
public XMLCipherInput(EncryptedType input) throws XMLEncryptionException {
|
||||
cipherData = ((input == null) ? null : input.getCipherData());
|
||||
mode = XMLCipher.DECRYPT_MODE;
|
||||
if (cipherData == null) {
|
||||
throw new XMLEncryptionException("CipherData is null");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dereferences the input and returns it as a single byte array.
|
||||
*
|
||||
* @throws XMLEncryptionException
|
||||
/**
|
||||
* Set whether secure validation is enabled or not. The default is false.
|
||||
*/
|
||||
public void setSecureValidation(boolean secureValidation) {
|
||||
this.secureValidation = secureValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dereferences the input and returns it as a single byte array.
|
||||
*
|
||||
* @throws XMLEncryptionException
|
||||
* @return The decripted bytes.
|
||||
*/
|
||||
|
||||
public byte[] getBytes() throws XMLEncryptionException {
|
||||
|
||||
if (_mode == XMLCipher.DECRYPT_MODE) {
|
||||
return getDecryptBytes();
|
||||
}
|
||||
return null;
|
||||
*/
|
||||
public byte[] getBytes() throws XMLEncryptionException {
|
||||
if (mode == XMLCipher.DECRYPT_MODE) {
|
||||
return getDecryptBytes();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal method to get bytes in decryption mode
|
||||
* @return the decripted bytes
|
||||
* @return the decrypted bytes
|
||||
* @throws XMLEncryptionException
|
||||
*/
|
||||
private byte[] getDecryptBytes() throws XMLEncryptionException {
|
||||
|
||||
String base64EncodedEncryptedOctets = null;
|
||||
|
||||
if (_cipherData.getDataType() == CipherData.REFERENCE_TYPE) {
|
||||
if (cipherData.getDataType() == CipherData.REFERENCE_TYPE) {
|
||||
// Fun time!
|
||||
logger.log(java.util.logging.Level.FINE, "Found a reference type CipherData");
|
||||
CipherReference cr = _cipherData.getCipherReference();
|
||||
if (logger.isLoggable(java.util.logging.Level.FINE)) {
|
||||
logger.log(java.util.logging.Level.FINE, "Found a reference type CipherData");
|
||||
}
|
||||
CipherReference cr = cipherData.getCipherReference();
|
||||
|
||||
// Need to wrap the uri in an Attribute node so that we can
|
||||
// Pass to the resource resolvers
|
||||
@ -130,25 +132,32 @@ public class XMLCipherInput {
|
||||
|
||||
try {
|
||||
ResourceResolver resolver =
|
||||
ResourceResolver.getInstance(uriAttr, null);
|
||||
input = resolver.resolve(uriAttr, null);
|
||||
ResourceResolver.getInstance(uriAttr, null, secureValidation);
|
||||
input = resolver.resolve(uriAttr, null, secureValidation);
|
||||
} catch (ResourceResolverException ex) {
|
||||
throw new XMLEncryptionException("empty", ex);
|
||||
}
|
||||
|
||||
if (input != null) {
|
||||
logger.log(java.util.logging.Level.FINE, "Managed to resolve URI \"" + cr.getURI() + "\"");
|
||||
if (logger.isLoggable(java.util.logging.Level.FINE)) {
|
||||
logger.log(java.util.logging.Level.FINE, "Managed to resolve URI \"" + cr.getURI() + "\"");
|
||||
}
|
||||
} else {
|
||||
logger.log(java.util.logging.Level.FINE, "Failed to resolve URI \"" + cr.getURI() + "\"");
|
||||
if (logger.isLoggable(java.util.logging.Level.FINE)) {
|
||||
logger.log(java.util.logging.Level.FINE, "Failed to resolve URI \"" + cr.getURI() + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
// Lets see if there are any transforms
|
||||
Transforms transforms = cr.getTransforms();
|
||||
if (transforms != null) {
|
||||
logger.log(java.util.logging.Level.FINE, "Have transforms in cipher reference");
|
||||
if (logger.isLoggable(java.util.logging.Level.FINE)) {
|
||||
logger.log(java.util.logging.Level.FINE, "Have transforms in cipher reference");
|
||||
}
|
||||
try {
|
||||
com.sun.org.apache.xml.internal.security.transforms.Transforms dsTransforms =
|
||||
transforms.getDSTransforms();
|
||||
dsTransforms.setSecureValidation(secureValidation);
|
||||
input = dsTransforms.performTransforms(input);
|
||||
} catch (TransformationException ex) {
|
||||
throw new XMLEncryptionException("empty", ex);
|
||||
@ -163,23 +172,21 @@ public class XMLCipherInput {
|
||||
throw new XMLEncryptionException("empty", ex);
|
||||
}
|
||||
|
||||
// retrieve the cipher text
|
||||
} else if (_cipherData.getDataType() == CipherData.VALUE_TYPE) {
|
||||
base64EncodedEncryptedOctets =
|
||||
_cipherData.getCipherValue().getValue();
|
||||
// retrieve the cipher text
|
||||
} else if (cipherData.getDataType() == CipherData.VALUE_TYPE) {
|
||||
base64EncodedEncryptedOctets = cipherData.getCipherValue().getValue();
|
||||
} else {
|
||||
throw new XMLEncryptionException("CipherData.getDataType() returned unexpected value");
|
||||
}
|
||||
|
||||
logger.log(java.util.logging.Level.FINE, "Encrypted octets:\n" + base64EncodedEncryptedOctets);
|
||||
if (logger.isLoggable(java.util.logging.Level.FINE)) {
|
||||
logger.log(java.util.logging.Level.FINE, "Encrypted octets:\n" + base64EncodedEncryptedOctets);
|
||||
}
|
||||
|
||||
byte[] encryptedBytes = null;
|
||||
try {
|
||||
encryptedBytes = Base64.decode(base64EncodedEncryptedOctets);
|
||||
return Base64.decode(base64EncodedEncryptedOctets);
|
||||
} catch (Base64DecodingException bde) {
|
||||
throw new XMLEncryptionException("empty", bde);
|
||||
}
|
||||
|
||||
return (encryptedBytes);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,104 +2,85 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
|
||||
/**
|
||||
* Constants
|
||||
*/
|
||||
public interface XMLCipherParameters {
|
||||
|
||||
/** */
|
||||
public static final String AES_128 =
|
||||
String AES_128 =
|
||||
"http://www.w3.org/2001/04/xmlenc#aes128-cbc";
|
||||
|
||||
/** */
|
||||
public static final String AES_256 =
|
||||
String AES_256 =
|
||||
"http://www.w3.org/2001/04/xmlenc#aes256-cbc";
|
||||
|
||||
/** */
|
||||
public static final String AES_192 =
|
||||
String AES_192 =
|
||||
"http://www.w3.org/2001/04/xmlenc#aes192-cbc";
|
||||
|
||||
/** */
|
||||
public static final String RSA_1_5 =
|
||||
String RSA_1_5 =
|
||||
"http://www.w3.org/2001/04/xmlenc#rsa-1_5";
|
||||
|
||||
/** */
|
||||
public static final String RSA_OAEP =
|
||||
String RSA_OAEP =
|
||||
"http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p";
|
||||
|
||||
/** */
|
||||
public static final String DIFFIE_HELLMAN =
|
||||
String DIFFIE_HELLMAN =
|
||||
"http://www.w3.org/2001/04/xmlenc#dh";
|
||||
|
||||
/** */
|
||||
public static final String TRIPLEDES_KEYWRAP =
|
||||
String TRIPLEDES_KEYWRAP =
|
||||
"http://www.w3.org/2001/04/xmlenc#kw-tripledes";
|
||||
|
||||
/** */
|
||||
public static final String AES_128_KEYWRAP =
|
||||
String AES_128_KEYWRAP =
|
||||
"http://www.w3.org/2001/04/xmlenc#kw-aes128";
|
||||
|
||||
/** */
|
||||
public static final String AES_256_KEYWRAP =
|
||||
String AES_256_KEYWRAP =
|
||||
"http://www.w3.org/2001/04/xmlenc#kw-aes256";
|
||||
|
||||
/** */
|
||||
public static final String AES_192_KEYWRAP =
|
||||
String AES_192_KEYWRAP =
|
||||
"http://www.w3.org/2001/04/xmlenc#kw-aes192";
|
||||
|
||||
/** */
|
||||
public static final String SHA1 =
|
||||
String SHA1 =
|
||||
"http://www.w3.org/2000/09/xmldsig#sha1";
|
||||
|
||||
/** */
|
||||
public static final String SHA256 =
|
||||
String SHA256 =
|
||||
"http://www.w3.org/2001/04/xmlenc#sha256";
|
||||
|
||||
/** */
|
||||
public static final String SHA512 =
|
||||
String SHA512 =
|
||||
"http://www.w3.org/2001/04/xmlenc#sha512";
|
||||
|
||||
/** */
|
||||
public static final String RIPEMD_160 =
|
||||
String RIPEMD_160 =
|
||||
"http://www.w3.org/2001/04/xmlenc#ripemd160";
|
||||
|
||||
/** */
|
||||
public static final String XML_DSIG =
|
||||
String XML_DSIG =
|
||||
"http://www.w3.org/2000/09/xmldsig#";
|
||||
|
||||
/** */
|
||||
public static final String N14C_XML =
|
||||
String N14C_XML =
|
||||
"http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
|
||||
|
||||
/** */
|
||||
public static final String N14C_XML_CMMNTS =
|
||||
String N14C_XML_CMMNTS =
|
||||
"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments";
|
||||
|
||||
/** */
|
||||
public static final String EXCL_XML_N14C =
|
||||
String EXCL_XML_N14C =
|
||||
"http://www.w3.org/2001/10/xml-exc-c14n#";
|
||||
|
||||
/** */
|
||||
public static final String EXCL_XML_N14C_CMMNTS =
|
||||
String EXCL_XML_N14C_CMMNTS =
|
||||
"http://www.w3.org/2001/10/xml-exc-c14n#WithComments";
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 2003-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.encryption;
|
||||
|
||||
@ -26,49 +28,53 @@ import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
*
|
||||
*/
|
||||
public class XMLEncryptionException extends XMLSecurityException {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
public XMLEncryptionException() {
|
||||
super();
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public XMLEncryptionException(String _msgID) {
|
||||
super(_msgID);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public XMLEncryptionException(String _msgID, Object exArgs[]) {
|
||||
super(_msgID, exArgs);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLEncryptionException(String _msgID,
|
||||
Exception _originalException) {
|
||||
super(_msgID, _originalException);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLEncryptionException(String _msgID, Object exArgs[],
|
||||
Exception _originalException) {
|
||||
super(_msgID, exArgs, _originalException);
|
||||
}
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
public XMLEncryptionException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public XMLEncryptionException(String msgID) {
|
||||
super(msgID);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public XMLEncryptionException(String msgID, Object exArgs[]) {
|
||||
super(msgID, exArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLEncryptionException(String msgID, Exception originalException) {
|
||||
super(msgID, originalException);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLEncryptionException(String msgID, Object exArgs[], Exception originalException) {
|
||||
super(msgID, exArgs, originalException);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,88 +2,80 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.exceptions;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* @author Christian Geuer-Pollmann
|
||||
*
|
||||
*/
|
||||
public class AlgorithmAlreadyRegisteredException extends XMLSecurityException {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException() {
|
||||
super();
|
||||
}
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(String msgID) {
|
||||
super(msgID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(String _msgID) {
|
||||
super(_msgID);
|
||||
}
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(String msgID, Object exArgs[]) {
|
||||
super(msgID, exArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(String _msgID, Object exArgs[]) {
|
||||
super(_msgID, exArgs);
|
||||
}
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(String msgID, Exception originalException) {
|
||||
super(msgID, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(String _msgID,
|
||||
Exception _originalException) {
|
||||
super(_msgID, _originalException);
|
||||
}
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(
|
||||
String msgID, Object exArgs[], Exception originalException
|
||||
) {
|
||||
super(msgID, exArgs, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor AlgorithmAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public AlgorithmAlreadyRegisteredException(String _msgID, Object exArgs[],
|
||||
Exception _originalException) {
|
||||
super(_msgID, exArgs, _originalException);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,26 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.exceptions;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* This Exception is thrown if decoding of Base64 data fails.
|
||||
*
|
||||
@ -29,58 +29,54 @@ package com.sun.org.apache.xml.internal.security.exceptions;
|
||||
*/
|
||||
public class Base64DecodingException extends XMLSecurityException {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
*/
|
||||
public Base64DecodingException() {
|
||||
super();
|
||||
}
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
*/
|
||||
public Base64DecodingException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public Base64DecodingException(String _msgID) {
|
||||
super(_msgID);
|
||||
}
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public Base64DecodingException(String msgID) {
|
||||
super(msgID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public Base64DecodingException(String _msgID, Object exArgs[]) {
|
||||
super(_msgID, exArgs);
|
||||
}
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public Base64DecodingException(String msgID, Object exArgs[]) {
|
||||
super(msgID, exArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public Base64DecodingException(String _msgID,
|
||||
Exception _originalException) {
|
||||
super(_msgID, _originalException);
|
||||
}
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public Base64DecodingException(String msgID, Exception originalException) {
|
||||
super(msgID, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public Base64DecodingException(String msgID, Object exArgs[], Exception originalException) {
|
||||
super(msgID, exArgs, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor Base64DecodingException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public Base64DecodingException(String _msgID, Object exArgs[],
|
||||
Exception _originalException) {
|
||||
super(_msgID, exArgs, _originalException);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,26 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.exceptions;
|
||||
|
||||
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.text.MessageFormat;
|
||||
@ -29,7 +29,6 @@ import java.text.MessageFormat;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Constants;
|
||||
import com.sun.org.apache.xml.internal.security.utils.I18n;
|
||||
|
||||
|
||||
/**
|
||||
* The mother of all Exceptions in this bundle. It allows exceptions to have
|
||||
* their messages translated to the different locales.
|
||||
@ -64,186 +63,154 @@ import com.sun.org.apache.xml.internal.security.utils.I18n;
|
||||
*/
|
||||
public class XMLSecurityException extends Exception {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** Field msgID */
|
||||
protected String msgID;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
*/
|
||||
public XMLSecurityException() {
|
||||
super("Missing message string");
|
||||
|
||||
/** Field originalException */
|
||||
protected Exception originalException = null;
|
||||
this.msgID = null;
|
||||
}
|
||||
|
||||
/** Field msgID */
|
||||
protected String msgID;
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public XMLSecurityException(String msgID) {
|
||||
super(I18n.getExceptionMessage(msgID));
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
*/
|
||||
public XMLSecurityException() {
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
super("Missing message string");
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public XMLSecurityException(String msgID, Object exArgs[]) {
|
||||
|
||||
this.msgID = null;
|
||||
this.originalException = null;
|
||||
}
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs));
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public XMLSecurityException(String _msgID) {
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
super(I18n.getExceptionMessage(_msgID));
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLSecurityException(Exception originalException) {
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = null;
|
||||
}
|
||||
super("Missing message ID to locate message string in resource bundle \""
|
||||
+ Constants.exceptionMessagesResourceBundleBase
|
||||
+ "\". Original Exception was a "
|
||||
+ originalException.getClass().getName() + " and message "
|
||||
+ originalException.getMessage(), originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public XMLSecurityException(String _msgID, Object exArgs[]) {
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLSecurityException(String msgID, Exception originalException) {
|
||||
super(I18n.getExceptionMessage(msgID, originalException), originalException);
|
||||
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(_msgID), exArgs));
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = null;
|
||||
}
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLSecurityException(String msgID, Object exArgs[], Exception originalException) {
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs), originalException);
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLSecurityException(Exception _originalException) {
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
super("Missing message ID to locate message string in resource bundle \""
|
||||
+ Constants.exceptionMessagesResourceBundleBase
|
||||
+ "\". Original Exception was a "
|
||||
+ _originalException.getClass().getName() + " and message "
|
||||
+ _originalException.getMessage());
|
||||
/**
|
||||
* Method getMsgID
|
||||
*
|
||||
* @return the messageId
|
||||
*/
|
||||
public String getMsgID() {
|
||||
if (msgID == null) {
|
||||
return "Missing message ID";
|
||||
}
|
||||
return msgID;
|
||||
}
|
||||
|
||||
this.originalException = _originalException;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String toString() {
|
||||
String s = this.getClass().getName();
|
||||
String message = super.getLocalizedMessage();
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLSecurityException(String _msgID, Exception _originalException) {
|
||||
if (message != null) {
|
||||
message = s + ": " + message;
|
||||
} else {
|
||||
message = s;
|
||||
}
|
||||
|
||||
super(I18n.getExceptionMessage(_msgID, _originalException));
|
||||
if (super.getCause() != null) {
|
||||
message = message + "\nOriginal Exception was " + super.getCause().toString();
|
||||
}
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = _originalException;
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLSecurityException(String _msgID, Object exArgs[],
|
||||
Exception _originalException) {
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
*/
|
||||
public void printStackTrace() {
|
||||
synchronized (System.err) {
|
||||
super.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(_msgID), exArgs));
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printwriter
|
||||
*/
|
||||
public void printStackTrace(PrintWriter printwriter) {
|
||||
super.printStackTrace(printwriter);
|
||||
}
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = _originalException;
|
||||
}
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printstream
|
||||
*/
|
||||
public void printStackTrace(PrintStream printstream) {
|
||||
super.printStackTrace(printstream);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getMsgID
|
||||
*
|
||||
* @return the messageId
|
||||
*/
|
||||
public String getMsgID() {
|
||||
|
||||
if (msgID == null) {
|
||||
return "Missing message ID";
|
||||
}
|
||||
return msgID;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String toString() {
|
||||
|
||||
String s = this.getClass().getName();
|
||||
String message = super.getLocalizedMessage();
|
||||
|
||||
if (message != null) {
|
||||
message = s + ": " + message;
|
||||
} else {
|
||||
message = s;
|
||||
}
|
||||
|
||||
if (originalException != null) {
|
||||
message = message + "\nOriginal Exception was "
|
||||
+ originalException.toString();
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
*/
|
||||
public void printStackTrace() {
|
||||
|
||||
synchronized (System.err) {
|
||||
super.printStackTrace(System.err);
|
||||
|
||||
if (this.originalException != null) {
|
||||
this.originalException.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printwriter
|
||||
*/
|
||||
public void printStackTrace(PrintWriter printwriter) {
|
||||
|
||||
super.printStackTrace(printwriter);
|
||||
|
||||
if (this.originalException != null) {
|
||||
this.originalException.printStackTrace(printwriter);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printstream
|
||||
*/
|
||||
public void printStackTrace(PrintStream printstream) {
|
||||
|
||||
super.printStackTrace(printstream);
|
||||
|
||||
if (this.originalException != null) {
|
||||
this.originalException.printStackTrace(printstream);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getOriginalException
|
||||
*
|
||||
* @return the original exception
|
||||
*/
|
||||
public Exception getOriginalException() {
|
||||
return originalException;
|
||||
}
|
||||
/**
|
||||
* Method getOriginalException
|
||||
*
|
||||
* @return the original exception
|
||||
*/
|
||||
public Exception getOriginalException() {
|
||||
if (this.getCause() instanceof Exception) {
|
||||
return (Exception)this.getCause();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,25 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.exceptions;
|
||||
|
||||
import java.io.PrintStream;
|
||||
@ -39,186 +61,152 @@ import com.sun.org.apache.xml.internal.security.utils.I18n;
|
||||
*
|
||||
* @author Christian Geuer-Pollmann
|
||||
*/
|
||||
public class XMLSecurityRuntimeException
|
||||
extends RuntimeException {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class XMLSecurityRuntimeException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** Field originalException */
|
||||
protected Exception originalException = null;
|
||||
/** Field msgID */
|
||||
protected String msgID;
|
||||
|
||||
/** Field msgID */
|
||||
protected String msgID;
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
*/
|
||||
public XMLSecurityRuntimeException() {
|
||||
super("Missing message string");
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
*/
|
||||
public XMLSecurityRuntimeException() {
|
||||
this.msgID = null;
|
||||
}
|
||||
|
||||
super("Missing message string");
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String msgID) {
|
||||
super(I18n.getExceptionMessage(msgID));
|
||||
|
||||
this.msgID = null;
|
||||
this.originalException = null;
|
||||
}
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String _msgID) {
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String msgID, Object exArgs[]) {
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs));
|
||||
|
||||
super(I18n.getExceptionMessage(_msgID));
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = null;
|
||||
}
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLSecurityRuntimeException(Exception originalException) {
|
||||
super("Missing message ID to locate message string in resource bundle \""
|
||||
+ Constants.exceptionMessagesResourceBundleBase
|
||||
+ "\". Original Exception was a "
|
||||
+ originalException.getClass().getName() + " and message "
|
||||
+ originalException.getMessage(), originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String _msgID, Object exArgs[]) {
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String msgID, Exception originalException) {
|
||||
super(I18n.getExceptionMessage(msgID, originalException), originalException);
|
||||
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(_msgID), exArgs));
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = null;
|
||||
}
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String msgID, Object exArgs[], Exception originalException) {
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs));
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLSecurityRuntimeException(Exception _originalException) {
|
||||
this.msgID = msgID;
|
||||
}
|
||||
|
||||
super("Missing message ID to locate message string in resource bundle \""
|
||||
+ Constants.exceptionMessagesResourceBundleBase
|
||||
+ "\". Original Exception was a "
|
||||
+ _originalException.getClass().getName() + " and message "
|
||||
+ _originalException.getMessage());
|
||||
/**
|
||||
* Method getMsgID
|
||||
*
|
||||
* @return the messageId
|
||||
*/
|
||||
public String getMsgID() {
|
||||
if (msgID == null) {
|
||||
return "Missing message ID";
|
||||
}
|
||||
return msgID;
|
||||
}
|
||||
|
||||
this.originalException = _originalException;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String toString() {
|
||||
String s = this.getClass().getName();
|
||||
String message = super.getLocalizedMessage();
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String _msgID, Exception _originalException) {
|
||||
if (message != null) {
|
||||
message = s + ": " + message;
|
||||
} else {
|
||||
message = s;
|
||||
}
|
||||
|
||||
super(I18n.getExceptionMessage(_msgID, _originalException));
|
||||
if (this.getCause() != null) {
|
||||
message = message + "\nOriginal Exception was " + this.getCause().toString();
|
||||
}
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = _originalException;
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor XMLSecurityRuntimeException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public XMLSecurityRuntimeException(String _msgID, Object exArgs[],
|
||||
Exception _originalException) {
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
*/
|
||||
public void printStackTrace() {
|
||||
synchronized (System.err) {
|
||||
super.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
super(MessageFormat.format(I18n.getExceptionMessage(_msgID), exArgs));
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printwriter
|
||||
*/
|
||||
public void printStackTrace(PrintWriter printwriter) {
|
||||
super.printStackTrace(printwriter);
|
||||
}
|
||||
|
||||
this.msgID = _msgID;
|
||||
this.originalException = _originalException;
|
||||
}
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printstream
|
||||
*/
|
||||
public void printStackTrace(PrintStream printstream) {
|
||||
super.printStackTrace(printstream);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getMsgID
|
||||
*
|
||||
* @return the messageId
|
||||
*/
|
||||
public String getMsgID() {
|
||||
/**
|
||||
* Method getOriginalException
|
||||
*
|
||||
* @return the original exception
|
||||
*/
|
||||
public Exception getOriginalException() {
|
||||
if (this.getCause() instanceof Exception) {
|
||||
return (Exception)this.getCause();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
if (msgID == null) {
|
||||
return "Missing message ID";
|
||||
}
|
||||
return msgID;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String toString() {
|
||||
|
||||
String s = this.getClass().getName();
|
||||
String message = super.getLocalizedMessage();
|
||||
|
||||
if (message != null) {
|
||||
message = s + ": " + message;
|
||||
} else {
|
||||
message = s;
|
||||
}
|
||||
|
||||
if (originalException != null) {
|
||||
message = message + "\nOriginal Exception was "
|
||||
+ originalException.toString();
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
*/
|
||||
public void printStackTrace() {
|
||||
|
||||
synchronized (System.err) {
|
||||
super.printStackTrace(System.err);
|
||||
|
||||
if (this.originalException != null) {
|
||||
this.originalException.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printwriter
|
||||
*/
|
||||
public void printStackTrace(PrintWriter printwriter) {
|
||||
|
||||
super.printStackTrace(printwriter);
|
||||
|
||||
if (this.originalException != null) {
|
||||
this.originalException.printStackTrace(printwriter);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method printStackTrace
|
||||
*
|
||||
* @param printstream
|
||||
*/
|
||||
public void printStackTrace(PrintStream printstream) {
|
||||
|
||||
super.printStackTrace(printstream);
|
||||
|
||||
if (this.originalException != null) {
|
||||
this.originalException.printStackTrace(printstream);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getOriginalException
|
||||
*
|
||||
* @return the original exception
|
||||
*/
|
||||
public Exception getOriginalException() {
|
||||
return originalException;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,89 +2,83 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
|
||||
public class ContentHandlerAlreadyRegisteredException extends XMLSecurityException {
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
*/
|
||||
public class ContentHandlerAlreadyRegisteredException
|
||||
extends XMLSecurityException {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException() {
|
||||
super();
|
||||
}
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(String msgID) {
|
||||
super(msgID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(String _msgID) {
|
||||
super(_msgID);
|
||||
}
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(String msgID, Object exArgs[]) {
|
||||
super(msgID, exArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(String _msgID,
|
||||
Object exArgs[]) {
|
||||
super(_msgID, exArgs);
|
||||
}
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
* @param originalException
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(String msgID, Exception originalException) {
|
||||
super(msgID, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param _originalException
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(String _msgID,
|
||||
Exception _originalException) {
|
||||
super(_msgID, _originalException);
|
||||
}
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param msgID
|
||||
* @param exArgs
|
||||
* @param originalException
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(
|
||||
String msgID, Object exArgs[], Exception originalException
|
||||
) {
|
||||
super(msgID, exArgs, originalException);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor ContentHandlerAlreadyRegisteredException
|
||||
*
|
||||
* @param _msgID
|
||||
* @param exArgs
|
||||
* @param _originalException
|
||||
*/
|
||||
public ContentHandlerAlreadyRegisteredException(String _msgID,
|
||||
Object exArgs[], Exception _originalException) {
|
||||
super(_msgID, exArgs, _originalException);
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,26 +2,26 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys;
|
||||
|
||||
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.security.PublicKey;
|
||||
|
||||
@ -31,57 +31,53 @@ import com.sun.org.apache.xml.internal.security.keys.content.KeyValue;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.MgmtData;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.X509Data;
|
||||
|
||||
|
||||
/**
|
||||
* Utility class for for <CODE>com.sun.org.apache.xml.internal.security.keys</CODE> package.
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: coheigea $
|
||||
*/
|
||||
public class KeyUtils {
|
||||
|
||||
private KeyUtils() {
|
||||
// no instantiation
|
||||
}
|
||||
private KeyUtils() {
|
||||
// no instantiation
|
||||
}
|
||||
|
||||
/**
|
||||
* Method prinoutKeyInfo
|
||||
*
|
||||
* @param ki
|
||||
* @param os
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public static void prinoutKeyInfo(KeyInfo ki, PrintStream os)
|
||||
throws XMLSecurityException {
|
||||
/**
|
||||
* Method prinoutKeyInfo
|
||||
*
|
||||
* @param ki
|
||||
* @param os
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public static void prinoutKeyInfo(KeyInfo ki, PrintStream os)
|
||||
throws XMLSecurityException {
|
||||
|
||||
for (int i = 0; i < ki.lengthKeyName(); i++) {
|
||||
KeyName x = ki.itemKeyName(i);
|
||||
for (int i = 0; i < ki.lengthKeyName(); i++) {
|
||||
KeyName x = ki.itemKeyName(i);
|
||||
|
||||
os.println("KeyName(" + i + ")=\"" + x.getKeyName() + "\"");
|
||||
}
|
||||
os.println("KeyName(" + i + ")=\"" + x.getKeyName() + "\"");
|
||||
}
|
||||
|
||||
for (int i = 0; i < ki.lengthKeyValue(); i++) {
|
||||
KeyValue x = ki.itemKeyValue(i);
|
||||
PublicKey pk = x.getPublicKey();
|
||||
for (int i = 0; i < ki.lengthKeyValue(); i++) {
|
||||
KeyValue x = ki.itemKeyValue(i);
|
||||
PublicKey pk = x.getPublicKey();
|
||||
|
||||
os.println("KeyValue Nr. " + i);
|
||||
os.println(pk);
|
||||
}
|
||||
os.println("KeyValue Nr. " + i);
|
||||
os.println(pk);
|
||||
}
|
||||
|
||||
for (int i = 0; i < ki.lengthMgmtData(); i++) {
|
||||
MgmtData x = ki.itemMgmtData(i);
|
||||
for (int i = 0; i < ki.lengthMgmtData(); i++) {
|
||||
MgmtData x = ki.itemMgmtData(i);
|
||||
|
||||
os.println("MgmtData(" + i + ")=\"" + x.getMgmtData() + "\"");
|
||||
}
|
||||
os.println("MgmtData(" + i + ")=\"" + x.getMgmtData() + "\"");
|
||||
}
|
||||
|
||||
for (int i = 0; i < ki.lengthX509Data(); i++) {
|
||||
X509Data x = ki.itemX509Data(i);
|
||||
for (int i = 0; i < ki.lengthX509Data(); i++) {
|
||||
X509Data x = ki.itemX509Data(i);
|
||||
|
||||
os.println("X509Data(" + i + ")=\"" + (x.containsCertificate()
|
||||
? "Certificate "
|
||||
: "") + (x
|
||||
.containsIssuerSerial()
|
||||
? "IssuerSerial "
|
||||
: "") + "\"");
|
||||
}
|
||||
}
|
||||
os.println("X509Data(" + i + ")=\"" + (x.containsCertificate()
|
||||
? "Certificate " : "") + (x.containsIssuerSerial()
|
||||
? "IssuerSerial " : "") + "\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,158 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
import java.security.KeyFactory;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.PublicKey;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Constants;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Signature11ElementProxy;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* Provides content model support for the <code>dsig11:DEREncodedKeyvalue</code> element.
|
||||
*
|
||||
* @author Brent Putman (putmanb@georgetown.edu)
|
||||
*/
|
||||
public class DEREncodedKeyValue extends Signature11ElementProxy implements KeyInfoContent {
|
||||
|
||||
/** JCA algorithm key types supported by this implementation. */
|
||||
public static final String supportedKeyTypes[] = { "RSA", "DSA", "EC"};
|
||||
|
||||
/**
|
||||
* Constructor DEREncodedKeyValue
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public DEREncodedKeyValue(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor DEREncodedKeyValue
|
||||
*
|
||||
* @param doc
|
||||
* @param publicKey
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public DEREncodedKeyValue(Document doc, PublicKey publicKey) throws XMLSecurityException {
|
||||
super(doc);
|
||||
|
||||
this.addBase64Text(getEncodedDER(publicKey));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor DEREncodedKeyValue
|
||||
*
|
||||
* @param doc
|
||||
* @param base64EncodedKey
|
||||
*/
|
||||
public DEREncodedKeyValue(Document doc, byte[] encodedKey) {
|
||||
super(doc);
|
||||
|
||||
this.addBase64Text(encodedKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the <code>Id</code> attribute
|
||||
*
|
||||
* @param Id ID
|
||||
*/
|
||||
public void setId(String id) {
|
||||
if (id != null) {
|
||||
this.constructionElement.setAttributeNS(null, Constants._ATT_ID, id);
|
||||
this.constructionElement.setIdAttributeNS(null, Constants._ATT_ID, true);
|
||||
} else {
|
||||
this.constructionElement.removeAttributeNS(null, Constants._ATT_ID);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the <code>Id</code> attribute
|
||||
*
|
||||
* @return the <code>Id</code> attribute
|
||||
*/
|
||||
public String getId() {
|
||||
return this.constructionElement.getAttributeNS(null, Constants._ATT_ID);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_DERENCODEDKEYVALUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getPublicKey
|
||||
*
|
||||
* @return the public key
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public PublicKey getPublicKey() throws XMLSecurityException {
|
||||
byte[] encodedKey = getBytesFromTextChild();
|
||||
|
||||
// Iterate over the supported key types until one produces a public key.
|
||||
for (String keyType : supportedKeyTypes) {
|
||||
try {
|
||||
KeyFactory keyFactory = KeyFactory.getInstance(keyType);
|
||||
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encodedKey);
|
||||
PublicKey publicKey = keyFactory.generatePublic(keySpec);
|
||||
if (publicKey != null) {
|
||||
return publicKey;
|
||||
}
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
// Do nothing, try the next type
|
||||
} catch (InvalidKeySpecException e) {
|
||||
// Do nothing, try the next type
|
||||
}
|
||||
}
|
||||
throw new XMLSecurityException("DEREncodedKeyValue.UnsupportedEncodedKey");
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getEncodedDER
|
||||
*
|
||||
* @return the public key
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
protected byte[] getEncodedDER(PublicKey publicKey) throws XMLSecurityException {
|
||||
try {
|
||||
KeyFactory keyFactory = KeyFactory.getInstance(publicKey.getAlgorithm());
|
||||
X509EncodedKeySpec keySpec = keyFactory.getKeySpec(publicKey, X509EncodedKeySpec.class);
|
||||
return keySpec.getEncoded();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
Object exArgs[] = { publicKey.getAlgorithm(), publicKey.getFormat(), publicKey.getClass().getName() };
|
||||
throw new XMLSecurityException("DEREncodedKeyValue.UnsupportedPublicKey", exArgs, e);
|
||||
} catch (InvalidKeySpecException e) {
|
||||
Object exArgs[] = { publicKey.getAlgorithm(), publicKey.getFormat(), publicKey.getClass().getName() };
|
||||
throw new XMLSecurityException("DEREncodedKeyValue.UnsupportedPublicKey", exArgs, e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,32 +2,30 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Empty interface just to identify Elements that can be cildren of ds:KeyInfo.
|
||||
* Empty interface just to identify Elements that can be children of ds:KeyInfo.
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: coheigea $
|
||||
*/
|
||||
public interface KeyInfoContent {
|
||||
}
|
||||
|
||||
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Constants;
|
||||
import com.sun.org.apache.xml.internal.security.utils.Signature11ElementProxy;
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* Provides content model support for the <code>dsig11:KeyInfoReference</code> element.
|
||||
*
|
||||
* @author Brent Putman (putmanb@georgetown.edu)
|
||||
*/
|
||||
public class KeyInfoReference extends Signature11ElementProxy implements KeyInfoContent {
|
||||
|
||||
/**
|
||||
* Constructor RetrievalMethod
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public KeyInfoReference(Element element, String baseURI) throws XMLSecurityException {
|
||||
super(element, baseURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor RetrievalMethod
|
||||
*
|
||||
* @param doc
|
||||
* @param URI
|
||||
*/
|
||||
public KeyInfoReference(Document doc, String URI) {
|
||||
super(doc);
|
||||
|
||||
this.constructionElement.setAttributeNS(null, Constants._ATT_URI, URI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getURIAttr
|
||||
*
|
||||
* @return the URI attribute
|
||||
*/
|
||||
public Attr getURIAttr() {
|
||||
return this.constructionElement.getAttributeNodeNS(null, Constants._ATT_URI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getURI
|
||||
*
|
||||
* @return URI string
|
||||
*/
|
||||
public String getURI() {
|
||||
return this.getURIAttr().getNodeValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the <code>Id</code> attribute
|
||||
*
|
||||
* @param Id ID
|
||||
*/
|
||||
public void setId(String id) {
|
||||
if (id != null) {
|
||||
this.constructionElement.setAttributeNS(null, Constants._ATT_ID, id);
|
||||
this.constructionElement.setIdAttributeNS(null, Constants._ATT_ID, true);
|
||||
} else {
|
||||
this.constructionElement.removeAttributeNS(null, Constants._ATT_ID);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the <code>Id</code> attribute
|
||||
*
|
||||
* @return the <code>Id</code> attribute
|
||||
*/
|
||||
public String getId() {
|
||||
return this.constructionElement.getAttributeNS(null, Constants._ATT_ID);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_KEYINFOREFERENCE;
|
||||
}
|
||||
}
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
@ -27,46 +29,44 @@ import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: coheigea $
|
||||
*/
|
||||
public class KeyName extends SignatureElementProxy implements KeyInfoContent {
|
||||
|
||||
/**
|
||||
* Constructor KeyName
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public KeyName(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
/**
|
||||
* Constructor KeyName
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public KeyName(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor KeyName
|
||||
*
|
||||
* @param doc
|
||||
* @param keyName
|
||||
*/
|
||||
public KeyName(Document doc, String keyName) {
|
||||
/**
|
||||
* Constructor KeyName
|
||||
*
|
||||
* @param doc
|
||||
* @param keyName
|
||||
*/
|
||||
public KeyName(Document doc, String keyName) {
|
||||
super(doc);
|
||||
|
||||
super(doc);
|
||||
this.addText(keyName);
|
||||
}
|
||||
|
||||
this.addText(keyName);
|
||||
}
|
||||
/**
|
||||
* Method getKeyName
|
||||
*
|
||||
* @return key name
|
||||
*/
|
||||
public String getKeyName() {
|
||||
return this.getTextFromTextChild();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getKeyName
|
||||
*
|
||||
* @return key name
|
||||
*/
|
||||
public String getKeyName() {
|
||||
return this.getTextFromTextChild();
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_KEYNAME;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_KEYNAME;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
@ -39,7 +41,7 @@ import org.w3c.dom.Element;
|
||||
* keys values represented as PCDATA or element types from an external
|
||||
* namespace.
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: coheigea $
|
||||
*/
|
||||
public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
|
||||
|
||||
@ -50,12 +52,11 @@ public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
|
||||
* @param dsaKeyValue
|
||||
*/
|
||||
public KeyValue(Document doc, DSAKeyValue dsaKeyValue) {
|
||||
|
||||
super(doc);
|
||||
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
this._constructionElement.appendChild(dsaKeyValue.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
this.constructionElement.appendChild(dsaKeyValue.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,12 +66,11 @@ public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
|
||||
* @param rsaKeyValue
|
||||
*/
|
||||
public KeyValue(Document doc, RSAKeyValue rsaKeyValue) {
|
||||
|
||||
super(doc);
|
||||
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
this._constructionElement.appendChild(rsaKeyValue.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
this.constructionElement.appendChild(rsaKeyValue.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,12 +80,11 @@ public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
|
||||
* @param unknownKeyValue
|
||||
*/
|
||||
public KeyValue(Document doc, Element unknownKeyValue) {
|
||||
|
||||
super(doc);
|
||||
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
this._constructionElement.appendChild(unknownKeyValue);
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
this.constructionElement.appendChild(unknownKeyValue);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -95,21 +94,20 @@ public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
|
||||
* @param pk
|
||||
*/
|
||||
public KeyValue(Document doc, PublicKey pk) {
|
||||
|
||||
super(doc);
|
||||
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
|
||||
if (pk instanceof java.security.interfaces.DSAPublicKey) {
|
||||
DSAKeyValue dsa = new DSAKeyValue(this._doc, pk);
|
||||
DSAKeyValue dsa = new DSAKeyValue(this.doc, pk);
|
||||
|
||||
this._constructionElement.appendChild(dsa.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
this.constructionElement.appendChild(dsa.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
} else if (pk instanceof java.security.interfaces.RSAPublicKey) {
|
||||
RSAKeyValue rsa = new RSAKeyValue(this._doc, pk);
|
||||
RSAKeyValue rsa = new RSAKeyValue(this.doc, pk);
|
||||
|
||||
this._constructionElement.appendChild(rsa.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
this.constructionElement.appendChild(rsa.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,8 +118,7 @@ public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public KeyValue(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
public KeyValue(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
@ -132,22 +129,21 @@ public class KeyValue extends SignatureElementProxy implements KeyInfoContent {
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public PublicKey getPublicKey() throws XMLSecurityException {
|
||||
|
||||
Element rsa = XMLUtils.selectDsNode
|
||||
(this._constructionElement.getFirstChild(),
|
||||
Constants._TAG_RSAKEYVALUE,0);
|
||||
Element rsa =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_RSAKEYVALUE, 0);
|
||||
|
||||
if (rsa != null) {
|
||||
RSAKeyValue kv = new RSAKeyValue(rsa, this._baseURI);
|
||||
RSAKeyValue kv = new RSAKeyValue(rsa, this.baseURI);
|
||||
return kv.getPublicKey();
|
||||
}
|
||||
|
||||
Element dsa = XMLUtils.selectDsNode
|
||||
(this._constructionElement.getFirstChild(),
|
||||
Constants._TAG_DSAKEYVALUE,0);
|
||||
Element dsa =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_DSAKEYVALUE, 0);
|
||||
|
||||
if (dsa != null) {
|
||||
DSAKeyValue kv = new DSAKeyValue(dsa, this._baseURI);
|
||||
DSAKeyValue kv = new DSAKeyValue(dsa, this.baseURI);
|
||||
return kv.getPublicKey();
|
||||
}
|
||||
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
@ -27,47 +29,45 @@ import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: coheigea $
|
||||
*/
|
||||
public class MgmtData extends SignatureElementProxy implements KeyInfoContent {
|
||||
|
||||
/**
|
||||
* Constructor MgmtData
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public MgmtData(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
/**
|
||||
* Constructor MgmtData
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public MgmtData(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor MgmtData
|
||||
*
|
||||
* @param doc
|
||||
* @param mgmtData
|
||||
*/
|
||||
public MgmtData(Document doc, String mgmtData) {
|
||||
/**
|
||||
* Constructor MgmtData
|
||||
*
|
||||
* @param doc
|
||||
* @param mgmtData
|
||||
*/
|
||||
public MgmtData(Document doc, String mgmtData) {
|
||||
super(doc);
|
||||
|
||||
super(doc);
|
||||
this.addText(mgmtData);
|
||||
}
|
||||
|
||||
this.addText(mgmtData);
|
||||
}
|
||||
/**
|
||||
* Method getMgmtData
|
||||
*
|
||||
* @return the managment data
|
||||
*/
|
||||
public String getMgmtData() {
|
||||
return this.getTextFromTextChild();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getMgmtData
|
||||
*
|
||||
* @return the managment data
|
||||
*/
|
||||
public String getMgmtData() {
|
||||
return this.getTextFromTextChild();
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_MGMTDATA;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_MGMTDATA;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
@ -26,25 +28,24 @@ import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: coheigea $
|
||||
* $todo$ Implement
|
||||
*/
|
||||
public class PGPData extends SignatureElementProxy implements KeyInfoContent {
|
||||
|
||||
/**
|
||||
* Constructor PGPData
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public PGPData(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
/**
|
||||
* Constructor PGPData
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public PGPData(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_PGPDATA;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_PGPDATA;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
@ -30,118 +32,104 @@ import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
*/
|
||||
public class RetrievalMethod extends SignatureElementProxy
|
||||
implements KeyInfoContent {
|
||||
public class RetrievalMethod extends SignatureElementProxy implements KeyInfoContent {
|
||||
|
||||
//J-
|
||||
/** DSA retrieval */
|
||||
public static final String TYPE_DSA = Constants.SignatureSpecNS + "DSAKeyValue";
|
||||
/** RSA retrieval */
|
||||
public static final String TYPE_RSA = Constants.SignatureSpecNS + "RSAKeyValue";
|
||||
/** PGP retrieval */
|
||||
public static final String TYPE_PGP = Constants.SignatureSpecNS + "PGPData";
|
||||
/** SPKI retrieval */
|
||||
public static final String TYPE_SPKI = Constants.SignatureSpecNS + "SPKIData";
|
||||
/** MGMT retrieval */
|
||||
public static final String TYPE_MGMT = Constants.SignatureSpecNS + "MgmtData";
|
||||
/** X509 retrieval */
|
||||
public static final String TYPE_X509 = Constants.SignatureSpecNS + "X509Data";
|
||||
/** RAWX509 retrieval */
|
||||
public static final String TYPE_RAWX509 = Constants.SignatureSpecNS + "rawX509Certificate";
|
||||
//J+
|
||||
public static final String TYPE_DSA = Constants.SignatureSpecNS + "DSAKeyValue";
|
||||
/** RSA retrieval */
|
||||
public static final String TYPE_RSA = Constants.SignatureSpecNS + "RSAKeyValue";
|
||||
/** PGP retrieval */
|
||||
public static final String TYPE_PGP = Constants.SignatureSpecNS + "PGPData";
|
||||
/** SPKI retrieval */
|
||||
public static final String TYPE_SPKI = Constants.SignatureSpecNS + "SPKIData";
|
||||
/** MGMT retrieval */
|
||||
public static final String TYPE_MGMT = Constants.SignatureSpecNS + "MgmtData";
|
||||
/** X509 retrieval */
|
||||
public static final String TYPE_X509 = Constants.SignatureSpecNS + "X509Data";
|
||||
/** RAWX509 retrieval */
|
||||
public static final String TYPE_RAWX509 = Constants.SignatureSpecNS + "rawX509Certificate";
|
||||
|
||||
/**
|
||||
* Constructor RetrievalMethod
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public RetrievalMethod(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
/**
|
||||
* Constructor RetrievalMethod
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public RetrievalMethod(Element element, String BaseURI) throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor RetrievalMethod
|
||||
*
|
||||
* @param doc
|
||||
* @param URI
|
||||
* @param transforms
|
||||
* @param Type
|
||||
*/
|
||||
public RetrievalMethod(Document doc, String URI, Transforms transforms,
|
||||
String Type) {
|
||||
/**
|
||||
* Constructor RetrievalMethod
|
||||
*
|
||||
* @param doc
|
||||
* @param URI
|
||||
* @param transforms
|
||||
* @param Type
|
||||
*/
|
||||
public RetrievalMethod(Document doc, String URI, Transforms transforms, String Type) {
|
||||
super(doc);
|
||||
|
||||
super(doc);
|
||||
this.constructionElement.setAttributeNS(null, Constants._ATT_URI, URI);
|
||||
|
||||
this._constructionElement.setAttributeNS(null, Constants._ATT_URI, URI);
|
||||
if (Type != null) {
|
||||
this.constructionElement.setAttributeNS(null, Constants._ATT_TYPE, Type);
|
||||
}
|
||||
|
||||
if (Type != null) {
|
||||
this._constructionElement.setAttributeNS(null, Constants._ATT_TYPE, Type);
|
||||
}
|
||||
if (transforms != null) {
|
||||
this.constructionElement.appendChild(transforms.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
}
|
||||
|
||||
if (transforms != null) {
|
||||
this._constructionElement.appendChild(transforms.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Method getURIAttr
|
||||
*
|
||||
* @return the URI attribute
|
||||
*/
|
||||
public Attr getURIAttr() {
|
||||
return this.constructionElement.getAttributeNodeNS(null, Constants._ATT_URI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getURIAttr
|
||||
*
|
||||
* @return the URI attribute
|
||||
*/
|
||||
public Attr getURIAttr() {
|
||||
return this._constructionElement.getAttributeNodeNS(null, Constants._ATT_URI);
|
||||
}
|
||||
/**
|
||||
* Method getURI
|
||||
*
|
||||
* @return URI string
|
||||
*/
|
||||
public String getURI() {
|
||||
return this.getURIAttr().getNodeValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getURI
|
||||
*
|
||||
*
|
||||
* @return URI string
|
||||
*/
|
||||
public String getURI() {
|
||||
return this.getURIAttr().getNodeValue();
|
||||
}
|
||||
/** @return the type*/
|
||||
public String getType() {
|
||||
return this.constructionElement.getAttributeNS(null, Constants._ATT_TYPE);
|
||||
}
|
||||
|
||||
/** @return the type*/
|
||||
public String getType() {
|
||||
return this._constructionElement.getAttributeNS(null, Constants._ATT_TYPE);
|
||||
}
|
||||
/**
|
||||
* Method getTransforms
|
||||
*
|
||||
* @throws XMLSecurityException
|
||||
* @return the transformations
|
||||
*/
|
||||
public Transforms getTransforms() throws XMLSecurityException {
|
||||
try {
|
||||
Element transformsElem =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_TRANSFORMS, 0);
|
||||
|
||||
/**
|
||||
* Method getTransforms
|
||||
*
|
||||
*
|
||||
* @throws XMLSecurityException
|
||||
* @return the transforamitons
|
||||
*/
|
||||
public Transforms getTransforms() throws XMLSecurityException {
|
||||
if (transformsElem != null) {
|
||||
return new Transforms(transformsElem, this.baseURI);
|
||||
}
|
||||
|
||||
try {
|
||||
Element transformsElem =
|
||||
XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
|
||||
Constants
|
||||
._TAG_TRANSFORMS, 0);
|
||||
return null;
|
||||
} catch (XMLSignatureException ex) {
|
||||
throw new XMLSecurityException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
if (transformsElem != null) {
|
||||
return new Transforms(transformsElem, this._baseURI);
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch (XMLSignatureException ex) {
|
||||
throw new XMLSecurityException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_RETRIEVALMETHOD;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_RETRIEVALMETHOD;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
@ -26,26 +28,25 @@ import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
* @author $Author: coheigea $
|
||||
* $todo$ implement
|
||||
*/
|
||||
public class SPKIData extends SignatureElementProxy implements KeyInfoContent {
|
||||
|
||||
/**
|
||||
* Constructor SPKIData
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public SPKIData(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
/**
|
||||
* Constructor SPKIData
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public SPKIData(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_SPKIDATA;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_SPKIDATA;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,32 +2,33 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content;
|
||||
|
||||
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.security.cert.X509Certificate;
|
||||
|
||||
import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509CRL;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509Certificate;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509Digest;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509IssuerSerial;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509SKI;
|
||||
import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509SubjectName;
|
||||
@ -38,447 +39,501 @@ import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
*/
|
||||
public class X509Data extends SignatureElementProxy implements KeyInfoContent {
|
||||
|
||||
/** {@link java.util.logging} logging facility */
|
||||
static java.util.logging.Logger log =
|
||||
/** {@link org.apache.commons.logging} logging facility */
|
||||
private static java.util.logging.Logger log =
|
||||
java.util.logging.Logger.getLogger(X509Data.class.getName());
|
||||
|
||||
/**
|
||||
* Constructor X509Data
|
||||
*
|
||||
* @param doc
|
||||
*/
|
||||
public X509Data(Document doc) {
|
||||
/**
|
||||
* Constructor X509Data
|
||||
*
|
||||
* @param doc
|
||||
*/
|
||||
public X509Data(Document doc) {
|
||||
super(doc);
|
||||
|
||||
super(doc);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
/**
|
||||
* Constructor X509Data
|
||||
*
|
||||
* @param element
|
||||
* @param baseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public X509Data(Element element, String baseURI) throws XMLSecurityException {
|
||||
super(element, baseURI);
|
||||
|
||||
/**
|
||||
* Constructor X509Data
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public X509Data(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
Node sibling = this.constructionElement.getFirstChild();
|
||||
while (sibling != null) {
|
||||
if (sibling.getNodeType() != Node.ELEMENT_NODE) {
|
||||
sibling = sibling.getNextSibling();
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/* No Elements found */
|
||||
Object exArgs[] = { "Elements", Constants._TAG_X509DATA };
|
||||
throw new XMLSecurityException("xml.WrongContent", exArgs);
|
||||
}
|
||||
|
||||
super(element, BaseURI);
|
||||
Node sibling=this._constructionElement.getFirstChild();
|
||||
while (sibling!=null) {
|
||||
if (sibling.getNodeType()!=Node.ELEMENT_NODE) {
|
||||
sibling=sibling.getNextSibling();
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
/* No Elements found */
|
||||
Object exArgs[] = { "Elements", Constants._TAG_X509DATA };
|
||||
throw new XMLSecurityException("xml.WrongContent", exArgs);
|
||||
}
|
||||
/**
|
||||
* Method addIssuerSerial
|
||||
*
|
||||
* @param X509IssuerName
|
||||
* @param X509SerialNumber
|
||||
*/
|
||||
public void addIssuerSerial(String X509IssuerName, BigInteger X509SerialNumber) {
|
||||
this.add(new XMLX509IssuerSerial(this.doc, X509IssuerName, X509SerialNumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addIssuerSerial
|
||||
*
|
||||
* @param X509IssuerName
|
||||
* @param X509SerialNumber
|
||||
*/
|
||||
public void addIssuerSerial(String X509IssuerName,
|
||||
BigInteger X509SerialNumber) {
|
||||
this.add(new XMLX509IssuerSerial(this._doc, X509IssuerName,
|
||||
X509SerialNumber));
|
||||
}
|
||||
/**
|
||||
* Method addIssuerSerial
|
||||
*
|
||||
* @param X509IssuerName
|
||||
* @param X509SerialNumber
|
||||
*/
|
||||
public void addIssuerSerial(String X509IssuerName, String X509SerialNumber) {
|
||||
this.add(new XMLX509IssuerSerial(this.doc, X509IssuerName, X509SerialNumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addIssuerSerial
|
||||
*
|
||||
* @param X509IssuerName
|
||||
* @param X509SerialNumber
|
||||
*/
|
||||
public void addIssuerSerial(String X509IssuerName, String X509SerialNumber) {
|
||||
this.add(new XMLX509IssuerSerial(this._doc, X509IssuerName,
|
||||
X509SerialNumber));
|
||||
}
|
||||
/**
|
||||
* Method addIssuerSerial
|
||||
*
|
||||
* @param X509IssuerName
|
||||
* @param X509SerialNumber
|
||||
*/
|
||||
public void addIssuerSerial(String X509IssuerName, int X509SerialNumber) {
|
||||
this.add(new XMLX509IssuerSerial(this.doc, X509IssuerName, X509SerialNumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addIssuerSerial
|
||||
*
|
||||
* @param X509IssuerName
|
||||
* @param X509SerialNumber
|
||||
*/
|
||||
public void addIssuerSerial(String X509IssuerName, int X509SerialNumber) {
|
||||
this.add(new XMLX509IssuerSerial(this._doc, X509IssuerName,
|
||||
X509SerialNumber));
|
||||
}
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509IssuerSerial
|
||||
*/
|
||||
public void add(XMLX509IssuerSerial xmlX509IssuerSerial) {
|
||||
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509IssuerSerial
|
||||
*/
|
||||
public void add(XMLX509IssuerSerial xmlX509IssuerSerial) {
|
||||
this.constructionElement.appendChild(xmlX509IssuerSerial.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
this._constructionElement
|
||||
.appendChild(xmlX509IssuerSerial.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
/**
|
||||
* Method addSKI
|
||||
*
|
||||
* @param skiBytes
|
||||
*/
|
||||
public void addSKI(byte[] skiBytes) {
|
||||
this.add(new XMLX509SKI(this.doc, skiBytes));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addSKI
|
||||
*
|
||||
* @param skiBytes
|
||||
*/
|
||||
public void addSKI(byte[] skiBytes) {
|
||||
this.add(new XMLX509SKI(this._doc, skiBytes));
|
||||
}
|
||||
/**
|
||||
* Method addSKI
|
||||
*
|
||||
* @param x509certificate
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public void addSKI(X509Certificate x509certificate)
|
||||
throws XMLSecurityException {
|
||||
this.add(new XMLX509SKI(this.doc, x509certificate));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addSKI
|
||||
*
|
||||
* @param x509certificate
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public void addSKI(X509Certificate x509certificate)
|
||||
throws XMLSecurityException {
|
||||
this.add(new XMLX509SKI(this._doc, x509certificate));
|
||||
}
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509SKI
|
||||
*/
|
||||
public void add(XMLX509SKI xmlX509SKI) {
|
||||
this.constructionElement.appendChild(xmlX509SKI.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509SKI
|
||||
*/
|
||||
public void add(XMLX509SKI xmlX509SKI) {
|
||||
this._constructionElement.appendChild(xmlX509SKI.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
/**
|
||||
* Method addSubjectName
|
||||
*
|
||||
* @param subjectName
|
||||
*/
|
||||
public void addSubjectName(String subjectName) {
|
||||
this.add(new XMLX509SubjectName(this.doc, subjectName));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addSubjectName
|
||||
*
|
||||
* @param subjectName
|
||||
*/
|
||||
public void addSubjectName(String subjectName) {
|
||||
this.add(new XMLX509SubjectName(this._doc, subjectName));
|
||||
}
|
||||
/**
|
||||
* Method addSubjectName
|
||||
*
|
||||
* @param x509certificate
|
||||
*/
|
||||
public void addSubjectName(X509Certificate x509certificate) {
|
||||
this.add(new XMLX509SubjectName(this.doc, x509certificate));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addSubjectName
|
||||
*
|
||||
* @param x509certificate
|
||||
*/
|
||||
public void addSubjectName(X509Certificate x509certificate) {
|
||||
this.add(new XMLX509SubjectName(this._doc, x509certificate));
|
||||
}
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509SubjectName
|
||||
*/
|
||||
public void add(XMLX509SubjectName xmlX509SubjectName) {
|
||||
this.constructionElement.appendChild(xmlX509SubjectName.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509SubjectName
|
||||
*/
|
||||
public void add(XMLX509SubjectName xmlX509SubjectName) {
|
||||
this._constructionElement.appendChild(xmlX509SubjectName.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
/**
|
||||
* Method addCertificate
|
||||
*
|
||||
* @param x509certificate
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public void addCertificate(X509Certificate x509certificate)
|
||||
throws XMLSecurityException {
|
||||
this.add(new XMLX509Certificate(this.doc, x509certificate));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addCertificate
|
||||
*
|
||||
* @param x509certificate
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public void addCertificate(X509Certificate x509certificate)
|
||||
throws XMLSecurityException {
|
||||
this.add(new XMLX509Certificate(this._doc, x509certificate));
|
||||
}
|
||||
/**
|
||||
* Method addCertificate
|
||||
*
|
||||
* @param x509certificateBytes
|
||||
*/
|
||||
public void addCertificate(byte[] x509certificateBytes) {
|
||||
this.add(new XMLX509Certificate(this.doc, x509certificateBytes));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addCertificate
|
||||
*
|
||||
* @param x509certificateBytes
|
||||
*/
|
||||
public void addCertificate(byte[] x509certificateBytes) {
|
||||
this.add(new XMLX509Certificate(this._doc, x509certificateBytes));
|
||||
}
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509Certificate
|
||||
*/
|
||||
public void add(XMLX509Certificate xmlX509Certificate) {
|
||||
this.constructionElement.appendChild(xmlX509Certificate.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509Certificate
|
||||
*/
|
||||
public void add(XMLX509Certificate xmlX509Certificate) {
|
||||
this._constructionElement.appendChild(xmlX509Certificate.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
/**
|
||||
* Method addCRL
|
||||
*
|
||||
* @param crlBytes
|
||||
*/
|
||||
public void addCRL(byte[] crlBytes) {
|
||||
this.add(new XMLX509CRL(this.doc, crlBytes));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addCRL
|
||||
*
|
||||
* @param crlBytes
|
||||
*/
|
||||
public void addCRL(byte[] crlBytes) {
|
||||
this.add(new XMLX509CRL(this._doc, crlBytes));
|
||||
}
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509CRL
|
||||
*/
|
||||
public void add(XMLX509CRL xmlX509CRL) {
|
||||
this.constructionElement.appendChild(xmlX509CRL.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param xmlX509CRL
|
||||
*/
|
||||
public void add(XMLX509CRL xmlX509CRL) {
|
||||
this._constructionElement.appendChild(xmlX509CRL.getElement());
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
/**
|
||||
* Method addDigest
|
||||
*
|
||||
* @param x509certificate
|
||||
* @param algorithmURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public void addDigest(X509Certificate x509certificate, String algorithmURI)
|
||||
throws XMLSecurityException {
|
||||
this.add(new XMLX509Digest(this.doc, x509certificate, algorithmURI));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method addUnknownElement
|
||||
*
|
||||
* @param element
|
||||
*/
|
||||
public void addUnknownElement(Element element) {
|
||||
this._constructionElement.appendChild(element);
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
}
|
||||
/**
|
||||
* Method addDigest
|
||||
*
|
||||
* @param x509CertificateDigestByes
|
||||
* @param algorithmURI
|
||||
*/
|
||||
public void addDigest(byte[] x509certificateDigestBytes, String algorithmURI) {
|
||||
this.add(new XMLX509Digest(this.doc, x509certificateDigestBytes, algorithmURI));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method lengthIssuerSerial
|
||||
*
|
||||
* @return the number of IssuerSerial elements in this X509Data
|
||||
*/
|
||||
public int lengthIssuerSerial() {
|
||||
return this.length(Constants.SignatureSpecNS,
|
||||
Constants._TAG_X509ISSUERSERIAL);
|
||||
}
|
||||
/**
|
||||
* Method add
|
||||
*
|
||||
* @param XMLX509Digest
|
||||
*/
|
||||
public void add(XMLX509Digest xmlX509Digest) {
|
||||
this.constructionElement.appendChild(xmlX509Digest.getElement());
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method lengthSKI
|
||||
*
|
||||
* @return the number of SKI elements in this X509Data
|
||||
*/
|
||||
public int lengthSKI() {
|
||||
return this.length(Constants.SignatureSpecNS, Constants._TAG_X509SKI);
|
||||
}
|
||||
/**
|
||||
* Method addUnknownElement
|
||||
*
|
||||
* @param element
|
||||
*/
|
||||
public void addUnknownElement(Element element) {
|
||||
this.constructionElement.appendChild(element);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method lengthSubjectName
|
||||
*
|
||||
* @return the number of SubjectName elements in this X509Data
|
||||
*/
|
||||
public int lengthSubjectName() {
|
||||
return this.length(Constants.SignatureSpecNS,
|
||||
Constants._TAG_X509SUBJECTNAME);
|
||||
}
|
||||
/**
|
||||
* Method lengthIssuerSerial
|
||||
*
|
||||
* @return the number of IssuerSerial elements in this X509Data
|
||||
*/
|
||||
public int lengthIssuerSerial() {
|
||||
return this.length(Constants.SignatureSpecNS, Constants._TAG_X509ISSUERSERIAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method lengthCertificate
|
||||
*
|
||||
* @return the number of Certificate elements in this X509Data
|
||||
*/
|
||||
public int lengthCertificate() {
|
||||
return this.length(Constants.SignatureSpecNS,
|
||||
Constants._TAG_X509CERTIFICATE);
|
||||
}
|
||||
/**
|
||||
* Method lengthSKI
|
||||
*
|
||||
* @return the number of SKI elements in this X509Data
|
||||
*/
|
||||
public int lengthSKI() {
|
||||
return this.length(Constants.SignatureSpecNS, Constants._TAG_X509SKI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method lengthCRL
|
||||
*
|
||||
* @return the number of CRL elements in this X509Data
|
||||
*/
|
||||
public int lengthCRL() {
|
||||
return this.length(Constants.SignatureSpecNS, Constants._TAG_X509CRL);
|
||||
}
|
||||
/**
|
||||
* Method lengthSubjectName
|
||||
*
|
||||
* @return the number of SubjectName elements in this X509Data
|
||||
*/
|
||||
public int lengthSubjectName() {
|
||||
return this.length(Constants.SignatureSpecNS, Constants._TAG_X509SUBJECTNAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method lengthUnknownElement
|
||||
*
|
||||
* @return the number of UnknownElement elements in this X509Data
|
||||
*/
|
||||
public int lengthUnknownElement() {
|
||||
/**
|
||||
* Method lengthCertificate
|
||||
*
|
||||
* @return the number of Certificate elements in this X509Data
|
||||
*/
|
||||
public int lengthCertificate() {
|
||||
return this.length(Constants.SignatureSpecNS, Constants._TAG_X509CERTIFICATE);
|
||||
}
|
||||
|
||||
int result = 0;
|
||||
Node n=this._constructionElement.getFirstChild();
|
||||
while (n!=null){
|
||||
/**
|
||||
* Method lengthCRL
|
||||
*
|
||||
* @return the number of CRL elements in this X509Data
|
||||
*/
|
||||
public int lengthCRL() {
|
||||
return this.length(Constants.SignatureSpecNS, Constants._TAG_X509CRL);
|
||||
}
|
||||
|
||||
if ((n.getNodeType() == Node.ELEMENT_NODE)
|
||||
&&!n.getNamespaceURI().equals(Constants.SignatureSpecNS)) {
|
||||
result += 1;
|
||||
}
|
||||
n=n.getNextSibling();
|
||||
}
|
||||
/**
|
||||
* Method lengthDigest
|
||||
*
|
||||
* @return the number of X509Digest elements in this X509Data
|
||||
*/
|
||||
public int lengthDigest() {
|
||||
return this.length(Constants.SignatureSpec11NS, Constants._TAG_X509DIGEST);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Method lengthUnknownElement
|
||||
*
|
||||
* @return the number of UnknownElement elements in this X509Data
|
||||
*/
|
||||
public int lengthUnknownElement() {
|
||||
int result = 0;
|
||||
Node n = this.constructionElement.getFirstChild();
|
||||
while (n != null){
|
||||
if ((n.getNodeType() == Node.ELEMENT_NODE)
|
||||
&& !n.getNamespaceURI().equals(Constants.SignatureSpecNS)) {
|
||||
result++;
|
||||
}
|
||||
n = n.getNextSibling();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method itemIssuerSerial
|
||||
*
|
||||
* @param i
|
||||
* @return the X509IssuerSerial, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509IssuerSerial itemIssuerSerial(int i)
|
||||
throws XMLSecurityException {
|
||||
return result;
|
||||
}
|
||||
|
||||
Element e =
|
||||
XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
|
||||
Constants._TAG_X509ISSUERSERIAL,i);
|
||||
/**
|
||||
* Method itemIssuerSerial
|
||||
*
|
||||
* @param i
|
||||
* @return the X509IssuerSerial, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509IssuerSerial itemIssuerSerial(int i) throws XMLSecurityException {
|
||||
Element e =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_X509ISSUERSERIAL, i);
|
||||
|
||||
if (e != null) {
|
||||
return new XMLX509IssuerSerial(e, this._baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (e != null) {
|
||||
return new XMLX509IssuerSerial(e, this.baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method itemSKI
|
||||
*
|
||||
* @param i
|
||||
* @return the X509SKI, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509SKI itemSKI(int i) throws XMLSecurityException {
|
||||
/**
|
||||
* Method itemSKI
|
||||
*
|
||||
* @param i
|
||||
* @return the X509SKI, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509SKI itemSKI(int i) throws XMLSecurityException {
|
||||
|
||||
Element e = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
|
||||
Constants._TAG_X509SKI,i);
|
||||
Element e =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_X509SKI, i);
|
||||
|
||||
if (e != null) {
|
||||
return new XMLX509SKI(e, this._baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (e != null) {
|
||||
return new XMLX509SKI(e, this.baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method itemSubjectName
|
||||
*
|
||||
* @param i
|
||||
* @return the X509SubjectName, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509SubjectName itemSubjectName(int i)
|
||||
throws XMLSecurityException {
|
||||
/**
|
||||
* Method itemSubjectName
|
||||
*
|
||||
* @param i
|
||||
* @return the X509SubjectName, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509SubjectName itemSubjectName(int i) throws XMLSecurityException {
|
||||
|
||||
Element e = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
|
||||
Constants._TAG_X509SUBJECTNAME,i);
|
||||
Element e =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_X509SUBJECTNAME, i);
|
||||
|
||||
if (e != null) {
|
||||
return new XMLX509SubjectName(e, this._baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (e != null) {
|
||||
return new XMLX509SubjectName(e, this.baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method itemCertificate
|
||||
*
|
||||
* @param i
|
||||
* @return the X509Certifacte, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509Certificate itemCertificate(int i)
|
||||
throws XMLSecurityException {
|
||||
/**
|
||||
* Method itemCertificate
|
||||
*
|
||||
* @param i
|
||||
* @return the X509Certifacte, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509Certificate itemCertificate(int i) throws XMLSecurityException {
|
||||
|
||||
Element e = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
|
||||
Constants._TAG_X509CERTIFICATE,i);
|
||||
Element e =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_X509CERTIFICATE, i);
|
||||
|
||||
if (e != null) {
|
||||
return new XMLX509Certificate(e, this._baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (e != null) {
|
||||
return new XMLX509Certificate(e, this.baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method itemCRL
|
||||
*
|
||||
* @param i
|
||||
* @return the X509CRL, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509CRL itemCRL(int i) throws XMLSecurityException {
|
||||
/**
|
||||
* Method itemCRL
|
||||
*
|
||||
* @param i
|
||||
* @return the X509CRL, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509CRL itemCRL(int i) throws XMLSecurityException {
|
||||
|
||||
Element e = XMLUtils.selectDsNode(this._constructionElement.getFirstChild(),
|
||||
Constants._TAG_X509CRL,i);
|
||||
Element e =
|
||||
XMLUtils.selectDsNode(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_X509CRL, i);
|
||||
|
||||
if (e != null) {
|
||||
return new XMLX509CRL(e, this._baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (e != null) {
|
||||
return new XMLX509CRL(e, this.baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method itemUnknownElement
|
||||
*
|
||||
* @param i
|
||||
* @return the Unknown Element at i
|
||||
* TODO implement
|
||||
**/
|
||||
public Element itemUnknownElement(int i) {
|
||||
log.log(java.util.logging.Level.FINE, "itemUnknownElement not implemented:"+i);
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Method itemDigest
|
||||
*
|
||||
* @param i
|
||||
* @return the X509Digest, null if not present
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public XMLX509Digest itemDigest(int i) throws XMLSecurityException {
|
||||
|
||||
/**
|
||||
* Method containsIssuerSerial
|
||||
*
|
||||
* @return true if this X509Data contains a IssuerSerial
|
||||
*/
|
||||
public boolean containsIssuerSerial() {
|
||||
return this.lengthIssuerSerial() > 0;
|
||||
}
|
||||
Element e =
|
||||
XMLUtils.selectDs11Node(
|
||||
this.constructionElement.getFirstChild(), Constants._TAG_X509DIGEST, i);
|
||||
|
||||
/**
|
||||
* Method containsSKI
|
||||
*
|
||||
* @return true if this X509Data contains a SKI
|
||||
*/
|
||||
public boolean containsSKI() {
|
||||
return this.lengthSKI() > 0;
|
||||
}
|
||||
if (e != null) {
|
||||
return new XMLX509Digest(e, this.baseURI);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method containsSubjectName
|
||||
*
|
||||
* @return true if this X509Data contains a SubjectName
|
||||
*/
|
||||
public boolean containsSubjectName() {
|
||||
return this.lengthSubjectName() > 0;
|
||||
}
|
||||
/**
|
||||
* Method itemUnknownElement
|
||||
*
|
||||
* @param i
|
||||
* @return the Unknown Element at i
|
||||
* TODO implement
|
||||
**/
|
||||
public Element itemUnknownElement(int i) {
|
||||
if (log.isLoggable(java.util.logging.Level.FINE)) {
|
||||
log.log(java.util.logging.Level.FINE, "itemUnknownElement not implemented:" + i);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method containsCertificate
|
||||
*
|
||||
* @return true if this X509Data contains a Certificate
|
||||
*/
|
||||
public boolean containsCertificate() {
|
||||
return this.lengthCertificate() > 0;
|
||||
}
|
||||
/**
|
||||
* Method containsIssuerSerial
|
||||
*
|
||||
* @return true if this X509Data contains a IssuerSerial
|
||||
*/
|
||||
public boolean containsIssuerSerial() {
|
||||
return this.lengthIssuerSerial() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method containsCRL
|
||||
*
|
||||
* @return true if this X509Data contains a CRL
|
||||
*/
|
||||
public boolean containsCRL() {
|
||||
return this.lengthCRL() > 0;
|
||||
}
|
||||
/**
|
||||
* Method containsSKI
|
||||
*
|
||||
* @return true if this X509Data contains a SKI
|
||||
*/
|
||||
public boolean containsSKI() {
|
||||
return this.lengthSKI() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method containsUnknownElement
|
||||
*
|
||||
* @return true if this X509Data contains an UnknownElement
|
||||
*/
|
||||
public boolean containsUnknownElement() {
|
||||
return this.lengthUnknownElement() > 0;
|
||||
}
|
||||
/**
|
||||
* Method containsSubjectName
|
||||
*
|
||||
* @return true if this X509Data contains a SubjectName
|
||||
*/
|
||||
public boolean containsSubjectName() {
|
||||
return this.lengthSubjectName() > 0;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_X509DATA;
|
||||
}
|
||||
/**
|
||||
* Method containsCertificate
|
||||
*
|
||||
* @return true if this X509Data contains a Certificate
|
||||
*/
|
||||
public boolean containsCertificate() {
|
||||
return this.lengthCertificate() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method containsDigest
|
||||
*
|
||||
* @return true if this X509Data contains an X509Digest
|
||||
*/
|
||||
public boolean containsDigest() {
|
||||
return this.lengthDigest() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method containsCRL
|
||||
*
|
||||
* @return true if this X509Data contains a CRL
|
||||
*/
|
||||
public boolean containsCRL() {
|
||||
return this.lengthCRL() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method containsUnknownElement
|
||||
*
|
||||
* @return true if this X509Data contains an UnknownElement
|
||||
*/
|
||||
public boolean containsUnknownElement() {
|
||||
return this.lengthUnknownElement() > 0;
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_X509DATA;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,21 +2,23 @@
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package com.sun.org.apache.xml.internal.security.keys.content.keyvalues;
|
||||
|
||||
@ -37,104 +39,93 @@ import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author $Author: mullan $
|
||||
*/
|
||||
public class DSAKeyValue extends SignatureElementProxy
|
||||
implements KeyValueContent {
|
||||
public class DSAKeyValue extends SignatureElementProxy implements KeyValueContent {
|
||||
|
||||
/**
|
||||
* Constructor DSAKeyValue
|
||||
*
|
||||
* @param element
|
||||
* @param BaseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public DSAKeyValue(Element element, String BaseURI)
|
||||
throws XMLSecurityException {
|
||||
super(element, BaseURI);
|
||||
}
|
||||
/**
|
||||
* Constructor DSAKeyValue
|
||||
*
|
||||
* @param element
|
||||
* @param baseURI
|
||||
* @throws XMLSecurityException
|
||||
*/
|
||||
public DSAKeyValue(Element element, String baseURI) throws XMLSecurityException {
|
||||
super(element, baseURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor DSAKeyValue
|
||||
*
|
||||
* @param doc
|
||||
* @param P
|
||||
* @param Q
|
||||
* @param G
|
||||
* @param Y
|
||||
*/
|
||||
public DSAKeyValue(Document doc, BigInteger P, BigInteger Q, BigInteger G,
|
||||
BigInteger Y) {
|
||||
/**
|
||||
* Constructor DSAKeyValue
|
||||
*
|
||||
* @param doc
|
||||
* @param P
|
||||
* @param Q
|
||||
* @param G
|
||||
* @param Y
|
||||
*/
|
||||
public DSAKeyValue(Document doc, BigInteger P, BigInteger Q, BigInteger G, BigInteger Y) {
|
||||
super(doc);
|
||||
|
||||
super(doc);
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
this.addBigIntegerElement(P, Constants._TAG_P);
|
||||
this.addBigIntegerElement(Q, Constants._TAG_Q);
|
||||
this.addBigIntegerElement(G, Constants._TAG_G);
|
||||
this.addBigIntegerElement(Y, Constants._TAG_Y);
|
||||
}
|
||||
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
this.addBigIntegerElement(P, Constants._TAG_P);
|
||||
this.addBigIntegerElement(Q, Constants._TAG_Q);
|
||||
this.addBigIntegerElement(G, Constants._TAG_G);
|
||||
this.addBigIntegerElement(Y, Constants._TAG_Y);
|
||||
}
|
||||
/**
|
||||
* Constructor DSAKeyValue
|
||||
*
|
||||
* @param doc
|
||||
* @param key
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
public DSAKeyValue(Document doc, Key key) throws IllegalArgumentException {
|
||||
super(doc);
|
||||
|
||||
/**
|
||||
* Constructor DSAKeyValue
|
||||
*
|
||||
* @param doc
|
||||
* @param key
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
public DSAKeyValue(Document doc, Key key) throws IllegalArgumentException {
|
||||
XMLUtils.addReturnToElement(this.constructionElement);
|
||||
|
||||
super(doc);
|
||||
if (key instanceof java.security.interfaces.DSAPublicKey) {
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getParams().getP(), Constants._TAG_P);
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getParams().getQ(), Constants._TAG_Q);
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getParams().getG(), Constants._TAG_G);
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getY(), Constants._TAG_Y);
|
||||
} else {
|
||||
Object exArgs[] = { Constants._TAG_DSAKEYVALUE, key.getClass().getName() };
|
||||
|
||||
XMLUtils.addReturnToElement(this._constructionElement);
|
||||
throw new IllegalArgumentException(I18n.translate("KeyValue.IllegalArgument", exArgs));
|
||||
}
|
||||
}
|
||||
|
||||
if (key instanceof java.security.interfaces.DSAPublicKey) {
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getParams().getP(),
|
||||
Constants._TAG_P);
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getParams().getQ(),
|
||||
Constants._TAG_Q);
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getParams().getG(),
|
||||
Constants._TAG_G);
|
||||
this.addBigIntegerElement(((DSAPublicKey) key).getY(),
|
||||
Constants._TAG_Y);
|
||||
} else {
|
||||
Object exArgs[] = { Constants._TAG_DSAKEYVALUE,
|
||||
key.getClass().getName() };
|
||||
/** @inheritDoc */
|
||||
public PublicKey getPublicKey() throws XMLSecurityException {
|
||||
try {
|
||||
DSAPublicKeySpec pkspec =
|
||||
new DSAPublicKeySpec(
|
||||
this.getBigIntegerFromChildElement(
|
||||
Constants._TAG_Y, Constants.SignatureSpecNS
|
||||
),
|
||||
this.getBigIntegerFromChildElement(
|
||||
Constants._TAG_P, Constants.SignatureSpecNS
|
||||
),
|
||||
this.getBigIntegerFromChildElement(
|
||||
Constants._TAG_Q, Constants.SignatureSpecNS
|
||||
),
|
||||
this.getBigIntegerFromChildElement(
|
||||
Constants._TAG_G, Constants.SignatureSpecNS
|
||||
)
|
||||
);
|
||||
KeyFactory dsaFactory = KeyFactory.getInstance("DSA");
|
||||
PublicKey pk = dsaFactory.generatePublic(pkspec);
|
||||
|
||||
throw new IllegalArgumentException(I18n
|
||||
.translate("KeyValue.IllegalArgument", exArgs));
|
||||
}
|
||||
}
|
||||
return pk;
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
throw new XMLSecurityException("empty", ex);
|
||||
} catch (InvalidKeySpecException ex) {
|
||||
throw new XMLSecurityException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public PublicKey getPublicKey() throws XMLSecurityException {
|
||||
|
||||
try {
|
||||
DSAPublicKeySpec pkspec =
|
||||
new DSAPublicKeySpec(this
|
||||
.getBigIntegerFromChildElement(Constants._TAG_Y, Constants
|
||||
.SignatureSpecNS), this
|
||||
.getBigIntegerFromChildElement(Constants._TAG_P, Constants
|
||||
.SignatureSpecNS), this
|
||||
.getBigIntegerFromChildElement(Constants._TAG_Q, Constants
|
||||
.SignatureSpecNS), this
|
||||
.getBigIntegerFromChildElement(Constants
|
||||
._TAG_G, Constants.SignatureSpecNS));
|
||||
KeyFactory dsaFactory = KeyFactory.getInstance("DSA");
|
||||
PublicKey pk = dsaFactory.generatePublic(pkspec);
|
||||
|
||||
return pk;
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
throw new XMLSecurityException("empty", ex);
|
||||
} catch (InvalidKeySpecException ex) {
|
||||
throw new XMLSecurityException("empty", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_DSAKEYVALUE;
|
||||
}
|
||||
/** @inheritDoc */
|
||||
public String getBaseLocalName() {
|
||||
return Constants._TAG_DSAKEYVALUE;
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user