package tor.examples;
import org.bouncycastle.util.encoders.Base64;
import tor.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
/**
* Created by gho on 02/01/15.
*/
public class HSPublish {
public static void main(String[] args) throws IOException {
// HS key - from shallot - also takes tor keys - or generate one
byte[] privkey = Base64.decode("MIICXAIBAAKBgQDbIj4jIs87Xd8NwvHOYUxdtGfkn4vRPLR7k02mUqkhnx30GnS0\n" +
"YxzdPfkJZT+hx0w4NL1XYU6dDY61eE97mqQ6NPTR9gcQad8fsRZdZYekWuulNYYp\n" +
"Q4eWCN4M1x4TaxpjL49CgOimRm/mhniAEKi1LiPiYJvuG4hGxyk6A1WN3wIDCDwj\n" +
"AoGAFBow5cccXrQ4vJGte+ksKyo6DVwGNjmyBWITRP1upuVwA7GlCyzFQ+X+mufu\n" +
"2p2zGNrBgrfRQzfo1XY2YGaUqwcqDDi4Pn4Coxhfx7GGAWU6YquvhnN49dZxbazv\n" +
"lsmyUE43yPWgoTeXBDcOkYGcPuwvMQV2dLumTDO4GkHVIGsCQQD41gSY+DdAaT2d\n" +
"nkldk2hBY6/xu1fNUerD++/7lYV91MaoiMhx9n4UQF9fpssXat7qKpgPp/fbim7d\n" +
"mC18DseDAkEA4XFP3Mt7s96orJAwESzXZJqeCT5LMYfq9Oif9cM96QWnlnHSfDx9\n" +
"uTennA5YWMhHlUlYZe4wZVSYHM39sIz1dQJASKjwEl/k0MftEc5e1ldDLaJXxPL/\n" +
"q5APGVQTg9Qdst64WJ89+SB9kbdMgu0FYDMCihq0uCILUpqD2Z84NrR+rQJAPeld\n" +
"J/MbCReod00zF5CpI46wEyLSS8OKKmojavIaKzZP8V4xXhspqnxxhoLIRQI6J2ho\n" +
"+DqC+bz+c02IopUJxwJBAPin58CCEVWmn09JZ9ltavYla8cUe4V9m0jWVX5jR2Cg\n" +
"no+6yHPSVlKCkZ1DSiyFrGmYODlXSMV+7EaiAGW9z2k=");
Consensus con = Consensus.getConsensus();
TorSocket sock = new TorSocket(InetAddress.getLocalHost(), 9001);
//new TorSocket(con.getRandomORWithFlag("Guard,Fast,Valid,Running".split(",")));
String onion = HiddenService.publicKeyToOnion(TorCrypto.asn1GetPrivateKeyPublic(privkey));
OnionRouter resp[] = HiddenService.findResposibleDirectories(onion);
final String descriptor = HiddenService.generateHSDescriptor(privkey);
System.out.println(descriptor);
TorCircuit circ = sock.createCircuit(true);
circ.create();
// circ.extend(resp[1]);
TorStream st = circ.createDirStream(new TorStream.TorStreamListener() {
@Override
public void dataArrived(TorStream s) {
byte buf[] = new byte[4096];
try {
s.recv(buf, false);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(new String(buf));
}
@Override
public void connected(TorStream s) {
try {
s.send(("POST /tor/rendezvous2/publish HTTP/1.0\r\nContent-Length: "+descriptor.length()+"\r\n\r\n" + descriptor + "\r\n\r\n").getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void disconnected(TorStream s) {
}
@Override
public void failure(TorStream s) {
}
});
}
}