|
1 | 1 | { |
2 | 2 | "magic": "E!vIA5L86J2I", |
3 | | - "timestamp": "2026-06-28T04:42:39.684853+00:00", |
| 3 | + "timestamp": "2026-06-30T04:17:52.672627+00:00", |
4 | 4 | "repo": "ietf-plants-wg/merkle-tree-certs", |
5 | 5 | "labels": [ |
6 | 6 | { |
|
3227 | 3227 | "id": "I_kwDOJIBkVc78BbHY", |
3228 | 3228 | "title": "HTTP 503 isn't quite right for pending landmark", |
3229 | 3229 | "url": "https://github.com/ietf-plants-wg/merkle-tree-certs/issues/202", |
3230 | | - "state": "OPEN", |
| 3230 | + "state": "CLOSED", |
3231 | 3231 | "author": "davidben", |
3232 | 3232 | "authorAssociation": "COLLABORATOR", |
3233 | 3233 | "assignees": [], |
3234 | 3234 | "labels": [], |
3235 | 3235 | "body": "Watson Ladd points out:\n\n> I'm not sure 503 is the right error code for the landmark-relative cert in ACME: a 400 series code would make more sense given that some are about resource conditions. There isn't one that fits though. 503 may complicate infrastructure monitoring as it is usually a server problem you want to worry about.\n\nhttps://mailarchive.ietf.org/arch/msg/plants/-Q5kuTg9HQUTcbkv8ybIndgqj5U/", |
3236 | 3236 | "createdAt": "2026-04-08T22:59:42Z", |
3237 | | - "updatedAt": "2026-04-09T04:48:56Z", |
3238 | | - "closedAt": null, |
| 3237 | + "updatedAt": "2026-06-29T15:58:30Z", |
| 3238 | + "closedAt": "2026-06-29T15:58:30Z", |
3239 | 3239 | "comments": [ |
3240 | 3240 | { |
3241 | 3241 | "author": "aarongable", |
|
3271 | 3271 | "body": "> Whichever the status code, do you think it warrants a different header in that case? (I see ACME also has this error system. I've no idea if that's appropriate here.)\n\nAh interesting. ACME actually already uses Retry-After on 200 responses, so that bridge has already been crossed:\n\n> \"processing\": The certificate is being issued. Send a POST-as-GET request after the time given in the Retry-After header field of the response, if any.", |
3272 | 3272 | "createdAt": "2026-04-09T04:48:56Z", |
3273 | 3273 | "updatedAt": "2026-04-09T04:48:56Z" |
| 3274 | + }, |
| 3275 | + { |
| 3276 | + "author": "davidben", |
| 3277 | + "authorAssociation": "COLLABORATOR", |
| 3278 | + "body": "Fixed in #257 ", |
| 3279 | + "createdAt": "2026-06-29T15:58:30Z", |
| 3280 | + "updatedAt": "2026-06-29T15:58:30Z" |
3274 | 3281 | } |
3275 | 3282 | ] |
3276 | 3283 | }, |
|
3719 | 3726 | "id": "I_kwDOJIBkVc8AAAABGvv-1w", |
3720 | 3727 | "title": "No explicit bound on issuance log size (index/tree_size)", |
3721 | 3728 | "url": "https://github.com/ietf-plants-wg/merkle-tree-certs/issues/260", |
3722 | | - "state": "OPEN", |
| 3729 | + "state": "CLOSED", |
3723 | 3730 | "author": "Vaisman", |
3724 | | - "authorAssociation": "NONE", |
| 3731 | + "authorAssociation": "CONTRIBUTOR", |
3725 | 3732 | "assignees": [], |
3726 | 3733 | "labels": [], |
3727 | 3734 | "body": "\nSection \"Issuance Logs\" describes an issuance log as an append-only sequence of entries identified by an index starting from zero, \nwith no stated upper bound. The only explicitly bounded quantity in this area is the log number itself:\n\n> \"Log numbers are numbered consecutively from 1 to at most 65535 (2^16-1).\"\n\nHowever, the certificate format depends on the log entry index and subtree boundaries fitting in 48 bits.\nSection \"Certificate Format\" defines:\n\n> \"The `serialNumber` MUST be equal to `(log_number << 48) | index`.\"\n\nand `MTCProof`'s `start` and `end` fields are typed as `uint48`. Verification reconstructs the split the same way:\n\n> \"Let `index` be the least significant 48 bits of `serial` and let `log_number` be `serial >> 48`.\"\n\nNone of this is tied to a normative bound on `index` or the log's `tree_size`. \nThere does not appear to be a statement requiring an issuance log to remain small enough for all certificate-relevant values (`index`, `start`, and `end`) to fit in `uint48`.\n\nIf a log grew beyond the range representable by the certificate fields, the certificate format would no longer have a well-defined way to represent later entry indexes in `serialNumber` or subtree boundaries in `MTCProof.start` / `MTCProof.end`. \nThis is the same kind of asymmetry that is already handled for log numbers, which are explicitly bounded at 65535; `index` / `tree_size` do not seem to have the corresponding statement.\n\n**Suggested fix:** Add an explicit requirement defining the maximum allowed issuance log tree size, chosen so that all certificate-relevant indexes and subtree boundaries fit in `uint48`.\n", |
3728 | 3735 | "createdAt": "2026-06-25T22:00:24Z", |
3729 | | - "updatedAt": "2026-06-25T22:18:43Z", |
3730 | | - "closedAt": null, |
| 3736 | + "updatedAt": "2026-06-29T17:07:59Z", |
| 3737 | + "closedAt": "2026-06-29T17:07:59Z", |
3731 | 3738 | "comments": [ |
3732 | 3739 | { |
3733 | 3740 | "author": "davidben", |
@@ -18350,24 +18357,26 @@ |
18350 | 18357 | "id": "PR_kwDOJIBkVc7p4f1E", |
18351 | 18358 | "title": "The \"enhancement\" link relation", |
18352 | 18359 | "url": "https://github.com/ietf-plants-wg/merkle-tree-certs/pull/257", |
18353 | | - "state": "OPEN", |
| 18360 | + "state": "MERGED", |
18354 | 18361 | "author": "davidben", |
18355 | 18362 | "authorAssociation": "COLLABORATOR", |
18356 | 18363 | "assignees": [], |
18357 | 18364 | "labels": [], |
18358 | 18365 | "body": "Another ACME option. Fourth time's the charm? :-)", |
18359 | 18366 | "createdAt": "2026-06-24T00:00:14Z", |
18360 | | - "updatedAt": "2026-06-24T12:41:07Z", |
| 18367 | + "updatedAt": "2026-06-29T15:58:03Z", |
18361 | 18368 | "baseRepository": "ietf-plants-wg/merkle-tree-certs", |
18362 | 18369 | "baseRefName": "main", |
18363 | | - "baseRefOid": "a6b3f491b81217735674c237d72bc41bee6cffae", |
| 18370 | + "baseRefOid": "6795e4f7ead20f0adaccabfad793bd5258f4a610", |
18364 | 18371 | "headRepository": "ietf-plants-wg/merkle-tree-certs", |
18365 | 18372 | "headRefName": "link-rel-enhancement", |
18366 | | - "headRefOid": "23ea09584ae5f182b162d20825bbe625b709770e", |
18367 | | - "closedAt": null, |
18368 | | - "mergedAt": null, |
18369 | | - "mergedBy": null, |
18370 | | - "mergeCommit": null, |
| 18373 | + "headRefOid": "e6cb5d4789aa511b56f4e246975c890e2610211a", |
| 18374 | + "closedAt": "2026-06-29T15:57:53Z", |
| 18375 | + "mergedAt": "2026-06-29T15:57:53Z", |
| 18376 | + "mergedBy": "davidben", |
| 18377 | + "mergeCommit": { |
| 18378 | + "oid": "957e0beb77c9c603b708af51f3668da4b4a09121" |
| 18379 | + }, |
18371 | 18380 | "comments": [], |
18372 | 18381 | "reviews": [ |
18373 | 18382 | { |
@@ -18410,24 +18419,26 @@ |
18410 | 18419 | "id": "PR_kwDOJIBkVc7qwsMI", |
18411 | 18420 | "title": "Add a maxSerial field to the CA format", |
18412 | 18421 | "url": "https://github.com/ietf-plants-wg/merkle-tree-certs/pull/261", |
18413 | | - "state": "OPEN", |
| 18422 | + "state": "MERGED", |
18414 | 18423 | "author": "davidben", |
18415 | 18424 | "authorAssociation": "COLLABORATOR", |
18416 | 18425 | "assignees": [], |
18417 | 18426 | "labels": [], |
18418 | 18427 | "body": "I suspect the discussion around revoking, log numbers, min/max indices, the CA format, etc., can be refactored given how scattered it has become. Ah well.\r\n\r\n(Also closes #260)", |
18419 | 18428 | "createdAt": "2026-06-25T22:14:26Z", |
18420 | | - "updatedAt": "2026-06-26T01:22:07Z", |
| 18429 | + "updatedAt": "2026-06-29T17:08:01Z", |
18421 | 18430 | "baseRepository": "ietf-plants-wg/merkle-tree-certs", |
18422 | 18431 | "baseRefName": "main", |
18423 | | - "baseRefOid": "6795e4f7ead20f0adaccabfad793bd5258f4a610", |
| 18432 | + "baseRefOid": "56cc9c32452ae76b9174b80dac5ea5fd47e3c541", |
18424 | 18433 | "headRepository": "ietf-plants-wg/merkle-tree-certs", |
18425 | 18434 | "headRefName": "max-serial", |
18426 | | - "headRefOid": "1548df01c5a7a00253c896d94355a27d4e8f1453", |
18427 | | - "closedAt": null, |
18428 | | - "mergedAt": null, |
18429 | | - "mergedBy": null, |
18430 | | - "mergeCommit": null, |
| 18435 | + "headRefOid": "43d1cee9e67ef2a1efaf31848a7422a59d094f38", |
| 18436 | + "closedAt": "2026-06-29T17:07:58Z", |
| 18437 | + "mergedAt": "2026-06-29T17:07:58Z", |
| 18438 | + "mergedBy": "davidben", |
| 18439 | + "mergeCommit": { |
| 18440 | + "oid": "545b71faa5ef5e729945f4f96f27964e1a7bc951" |
| 18441 | + }, |
18431 | 18442 | "comments": [], |
18432 | 18443 | "reviews": [ |
18433 | 18444 | { |
@@ -18457,25 +18468,35 @@ |
18457 | 18468 | "id": "PR_kwDOJIBkVc7rXkgq", |
18458 | 18469 | "title": "demo: fix UnusedBit panic on signing error", |
18459 | 18470 | "url": "https://github.com/ietf-plants-wg/merkle-tree-certs/pull/262", |
18460 | | - "state": "OPEN", |
| 18471 | + "state": "MERGED", |
18461 | 18472 | "author": "Vaisman", |
18462 | | - "authorAssociation": "NONE", |
| 18473 | + "authorAssociation": "CONTRIBUTOR", |
18463 | 18474 | "assignees": [], |
18464 | 18475 | "labels": [], |
18465 | | - "body": "Fixes a panic in `CreateCertificate` when `CertificateConfig.UnusedBit` is set and a cosigner fails to sign.\r\n\r\nThe existing condition had an operator-precedence bug:\r\n\r\n```go\r\nif sig, err := certSig.Bytes(); err == nil && len(sig) == 0 || sig[len(sig)-1]&1 != 0 {\r\n```\r\n\r\nSince `&&` binds tighter than `||`, the final `sig[len(sig)-1]` expression could still be evaluated when `certSig.Bytes()` returned an error. In that case, `sig` may be nil or empty, causing a panic instead of allowing the existing builder error to propagate through the normal `Bytes()` path.\r\n\r\nThis change only inspects the signature bytes when `certSig.Bytes()` succeeds.\r\n\r\nA regression test covers the case with `UnusedBit: true` and a `crypto.Signer` whose `Sign` method always returns an error.\r\n\r\nTested:\r\n\r\n```text\r\ngo test -run TestCreateCertificateUnusedBitCosignerError -v\r\ngo test ./... -v\r\n```\r\n", |
| 18476 | + "body": "Fixes an operator-precedence bug in CreateCertificate's UnusedBit handling.\r\n\r\n&& binds tighter than ||, so sig[len(sig)-1] could be evaluated even when certSig.Bytes() returned an error. Add parentheses so the signature bytes are only inspected when Bytes() succeeds.\r\n\r\nTested:\r\n\r\ngo test ./...\r\n", |
18466 | 18477 | "createdAt": "2026-06-27T20:18:28Z", |
18467 | | - "updatedAt": "2026-06-27T23:32:00Z", |
| 18478 | + "updatedAt": "2026-06-29T17:04:49Z", |
18468 | 18479 | "baseRepository": "ietf-plants-wg/merkle-tree-certs", |
18469 | 18480 | "baseRefName": "main", |
18470 | 18481 | "baseRefOid": "6795e4f7ead20f0adaccabfad793bd5258f4a610", |
18471 | 18482 | "headRepository": "Vaisman/merkle-tree-certs", |
18472 | 18483 | "headRefName": "fix-unusedbit-panic", |
18473 | | - "headRefOid": "87afb57edc9f9b654baa955ad4125c88667cf9be", |
18474 | | - "closedAt": null, |
18475 | | - "mergedAt": null, |
18476 | | - "mergedBy": null, |
18477 | | - "mergeCommit": null, |
18478 | | - "comments": [], |
| 18484 | + "headRefOid": "a6888e8dfe2d790263b9d591d70385a40c9bc501", |
| 18485 | + "closedAt": "2026-06-29T17:04:49Z", |
| 18486 | + "mergedAt": "2026-06-29T17:04:49Z", |
| 18487 | + "mergedBy": "davidben", |
| 18488 | + "mergeCommit": { |
| 18489 | + "oid": "56cc9c32452ae76b9174b80dac5ea5fd47e3c541" |
| 18490 | + }, |
| 18491 | + "comments": [ |
| 18492 | + { |
| 18493 | + "author": "Vaisman", |
| 18494 | + "authorAssociation": "CONTRIBUTOR", |
| 18495 | + "body": "Thanks, that makes sense. Reduced this to the minimal one-line fix and dropped the regression test.", |
| 18496 | + "createdAt": "2026-06-28T05:42:28Z", |
| 18497 | + "updatedAt": "2026-06-28T05:42:28Z" |
| 18498 | + } |
| 18499 | + ], |
18479 | 18500 | "reviews": [ |
18480 | 18501 | { |
18481 | 18502 | "id": "PRR_kwDOJIBkVc8AAAABEWBFog", |
|
0 commit comments