| ... | ... | @@ -1029,7 +1029,7 @@ pub const rsa = struct { |
| 1029 | 1029 | |
| 1030 | 1030 | pub fn verify( |
| 1031 | 1031 | comptime modulus_len: usize, |
| 1032 | | sig: [modulus_len]u8, |
| 1032 | sig: *const [modulus_len]u8, |
| 1033 | 1033 | msg: []const u8, |
| 1034 | 1034 | public_key: PublicKey, |
| 1035 | 1035 | comptime Hash: type, |
| ... | ... | @@ -1371,3 +1371,19 @@ pub const rsa = struct { |
| 1371 | 1371 | return res; |
| 1372 | 1372 | } |
| 1373 | 1373 | }; |
| 1374 | |
| 1375 | test "RSA-PSS verify wrapper" { |
| 1376 | const modulus_hex = "a1757161bd6ddb93e4a96329dfed3cf5bd729156686893b74e36cabfc929781316ab7a2ecab1d5a0e3fe1d2ab4b14f34dbb02d3a7c879fded3b2ba26d41f554a183f906b3b32a7c11be8194d25f7a26fef17020373fea72906ba2db5259a4ab4ba91937f078bcb57f9f82b06ca6dac17a2e0b673c721b1f7d0600b208fef0d43"; |
| 1377 | const signature_hex = "32079b2b70f8828e4c70331abc9f08d2ccb805b29b7330c80f4ed17ddaa8c72b544faed138e9e7d41ca55e5770f408cb13d1149da7f1c13034dc5ce0da35dfc8417a2a8bfee1056b81e73954aae23acf6113c8db5b57b4a9242fd943c59c6b693d3d5d2dc40146dd75fc631507d1e43c6ce4f5a44b243804018107ae8bcacc86"; |
| 1378 | var modulus: [modulus_hex.len / 2]u8 = undefined; |
| 1379 | _ = try std.fmt.hexToBytes(&modulus, modulus_hex); |
| 1380 | var signature: [signature_hex.len / 2]u8 = undefined; |
| 1381 | _ = try std.fmt.hexToBytes(&signature, signature_hex); |
| 1382 | const key = try rsa.PublicKey.fromBytes(&.{ 1, 0, 1 }, &modulus); |
| 1383 | const message = "Zig RSA-PSS wrapper regression"; |
| 1384 | |
| 1385 | try rsa.PSSSignature.verify(signature.len, &signature, message, key, std.crypto.hash.sha2.Sha256); |
| 1386 | try std.testing.expectError(error.InvalidSignature, rsa.PSSSignature.verify(signature.len, &signature, "wrong message", key, std.crypto.hash.sha2.Sha256)); |
| 1387 | signature[signature.len - 1] ^= 1; |
| 1388 | try std.testing.expectError(error.InvalidSignature, rsa.PSSSignature.verify(signature.len, &signature, message, key, std.crypto.hash.sha2.Sha256)); |
| 1389 | } |