key enumeration [ci skip