home *** CD-ROM | disk | FTP | other *** search
- package java.security;
-
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.net.SocketPermission;
- import java.net.URL;
- import java.security.cert.Certificate;
- import java.security.cert.CertificateEncodingException;
- import java.security.cert.CertificateException;
- import java.security.cert.CertificateFactory;
- import java.util.Hashtable;
-
- public class CodeSource implements Serializable {
- private URL location;
- private transient Certificate[] certs;
- // $FF: renamed from: sp java.net.SocketPermission
- private transient SocketPermission field_0;
-
- public CodeSource(URL var1, Certificate[] var2) {
- this.location = var1;
- if (var2 != null) {
- this.certs = (Certificate[])var2.clone();
- }
-
- }
-
- public int hashCode() {
- return this.location != null ? this.location.hashCode() : 0;
- }
-
- public boolean equals(Object var1) {
- if (var1 == this) {
- return true;
- } else if (!(var1 instanceof CodeSource)) {
- return false;
- } else {
- CodeSource var2 = (CodeSource)var1;
- if (this.location == null) {
- if (var2.location != null) {
- return false;
- }
- } else if (!this.location.equals(var2.location)) {
- return false;
- }
-
- if (this.certs == null) {
- if (var2.certs != null) {
- return false;
- }
- } else {
- if (var2.certs == null) {
- return false;
- }
-
- for(int var4 = 0; var4 < this.certs.length; ++var4) {
- boolean var3 = false;
-
- for(int var5 = 0; var5 < var2.certs.length; ++var5) {
- if (this.certs[var4].equals(var2.certs[var5])) {
- var3 = true;
- break;
- }
- }
-
- if (!var3) {
- return false;
- }
- }
-
- for(int var8 = 0; var8 < var2.certs.length; ++var8) {
- boolean var7 = false;
-
- for(int var6 = 0; var6 < this.certs.length; ++var6) {
- if (var2.certs[var8].equals(this.certs[var6])) {
- var7 = true;
- break;
- }
- }
-
- if (!var7) {
- return false;
- }
- }
- }
-
- return true;
- }
- }
-
- public final URL getLocation() {
- return this.location;
- }
-
- public final Certificate[] getCertificates() {
- return this.certs != null ? (Certificate[])this.certs.clone() : null;
- }
-
- public boolean implies(CodeSource var1) {
- if (var1 == null) {
- return false;
- } else {
- return this.matchCerts(var1) && this.matchLocation(var1);
- }
- }
-
- private boolean matchCerts(CodeSource var1) {
- if (this.certs == null) {
- return true;
- } else if (var1.certs == null) {
- return false;
- } else {
- for(int var3 = 0; var3 < this.certs.length; ++var3) {
- boolean var2 = false;
-
- for(int var4 = 0; var4 < var1.certs.length; ++var4) {
- if (this.certs[var3].equals(var1.certs[var4])) {
- var2 = true;
- break;
- }
- }
-
- if (!var2) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- private boolean matchLocation(CodeSource var1) {
- if (this.location == null) {
- return true;
- } else if (var1 != null && var1.location != null) {
- if (this.location.equals(var1.location)) {
- return true;
- } else if (!this.location.getProtocol().equals(var1.location.getProtocol())) {
- return false;
- } else {
- if (this.location.getHost() != null && (!this.location.getHost().equals("") && !this.location.getHost().equals("localhost") || !var1.location.getHost().equals("") && !var1.location.getHost().equals("localhost")) && !this.location.getHost().equals(var1.location.getHost())) {
- if (this.field_0 == null) {
- this.field_0 = new SocketPermission(this.location.getHost(), "resolve");
- }
-
- if (var1.field_0 == null) {
- if (var1.location.getHost() == null || var1.location.getHost().equals("")) {
- return false;
- }
-
- var1.field_0 = new SocketPermission(var1.location.getHost(), "resolve");
- }
-
- boolean var2 = this.field_0.implies(var1.field_0);
- if (!var2) {
- return false;
- }
- }
-
- if (this.location.getPort() != -1 && this.location.getPort() != var1.location.getPort()) {
- return false;
- } else {
- if (this.location.getFile().endsWith("/-")) {
- String var5 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
- if (!var1.location.getFile().startsWith(var5)) {
- return false;
- }
- } else if (this.location.getFile().endsWith("/*")) {
- int var6 = var1.location.getFile().lastIndexOf(47);
- if (var6 == -1) {
- return false;
- }
-
- String var3 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
- String var4 = var1.location.getFile().substring(0, var6 + 1);
- if (!var4.equals(var3)) {
- return false;
- }
- } else if (!var1.location.getFile().equals(this.location.getFile()) && !var1.location.getFile().equals(this.location.getFile() + "/")) {
- return false;
- }
-
- if (this.location.getRef() == null) {
- return true;
- } else {
- return this.location.getRef().equals(var1.location.getRef());
- }
- }
- }
- } else {
- return false;
- }
- }
-
- public String toString() {
- StringBuffer var1 = new StringBuffer();
- var1.append("(");
- var1.append(this.location);
- if (this.certs != null && this.certs.length > 0) {
- for(int var2 = 0; var2 < this.certs.length; ++var2) {
- var1.append(" " + this.certs[var2]);
- }
- } else {
- var1.append(" <no certificates>");
- }
-
- var1.append(")");
- return var1.toString();
- }
-
- private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
- var1.defaultWriteObject();
- if (this.certs != null && this.certs.length != 0) {
- var1.writeInt(this.certs.length);
-
- for(int var2 = 0; var2 < this.certs.length; ++var2) {
- Certificate var3 = this.certs[var2];
-
- try {
- var1.writeUTF(var3.getType());
- byte[] var4 = var3.getEncoded();
- var1.writeInt(var4.length);
- var1.write(var4);
- } catch (CertificateEncodingException var5) {
- throw new IOException(((Throwable)var5).getMessage());
- }
- }
- } else {
- var1.writeInt(0);
- }
-
- }
-
- private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- Hashtable var3 = null;
- var1.defaultReadObject();
- int var4 = var1.readInt();
- if (var4 > 0) {
- var3 = new Hashtable(3);
- this.certs = new Certificate[var4];
- }
-
- for(int var5 = 0; var5 < var4; ++var5) {
- String var6 = var1.readUTF();
- CertificateFactory var2;
- if (var3.containsKey(var6)) {
- var2 = (CertificateFactory)var3.get(var6);
- } else {
- try {
- var2 = CertificateFactory.getInstance(var6);
- } catch (CertificateException var12) {
- throw new ClassNotFoundException("Certificate factory for " + var6 + " not found");
- }
-
- var3.put(var6, var2);
- }
-
- Object var7 = null;
-
- try {
- var13 = new byte[var1.readInt()];
- } catch (OutOfMemoryError var11) {
- throw new IOException("Certificate too big");
- }
-
- var1.readFully(var13);
- ByteArrayInputStream var8 = new ByteArrayInputStream(var13);
-
- try {
- this.certs[var5] = var2.generateCertificate(var8);
- } catch (CertificateException var10) {
- throw new IOException(((Throwable)var10).getMessage());
- }
-
- var8.close();
- }
-
- }
- }
-