|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package sun.security.jgss.wrapper; |
|
|
|
import java.util.Hashtable; |
|
import org.ietf.jgss.Oid; |
|
import org.ietf.jgss.GSSName; |
|
import org.ietf.jgss.ChannelBinding; |
|
import org.ietf.jgss.MessageProp; |
|
import org.ietf.jgss.GSSException; |
|
import sun.security.jgss.GSSUtil; |
|
|
|
/** |
|
* This class is essentially a JNI calling stub for all wrapper classes. |
|
* |
|
* @author Valerie Peng |
|
* @since 1.6 |
|
*/ |
|
|
|
class GSSLibStub { |
|
|
|
private Oid mech; |
|
private long pMech; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
static native boolean init(String lib, boolean debug); |
|
private static native long getMechPtr(byte[] oidDerEncoding); |
|
|
|
|
|
static native Oid[] indicateMechs(); |
|
native Oid[] inquireNamesForMech() throws GSSException; |
|
|
|
|
|
native void releaseName(long pName); |
|
native long importName(byte[] name, Oid type); |
|
native boolean compareName(long pName1, long pName2); |
|
native long canonicalizeName(long pName); |
|
native byte[] exportName(long pName) throws GSSException; |
|
native Object[] displayName(long pName) throws GSSException; |
|
|
|
|
|
native long acquireCred(long pName, int lifetime, int usage) |
|
throws GSSException; |
|
native long releaseCred(long pCred); |
|
native long getCredName(long pCred); |
|
native int getCredTime(long pCred); |
|
native int getCredUsage(long pCred); |
|
|
|
|
|
native NativeGSSContext importContext(byte[] interProcToken); |
|
native byte[] initContext(long pCred, long targetName, ChannelBinding cb, |
|
byte[] inToken, NativeGSSContext context); |
|
native byte[] acceptContext(long pCred, ChannelBinding cb, |
|
byte[] inToken, NativeGSSContext context); |
|
native long[] inquireContext(long pContext); |
|
native Oid getContextMech(long pContext); |
|
native long getContextName(long pContext, boolean isSrc); |
|
native int getContextTime(long pContext); |
|
native long deleteContext(long pContext); |
|
native int wrapSizeLimit(long pContext, int flags, int qop, int outSize); |
|
native byte[] exportContext(long pContext); |
|
native byte[] getMic(long pContext, int qop, byte[] msg); |
|
native void verifyMic(long pContext, byte[] token, byte[] msg, |
|
MessageProp prop) ; |
|
native byte[] wrap(long pContext, byte[] msg, MessageProp prop); |
|
native byte[] unwrap(long pContext, byte[] msgToken, MessageProp prop); |
|
|
|
private static Hashtable<Oid, GSSLibStub> |
|
table = new Hashtable<Oid, GSSLibStub>(5); |
|
|
|
static GSSLibStub getInstance(Oid mech) throws GSSException { |
|
GSSLibStub s = table.get(mech); |
|
if (s == null) { |
|
s = new GSSLibStub(mech); |
|
table.put(mech, s); |
|
} |
|
return s; |
|
} |
|
private GSSLibStub(Oid mech) throws GSSException { |
|
SunNativeProvider.debug("Created GSSLibStub for mech " + mech); |
|
this.mech = mech; |
|
this.pMech = getMechPtr(mech.getDER()); |
|
} |
|
public boolean equals(Object obj) { |
|
if (obj == this) return true; |
|
if (!(obj instanceof GSSLibStub)) { |
|
return false; |
|
} |
|
return (mech.equals(((GSSLibStub) obj).getMech())); |
|
} |
|
public int hashCode() { |
|
return mech.hashCode(); |
|
} |
|
Oid getMech() { |
|
return mech; |
|
} |
|
} |