Generated banner for Doca Sha
Generated logo for Doca Sha

Doca Sha

NVIDIAOfficialCreated by NVIDIA

  • Skill
  • Tool integration
  • Software development
  • Apache-2.0
  • Medium risk

From the author

Use this skill when the user needs SHA-1, SHA-256, or SHA-512 digest acceleration on BlueField-2 silicon via doca_sha (absent on BF-3) — selecting one-shot `doca_sha_task_hash` versus incremental `doca_sha_task_partial_hash` for chunked input, consulting `doca_sha_cap_*` for per-algorithm digest-size limits and input alignment, or decoding DOCA_ERROR_* statuses such as BAD_STATE on a resumed partial hash. Also load it for implied asks like "accelerate SHA-256 on the NIC", "streaming digest over chunks", "digest output size mismatch", or "is SHA-512 present on this card". Refuse and route to the proper owner for cryptographic-hash theory (collision resistance, SHA-3 selection), the AES-GCM / Compress / DMA libraries, or SDK install and BFB bring-up.
— the description by NVIDIA

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The doca-sha skill assists developers in integrating hardware-accelerated SHA hashing into their applications on BlueField-2 DPUs. It covers the lifecycle of SHA tasks, including one-shot and incremental (partial) hashing, capability discovery for algorithms and buffer sizes, and error handling for DOCA-specific status codes. This skill is designed to guide users through the configuration, testing, and debugging of SHA offload implementations while ensuring proper adherence to memory access and permission requirements.

What it does

  • Guides selection between one-shot and partial hash tasks for chunked data.
  • Provides methods to query device capabilities for supported SHA algorithms and buffer constraints.
  • Explains how to configure and manage the lifecycle of SHA tasks within a DOCA application.
  • Assists in debugging DOCA_ERROR_* codes specific to the SHA library.
  • Defines memory permission requirements for source and destination buffers.
  • Routes users to appropriate resources for cryptographic theory or non-SHA DOCA libraries.

When to use it

  • When implementing SHA-1, SHA-256, or SHA-512 acceleration on BlueField-2 hardware.
  • When choosing between one-shot and incremental hashing for specific data sizes.
  • When troubleshooting errors like BAD_STATE or invalid buffer sizes during hash operations.
  • When verifying if a specific SHA algorithm is supported by the current DPU configuration.
  • When setting up memory mappings for SHA task buffers.

Advantages

  • Ensures correct usage of hardware-specific acceleration features.
  • Provides clear guidance on task lifecycle and error resolution.
  • Helps optimize performance by selecting the appropriate hashing mode.
  • Reduces development time by providing structured workflows for common SHA tasks.

Usage examples

“Offload SHA-256 to the BlueField.”
The agent will guide the user through checking algorithm support via doca_sha_cap_*, selecting the appropriate task type, and using the shipped SHA samples as a reference.
“Partial hash returns BAD_STATE.”
The agent will instruct the user to maintain the incremental doca_sha_task_partial_hash lifecycle and verify the state of the partial hash stream.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/nvidia/doca-sha/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip doca-sha.zip -d .agents/skills

Documentation by NVIDIA

DOCA SHA

Examples

  • "Offload SHA-256 to the BlueField." — this is in scope. Use the shipped SHA sample and doca_sha_cap_* before picking SHA-1 / SHA-256 / SHA-512.

  • "Partial hash returns BAD_STATE." — stay on the incremental doca_sha_task_partial_hash lifecycle; do not switch to a CPU hash library mid-stream.

Instructions

Follow Loading order below. Open the tasks companion for configure / build / run. Open the capabilities companion for one-shot vs partial hash and algorithm support. Do not open every companion file.

Where to start: This skill assumes DOCA is already installed and the user is doing hands-on SHA-acceleration work on a BlueField-2 DPU (Arm side or its host) with DOCA. BlueField-3 has no SHA engine. Open the tasks companion if the user wants to do something (configure / build / modify / run / test / debug); open the capabilities companion when the question is what can DOCA SHA express on this version. If the user has not installed DOCA yet, route to doca-setup/SKILL.md first. If the user is asking "should I even use the accelerator for this hash?", the path-selection rule in

