public final class org.apache.shiro.tools.hasher.Hasher extends java.lang.Object
{
private static final java.lang.String HEX_PREFIX;
private static final java.lang.String DEFAULT_ALGORITHM_NAME;
private static final java.lang.String DEFAULT_PASSWORD_ALGORITHM_NAME;
private static final int DEFAULT_GENERATED_SALT_SIZE;
private static final int DEFAULT_NUM_ITERATIONS;
private static final int DEFAULT_PASSWORD_NUM_ITERATIONS;
private static final org.apache.commons.cli.Option ALGORITHM;
private static final org.apache.commons.cli.Option DEBUG;
private static final org.apache.commons.cli.Option FORMAT;
private static final org.apache.commons.cli.Option HELP;
private static final org.apache.commons.cli.Option ITERATIONS;
private static final org.apache.commons.cli.Option PASSWORD;
private static final org.apache.commons.cli.Option PASSWORD_NC;
private static final org.apache.commons.cli.Option RESOURCE;
private static final org.apache.commons.cli.Option SALT;
private static final org.apache.commons.cli.Option SALT_BYTES;
private static final org.apache.commons.cli.Option SALT_GEN;
private static final org.apache.commons.cli.Option NO_SALT_GEN;
private static final org.apache.commons.cli.Option SALT_GEN_SIZE;
private static final org.apache.commons.cli.Option PRIVATE_SALT;
private static final org.apache.commons.cli.Option PRIVATE_SALT_BYTES;
private static final java.lang.String SALT_MUTEX_MSG;
private static final org.apache.shiro.crypto.hash.format.HashFormatFactory HASH_FORMAT_FACTORY;
static final boolean $assertionsDisabled;
public void <init>()
{
org.apache.shiro.tools.hasher.Hasher v;
v := @this: org.apache.shiro.tools.hasher.Hasher;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
public static void main(java.lang.String[])
{
org.apache.commons.cli.Option v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
org.apache.shiro.crypto.hash.SimpleHashRequest v;
java.io.IOException v;
org.apache.commons.cli.DefaultParser v;
org.apache.shiro.crypto.hash.DefaultHashService v;
org.apache.commons.cli.Options v, v, v, v, v, v, v, v, v, v, v;
int v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
org.apache.commons.cli.CommandLine v;
java.io.PrintStream v;
org.apache.shiro.crypto.UnknownAlgorithmException v;
java.lang.Class v, v;
java.lang.Object v;
org.apache.shiro.crypto.hash.format.HashFormat v;
java.lang.Exception v;
java.lang.Throwable v;
java.lang.AssertionError v;
java.lang.String v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
org.apache.shiro.crypto.hash.format.HashFormatFactory v;
char[] v;
boolean v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
java.lang.String[] v, v;
org.apache.shiro.util.ByteSource v, v, v;
java.lang.IllegalArgumentException v, v, v;
org.apache.shiro.crypto.hash.Hash v;
v := @parameter: java.lang.String[];
v = new org.apache.commons.cli.DefaultParser;
specialinvoke v.<org.apache.commons.cli.DefaultParser: void <init>()>();
v = new org.apache.commons.cli.Options;
specialinvoke v.<org.apache.commons.cli.Options: void <init>()>();
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option HELP>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option DEBUG>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ALGORITHM>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ITERATIONS>;
virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option RESOURCE>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PASSWORD>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PASSWORD_NC>;
virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_BYTES>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN_SIZE>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option NO_SALT_GEN>;
virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT>;
v = virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT_BYTES>;
virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option FORMAT>;
virtualinvoke v.<org.apache.commons.cli.Options: org.apache.commons.cli.Options addOption(org.apache.commons.cli.Option)>(v);
v = 0;
v = null;
v = 0;
v = 0;
v = 0;
v = 1;
v = null;
v = null;
v = 0;
v = 128;
v = null;
v = null;
v = null;
v = null;
label:
v = interfaceinvoke v.<org.apache.commons.cli.CommandLineParser: org.apache.commons.cli.CommandLine parse(org.apache.commons.cli.Options,java.lang.String[])>(v, v);
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option HELP>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void printHelpAndExit(org.apache.commons.cli.Options,java.lang.Exception,boolean,int)>(v, null, 0, 0);
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option DEBUG>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = 1;
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ALGORITHM>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ALGORITHM>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String getOptionValue(java.lang.String)>(v);
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ITERATIONS>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ITERATIONS>;
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: int getRequiredPositiveInt(org.apache.commons.cli.CommandLine,org.apache.commons.cli.Option)>(v, v);
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PASSWORD>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = 1;
v = 1;
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option RESOURCE>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = 1;
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PASSWORD_NC>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = 1;
v = 1;
v = 0;
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String getOptionValue(java.lang.String)>(v);
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_BYTES>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_BYTES>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String getOptionValue(java.lang.String)>(v);
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option NO_SALT_GEN>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = 0;
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = 1;
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN_SIZE>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = 1;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN_SIZE>;
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: int getRequiredPositiveInt(org.apache.commons.cli.CommandLine,org.apache.commons.cli.Option)>(v, v);
v = v % 8;
if v == 0 goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Generated salt size must be a multiple of 8 (e.g. 128, 192, 256, 512, etc).");
throw v;
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String getOptionValue(java.lang.String)>(v);
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT_BYTES>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT_BYTES>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String getOptionValue(java.lang.String)>(v);
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option FORMAT>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: boolean hasOption(java.lang.String)>(v);
if v == 0 goto label;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option FORMAT>;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String getOptionValue(java.lang.String)>(v);
label:
if v == 0 goto label;
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: char[] readPassword(boolean)>(v);
v = v;
goto label;
label:
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String[] getArgs()>();
if v == null goto label;
v = lengthof v;
if v == 1 goto label;
label:
v = (int) -1;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void printHelpAndExit(org.apache.commons.cli.Options,java.lang.Exception,boolean,int)>(v, null, v, v);
label:
v = <org.apache.shiro.tools.hasher.Hasher: boolean $assertionsDisabled>;
if v != 0 goto label;
if v != null goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: java.lang.String toString(java.lang.String[])>(v);
if v == 0 goto label;
v = staticinvoke <org.apache.shiro.io.ResourceUtils: boolean hasResourcePrefix(java.lang.String)>(v);
if v != 0 goto label;
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: java.io.File toFile(java.lang.String)>(v);
goto label;
label:
v = staticinvoke <org.apache.shiro.io.ResourceUtils: java.io.InputStream getInputStreamForPath(java.lang.String)>(v);
goto label;
label:
v = v;
label:
if v != null goto label;
if v == 0 goto label;
v = "SHA-256";
goto label;
label:
v = "MD5";
label:
if v >= 1 goto label;
if v == 0 goto label;
v = 500000;
goto label;
label:
v = 1;
label:
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: org.apache.shiro.util.ByteSource getSalt(java.lang.String,java.lang.String,boolean,int)>(v, v, v, v);
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: org.apache.shiro.util.ByteSource getSalt(java.lang.String,java.lang.String,boolean,int)>(v, v, 0, v);
v = new org.apache.shiro.crypto.hash.SimpleHashRequest;
v = staticinvoke <org.apache.shiro.util.ByteSource$Util: org.apache.shiro.util.ByteSource bytes(java.lang.Object)>(v);
specialinvoke v.<org.apache.shiro.crypto.hash.SimpleHashRequest: void <init>(java.lang.String,org.apache.shiro.util.ByteSource,org.apache.shiro.util.ByteSource,int)>(v, v, v, v);
v = new org.apache.shiro.crypto.hash.DefaultHashService;
specialinvoke v.<org.apache.shiro.crypto.hash.DefaultHashService: void <init>()>();
virtualinvoke v.<org.apache.shiro.crypto.hash.DefaultHashService: void setPrivateSalt(org.apache.shiro.util.ByteSource)>(v);
v = virtualinvoke v.<org.apache.shiro.crypto.hash.DefaultHashService: org.apache.shiro.crypto.hash.Hash computeHash(org.apache.shiro.crypto.hash.HashRequest)>(v);
if v != null goto label;
if v == 0 goto label;
v = class "Lorg/apache/shiro/crypto/hash/format/Shiro1CryptFormat;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
goto label;
label:
v = class "Lorg/apache/shiro/crypto/hash/format/HexFormat;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
label:
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.shiro.crypto.hash.format.HashFormatFactory HASH_FORMAT_FACTORY>;
v = interfaceinvoke v.<org.apache.shiro.crypto.hash.format.HashFormatFactory: org.apache.shiro.crypto.hash.format.HashFormat getInstance(java.lang.String)>(v);
if v != null goto label;
v = new java.lang.IllegalArgumentException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Unrecognized hash format \'\u0001\'.");
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v = interfaceinvoke v.<org.apache.shiro.crypto.hash.format.HashFormat: java.lang.String format(org.apache.shiro.crypto.hash.Hash)>(v);
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.io.PrintStream: void println(java.lang.String)>(v);
label:
if v == null goto label;
v = lengthof v;
if v <= 0 goto label;
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v[v] = 32;
v = v + 1;
goto label;
label:
v := @caughtexception;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void exit(java.lang.Exception,boolean)>(v, v);
label:
if v == null goto label;
v = lengthof v;
if v <= 0 goto label;
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v[v] = 32;
v = v + 1;
goto label;
label:
v := @caughtexception;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void exit(java.lang.Exception,boolean)>(v, v);
label:
if v == null goto label;
v = lengthof v;
if v <= 0 goto label;
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v[v] = 32;
v = v + 1;
goto label;
label:
v := @caughtexception;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void exit(java.lang.Exception,boolean)>(v, v);
label:
if v == null goto label;
v = lengthof v;
if v <= 0 goto label;
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v[v] = 32;
v = v + 1;
goto label;
label:
v := @caughtexception;
v = (int) -1;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void printHelpAndExit(org.apache.commons.cli.Options,java.lang.Exception,boolean,int)>(v, v, v, v);
label:
if v == null goto label;
v = lengthof v;
if v <= 0 goto label;
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v[v] = 32;
v = v + 1;
goto label;
label:
v := @caughtexception;
if v == null goto label;
v = lengthof v;
if v <= 0 goto label;
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v[v] = 32;
v = v + 1;
goto label;
label:
throw v;
label:
return;
catch java.lang.IllegalArgumentException from label to label with label;
catch org.apache.shiro.crypto.UnknownAlgorithmException from label to label with label;
catch java.io.IOException from label to label with label;
catch java.lang.Exception from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private static transient java.lang.String createMutexMessage(org.apache.commons.cli.Option[])
{
org.apache.commons.cli.Option[] v;
int v, v;
java.lang.StringBuilder v, v, v, v;
java.lang.String v, v, v;
org.apache.commons.cli.Option v;
v := @parameter: org.apache.commons.cli.Option[];
v = new java.lang.StringBuilder;
specialinvoke v.<java.lang.StringBuilder: void <init>()>();
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("The ");
v = 0;
label:
v = lengthof v;
if v >= v goto label;
if v <= 0 goto label;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(", ");
label:
v = v[0];
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("-");
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("/--");
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getLongOpt()>();
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
v = v + 1;
goto label;
label:
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" and generated salt options are mutually exclusive.  Only one of them may be used at a time");
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.String toString()>();
return v;
}
private static void exit(java.lang.Exception, boolean)
{
int v;
java.lang.Exception v;
boolean v;
v := @parameter: java.lang.Exception;
v := @parameter: boolean;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void printException(java.lang.Exception,boolean)>(v, v);
v = (int) -1;
staticinvoke <java.lang.System: void exit(int)>(v);
return;
}
private static int getRequiredPositiveInt(org.apache.commons.cli.CommandLine, org.apache.commons.cli.Option)
{
java.lang.NumberFormatException v;
java.lang.IllegalArgumentException v;
int v;
org.apache.commons.cli.CommandLine v;
java.lang.String v, v, v, v;
org.apache.commons.cli.Option v;
v := @parameter: org.apache.commons.cli.CommandLine;
v := @parameter: org.apache.commons.cli.Option;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getOpt()>();
v = virtualinvoke v.<org.apache.commons.cli.CommandLine: java.lang.String getOptionValue(java.lang.String)>(v);
label:
v = staticinvoke <java.lang.Integer: int parseInt(java.lang.String)>(v);
label:
return v;
label:
v := @caughtexception;
v = virtualinvoke v.<org.apache.commons.cli.Option: java.lang.String getLongOpt()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\'\u0001\' value must be a positive integer.");
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
catch java.lang.NumberFormatException from label to label with label;
}
private static org.apache.shiro.util.ByteSource getSalt(java.lang.String, java.lang.String, boolean, int)
{
byte[] v;
org.apache.shiro.crypto.SecureRandomNumberGenerator v;
org.apache.shiro.util.ByteSource v, v, v;
int v, v, v;
java.lang.String v, v, v, v, v, v;
boolean v, v, v;
java.lang.IllegalArgumentException v, v;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v := @parameter: boolean;
v := @parameter: int;
if v == null goto label;
if v != 0 goto label;
if v == null goto label;
label:
v = new java.lang.IllegalArgumentException;
v = <org.apache.shiro.tools.hasher.Hasher: java.lang.String SALT_MUTEX_MSG>;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v = staticinvoke <org.apache.shiro.util.ByteSource$Util: org.apache.shiro.util.ByteSource bytes(java.lang.String)>(v);
return v;
label:
if v == null goto label;
if v == 0 goto label;
v = new java.lang.IllegalArgumentException;
v = <org.apache.shiro.tools.hasher.Hasher: java.lang.String SALT_MUTEX_MSG>;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v = v;
v = 1;
v = virtualinvoke v.<java.lang.String: boolean startsWith(java.lang.String)>("0x");
if v == 0 goto label;
v = 0;
v = "0x";
v = virtualinvoke v.<java.lang.String: int length()>();
v = virtualinvoke v.<java.lang.String: java.lang.String substring(int)>(v);
label:
if v == 0 goto label;
v = staticinvoke <org.apache.shiro.codec.Base64: byte[] decode(java.lang.String)>(v);
goto label;
label:
v = staticinvoke <org.apache.shiro.codec.Hex: byte[] decode(java.lang.String)>(v);
label:
v = staticinvoke <org.apache.shiro.util.ByteSource$Util: org.apache.shiro.util.ByteSource bytes(byte[])>(v);
return v;
label:
if v == 0 goto label;
v = new org.apache.shiro.crypto.SecureRandomNumberGenerator;
specialinvoke v.<org.apache.shiro.crypto.SecureRandomNumberGenerator: void <init>()>();
v = v / 8;
v = virtualinvoke v.<org.apache.shiro.crypto.SecureRandomNumberGenerator: org.apache.shiro.util.ByteSource nextBytes(int)>(v);
return v;
label:
return null;
}
private static void printException(java.lang.Exception, boolean)
{
java.io.PrintStream v, v, v, v, v, v, v;
java.lang.Exception v;
java.lang.String v, v, v;
boolean v;
v := @parameter: java.lang.Exception;
v := @parameter: boolean;
if v == null goto label;
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.io.PrintStream: void println()>();
if v == 0 goto label;
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.io.PrintStream: void println(java.lang.String)>("Error: ");
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.lang.Exception: void printStackTrace(java.io.PrintStream)>(v);
v = <java.lang.System: java.io.PrintStream out>;
v = virtualinvoke v.<java.lang.Exception: java.lang.String getMessage()>();
virtualinvoke v.<java.io.PrintStream: void println(java.lang.String)>(v);
goto label;
label:
v = <java.lang.System: java.io.PrintStream out>;
v = virtualinvoke v.<java.lang.Exception: java.lang.String getMessage()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Error: \u0001");
virtualinvoke v.<java.io.PrintStream: void println(java.lang.String)>(v);
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.io.PrintStream: void println()>();
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.io.PrintStream: void println(java.lang.String)>("Specify -d or --debug for more information.");
label:
return;
}
private static void printHelp(org.apache.commons.cli.Options, java.lang.Exception, boolean)
{
java.io.PrintStream v, v;
org.apache.commons.cli.Options v;
org.apache.commons.cli.HelpFormatter v;
java.lang.Exception v;
java.lang.Class v, v;
java.lang.String v, v, v;
boolean v;
v := @parameter: org.apache.commons.cli.Options;
v := @parameter: java.lang.Exception;
v := @parameter: boolean;
v = new org.apache.commons.cli.HelpFormatter;
specialinvoke v.<org.apache.commons.cli.HelpFormatter: void <init>()>();
v = class "Lorg/apache/shiro/crypto/hash/format/DefaultHashFormatFactory;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
v = class "Lorg/apache/shiro/crypto/hash/format/HashFormat;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\n<value> is optional only when hashing passwords (see below).  It is\nrequired all other times.\n\nPassword Hashing:\n---------------------------------\nSpecify the -p/--password option and DO NOT enter a <value>.  You will\nbe prompted for a password and characters will not echo as you type.\n\nSalting:\n---------------------------------\nSpecifying a salt:\n\nYou may specify a salt using the -s/--salt option followed by the salt\nvalue.  If the salt value is a base or hex string representing a\nbyte array, you must specify the -sb/--saltbytes option to indicate this,\notherwise the text value bytes will be used directly.\n\nWhen using -sb/--saltbytes, the -s/--salt value is expected to be a\nbase64-encoded string by default.  If the value is a hex-encoded string,\nyou must prefix the string with 0x (zero x) to indicate a hex value.\n\nGenerating a salt:\n\nUse the -gs/--gensalt option if you don\'t want to specify a salt,\nbut want a strong random salt to be generated and used during hashing.\nThe generated salt size defaults to 128 bits.  You may specify\na different size by using the -gss/--gensaltsize option followed by\na positive integer (size is in bits, not bytes).\n\nBecause a salt must be specified if computing the hash later,\ngenerated salts are only useful with the shiro output format;\nthe other formats do not include the generated salt.\n\nSpecifying a private salt:\n\nYou may specify a private salt using the -ps/--privatesalt option followed\nby the private salt value.  If the private salt value is a base or hex \nstring representing a byte array, you must specify the -psb/--privatesaltbytes\noption to indicate this, otherwise the text value bytes will be used directly.\n\nWhen using -psb/--privatesaltbytes, the -ps/--privatesalt value is expected to\nbe a base64-encoded string by default.  If the value is a hex-encoded string,\nyou must prefix the string with 0x (zero x) to indicate a hex value.\n\nFiles, URLs and classpath resources:\n---------------------------------\nIf using the -r/--resource option, the <value> represents a resource path.\nBy default this is expected to be a file path, but you may specify\nclasspath or URL resources by using the classpath: or url: prefix\nrespectively.\n\nSome examples:\n\n<command> -r fileInCurrentDirectory.txt\n<command> -r ../../relativePathFile.xml\n<command> -r ~/documents/myfile.pdf\n<command> -r /usr/local/logs/absolutePathFile.log\n<command> -r url:http://foo.com/page.html\n<command> -r classpath:/WEB-INF/lib/something.jar\n\nOutput Format:\n---------------------------------\nSpecify the -f/--format option followed by either 1) the format ID (as defined\nby the \u0001\nJavaDoc) or 2) the fully qualified \u0001\nimplementation class name to instantiate and use for formatting.\n\nThe default output format is \'shiro1\' which is a Modular Crypt Format (MCF)\nthat shows all relevant information as a dollar-sign ($) delimited string.\nThis format is ideal for use in Shiro\'s text-based user configuration (e.g.\nshiro.ini or a properties file).");
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void printException(java.lang.Exception,boolean)>(v, v);
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.io.PrintStream: void println()>();
virtualinvoke v.<org.apache.commons.cli.HelpFormatter: void printHelp(java.lang.String,java.lang.String,org.apache.commons.cli.Options,java.lang.String)>("java -jar shiro-tools-hasher-<version>.jar [options] [<value>]", "\nPrint a cryptographic hash (aka message digest) of the specified <value>.\n--\nOptions:", v, null);
v = <java.lang.System: java.io.PrintStream out>;
virtualinvoke v.<java.io.PrintStream: void println(java.lang.String)>(v);
return;
}
private static void printHelpAndExit(org.apache.commons.cli.Options, java.lang.Exception, boolean, int)
{
int v;
org.apache.commons.cli.Options v;
java.lang.Exception v;
boolean v;
v := @parameter: org.apache.commons.cli.Options;
v := @parameter: java.lang.Exception;
v := @parameter: boolean;
v := @parameter: int;
staticinvoke <org.apache.shiro.tools.hasher.Hasher: void printHelp(org.apache.commons.cli.Options,java.lang.Exception,boolean)>(v, v, v);
staticinvoke <java.lang.System: void exit(int)>(v);
return;
}
private static char[] readPassword(boolean)
{
java.lang.IllegalStateException v;
java.lang.Object[] v, v;
java.lang.IllegalArgumentException v, v;
int v;
char[] v, v;
java.io.Console v;
boolean v, v;
v := @parameter: boolean;
v = staticinvoke <java.lang.System: java.io.Console console()>();
if v != null goto label;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("java.io.Console is not available on the current JVM.  Cannot read passwords.");
throw v;
label:
v = newarray (java.lang.Object)[1];
v[0] = "Password to hash: ";
v = virtualinvoke v.<java.io.Console: char[] readPassword(java.lang.String,java.lang.Object[])>("%s", v);
if v == null goto label;
v = lengthof v;
if v != 0 goto label;
label:
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("No password specified.");
throw v;
label:
if v == 0 goto label;
v = newarray (java.lang.Object)[1];
v[0] = "Password to hash (confirm): ";
v = virtualinvoke v.<java.io.Console: char[] readPassword(java.lang.String,java.lang.Object[])>("%s", v);
v = staticinvoke <java.util.Arrays: boolean equals(char[],char[])>(v, v);
if v != 0 goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Password entries do not match.");
throw v;
label:
return v;
}
private static java.io.File toFile(java.lang.String)
{
java.lang.String v, v, v;
java.io.File v;
boolean v, v;
v := @parameter: java.lang.String;
v = v;
v = virtualinvoke v.<java.lang.String: boolean startsWith(java.lang.String)>("~/");
if v != 0 goto label;
v = virtualinvoke v.<java.lang.String: boolean startsWith(java.lang.String)>("~\\");
if v == 0 goto label;
label:
v = staticinvoke <java.lang.System: java.lang.String getProperty(java.lang.String)>("user.home");
v = virtualinvoke v.<java.lang.String: java.lang.String replaceFirst(java.lang.String,java.lang.String)>("\\~", v);
label:
v = new java.io.File;
specialinvoke v.<java.io.File: void <init>(java.lang.String)>(v);
return v;
}
private static java.lang.String toString(java.lang.String[])
{
int v;
java.lang.String[] v;
java.lang.String v;
v := @parameter: java.lang.String[];
if v == null goto label;
v = lengthof v;
goto label;
label:
v = 0;
label:
if v != 0 goto label;
return null;
label:
v = staticinvoke <org.apache.shiro.util.StringUtils: java.lang.String toDelimitedString(java.lang.Object[],java.lang.String)>(v, " ");
return v;
}
static void <clinit>()
{
org.apache.shiro.crypto.hash.format.DefaultHashFormatFactory v;
org.apache.commons.cli.Option[] v;
java.lang.String v;
org.apache.commons.cli.Option v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
boolean v, v;
java.lang.Class v;
v = class "Lorg/apache/shiro/tools/hasher/Hasher;";
v = virtualinvoke v.<java.lang.Class: boolean desiredAssertionStatus()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
<org.apache.shiro.tools.hasher.Hasher: boolean $assertionsDisabled> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("a", "algorithm", 1, "hash algorithm name.  Defaults to SHA-256 when password hashing, MD5 otherwise.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ALGORITHM> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("d", "debug", 0, "show additional error (stack trace) information.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option DEBUG> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("f", "format", 1, "hash output format.  Defaults to \'shiro1\' when password hashing, \'hex\' otherwise.  See below for more information.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option FORMAT> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("help", "help", 0, "show this help message.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option HELP> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("i", "iterations", 1, "number of hash iterations.  Defaults to 500000 when password hashing, 1 otherwise.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ITERATIONS> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("p", "password", 0, "hash a password (disable typing echo)");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PASSWORD> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("pnc", "pnoconfirm", 0, "hash a password (disable typing echo) but disable password confirmation prompt.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PASSWORD_NC> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("r", "resource", 0, "read and hash the resource located at <value>.  See below for more information.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option RESOURCE> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("s", "salt", 1, "use the specified salt.  <arg> is plaintext.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("sb", "saltbytes", 1, "use the specified salt bytes.  <arg> is hex or base encoded text.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_BYTES> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("gs", "gensalt", 0, "generate and use a random salt. Defaults to true when password hashing, false otherwise.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("ngs", "nogensalt", 0, "do NOT generate and use a random salt (valid during password hashing).");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option NO_SALT_GEN> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("gss", "gensaltsize", 1, "the number of salt bits (not bytes!) to generate.  Defaults to 128.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN_SIZE> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("ps", "privatesalt", 1, "use the specified private salt.  <arg> is plaintext.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT> = v;
v = new org.apache.commons.cli.Option;
specialinvoke v.<org.apache.commons.cli.Option: void <init>(java.lang.String,java.lang.String,boolean,java.lang.String)>("psb", "privatesaltbytes", 1, "use the specified private salt bytes.  <arg> is hex or base encoded text.");
<org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option PRIVATE_SALT_BYTES> = v;
v = newarray (org.apache.commons.cli.Option)[2];
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT>;
v[0] = v;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_BYTES>;
v[1] = v;
v = staticinvoke <org.apache.shiro.tools.hasher.Hasher: java.lang.String createMutexMessage(org.apache.commons.cli.Option[])>(v);
<org.apache.shiro.tools.hasher.Hasher: java.lang.String SALT_MUTEX_MSG> = v;
v = new org.apache.shiro.crypto.hash.format.DefaultHashFormatFactory;
specialinvoke v.<org.apache.shiro.crypto.hash.format.DefaultHashFormatFactory: void <init>()>();
<org.apache.shiro.tools.hasher.Hasher: org.apache.shiro.crypto.hash.format.HashFormatFactory HASH_FORMAT_FACTORY> = v;
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ALGORITHM>;
virtualinvoke v.<org.apache.commons.cli.Option: void setArgName(java.lang.String)>("name");
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_GEN_SIZE>;
virtualinvoke v.<org.apache.commons.cli.Option: void setArgName(java.lang.String)>("numBits");
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option ITERATIONS>;
virtualinvoke v.<org.apache.commons.cli.Option: void setArgName(java.lang.String)>("num");
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT>;
virtualinvoke v.<org.apache.commons.cli.Option: void setArgName(java.lang.String)>("sval");
v = <org.apache.shiro.tools.hasher.Hasher: org.apache.commons.cli.Option SALT_BYTES>;
virtualinvoke v.<org.apache.commons.cli.Option: void setArgName(java.lang.String)>("encTxt");
return;
}
}