diff options
author | Josh Brown <josh9051@gmail.com> | 2022-01-22 09:38:33 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-22 07:38:33 -0700 |
commit | 6d963225520f0d8e5948457b8ba25bd563382f5e (patch) | |
tree | 12c05900061a93c74242d37f5dc1935977c9bd8c /srp/tests/rfc5054.rs | |
parent | 689dc0ab6af950b027b4bab96f73c427d2c42d6e (diff) | |
download | PAKEs-6d963225520f0d8e5948457b8ba25bd563382f5e.tar.xz |
srp: rebuild library (#79)
Complete rewrite of the SRP library.
Includes many improvements over the old library:
- Improved file and code organization
- Access to individual SRP computations
- Consistent sever and client API
- Simpler API
- Improved documentation with tests in documentation
- New tests for compatibility with the RFC
- Bumps dependencies
- Timing safe verification comparisons
- Modernized error handling
Diffstat (limited to 'srp/tests/rfc5054.rs')
-rw-r--r-- | srp/tests/rfc5054.rs | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/srp/tests/rfc5054.rs b/srp/tests/rfc5054.rs new file mode 100644 index 0000000..e1aa711 --- /dev/null +++ b/srp/tests/rfc5054.rs @@ -0,0 +1,135 @@ +use hex_literal::hex; +use num_bigint::BigUint; +use sha1::Sha1; +use srp::client::SrpClient; +use srp::groups::G_1024; +use srp::server::SrpServer; +use srp::utils::{compute_k, compute_u}; + +#[test] +#[allow(clippy::many_single_char_names)] +fn rfc5054() { + let i = b"alice"; + let p = b"password123"; + let s = hex!("BEB25379 D1A8581E B5A72767 3A2441EE"); + let group = &G_1024; + + let k = compute_k::<Sha1>(group); + + assert_eq!( + k.to_bytes_be(), + hex!("7556AA04 5AEF2CDD 07ABAF0F 665C3E81 8913186F"), + "bad k value" + ); + + let identity_hash = SrpClient::<Sha1>::compute_identity_hash(i, p); + let x = SrpClient::<Sha1>::compute_x(identity_hash.as_slice(), &s); + + assert_eq!( + x.to_bytes_be(), + hex!("94B7555A ABE9127C C58CCF49 93DB6CF8 4D16C124"), + "bad x value" + ); + + let client = SrpClient::<Sha1>::new(group); + let v = client.compute_v(&x); + + assert_eq!( + v.to_bytes_be(), + hex!( + " + 7E273DE8 696FFC4F 4E337D05 B4B375BE B0DDE156 9E8FA00A 9886D812 + 9BADA1F1 822223CA 1A605B53 0E379BA4 729FDC59 F105B478 7E5186F5 + C671085A 1447B52A 48CF1970 B4FB6F84 00BBF4CE BFBB1681 52E08AB5 + EA53D15C 1AFF87B2 B9DA6E04 E058AD51 CC72BFC9 033B564E 26480D78 + E955A5E2 9E7AB245 DB2BE315 E2099AFB + " + ), + "bad v value" + ); + + let a = BigUint::from_bytes_be(&hex!( + " + 60975527 035CF2AD 1989806F 0407210B C81EDC04 E2762A56 AFD529DD + DA2D4393" + )); + + let b = BigUint::from_bytes_be(&hex!( + " + E487CB59 D31AC550 471E81F0 0F6928E0 1DDA08E9 74A004F4 9E61F5D1 + 05284D20" + )); + + let a_pub = client.compute_a_pub(&a); + + assert_eq!( + a_pub.to_bytes_be(), + hex!( + " + 61D5E490 F6F1B795 47B0704C 436F523D D0E560F0 C64115BB 72557EC4 + 4352E890 3211C046 92272D8B 2D1A5358 A2CF1B6E 0BFCF99F 921530EC + 8E393561 79EAE45E 42BA92AE ACED8251 71E1E8B9 AF6D9C03 E1327F44 + BE087EF0 6530E69F 66615261 EEF54073 CA11CF58 58F0EDFD FE15EFEA + B349EF5D 76988A36 72FAC47B 0769447B + " + ), + "bad a_pub value" + ); + + let server = SrpServer::<Sha1>::new(group); + let b_pub = server.compute_b_pub(&b, &k, &v); + + assert_eq!( + b_pub.to_bytes_be(), + hex!( + " + BD0C6151 2C692C0C B6D041FA 01BB152D 4916A1E7 7AF46AE1 05393011 + BAF38964 DC46A067 0DD125B9 5A981652 236F99D9 B681CBF8 7837EC99 + 6C6DA044 53728610 D0C6DDB5 8B318885 D7D82C7F 8DEB75CE 7BD4FBAA + 37089E6F 9C6059F3 88838E7A 00030B33 1EB76840 910440B1 B27AAEAE + EB4012B7 D7665238 A8E3FB00 4B117B58 + " + ), + "bad b_pub value" + ); + + let u = compute_u::<Sha1>(&a_pub.to_bytes_be(), &b_pub.to_bytes_be()); + + assert_eq!( + u.to_bytes_be(), + hex!("CE38B959 3487DA98 554ED47D 70A7AE5F 462EF019"), + "bad u value" + ); + + assert_eq!( + client + .compute_premaster_secret(&b_pub, &k, &x, &a, &u) + .to_bytes_be(), + hex!( + " + B0DC82BA BCF30674 AE450C02 87745E79 90A3381F 63B387AA F271A10D + 233861E3 59B48220 F7C4693C 9AE12B0A 6F67809F 0876E2D0 13800D6C + 41BB59B6 D5979B5C 00A172B4 A2A5903A 0BDCAF8A 709585EB 2AFAFA8F + 3499B200 210DCC1F 10EB3394 3CD67FC8 8A2F39A4 BE5BEC4E C0A3212D + C346D7E4 74B29EDE 8A469FFE CA686E5A + " + ), + "bad client premaster" + ); + + assert_eq!( + server + .compute_premaster_secret(&a_pub, &v, &u, &b) + .to_bytes_be(), + hex!( + " + B0DC82BA BCF30674 AE450C02 87745E79 90A3381F 63B387AA F271A10D + 233861E3 59B48220 F7C4693C 9AE12B0A 6F67809F 0876E2D0 13800D6C + 41BB59B6 D5979B5C 00A172B4 A2A5903A 0BDCAF8A 709585EB 2AFAFA8F + 3499B200 210DCC1F 10EB3394 3CD67FC8 8A2F39A4 BE5BEC4E C0A3212D + C346D7E4 74B29EDE 8A469FFE CA686E5A + " + ), + "bad server premaster" + ); +} |