DRMWorkaround.smali
.class public Lorg/bitcoinj/crypto/DRMWorkaround;
.super Ljava/lang/Object;
.source "DRMWorkaround.java"
# static fields
.field private static done:Z
.field private static log:Lorg/slf4j/Logger;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 26
const-class v0, Lorg/bitcoinj/crypto/DRMWorkaround;
invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;
move-result-object v0
sput-object v0, Lorg/bitcoinj/crypto/DRMWorkaround;->log:Lorg/slf4j/Logger;
.line 28
const/4 v0, 0x0
sput-boolean v0, Lorg/bitcoinj/crypto/DRMWorkaround;->done:Z
return-void
.end method
.method public constructor <init>()V
.registers 1
.prologue
.line 25
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static maybeDisableExportControls()V
.registers 7
.prologue
const/4 v1, 0x1
.line 36
sget-boolean v0, Lorg/bitcoinj/crypto/DRMWorkaround;->done:Z
if-eqz v0, :cond_6
.line 60
:cond_5
:goto_5
return-void
.line 37
:cond_6
sput-boolean v1, Lorg/bitcoinj/crypto/DRMWorkaround;->done:Z
.line 39
invoke-static {}, Lorg/bitcoinj/core/Utils;->isAndroidRuntime()Z
move-result v0
if-nez v0, :cond_5
.line 42
:try_start_e
const-string v0, "javax.crypto.JceSecurity"
invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
const-string v1, "isRestricted"
invoke-virtual {v0, v1}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 43
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->setAccessible(Z)V
.line 44
const/4 v1, 0x0
const/4 v2, 0x0
invoke-virtual {v0, v1, v2}, Ljava/lang/reflect/Field;->setBoolean(Ljava/lang/Object;Z)V
.line 45
const-string v0, "javax.crypto.CryptoAllPermission"
invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
const-string v1, "INSTANCE"
invoke-virtual {v0, v1}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 46
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->setAccessible(Z)V
.line 47
const/4 v1, 0x0
invoke-virtual {v0, v1}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
.line 48
const-string v1, "javax.crypto.CryptoPermissions"
invoke-static {v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v1
const/4 v2, 0x0
new-array v2, v2, [Ljava/lang/Class;
invoke-virtual {v1, v2}, Ljava/lang/Class;->getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
move-result-object v1
.line 49
const/4 v2, 0x1
invoke-virtual {v1, v2}, Ljava/lang/reflect/Constructor;->setAccessible(Z)V
.line 50
const/4 v2, 0x0
new-array v2, v2, [Ljava/lang/Object;
invoke-virtual {v1, v2}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
.line 51
const-string v2, "javax.crypto.CryptoPermissions"
invoke-static {v2}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v2
const-string v3, "add"
const/4 v4, 0x1
new-array v4, v4, [Ljava/lang/Class;
const/4 v5, 0x0
const-class v6, Ljava/security/Permission;
aput-object v6, v4, v5
invoke-virtual {v2, v3, v4}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v2
.line 52
const/4 v3, 0x1
invoke-virtual {v2, v3}, Ljava/lang/reflect/Method;->setAccessible(Z)V
.line 53
const/4 v3, 0x1
new-array v3, v3, [Ljava/lang/Object;
const/4 v4, 0x0
aput-object v0, v3, v4
invoke-virtual {v2, v1, v3}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
.line 54
const-string v0, "javax.crypto.JceSecurity"
invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
const-string v2, "defaultPolicy"
invoke-virtual {v0, v2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 55
const/4 v2, 0x1
invoke-virtual {v0, v2}, Ljava/lang/reflect/Field;->setAccessible(Z)V
.line 56
const/4 v2, 0x0
invoke-virtual {v0, v2, v1}, Ljava/lang/reflect/Field;->set(Ljava/lang/Object;Ljava/lang/Object;)V
:try_end_85
.catch Ljava/lang/Exception; {:try_start_e .. :try_end_85} :catch_86
goto :goto_5
.line 57
:catch_86
move-exception v0
.line 58
sget-object v1, Lorg/bitcoinj/crypto/DRMWorkaround;->log:Lorg/slf4j/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Failed to deactivate AES-256 barrier logic, Tor mode/BIP38 decryption may crash if this JVM requires it: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-interface {v1, v0}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;)V
goto/16 :goto_5
.end method