package io.bitsquare.p2p.storage.storageentry;
import io.bitsquare.app.Version;
import io.bitsquare.common.crypto.Sig;
import io.bitsquare.p2p.storage.P2PDataStorage;
import io.bitsquare.p2p.storage.payload.MailboxStoragePayload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
public class ProtectedMailboxStorageEntry extends ProtectedStorageEntry {
// That object is sent over the wire, so we need to take care of version compatibility.
private static final long serialVersionUID = Version.P2P_NETWORK_VERSION;
private static final Logger log = LoggerFactory.getLogger(P2PDataStorage.class);
public transient PublicKey receiversPubKey;
private final byte[] receiversPubKeyBytes;
public MailboxStoragePayload getMailboxStoragePayload() {
return (MailboxStoragePayload) storagePayload;
}
public ProtectedMailboxStorageEntry(MailboxStoragePayload mailboxStoragePayload, PublicKey ownerStoragePubKey, int sequenceNumber, byte[] signature, PublicKey receiversPubKey) {
super(mailboxStoragePayload, ownerStoragePubKey, sequenceNumber, signature);
this.receiversPubKey = receiversPubKey;
this.receiversPubKeyBytes = new X509EncodedKeySpec(this.receiversPubKey.getEncoded()).getEncoded();
}
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
try {
in.defaultReadObject();
receiversPubKey = KeyFactory.getInstance(Sig.KEY_ALGO, "BC").generatePublic(new X509EncodedKeySpec(receiversPubKeyBytes));
checkCreationTimeStamp();
} catch (Throwable t) {
log.warn("Exception at readObject: " + t.getMessage());
}
}
@Override
public String toString() {
return "ProtectedMailboxData{" +
"receiversPubKey.hashCode()=" + (receiversPubKey != null ? receiversPubKey.hashCode() : "") +
"} " + super.toString();
}
}