-
Notifications
You must be signed in to change notification settings - Fork 10
Description
I'm trying to port an SRP implementation over to C# from python. The client is legacy and I cannot change it, so I'm just implementing a compatible server side of the protocol.
It was failing using this library until I noticed that the library doesn't Pad
the g
value here:
https://github.com/secure-remote-password/srp.net/blob/master/src/srp/SrpServer.cs#L130
(It doesn't pad in the SrcClient either. So it's consistent. But I'm wonder if we should update both?)
The python SRP library does pad this value when enabling support for rfc5054
:
https://github.com/cocagne/pysrp/blob/master/srp/_pysrp.py#L205-L208
I tried jumping through the rfc5054
docs, but it doesn't even mention the M
proof calculation so it's unclear if the padding should also apply there. It mentions padding k
and u
(which this library does) but doesn't claim one way or the other for M
:
https://datatracker.ietf.org/doc/html/rfc5054
I was able to workaround this issue by doing the following:
SrpParameters parameters = SrpParameters.Create<SHA256>(N, g);
parameters.Generator = parameters.Pad(parameters.Generator); // WORKAROUND
SrpServer srpServer = new SrpServer(parameters);
SrpSession serverSession = srpServer.DeriveSession((.........);
It works for my needs. But I guess the larger question for this issue is: Should this library actually be padding g
in the M
calculation? Or is the python srp implementation incorrect?