Botan
1.11.15
|
#include <srp6_files.h>
Classes | |
struct | SRP6_Data |
Public Member Functions | |
bool | lookup_user (const std::string &username, BigInt &v, std::vector< byte > &salt, std::string &group_id) const |
SRP6_Authenticator_File (const std::string &filename) |
A GnuTLS compatible SRP6 authenticator file
Definition at line 20 of file srp6_files.h.
Botan::SRP6_Authenticator_File::SRP6_Authenticator_File | ( | const std::string & | filename | ) |
filename | will be opened and processed as a SRP authenticator file |
Definition at line 15 of file srp6_files.cpp.
References Botan::base64_decode(), Botan::BER::decode(), Botan::split_on(), and Botan::unlock().
{ std::ifstream in(filename.c_str()); if(!in) return; // no entries while(in.good()) { std::string line; std::getline(in, line); std::vector<std::string> parts = split_on(line, ':'); if(parts.size() != 4) throw Decoding_Error("Invalid line in SRP authenticator file"); std::string username = parts[0]; BigInt v = BigInt::decode(base64_decode(parts[1])); std::vector<byte> salt = unlock(base64_decode(parts[2])); BigInt group_id_idx = BigInt::decode(base64_decode(parts[3])); std::string group_id; if(group_id_idx == 1) group_id = "modp/srp/1024"; else if(group_id_idx == 2) group_id = "modp/srp/1536"; else if(group_id_idx == 3) group_id = "modp/srp/2048"; else continue; // unknown group, ignored entries[username] = SRP6_Data(v, salt, group_id); } }
bool Botan::SRP6_Authenticator_File::lookup_user | ( | const std::string & | username, |
BigInt & | v, | ||
std::vector< byte > & | salt, | ||
std::string & | group_id | ||
) | const |
Definition at line 52 of file srp6_files.cpp.
{ std::map<std::string, SRP6_Data>::const_iterator i = entries.find(username); if(i == entries.end()) return false; v = i->second.v; salt = i->second.salt; group_id = i->second.group_id; return true; }