@ Override public KeyParameter deriveKey ( CharSequence password ) throws KeyCrypterException { byte [ ] passwordBytes = null ; try { passwordBytes = convertToByteArray ( password ) ; byte [ ] salt = new byte [ 0 ] ; if ( scryptParameters . getSalt ( ) != null ) { salt = scryptParameters . getSalt ( ) . toByteArray ( ) ; } else { // Warn the user that they are not using a salt. // (Some early MultiBit wallets had a blank salt). log . warn ( "You are using a ScryptParameters with no salt. Your encryption may be vulnerable to a dictionary attack." ) ; } final Stopwatch watch = Stopwatch . createStarted ( ) ; byte [ ] keyBytes = SCrypt . scrypt ( passwordBytes , salt , ( int ) scryptParameters . getN ( ) , scryptParameters . getR ( ) , scryptParameters . getP ( ) , KEY_LENGTH ) ; watch . stop ( ) ; log . info ( "Deriving key took {} for {} scrypt iterations." , watch , scryptParameters . getN ( ) ) ; return new KeyParameter ( keyBytes ) ; } catch ( Exception e ) { throw new KeyCrypterException ( "Could not generate key from password and salt." , e ) ; } finally { // Zero the password bytes. if ( passwordBytes != null ) { java . util . Arrays . fill ( passwordBytes , ( byte ) 0 ) ; } } }
Generate AES key .