srp.cpp (Firebird-3.0.2.32703-0.tar.bz2) | : | srp.cpp (Firebird-3.0.4.33054-0.tar.bz2) | ||
---|---|---|---|---|
skipping to change at line 32 | skipping to change at line 32 | |||
namespace Auth { | namespace Auth { | |||
class RemoteGroup | class RemoteGroup | |||
{ | { | |||
public: | public: | |||
BigInteger prime, generator, k; | BigInteger prime, generator, k; | |||
explicit RemoteGroup(Firebird::MemoryPool&) | explicit RemoteGroup(Firebird::MemoryPool&) | |||
: prime(primeStr), generator(genStr), k() | : prime(primeStr), generator(genStr), k() | |||
{ | { | |||
Auth::Sha1 hash; | Auth::SecureHash<Firebird::Sha1> hash; | |||
hash.processInt(prime); | hash.processInt(prime); | |||
if (prime.length() > generator.length()) | if (prime.length() > generator.length()) | |||
{ | { | |||
unsigned int pad = prime.length() - generator.length(); | unsigned int pad = prime.length() - generator.length(); | |||
char pb[1024]; | char pb[1024]; | |||
memset(pb, 0, pad); | memset(pb, 0, pad); | |||
hash.process(pad, pb); | hash.process(pad, pb); | |||
} | } | |||
skipping to change at line 62 | skipping to change at line 62 | |||
static RemoteGroup* getGroup() | static RemoteGroup* getGroup() | |||
{ | { | |||
return &group(); | return &group(); | |||
} | } | |||
}; | }; | |||
InitInstance<RemoteGroup> RemoteGroup::group; | InitInstance<RemoteGroup> RemoteGroup::group; | |||
const char* RemotePassword::plugName = "Srp"; | const char* RemotePassword::plugName = "Srp"; | |||
string RemotePassword::pluginName(unsigned bits) | ||||
{ | ||||
string plg; | ||||
plg.printf("%s%u", plugName, bits); | ||||
return plg; | ||||
} | ||||
RemotePassword::RemotePassword() | RemotePassword::RemotePassword() | |||
: group(RemoteGroup::getGroup()) | : group(RemoteGroup::getGroup()) | |||
{ | { | |||
#if SRP_DEBUG > 1 | #if SRP_DEBUG > 1 | |||
privateKey = BigInteger("60975527035CF2AD1989806F0407210BC81EDC04E2762A56 AFD529DDDA2D4393"); | privateKey = BigInteger("60975527035CF2AD1989806F0407210BC81EDC04E2762A56 AFD529DDDA2D4393"); | |||
#else | #else | |||
privateKey.random(RemotePassword::SRP_KEY_SIZE); | privateKey.random(RemotePassword::SRP_KEY_SIZE); | |||
#endif | #endif | |||
privateKey %= group->prime; | privateKey %= group->prime; | |||
} | } | |||
skipping to change at line 190 | skipping to change at line 197 | |||
hash.reset(); | hash.reset(); | |||
hash.processInt(group->generator); | hash.processInt(group->generator); | |||
BigInteger n2; | BigInteger n2; | |||
hash.getInt(n2); | hash.getInt(n2); | |||
n1 = n1.modPow(n2, group->prime); | n1 = n1.modPow(n2, group->prime); | |||
hash.reset(); | hash.reset(); | |||
hash.process(account); | hash.process(account); | |||
hash.getInt(n2); | hash.getInt(n2); | |||
return MakeProof(n1,n2,salt,sessionKey); | ||||
hash.reset(); | ||||
hash.processInt(n1); // H(prime) ^ H(g) | ||||
hash.processInt(n2); // H(I) | ||||
hash.process(salt); // s | ||||
hash.processInt(clientPublicKey); // A | ||||
hash.processInt(serverPublicKey); // B | ||||
hash.process(sessionKey); // K | ||||
BigInteger rc; | ||||
hash.getInt(rc); | ||||
return rc; | ||||
} | } | |||
#if SRP_DEBUG > 0 | #if SRP_DEBUG > 0 | |||
void dumpIt(const char* name, const Firebird::UCharBuffer& data) | void dumpIt(const char* name, const Firebird::UCharBuffer& data) | |||
{ | { | |||
fprintf(stderr, "%s\n", name); | fprintf(stderr, "%s\n", name); | |||
for (size_t x=0; x<data.getCount(); ++x) | for (size_t x=0; x<data.getCount(); ++x) | |||
fprintf(stderr, "%02x ", data[x]); | fprintf(stderr, "%02x ", data[x]); | |||
fprintf(stderr, "\n"); | fprintf(stderr, "\n"); | |||
} | } | |||
End of changes. 3 change blocks. | ||||
13 lines changed or deleted | 9 lines changed or added |