Package com.subgraph.orchid.config

Source Code of com.subgraph.orchid.config.TorConfigHSAuth

package com.subgraph.orchid.config;

import java.util.HashMap;
import java.util.Map;

import com.subgraph.orchid.TorException;
import com.subgraph.orchid.circuits.hs.HSDescriptorCookie;
import com.subgraph.orchid.circuits.hs.HSDescriptorCookie.CookieType;
import com.subgraph.orchid.data.Base32;
import com.subgraph.orchid.encoders.Base64;

public class TorConfigHSAuth {
 
  private final Map<String, HSDescriptorCookie> map = new HashMap<String, HSDescriptorCookie>();

  void add(String key, String b64Value) {
    final HSDescriptorCookie cookie = createFromBase64(b64Value);
    final String k = validateKey(key);
    map.put(k, cookie);
  }
 
  private String validateKey(String key) {
    final String k = (key.endsWith(".onion")) ? key.substring(0, (key.length() - 6)) : key;
    try {
      byte[] decoded = Base32.base32Decode(k);
      if(decoded.length != 10) {
        throw new IllegalArgumentException();
      }
      return k;
    } catch (TorException e) {
      throw new IllegalArgumentException(e.getMessage());
    }
  }
 
  HSDescriptorCookie get(String key) {
    return map.get(validateKey(key));
  }
 
  private HSDescriptorCookie createFromBase64(String b64) {
    if(b64.length() != 22) {
      throw new IllegalArgumentException();
    }
    final byte[] decoded = Base64.decode(b64 + "A=");
    final byte lastByte = decoded[decoded.length - 1];
    final int flag = (lastByte & 0xFF) >> 4;
    final byte[] cookie = new byte[decoded.length - 1];
    System.arraycopy(decoded, 0, cookie, 0, cookie.length);
    switch(flag) {
    case 0:
      return new HSDescriptorCookie(CookieType.COOKIE_BASIC, cookie);
    case 1:
      return new HSDescriptorCookie(CookieType.COOKIE_STEALTH, cookie);
    default:
      throw new TorException("Illegal cookie descriptor with flag value: "+ flag);
    }
  }
}
TOP

Related Classes of com.subgraph.orchid.config.TorConfigHSAuth

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.