From crypto-workbench
Map required cryptographic primitives to libraries and tools.
How this skill is triggered — by the user, by Claude, or both
Slash command
/crypto-workbench:crypto-library-mapThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Map required cryptographic primitives to libraries and tools.
Map required cryptographic primitives to libraries and tools.
Verify extracted/impl_specs/ contains an impl spec for the current target. If not, tell the user to run crypto-extract-spec first.
Read the impl spec. Extract the required:
Run load_all_registries(registry_root) from libraries.registry_loader where registry_root points to the plugin's bundled registry/ directory (under ${CLAUDE_PLUGIN_ROOT}/registry).
This returns a dict keyed by category (algorithms, libraries, math_families, tools) with lists of registry entries.
For each required primitive, evaluate available libraries from the registry:
Prefer maintained, reviewed implementations over custom primitive code.
For each library considered but rejected, record the reason (unmaintained, missing primitive, license issue, known vulnerability, etc.).
If more than one valid library path exists for any primitive (e.g., cryptography vs pyca/cryptography vs oqs-python for a lattice KEM), summarize the tradeoffs to the user:
Ask the user which path they want. Do not silently pick the "default" — picking a library is a scope-shaping decision that the user should own.
If every primitive has exactly one reasonable library choice, do not stop for a fork decision — but announce the one-option path briefly before writing the artifact ("One viable library per primitive: [list]. Proceeding unless you object.") so the user can still redirect. Do not silently skip the user.
Call write_yaml_artifact() from artifacts.writer with:
artifact_type = "library_mapping"target = current target namecreated_from = impl spec artifact idcontent = dict following base spec Section 7.6:
primitives_needed = list of required primitivesmappings = list of dicts with: primitive, library, function_or_api, version, license, side_channel_status, notesrejected = list of dicts with: library, reasonrecommendation = summary recommendationworkbench_root = .cryptoworkbenchReport the mapping summary and recommend crypto-plan-review as the next step.
libraries.registry_loader — load_all_registries()artifacts.writer — write_yaml_artifact()${CLAUDE_PLUGIN_ROOT}/registry/libraries/ — library metadata${CLAUDE_PLUGIN_ROOT}/registry/algorithms/ — algorithm metadata${CLAUDE_PLUGIN_ROOT}/registry/math_families/ — math family metadata${CLAUDE_PLUGIN_ROOT}/registry/tools/ — tool metadataShared Python modules ship inside this plugin under ${CLAUDE_PLUGIN_ROOT}/src/. The user's current working directory is their working project — that is where .cryptoworkbench/ lives and where any relative path like workbench_root resolves.
When invoking Python from this skill:
src/ to the Python path. Inline form: PYTHONPATH="${CLAUDE_PLUGIN_ROOT}/src" python .... Inside a script: sys.path.insert(0, "${CLAUDE_PLUGIN_ROOT}/src").workbench_root as a path relative to the user's cwd (typically .cryptoworkbench)..py file — not inline python -c with shell quoting.npx claudepluginhub bacharkachouh/crypto-workbench --plugin crypto-workbenchGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.