An AdjacencyList is used to store the history of certification paths attempted in constructing a pat
h from an initiator to a target. The AdjacencyList is initialized with a List of Lists, where each sub- List contains objects of type Vertex. A Vertex describes one possible or actual step in the chain building process, and the associated Certificate. Specifically, a Vertex object contains a Certificate and an index value referencing the next sub-list in the process. If the index value is -1 then this Vertex doesn't continue the attempted build path.
Attempted Paths: C1->C2->C3 C1->C4->C5 C1->C4->C6 C1->C4->C7 C1->C8->C9 C1->C10->C11
AdjacencyList structure: AL = C1,1 AL = C2,2 =>C4,3 =>C8,4 =>C10,5 AL = C3,-1 AL = C5,-1 =>C6,-1 =>C7,-1 AL = C9,-1 AL = C11,-1
The iterator method returns objects of type BuildStep, not objects of type Vertex. A BuildStep contains a Vertex and a result code, accessible via getResult method. There are five result values. POSSIBLE denotes that the current step represents a Certificate that the builder is considering at this point in the build. FOLLOW denotes a Certificate (one of those noted as POSSIBLE) that the builder is using to try extending the chain. BACK represents that a FOLLOW was incorrect, and is being removed from the chain. There is exactly one FOLLOW for each BACK. The values SUCCEED and FAIL mean that we've come to the end of the build process, and there will not be any more entries in the list.
@see sun.security.provider.certpath.BuildStep @see sun.security.provider.certpath.Vertex
@author seth proctor @since 1.4