Skip to content

Commit

Permalink
v0.4.0 RC1
Browse files Browse the repository at this point in the history
  • Loading branch information
eschorn1 committed Sep 12, 2024
1 parent 4b5a75a commit f9bd800
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 9 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ The Rust [Documentation][docs-link] lives under each **Module** corresponding to
## Notes

* This crate is fully functional and corresponds to the first **release** of FIPS 203.
* Constant-time operation targets the source-code level only on latest version of Rust, with
confirmation via manual review/inspection, the embedded target, and the `dudect` dynamic tests.
* Constant-time operation targets the source-code level only on the latest version of Rust, with
confirmation via manual review/inspection, the embedded target, and the `dudect` dynamic measurements.
* Note that FIPS 203 places specific requirements on randomness per section 3.3, hence the exposed `RNG`.
* Requires Rust **1.70** or higher. The minimum supported Rust version (MSRV) may be changed in the future,
but it will be done with a minor version bump (when the major version is larger than 0).
Expand Down
1 change: 1 addition & 0 deletions ffi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ non-goals are:
$ cd ffi # this directory
$ cargo build
$ (cd tests && make)
$ cd python
$ python3
>>> from fips203 import ML_KEM_512
>>>
Expand Down
2 changes: 1 addition & 1 deletion ffi/python/fips203.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ class _ML_KEM():
},
}
lib = ctypes.CDLL(ctypes.util.find_library('fips203'))
if not hasattr(lib, 'ml_kem_512_keygen'): lib = ctypes.CDLL("../target/debug/libfips203.so")
if not hasattr(lib, 'ml_kem_512_keygen'): lib = ctypes.CDLL("../../target/debug/libfips203.so")

# use Any below because i don't know how to specify the type of the FuncPtr
ffi: Dict[int, Dict[str, Any]] = {}
Expand Down
9 changes: 4 additions & 5 deletions tests/native.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ use fips203::traits::{Decaps, Encaps, KeyGen, SerDes};
use hex_literal::hex;
use rand_core::SeedableRng;

#[ignore] // TODO: Fix for final FIPS 203
#[test]
#[cfg(feature = "ml-kem-512")]
fn wasm_match() {
Expand Down Expand Up @@ -41,12 +40,12 @@ fn wasm_match() {
&alice_dk_bytes
));

