DTLSReplayWindow.smali
.class Lorg/spongycastle/crypto/tls/DTLSReplayWindow;
.super Ljava/lang/Object;
.source "DTLSReplayWindow.java"
# static fields
.field private static final VALID_SEQ_MASK:J = 0xffffffffffffL
.field private static final WINDOW_SIZE:J = 0x40L
# instance fields
.field private bitmap:J
.field private latestConfirmedSeq:J
# direct methods
.method constructor <init>()V
.registers 3
.prologue
.line 9
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 15
const-wide/16 v0, -0x1
iput-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
.line 16
const-wide/16 v0, 0x0
iput-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
return-void
.end method
# virtual methods
.method reportAuthenticated(J)V
.registers 10
.prologue
const-wide/16 v2, 0x40
const-wide/16 v4, 0x1
.line 54
const-wide v0, 0xffffffffffffL
and-long/2addr v0, p1
cmp-long v0, v0, p1
if-eqz v0, :cond_16
.line 56
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "\'seq\' out of range"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 59
:cond_16
iget-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
cmp-long v0, p1, v0
if-gtz v0, :cond_2c
.line 61
iget-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
sub-long/2addr v0, p1
.line 62
cmp-long v2, v0, v2
if-gez v2, :cond_2b
.line 64
iget-wide v2, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
long-to-int v0, v0
shl-long v0, v4, v0
or-long/2addr v0, v2
iput-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
.line 81
:cond_2b
:goto_2b
return-void
.line 69
:cond_2c
iget-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
sub-long v0, p1, v0
.line 70
cmp-long v2, v0, v2
if-ltz v2, :cond_39
.line 72
iput-wide v4, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
.line 79
:goto_36
iput-wide p1, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
goto :goto_2b
.line 76
:cond_39
iget-wide v2, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
long-to-int v0, v0
shl-long v0, v2, v0
iput-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
.line 77
iget-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
or-long/2addr v0, v4
iput-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
goto :goto_36
.end method
.method reset()V
.registers 3
.prologue
.line 88
const-wide/16 v0, -0x1
iput-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
.line 89
const-wide/16 v0, 0x0
iput-wide v0, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
.line 90
return-void
.end method
.method shouldDiscard(J)Z
.registers 12
.prologue
const/4 v0, 0x1
.line 26
const-wide v2, 0xffffffffffffL
and-long/2addr v2, p1
cmp-long v1, v2, p1
if-eqz v1, :cond_c
.line 44
:cond_b
:goto_b
return v0
.line 31
:cond_c
iget-wide v2, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
cmp-long v1, p1, v2
if-gtz v1, :cond_29
.line 33
iget-wide v2, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->latestConfirmedSeq:J
sub-long/2addr v2, p1
.line 34
const-wide/16 v4, 0x40
cmp-long v1, v2, v4
if-gez v1, :cond_b
.line 38
iget-wide v4, p0, Lorg/spongycastle/crypto/tls/DTLSReplayWindow;->bitmap:J
const-wide/16 v6, 0x1
long-to-int v1, v2
shl-long v2, v6, v1
and-long/2addr v2, v4
const-wide/16 v4, 0x0
cmp-long v1, v2, v4
if-nez v1, :cond_b
.line 44
:cond_29
const/4 v0, 0x0
goto :goto_b
.end method