blob: acdcb32e3326ae72d34262514e815d182224aef6 (
plain) (
tree)
|
|
/*
* System.Reflection-like API for access to .NET assemblies (DLL & EXE)
*/
package ch.epfl.lamp.compiler.msil;
import javax.crypto.Mac;
import java.security.MessageDigest;
import ch.epfl.lamp.compiler.msil.util.Table;
/**
* Fully describes an assembly's unique identity.
* Right now it's only the name
*
* @author Nikolay Mihaylov
* @version 1.0
*/
public class AssemblyName {
//##########################################################################
// public interface
/** The simple, unencrypted name of the assembly. */
public String Name;
/**
* Gets or sets the major, minor, revision, and build numbers
* of the assembly.
*/
public Version Version;
/**
* Gets a strong name consisting of a public key, a given name,
* and version parts.
*/
public byte[] GetPublicKeyToken() {
return publicKeyToken == null ? null : (byte[]) publicKeyToken.clone();
}
/**
* Sets a strong name consisting of a public key, a given name,
* and version parts.
*/
public void SetPublicKeyToken(byte[] key) {
this.publicKeyToken = key.length == 0 ? null : (byte[]) key.clone();
}
/**
* Returns the public key identifying the originator of the assembly.
*/
public byte[] GetPublicKey() {
return publicKey == null ? null : (byte[]) publicKey.clone();
}
/**
* Sets the public key identifying the originator of the assembly.
*/
public void SetPublicKey(byte[] key) {
if (key.length > 0) {
this.publicKey = (byte[]) key.clone();
byte[] hash = sha.digest(key);
byte[] keyToken = new byte[8];
for (int i = 0; i < keyToken.length; i++)
keyToken[i] = hash[hash.length - 1 - i];
this.publicKeyToken = keyToken;
//System.out.println("Pubic key and key token of assembly " + this + ":");
//System.out.println("\tPublic key = " + Table.bytes2hex(key));
//System.out.println("\tKey token = " + Table.bytes2hex(keyToken));
}
}
public String toString() {
return Name + ", Version=" + Version;
}
//##########################################################################
private byte[] publicKeyToken;
private byte[] publicKey;
private static final MessageDigest sha;
static {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA");
} catch (java.security.NoSuchAlgorithmException e) {}
sha = md;
}
//##########################################################################
} // class AssemblyName
|