1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.jce.provider; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.security.cert.PolicyNode; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.ArrayList; 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.HashSet; 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Iterator; 7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.List; 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Set; 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class PKIXPolicyNode 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam implements PolicyNode 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam protected List children; 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam protected int depth; 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam protected Set expectedPolicies; 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam protected PolicyNode parent; 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam protected Set policyQualifiers; 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam protected String validPolicy; 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam protected boolean critical; 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * CONSTRUCTORS 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public PKIXPolicyNode( 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam List _children, 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int _depth, 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Set _expectedPolicies, 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam PolicyNode _parent, 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Set _policyQualifiers, 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam String _validPolicy, 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean _critical) 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam children = _children; 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam depth = _depth; 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam expectedPolicies = _expectedPolicies; 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam parent = _parent; 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam policyQualifiers = _policyQualifiers; 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam validPolicy = _validPolicy; 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam critical = _critical; 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public void addChild( 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam PKIXPolicyNode _child) 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam children.add(_child); 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _child.setParent(this); 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Iterator getChildren() 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return children.iterator(); 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public int getDepth() 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return depth; 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Set getExpectedPolicies() 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return expectedPolicies; 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public PolicyNode getParent() 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return parent; 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Set getPolicyQualifiers() 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return policyQualifiers; 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String getValidPolicy() 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return validPolicy; 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public boolean hasChildren() 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return !children.isEmpty(); 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public boolean isCritical() 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return critical; 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public void removeChild(PKIXPolicyNode _child) 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam children.remove(_child); 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public void setCritical(boolean _critical) 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam critical = _critical; 100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public void setParent(PKIXPolicyNode _parent) 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam parent = _parent; 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String toString() 108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return toString(""); 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String toString(String _indent) 113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam StringBuffer _buf = new StringBuffer(); 115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _buf.append(_indent); 116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _buf.append(validPolicy); 117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _buf.append(" {\n"); 118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam for(int i = 0; i < children.size(); i++) 120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _buf.append(((PKIXPolicyNode)children.get(i)).toString(_indent + " ")); 122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _buf.append(_indent); 125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _buf.append("}\n"); 126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return _buf.toString(); 127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public Object clone() 130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return copy(); 132b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 133b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 134b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public PKIXPolicyNode copy() 135b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 136b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Set _expectedPolicies = new HashSet(); 137b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Iterator _iter = expectedPolicies.iterator(); 138b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam while (_iter.hasNext()) 139b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 140b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _expectedPolicies.add(new String((String)_iter.next())); 141b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 142b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 143b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Set _policyQualifiers = new HashSet(); 144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _iter = policyQualifiers.iterator(); 145b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam while (_iter.hasNext()) 146b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 147b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _policyQualifiers.add(new String((String)_iter.next())); 148b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 149b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 150b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam PKIXPolicyNode _node = new PKIXPolicyNode(new ArrayList(), 151b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam depth, 152b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _expectedPolicies, 153b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam null, 154b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _policyQualifiers, 155b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam new String(validPolicy), 156b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam critical); 157b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 158b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _iter = children.iterator(); 159b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam while (_iter.hasNext()) 160b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 161b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam PKIXPolicyNode _child = ((PKIXPolicyNode)_iter.next()).copy(); 162b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _child.setParent(_node); 163b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam _node.addChild(_child); 164b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 165b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 166b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return _node; 167b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 168028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro 169028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro public void setExpectedPolicies(Set expectedPolicies) 170028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro { 171028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro this.expectedPolicies = expectedPolicies; 172028ab6e01e3b911024b9b9243e9a0f4ac377c0faSergio Giro } 173b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 174