13 mnenc::mnenc() { //Constructor
15 get_imei(); //see get_imei below
16 imei += imei; //imei now have 30 digits
17 imei += imei; //imei now have 60 digits
18 imei += imei; //imei now have 120 digits
19 imei += imei; //imei now have 240 digits, should now be longer than any password
22 void mnenc::encrypt(string str) { //Run xor against imei
23 for(int i=0; i < (signed) str.size(); i++) {
24 str[i] = str[i] ^ imei[i];
29 void mnenc::decrypt(string str) { //Same as above only the other way around
30 for(int i = 0; i < (signed) enc.size(); i++) {
31 str[i] = imei[i] ^ str[i];
36 bool mnenc::to_file(string filename) { //Save to file
39 keyfile.open(filename.c_str());
40 if(keyfile.is_open()) {
48 bool mnenc::from_file(string filename) { //Read password file
50 ifstream keyfile(filename.c_str());
51 string encryptedpw = "";
53 if (keyfile.is_open()) {
54 while (! keyfile.eof() ) {
55 getline (keyfile,line);
62 decrypt(enc); // Automatically decrypt password on read
66 string mnenc::genkey() {
69 for(int i = 0; i < 15; i++) {
70 key += (rand() % 10); //generate a random number between 0 and 9
72 string username = getenv("USER"); //Get username
73 string filename = "/home/" + username + "/.mnenc/.keyfile"; //This is where the key goes
75 os.open(filename.c_str());
82 void mnenc::get_imei() {
84 * Implement this in c++ since it is realy realy ugly to shell out like this...
87 string username = getenv("USER"); //Get username
88 string filename = "/home/" + username + "/.mnenc/.keyfile"; //This is where the key goes if we generate it
89 string cmd = "dbus-send --system --print-reply --type=method_call --dest=com.nokia.phone.SIM /com/nokia/phone/SIM/security Phone.Sim.Security.get_imei | grep string | sed -e 's/^.*\\\"\\([0-9]\\)/\\1/' -e 's/\\\"//'"; //Command used when shelling out to get imei
90 if(system(cmd.c_str()) == 0) { //if we can get imei from dbus
91 FILE *fp; //a file pointer
92 char buffer[1024]; //Some tmp storage
93 fp = popen(cmd.c_str(), "r"); //Open a pipe whith the command
94 while ( fgets(buffer, 1024, fp) != NULL ) //Read the result
95 imei.append(buffer); //Add the result to our attribute
96 pclose(fp); //Close the pipe
97 } else { //If we could not get imei
98 ifstream keyfile(filename.c_str()); //open the keyfile
101 if (keyfile.is_open()) { //if it worked
102 while (! keyfile.eof() ) { //Get the key from there
103 getline (keyfile,line);
106 keyfile.close(); //Close the file
107 imei = k; //And save result
108 } else { //If that didnt work
109 imei = genkey(); //generate a new key and save that to teh keyfile
115 bool mnenc::user_from_file(string filename) { //Read userfile (Added by hexagon 2010-01-17)
117 ifstream userfile(filename.c_str());
120 if (userfile.is_open()) {
121 while (! userfile.eof() ) {
122 getline (userfile,line);
132 bool mnenc::user_to_file(string filename) { //Save username to file (Added by hexagon 2010-01-17)
135 userfile.open(filename.c_str());
136 if(userfile.is_open()) {
144 void mnenc::set_user(string usr) { // Sets username (Added by hexagon 2010-01-17)
148 string mnenc::get_user() { // Gets username (Added by hexagon 2010-01-17)
152 void mnenc::make_folder() {
153 string username = getenv("USER"); //Get username
154 string foldername = "/home/" + username + "/.mnenc"; //This is where the key goes
155 int ret = chdir(foldername.c_str());
157 mkdir(foldername.c_str(), 0755);