private static byte[] EncryptKey(byte[] keyhalf1, byte[] keyhalf2, byte[] derived) { var derivedhalf1 = derived.Take(32).ToArray(); var derivedhalf2 = derived.Skip(32).Take(32).ToArray(); var encryptedhalf1 = new byte[16]; var encryptedhalf2 = new byte[16]; var aes = BitcoinEncryptedSecret.CreateAES256(); aes.Key = derivedhalf2; var encrypt = aes.CreateEncryptor(); for (int i = 0; i < 16; i++) { derivedhalf1[i] = (byte)(keyhalf1[i] ^ derivedhalf1[i]); } encrypt.TransformBlock(derivedhalf1, 0, 16, encryptedhalf1, 0); for (int i = 0; i < 16; i++) { derivedhalf1[16 + i] = (byte)(keyhalf2[i] ^ derivedhalf1[16 + i]); } encrypt.TransformBlock(derivedhalf1, 16, 16, encryptedhalf2, 0); return(encryptedhalf1.Concat(encryptedhalf2).ToArray()); }
private static byte[] EncryptKey(byte[] keyhalf1, byte[] keyhalf2, byte[] derived) { byte[] derivedhalf1 = derived.SafeSubarray(0, 32); byte[] derivedhalf2 = derived.SafeSubarray(32, 32); var encryptedhalf1 = new byte[16]; var encryptedhalf2 = new byte[16]; #if USEBC || WINDOWS_UWP var aes = BitcoinEncryptedSecret.CreateAES256(true, derivedhalf2); #else Aes aes = CreateAES256(); aes.Key = derivedhalf2; ICryptoTransform encrypt = aes.CreateEncryptor(); #endif for (int i = 0; i < 16; i++) { derivedhalf1[i] = (byte)(keyhalf1[i] ^ derivedhalf1[i]); } #if USEBC || WINDOWS_UWP aes.ProcessBytes(derivedhalf1, 0, 16, encryptedhalf1, 0); aes.ProcessBytes(derivedhalf1, 0, 16, encryptedhalf1, 0); #else encrypt.TransformBlock(derivedhalf1, 0, 16, encryptedhalf1, 0); #endif for (int i = 0; i < 16; i++) { derivedhalf1[16 + i] = (byte)(keyhalf2[i] ^ derivedhalf1[16 + i]); } #if USEBC || WINDOWS_UWP aes.ProcessBytes(derivedhalf1, 16, 16, encryptedhalf2, 0); aes.ProcessBytes(derivedhalf1, 16, 16, encryptedhalf2, 0); #else encrypt.TransformBlock(derivedhalf1, 16, 16, encryptedhalf2, 0); #endif return(encryptedhalf1.Concat(encryptedhalf2).ToArray()); }