private static byte[] DecryptKey(KeyStoreV3 <ScryptParams> keystore, string password) { if (ReferenceEquals(keystore, null)) { throw new ArgumentNullException(nameof(keystore)); } if (password.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(password)); } var crypto = keystore.crypto; var kdfparams = crypto.kdfparams; // unsupported cipher if (crypto.cipher != CIPHER) { throw new ArgumentException("unsupported cipher"); } // decrypt return(PbkdfCrypt.DecryptScrypt(password, HexToByteArray(crypto.mac), HexToByteArray(crypto.cipherparams.iv), HexToByteArray(crypto.ciphertext), kdfparams.n, kdfparams.p, kdfparams.r, HexToByteArray(kdfparams.salt), kdfparams.dklen)); }
internal static PrivateKey DecryptKey(KeyStoreV3 <ScryptParams> keyStore, string password) { if (string.IsNullOrEmpty(password)) { throw new KdfException(ErrorCode.BAD_ARGUMENT, "empty password"); } if (ReferenceEquals(keyStore, null)) { throw new KdfException(ErrorCode.BAD_ARGUMENT, "keyStore is null"); } var crypto = keyStore.crypto; var kdfparams = keyStore.crypto.kdfparams; // unsupported cipher if (crypto.cipher != CIPHER) { throw new KdfException(ErrorCode.UNSUPPORTED, $"unsupported cipher:{crypto.cipher}"); } var key = PbkdfCrypt.DecryptScrypt(password, crypto.mac.HexToBytes(), crypto.cipherparams.iv.HexToBytes(), crypto.ciphertext.HexToBytes(), kdfparams.n, kdfparams.p, kdfparams.r, kdfparams.salt.HexToBytes(), kdfparams.dklen); return(new PrivateKey(key)); }