assert_eq!(bob_ek_bytes, hex!("5193763f122ed6da1fec7390b4b838dc1720741247e19a51be568cd6042fa9300f93217e14c0917be1317b8276e1e5ccbf3038c2222384ac7d736010e9051122649a8dfba4808c2a29a73d6db9adc070b35874125a205c5de33a75a271c638a16db850bd98c3e616aa513995f5f864cd792fc7b7929285049643afde6274b0c529e82a606789513ed98400ec2635a8bfa4507d4faa9d6dc169c3815a6951b9a7796e74c2ca0d0450dc3094ced76a70b8c3011c77cfa20d9d563622884aee656929f9280a77acbc70258aca1d3132c026043d60ea85dff44477c81e5c5689412236f7c87f76a7b656081e4f0c3cdbca5204152a00fb2508bac5e3f3aba9529f97c882d21283808977846b1b4cb6ae431589ac061a21316a88bb3889039ff434c3ca2887f299814d549d6e7007019a2924e692875489cf69a3a4817bf2157549053f2b284324860ef04bbc1faa7645358465c8019a38a87c91147e76bb7697653850392bb77c662071f5b80170f267de59b3a488bf41176f17b43f1943b81df45e8e377329da01a12c36d0c48a06b18606f9cdd2c25fb9ba68b506a19ca913535ac1c2733d42615ce37217daf865aaec1a4d6a8fc5918ac799acaa2b7a4e0ba50d18935a5ccae362a47afc74ce0b39a9d66a5773018c52a0aeda6e3f82bec470551d1ac0abd7124900631e8ba44232b4176219e386cd57f3b9a2278c9886155d11c9c6055a40a91366e26ab747180b76a230eb65e32ca5dec3c198366b8a06204be6b5357a78c8347123000b89701af98082d2823ac8177c3cb1acc64bc4ba0065f136ce8b92663e202c58085931b88323d41a5e6590bd67c1f3390a2bc460b005a04f85541928c5f7b2482c522c610b9a12646660c8c795b55284c0ae4aeb266af8691e6a360112967d1b5f4bfa24612831c15cadfcdc0b97138a80fa1f9361ab0774853276a9701732949b829264584d3aa2b1fb4f00219f1d0b8c3a3347a8a5015a93aac9586c937a287f3a8235dc27861a94aea8beded8cf6cd418865bac2e0a86b0475cac5382a245cb976271db74aba65425b5d31b1d7645e00a790f5a7d9baa91c518e85bfb04c6ff8a102d6a4afb159777b7f3ce754861b693f6998cb1"), "ek does not match");
assert_eq!(bob_ct_bytes, hex!("92455fbb204e41647129e71c35e9a7dd72e8e4138d6f2e4285a8652ae33fc653f0bfafb27440968af24134a586dc15b516d0dfe2aea14db6df01218f6eb5672e39503506f4b2916cf87c55edb1536b6b7646cf0bd69651cdcb643cb220bde16d9ab37a2b2295a295f306ac4e79403dbf394c56278f77fbf27e3ff00a02753e64d3cc1fe3c0f2dc2454f79475dc167a14764c84c121180708cf034a1dac4cf3da3f55c363cd8025f26c51e85531d8da08fdb578837892391e7b027126f1e2eff9a937043bf387f01f4a4b70a9ace6f45f3c794925df503a3119b19db1bd372b2954edec2ff4eee81f189dd9424c2d867b4186e586e960f597e178ec5e006f53d54aa10841ee4911f1e2acd4c88cbc3d42f0ccf36d07c689d3f3df0a5c649b74d74b035862aae8176756919ba8c3eee699c2942d1af5820733a433ecb3ea094123881b9b819fa4f9f0eadd86b10c2635d9725fab4038e4eef835f78b37f8ecc55475296a3413189265a108b8c99c8f5ce8d7af3c6f06bd4f1b6ff3b6ace389f9c5961c446f32424eca4d214cdea2bcfdcb53e81be8f3b2f12326652dbfbbad073e5acb75702f717e6420b354de539dca9f86decd6d86bf79f05ee68c2edd363668391fd9e6d526cf400f7e89d4e0fa150f8258d21508876795f855788f3ee02e775003a225fedcf940bba8f0bd8cb41e0141f208cb601be981b8abed26f1ff9b5db9a30271fd8f64d0ede4044d23fba9163ed05ee4e8ce2010067037cbde67e9c58e4b6f48e2b4c3da274092a05c0850405e15b6a2f40ca7b6f52780c3e61d4eebc16ff82d5c1ab0f166e62bf0860688550458878bda1efbdcf76d492dd45cc189e89c17d82a8b2bd8510ba45c3e41e609d39c79e6bb3766069987d8cb7b61556abadb1a33805a6d2be7fab7f6023fb5c9d62870bb6dcf7067899f47ce91ebd06b5f51c2dcdda6dd765b2ed8d8d0f0941a0025dd8b0b1bf2a7ec902d010dc00d2e0429ef24b98cb109182a0b5e7ad140448ed8413820bdfd684f08ba8d7c61b1e13c5381f2e4d654c106d91ea5adb2c0e850ac19e055ff472abfcfd0d71a0ac827"), "ct does not match");
assert_eq!(alice_dk_bytes, hex!("a9c8cb9349bf9197157f1c6013c6cede329b97960de4ca295d4c747ccc0814caa47bd17b153ab349409b5f22a695d0c1593a22f0a019ed144e1d07aa1f9a9f00d04582190baf92ca78f32d7d30a9fe6bbc39f50025b697979252141a06892a3da5fb33370bacc58b4ca1475dbe8c40275557f615b970d4274e751df9e88eba20208958b758a1b8329a2d264b38f0fa18ce6ab2e50ab2f97532e709624d5b507d1a96c46435b8a4cfab674580563a57d682bfa42cff866d91075cb8799852d8c631046b34584e44e859f643c345ea7bd580179f164429943f89746d9113295a6c924e0bb973f43ad891aad7448fb329b212b2ccb1551b49922d8e883f7c3b364aa211cc595e0ebcad3cba0e82200579d4aec914bb866c6b0eccbb8f1533118291686697cb7060d11ab34a87709840acf56054863c7917abc81318ba83ca2d9bb10fe4ba69ff8a1604772918f4b0aa420cb5d074f42215b57458b9bb50b5988e72870495145399684dcb064bae6587bc4089d62a728a2904ddd4746ca6991c70587100aba3512e3e119c0721b9b10c8f1f750ba064cb8d931f5c3397f78aa5c9ac8f2cd0105db1678d535b77d5554c29c3a075bd08590c2b879b82c260b92341423a0523a012eb223ed6950cea6960a2dc8bac19b726c55492781c3ce12f331899533c50d0926020567163cbcbcf4b0956896e38041acd75baa55916df5cc73788b02f0832369ac271c2b0a0aa6adde3b141f6557ba51bfea018a1833766eb51f96b7a835852f27762f778b1c6f19d4122529bb63ed7c354b915398b93231fc75544f4169813853d9aa33dc46f3fa47139b232423a25b57557f4650e287c659e835d3dbc153ae19acee246861b4c01b2bfc4e61c31db8d2ef721e5b7aa3fb9466e3bb0e18995902ca023ab1fa87283bea92c07a3b5ed2c15f63a4986c4972716be26b2944c945cc4a17282a592f6bb3a683825b4b37ca4f12855383a6cc8bc2f8b01b84ca9a9509ee5113a13eba649da6db74510e1389d1009d0c1c9ada6da875adc6e58a187d01027880a2032839d8b82171b1b660ac129d6c24983dcab9f7b9c5193763f122ed6da1fec7390b4b838dc1720741247e19a51be568cd6042fa9300f93217e14c0917be1317b8276e1e5ccbf3038c2222384ac7d736010e9051122649a8dfba4808c2a29a73d6db9adc070b35874125a205c5de33a75a271c638a16db850bd98c3e616aa513995f5f864cd792fc7b7929285049643afde6274b0c529e82a606789513ed98400ec2635a8bfa4507d4faa9d6dc169c3815a6951b9a7796e74c2ca0d0450dc3094ced76a70b8c3011c77cfa20d9d563622884aee656929f9280a77acbc70258aca1d3132c026043d60ea85dff44477c81e5c5689412236f7c87f76a7b656081e4f0c3cdbca5204152a00fb2508bac5e3f3aba9529f97c882d21283808977846b1b4cb6ae431589ac061a21316a88bb3889039ff434c3ca2887f299814d549d6e7007019a2924e692875489cf69a3a4817bf2157549053f2b284324860ef04bbc1faa7645358465c8019a38a87c91147e76bb7697653850392bb77c662071f5b80170f267de59b3a488bf41176f17b43f1943b81df45e8e377329da01a12c36d0c48a06b18606f9cdd2c25fb9ba68b506a19ca913535ac1c2733d42615ce37217daf865aaec1a4d6a8fc5918ac799acaa2b7a4e0ba50d18935a5ccae362a47afc74ce0b39a9d66a5773018c52a0aeda6e3f82bec470551d1ac0abd7124900631e8ba44232b4176219e386cd57f3b9a2278c9886155d11c9c6055a40a91366e26ab747180b76a230eb65e32ca5dec3c198366b8a06204be6b5357a78c8347123000b89701af98082d2823ac8177c3cb1acc64bc4ba0065f136ce8b92663e202c58085931b88323d41a5e6590bd67c1f3390a2bc460b005a04f85541928c5f7b2482c522c610b9a12646660c8c795b55284c0ae4aeb266af8691e6a360112967d1b5f4bfa24612831c15cadfcdc0b97138a80fa1f9361ab0774853276a9701732949b829264584d3aa2b1fb4f00219f1d0b8c3a3347a8a5015a93aac9586c937a287f3a8235dc27861a94aea8beded8cf6cd418865bac2e0a86b0475cac5382a245cb976271db74aba65425b5d31b1d7645e00a790f5a7d9baa91c518e85bfb04c6ff8a102d6a4afb159777b7f3ce754861b693f6998cb1a3db817ead911696225814c0cd4aaf1fec38a56f7ff848d6522ab6f02f9e747f932b30e756257dda01d47dd4a1b0e62abb8fa01f222ad8554ed821a89f82cbbb"), "dk does not match");
assert_eq!(bob_ek_bytes, hex!("8825a351c035c89a63cd381a0026bb382257d8a40f64d28b48a69e4595847ea92bebbcb51cd0bf87b902e7ea0c2dd02f2fb665b95437cb395e2b207d4b22293bab1f43035468493306f69d3bda9d5b2a4ce9893a07d9621eb63067c90a9cbb25b9a4a8b4d060c65520a1eb9948f56a960950e2295c0253464a15064b721da86c2653c7947ddac497847a16288dfce130d5738c569c08595cb822428324367feab5a7e7c69be835b1f67457711c73364665306a08511bba94c0053e6114f1598c37fa94607970bb08995ac0acdfc58dce27573ab064d9e85547f76c98f3b3d5e58dc1c9447ee24dd3c6c3530803758787e3c79bd59933c2574f99078438b8a0521cb0942c2d45b056b160735eea6baa6a4bdb54975e8bad9c8019c3874365e294d95b07aaa1ae017b9f4955b6add08947ec73501a632f42bdab102a0ed6816e4724de3570cea5c2e83505af26687ccb69423c321bcb58dceb6cf31ab1eb9388ee952f41350f70a2956355238d7c18a24580bad18f4a1b818bb67e9e18b50a35146e9453e495b8d7890adadab7e315cfb58c92c33384b7fc3d1366a7fdcccfc59b1658152e20542530388173269c72cc8c03e8419a579e6ae1c866890c576bc256d31da82a7cf0a4823cb900cbd893c857bde06231f073b1a702105d73c3c2e3a4b01a1a2d036c32e01b94b0831b0b06fee78f1b5083bf547c9713c3ea44bf7b49743c005167d0c81b7c7b4fab2288f6176f3947aa2b3360f160d113a553740364fa60a4151a297694763b65835042b6ebb18b7a53dc7273aef26df25b746c78ad0177718b5b8dfd92a890365e452b376ea28c05a98dc5ab3ff6d21d8bd2b46536680682592cc3093615a17f5928a427737531561da02db161034060b352e1b87cf53b0035090f8217556720e1f450e4bcab94164ac03317a663b96f768b5098b7f63ab722d22285088f7dab4a8c36b2a3627226116774ab7f36fc4c050b8551a8001d993bf5811c26286eeb1b3a2775638a66b48ad963154764031765b4fa7ebe5c9f4987a5f542b1df211f38d642187b4e16c440f20699c4f6bfaffa487955bb19a1b263bbf85a9e3456f4de72d0933ebe52aef77f2812a5809e8019a3a085ba"), "ek does not match");
assert_eq!(bob_ct_bytes, hex!("a93e7de0fe8375f09e3ab79afcb4637be7b7f5a8d065f3048fc8123fd8a1fd1a7ea71b6bafd3bcee51dc92c7bd39e8a9cc96e44620c114556e8a26d1ab9d9faa74dba5d87ab20a11bcfda1af350de23cd3d6b804a82182688b041913bde4c5ba472a83e823bb14c49ee48a08e01d4ff76f1cf8f652ee97516af3fdcf5bab7afcd0d634bb1660afaacb2b4bc7d21811a3eff8896b5a30f11d3a5a72ecd253109803068c441aedd1110c6a9f4e199c382890cdc55404e3291d385d37d332c4c0e3637329ec9b4787ae815c09cbef20f12a43b7368883b896987780fc49fe0427621ade89bf117bf8b3ad79366905d1ed5111e98d9edd8ab7c68dfd5bd26e788036d0d060c3666d3efd712651ee73149b4425b7aa1ce3b3f789f3bcfc9cd0859571a5d88064fb69cd1128211ab9839cedf9a051e961cec47a4fbcfceab7ba41dec76af6eabc0d691996751eec855e22c6917b953450b50722e51f6490347aac603c4d068e78d881803f9d992c03696fe7c7ed5b0a5902df6a7e2291f1e4ce333bae5347d258e435d5638ad11060667071e18312e3493494a4046139701230832e4a3f4b7c132b935ace9066441e6632096e2b4d5b6ad88f7601877f30357b56a63ae6877c5051a429aaa70829ad4171acc6930b2da9b23e8e0c0df7fa6bd7cf81f9611f0b5716b92ec63e513599d0098bdc3f83e3b2d3ca4e593644c952d05a771b91b93b1682a6f39846527ab71b9b9d9b4b7ef61d075eec4f1554d689912ce894447eb45db51fd483f9c8cebcd7b313b4a4ee1944935c678cf80745755bc802a1056bdd34002e47decbdd9f31ecb99760ac9ea602bbb3b10af68214941c17f7ad620e044388451c9ea451f5a1929681a61a54b15c208483e2bee1759f27c65dd1450b0ab49dc15a5d15aab5018b2a2c1e836f997f0b7a42bea76287d31274445312a610c89359a0d3e6c2b7c4ad30df6c437a256297c2de844db0229286215ba7091c1f64fd55c7bb78ce292def21758dcf5378706968291f6eb1f67931702a331824e7240c063e35645504fa18352e4bfc52469972b71291194e77b7dae27ac4"), "ct does not match");
assert_eq!(alice_dk_bytes, hex!("2f6a85a280072b6107afe6cc7d4782f192597958b8bd6a4cd9189f076a6e1ae88d23f621979443574638f700509dfc22cf54cf1b413b1a7494122121f595389afb9db4544b7ed3936a1530e39bc1f65849de916786f21aa1571a22a47fc10101f171095577cc86d72773a789d7d244ded42ae4910c4111c406ea61f7999b8e1bcd01fc2b2a80509678b33b72a65b1b3165157c07d33a0a132b80b515a68b96e07732719986625757a53a70c9cbb864500a431299081c36cfa0592fd05f8b443ea4204339ac0f7f2340d0a90b880c5d59f0a7885078f878556c813973bb092b96b23910806561091198042b2005496a6cdfd84904994472899afce6a13516a9cba50afdac69452214fc12c0a12bc6b8ebb3c38991f0202a7e2721d5dc24ee319300b13dd7890c64b2559b098a4b7a69f10a32f323a833c27d17467fb28047a6147874932e5e3b3e815c71607a8b40f327bb02a617103333046504423158346b1f603a4a259cc4615e00cb7391204cfcd254e20c52a7c0b1028447715238137491d19abbf5bc872f9572bcf80f13a643a84804c888c65ccb7fe542b9d1f6cff966c513578fdc4868d308b08f08bca0277759287c5f2552ada43e72930703b71d1b1890c6f57bba898219d1b6eb90820a932bf553c617957e6e8b81a4038fabb86d50093f02f5438738a3ccfb6fb13a9378232e4d4076e06174bfacaf6aa7ccd030ab66a1c9bb4861172b97b4e322fc4c7c61ea6fbed3568831bbe676220167a1f0a3b3249399c93c2ea6e532331158042727b96c305fc1b64eab0cd74bc4e8f17cbb56633e9b78201979a084af97f32b88538d02627f4a10ac2da093b2e333931a70a9f1872e758949367da2b822b5a6a1f0a050a8026f78654834f176e4f68f4f310a6aec53f861977417a801b18d5ac6bb48c090fdbc09d6faa08d553545881d00eac36b88324d1799c2b06a62f919a52a51eb68bd4246835e002bcf6a9779a02a159355c1c39744e46b428a2e1755b7508945cbb719ae710fbae0b63dd88e4fc30c01a81785c01484c24df97201a3151e5ff35d22eaa87383524a96481bf4958825a351c035c89a63cd381a0026bb382257d8a40f64d28b48a69e4595847ea92bebbcb51cd0bf87b902e7ea0c2dd02f2fb665b95437cb395e2b207d4b22293bab1f43035468493306f69d3bda9d5b2a4ce9893a07d9621eb63067c90a9cbb25b9a4a8b4d060c65520a1eb9948f56a960950e2295c0253464a15064b721da86c2653c7947ddac497847a16288dfce130d5738c569c08595cb822428324367feab5a7e7c69be835b1f67457711c73364665306a08511bba94c0053e6114f1598c37fa94607970bb08995ac0acdfc58dce27573ab064d9e85547f76c98f3b3d5e58dc1c9447ee24dd3c6c3530803758787e3c79bd59933c2574f99078438b8a0521cb0942c2d45b056b160735eea6baa6a4bdb54975e8bad9c8019c3874365e294d95b07aaa1ae017b9f4955b6add08947ec73501a632f42bdab102a0ed6816e4724de3570cea5c2e83505af26687ccb69423c321bcb58dceb6cf31ab1eb9388ee952f41350f70a2956355238d7c18a24580bad18f4a1b818bb67e9e18b50a35146e9453e495b8d7890adadab7e315cfb58c92c33384b7fc3d1366a7fdcccfc59b1658152e20542530388173269c72cc8c03e8419a579e6ae1c866890c576bc256d31da82a7cf0a4823cb900cbd893c857bde06231f073b1a702105d73c3c2e3a4b01a1a2d036c32e01b94b0831b0b06fee78f1b5083bf547c9713c3ea44bf7b49743c005167d0c81b7c7b4fab2288f6176f3947aa2b3360f160d113a553740364fa60a4151a297694763b65835042b6ebb18b7a53dc7273aef26df25b746c78ad0177718b5b8dfd92a890365e452b376ea28c05a98dc5ab3ff6d21d8bd2b46536680682592cc3093615a17f5928a427737531561da02db161034060b352e1b87cf53b0035090f8217556720e1f450e4bcab94164ac03317a663b96f768b5098b7f63ab722d22285088f7dab4a8c36b2a3627226116774ab7f36fc4c050b8551a8001d993bf5811c26286eeb1b3a2775638a66b48ad963154764031765b4fa7ebe5c9f4987a5f542b1df211f38d642187b4e16c440f20699c4f6bfaffa487955bb19a1b263bbf85a9e3456f4de72d0933ebe52aef77f2812a5809e8019a3a085ba047cbaec84d2ab2200f93179117186ccdc847fdc2105a96ece98ba5e11e679b63f537f509949e758624a70946a77698673597bd30ea2d1bc2b1207afa75145c2"), "dk does not match");
assert_eq!(
alice_ssk.into_bytes(),
hex!("ae36ee54c1a7362316d47e8d7b867d1adf25470064034b8410b4ac4c2ab01de0"),
hex!("3a725a4fb17c323cf20a1d9fa8584f3f52b3ff977fdc0e7acceed32b26055797"),
"ssk does not match"
);
}
2 changes: 1 addition & 1 deletion wasm/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "fips203-wasm"
version = "0.2.1"
version = "0.4.0"
authors = ["Eric Schorn <[email protected]>"]
description = "Sample web page utilizing FIPS 203 code"
repository = ""
Expand Down

0 comments on commit f9bd800

Please sign in to comment.