/** * Encryption/ Decryption using default parameters and a random salt */ public KeyCrypterScrypt() { byte[] salt = new byte[SALT_LENGTH]; secureRandom.nextBytes(salt); Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt(ByteString.copyFrom(salt)); this.scryptParameters = scryptParametersBuilder.build(); }
public static Protos.ScryptParameters makeScryptParameters(byte[] salt) { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt(ByteString.copyFrom(salt)); return scryptParametersBuilder.build(); }
/** * <code>optional .wallet.ScryptParameters encryption_parameters = 6;</code> */ public Builder setEncryptionParameters( org.bitcoinj.wallet.Protos.ScryptParameters.Builder builderForValue) { if (encryptionParametersBuilder_ == null) { encryptionParameters_ = builderForValue.build(); onChanged(); } else { encryptionParametersBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000100; return this; } /**
private static KeyCrypter getKeyCrypter(Protos.Wallet walletProto) { KeyCrypter crypter; if (walletProto.hasEncryptionType()) { if (walletProto.getEncryptionType() == Protos.Wallet.EncryptionType.ENCRYPTED_SCRYPT_AES) { checkState(walletProto.hasEncryptionParameters(), "Encryption parameters are missing"); Protos.ScryptParameters encryptionParameters = walletProto.getEncryptionParameters(); org.bitcoinj.wallet.Protos.ScryptParameters.Builder bitcoinjCrypter = org.bitcoinj.wallet.Protos.ScryptParameters.newBuilder(); bitcoinjCrypter.setSalt(encryptionParameters.getSalt()); bitcoinjCrypter.setN(encryptionParameters.getN()); bitcoinjCrypter.setP(encryptionParameters.getP()); bitcoinjCrypter.setR(encryptionParameters.getR()); crypter = new KeyCrypterScrypt(bitcoinjCrypter.build()); } else if (walletProto.getEncryptionType() == Protos.Wallet.EncryptionType.UNENCRYPTED) { crypter = null; } else { throw new KeyCrypterException("Unsupported encryption: " + walletProto.getEncryptionType().toString()); } } else { crypter = null; } return crypter; }
private static KeyCrypter getKeyCrypter(Protos.Wallet walletProto) { KeyCrypter crypter; if (walletProto.hasEncryptionType()) { if (walletProto.getEncryptionType() == Protos.Wallet.EncryptionType.ENCRYPTED_SCRYPT_AES) { checkState(walletProto.hasEncryptionParameters(), "Encryption parameters are missing"); Protos.ScryptParameters encryptionParameters = walletProto.getEncryptionParameters(); org.bitcoinj.wallet.Protos.ScryptParameters.Builder bitcoinjCrypter = org.bitcoinj.wallet.Protos.ScryptParameters.newBuilder(); bitcoinjCrypter.setSalt(encryptionParameters.getSalt()); bitcoinjCrypter.setN(encryptionParameters.getN()); bitcoinjCrypter.setP(encryptionParameters.getP()); bitcoinjCrypter.setR(encryptionParameters.getR()); crypter = new KeyCrypterScrypt(bitcoinjCrypter.build()); } else if (walletProto.getEncryptionType() == Protos.Wallet.EncryptionType.UNENCRYPTED) { crypter = null; } else { throw new KeyCrypterException("Unsupported encryption: " + walletProto.getEncryptionType().toString()); } } else { crypter = null; } return crypter; }
/** * <code>optional .wallet.ScryptParameters encryption_parameters = 6;</code> */ public Builder setEncryptionParameters( org.bitcoinj.wallet.Protos.ScryptParameters.Builder builderForValue) { if (encryptionParametersBuilder_ == null) { encryptionParameters_ = builderForValue.build(); onChanged(); } else { encryptionParametersBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000100; return this; } /**
/** * <code>optional .wallet.ScryptParameters encryption_parameters = 6;</code> */ public Builder setEncryptionParameters( org.bitcoinj.wallet.Protos.ScryptParameters.Builder builderForValue) { if (encryptionParametersBuilder_ == null) { encryptionParameters_ = builderForValue.build(); onChanged(); } else { encryptionParametersBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000100; return this; } /**
/** * <code>optional .wallet.ScryptParameters encryption_parameters = 6;</code> */ public Builder setEncryptionParameters( org.bitcoinj.wallet.Protos.ScryptParameters.Builder builderForValue) { if (encryptionParametersBuilder_ == null) { encryptionParameters_ = builderForValue.build(); onChanged(); } else { encryptionParametersBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000100; return this; } /**
@Test(expected = KeyCrypterException.class) public void mismatchedCrypter() throws Exception { Wallet encryptedWallet = new Wallet(PARAMS); encryptedWallet.encrypt(PASSWORD1); KeyCrypter keyCrypter = encryptedWallet.getKeyCrypter(); KeyParameter aesKey = keyCrypter.deriveKey(PASSWORD1); // Try added an ECKey that was encrypted with a differenct ScryptParameters (i.e. a non-homogenous key). // This is not allowed as the ScryptParameters is stored at the Wallet level. Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder() .setSalt(ByteString.copyFrom(KeyCrypterScrypt.randomSalt())); Protos.ScryptParameters scryptParameters = scryptParametersBuilder.build(); KeyCrypter keyCrypterDifferent = new KeyCrypterScrypt(scryptParameters); ECKey ecKeyDifferent = new ECKey(); ecKeyDifferent = ecKeyDifferent.encrypt(keyCrypterDifferent, aesKey); encryptedWallet.importKey(ecKeyDifferent); }
/** * <code>optional .wallet.ScryptParameters encryption_parameters = 6;</code> */ public Builder setEncryptionParameters( org.bitcoinj.wallet.Protos.ScryptParameters.Builder builderForValue) { if (encryptionParametersBuilder_ == null) { encryptionParameters_ = builderForValue.build(); onChanged(); } else { encryptionParametersBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000100; return this; } /**
/** * Encryption/Decryption using custom number of iterations parameters and a random salt. * As of August 2016, a useful value for mobile devices is 4096 (derivation takes about 1 second). * * @param iterations * number of scrypt iterations */ public KeyCrypterScrypt(int iterations) { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder() .setSalt(ByteString.copyFrom(randomSalt())).setN(iterations); this.scryptParameters = scryptParametersBuilder.build(); }
/** * Encryption/Decryption using custom number of iterations parameters and a random salt. * As of August 2016, a useful value for mobile devices is 4096 (derivation takes about 1 second). * * @param iterations * number of scrypt iterations */ public KeyCrypterScrypt(int iterations) { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder() .setSalt(ByteString.copyFrom(randomSalt())).setN(iterations); this.scryptParameters = scryptParametersBuilder.build(); }
/** * Encryption/Decryption using custom number of iterations parameters and a random salt. * As of August 2016, a useful value for mobile devices is 4096 (derivation takes about 1 second). * * @param iterations * number of scrypt iterations */ public KeyCrypterScrypt(int iterations) { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder() .setSalt(ByteString.copyFrom(randomSalt())).setN(iterations); this.scryptParameters = scryptParametersBuilder.build(); }
/** * Encryption/Decryption using default parameters and a random salt. */ public KeyCrypterScrypt() { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt( ByteString.copyFrom(randomSalt())); this.scryptParameters = scryptParametersBuilder.build(); }
@Before public void setUp() throws Exception { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt(ByteString.copyFrom(KeyCrypterScrypt.randomSalt())); ScryptParameters scryptParameters = scryptParametersBuilder.build(); keyCrypter = new KeyCrypterScrypt(scryptParameters); BriefLogFormatter.init(); }
/** * Encryption/Decryption using default parameters and a random salt. */ public KeyCrypterScrypt() { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt( ByteString.copyFrom(randomSalt())); this.scryptParameters = scryptParametersBuilder.build(); }
/** * Encryption/Decryption using default parameters and a random salt. */ public KeyCrypterScrypt() { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt( ByteString.copyFrom(randomSalt())); this.scryptParameters = scryptParametersBuilder.build(); }
/** * Encryption/Decryption using custom number of iterations parameters and a random salt. * As of August 2016, a useful value for mobile devices is 4096 (derivation takes about 1 second). * * @param iterations * number of scrypt iterations */ public KeyCrypterScrypt(int iterations) { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder() .setSalt(ByteString.copyFrom(randomSalt())).setN(iterations); this.scryptParameters = scryptParametersBuilder.build(); }
@Before public void setUp() throws Exception { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder() .setSalt(ByteString.copyFrom(KeyCrypterScrypt.randomSalt())); scryptParameters = scryptParametersBuilder.build(); BriefLogFormatter.init(); }
/** * Encryption/Decryption using default parameters and a random salt. */ public KeyCrypterScrypt() { Protos.ScryptParameters.Builder scryptParametersBuilder = Protos.ScryptParameters.newBuilder().setSalt( ByteString.copyFrom(randomSalt())); this.scryptParameters = scryptParametersBuilder.build(); }