package com.subgraph.orchid.directory.certificate;
import java.nio.ByteBuffer;
import com.subgraph.orchid.KeyCertificate;
import com.subgraph.orchid.Tor;
import com.subgraph.orchid.crypto.TorPublicKey;
import com.subgraph.orchid.data.HexDigest;
import com.subgraph.orchid.data.IPv4Address;
import com.subgraph.orchid.data.Timestamp;
public class KeyCertificateImpl implements KeyCertificate {
private IPv4Address directoryAddress;
private int directoryPort;
private HexDigest fingerprint;
private TorPublicKey identityKey;
private Timestamp keyPublished;
private Timestamp keyExpires;
private TorPublicKey signingKey;
private String rawDocumentData;
private boolean hasValidSignature = false;
void setDirectoryPort(int port) { this.directoryPort = port; }
void setDirectoryAddress(IPv4Address address) { this.directoryAddress = address; }
void setAuthorityFingerprint(HexDigest fingerprint) { this.fingerprint = fingerprint;}
void setAuthorityIdentityKey(TorPublicKey key) { this.identityKey = key; }
void setAuthoritySigningKey(TorPublicKey key) { this.signingKey = key; }
void setKeyPublishedTime(Timestamp time) { this.keyPublished = time; }
void setKeyExpiryTime(Timestamp time) { this.keyExpires = time; }
void setValidSignature() { hasValidSignature = true;}
void setRawDocumentData(String rawData) { rawDocumentData = rawData; }
public boolean isValidDocument() {
return hasValidSignature && (fingerprint != null) && (identityKey != null) &&
(keyPublished != null) && (keyExpires != null) && (signingKey != null);
}
public IPv4Address getDirectoryAddress() {
return directoryAddress;
}
public int getDirectoryPort() {
return directoryPort;
}
public HexDigest getAuthorityFingerprint() {
return fingerprint;
}
public TorPublicKey getAuthorityIdentityKey() {
return identityKey;
}
public TorPublicKey getAuthoritySigningKey() {
return signingKey;
}
public Timestamp getKeyPublishedTime() {
return keyPublished;
}
public Timestamp getKeyExpiryTime() {
return keyExpires;
}
public boolean isExpired() {
if(keyExpires != null) {
return keyExpires.hasPassed();
} else {
return false;
}
}
public String getRawDocumentData() {
return rawDocumentData;
}
public ByteBuffer getRawDocumentBytes() {
if(getRawDocumentData() == null) {
return ByteBuffer.allocate(0);
} else {
return ByteBuffer.wrap(getRawDocumentData().getBytes(Tor.getDefaultCharset()));
}
}
public String toString() {
return "(Certificate: address="+ directoryAddress +":"+ directoryPort
+" fingerprint="+ fingerprint +" published="+ keyPublished +" expires="+ keyExpires +")"+
"\nident="+ identityKey +" sign="+ signingKey;
}
}