| 331 | } |
| 332 | |
| 333 | VectorRef<CertSpecRef> makeCertChainSpec(Arena& arena, unsigned length, ESide side) { |
| 334 | if (!length) |
| 335 | return {}; |
| 336 | auto specs = new (arena) CertSpecRef[length]; |
| 337 | auto const isServerSide = side == ESide::Server; |
| 338 | for (auto i = 0u; i < length; i++) { |
| 339 | auto kind = CertKind{}; |
| 340 | if (i == 0u) |
| 341 | kind = isServerSide ? CertKind(Server{}) : CertKind(Client{}); |
| 342 | else if (i == length - 1) |
| 343 | kind = isServerSide ? CertKind(ServerRootCA{}) : CertKind(ClientRootCA{}); |
| 344 | else |
| 345 | kind = isServerSide ? CertKind(ServerIntermediateCA{ i }) : CertKind(ClientIntermediateCA{ i }); |
| 346 | specs[i] = CertSpecRef::make(arena, kind); |
| 347 | } |
| 348 | return VectorRef<CertSpecRef>(specs, length); |
| 349 | } |
| 350 | |
| 351 | CertChainRef makeCertChain(Arena& arena, unsigned length, ESide side) { |
| 352 | if (!length) |