home *** CD-ROM | disk | FTP | other *** search
- package java.security;
-
- import [Ljava.security.CodeSigner;;
- import [Ljava.security.cert.Certificate;;
- 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.CertPath;
- import java.security.cert.Certificate;
- import java.security.cert.CertificateEncodingException;
- import java.security.cert.CertificateException;
- import java.security.cert.CertificateFactory;
- import java.security.cert.X509Certificate;
- import java.util.ArrayList;
- import java.util.Hashtable;
-
- public class CodeSource implements Serializable {
- private static final long serialVersionUID = 4977541819976013951L;
- private URL location;
- private transient CodeSigner[] signers = null;
- private transient Certificate[] certs = null;
- // $FF: renamed from: sp java.net.SocketPermission
- private transient SocketPermission field_0;
- private transient CertificateFactory factory = null;
-
- public CodeSource(URL var1, Certificate[] var2) {
- this.location = var1;
- if (var2 != null) {
- this.certs = (Certificate[])((Certificate;)var2).clone();
- }
-
- }
-
- public CodeSource(URL var1, CodeSigner[] var2) {
- this.location = var1;
- if (var2 != null) {
- this.signers = (CodeSigner[])((CodeSigner;)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;
- }
-
- return this.matchCerts(var2, true);
- }
- }
-
- public final URL getLocation() {
- return this.location;
- }
-
- public final Certificate[] getCertificates() {
- if (this.certs != null) {
- return (Certificate[])this.certs.clone();
- } else if (this.signers == null) {
- return null;
- } else {
- ArrayList var1 = new ArrayList();
-
- for(int var2 = 0; var2 < this.signers.length; ++var2) {
- var1.addAll(this.signers[var2].getSignerCertPath().getCertificates());
- }
-
- this.certs = (Certificate[])var1.toArray(new Certificate[var1.size()]);
- return (Certificate[])this.certs.clone();
- }
- }
-
- public final CodeSigner[] getCodeSigners() {
- if (this.signers != null) {
- return (CodeSigner[])this.signers.clone();
- } else if (this.certs != null) {
- this.signers = this.convertCertArrayToSignerArray(this.certs);
- return (CodeSigner[])this.signers.clone();
- } else {
- return null;
- }
- }
-
- public boolean implies(CodeSource var1) {
- if (var1 == null) {
- return false;
- } else {
- return this.matchCerts(var1, false) && this.matchLocation(var1);
- }
- }
-
- private boolean matchCerts(CodeSource var1, boolean var2) {
- if (this.certs == null && this.signers == null) {
- if (!var2) {
- return true;
- } else {
- return var1.certs == null && var1.signers == null;
- }
- } else if (this.signers != null && var1.signers != null) {
- if (var2 && this.signers.length != var1.signers.length) {
- return false;
- } else {
- for(int var7 = 0; var7 < this.signers.length; ++var7) {
- boolean var6 = false;
-
- for(int var8 = 0; var8 < var1.signers.length; ++var8) {
- if (this.signers[var7].equals(var1.signers[var8])) {
- var6 = true;
- break;
- }
- }
-
- if (!var6) {
- return false;
- }
- }
-
- return true;
- }
- } else if (this.certs != null && var1.certs != null) {
- if (var2 && this.certs.length != var1.certs.length) {
- return false;
- } else {
- for(int var4 = 0; var4 < this.certs.length; ++var4) {
- boolean var3 = false;
-
- for(int var5 = 0; var5 < var1.certs.length; ++var5) {
- if (this.certs[var4].equals(var1.certs[var5])) {
- var3 = true;
- break;
- }
- }
-
- if (!var3) {
- return false;
- }
- }
-
- return true;
- }
- } else {
- return false;
- }
- }
-
- 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 {
- String var2 = this.location.getHost();
- String var3 = var1.location.getHost();
- if (var2 != null && (!"".equals(var2) && !"localhost".equals(var2) || !"".equals(var3) && !"localhost".equals(var3)) && !var2.equals(var3)) {
- if (var3 == null) {
- return false;
- }
-
- if (this.field_0 == null) {
- this.field_0 = new SocketPermission(var2, "resolve");
- }
-
- if (var1.field_0 == null) {
- var1.field_0 = new SocketPermission(var3, "resolve");
- }
-
- if (!this.field_0.implies(var1.field_0)) {
- return false;
- }
- }
-
- if (this.location.getPort() != -1 && this.location.getPort() != var1.location.getPort()) {
- return false;
- } else {
- if (this.location.getFile().endsWith("/-")) {
- String var4 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
- if (!var1.location.getFile().startsWith(var4)) {
- return false;
- }
- } else if (this.location.getFile().endsWith("/*")) {
- int var7 = var1.location.getFile().lastIndexOf(47);
- if (var7 == -1) {
- return false;
- }
-
- String var5 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
- String var6 = var1.location.getFile().substring(0, var7 + 1);
- if (!var6.equals(var5)) {
- return false;
- }
- } else if (!var1.location.getFile().equals(this.location.getFile()) && !var1.location.getFile().equals(this.location.getFile() + "/")) {
- return false;
- }
-
- return this.location.getRef() == null ? true : this.location.getRef().equals(var1.location.getRef());
- }
- }
- } else {
- return false;
- }
- }
-
- public String toString() {
- StringBuilder var1 = new StringBuilder();
- var1.append("(");
- var1.append(this.location);
- if (this.certs != null && this.certs.length > 0) {
- for(int var3 = 0; var3 < this.certs.length; ++var3) {
- var1.append(" " + this.certs[var3]);
- }
- } else if (this.signers != null && this.signers.length > 0) {
- for(int var2 = 0; var2 < this.signers.length; ++var2) {
- var1.append(" " + this.signers[var2]);
- }
- } else {
- var1.append(" <no signer certificates>");
- }
-
- var1.append(")");
- return var1.toString();
- }
-
- private 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(var5.getMessage());
- }
- }
- } else {
- var1.writeInt(0);
- }
-
- if (this.signers != null && this.signers.length > 0) {
- var1.writeObject(this.signers);
- }
-
- }
-
- private 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 var13) {
- throw new ClassNotFoundException("Certificate factory for " + var6 + " not found");
- }
-
- var3.put(var6, var2);
- }
-
- Object var7 = null;
-
- try {
- var14 = new byte[var1.readInt()];
- } catch (OutOfMemoryError var12) {
- throw new IOException("Certificate too big");
- }
-
- var1.readFully(var14);
- ByteArrayInputStream var8 = new ByteArrayInputStream(var14);
-
- try {
- this.certs[var5] = var2.generateCertificate(var8);
- } catch (CertificateException var11) {
- throw new IOException(var11.getMessage());
- }
-
- var8.close();
- }
-
- try {
- this.signers = (CodeSigner[])var1.readObject();
- } catch (IOException var10) {
- }
-
- }
-
- private CodeSigner[] convertCertArrayToSignerArray(Certificate[] var1) {
- if (var1 == null) {
- return null;
- } else {
- try {
- if (this.factory == null) {
- this.factory = CertificateFactory.getInstance("X.509");
- }
-
- int var2 = 0;
- ArrayList var3 = new ArrayList();
-
- while(var2 < var1.length) {
- ArrayList var4 = new ArrayList();
- var4.add(var1[var2++]);
-
- int var5;
- for(var5 = var2; var5 < var1.length && var1[var5] instanceof X509Certificate && ((X509Certificate)var1[var5]).getBasicConstraints() != -1; ++var5) {
- var4.add(var1[var5]);
- }
-
- var2 = var5;
- CertPath var6 = this.factory.generateCertPath(var4);
- var3.add(new CodeSigner(var6, (Timestamp)null));
- }
-
- if (var3.isEmpty()) {
- return null;
- } else {
- return (CodeSigner[])var3.toArray(new CodeSigner[var3.size()]);
- }
- } catch (CertificateException var7) {
- return null;
- }
- }
- }
- }
-