Created
October 18, 2022 16:11
-
-
Save paulsc/937f9348f8690e533cf051590d373410 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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