From 54d9599d4a03a519ebe6ca5ba56465af6c748ad5 Mon Sep 17 00:00:00 2001 From: zac-williamson Date: Thu, 10 Oct 2024 19:19:22 +0100 Subject: [PATCH 1/8] updated to use bignum v0.3.6 --- example/Nargo.toml | 4 +- example/src/main.nr | 14 +++---- lib/Nargo.toml | 4 +- lib/src/rsa.nr | 45 +++++++++++----------- signature_gen/Cargo.lock | 4 +- signature_gen/Cargo.toml | 2 +- signature_gen/src/main.rs | 81 ++++++++++++++++++++++++++++++++++++++- 7 files changed, 115 insertions(+), 39 deletions(-) diff --git a/example/Nargo.toml b/example/Nargo.toml index dab762f..2ddb49b 100644 --- a/example/Nargo.toml +++ b/example/Nargo.toml @@ -2,8 +2,8 @@ name = "example" type = "bin" authors = [""] -compiler_version = ">=0.31.0" +compiler_version = ">=0.35.0" [dependencies] rsa = { path = "../lib" } -bignum = { tag = "v0.3.0", git = "https://github.com/noir-lang/noir-bignum" } +bignum = { tag = "v0.3.6", git = "https://github.com/noir-lang/noir-bignum" } diff --git a/example/src/main.nr b/example/src/main.nr index 0096634..7305ddb 100644 --- a/example/src/main.nr +++ b/example/src/main.nr @@ -9,26 +9,24 @@ fn main(bn: [[Field; 18]; 2], hash: [u8; 32], signature: BN2048) { let BNInstance: BNInst2048 = BigNumInstance::new(bn[0], bn[1]); - assert(rsa.verify_sha256_pkcs1v15(BNInstance, hash, signature)); + assert(rsa.verify_sha256_pkcs1v15(BNInstance, hash, signature, 65537)); } #[test] fn test_main() { - // Output of `cargo run -- "hello world"` in the `signature_gen` directory - let hash: [u8; 32] = [ - 44, 242, 77, 186, 95, 176, 163, 14, 38, 232, 59, 42, 197, 185, 226, 158, 27, 22, 30, 92, 31, 167, 66, 94, 115, 4, 51, 98, 147, 139, 152, 36 - ]; + // Output of `cargo run -- --msg "hello world"` in the `signature_gen` directory + let hash: [u8; 32] = dep::std::hash::sha256("hello world".as_bytes()); let signature: BN2048 = BigNum::from_array( [ - 0x6a6f5e0452068d059239596499427e, 0x49874fff56ea7d5b82affe13aff398, 0x8308e0b83c4493fe3d36677d5c5f20, 0x7b74cb72e02b0bf597757cbd6b874a, 0xb3bb213180fbc065e80148751d2524, 0x1c4c705d5ecd56bd6a8aa9a6d84894, 0x6b4d426b0ec097a55ae974842425ef, 0x8d9d942447e7adaa33ac0971040c46, 0xbf190a8aa6badf43475b0df01fe440, 0x9f8cb910501645e353112d2cc61519, 0xdac9f06a74b78ed9f1f6e9b07980e5, 0x97212e5771d1f99e87666cff37f219, 0x39bb405b61f21fdcea09190d12e3b5, 0x578092bcac46bb96fbbac4d6629f86, 0x318f31f85d9675cfb9276d7452d05d, 0x17b89cc9cd00b8349838da3e2e9a31, 0xe527eaec955b8cbce6b83e64cdb907, 0x4e + 0x33aee5bd60a8d0664fe7780b7fde43, 0xc66f8a5fc4a74d18b83b27da6d4e04, 0x501c489c1764ad72e5c5b1bb56f1c6, 0xb1a8c5029f8422efdcfd1621f70da9, 0xe9b80989d178e8852266a7631c3b99, 0xb95a3af119a4ca60350a31ad3b9d7e, 0x64a98fdbb8441abc103fe2617149d9, 0xfd5a9db30568b2b151bd243b1816a9, 0x12d2be80d5959660831cc3b7929159, 0xae6034247561d3dfa882ca20d61ff6, 0x786973219800b65edd92b0b0b05d09, 0x516fdbed6a0d7afa3516dbba1ea473, 0x2f14e2807fa6c3d9cc5b7667aec5ac, 0x9a6a1997e1f7cfdeac736073ec4ce2, 0x24c94d7ea832e1afc889e82bd42c1b, 0x4cfb977a1102edca719f9c2e3f2c2e, 0x7c7cd4f29c3da09f7fa8ddf73df0b2, 0x77 ] ); let bn = [ [ - 0xcccf08e1d72f1e09c96a1d45fa7ebf, 0x451697572b91ec507198cf9b5cb9bb, 0xf10583347b1086741d88d770b97f86, 0xa6b09bf6a6fc537fd20c09aebbc02c, 0x9062f17b0c8ff4cdbcf5ec5dcaa11c, 0xffe8818f651c10a007dfed65268611, 0x1fc98113a2f756f71e2aa0980af51d, 0xb58e1cfae449c77c606d0ac2b8dcd0, 0xf1c51612848b08bdab6606ed6f7d84, 0x17bc64df41aa696d6fea80db134085, 0xf47ddb8f078888734806920a286966, 0x76dd5ea8fef16f3a97ec5763d6aa3b, 0xba8a4edcc12d02ed34a2c4c5c20cc9, 0x74d02b69d4c6679f21476669910c72, 0x467650c3fae9218446bd2dc6af509e, 0x3fdfcc8d6417caedde949c3440d12, 0x47286c36472b5cacc3ca5707a243c2, 0xc1 + 0x413f4f8b6405fdb76f85540f5663c5, 0x1dffa8aaa6192d9f031a8c1d55dc33, 0xefccc1c3eb6c189c147cd485f56771, 0xc62eaf58cfd1a6eead6ec82e44111a, 0xf693ea8b22a50265d43eb2235d910b, 0x6eb385b77042a98e1f708a5b76fa17, 0xad5ad6b87eea566a26a05f5a59713b, 0x979c5611b54a78df8fd0b5b0464de6, 0xfde57bd223c394f50249f18d5522aa, 0xc6cd804f8bac07c9e81cc06fe323e9, 0x84ec399cf67c012f58a7b81515b63d, 0x61eba631d274a78a5387d0e2929d77, 0x40e2bb193409130671ac8f3e7c1fcf, 0x2aa7d8d4aec0cf96ad8fe0d0779dbb, 0x26d56c517952712bcdf1e8f1ffafc6, 0x9786e9f338cb9e6de55c436153978a, 0xb867413d06a32724b33657bbf1e3f2, 0xe8 ], [ - 0xe4cd9ccaa953dd98075a6d009793c8, 0xc016aacf3bbeca04f3ec400b91da8d, 0xb0ce42ae48ed76825d1c6a4846bba8, 0xf5c3e89edafd2aab4a5dc93ee9b601, 0x1b0656182baa22226285a24c99116b, 0x6b32bd281f20b4ce44ae30f4e46d69, 0xa2d9c08c9a88927cc0969cfefffdff, 0x1cf7c83f500d162b24a4a829660803, 0x629cde32525c3b22139e6c8e38366e, 0x7ebcfeeabc68bf330945b3bdd98273, 0x65911b4114a7ea3cbdce11aae463e4, 0x5091a1dc5a4f02a0168fee7da515aa, 0x3ec8a6223b48a4df3641d59c3ddfd, 0xc6901c74e7c8a968403d618a2a088a, 0xa077d01679560228faeb5e4fe0d47d, 0x7f9010a2cde8cd10bc03ec56f90364, 0x13909fd6c85b9eeb2aaaf64643cd46, 0x153 + 0xbc5184dd6dc06d396240375a5211c0, 0x6280f148f5356bbea76382819bf475, 0x93d5ca8016d2335de4fc0988e7e24b, 0xd96e4c1d3210702c33d6470e16cfa0, 0xe2dbfaf8d02d4251862905787f2561, 0x9538f84fa231c9baac81216e2d9ed5, 0xcb82246c4a83da9398570aaabd4d2a, 0x94b04ca9ae375eebbb9c87479d3bee, 0x7deacf1e79cfe70937e9eee7ed887a, 0xa0f7bae3d1a70b98538142db43a58b, 0xaac2ec033a9ab117f077e3e06ba954, 0x4f937780ab7d644c95d1a34dcf450a, 0xc17dd532df051696582c85316a2517, 0x69f59bbbfa26851603d97da9a83709, 0xc506921f809dcbb4c07aea96102050, 0xbe638141f7b4d62660d59519ebdacf, 0xbc084a1b1ca76abe6f8ae8fcff6417, 0x1199 ] ]; main(bn, hash, signature); diff --git a/lib/Nargo.toml b/lib/Nargo.toml index ac8b8d0..398356f 100644 --- a/lib/Nargo.toml +++ b/lib/Nargo.toml @@ -2,7 +2,7 @@ name = "noir_rsa" type = "lib" authors = [""] -compiler_version = ">=0.34.0" +compiler_version = ">=0.35.0" [dependencies] -bignum = {tag = "v0.3.5", git = "https://github.com/noir-lang/noir-bignum"} +bignum = {tag = "v0.3.6", git = "https://github.com/noir-lang/noir-bignum"} diff --git a/lib/src/rsa.nr b/lib/src/rsa.nr index d512c5c..bfa63bd 100644 --- a/lib/src/rsa.nr +++ b/lib/src/rsa.nr @@ -91,19 +91,19 @@ impl RSA where BN: #[test] fn test_verify_sha256_pkcs1v15_1024() { - let sha256_hash: [u8; 32] = dep::std::hash::sha256("Hello World! This is Noir-RSA".as_bytes()); - + let sha256_hash: [u8; 32] = dep::std::hash::sha256("hello world! test#123".as_bytes()); let BNInstance: BNInst1024 = BigNumInstance::new( [ - 0xe908724e0d28a1565511879e00f063, 0x58dea28d5112982c8ab8597d3e611f, 0xb115f9878acc910a47b41ac8d5f763, 0xc71b0a719c2283f710f86024737cee, 0x9ee9eb73e95b84f033af5217337427, 0x8fcab34c99cc2661dd57de15ae2110, 0xa38db8a829eec5550342f6f66334dc, 0xd7c4b32fd351a47d860fda1897330e, 0x98c92a33a0f33fd7 + 0x483fd4238ca29c3a06f8161ee16faf, 0xf366b16a37c2db80d2977eab0ebbdc, 0x92ba4d77ff2425727ad38eea1cc2fe, 0x3fc50862a0e6afbcae13d5f85c220a, 0xe634dcea239a6a896597d4f75af455, 0x32e1448d1489bca56d983562715680, 0x1a81ef873140c0cfc191a44bfe6e88, 0x96066f4df0e14de07329df952aba45, 0xc2e161b4944381bb ], [ - 0x55582e8ba08822783fbd7d07390be2, 0x1d7d83f9dce3983c66f440dcc2f33e, 0x6072d13c84a4cb304f58fbabe782e7, 0x0cee5e0dd62bc54d15a91a4ea3bc50, 0xc485e6f946c45cf660fba4f49325cb, 0x1f0e45df0464b065c94e84ed1dad8c, 0xe4c7b3976310ea239059d834b545f3, 0xd418145200fa77235f5f8d852b121f, 0x01acf0bd16cad9bd8f + 0x9c0b9f33d5b6960db5d70095a87724, 0xfb5245423548a808b8aee833d783b8, 0x790c0d7558b38dc24122455bf48f92, 0x39227725aaea9c83a99acf4b847682, 0xbd468a00b83cb026568150030eff3a, 0xcbb4f5cef905ca04f92f266e0493e8, 0xe19ad572a7bc2bb8168c81b0867c04, 0xbe2075bf10bc8a16725befb36d7f49, 0x15049cee2f37078121 ] ); + let signature: BN1024 = BigNum::from_array( [ - 0x393f230b55a12fb7bb39c7edd2cf48, 0x78f7d0a217d340407cae4f39b8f001, 0x603909ff76a519f3c8e96d695d462e, 0x0640ab230b459bf4b20b4823a5b850, 0x02ba190de61a85074b18e228231984, 0xe1424c0779825707aa433ecb86c388, 0xbed8087d947a9c6c56625ad20c91aa, 0x7da4a0c2eee3a3c0d61e892ab4ada9, 0x6ef98a936c8bf8e5 + 0xe6fe1016893fed66550af77d706698, 0x9dd3b648afbbdb748ab97b4d609f0d, 0x83098d3b45c588c69c0e36ff9b210a, 0x5a793d529a382b34a491f68e4d959d, 0xa8c43b964794a4c11da2e57ef226df, 0x68654e3681728df9daff17a3b0bc66, 0x8aa4c9accfffae4fd5cd453c8c5335, 0x8b243f7074dacdcd869b94f3eef7fe, 0x3a8c12564704f5ad ] ); @@ -113,40 +113,41 @@ fn test_verify_sha256_pkcs1v15_1024() { #[test] fn test_verify_sha256_pkcs1v15_2048() { - let sha256_hash: [u8; 32] = dep::std::hash::sha256("hello world".as_bytes()); - let BNInstance: BNInst2048 = BigNumInstance::new( - [ - 0x183b4cadacea64716b6535b25a86ad, 0x129a32e9fbd374949e81b080546c2b, 0x9276332765f54b9b4d6fe23f4983a4, 0x91df05fde1a414c9fbf38808a01032, 0x97ca171c382e082ddd6c81be090902, 0x97161dde47ed979939451704b72648, 0x3b66f0c93f8ddbc62bb99f6b8fad2d, 0xc3a046fcad814d8938da372cd84d2a, 0xfe903cfe3ee4de6de3916023bb87f2, 0x8be5fd99c8b46dce9aab27ce4b3883, 0x0d99dfe50dd2288123804872da8543, 0xbb6d8afef8b2c7e3b86ad96973d4e5, 0x17e08fa3c5391279b844581f67825c, 0x09511f4a436abe495bfbfcc254d9c5, 0xf80d02572d620eab5ad7ecfbe2c20c, 0x2a5307402a05f59ba232ad0c8366d0, 0x7b9169630b317c38d549a86f85fcfc, 0xf2 - ], + let sha256_hash: [u8; 32] = dep::std::hash::sha256("Hello World! This is Noir-RSA".as_bytes()); + + let signature: BN2048 = BigNum::from_array( [ - 0xf4effa025abe90db41dc5bb5934a5f, 0x2596b25aa09f6a0e290accebbef006, 0x330e9567ec5eca92b7a8ce72ad3d83, 0xccf98d178ec4017e4947cadc02da7c, 0xaed6044ffeeb12de4d1e67aedfda78, 0xb5ae8a5a4637b632800e2f41dfbf0a, 0x8304360d359cf2f0d5d97c039f9b04, 0x53cde0d0633c0e66e1da9a118f6a96, 0xf9a83822351097bb1ed123d10290f5, 0xeb489c7f7227c09ca0117264dcf04f, 0x6a1b3618478a235f438adf84533177, 0x71c03085e38a87f5ec8e51c27dde98, 0xcf3e89d9cf253ef61d65d4431334d9, 0xa5a1a59e98fb7f49c746149324201d, 0x38f46c635f884f24c254eaa37981d6, 0x1c42be15dd95e1ac5bf01972b24ff9, 0x4555dd506d1f89e61279293c03db90, 0x010e + 0xad8c7c5ec9162b4769e0cfe5ebf840, 0x0d57cdde315319930d4e9eda1a7c1e, 0xafc455e0e01ef5a57160f0df8a786c, 0xbf1c1e64e91e316ec3ec02e68c23d6, 0x8df9a02bb6a52c932ad0d2832e33a6, 0xa3eacb4ebcb99a4a48be662698a9b8, 0x4fef3847f3e94050802ab50f29a01d, 0xa493fa7d68bd2b0d9e1a1d768053c0, 0x707d984f377f71262954eabd10e268, 0xfec30d40733948f36919b3ffa07366, 0xc9bf002b29ce6a860ba284a4426e34, 0xbc839ec24aad3c05a9aaccefca9e63, 0x07fe1918a7d98dd52e49e9d775461c, 0x098fdfe7d87d48732502814ee90808, 0x64de99868676d8b02d7b43b0474636, 0x27910e77bdc54ba42a4322a5ce8200, 0xc3b7b95e779c9a11895c88fe24bced, 0x96 ] ); - let signature: BN2048 = BigNum::from_array( + let BNInstance: BNInst2048 = BigNumInstance::new( + [ + 0x6d235ca5aab99a4c05ff2a03574427, 0xec267a6bbe7ffe4b6e8da9cf24897c, 0xcdaa2e64a6116d5bdf82460a108af3, 0xf6c184c2d2f4cc7ed3b7eaf28e257e, 0x7511d2771cdf315a07ba2e0058cb8b, 0x641d6eb5119b1b8e643eda5ade2dc3, 0xffc28bdb9f8f0ddc596675feae14fc, 0xcbc67f77f37393c3419a2340f859ad, 0x5cd500e0341275ce468e62db47107d, 0x3049eba2be3f9408f2c9ed2ae27d90, 0xc2f431dd169858ac5269d2512f4189, 0x36ace99a589959ea0425444cfb440d, 0x825fbf23e4e49a3b8f1fa714681f77, 0x8125cd82c2776832cf839ee1a9332c, 0xacbefb6a860c88ecbef30d52472137, 0x24166d0e0b434e207d4e8ecfd66cc9, 0x180955377f255f7bc29506fb45a8cb, 0xf7 + ], [ - 0x5f0937ed1aacbdb83991e21c89ca8a, 0x5a1fa4ef2faf4042401c9121c73874, 0x7379fbb7713fbf807d250f7401afb8, 0x9cc5ce8813f3a83a72b681a4d434b2, 0x11cb49ac2ee1f9bed8a008b8327e1e, 0xf3362524f1224e48827b34a62f6ace, 0x3498a2944e32a3798fe9da684b32ae, 0xc346c33528bcdf7a06805126a29402, 0x6ac93f2fa68f270ec73674eae24380, 0x222c72de080496533ceeb8af827910, 0xc22889b311a53203278b942ca67100, 0x93d75567f7fe9ee7ca9871a0cb09f9, 0x049dabd976a9574847b1614f6b739c, 0xdc66b621dbae623df9b657b52fa1b0, 0xf37e82cc1eced382e11fc32e673f67, 0xe50545eb9027f1144a0ba7bbb0c886, 0xb6193409539c515d3c55a45c5734b1, 0x4b + 0xd08ee8d0e8ac5ce306aa570cfe1c05, 0xed045b877e042b6c144e6aa9cce044, 0x845096769616e1351bd198cb0938ae, 0xe4512a74991f500c166befa3c2f524, 0x81a05d9646ce1212d658399b5b566d, 0x1211121678c29a52c6d66eeca965b9, 0x93dfb350c2b86c8a2a2464cd84e03c, 0x9747aff06e0b9527bc5ad313c8173e, 0x1ca0a8eb7986c264406bf2a8752034, 0xe6abe17cf0f33ec2f655a85c027269, 0xd157b2f2739eec33b38908711b45df, 0xecc0246c32b828f0f603c9feea2daf, 0x76cb733ba6093e7fc2cfc29e07d7c4, 0x7c6f3519480fc9490894acf0c7087f, 0xb92c0644fa19196c5be9d142611269, 0x4db094df57cae1fa0bf4e8faec435b, 0xa2426a309776b8e5d0be5257586c59, 0x1093 ] ); + let rsa: RSA2048 = RSA {}; assert(rsa.verify_sha256_pkcs1v15(BNInstance, sha256_hash, signature, 65537)); } #[test] fn test_verify_sha256_pkcs1v15_2048_exponent_3() { - let sha256_hash: [u8; 32] = dep::std::hash::sha256("Hello World! This is Noir-RSA".as_bytes()); + let sha256_hash: [u8; 32] = dep::std::hash::sha256("hello world".as_bytes()); - let BNInstance: BNInst2048 = BigNumInstance::new( - [ - 0xc6a1c5e80ce354c6b00ccf20cf3a1d, 0x178d135f925a03eceb25f79bab56ee, 0x13ab3d6d8a5c5586752b5a3bc74ec3, 0x3d13b47b152367e3e2fc014d03d19f, 0xe89a7278a2945b4a672011691db30f, 0x5b4c1b061378143629dbb29dea1e4, 0x26a48b6f4e8df1472fd4fc12b17c18, 0xc7c92ead0ce810520cf3a8267254c1, 0x806b8cdba93909e9d9a71ee1bcdac2, 0x703ef80f8eb703b84c201366dff1c7, 0x7361034bb2c4c081aad8b1bcca83de, 0xb23c7e1109e65e6d08fa72cc862008, 0x750bc927874455782cd2d6fd5a51f6, 0xf0b83665fbf8cb5cf31cee9f89848e, 0x20d447b08953c7ce3330197938a8ae, 0x11a08bb5a2241c6a2a69f930d8b28b, 0xef5bca8dd582570a44705cb123d09e, 0xb7 - ], + let signature: BN2048 = BigNum::from_array( [ - 0xbc93ee57c1c8adc53f0a995a6221ca, 0x2a9b43587534b20dd85a5233329f10, 0xc587fd488f64eed02adc1f462f7448, 0xf1484d37676bb0e800996757382522, 0xc2126c48221aa61c9f52c6b918bab3, 0x8660c861dd52ed958beaf6c6c2cff0, 0x5edd9dc4f02a000f350948c70bdf94, 0x6f3b9603149272e9b232a379a017bb, 0x950fd85cffbdf4476b1cb66c1f63d6, 0xee459417b1a56b6f7ef3b89e385ac, 0x48daeef6d1a055f3746ab71058e137, 0x3cbc0ba96d541feee92dd27f9d0306, 0x6a2a42384cc388fa113ee80317e0a0, 0x43b4f89c508a42d309f295c0d9f3a5, 0x8d8c28b05f71b962b40ea906ff407f, 0x390a7989eb9cecc5827cb00e1ca693, 0x4cbf158eabf7e96ef7f2586d0ce613, 0x164 + 0xcd01362e23da8aa633cb5a0fb9808d, 0xd3be03e14b0c1eea086ef6aca3d51a, 0xc7bb806d6723bb12c95ce0e3bc5588, 0x05f9843f35688f97a88273cc30b661, 0x25679e918a53da7baa6840d660305c, 0xb89d2c648f85e1372ae090aa89e19c, 0xb90686c46e3c9be1e0f4006047bf5b, 0xd2d27921c3c5b8613d4fec51eb7045, 0xf5e86133acb02bd34dbac6805c5958, 0x84fe10899677d060461b0c3619dcfc, 0x8c9a26f5a68450509aca9d347f0d51, 0xccb9f4406f2c75407b871d39a06cb1, 0xcc95879813f3f90c64f7b5c21b3b0e, 0xc519654312dce978c9f368724d8c8f, 0x5ec258287e34b65bd13cb4c05381ae, 0xd8b5e5f82508cde542538a1973f37f, 0xe035ef2e15b18975521e6ff25072c0, 0x34 ] ); - - let signature: BN2048 = BigNum::from_array( + let BNInstance: BNInst2048 = BigNumInstance::new( + [ + 0xea12ae77c634ac18e8914b0f112919, 0x7a385b52ed45602b3166e3006cab17, 0xce91edcb26009ae4ca5ec9032ace54, 0xec45aa323af9389e814dfa59e4e106, 0x50332220bbc7184b2b54c87acb79fb, 0x1fead59aea9260a545bb9b1e098753, 0xb362f1fc50b04e6581b34f97a769b5, 0x409c9d7b3a3ecb214e9dc5524e21a3, 0x88974631f1a1eed0c9d1fa6cc3c622, 0xadacc23ed4a6e2c0e968ad1da6e5b5, 0x480a5bbcc4e18d45937957d44adff2, 0x4d54fd4d3ab7ac249866b6aeaaf37f, 0x7eb6e94460e5dab5f15c55faf1bf5b, 0xc0bca2fb49828eb02a02cb3d95f48a, 0xeeb45b7149ee2bffe342120c8ef177, 0x9108e90248dfab616da128279b0391, 0xd446716c4e0be2123afd277a2cf8a7, 0xe5 + ], [ - 0x19772b9af8a031170a7844ce4f3d7c, 0x4808e817258f57805a7326f70bcd74, 0xca8f3f98e374d52100115bfa645a7d, 0x49547189edff3b683fee267e717b7f, 0x96f263b47e96925f3b5898a7389ceb, 0x4cc50a893da91d0e085fc6656b30bc, 0x67e84ff92d88c0ad2c17ad2701309e, 0x095326818578173289665fcd9ad788, 0x775c6e85b745065db9411b9d579763, 0xad0f20c8a5265dfca4080ca877a2b8, 0xbfd199372f1680b3bc583a08bd8ba9, 0x663476ca3e5ede3e5976887db2c4e5, 0x531192309d0d49fed47c0216c27f9e, 0x37d26d31c86b951ca1c17b517063b7, 0x3cdb362ed5dfd06568eb9a9bbb6a91, 0x14520b9c23f583314729a9d858bca9, 0x5e0505067ada1026721d45997bf2c4, 0x3e + 0x8653d918663eb92721c6efedf149e4, 0x3dbb26bf3a033499240fd8ef578107, 0x69a15f7a032e80ef1496b60b3b95ae, 0xc9aff3026bae96644fc904d80d3c0a, 0x4cb0ae9774e8045235dd864f81314f, 0x65c558cd398b18126e7f3788d196c6, 0x5d7cdb26a9343a94726693b0b5a6c6, 0x4b3cd2b0ef752aa26ba6a7fba6f795, 0x6632fa88182883e987e0db1bcaaaea, 0x38098156f929b4fda6d3026667b3a0, 0x5d5bee367212e64a7d1bd3307082a4, 0xf2622828a7f6e5d906388ec2aa850c, 0xacfdba93e953a71ce0a75f3f88c96f, 0xf8a2b79dfe7264e30b058d44747277, 0x8cf6a50c2e0723546a03d684e3fda, 0xc95e8eb25fe50e2ad34e494492abf, 0x6a078f758586eb4b1e60059a1826b1, 0x11d2 ] ); diff --git a/signature_gen/Cargo.lock b/signature_gen/Cargo.lock index c777b52..68e85e5 100644 --- a/signature_gen/Cargo.lock +++ b/signature_gen/Cargo.lock @@ -365,9 +365,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "noir-bignum-paramgen" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a43fd3a1f0f710170fff345afe74d77dd9a58c944ef79d9ad94360b18b7e07a" +checksum = "6058cb4c50e0df6fb01d014f71bf63bcd50fa63c1ce827329dc34d74c6b7807f" dependencies = [ "hex", "itoa", diff --git a/signature_gen/Cargo.toml b/signature_gen/Cargo.toml index a87bf32..3b2e49f 100644 --- a/signature_gen/Cargo.toml +++ b/signature_gen/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] clap = "2.33" toml = "0.5" -noir-bignum-paramgen = { version = "0.1.2" } +noir-bignum-paramgen = { version = "0.1.3" } hex = { version = "0.4" } rsa = { git = "https://github.com/RustCrypto/RSA" } # from online repo rand = { version = "0.8.5" } diff --git a/signature_gen/src/main.rs b/signature_gen/src/main.rs index 5f8419c..a7967c2 100644 --- a/signature_gen/src/main.rs +++ b/signature_gen/src/main.rs @@ -88,6 +88,67 @@ fn generate_2048_bit_signature_parameters(msg: &str, as_toml: bool, exponent: u3 } } + +fn generate_1024_bit_signature_parameters(msg: &str, as_toml: bool, exponent: u32) { + let mut hasher = Sha256::new(); + hasher.update(msg.as_bytes()); + let hashed_message = hasher.finalize(); + + let hashed_as_bytes = hashed_message + .iter() + .map(|&b| b.to_string()) + .collect::>() + .join(", "); + + let mut rng: rand::prelude::ThreadRng = rand::thread_rng(); + let bits: usize = 1024; + let priv_key: RsaPrivateKey = + RsaPrivateKey::new_with_exp(&mut rng, bits, &BigUint::from(exponent)) + .expect("failed to generate a key"); + let pub_key: RsaPublicKey = priv_key.clone().into(); + + let signing_key = rsa::pkcs1v15::SigningKey::::new(priv_key); + let sig: Vec = signing_key.sign(msg.as_bytes()).to_vec(); + + let sig_bytes = &Signature::try_from(sig.as_slice()).unwrap().to_bytes(); + + let sig_uint: BigUint = BigUint::from_bytes_be(sig_bytes); + + let sig_str = bn_limbs(sig_uint.clone(), 1024); + + let modulus_limbs: Vec = split_into_120_bit_limbs(&pub_key.n().clone(), 1024); + let redc_param = split_into_120_bit_limbs( + &compute_barrett_reduction_parameter(&pub_key.n().clone()), + 1024, + ); + + if as_toml { + let sig_limbs = split_into_120_bit_limbs(&sig_uint.clone(), 1024); + let signature_toml = Value::Array(format_limbs_as_toml_value(&sig_limbs)); + + let bn = Value::Array(vec![ + Value::Array(format_limbs_as_toml_value(&modulus_limbs)), + Value::Array(format_limbs_as_toml_value(&redc_param)), + ]); + let bn_toml = toml::to_string_pretty(&bn).unwrap(); + println!("bn = {}", bn_toml); + println!("hash = [{}]", hashed_as_bytes); + println!("[signature]"); + println!("limbs = {}", signature_toml); + } else { + println!("let hash: [u8; 32] = [{}];", hashed_as_bytes); + println!( + "let signature: BN1024 = BigNum::from_array({});", + sig_str.as_str() + ); + println!( + "let bn = [\n [{}],\n [{}]\n];", + format_limbs_as_hex(&modulus_limbs), + format_limbs_as_hex(&redc_param) + ); + } +} + fn main() { let matches = App::new("RSA Signature Generator") .arg( @@ -112,13 +173,29 @@ fn main() { .help("Exponent to use for the key") .default_value("65537"), ) + .arg( + Arg::with_name("bits") + .short("b") + .long("bits") + .takes_value(true) + .help("Number of bits of RSA signature (1024 or 2048") + .default_value("2048") + ) .get_matches(); let msg = matches.value_of("msg").unwrap(); let as_toml = matches.is_present("toml"); let e: u32 = matches.value_of("exponent").unwrap().parse().unwrap(); - - generate_2048_bit_signature_parameters(msg, as_toml, e); + let b: u32 = matches.value_of("bits").unwrap().parse().unwrap(); + assert!(b == 1024 || b == 2048, "Number of bits of RSA signature can only be 1024 or 2048"); + if b == 1024 + { + generate_1024_bit_signature_parameters(msg, as_toml, e); + } + else + { + generate_2048_bit_signature_parameters(msg, as_toml, e); + } } #[cfg(test)] From 8d538b734bb2acb1222ef3748f7c23ce05fe4cf0 Mon Sep 17 00:00:00 2001 From: zac-williamson Date: Thu, 10 Oct 2024 19:25:10 +0100 Subject: [PATCH 2/8] cargo fmt --- signature_gen/src/main.rs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/signature_gen/src/main.rs b/signature_gen/src/main.rs index a7967c2..45b9df9 100644 --- a/signature_gen/src/main.rs +++ b/signature_gen/src/main.rs @@ -88,7 +88,6 @@ fn generate_2048_bit_signature_parameters(msg: &str, as_toml: bool, exponent: u3 } } - fn generate_1024_bit_signature_parameters(msg: &str, as_toml: bool, exponent: u32) { let mut hasher = Sha256::new(); hasher.update(msg.as_bytes()); @@ -175,11 +174,11 @@ fn main() { ) .arg( Arg::with_name("bits") - .short("b") - .long("bits") - .takes_value(true) - .help("Number of bits of RSA signature (1024 or 2048") - .default_value("2048") + .short("b") + .long("bits") + .takes_value(true) + .help("Number of bits of RSA signature (1024 or 2048") + .default_value("2048"), ) .get_matches(); @@ -187,13 +186,13 @@ fn main() { let as_toml = matches.is_present("toml"); let e: u32 = matches.value_of("exponent").unwrap().parse().unwrap(); let b: u32 = matches.value_of("bits").unwrap().parse().unwrap(); - assert!(b == 1024 || b == 2048, "Number of bits of RSA signature can only be 1024 or 2048"); - if b == 1024 - { + assert!( + b == 1024 || b == 2048, + "Number of bits of RSA signature can only be 1024 or 2048" + ); + if b == 1024 { generate_1024_bit_signature_parameters(msg, as_toml, e); - } - else - { + } else { generate_2048_bit_signature_parameters(msg, as_toml, e); } } From b8077e1203886e1d21485ce8c6c447f70a77e106 Mon Sep 17 00:00:00 2001 From: zac-williamson Date: Thu, 10 Oct 2024 19:31:20 +0100 Subject: [PATCH 3/8] update workflow --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 94ba9b6..db1ac05 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: false matrix: - toolchain: [nightly, 0.34.0] + toolchain: [nightly, 0.35.0] steps: - name: Checkout sources uses: actions/checkout@v4 @@ -39,7 +39,7 @@ jobs: - name: Install Nargo uses: noir-lang/noirup@v0.1.3 with: - toolchain: 0.34.0 + toolchain: 0.35.0 - name: Run formatter working-directory: ./lib From 4ff8006247b299e04031ff11c6172d088809673b Mon Sep 17 00:00:00 2001 From: zac-williamson Date: Thu, 10 Oct 2024 19:48:29 +0100 Subject: [PATCH 4/8] updated manifest and readme --- .release-please-manifest.json | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index bd427b6..ccdabf8 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{".":"0.3.1"} +{ ".": "0.3.2" } diff --git a/README.md b/README.md index 2a2da33..b4b7708 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ The benchmarks were executed using a laptop with Intel(R) Core(TM) i7-13700H CPU ## Dependencies -`noir_rsa` requires Noir ≥v0.34.0. Refer to [Noir's docs](https://noir-lang.org/docs/getting_started/installation/) for installation steps. +`noir_rsa` requires Noir ≥v0.35.0. Refer to [Noir's docs](https://noir-lang.org/docs/getting_started/installation/) for installation steps. ## Installation From ede68ac316b36c82857300c957f0d39071929f13 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Thu, 10 Oct 2024 18:26:09 -0400 Subject: [PATCH 5/8] Update .release-please-manifest.json --- .release-please-manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ccdabf8..701da6d 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{ ".": "0.3.2" } +{".": "0.3.1"} From 70080514570a4921da85ecf9d98825bfeb885dcd Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Thu, 10 Oct 2024 18:27:23 -0400 Subject: [PATCH 6/8] Update .release-please-manifest.json --- .release-please-manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 701da6d..bd427b6 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{".": "0.3.1"} +{".":"0.3.1"} From 58472b8b1df7889e6cbc8b0bda7b39e2ba701710 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Thu, 10 Oct 2024 18:33:53 -0400 Subject: [PATCH 7/8] Update .github/workflows/test.yml --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db1ac05..bb39827 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: false matrix: - toolchain: [nightly, 0.35.0] + toolchain: [nightly, 0.34.0, 0.35.0] steps: - name: Checkout sources uses: actions/checkout@v4 From f1b93bcc3e426be712e9e9df4f19537f8216d751 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Thu, 10 Oct 2024 18:35:03 -0400 Subject: [PATCH 8/8] Update .github/workflows/test.yml --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bb39827..db1ac05 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: false matrix: - toolchain: [nightly, 0.34.0, 0.35.0] + toolchain: [nightly, 0.35.0] steps: - name: Checkout sources uses: actions/checkout@v4