Skip to content

Add keyKind (or isSymmetric) property to SignatureAlgorithm interface for structural symmetric-algorithm detection #537

@coderabbitai

Description

@coderabbitai

Summary

Currently, XmlDSigVerifier.extractAndVerify guards against symmetric (HMAC) signature algorithms by comparing URIs against defaultSymmetricSignatureAlgorithms. This is a best-effort guard that can be bypassed if a caller supplies a custom HMAC implementation registered under a non-default URI (e.g. http://www.w3.org/2001/04/xmldsig-more#hmac-sha256), because the guard only knows about the project-default symmetric URIs.

Proposed solution

Add a keyKind: "asymmetric" | "symmetric" property (or an isSymmetric: boolean flag) to the SignatureAlgorithm interface in src/types.ts. All built-in algorithm classes (HmacSha1, RsaSha1, RsaSha256, etc.) would set the appropriate value. The guard in extractAndVerify (and any future symmetric-sensitive code path) can then use this structural check instead of maintaining a static URI list.

Benefits

  • Future-proof: any new HMAC or other symmetric algorithm added to the registry is automatically caught by the guard.
  • No need to maintain a hardcoded list of well-known HMAC URIs from W3C xmldsig / xmldsig-more specs.
  • Makes algorithm semantics explicit and inspectable at the interface level.

Context

Raised during review of PR #519 (Add XmlDSigVerifier wrapper for SignedXml): #519 (comment)

Requested by @shunkica — deferred from PR #519 as out of scope for that already large change.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions