{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":737895600,"defaultBranch":"main","name":"triptych","ownerLogin":"tari-project","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-01-01T22:04:25.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/37560539?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1704149993.0","currentOid":""},"activityList":{"items":[{"before":"caa65654d855dc15f06643018d99082515a06811","after":"7031b7a3914a22b37325888f67a5c1d1d3274209","ref":"refs/heads/main","pushedAt":"2024-04-17T14:30:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Update dependencies (#74)\n\nUpdates dependencies to ensure everything continues working smoothly.","shortMessageHtmlLink":"Update dependencies (#74)"}},{"before":"690c8731b30ad2a48598c0f20c898594bf52932d","after":"caa65654d855dc15f06643018d99082515a06811","ref":"refs/heads/main","pushedAt":"2024-04-02T20:20:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Simplify hash equality checks (#73)\n\nThis PR simplifies hash equality checks used to assert that all statements in a batch of proofs share the same input set and parameters.","shortMessageHtmlLink":"Simplify hash equality checks (#73)"}},{"before":"0c627faa16decb4dbe81e9b87165cfb8f5873e21","after":"690c8731b30ad2a48598c0f20c898594bf52932d","ref":"refs/heads/main","pushedAt":"2024-04-01T20:31:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Check serialized proof element size constant (#72)\n\nThis PR adds a test that the `SERIALIZED_BYTES` constant, which must equal the size of both serialized scalars and group elements in bytes, is correct.","shortMessageHtmlLink":"Check serialized proof element size constant (#72)"}},{"before":"609c92a039b96ee16ca2d3d7e7efa7eeb0037d55","after":"0c627faa16decb4dbe81e9b87165cfb8f5873e21","ref":"refs/heads/main","pushedAt":"2024-03-26T17:50:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Allow for variable-time Kronecker delta (#71)\n\nThe library supports both constant- and variable-time proving, depending on the caller's needs. However, the Kronecker delta function supported only constant-time operations. This PR adds a variable-time option for efficiency. It also adds unit tests for the function.","shortMessageHtmlLink":"Allow for variable-time Kronecker delta (#71)"}},{"before":"54c97b1c47bb3abed37957c1198ceaee1164fcf8","after":"609c92a039b96ee16ca2d3d7e7efa7eeb0037d55","ref":"refs/heads/main","pushedAt":"2024-03-26T17:12:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Remove unused lints (#70)\n\nRemoves unused lints.","shortMessageHtmlLink":"Remove unused lints (#70)"}},{"before":"a86158f44fc5f5391070cd6ae7fc74a671d420ab","after":"54c97b1c47bb3abed37957c1198ceaee1164fcf8","ref":"refs/heads/main","pushedAt":"2024-03-05T18:39:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Remove `subtle` feature (#68)\n\nWe currently use the `core_hint_black_box` feature from `subtle`, which uses a particular [optimization barrier](https://github.com/dalek-cryptography/subtle/blob/6b6a81ad9a6a00c0b42c327eaf4b2f785774377e/src/lib.rs#L245-L250).\r\n\r\nHowever, the standard library [documentation](https://doc.rust-lang.org/std/hint/fn.black_box.html) cautions against the use of `std::hint::black_box` for cryptographic use. This has led `subtle` to [remove it](https://github.com/dalek-cryptography/subtle/pull/107) in an upcoming release, at which point the feature will do nothing.\r\n\r\nThis PR takes the proactive step of removing the feature. There is still an [optimization barrier](https://github.com/dalek-cryptography/subtle/blob/6b6a81ad9a6a00c0b42c327eaf4b2f785774377e/src/lib.rs#L227-L243) in place, which will become the default after the feature is deprecated.","shortMessageHtmlLink":"Remove subtle feature (#68)"}},{"before":"49dc76d074e5950e20e91a43d8ef24353be13c96","after":"a86158f44fc5f5391070cd6ae7fc74a671d420ab","ref":"refs/heads/main","pushedAt":"2024-03-04T21:30:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Batch verification with blame (#66)\n\nWhen batch verification fails, it may be useful to know which proofs are invalid. Unfortunately, `Proof::verify_batch` cannot identify this.\r\n\r\nThe optimal method for this depends on the caller's needs. If the caller only needs to identify one invalid proof in a failed batch, it's more efficient to use a binary search to identify it. But if the caller needs to identify all invalid proofs, we need to check them all individually.\r\n\r\nThis PR adds both of these. The new `Proof::verify_batch_with_single_blame` uses a binary search on batch failure, and returns an error containing the index of an invalid proof. The new `Proof::verify_batch_with_all_blame` iteratively checks all proofs on batch failure, and returns an error containing the indexes of all invalid proofs.\r\n\r\nBREAKING CHANGE: Empty batches are now considered valid by definition.","shortMessageHtmlLink":"Batch verification with blame (#66)"}},{"before":"c455a665c547af49ddc84b3e3bc22d68eb7013ed","after":"49dc76d074e5950e20e91a43d8ef24353be13c96","ref":"refs/heads/main","pushedAt":"2024-03-04T20:07:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Use byte strings (#67)\n\nThis PR switches from `\"string\".as_bytes()` to `b\"string\"` for consistency and conciseness.","shortMessageHtmlLink":"Use byte strings (#67)"}},{"before":"c7d7924764bcfad42b2fa444555fb05b9f760999","after":"c455a665c547af49ddc84b3e3bc22d68eb7013ed","ref":"refs/heads/main","pushedAt":"2024-02-20T21:34:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Refactor transcripting (#64)\n\nThis PR refactors Fiat-Shamir transcript functionality.\r\n\r\nIt creates a new `ProofTranscript` wrapper around an existing Merlin transcript. This allows us to more cleanly unify the prover and verifier's operations. The design also better handles challenge power generation and the transcript random number generator used for both prover nonces and verifier weights.\r\n\r\nBecause it also adds a version identifier to input set and parameter hashes, existing proofs will not verify.\r\n\r\nBREAKING CHANGE: Updates how internal hashing is performed, so existing proofs will not verify.","shortMessageHtmlLink":"Refactor transcripting (#64)"}},{"before":"eb7d19867f13251170e2c0893f1d6defb104d801","after":"c7d7924764bcfad42b2fa444555fb05b9f760999","ref":"refs/heads/main","pushedAt":"2024-02-13T23:02:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Improve arithmetic checks and update verifier API (#63)\n\nThis PR checks for an arithmetic side effect [lint](https://rust-lang.github.io/rust-clippy/master/index.html#arithmetic_side_effects), which can help prevent unintended behavior.\r\n\r\nIt also updates the API such that proof verification now returns `Result<(), ProofError>` instead of `bool`. This simplifies the implementation and seems like a safer design.\r\n\r\nBREAKING CHANGE: Updates the API relating to proof verification.","shortMessageHtmlLink":"Improve arithmetic checks and update verifier API (#63)"}},{"before":"ce98ebc2875d34b7aae9e2a87a991a9362ad8452","after":"eb7d19867f13251170e2c0893f1d6defb104d801","ref":"refs/heads/main","pushedAt":"2024-02-13T19:54:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Re-export types (#62)\n\nThis PR re-exports types to facilitate easier use of the public API.","shortMessageHtmlLink":"Re-export types (#62)"}},{"before":"12ff2e2cc292abcd3539dd2399fa4c6cbaeb8362","after":"ce98ebc2875d34b7aae9e2a87a991a9362ad8452","ref":"refs/heads/main","pushedAt":"2024-02-13T17:34:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Ensure verifier weights are nonzero (#61)\n\nIt's important that verifier weights be nonzero. While this is exceptionally unlikely ever to occur in practice, it's easy and efficient to check.\r\n\r\nThis PR adds a check that all verifier weights are nonzero, and resamples if this isn't the case.","shortMessageHtmlLink":"Ensure verifier weights are nonzero (#61)"}},{"before":"f4cfd34e78b79cfbfcb86dd9613e68085dde47db","after":"12ff2e2cc292abcd3539dd2399fa4c6cbaeb8362","ref":"refs/heads/main","pushedAt":"2024-02-12T20:47:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Simplify constant-time Gray decomposition (#60)\n\nEarlier work in #47 adds constant-time Gray decomposition using some fancy footwork on a `Uint<1>` type from `crypto-bigint`.\r\n\r\nHowever, related functionality already exists in that library for conversion of `U64` to `u64`, which will do the trick.","shortMessageHtmlLink":"Simplify constant-time Gray decomposition (#60)"}},{"before":"0742e8ffe43c1b1fcb01849fb0f0c7fb4e4f32f8","after":"f4cfd34e78b79cfbfcb86dd9613e68085dde47db","ref":"refs/heads/main","pushedAt":"2024-02-12T04:04:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Update dependencies (#59)\n\nThis PR updates dependencies to keep everything fresh, allowing us to remove the nightly compiler warning introduced in #50.","shortMessageHtmlLink":"Update dependencies (#59)"}},{"before":"2dc3185075a2f220259a62cfb7d71f5138edbef1","after":"0742e8ffe43c1b1fcb01849fb0f0c7fb4e4f32f8","ref":"refs/heads/main","pushedAt":"2024-02-07T19:38:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Additional CI target (#58)\n\nThis PR adds `thumbv8m.main-none-eabi` as an additional CI build target for improved `no_std` checks.","shortMessageHtmlLink":"Additional CI target (#58)"}},{"before":"6acf034111872a83296c4baf0ffb108eaee99ca4","after":"2dc3185075a2f220259a62cfb7d71f5138edbef1","ref":"refs/heads/main","pushedAt":"2024-02-07T00:47:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Allow input set padding (#57)\n\nThis PR adds optional input set padding, which allows you to specify an input set that is too short for the given parameters. It does this by repeating the last element of the input set until the result is the correct length. Because not all use cases may be able to do this safely, this functionality is added via a new `InputSet::new_with_padding` function.\r\n\r\nCloses #56.","shortMessageHtmlLink":"Allow input set padding (#57)"}},{"before":"d44967d08db42f1ffe67ebb428d4218075a89619","after":"6acf034111872a83296c4baf0ffb108eaee99ca4","ref":"refs/heads/main","pushedAt":"2024-02-06T21:00:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Check witness consistency in constant time (#49)\n\nThis PR adds a constant-time check of witness consistency to the prover. It does this by iterating over the entire input set and doing a conditional assignment using the secret index. This should remove any timing effects caused by vector lookups.\r\n\r\nNote that this is only used in the constant-time prover functions, so variable-time proving is unaffected.","shortMessageHtmlLink":"Check witness consistency in constant time (#49)"}},{"before":"bb1a625fc35dbe878d1b791cbd886951d5a5db15","after":"d44967d08db42f1ffe67ebb428d4218075a89619","ref":"refs/heads/main","pushedAt":"2024-02-06T20:34:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Use an `enum` for operation timing (#55)\n\nThis PR moves operation timing from a `bool` to a custom `enum`. This adds clarity and also encourages the use of `match` to ensure both constant- and variable-time functionality are handled.","shortMessageHtmlLink":"Use an enum for operation timing (#55)"}},{"before":"a2802560cfa3c67511470843827490dbf539f39e","after":"bb1a625fc35dbe878d1b791cbd886951d5a5db15","ref":"refs/heads/main","pushedAt":"2024-02-06T20:12:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Add documentation links (#54)\n\nThis PR adds internal links to the public API documentation.\r\n\r\nCloses #53.","shortMessageHtmlLink":"Add documentation links (#54)"}},{"before":"aaba3362caa7bfd003898bcdb37543702acf66ae","after":"a2802560cfa3c67511470843827490dbf539f39e","ref":"refs/heads/main","pushedAt":"2024-02-06T19:05:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Remove unused message from example (#51)\n\nThe documentation example defines a message that is never used, as this functionality was changed in #30. This PR removes it.","shortMessageHtmlLink":"Remove unused message from example (#51)"}},{"before":"6c4d226a951216bafa636735f8ff07fb49f66f49","after":"aaba3362caa7bfd003898bcdb37543702acf66ae","ref":"refs/heads/main","pushedAt":"2024-02-06T19:03:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Remove Gray code functionality from public API (#52)\n\nGray code functionality is only used internally, but is part of the public API. This PR changes its visibility so it isn't exposed.\r\n\r\nBREAKING CHANGE: Removes the `gray` module from the public API.","shortMessageHtmlLink":"Remove Gray code functionality from public API (#52)"}},{"before":"0948a87aceacbfc57ec730e6b7896b92d1d7757a","after":"6c4d226a951216bafa636735f8ff07fb49f66f49","ref":"refs/heads/main","pushedAt":"2024-02-06T18:42:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Update documentation for nightly compiler warning (#50)\n\nAn [issue](https://github.com/dalek-cryptography/curve25519-dalek/issues/618) with the curve library means nightly compilers after `nightly-2024-02-04` will not work. The documentation currently references the latest nightly compiler for benchmarks and fuzzing; this PR adds a warning and updates the relevant commands.","shortMessageHtmlLink":"Update documentation for nightly compiler warning (#50)"}},{"before":"92e2b70b921472d412cce19ab84e4f24843c2795","after":"0948a87aceacbfc57ec730e6b7896b92d1d7757a","ref":"refs/heads/main","pushedAt":"2024-02-02T17:11:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Add constant-time index decomposition (#47)\n\nThis PR adds a Gray decomposition function that runs in constant time. This is useful since decomposition of the signing index currently uses modular reduction and division operations that do not run in constant time.\r\n\r\nThe functionality is accomplished in a somewhat kludgy manner using `crypto-bigint`, which represents its `Uint` types internally using target-specific word sizes. To ensure we support 32-bit targets, we use a single-limb `Uint<1>` type to represent the index and modulus for Gray decomposition; this limb wraps [a 32-bit word](https://github.com/RustCrypto/crypto-bigint/blob/e925f370995da5ca519db482906aff4679656c4a/src/limb.rs#L36-L38) on 32-bit targets, and [a 64-bit word](https://github.com/RustCrypto/crypto-bigint/blob/e925f370995da5ca519db482906aff4679656c4a/src/limb.rs#L48-L50) on 64-bit targets. Once we complete the required decomposition operations in constant time, we reach into the `Uint<1>` limb and extract the word, converting to a `u32` in a target-dependent manner.\r\n\r\nIt would be nice if there were an easier way to support constant-time operations with a `U32` type supplied by the library in a way that allowed for cleanly extracting the underlying `u32`, but this is not the case.\r\n\r\nThe Triptych prover and verifier each iterate over all possible Gray-decomposed indexes, while the prover additionally decomposes the signing index separately. For this reason, we keep the existing variable-time decomposition functionality as `GrayIterator::decompose_vartime`, and support the new constant-time functionality as `GrayIterator::decompose`. When constructing a `GrayIterator` for iteration, the variable-time functionality is chosen. This keeps things speedy in the case when no secret data is being used.\r\n\r\nCloses #5.","shortMessageHtmlLink":"Add constant-time index decomposition (#47)"}},{"before":"c2866898a9ef312f27622dcee482038f2224f736","after":"92e2b70b921472d412cce19ab84e4f24843c2795","ref":"refs/heads/main","pushedAt":"2024-02-02T17:08:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Simplify dependency features (#48)\n\nIn an effort to keep dependencies to a minimum, this PR removes unused or redundant dependency features.\r\n\r\nNote that `zeroize/alloc` is required to support vector functionality, but this feature is already enabled by the combination of `curve25519-dalek/alloc` and `curve25519-dalek/zeroize`.","shortMessageHtmlLink":"Simplify dependency features (#48)"}},{"before":"d493138710440df74768a991ad6f9d06780905fa","after":"c2866898a9ef312f27622dcee482038f2224f736","ref":"refs/heads/main","pushedAt":"2024-01-30T15:43:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Add `use_std` feature for `itertools` (#46)\n\nThis PR enables the `use_std` feature for `iterools` when the `std` feature is enabled. This was not done in #30 when the dependency was added.","shortMessageHtmlLink":"Add use_std feature for itertools (#46)"}},{"before":"14498832b32cda5f3cd51c149454306c9ecdee91","after":"d493138710440df74768a991ad6f9d06780905fa","ref":"refs/heads/main","pushedAt":"2024-01-28T19:03:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Ensure empty batches are valid (#45)\n\nThe documentation states an empty batch of proofs is valid by definition, but this is not the case due to a logic error. This PR fixes the error and adds a test for this.","shortMessageHtmlLink":"Ensure empty batches are valid (#45)"}},{"before":"feabfecc5fefa04ef6e6ca21e570cc20807a659f","after":"14498832b32cda5f3cd51c149454306c9ecdee91","ref":"refs/heads/main","pushedAt":"2024-01-16T22:52:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Custom serialization (#44)\n\nSerialization using `serde` is suboptimal. Depending on the encoding used, serialization may not be canonical, and is likely to be inefficient due to length encoding.\r\n\r\nThis PR adds custom serialization and deserialization that is efficient and canonical.\r\n\r\nBecause this is easy to mess up, it also adds a basic fuzzer. The fuzzer attempts to deserialize byte slices; deserialization should either fail or subsequently serialize canonically.\r\n\r\nNote that `serde`-based serialization is still supported.\r\n\r\nCloses #43.","shortMessageHtmlLink":"Custom serialization (#44)"}},{"before":"41a0aad2ff95390d8323a6c217a230895020c3fc","after":"feabfecc5fefa04ef6e6ca21e570cc20807a659f","ref":"refs/heads/main","pushedAt":"2024-01-15T20:53:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Add missing license notices (#42)\n\nThis PR adds license notices to source files that were missing them.","shortMessageHtmlLink":"Add missing license notices (#42)"}},{"before":"61ae16792d1f7aab15632c0baccd4eafe59be7c2","after":"41a0aad2ff95390d8323a6c217a230895020c3fc","ref":"refs/heads/main","pushedAt":"2024-01-14T16:04:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Update documentation (#41)\n\nThe underlying curve library chooses an arithmetic backend based on CPU feature selection, and can see improved performance on a nightly compiler. This PR adds information about this to the documentation.","shortMessageHtmlLink":"Update documentation (#41)"}},{"before":"da40c2a2db91e2df9a73282c744fd53990443515","after":"61ae16792d1f7aab15632c0baccd4eafe59be7c2","ref":"refs/heads/main","pushedAt":"2024-01-14T15:40:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AaronFeickert","name":"Aaron Feickert","path":"/AaronFeickert","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66188213?s=80&v=4"},"commit":{"message":"Add WASM build to CI (#40)\n\nThis PR adds a `wasm32-unknown-unknown` target build to the CI pipeline.","shortMessageHtmlLink":"Add WASM build to CI (#40)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEMzAfBAA","startCursor":null,"endCursor":null}},"title":"Activity ยท tari-project/triptych"}