Capabilities and modes

is the first stop.

How to use this skill. Read this file, then search the companion file for the ## <name> heading the question needs and read that whole section. Answer completely from it, quoting only its symbols and commands. Do not browse docs; use the entry points in doca-public-knowledge-map. Give environment checks as commands for the user's DOCA host. For out-of-scope requests, name the skill that owns them and stop.

Example questions this skill answers well

The CLASSES of DOCA SHA questions this skill is built to answer, each with one worked example. The agent should treat the class as the load-bearing piece — the worked example is a single instance.

  • "Should I offload this hash to DOCA SHA, or just compute it on the CPU?" — worked example: "I am verifying file integrity on a 4 GiB image; is doca-sha worth the setup vs OpenSSL on the CPU?". Answered by the path-selection table in

    Capabilities and modes

    • the "when NOT to use doca-sha" bullets in

    Safety policy.

  • "Does my device support the SHA algorithm I want?" — worked example: "is SHA-256 in the accelerator on this BlueField, and what is the minimum destination buffer size for it?". Answered by the algorithm + buffer-sizing capability-query rule (doca_sha_cap_task_hash_get_supported(devinfo, algorithm) for the one-shot path; _task_partial_hash_get_supported(devinfo, algorithm) for the partial-hash path; doca_sha_cap_get_min_dst_buf_size, doca_sha_cap_get_max_src_buf_size) in

    Capabilities and modes

    • the discovery step in

    configure.

  • "How do I pick between the one-shot and the partial / incremental hash task?" — worked example: "my input is 1 GiB and the device cap says max source buffer is 64 MiB". Answered by the one-shot-vs-partial table in

    Capabilities and modes

    • the task-config workflow in

    modify.

  • "What permissions does the source / destination mmap need?" — worked example: "my doca_sha_task_hash returns DOCA_ERROR_NOT_PERMITTED". Answered by the permission matrix in ## Safety policy

    • the mmap-set-permissions checklist in

    test.

  • "Is this DOCA SHA API available on my installed DOCA version?" — worked example: "is doca_sha_task_partial_hash in the DOCA I have installed?". Answered by the version-compatibility overlay in

    Version compatibility,

    which cross-links the canonical detection chain in doca-version/SKILL.md and adds the SHA-specific "discover, do not assume" bullets.

  • "What does this DOCA_ERROR_* from a SHA call mean and which layer caused it?" — worked example: "DOCA_ERROR_INVALID_VALUE on doca_sha_task_hash_alloc_init". Answered by the SHA overlay on the cross-library taxonomy in

    Error taxonomy

    • the layered ladder in

    debug that escalates to

    doca-debug/SKILL.md.

Audience

This skill serves external developers building applications that consume the DOCA SHA library — i.e., users whose code calls doca_sha_* (directly in C/C++, or through FFI/bindings from another language) to offload SHA hashing onto the BlueField-2 SHA engine (BlueField-3 has none). It is not for NVIDIA developers contributing to DOCA SHA itself.

Language scope. DOCA SHA ships as a C library with pkg-config module name doca-sha. The shipped samples are written in C. C and C++ consumers are the canonical case and the worked examples in the tasks companion assume that path. Other-language consumers (Rust, Go, Python, …) consume the same *.so through FFI or language-specific bindings; the skill's contribution in that case is to keep the lifecycle, capability-discovery, permission, error-taxonomy, and one-shot-vs-partial guidance language-neutral, and to route the agent to the public C ABI as the authoritative surface that any wrapper will eventually call.

When to load this skill

