Skip to content

Commit

Permalink
supporting functionality; added try_hash_sign
Browse files Browse the repository at this point in the history
  • Loading branch information
eschorn1 committed Oct 16, 2024
1 parent 4966359 commit b398b68
Show file tree
Hide file tree
Showing 13 changed files with 221 additions and 360 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Adapted PrivateKey into PrivateKey and PublicKey into PublicKey, removed the former(s)
- Internal revision to align comments with released spec
- Revisit/revise supporting benchmarks, embedded target, dudect, fuzz and wasm functionality
- Fixed a bug in verify relating to non-empty contexts; asserts on all doctests

## 0.4.2 (2024-10-05)

Expand Down
6 changes: 3 additions & 3 deletions benches/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
Figure-of-merit only; no particular care has been taken to disable turbo-boost etc.
Note that constant-time restrictions on the implementation do impact performance.

Additional performance optimizations will follow the next update to FIPS 204.
Near-obvious uplift can be had with more careful modular multiplication & addition
using fewer reductions. Also, 'u16' arithmetic has a performance penalty.
Additional performance optimizations are on the roadmap. Near-obvious uplift can be
had with more careful modular multiplication & addition using fewer reductions. Also,
'u16' arithmetic has an x86 performance penalty.

~~~
October 15, 2024
Expand Down
8 changes: 4 additions & 4 deletions ct_cm4/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ use microbit::{board::Board, hal::{pac::DWT, prelude::OutputPin}};
use panic_rtt_target as _;
use rtt_target::{rprintln, rtt_init_print};


// These can be generated via the wasm demo
const MESSAGE: [u8; 4] = *b"asdf"; // this would be a firmware hash
const PUBLIC_KEY: [u8; 1312] = hex!("755193ec3402eb0e17947e6ed5605118967eb1200a28f9d8173097059141c57222978e92d50f3bf79c99f9cb0914d99847c35ff42c2d85a99abff46b4b344fb938e646f4ff1bfd80d090680682c1025129608e871af32ca533ce5c63f9ab4a897e739c84a356500e6ee02733ea3bd45ee57288cf9dbd9946ca7e0feebc47da5afc2974f5c58a3b48ab12689bac01e1d11c90b093a9ca231c68dfb3357eac610c36ff3da9ccdf79e382af9ed163d6e6e2dfa46c2b17f30386ca653fd3b689669f60ad8d29daee11c612ad5dede7859f4fd725b8ca847767d05abfee31070869b6b753634d1505034ee8c2e0fc1148cb857f59110f14c69afe8d72578680268d01b4bfc3479f3eebfe3820458e0f01fb5d6019936fc24bb4d2cceb0501d3bba9c6355708d1233867c201f0a77b560854ae4da538903e78116b248cfe1e438667f7e3d231b2ef21ea6c0c7543a80ac54a84e483ec7f9f4b12e151f0c3472bd241c972b32d1985d08cb2b1acc469cf9921c0e95018583af7f636796e4fe0616c44c0d6881097147a31d922b7fa9ba1ca906bf4bb15962d9c0e7aea69c144093ce6e9f7311548d346ba05bbbc24d3e299c48276a96cf28f05e146d9210009d76de1bffb9412c69011d029bad1a976224f8448a6243c3e791dbe809328eb50c7d3b2a67ea64bc28e06885842d18b8fa41ac099038ca9d243589a2b945db05db519bd202cccdd20cdad61b50f91b6213874337bcfe3c102cec4d86b8323ffec9570c2455f1a5bd978cb478c34b6799adddeb16554ff9512cead0a7861c22d6c9a764080e90b7395c84a39339712dd8084a31fc9e10f822cc976d71a2e1a67bd8288d0fb23174ea34521694dbc75fa4f13e3a1067b01d814779a9eb7732b1fc0b15d4dea15a9924bce53b31fd2cec142cd1a1c54911bab5ff71e6d700350ee445a08d3b127afc5856a6cb0b67d0563f8a5b4961f930e0634bceefc2a1072c2cf08f317d48533e93956d3ee42f4dbd94527a114ce09749f79a3d5d23c00870011b749c17ddbd4dbc8ef93f8a03d715a92e7f9213f4af4f501dc2d7aa967fee4379db783a17f6cd5c1d3fc0126236ca3fc23b74d0cec1f7439c1f5dae7bb06f44ca4a050a744101c2f1244b8f4f3d389e7c8b2cf558c5e4cce1a7ada441181c187cadcc1dbe1dfd95a295fdf4bfef9a3e818060b1e89d09ae09029d23baaa314c6d114f5be5300ef67a3c945ee6854712355ae7c9dbe8e54d43363daf2f6cc92d219783c580d4f026d80c93e401df20beef1de3e8804caf19133359a910cffceb708ec8b9acd1e717237d55ec62c86b66ed571fde9da48aa9b0f48e83b2145807c51c4c124e96a2229a876e3c42d90298a3c5f31d316a12145b66b550b52ab954657c413d41e8c2b6637f45d7d2338be0734c684ddc255b741d8e3b13f925e70f4270480d1e5b87ef64c0196f38c98fbd1b56ec2a38ec6e38ad0fff3eec32af25c4346a9feb232b1deabeb0e10bac63e07272b265a12718822efab2c805aa9f86b17041cfeca7c167faad7f8e3789b54a9be3b367e86cc8f392f8fea518bc714baeceddcc9a86a1dd1214e9df8c72d0f72e18ad4585da4550a4747d44a8c832fcc467f777ae4eb7fe7c361d8fe0bb72664df2e223c7491d01e709fa74254f6fdec386eddf4ffc9fefa706bfbeaedc350e156fe2af0de33935ba04934dc69ebb20f3c480caff6e91115f97a9510f9b03b1abe67366ff0afd9cf7d2f39e332e57162d0fdde642349f9b2248273f064a3bec19dbd9e75c01049b98ea673e1cca53994aa6ad06757f8a2f045775418ae9ccac497a3dd54ee26c194cdb53d2ac109648e98c4d931");
const SIGNATURE: [u8; 2420] = hex!("204e71dc783f063158152fdce71919c5d4e6c832f174bb4185a179dd228987f7a8cc5234eb918ae5cc6667b080bad306fa60de7729e002e2d84596456985a6fd2e2251b7b4d1ce3f5d52e319312c1bb1433f4d1009a15724a75f8a3aaeea98c7c5a64c017b931dd6927d682f0608ab72866a6f55dba1a2a44ba3cf76893cab7a989325f1717577cc2afe4becc5d5489b5cc83132956ee5f44069068fb27ee0eb404ab2fd97d87c2ea4133a8cb7b51d4870ad71f36c2086cbf9dae9943f674b02269b6542a91b455977d687c932473676dfebff831a3cffa9bea3742d0237ab25f14917541d136183717f2999860f48bf135f5fd0a0e3096e9a4e7fdf041673f476c4a97746a79aea11182033da6d46583446a56eec999dd894939380c164f64e9d2642a21a93c61b96e2e1a64a98f24fb4c1adf3a228e8c1cc8890fe62ce9bf2b9d9eb0c0a8b9257504626b0218e67af1902e25564617f936b9351a0de225964103b15b4acb52351ceed45f74520f2d9b4cd76fecfac78a0dcc1dfb4cada17e257a2559ccf4f68ff9ae15acc5033209a179e01d94fc3b0a4d52e5f3fac6ae487f10cc0ad07ecec8def6c7f356ea4ef08f479ed83db9b5c346af252a2624c6e51170620180f1296881a9ce5970acb4ce9dd8279f17d5dc5b65f367601ff941c0307bbf75761af428f2af32159e5516b397cfef7ae924faa07a63461a60f32c9027217f06e5bba3bf8f82621b5ee5393a405609dcfc3580602391eee890bb27112da6981acb1a7bfdba5b1a46cdb315b5d7f6f3bf20346d3016e9d964ac81e3481f5f7848e2df803075f9bca43cfa61758480a45f90a9dd281c9ec3d707762d83da6dcb321d57cbbdde3e1bdde8834ce3613ad999d3e007b7358e45611ff3995edf5e90125521763f9ec10930cd7c11a0154c8d58a68fb891f210e0aac24f9e72061a29ed74c5f70e71ac6f9427f68959f062bb90af17d6ce1521d52674d2762fff239365094f84f95929ca690c7f4d8f6bf1d76ba7372ee9f98315fc26593ea4367434440004c117c85ac833d9be51d5410f1c3a644adb104268b94e2418735fb645d73351ef5f480dd1f4ff1623f479d6fae6cdacf5075f971e81bc218850da40695f47d3c392fd23657f70a5cc9fa394ab7b5c2622ea4949210435ecc29878ca4a582af0a977a5947003f03bcbdcebe25ed395468480da9c155b02e4a42094fbda5068ad21890c03bac7a1e55e67a9c79a0f5458075f6b602b51b1ab223a5206193770d0170a3d39870abdb5f5fc948071ecc81b6201eb76e1b68f0f2838b0e2a9413273a19ba44f097c13a452b6b5dcbae603cdec3e4a8657924d813e190b0c7f18e77f2ff1ff51bc263bea49dc190a667d581264614594a57910376215f9bee23261e08b82242d20a087c1cc6d11ad27d4d613bc5f61177924946a9b7d45020e643f5a66d032b42e7fff9a462a778b447993158c9561c830db561a4e92453523e605ca229fc4458356effa93dc64e8f4d659392bc9b3e291342eba8cff9b97344e11f6ad14f69335fc48eda49f1ebcb4fbe2c40657eb8628a1ed21924e676f2019e868bdcbc24b318e74aa4533ab28b5c56386e905fd92e4fc80d10e98b586cce1c4c9c6bf8fcc02c4b99e9e43153a2652cbaae0f6e53c15eff93b0099548a2c3a8a9e1e4186874a083ec981f94ace4da1ea3ad0500173de9d9e15fed94975152cf5fd07e46c41e7207799e13b7b1a01e7895dfde5ba81e45b5f0529154b152d2a98c149f2ada55cd6f05823ae0ecac0e174dab9ba7979e793e65a024994007a50a3739ad4a9511f5af1d46fe3701014d46e7e9da21c27aabcbc13438bbf5fbc2f60073bbf71bb7ccefed210eb621557345cc53c1a631117da74b3df288d30004ba10c1d0bf7ce30acd706c6acc65b5bb6e7a550f93c3529453fa4811d18a4117700267c501c202f3de0e55a72afb5f592efe4cbffb0e3c686086ca253fe38a4349b39b94f40b60b64c7b34b1657550f2ccecad18d0ade2212b46edeff7c63dc30bd3d6d248e083f10f3e156e7bdf4b6ccee2a577ed98317c34f8b987b6d1f8458496fea46c7df8cf29bc32bbf76294698b115c999fe9f50d18c2ca451fc356392cb6553af5f78d4b816aeabdc392b33638fc2f12ada1bdd403978a65c370bd98225af3febd978393d92c73a419ee78542adfb6a452e3eea0d0d5a5ad332a14c7c98219c5b8566e0ce1a7bb473a105e7dba3d2829f8bd6e2eda5a98f1b609698ea1dd0f2eed00cdc5cbc2912fe7b98f7fde7f9bf795b0c2a5e49cee77c9d2caa4e408ee964137b0ec192dfbf04c32fa7ac0b9ad682dcdda249a17c2c2b1f664cf3d877aa9619a44b6dfbd5a75738fbb40ecd0d753f8d4cd753cf2f6bb2cee52c6875bef04a887ddf8dab3173c208f1f7a370cf2514fd807e316c86f4f54e98b42313e5e8a508f1957d5c6a54c4e4f7e53da8911163c87c2d3fdf66b2642428db4cc13de10aedbd431e9306f12fdf95e88d163fdd93f30330611e3fa277a606013c3c9cb16cedddb3183757f450d530f263d22a765c3afb027664353d5879605cfc5e673a728b975161835bbc85e274edcf6b071bd5fde7d6fa80ffea0bf124bf72ae642adab1b0ec6c6247f462d32622ea63df8322fe5e966e7701c6783df9642d98ca1026852f91fb04fea69ae521bfde282cf39ae3c02e368f5e3aab180ce736fb22330e26fd91c767e0789ba9b356d59bb55112f9c438dc049adf69278edfa504da7cb5c291efc76f1d22c81f50a1edc1fa9e841b55599e0ea09dd0b63da47073e7fa7afa0e3a5f5f4ce778aab7cbd0ce54b5c105ffc405ca3482274fd64a14caf1db94bce36d95714eb416f6ce8a2a02067bb0ebe925587592c1ead49c22a16cef7386f1a94335d7c5d9383293b7d47fc9108d971856c35d834f369bedc555ffb5573f286ca30325e319c9a6b59207b51f1ea2f57197a01b9d1f7e9b8f70690eaeb07b104f94dd9870e493bd6909e5efd0894788e8b9f5c6d615b96f46a06457cb88a4befffd15c882953a6b265618443a8fec0fe2977cc871dc400a2d352afb7d82f2fd5d87bb19dbea8eae0a137885ad98d10e0412e698524e646061706b697b464977fb016331429e8e788e59c63ffb985d87cce0cbe9db668bb866e729f7f85de173d3c34d1eed790ad8ea0f54a86a222ed012a36320fa3a79c4f4c9c996996f28e422f4ff5e2fd6d1c5c94933f1965a4a71dda50dc75f1b5343d1ba5d7b0d66fc31d0fc050f65689636b335634315ea2bf23d870b1b386aa57c80c0d3f60657bccd1d621283f5a6590aab7c9d8ecf72a31414b5764798698b7c1d1dce3060b1130343e5376788ca1d8f6fb0000000000000000000000000000000000000000000000000000000000000009152331");
const PUBLIC_KEY: [u8; 1312] = hex!("e1d8a883b4f9cadb6ec2878ab505a80fae74f653c865fd8f65e81b04567282d2a0a386744fbbf0eae28e0f6116f0fba5fb006b0456c3bc401cf431fe72e2585dd15ff0cd11840efa6ffcda2eb33c1fcc698f6082b2d5902e8c760ab51414432035aa2aef3c5d1821175c6f52552b15957bfd37f17caf123cdb2bee49e5fa1009415ff25b3924c80244ec92999d75bbcda6695d12689038d1562a7367b83f4d1bfc115f9ea6b5312019b42cb35f14c4cbc42c4426ba214d659f5b0438da21dc50302654f3b5c6fe8765da736d25f9c3051e8b2be62f4f7dc78f55376f674f468bad69a063058f9b3a602d40d9042d9c554a813a673c5902d5c4f5a6f5844b8d2ea7373dbdba2f6000d561fb960e50883741c96b74667fb50aeae4bfa9b68322d57fbe83ea1257f9d927e8b491c24b4f4d4314d32bbb42446198158650ea2e35d20f71bc27c5dc30f30893596740e6668912a8ad0e2046e18cd79b3232d140954c4ed7921fd693efc554aa52011cb5a1e9cd510f724c8fc3fd6589d2effa5d962d0658c37ab1634990a8599baeff5962dbce6688904fbe64b61e86c3f96b7943ab33d618dc53590e7fdf97055f152c41f27bdf16564b9e21b686cbbdd4b02e37da65929c800cc586f0f087e059f7ff1c8062d66be9f6c52d5a9316a985cc33adddb13b31791681af833ac0c4c86cee5e89ccfbb2957f7b15beb4c99aca440d1f19119a613a87d899d558fadfef4b3abd6884c3295d753e4559131e1e7a518b0a75c393b1b11fc8b19f39be979d21f15e094bb36173630bb5e4697458b18a0f8d9c8bac8213ba32ca515464cfd41c8c1e67a097600dcb5d38cfb0f8bb52dc9d4c1919537dc0b4ee0af9f8fcf7d9c225bb16b7e4b5decd2606213b58a2f012fd5d414bcc8311847f8fd48520e4a7d934b1262f4ae9d8a233088b7e08707a1d80e6c8ea42a8096f88c6cd4f9eb75aae2751e0a31b0ac6dfa57605ac4b1da0b18338e69742852137d3b04e164f31dbc817f86c31f651716ee521b595a5c9536c91e12e80a4cd5c57769b2eb77469fcb79aeceae8e997b2e9ad98b5cacf310257280d61e764cd8e2baf7f67b6c0f8e7affc92ea3464d185beef7e5fb4f4d8a8da70640e94f76942f1b39dd8e72567439d92a95173ebeec3b9dc0d0ea8e7be42b24564bd1a3b618372ff012302ad06e279def6ae64f0081d095b8b32cf1608a8b5c84bc81a4e4eea00360536efb5803fd0a861c791588ead9256d486d5518660748e9d64262f7f87a742e23c534fe9c2ac6cba5621a8c8e9cd95bff3eb893d043076c09992aa87a4fadca5765b3142e88ac9693960b6a91b2b97ed11d99231345451eac326316cb8236c715f41b89c65198b7fe0cd38f006531d551a7bd8b7575af4d9839878db8c034ddd73e5ac25792c45123236ed86c37b829e6dec5c945e20a3c08f9f25375771429c28ebfe182c3de6dfdef77640e54004eaeda663ee84643e39b0401b10fa57fff31b8ed0a61f64d1b96b7b95c7e65bcf01ad1be783a3d901588663785a1b52ca2f993eaa5144d36fa93feb0fa3012c835312e32e4669b12a15d37ebd68f6c3c9be5b3364a86a5d77afa27ae68022b32c74d2d878fcb0634e506a27d1ed26c53c0e678e9023a4d20d53ee344bef98c3a94fc384df75c9c55d67238e2143bba44414818a167580af88504218680bee310b13ed0409e155e941c59c056ef4334ef255aed2dd29c5cc74d2e4db0c4cbfd7bcb0d65d2a7eac360f878a159220d35e4c1a069eb8d5caa13974729f28c60d0ef183fc1f5e13dc28e98b98f82baa610a957441af4a055027080856a816e796f42d04eadb0f490ac89af03e");
const SIGNATURE: [u8; 2420] = hex!("8205ab20fbafe5ba3032ac9b5922d10e5a0364ed6181f4148f9005c3598990db75b773dc1002cf8c3d2608eb250abdf7615a2334d36581c9a366395d713d0d3d37dde879eeb82694b6bb1f42123ea0b8d37415e7aca9233db7478d7500359546ca8b05432c6f4e113051e0a08084b001ed81497d0616404238e0716b1975bd0b8a52351f161cb8acb67014d0a776241912e881adeff1900588edd1669adada713023f4ab7c0390814b71b97f735270683eab2567e49843de68098710f486b839ea53e5c9b235666ed753cfbb79d1a6ed977043b8859e89a7b55bc02700b3cf02798a3567fb44488e0e96f92362f2187818bdc58600fa374d129aa7dee11554bc4482206c4f2badf6946bab08ece72f6d603c158d8b80619d00c97185d7e2d79f085cb12bc15101bb24e3b667a52fa9f0748be67f483fceff66c3fcac4a7962bf291a1ab3755dbf1d346da0aea95e458361d0a552131cf22958659afcdc9da4f66633ab1bd1217b8f29e3b96a870afa225ef2e4b1e56760e45951d016f1be4b8bf2745573d63aaefab2cc8ca159445de71d6033ecd5b5f0226e894f4425e6ecdcf5511a0a5f57944880d7c918f8751e1e58c13d5dcda9a5e161a4912080e48fcb7f7427f260c2040bbc5b6b5bfd69e221aeefca0667a83f63977d781784018e712993303e1741e705e85382f065908655ea570d24e4337c35c2c9a2a39d01c7e0ce9e4d4ab5453bfe7e1109b100ccf79d1e78f00e136bc9f5a2bf9ed79d585d9a486e5c6f9ec2d2a2253a6b5abfa012b394449b430ef79b6d136a29057e643a89f651aa3c615a1b06eb4037b2e02c5e6900acb6502ba96959caf02edaf5c889e7b46775f6712672eb7369eff45b972e892176214ef3665102b99e1a1ebbd7aa2ca7989255dd114939b9f47bcc8e77140a69cce800fdc26e1e7620de0b5dff277a5b0cf0103340a377b40afeea139d22ee79b826c9eddf98433f186011204494def86be84787190eb57762c618c0a2de1d8b23fdd54fc3365d24c1eee9bce996b974db749ed5c3ff94e24124e408c0427c9a9a389ce6dbaa7e4dde3c0f108ac13f86db9cdbbf3f4cab5ad9ec5017c89e07f76f5e2af51112dd8e5de40a39068e47dc9192ee6078eb54990fc1025353082315aa6f8d339c578db694de8e2e0f92dbcbc44d2d1da8b75c50ba88a8fc050388bc067dc7c3a9c709c4f00d37b1bf22e0b0641a2b086af4b58e59863cbdb5c365765d779de0ea385b38d3840b22b5b989c35f9103631e851b8c66504235ccc711d86c240c8c60823ea0b31c41a065ad22e59887a8609c9fc9ec227802fddec6ef83c5ce7da63a85bc1bee62c18d0694be098839c91f0ab4fb723983867687b1c6c070e49a247cd48a04be39df2af40272eb8f621d5a520075fd05bf8ed5fb66f76e75e74cea3490be2a8e2cd430a300a14e90d7a84a58b5f395dc0e45122c0a3f37efa1c811fad7efeb43baaadb1a2d609d076ddb430ab0e18b5572686f22c8ca4d743b0de07cd737a555a907cc7477c525711f0db13e60f86dbbda17e0d2e8c6cf9951a5857fbaad4e6a165cec3ff81f69ce4d988196dcdafeb2878d329fcb6b10cc335aabd122a2017534ebc8039636a66d2bb209d29d9480a7a651a99d8ef1a125955f363d9274b507772636671e1fd77afa761db1923b7b8de675bf30cf782d7943a2979250913230b507c6f734e57fa0c917238e0ec02d11fadca4f0725662c83e3b21b47958cf1ff41e73d87de0d211dad13f5621b0f84301432affba0f1933ecdebd97487dccd3c0a258b03439f8942be8ef4800f5ffc6dc36b2bc043f992e673c0822459f181310833a1243f0bae3ad408b6800198dd06ea39364071968e22a30b579ecba74a1e901728f24631724febbe7d68c788ca019d9271927d0f8043670f210d7f37da2886d23e91bcd0db107f5e7a95b69cff2dda5329e29e3923d3d3f19dac89b179ec90d638ef97e2523903055aedb3a1773c49d17407a71cb326c7b5b28a3ee3d23d36e63b0a9e74819a1870000128d081cbf412c3cef96fda35a7eeadf34a03d3e1fdfa335dc8f1f4739a4262630c30fadf394104081122eab22fdb57fe4ad24a6c3516260557e28546405ac7cff361f38b5bc07ab5b81377e9e34d5500d3816fe002d19262579a0fbd058f8a2cf0c9984d6c3bef99403c0a286a86ec01809346a9e3d48a5c2029bbb7e756c1187f9e9ec72e8f37c01bbec3c75435bad088c21d8b93f210c7a0c3a3607f4e2267d31fa0a74302daede73f1d304d79bcd4e9b91a1223806dde9b73405fd67ff8e1b76702cab55b669c8a4ecd5ef57147324bd9c207638d4261bf123165d45ac6b4974ae7cf13fe3868327d903c9c9a79b8004520855ec9cd05dbf2d9b56fe7f83ab87c94e15b297de13e2b66b56d8d952dd665e70b3a2d07f5a1fe1467e30f7b1f574e1376f4fc9c5bec6af9cd72e0b485800b34112811aa28cd3ea11fc6136941584c1488105513c100679472f8e1f5cc111d82c66c1c5242e471459f6bd7ca80a2152c64d46752d92ab37fa4f0c3b85a7238714b1ca7962506e3c42ca9233118728477441f9fe2bc2dfe5e9a709231b6417ac3de9cebf42acc26a607d003d890c3fff482baac070a98e78d47042e04d70b75b629daa38c1c9d826feb8ed377febb2d418ab1d81fd1811003476e39a27badc32275aa028d74a7de5791cd72b0eb4ca6b84f12f18ffdaba0baede94038c99ca7f65b1c1c7d6cbcd3fd7829f5a3dc0181e6f0116aea1f028adace2721d7366840849a41fa37051ac935e8385a90cb6f10a1fe08ad13452e6d96649c61fafa22e99272a1a24bcf57f26409cffc663b0db0277d3911f33aabff791b09bc4af8264e6a070c30d96808c2360681e5b67d79a99745ca63469f9bc9870f7e86a1ea695092e9f0c054787baeee5b9251495e1eae391490b44e5132bdd5b84291cc100ea7061f72de07fe5e4c6ac18dbbcf50a2fe0b2a10b54566e7ac29d94d9ba4d7a69596ecfcfe9f3b73ecddc71396207b7c42b1aa4555ac1855ee444ee10cfb570b86842e3cc30eb9a3a4e3284921b9c506566627743f83bd80798dd3725a3c079768e715223b5f5fca913df9c57def810a26ec17c30371dbe22f312da22e63085f28f93fffd520b30e60d0d9ead7a9f7e03e9e2c099fd3a6438d8bfdad3311a0631cb724e53ccd13fb558cbeaa7893f324dc4d0e65699c528dc5255d58f686e1d1f3a2255921cce965c48fea41aaf627d343679ef59b7d47ea1bac2745767fac686681742b9352cdc3c19222c3c405053555862696b99b8ceddf4f7345e73768fa2b0b2d7f5f8ff3d4d5567686e7ca0a7bcc1c5d7dde901050a141d2d3e44484c59626c6d9093a8becaedf5fd00000000000000000000000000121e2d43");


