StreamSec Home  Forum Home 
 
Welcome, Guest.
Your IP: 216.73.216.149
2026-08-30 09:20:06 
 Public Support
 StreamSec Tools 4.1.3
Bottom
 
Total posts: 1
 Author StreamSec Tools 4.1.3
Henrick Wibell Hellström

2026-08-30 08:11:27
Registered user
**Released 30 August 2026.** A certification authority key can now stay on a
hardware token; every exception the library raises now carries a class you can
catch; RFC 3161 time stamping works against authorities that are not RSA; and
one background thread has left every process that does symmetric cryptography.

---

## A CA KEY THAT NEVER ENTERS YOUR PROCESS

The headline of this release is PKCS#11 support. Name the vendor module and the
token, and `TstKeyStoragePkcs11` resolves keys from a Cryptoki 2.40 device the
way the library already resolves them from a PFX. The private key is generated
**on** the token, marked non-extractable, and never enters your process — every
signature is computed by the device.

Issuing needed no new code. `TstBaseCertificateGenerator` already signs through
the private-key interface, so a CA key on a token issues certificates exactly as
one in a PFX does, and so do the CSR, CRL and OCSP generators.

RSA and ECDSA both — PKCS#1 v1.5 and PSS, P-256/384/521. What a given device can
actually do is **read from the device** rather than assumed: the mechanism list
is queried at open, and a request the token cannot serve is refused with a
message naming the mechanism instead of failing somewhere further down. Tokens
differ enormously; one that signs SHA-256 may have no SHA-384 at all.

The credential is length-checked against the token's declared range before
anything is sent, so a mistyped passphrase cannot burn one of the few tries that
stand between the token and being locked.

One source, Windows and POSIX: the palette component is available for Win32,
Win64, Linux64 and macOS. It is not offered for iOS or Android, which do not
permit loading an arbitrary vendor module.

Alongside it, and useful on its own: `tExternalDLPrivateKey` gives EC keys the
out-of-process hook RSA keys have had for years.

## TYPED EXCEPTIONS THROUGHOUT

Every `raise` in the library now carries a class from a per-layer hierarchy
rather than a bare `Exception`, so you can catch what you meant to catch. Six
raises that never fired now do — see the BEHAVIOUR CHANGE note in `CHANGES.txt`
before upgrading.

## TIME STAMPING, REVOCATION AND CERTIFICATES

- `TstTimeStampClient` could not verify a token from **any** authority that
  signs with something other than RSA. Fixed, and it is now on the component
  palette with an icon at all three sizes.
- `TsaCertificate` verifies tokens that carry no signer certificate of their own.
- `TstOcspServer.ResponderCertificate` signs with a delegated responder key.
- `id-pkix-ocsp-nocheck` and `organizationIdentifier` are recognised.
- AES-GCM and AES-CCM now have algorithm identifiers, so CMS can name them.
- OID naming: a runtime registration no longer overrides a built-in name.

## SERVING WITHOUT A SECOND HTTP STACK

`StreamSec.Mobile.PlainTextResources` publishes exactly the small set of things
that must be served over cleartext http — CRLs, OCSP responses, AIA and CPS
documents — without standing up a second HTTP stack beside your TLS one.
`HttpSendStream` and friends serve static content properly over a stream you
already hold, with range requests and validators. `TsmRESTClient.TLSEngine`
keeps one TLS engine across calls instead of building a cold one every time.

## ONE FEWER THREAD, AND A SHORTER BILL OF MATERIALS

`stBlockCipher` carried an asynchronous CTR keystream generator: a background
thread, created at unit initialization, feeding a cache the cipher had stopped
drawing on. Because `stBlockCipher` sits under every AES and 3DES class, every
application doing symmetric cryptography — which is to say every TLS or SSH
application — was starting that thread for nothing. It is gone. Cipher behaviour
is unchanged.

Removing it also retired the one component in the library whose licence terms
were never stated: a lock-free list attributed to Nexus Database Systems, which
reproduced a copyright line and a URL and nothing else. It reached every build
that did symmetric cryptography. It now reaches none, and the SBOM lists it as
excluded.

**What a normal build's notices file now amounts to:** a single MIT notice, for
the BearSSL constant-time primitives that keep AES and GHASH free of
secret-dependent table lookups. No copyleft-licensed code. The Gladman AES
assembler carries the one documentation-attribution clause in the library and is
in its own opt-in unit. As always, the authority for any of this is the
CycloneDX document that ships with the release, not this announcement.

## UPGRADING

Two public identifiers are gone: `tBlockCipher.KeyStreamGenerator` and the
`iGenerateKeyStream` interface. Only code that named them needs editing, and
only to delete the reference — assigning a `KeyStreamGenerator` never affected
the data that came out of the cipher. `tBlockCipher.GenerateKeyStream` is
unaffected.

Code that **implements** `iDLPrivateKey` rather than merely consuming it needs
the new `ExternalKey` member.

Full detail, including the BEHAVIOUR CHANGE notes, is in `CHANGES.txt`.
Top

:: Written with and Powered by StreamSec Tools 4.1 ::
Copyright © 2000-2026 StreamSec Handelsbolag
Forum data layer and page templates derived from the RealThinClient SDK web-forum example, Copyright © 2004-2022 Teppi Technology (MIT)