Load this skill when the user is doing hands-on DOCA SHA work, in any language. Concretely:

  • Initializing a doca_sha context on a doca_dev and configuring at least one task type (doca_sha_task_hash and/or doca_sha_task_partial_hash) before doca_ctx_start().

  • Choosing between the one-shot task (doca_sha_task_hash — input fits in a single source buffer, output digest lands in a single destination buffer) and the partial / incremental task (doca_sha_task_partial_hash — input streamed in chunks, finalized separately) for the user's data shape.

  • Setting permissions on doca_mmap correctly for the source buffer (DOCA_ACCESS_FLAG_LOCAL_READ_ONLY at minimum) and the destination buffer (DOCA_ACCESS_FLAG_LOCAL_READ_WRITE).

  • Sizing the destination buffer against doca_sha_cap_get_min_dst_buf_size(devinfo, algorithm) and the source buffer against doca_sha_cap_get_max_src_buf_size(devinfo).

  • Checking which SHA algorithm enums (DOCA_SHA_ALGORITHM_SHA1, DOCA_SHA_ALGORITHM_SHA256, DOCA_SHA_ALGORITHM_SHA512) the active device's accelerator advertises, via doca_sha_cap_task_hash_get_supported(devinfo, algorithm) and doca_sha_cap_task_partial_hash_get_supported(devinfo, algorithm) — both fold task-support and algorithm-support into one call.

  • Validating a digest against a published test vector before pushing bulk input through the accelerator.

  • Debugging a DOCA_ERROR_* returned from a SHA call (lifecycle vs. buffer-sizing vs. permission vs. unsupported-algorithm) and the task-completion event on the progress engine.

  • Designing or extending non-C bindings (Rust, Go, Python, …) that wrap the SHA C ABI — for the lifecycle, permission, capability, and one-shot-vs-partial rules the wrapper must honor.

Do not load this skill for general DOCA orientation, install of DOCA itself, non-SHA hashing libraries on CPU (use OpenSSL or similar), or other DOCA libraries. For those, use doca-public-knowledge-map/SKILL.md.

What this skill provides

This is a thin loader. The body keeps only the orientation needed to pick the right next file. The substantive SHA-specific material lives in two companion files:

  • the capabilities companion — what DOCA SHA can express on this version: the two task types (one-shot hash and partial / incremental hash), the three algorithm enums, the capability-query surface (doca_sha_cap_* for algorithm support and buffer sizing), the SHA error taxonomy (mapped onto the cross-library DOCA_ERROR_* set), the observability surface (per-task completion events on the progress engine), the safety policy that gates source / destination mmap permission decisions, and the path-selection rule (when to use doca-sha versus a CPU hash or a different DOCA crypto library).

  • the tasks companion — step-by-step workflows for the six in-scope SHA verbs: configure, build, modify, run, test, debug. Plus a Deferred task verbs block that points out-of-scope questions at the right next skill.

The skill assumes a host or BlueField where DOCA is already installed at the standard location and the user has the privileges their public install profile expects. It does not cover installing DOCA — that path goes through doca-setup/SKILL.md.

What this skill deliberately does not ship

This skill is agent guidance, not a samples or templates bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:

  • Pre-written DOCA SHA application source code, in any language. The verified SHA source code is the shipped C samples at /opt/mellanox/doca/samples/doca_sha/, plus the File Integrity reference application linked from the public DOCA SHA guide. The agent's job is to route the user to those files and prescribe a minimum-diff modification on them via the universal modify-a-sample workflow in doca-programming-guide/SKILL.md, layered with the SHA-specific overrides in

    modify.

  • Pre-computed digest tables for arbitrary inputs. The skill tells the agent to use a published test vector (e.g. the NIST SHA test vectors for the empty string, "abc", and the million-a input) as the known-vector smoke; it does not ship a vector bank of its own.

  • Standalone build manifests (meson.build, CMakeLists.txt, Cargo.toml, …) parked inside the skill. The agent constructs the build manifest in the user's project directory against the user's installed DOCA, where pkg-config --modversion doca-sha is the source of truth.

  • A samples/, bindings/, or reference/ subtree of any kind. A mock or incomplete artifact in this skill's tree, even one labeled "reference", is misleading: users will read it as buildable.

Loading order

  1. Read this skill first to confirm the user's question is in scope.

  2. For the SHA capability matrix, algorithm enums, one-shot vs partial task split, capability-query rules, permission matrix, error taxonomy, observability, and safety / path-selection policy, see the capabilities companion.

  3. For step-by-step workflows — configure, build, modify, run, test, debug — see the tasks companion.

