Skip to main content
ECDSA signing for WebAuthn, TLS, HSMs. Supports EIP-7212 precompile.
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))
)

Use Cases

  • WebAuthn/Passkeys: Browser credential signing
  • TLS/SSL: Certificate authentication
  • HSM: Hardware security module compatibility
  • EIP-7212: On-chain secp256r1 verification

Testing

import { P256Test } from 'voltaire-effect/crypto'
myProgram.pipe(Effect.provide(P256Test))

Interface

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>
}