public KeyStore <T> EncryptAndGenerateKeyStore(string password, byte[] privateKey, string address, T kdfParams) { if (password == null) { throw new ArgumentNullException(nameof(password)); } if (privateKey == null) { throw new ArgumentNullException(nameof(privateKey)); } if (address == null) { throw new ArgumentNullException(nameof(address)); } if (kdfParams == null) { throw new ArgumentNullException(nameof(kdfParams)); } if (privateKey.Length != 32) { //Validate length unsigned but store the parameter //if is less than 32 already will fail var keyValidation = BigIntegers.AsUnsignedByteArray(new BigInteger(privateKey)); if (keyValidation.Length != 32) { throw new ArgumentException("Private key should be 32 bytes", nameof(privateKey)); } } var salt = RandomBytesGenerator.GenerateRandomSalt(); var derivedKey = GenerateDerivedKey(password, salt, kdfParams); var cipherKey = KeyStoreCrypto.GenerateCipherKey(derivedKey); var iv = RandomBytesGenerator.GenerateRandomInitialisationVector(); var cipherText = GenerateCipher(privateKey, iv, cipherKey); var mac = KeyStoreCrypto.GenerateMac(derivedKey, cipherText); var cryptoInfo = new CryptoInfo <T>(GetCipherType(), cipherText, iv, mac, salt, kdfParams, GetKdfType()); var keyStore = new KeyStore <T> { Version = CurrentVersion, Address = address, Id = Guid.NewGuid().ToString(), Crypto = cryptoInfo }; return(keyStore); }
public KeyStore <T> EncryptAndGenerateKeyStore(string password, byte[] privateKey, string address, T kdfParams) { if (password == null) { throw new ArgumentNullException(nameof(password)); } if (privateKey == null) { throw new ArgumentNullException(nameof(privateKey)); } if (address == null) { throw new ArgumentNullException(nameof(address)); } if (kdfParams == null) { throw new ArgumentNullException(nameof(kdfParams)); } if (privateKey.Length != 32) { throw new ArgumentException("Private key should be 32 bytes", nameof(privateKey)); } var salt = RandomBytesGenerator.GenerateRandomSalt(); var derivedKey = GenerateDerivedKey(KeyStoreCrypto.GetPasswordAsBytes(password), salt, kdfParams); var cipherKey = KeyStoreCrypto.GenerateCipherKey(derivedKey); var iv = RandomBytesGenerator.GenerateRandomInitialisationVector(); var cipherText = GenerateCipher(privateKey, iv, cipherKey); var mac = KeyStoreCrypto.GenerateMac(derivedKey, cipherText); var cryptoInfo = new CryptoInfo <T>(GetCipherType(), cipherText, iv, mac, salt, kdfParams, GetKdfType()); var keyStore = new KeyStore <T> { Version = CurrentVersion, Address = address, Id = Guid.NewGuid().ToString(), Crypto = cryptoInfo }; return(keyStore); }