Both companion files cross-link to each other, doca-version/SKILL.md for the canonical version-handling rules, and doca-public-knowledge-map/SKILL.md whenever the right answer is "look it up in the public docs or the installed package layout" rather than "SHA-specific guidance".

  • doca-public-knowledge-map/SKILL.md — the routing table for every public DOCA documentation source and the on-disk layout of an installed DOCA package. The DOCA SHA page lives at docs.nvidia.com/doca/sdk/DOCA-SHA/; the File Integrity reference application is the canonical worked example.

  • doca-setup/SKILL.md — env preparation, install verification, and the I have no install yet path with the public NGC DOCA container. This skill assumes its preconditions are satisfied.

  • doca-version/SKILL.md — canonical DOCA version-handling rules. This skill's ## Version compatibility cross-links the four-way match rule and adds only the SHA-specific "discover algorithms + buffer sizes via cap query" overlay.

  • doca-structured-tools-contract/SKILL.md — the bundle's structured-tools precedence rule (detect / prefer / fall back / report). The Command appendix in the tasks companion honors this contract.

  • doca-programming-guide/SKILL.md — general DOCA programming patterns shared by every library: the canonical pkg-config + meson build pattern, the universal modify-a-shipped-sample first-app workflow, the universal lifecycle, the cross-library DOCA_ERROR_* taxonomy, and the program-side debug order. This skill layers SHA specifics on top.

  • doca-debug/SKILL.md — the cross-cutting debug ladder (install / version / build / link / runtime / program / driver). SHA-specific debug (algorithm-not-supported, destination-buffer-too-small, partial-hash-out-of-order) overlays on top of that ladder.

Files

CAPABILITIES.md

DOCA SHA capabilities, version overlay, errors, observability, safety

Where to start: Pick the H2 anchor that matches your question (capabilities / version / errors / observability / safety) and read that section end-to-end. The tables in each section are the load-bearing content; the prose around them is interpretation.

Read this file when the loader sent you here from SKILL.md. For the how of executing each pattern (the verbs configure / build / modify / run / test / debug), jump to TASKS.md. For the canonical DOCA version-handling rules that this skill layers a SHA overlay on top of, see doca-version/SKILL.md.

Pattern overview

Every DOCA SHA question this skill teaches resolves into one of FIVE patterns. The patterns are CLASSES — they apply across every SHA release and every device the accelerator runs on (hardware SHA is BlueField-2 only; BlueField-3 has no SHA engine).

PatternWhen it applies (class shape)Where the substance lives
1. Decide whether to offloadCompare the per-call setup cost of doca-sha against a CPU SHA on the same input; choose offload only when the input is bulk, repeated, or already pinned in doca_mmap memory## Capabilities and modes path-selection table + ## Safety policy "when NOT to use doca-sha" bullets
2. Pick the task typeOne-shot (doca_sha_task_hash) when the input fits in one source buffer; partial / incremental (doca_sha_task_partial_hash) when the input is larger than max_src_buf_size or arrives in chunks## Capabilities and modes one-shot-vs-partial table + TASKS.md ## modify
3. Discover capabilitiesQuery doca_sha_cap_* for algorithm support, min destination buffer size, and max source buffer size, against the active doca_devinfo BEFORE choosing the algorithm or sizing buffers## Capabilities and modes capability-query rule + TASKS.md ## configure step 2
4. Honor source / destination permissionsSource mmap = DOCA_ACCESS_FLAG_LOCAL_READ_ONLY at minimum; destination mmap = DOCA_ACCESS_FLAG_LOCAL_READ_WRITE; both must be set BEFORE the first task submission## Safety policy permission matrix + TASKS.md ## test
5. Diagnose a SHA errorMap symptom (DOCA_ERROR_BAD_STATE, _INVALID_VALUE, _NOT_SUPPORTED, _NOT_PERMITTED, _AGAIN) to root cause — lifecycle, buffer sizing, algorithm support, permission, or queue pressure — without leaving the SHA layer prematurely## Error taxonomy + TASKS.md ## debug

