Exemplo n.º 1
0
def new_masterkey(passphrase,
                  rand=Random(),
                  get_time=time.time,
                  nb_iterations_test=25000):
    """Create a new masterkey"""
    crypter = Crypter()
    plain_master_key = rand.get_random_bytes(WALLET_CRYPTO_KEY_SIZE)
    rand.add_system_seeds()
    salt = rand.get_random_bytes(WALLET_CRYPTO_SALT_SIZE)
    deriv_method = MasterKey.DERIVMETHOD_EVP_SHA512

    target_seconds = 0.1  #100ms
    # estimate number of derivations for 100ms per decrypt using 25000 iterations.
    start_time = get_time()
    derive_key_from_passphrase(passphrase, salt, nb_iterations_test,
                               deriv_method)
    estimate1 = int((nb_iterations_test * 1.0 * target_seconds) /
                    (get_time() - start_time))
    # try it and take the mean of the estimate1 and estimate2
    start_time = get_time()
    derive_key_from_passphrase(passphrase, salt, estimate1, deriv_method)
    estimate2 = int(estimate1 * target_seconds / (get_time() - start_time))
    deriv_iterations = (estimate1 + estimate2) / 2
    # use it
    key, init_vect = derive_key_from_passphrase(passphrase, salt,
                                                deriv_iterations, deriv_method)
    crypter.set_key(key, init_vect)
    crypted_key = crypter.encrypt(plain_master_key)
    return MasterKey(crypted_key, salt, deriv_method, deriv_iterations)
Exemplo n.º 2
0
    def create(self, passphrase):
        self.wallet_database.begin_updates()
        crypter = Crypter()
        #first create masterkey
        master_key = new_masterkey(passphrase)
        plain_masterkey = decrypt_masterkey(master_key, passphrase)
        self.wallet_database.add_master_key(master_key)
        #create transaction pool
        for i in range(100):
            k = KEY()
            k.generate(True)
            public_key = k.get_pubkey()
            crypter.set_key(plain_masterkey, doublesha256(public_key))
            crypted_secret = crypter.encrypt(k.get_secret())
            self.wallet_database.add_crypted_key(public_key, crypted_secret)
            pool_key = WalletPoolKey(i, 60000, time.time(), public_key)
            self.wallet_database.add_poolkey(pool_key)

        self.wallet_database.commit_updates()
        self.load()
Exemplo n.º 3
0
 def create(self, passphrase):
     self.wallet_database.begin_updates()
     crypter = Crypter()
     #first create masterkey
     master_key =  new_masterkey(passphrase)
     plain_masterkey = decrypt_masterkey(master_key, passphrase)
     self.wallet_database.add_master_key(master_key)
     #create transaction pool
     for i in range(100):
         k = KEY()
         k.generate(True)
         public_key = k.get_pubkey()
         crypter.set_key(plain_masterkey, doublesha256(public_key))
         crypted_secret = crypter.encrypt(k.get_secret())
         self.wallet_database.add_crypted_key(public_key, crypted_secret)
         pool_key = WalletPoolKey(i, 60000, time.time(), public_key)
         self.wallet_database.add_poolkey(pool_key)
         
         
     self.wallet_database.commit_updates()
     self.load()
Exemplo n.º 4
0
def new_masterkey(passphrase, rand=Random(), get_time=time.time, nb_iterations_test=25000):
    """Create a new masterkey"""
    crypter = Crypter()
    plain_master_key = rand.get_random_bytes(WALLET_CRYPTO_KEY_SIZE)
    rand.add_system_seeds()
    salt = rand.get_random_bytes(WALLET_CRYPTO_SALT_SIZE)
    deriv_method = MasterKey.DERIVMETHOD_EVP_SHA512
    
    target_seconds = 0.1 #100ms
    # estimate number of derivations for 100ms per decrypt using 25000 iterations.
    start_time = get_time()
    derive_key_from_passphrase(passphrase, salt, nb_iterations_test, deriv_method)
    estimate1 = int((nb_iterations_test * 1.0 * target_seconds) / (get_time() - start_time))
    # try it and take the mean of the estimate1 and estimate2
    start_time = get_time()
    derive_key_from_passphrase(passphrase, salt, estimate1, deriv_method)
    estimate2 = int(estimate1 * target_seconds / (get_time() - start_time))
    deriv_iterations = (estimate1 + estimate2) / 2
    # use it
    key, init_vect = derive_key_from_passphrase(passphrase, salt, deriv_iterations, deriv_method)
    crypter.set_key(key, init_vect)
    crypted_key = crypter.encrypt(plain_master_key)
    return MasterKey(crypted_key, salt, deriv_method, deriv_iterations)