Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. <?php
  2.  
  3. use App\User;
  4. use Defuse\Crypto\Crypto;
  5. use Defuse\Crypto\Key;
  6. use Defuse\Crypto\KeyProtectedByPassword;
  7. use ParagonIE\EasyRSA\EasyRSA;
  8. use ParagonIE\EasyRSA\KeyPair;
  9.  
  10. class SomeClass
  11. {
  12. public function register($username, $email, $password)
  13. {
  14. $password_hash = password_hash($password, PASSWORD_DEFAULT);
  15.  
  16. $user = User::create(['username' => $username, 'password' => $password_hash, 'email' => $email]);
  17.  
  18. //Random and secure master key used for encryption / decryption of data.
  19. $master_key = Key::createNewRandomKey();
  20. $master_key_ascii = $master_key->saveToAsciiSafeString(); //Save to encrypt.
  21.  
  22. //Password protected key.
  23. $keyProtectedbyPassword = KeyProtectedByPassword::createRandomPasswordProtectedKey($password);
  24. $user->locked_key = $keyProtectedbyPassword->saveToAsciiSafeString();
  25.  
  26. //Unlock to use for encryption.
  27. $unlocked_key = $keyProtectedbyPassword->unlockKey($password);
  28. $user->encrypted_master_key = Crypto::encrypt($master_key_ascii, $unlocked_key);
  29.  
  30. //keypair
  31. $keyPair = KeyPair::generateKeyPair(2048);
  32. $privateKey = $keyPair->getPrivateKey();
  33. $publicKey = $keyPair->getPublicKey();
  34.  
  35. $user->public_key = $publicKey;
  36. $user->encrypted_private_key = Crypto::encrypt($privateKey, $master_key);
  37. }
  38.  
  39. public function addPassword($password)
  40. {
  41. //get the current logged in user object/model
  42. $user = $this->getCurrentUser();
  43.  
  44. $locked_key = KeyProtectedByPassword::loadFromAsciiSafeString($user->locked_key);
  45. $unlocked_key = $locked_key->unlockKey($user->plaintextPassword); //Important! Don't use the hashed password. Use the Password Input (Maybe from login?)
  46.  
  47. $decrypted_master_key = Crypto::decrypt($user->encrypted_master_key, $unlocked_key);
  48. $master_key = Key::loadFromAsciiSafeString($decrypted_master_key);
  49.  
  50. $user_private_key = Crypto::decrypt($user->encrypted_private_key, $master_key);
  51.  
  52. $encrypted_password_to_add = Crypto::encrypt($password, $master_key);
  53. }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement