Skip to content

Instantly share code, notes, and snippets.

@paulsc
Created October 18, 2022 16:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paulsc/937f9348f8690e533cf051590d373410 to your computer and use it in GitHub Desktop.
Save paulsc/937f9348f8690e533cf051590d373410 to your computer and use it in GitHub Desktop.
import java.security.MessageDigest;
import java.util.Random;
import java.util.Base64;
import java.util.Locale;
import java.util.Date;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.Mac;
import java.nio.charset.StandardCharsets;
import java.nio.charset.Charset;
public final class CorgiRequest {
private static String SECRET = "uBvB5rPgH0U+yPhzPq9y2i4f1396t/2dCpo3gd7l1+0=";
private final String corgiId;
private final String corgiServer;
private final boolean isSubscriber;
private final String nonce;
private final String signature;
CorgiRequest(String paramString1, String paramString2, boolean paramBoolean) {
this.corgiServer = paramString1;
this.corgiId = paramString2;
this.isSubscriber = paramBoolean;
this.nonce = this.generateNonce();
this.signature = this.generateSignature(this);
}
public String getCorgiId() { return this.corgiId; }
public String getCorgiServer() { return this.corgiServer; }
public boolean isSubscriber() { return this.isSubscriber; }
public String getNonce() { return this.nonce; }
public final String getTimestamp() {
return String.valueOf((new Date()).getTime() / 1000L);
}
public String toString() {
return "nonce = \"" + this.nonce + "\""
+ "\nsignature = \"" + this.signature + "\""
+ "\n\ncorgiServer = " + this.corgiServer
+ "\ncorgiId = " + this.corgiId
+ "\nisSubscriber = " + this.isSubscriber;
}
public final String generateNonce() {
try {
MessageDigest messageDigest = MessageDigest.getInstance("sha-256");
byte[] array = new byte[32];
new Random().nextBytes(array);
messageDigest.update(array);
byte[] arrayOfByte = messageDigest.digest();
return toHexString(arrayOfByte);
}
catch (Exception e) {
System.out.println(e);
}
return null;
}
// STATIC
private static final String generateSignature(CorgiRequest paramCorgiRequest) {
String str, ts = "";
if (paramCorgiRequest.isSubscriber()) {
StringBuilder stringBuilder2 = new StringBuilder();
String str3 = "X-Document-ID".toUpperCase(Locale.ROOT);
StringBuilder stringBuilder3 = stringBuilder2.append(str3).append('=').append(paramCorgiRequest.getCorgiId()).append(',');
String str1 = "X-Request-Nonce".toUpperCase(Locale.ROOT);
StringBuilder stringBuilder1 = stringBuilder3.append(str1).append('=').append(paramCorgiRequest.getNonce()).append(',');
String str2 = "X-Timestamp".toUpperCase(Locale.ROOT);
ts = paramCorgiRequest.getTimestamp();
stringBuilder1 = stringBuilder1.append(str2).append('=').append(ts).append(',');
str2 = "X-User-Subscribed".toUpperCase(Locale.ROOT);
str = stringBuilder1.append(str2).append('=').append(paramCorgiRequest.isSubscriber()).toString();
} else {
StringBuilder stringBuilder1 = new StringBuilder();
String str2 = "X-Document-ID".toUpperCase(Locale.ROOT);
StringBuilder stringBuilder2 = stringBuilder1.append(str2).append('=').append(paramCorgiRequest.getCorgiId()).append(',');
String str1 = "X-Request-Nonce".toUpperCase(Locale.ROOT);
stringBuilder2 = stringBuilder2.append(str1).append('=').append(paramCorgiRequest.getNonce()).append(',');
str1 = "X-Timestamp".toUpperCase(Locale.ROOT);
ts = paramCorgiRequest.getTimestamp();
str = stringBuilder2.append(str1).append('=').append(ts).toString();
}
System.out.println("sig payload: " + str);
System.out.println("\ntimestamp = \"" + ts + "\"");
return sign(str);
}
public static final String sign(String paramString) {
try {
Base64.Decoder dec = Base64.getDecoder();
byte[] arrayOfByte2 = dec.decode(SECRET);
//byte[] arrayOfByte2 = Base64.decode(CorgiNetwork.Companion.getSharedSecret(), 0);
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(arrayOfByte2, "HmacSHA256"));
Charset charset = StandardCharsets.UTF_8;
byte[] arrayOfByte1 = paramString.getBytes(charset);
arrayOfByte1 = mac.doFinal(arrayOfByte1);
return toHexString(arrayOfByte1);
} catch (Exception e) {
System.out.println(e);
}
return null;
}
public static String toHexString(byte[] byteArray) {
String hex = "";
for (byte i : byteArray) {
hex += String.format("%02x", i);
}
return hex;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment