# Tasks — `@suaveplan/crypto-curve` — add P-384 + P-521 ## 1. P-384 primitive - [x] 1.1 `src/primitives/p384/p384.ts` (re-export barrel) - [x] 1.2 `src/primitives/p384/p384.select/p384.select.ts` (generated forwarder) - [x] 1.3 `src/primitives/p384/impl/p384.noble/p384.noble.ts` (noble-backed impl) - [x] 1.4 `src/primitives/p384/impl/p384.native/p384.native.ts` (PrimitiveNotImplemented stubs) - [x] 1.5 `src/primitives/p384/p384.test.ts` (noble round-trip + native stub coverage) - [x] 1.6 Sibling `.md` for every `.ts` (≥200 words) ## 2. P-521 primitive - [x] 2.1 `src/primitives/p521/p521.ts` - [x] 2.2 `src/primitives/p521/p521.select/p521.select.ts` - [x] 2.3 `src/primitives/p521/impl/p521.noble/p521.noble.ts` - [x] 2.4 `src/primitives/p521/impl/p521.native/p521.native.ts` - [x] 2.5 `src/primitives/p521/p521.test.ts` - [x] 2.6 Sibling `.md` for every `.ts` ## 3. Barrel + exports - [x] 3.1 `src/index.ts` — add `export * as p384` / `export * as p521` - [x] 3.2 `package.json` — add `./p384` and `./p521` subpath exports - [x] 3.3 `vite.config.ts` — add new entry points ## 4. cbor wiring - [x] 4.1 `cose/sign1.ts` — replace ES384/ES512 placeholder throws with real p384 / p521 verify paths - [x] 4.2 `cose/sign1.ts` — generalise `ec2ToCompressedPoint` to accept coordinate length (32 / 48 / 66) - [x] 4.3 `cose/sign1.test.ts` — replace not-implemented test with ES384 + ES512 end-to-end round-trips - [x] 4.4 `vite.config.ts` — add `@suaveplan/crypto-curve/p384` and `/p521` to externals ## 5. Pre-archive verification - [x] 5.1 `bunx turbo lint typecheck test:coverage build --filter=@suaveplan/crypto-curve` — green - [x] 5.2 `bunx turbo lint typecheck test:coverage build --filter=@suaveplan/cbor` — green - [x] 5.3 Coverage 100/100/100/100 on both packages - [x] 5.4 681 cbor tests pass ## 6. Archive - [x] 6.1 Fold spec delta into `openspec/specs/crypto-curve/spec.md` - [x] 6.2 Move `openspec/changes/crypto-curve-p384-p521/` → `openspec/archive/2026-05-10-crypto-curve-p384-p521/`