package midgard.drive;
import java.io.*;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyRep;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.util.Date;
import java.util.Enumeration;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.security.cert.Certificate;
public class MidgardRequestManager {
public Certificate importCertificate(File file) {
try {
FileInputStream is = new FileInputStream(file);
CertificateFactory cf = CertificateFactory.getInstance("RSA");
Certificate cert = cf.generateCertificate(is);
return cert;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public PrivateKey getPrivateKey() {
KeyStore keyStore;
Key key = null;
try {
String home = System.getProperty("user.home");
FileInputStream file_inputstream = new FileInputStream(home + "/Desktop/Certificates.p12");
keyStore = KeyStore.getInstance("RSA");
keyStore.load(file_inputstream, null);
System.out.println("Keystore size " + keyStore.size());
Enumeration<String> aliases = keyStore.aliases();
while(aliases.hasMoreElements()) {
System.out.println(aliases.nextElement());
}
// Certificate cert= keyStore.getCertificate("brian");
key=keyStore.getKey("google",null);
System.out.println("Key information " + key.getAlgorithm() + " " + key.getFormat());
Certificate[] certChain = keyStore.getCertificateChain("google");
// System.out.println(certChain[0]);
System.out.println(certChain.length);
} catch (Exception e) {
System.err.println("Exception:- " + e);
}
PrivateKey pkey = null;
return pkey;
}
public String createSignature(String headerAndClaim) {
Cipher rsa256 = null;
try {
byte[] bytes = headerAndClaim.getBytes("UTF-8");
PrivateKey pkey = getPrivateKey();
Signature sig = Signature.getInstance("RSA");
// sig.initSign(getPrivateKey());
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
MidgardRequestManager mrm = new MidgardRequestManager();
String resourceID = "LOLTEST";
JSONWriter headWriter = new JSONWriter(new StringWriter());
String header = null;
JSONWriter claimWriter = new JSONWriter(new StringWriter());
String claim = null;
JSONWriter signatureWriter = new JSONWriter(new StringWriter());
String signature = null;
long base = System.currentTimeMillis();
long exp = base + 3600;
try {
header = headWriter.object()
.key("alg").value("RS256")
.key("typ").value("JWT")
.endObject().toString();
claim = claimWriter.object()
.key("iss").value("1078037152741@developer.gserviceaccount.com")
.key("scope").value("https://www.googleapis.com/auth/drive.file")
.key("aud").value("https://accounts.google.com/o/oauth2/token")
.key("exp").value(exp)
.key("iat").value(base)
.endObject().toString();
signature = signatureWriter.object().endObject().toString();
String test = mrm.createSignature(header+"."+claim);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}