package com.limegroup.gnutella.security;
import java.security.PublicKey;
import org.limewire.util.Objects;
/**
* Immutable, threadsafe, implements value equality.
* <p>
* The string represenation of this certificate is:
* <pre>
* base32(signature)|keyVersion as integer literal|base32(public key)
* </pre>
*/
class CertificateImpl implements Certificate {
private final byte[] signature;
private final byte[] signedPayload;
private final int keyVersion;
private final PublicKey publicKey;
private final String certificateString;
public CertificateImpl(byte[] signature, byte[] signedPayload, int keyVersion, PublicKey publicKey,
String certificateString) {
this.signature = signature;
this.signedPayload = signedPayload;
this.keyVersion = keyVersion;
this.publicKey = publicKey;
this.certificateString = Objects.nonNull(certificateString, "certificateString");
}
@Override
public int getKeyVersion() {
return keyVersion;
}
@Override
public PublicKey getPublicKey() {
return publicKey;
}
@Override
public byte[] getSignature() {
return signature;
}
@Override
public byte[] getSignedPayload() {
return signedPayload;
}
@Override
public String getCertificateString() {
return certificateString;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Certificate)) {
return false;
}
return certificateString.equals(((Certificate)obj).getCertificateString());
}
@Override
public int hashCode() {
return certificateString.hashCode();
}
@Override
public String toString() {
return certificateString;
}
}