#[entry]
Expand All @@ -37,7 +37,7 @@ fn main() -> ! {
let start = DWT::cycle_count();
asm::isb();

assert!(pk.verify(&MESSAGE, &SIGNATURE));
assert!(pk.verify(&MESSAGE, &SIGNATURE, &[]));

asm::isb();
let finish = DWT::cycle_count();
Expand Down
18 changes: 12 additions & 6 deletions dudect/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,26 @@ See <https://docs.rs/dudect-bencher/latest/dudect_bencher/>
> t-values greater than 5 are generally considered a good indication that the function is not constant time. t-values less than 5 does not necessarily imply that the function is constant-time, since there may be other input distributions under which the function behaves significantly differently.
~~~
September 29, 2024
October 16, 2024
Intel® Core™ i7-7700K CPU @ 4.20GHz × 8 Circa 2017 Rust 1.81
$ cd dudect # this directory
$ RUSTFLAGS="-C target-cpu=native" cargo run --release
$ cargo clean
$ time RUSTFLAGS="-C target-cpu=native" cargo run --release
...
Compiling fips204-dudect v0.4.0 (/home/eric/work/fips204/dudect)
Finished `release` profile [optimized + debuginfo] target(s) in 19.97s
Compiling fips204 v0.4.3 (/home/eric/work/fips204)
Compiling fips204-dudect v0.4.3 (/home/eric/work/fips204/dudect)
Finished `release` profile [optimized + debuginfo] target(s) in 20.92s
Running `target/release/fips204-dudect`
running 1 bench
bench keygen_and_sign seeded with 0x5a426c75ebe1613a
bench keygen_and_sign ... : n == +1.188M, max t = +3.14225, max tau = +0.00288, (5/tau)^2 = 3007343
bench keygen_and_sign seeded with 0xef78035f1caaa970
bench keygen_and_sign ... : n == +1.049M, max t = +0.89328, max tau = +0.00087, (5/tau)^2 = 32852562
dudect benches complete
real 14m5.190s
user 14m20.882s
~~~
2 changes: 1 addition & 1 deletion dudect/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ pub struct AlignedBytes<const BYTE_LEN: usize>(pub(crate) [u8; BYTE_LEN]);

fn keygen_and_sign(runner: &mut CtRunner, mut _rng: &mut BenchRng) {
const ITERATIONS_INNER: usize = 5;
const ITERATIONS_OUTER: usize = 2_000_000;
const ITERATIONS_OUTER: usize = 2_usize.pow(20); // 2**20 = 1_048_576

let message = AlignedBytes::<8>([0u8, 1, 2, 3, 4, 5, 6, 7]);
let z_left = AlignedBytes::<32>([0xAAu8; 32]);
Expand Down
1 change: 1 addition & 0 deletions fuzz/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ cargo-fuzz = true

[dependencies]
libfuzzer-sys = "0.4"
rand_core = { version = "0.6.4", default-features = false }


[dependencies.fips204]
Expand Down
Loading

0 comments on commit b398b68

Please sign in to comment.