CpEntry
One classpath entry with the two digests a single central-directory walk yields.
typeSetKey is the set of .class NAMES, for the dedup below — blind to content by design, so two builds of one library fold together. contentKey adds each entry's CRC and size, and is what the overlay keys a shard's staleness on: it catches a recompile that kept the class list, and it is blind to path and mtime, so a jar re-extracted under a new temp name is not a change. Both cover .class only — editing a lang file or repacking is not a change either. Null on a jar with no classes, or an unreadable one.