Use Cases
- WebAuthn/Passkeys: Browser credential signing
- TLS/SSL: Certificate authentication
- HSM: Hardware security module compatibility
- EIP-7212: On-chain secp256r1 verification
NIST secp256r1 signatures for WebAuthn
import { P256Service, P256Live } from 'voltaire-effect/crypto'
import { Effect } from 'effect'
const result = await Effect.runPromise(
Effect.gen(function* () {
const p256 = yield* P256Service
const signature = yield* p256.sign(messageHash, privateKey)
const isValid = yield* p256.verify(signature, messageHash, publicKey)
return { signature, isValid }
}).pipe(Effect.provide(P256Live))
)
import { P256Test } from 'voltaire-effect/crypto'
myProgram.pipe(Effect.provide(P256Test))
interface P256ServiceShape {
readonly sign: (messageHash: HashType | Uint8Array, privateKey: Uint8Array) => Effect.Effect<P256SignatureType, InvalidPrivateKeyError | P256Error>
readonly verify: (signature: P256SignatureType, messageHash: HashType | Uint8Array, publicKey: Uint8Array) => Effect.Effect<boolean, InvalidPublicKeyError>
}