Two cross-cutting rules that apply to every pattern above:

  • Discover the version-installed surface, do not assume. Every pattern above gates on pkg-config --modversion doca-sha and on the doca_sha_cap_* capability queries against the active doca_devinfo. Quoting an algorithm enum, a digest size, or a max source buffer size without checking is the most common hallucination failure mode.

  • Validate against a published test vector before bulk. The cheapest way to confirm the configured SHA context produces a correct digest is to hash a small fixed input (e.g. the empty string, "abc", or the million-a input from the NIST SHA test vectors) and compare against the published digest, before submitting any user data.

Capabilities and modes

DOCA SHA is a DOCA Core Context. Every SHA instance follows the universal cfg-create → cfg-set-* → init → start → use → stop → destroy lifecycle (see doca-programming-guide CAPABILITIES.md ## Capabilities and modes (doca-programming-guide/CAPABILITIES.md#capabilities-and-modes)). On top of that lifecycle, DOCA SHA layers its own task model and algorithm-selection surface.

The two task types. DOCA SHA exposes two task types; each has its own doca_sha_task_*_set_conf (enable the task) and its own matching doca_sha_cap_task_*_get_supported(devinfo, algorithm) (capability query) entry point. The agent must call the capability query before assuming the task type is available on the user's device.

Task typeClass shapeNotes
doca_sha_task_hash (one-shot)Take a single source doca_buf + an algorithm enum, produce a digest in a single destination doca_bufAsynchronous; completion arrives via doca_pe_progress. Source must be ≤ doca_sha_cap_get_max_src_buf_size(devinfo).
doca_sha_task_partial_hash (incremental)Stream input across multiple submissions, finalize with a separate callUse when the input is larger than max_src_buf_size OR arrives in chunks (e.g. streamed from disk or network). Marking the task final on the first buffer (before any intermediate submit) is undefined behavior, not a defined error — use a non-partial doca_sha_task_hash instead when a single buffer is all you have.

Path selection — one-shot vs partial / incremental. Both task types can coexist on the same context; choose at least one before doca_ctx_start().

PathWhat it isRight shape forWrong shape for
One-shot (doca_sha_task_hash)Single source buffer + single destination buffer + one task submissionBuffers that fit in max_src_buf_size and are available in full at submit time (file-integrity verify on a small file, content-addressed lookup of a known blob)Inputs larger than max_src_buf_size; inputs that arrive in chunks (streaming I/O); per-call cost dominates if the input is tiny — prefer CPU
Partial / incremental (doca_sha_task_partial_hash)Multiple intermediate submissions feeding the same digest state, finalized with a separate callBulk inputs (multi-GiB files, content addressing across large blobs); streaming inputs where chunks arrive over timeOne-shot small inputs; CPU is faster than the producer / consumer ceremony for a single small hash

Path-selection — when to use DOCA SHA at all. The agent's rule:

  • Use doca-sha when the input is bulk (rule of thumb: ≥ a few hundred KiB), the throughput requirement is high enough that freeing the CPU for other work is valuable, or the input is already pinned in doca_mmap memory because another DOCA library produced it. File integrity verification across many files, content addressing in a deduplication preprocessing pass, and storage workloads are the canonical fits.

  • Do NOT use doca-sha when the input is a tiny one-shot hash (the per-call DMA-to-accelerator setup cost dominates; CPU is faster); when the user needs an algorithm not in the device's accelerator (use OpenSSL or a similar CPU library); or when the hash is part of a larger crypto flow that another DOCA library already covers (e.g. AES-GCM authentication tags via doca-aes-gcm).

Algorithm enum — the only public enum. DOCA SHA's algorithm enum surface advertises:

EnumNotes
DOCA_SHA_ALGORITHM_SHA1Legacy 160-bit digest; still supported for compatibility scenarios
DOCA_SHA_ALGORITHM_SHA256The canonical 256-bit SHA-2 digest; the most common choice for file integrity
DOCA_SHA_ALGORITHM_SHA512512-bit SHA-2 digest

The agent must NOT add algorithm names beyond this enum (no MD5, no SHA-3, no Keccak, no Blake) unless doca_sha_cap_task_hash_get_supported(devinfo, algorithm) returns true for them on the user's device — the enum above is the public surface this skill commits to.

Capability discovery — the only rule. Before choosing an algorithm or sizing any buffer, call the matching doca_sha_cap_* query against the active doca_devinfo:

CapabilityQueryWhy the agent must ask
One-shot hash + algorithm supporteddoca_sha_cap_task_hash_get_supported(devinfo, algorithm)Returns DOCA_SUCCESS if both the one-shot hash task and the given algorithm are supported on this device. Any other return is "not supported." The "task supported" and "algorithm supported" axes are folded into this one call — there is no separate doca_sha_cap_task_hash_is_supported or doca_sha_cap_is_algorithm_supported in the public header.
Partial / incremental hash + algorithm supporteddoca_sha_cap_task_partial_hash_get_supported(devinfo, algorithm)Same shape, for the partial-hash task. Partial hash is not on every device-and-algorithm pair; agent must not silently assume it for streaming inputs.
Minimum destination buffer sizedoca_sha_cap_get_min_dst_buf_size(devinfo, algorithm)Algorithm-dependent; a destination buffer smaller than this returns DOCA_ERROR_INVALID_VALUE at submit time
Maximum source buffer sizedoca_sha_cap_get_max_src_buf_size(devinfo)Hardware-bound ceiling on one-shot input size; inputs larger than this force the partial-hash path

Configuration shape. Mandatory configurations before doca_ctx_start(): at least one task type enabled via doca_sha_task_hash_set_conf or doca_sha_task_partial_hash_set_conf, and the matching mmap permissions set on both source and destination buffers per the matrix in ## Safety policy. Optional configurations (queue sizing, doca_sha_task_*_set_conf queue depth) use the standard DOCA Core set_* family with defaults coming from the library; query the active value with doca_sha_cap_get_*.

Version compatibility

For the canonical DOCA version-detection chain, the four-way match rule, NGC container semantics, and the headers-win-over-docs rule, see doca-version/SKILL.md. The body lives there; this skill does not duplicate it.

The SHA-specific overlay is:

  • Algorithm enum membership is device-bound, not version-bound. The agent must not infer "DOCA version X includes SHA-Y" from release notes alone; the runtime authority is doca_sha_cap_task_hash_get_supported(devinfo, DOCA_SHA_ALGORITHM_*) against the active device (which folds task-support and algorithm-support into a single call). Per the cross-cutting cap-query rule in doca-version CAPABILITIES.md ## Observability (doca-version/CAPABILITIES.md#observability), the cap query is the runtime authority — never quote an algorithm as available from agent memory.

  • doca_sha_task_partial_hash is newer than the one-shot task. When the user reports "the partial-hash API I'm reading about isn't on my install", the first hypothesis is that the install pre-dates partial-hash support. Confirm via doca_sha_cap_task_partial_hash_get_supported(devinfo, algorithm) for each algorithm the user needs; if it returns anything other than DOCA_SUCCESS, route to doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) before invoking the partial-hash codepath.

  • doca-sha.pc plus doca-common.pc must both match doca_caps --version at the four-way-match check (per doca-version CAPABILITIES.md ## Version compatibility (doca-version/CAPABILITIES.md#version-compatibility)). A common partial-install pattern on hosts where the SHA package was installed separately from the rest of DOCA is that doca-sha.pc reports release X while doca-common.pc reports release Y; route to doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) layer 2 before any SHA-layer diagnosis.

Error taxonomy

SHA-specific overlays on the cross-library DOCA_ERROR_* taxonomy. The cross-library taxonomy itself lives in doca-programming-guide CAPABILITIES.md ## Error taxonomy (doca-programming-guide/CAPABILITIES.md#error-taxonomy); the rows below are the SHA surface meaning that the agent must disambiguate before falling back to the cross-library response.

ErrorSHA context where it shows upSHA-specific cause
DOCA_ERROR_BAD_STATEAny call after doca_ctx_stop() or before doca_ctx_start()Lifecycle violation. Walk the call sequence against the lifecycle in doca-programming-guide CAPABILITIES.md ## Capabilities and modes (doca-programming-guide/CAPABILITIES.md#capabilities-and-modes). Note: marking a doca_sha_task_partial_hash task final on the first buffer (before any intermediate submit) is undefined behavior, not a defined BAD_STATE error — use a non-partial doca_sha_task_hash instead when a single buffer is all you have.
DOCA_ERROR_INVALID_VALUEdoca_sha_task_hash_alloc_init; doca_sha_task_partial_hash_alloc_init; submit timeThe destination buffer is smaller than doca_sha_cap_get_min_dst_buf_size(devinfo, algorithm), OR the source buffer is larger than doca_sha_cap_get_max_src_buf_size(devinfo). Re-run the matching cap query, then resize.
DOCA_ERROR_NOT_SUPPORTEDdoca_sha_task_*_set_conf; submit with an algorithm enumThe algorithm enum is not in this device's accelerator, OR doca_sha_task_partial_hash is requested on a device that advertises only the one-shot task for that algorithm. Re-run doca_sha_cap_task_hash_get_supported(devinfo, algorithm) / doca_sha_cap_task_partial_hash_get_supported(devinfo, algorithm) against the active doca_devinfo; if either returns anything other than DOCA_SUCCESS, that is the answer — fall back to CPU or change algorithm.
DOCA_ERROR_NOT_PERMITTEDFirst task submissionThe source mmap does not have DOCA_ACCESS_FLAG_LOCAL_READ_ONLY (or a stronger flag that supersedes it), OR the destination mmap is missing DOCA_ACCESS_FLAG_LOCAL_READ_WRITE. Re-check the matrix in ## Safety policy.
DOCA_ERROR_AGAINdoca_task_submit on either SHA task typeThe task queue is full. This is not a hardware error; the program must drain completions via doca_pe_progress() before re-submitting. Same as the cross-library "would-block, retry after progress" pattern.
DOCA_ERROR_DRIVERAny submit / completion callThe layer below DOCA reported failure. Capture state and route to env-class debug (doca-setup ## debug (doca-setup/TASKS.md#debug)) — the layer below DOCA is the suspect, not the SHA program.

The agent's rule: never recommend a retry loop on DOCA_ERROR_* without first identifying which of the rows above is the cause. _AGAIN is the only one that wants a retry (after doca_pe_progress()); the others want investigation, not retry.

Observability

DOCA SHA observability is event-driven, not poll-driven. Every submitted task produces a completion event on the DOCA Core progress engine; there are no SHA-specific counters the way Flow has per-pipe counters.

Three primary signals the agent should reach for:

  1. Task completion events on the PE. Every submitted SHA task (one-shot or partial) produces a completion event when it finishes (or errors). The completion carries the doca_error_t if it failed; the agent must inspect the per-task completion, not the doca_task_submit() return value alone. Submitted but no completion is almost always a missed doca_pe_progress() call in the user's main loop.

  2. Capability snapshot at configure time. The output of every doca_sha_cap_* query is a snapshot of what the device's accelerator said was possible before any task was submitted. Save it as the baseline; if a task later returns DOCA_ERROR_NOT_SUPPORTED or DOCA_ERROR_INVALID_VALUE the diff against this snapshot is the bug.

  3. Known-vector digest comparison. The cheapest correctness signal is to hash a small fixed input (a published NIST SHA test vector — the empty string, "abc", or the million-a input) and compare against the published digest. If the accelerator produces a different digest, the configuration is wrong; do not move on to bulk input.

For cross-cutting observability primitives (--sdk-log-level, the doca-<lib>-trace build flavor, the DOCA_LOG_LEVEL env var) see doca-debug CAPABILITIES.md ## Observability (doca-debug/CAPABILITIES.md#observability). For the install-tree observability (logger names, package layout) defer to doca-public-knowledge-map/SKILL.md.

Safety policy

Overlay on the bundle-wide hardware-safety meta-policy. The rules below are this skill's per-artifact overlay on the cross-cutting rules in doca-hardware-safety CAPABILITIES.md ## Safety policy (doca-hardware-safety/CAPABILITIES.md#safety-policy) (specifically ### Per-artifact overlay pattern (doca-hardware-safety/CAPABILITIES.md#per-artifact-overlay-pattern)). When the two layers disagree, the stricter wins; when either layer says STOP, the agent stops.

DOCA SHA's safety surface is buffer-permission discipline plus path-selection discipline. The library reads from a source buffer and writes a digest into a destination buffer; an incorrect permission flag on either side surfaces as a submit-time error rather than silent corruption — but only when the matrix is correct. The agent's job is to verify both permission and the should I use the accelerator at all question before any submission.

The permission matrix the agent must walk for any new SHA setup:

BufferMinimum mmap permissionClass shapeCommon over-broad mistake
Source (input)DOCA_ACCESS_FLAG_LOCAL_READ_ONLYThe accelerator only needs to read the input; granting write is unnecessary and a small attack-surface wideningGranting DOCA_ACCESS_FLAG_LOCAL_READ_WRITE "to keep things simple" — works, but the read-only flag is the safe minimum
Destination (digest)DOCA_ACCESS_FLAG_LOCAL_READ_WRITEThe accelerator writes the digest; the application reads it backReusing the source doca_mmap as the destination — fails at submit if the mmap is read-only; if both buffers share an mmap, the mmap must be read-write

Path-selection — when NOT to use doca-sha. Equally important:

  • Tiny one-shot hashes. A single 64-byte hash on the CPU is faster than the DMA-to-accelerator setup. The agent should recommend doca-sha only when the input is ≥ a few hundred KiB or repeated, or the input is already pinned in doca_mmap memory because another DOCA library produced it.

  • Unsupported algorithm. If doca_sha_cap_task_hash_get_supported(devinfo, algorithm) returns anything other than DOCA_SUCCESS for the user's intended algorithm on the active device, the answer is to use OpenSSL (or a similar CPU library), not to invent a partial-hash workaround.

  • Hash is part of a larger crypto flow. If the user is computing the hash only to feed it into AES-GCM or a similar authenticated-encryption mode that DOCA already implements, doca-aes-gcm covers the combined surface; layering doca-sha on top is redundant.

The mmap must stay valid until the SHA context is destroyed. Destroying either the source or destination mmap before doca_ctx_destroy() is a use-after-free on the library's bookkeeping; symptoms include DOCA_ERROR_BAD_STATE from subsequent calls and undefined behavior on outstanding tasks.

Validate against a known vector BEFORE bulk submission. A single known-vector smoke (one short input with a published digest) catches algorithm mis-selection, endian assumptions, and buffer-sizing bugs before they corrupt a multi-GiB result.

Deferred topic boundaries

This skill scopes itself to the DOCA SHA library. Adjacent topics the agent will get asked but should route elsewhere:

  • General cryptographic hash function background (collision resistance, length extension, why SHA-1 is deprecated for signatures, when SHA-3 is preferred) — outside this skill. Route to upstream NIST / IETF cryptography documentation; this skill assumes the user already knows which algorithm they want and is asking how to express it through the DOCA SHA API.

  • DOCA Core context and progress engine internals — owned by doca-programming-guide/SKILL.md. This skill uses the Core context lifecycle; it does not redefine it.

  • Cross-cutting DOCA_ERROR_* taxonomy — owned by doca-programming-guide CAPABILITIES.md ## Error taxonomy (doca-programming-guide/CAPABILITIES.md#error-taxonomy). This skill adds the SHA overlay, not the taxonomy itself.

  • Other DOCA crypto-acceleration libraries (DOCA AES-GCM, DOCA Compress, DOCA DMA) — separate libraries with their own skills. Path-selection guidance in ## Capabilities and modes names them; the deep per-library substance lives in the matching skill.

  • Cross-library doca_caps invocation patterns — owned by the cross-library doca-caps tool skill. This skill references the SHA capability query family (doca_sha_cap_*), which is per-library; the cross-library capability snapshot tool (doca_caps --list-devs) is a separate surface.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

The author says: Requires DOCA SDK installed at /opt/mellanox/doca on Linux (Ubuntu 22.04/24.04 or RHEL/SLES) with a BlueField-2 DPU attached (BlueField-3 has no SHA engine). Reads the user's local install via `pkg-config doca-sha` and inspects /opt/mellanox/doca/{lib,include,samples,applications}. The validation steps require a live DOCA install.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
NVIDIA
Publisher
NVIDIA (Official)
Source
NVIDIA/skills · skills/doca-sha · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA or NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-sha.zip