Skip to content

Commit 0491608

Browse files
MahdiZTDshashanksu
authored andcommitted
reafc: using actual milliseconds instead of seconds for generating nonce
1 parent 6621fb0 commit 0491608

File tree

2 files changed

+7
-11
lines changed

2 files changed

+7
-11
lines changed

Adjust/plugins/sdk-plugin-lvl/src/main/java/com/adjust/sdk/lvl/LicenseChecker.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,9 @@ public void verifyLicense(int responseCode, String signedData, String signature)
104104
* - 8-bit reserved field in bits 0–7 (currently using 0x01 as version marker)
105105
*/
106106
public static long generateNonce(long timestamp) {
107-
// Convert to seconds for compactness and to fit into 56 bits
108-
long timestampInSeconds = timestamp / 1000;
109-
110107
// Mask to ensure we only keep the lowest 56 bits
111108
long MASK_56_BITS = 0x00FFFFFFFFFFFFFFL;
112-
long reducedTimestamp = timestampInSeconds & MASK_56_BITS;
109+
long reducedTimestamp = timestamp & MASK_56_BITS;
113110

114111
// Shift timestamp to occupy bits 8–63, reserve LSB for flags/version
115112
return (reducedTimestamp << 8) | 0x01;

Adjust/plugins/sdk-plugin-lvl/src/test/java/com/adjust/sdk/lvl/LicenseCheckerNonceTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public void testGenerateNonce_containsVersionByte() {
1616
@Test
1717
public void testGenerateNonce_timestampPacking_isCorrect() {
1818
long timestamp = 1720000000000L; // Epoch in ms
19-
long expectedSeconds = (timestamp / 1000) & 0x00FFFFFFFFFFFFFFL;
19+
long expectedSeconds =timestamp & 0x00FFFFFFFFFFFFFFL;
2020
long nonce = LicenseChecker.generateNonce(timestamp);
2121

2222
long extractedSeconds = (nonce >>> 8); // remove version byte
@@ -32,20 +32,19 @@ public void testGenerateNonce_zeroTimestamp_shouldStillWork() {
3232
@Test
3333
public void testGenerateNonce_nearLimit_doesNotOverflowSafe() {
3434
// Use a timestamp that still fits in millis without overflowing long
35-
long safeSeconds = (1L << 53); // 53 bits (won't overflow when *1000)
36-
long installTimeMillis = safeSeconds * 1000;
35+
long safeMillis = (1L << 53); // 53 bits (won't overflow when *1000)
3736

38-
long nonce = LicenseChecker.generateNonce(installTimeMillis);
39-
long extractedSeconds = nonce >>> 8;
37+
long nonce = LicenseChecker.generateNonce(safeMillis);
38+
long extractedMillis = nonce >>> 8;
4039

41-
assertEquals("Should safely extract 53-bit timestamp", safeSeconds, extractedSeconds);
40+
assertEquals("Should safely extract 53-bit timestamp", safeMillis, extractedMillis);
4241
}
4342

4443

4544

4645
@Test
4746
public void testGenerateNonce_truncatesIfAbove56Bits() {
48-
long overMaxTimestampMs = ((1L << 56) + 9999L) * 1000; // milliseconds that overflow 56-bit seconds
47+
long overMaxTimestampMs = ((1L << 56) + 9999L); // milliseconds that overflow 56-bit seconds
4948

5049
long nonce = LicenseChecker.generateNonce(overMaxTimestampMs);
5150
long extracted = (nonce >>> 8);

0 commit comments

Comments
 (0)