| Inputs: |
| Set of anchor positions: |
| Set of untrustworthy anchor to node RSSs: |
| Set of trustworthy anchor to anchor RSSs: |
| Detection threshold: |
| Steps: |
| Define a grid G of L points in the plane, covering the WSN deployment region and an array V of L counters. |
| set |
| for every anchor do |
| Obtain a ring of the form (2) that should ideally contain the node position, using (3) |
| for every point of the grid do |
| if then |
| Increment counter of votes for point g: |
| end if |
| end for |
| end for |
| Obtain the intersection region as the set of grid points with maximum number of “votes”: |
| |
| |
| Estimate the position of the node as the centroid of the intersection area: |
| |
| Compute the sample mean of the number of votes: |
| |
| if then |
| set wormhole_flag ←true |
| else |
| set wormhole_flag ←false |
| end if |
| return wormhole_flag and estimated position |