GMSSParameters.smali

.class public Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;
.super Ljava/lang/Object;
.source "GMSSParameters.java"


# instance fields
.field private K:[I

.field private heightOfTrees:[I

.field private numOfLayers:I

.field private winternitzParameter:[I


# direct methods
.method public constructor <init>(I)V
    .registers 9

    .prologue
    const/16 v1, 0xa

    const/4 v6, 0x0

    const/4 v5, 0x4

    const/4 v4, 0x1

    const/4 v3, 0x2

    .line 90
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 91
    if-gt p1, v1, :cond_1c

    .line 93
    new-array v0, v4, [I

    aput v1, v0, v6

    .line 94
    new-array v1, v4, [I

    const/4 v2, 0x3

    aput v2, v1, v6

    .line 95
    new-array v2, v4, [I

    aput v3, v2, v6

    .line 96
    invoke-direct {p0, v4, v0, v1, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->init(I[I[I[I)V

    .line 112
    :goto_1b
    return-void

    .line 98
    :cond_1c
    const/16 v0, 0x14

    if-gt p1, v0, :cond_33

    .line 100
    new-array v0, v3, [I

    fill-array-data v0, :array_46

    .line 101
    new-array v1, v3, [I

    fill-array-data v1, :array_4e

    .line 102
    new-array v2, v3, [I

    fill-array-data v2, :array_56

    .line 103
    invoke-direct {p0, v3, v0, v1, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->init(I[I[I[I)V

    goto :goto_1b

    .line 107
    :cond_33
    new-array v0, v5, [I

    fill-array-data v0, :array_5e

    .line 108
    new-array v1, v5, [I

    fill-array-data v1, :array_6a

    .line 109
    new-array v2, v5, [I

    fill-array-data v2, :array_76

    .line 110
    invoke-direct {p0, v5, v0, v1, v2}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->init(I[I[I[I)V

    goto :goto_1b

    .line 100
    :array_46
    .array-data 4
        0xa
        0xa
    .end array-data

    .line 101
    :array_4e
    .array-data 4
        0x5
        0x4
    .end array-data

    .line 102
    :array_56
    .array-data 4
        0x2
        0x2
    .end array-data

    .line 107
    :array_5e
    .array-data 4
        0xa
        0xa
        0xa
        0xa
    .end array-data

    .line 108
    :array_6a
    .array-data 4
        0x9
        0x9
        0x9
        0x3
    .end array-data

    .line 109
    :array_76
    .array-data 4
        0x2
        0x2
        0x2
        0x2
    .end array-data
.end method

.method public constructor <init>(I[I[I[I)V
    .registers 5

    .prologue
    .line 43
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 44
    invoke-direct {p0, p1, p2, p3, p4}, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->init(I[I[I[I)V

    .line 45
    return-void
.end method

.method private init(I[I[I[I)V
    .registers 12

    .prologue
    const/4 v6, 0x2

    const/4 v2, 0x0

    .line 51
    const/4 v1, 0x1

    .line 52
    const-string v0, ""

    .line 53
    iput p1, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->numOfLayers:I

    .line 54
    iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->numOfLayers:I

    array-length v4, p3

    if-ne v3, v4, :cond_16

    iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->numOfLayers:I

    array-length v4, p2

    if-ne v3, v4, :cond_16

    iget v3, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->numOfLayers:I

    array-length v4, p4

    if-eq v3, v4, :cond_19

    .line 59
    :cond_16
    const-string v0, "Unexpected parameterset format"

    move v1, v2

    :cond_19
    move v3, v2

    .line 61
    :goto_1a
    iget v4, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->numOfLayers:I

    if-ge v3, v4, :cond_3d

    .line 63
    aget v4, p4, v3

    if-lt v4, v6, :cond_2b

    aget v4, p2, v3

    aget v5, p4, v3

    sub-int/2addr v4, v5

    rem-int/lit8 v4, v4, 0x2

    if-eqz v4, :cond_2e

    .line 66
    :cond_2b
    const-string v0, "Wrong parameter K (K >= 2 and H-K even required)!"

    move v1, v2

    .line 69
    :cond_2e
    aget v4, p2, v3

    const/4 v5, 0x4

    if-lt v4, v5, :cond_37

    aget v4, p3, v3

    if-ge v4, v6, :cond_3a

    .line 72
    :cond_37
    const-string v0, "Wrong parameter H or w (H > 3 and w > 1 required)!"

    move v1, v2

    .line 61
    :cond_3a
    add-int/lit8 v3, v3, 0x1

    goto :goto_1a

    .line 76
    :cond_3d
    if-eqz v1, :cond_52

    .line 78
    invoke-static {p2}, Lorg/spongycastle/util/Arrays;->clone([I)[I

    move-result-object v0

    iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->heightOfTrees:[I

    .line 79
    invoke-static {p3}, Lorg/spongycastle/util/Arrays;->clone([I)[I

    move-result-object v0

    iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->winternitzParameter:[I

    .line 80
    invoke-static {p4}, Lorg/spongycastle/util/Arrays;->clone([I)[I

    move-result-object v0

    iput-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->K:[I

    return-void

    .line 84
    :cond_52
    new-instance v1, Ljava/lang/IllegalArgumentException;

    invoke-direct {v1, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v1
.end method


# virtual methods
.method public getHeightOfTrees()[I
    .registers 2

    .prologue
    .line 131
    iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->heightOfTrees:[I

    invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([I)[I

    move-result-object v0

    return-object v0
.end method

.method public getK()[I
    .registers 2

    .prologue
    .line 153
    iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->K:[I

    invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([I)[I

    move-result-object v0

    return-object v0
.end method

.method public getNumOfLayers()I
    .registers 2

    .prologue
    .line 121
    iget v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->numOfLayers:I

    return v0
.end method

.method public getWinternitzParameter()[I
    .registers 2

    .prologue
    .line 143
    iget-object v0, p0, Lorg/spongycastle/pqc/crypto/gmss/GMSSParameters;->winternitzParameter:[I

    invoke-static {v0}, Lorg/spongycastle/util/Arrays;->clone([I)[I

    move-result-object v0

    return-object v0
.end method