Package net.i2p.util

Class PasswordManager

java.lang.Object
net.i2p.util.PasswordManager
Direct Known Subclasses:
RouterPasswordManager

public class PasswordManager extends Object
Manage both plaintext and salted/hashed password storage in router.config. There's no state here, so instantiate at will.
Since:
0.9.4
  • Field Details

  • Constructor Details

  • Method Details

    • check

      public boolean check(String realm, String user, String pw)
      Checks both plaintext and hash
      Parameters:
      realm - e.g. i2cp, routerconsole, etc.
      user - null or "" for no user, already trimmed
      pw - plain text, already trimmed
      Returns:
      if pw verified
    • checkPlain

      public boolean checkPlain(String realm, String user, String pw)
      Parameters:
      realm - e.g. i2cp, routerconsole, etc.
      user - null or "" for no user, already trimmed
      pw - plain text, already trimmed
      Returns:
      if pw verified
    • checkB64

      public boolean checkB64(String realm, String user, String pw)
      Parameters:
      realm - e.g. i2cp, routerconsole, etc.
      user - null or "" for no user, already trimmed
      pw - plain text, already trimmed
      Returns:
      if pw verified
    • checkHash

      public boolean checkHash(String realm, String user, String pw)
      With random salt
      Parameters:
      realm - e.g. i2cp, routerconsole, etc.
      user - null or "" for no user, already trimmed
      pw - plain text, already trimmed
      Returns:
      if pw verified
    • checkHash

      public boolean checkHash(String shash, String pw)
      Check pw against b64 salt+hash, as generated by createHash()
      Parameters:
      shash - b64 string
      pw - plain text non-null, already trimmed
      Returns:
      if pw verified
      Since:
      0.9.24
    • createHash

      public String createHash(String pw)
      Create a salt+hash, to be saved and verified later by verifyHash().
      Parameters:
      pw - plain text non-null, already trimmed
      Returns:
      salted+hash b64 string
      Since:
      0.9.24
    • get

      public String get(String realm, String user)
      Either plain or b64
      Parameters:
      realm - e.g. i2cp, routerconsole, etc.
      user - null or "" for no user, already trimmed
      Returns:
      the pw or null
    • getPlain

      public String getPlain(String realm, String user)
      Parameters:
      realm - e.g. i2cp, routerconsole, etc.
      user - null or "" for no user, already trimmed
      Returns:
      the pw or null
    • getB64

      public String getB64(String realm, String user)
      Parameters:
      realm - e.g. i2cp, routerconsole, etc.
      user - null or "" for no user, already trimmed
      Returns:
      the decoded pw or null
    • md5Hex

      public static String md5Hex(String subrealm, String user, String pw)
      Straight MD5, no salt Will return the MD5 sum of "user:subrealm:pw", compatible with Jetty and RFC 2617. Updated in 0.9.26 to use UTF-8, as implied in RFC 7616/7617 See also http://stackoverflow.com/questions/7242316/what-encoding-should-i-use-for-http-basic-authentication http://stackoverflow.com/questions/702629/utf-8-characters-mangled-in-http-basic-auth-username
      Parameters:
      subrealm - to be used in creating the checksum
      user - non-null, non-empty, already trimmed
      pw - non-null, plain text, already trimmed
      Returns:
      lower-case hex with leading zeros, 32 chars, or null on error
    • md5Hex

      public static String md5Hex(String fullpw)
      Straight MD5, no salt Will return the MD5 sum of the data, compatible with Jetty and RFC 2617. Updated in 0.9.26 to use UTF-8, as implied in RFC 7616/7617 See also http://stackoverflow.com/questions/7242316/what-encoding-should-i-use-for-http-basic-authentication
      Parameters:
      fullpw - non-null, plain text, already trimmed
      Returns:
      lower-case hex with leading zeros, 32 chars, or null on error
    • md5Sum

      public static byte[] md5Sum(byte[] data)
      Standard MD5 checksum
      Parameters:
      data - non-null
      Returns:
      16 bytes, or null on error
    • sha256Hex

      public static String sha256Hex(String subrealm, String user, String pw)
      Straight SHA256, no salt Will return the SHA256 sum of "user:subrealm:pw", compatible with RFC 7616. NOT currently supported by Jetty.
      Parameters:
      subrealm - to be used in creating the checksum
      user - non-null, non-empty, already trimmed
      pw - non-null, plain text, already trimmed
      Returns:
      lower-case hex with leading zeros, 32 chars, or null on error
      Since:
      0.9.56
    • sha256Hex

      public static String sha256Hex(String fullpw)
      Return the SHA256 sum of the data, compatible with RFC 7616. NOT currently supported by Jetty.
      Parameters:
      fullpw - non-null, plain text, already trimmed
      Returns:
      lower-case hex with leading zeros, 64 chars, or null on error
      Since:
      0.9.56