public static byte[] UnscrambledPayload(this SPCMessage message, RSAParameters parameters) { ArgumentThrow.IfNull(message, $"Invalid {typeof(SPCMessage).Name} to unscramble. Message can not be null.", nameof(message)); ArgumentThrow.IfNull(parameters, $"Invalid {typeof(SPCMessage).Name} to unscramble. {typeof(RSAParameters).Name} can not be null.", nameof(parameters)); using (var rsa = RSA.Create()) using (var aes = Aes.Create()) { rsa.ImportParameters(parameters); aes.IV = message.IV; aes.Key = rsa.Decrypt(message.Key, RSAEncryptionPadding.OaepSHA1); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; using (var decryptor = aes.CreateDecryptor()) using (var memoryStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Write)) { cryptoStream.Write(message.ContentPayload); return(memoryStream.ToArray()); } } }
internal DFunction(byte[] ask, bool encryption = true) { ArgumentThrow.IfLengthNot(ask, 16, "Only 16-bytes ASKs are valid.", nameof(ask)); this.ASK = ask; this.encryption = encryption; }
public FPExtractor(FPProvider provider) { ArgumentThrow.IfNull(provider, "Unable to create inspector. Provider can not be null.", nameof(provider)); this.Providers = new List <FPProvider>() { provider }; }
internal static byte[] ToBuffer(IEnumerable <TLLVSlab> slabs) { ArgumentThrow.IfNull(slabs, $"Invalid slabs to serialize. Slab list can not be null.", nameof(slabs)); var memory = new MemoryStream(); foreach (var slab in slabs) { memory.Write(slab.Binary); } return(memory.ToArray()); }
public FPServer(FPProvider provider, IContentKeyLocator locator) { ArgumentThrow.IfNull(provider, "Unable to create server. Provider can not be null.", nameof(provider)); ArgumentThrow.IfNull(locator, "Unable to create server. Key locator can not be null.", nameof(locator)); this.Providers = new List <FPProvider>() { provider }; this.Locator = locator; this.LicenseDuration = 3600; }
internal static IEnumerable <TLLVSlab> FromBuffer(byte[] buffer) { ArgumentThrow.IfNull(buffer, $"Invalid buffer to parse slabs. Buffer can not be null.", nameof(buffer)); var memory = new ReadOnlyMemory <byte>(buffer); IList <TLLVSlab> slabs = new List <TLLVSlab>(); while (memory.Length > 0) { var slab = new TLLVSlab(memory); slabs.Add(slab); memory = memory.Slice((int)slab.Length); } return(slabs); }
public static byte[] UnscrambledParcel(this SKR1Payload payload, byte[] key) { ArgumentThrow.IfNull(payload, $"Invalid {typeof(SKR1Payload).Name} to unscramble. Payload can not be null.", nameof(payload)); ArgumentThrow.IfLengthNot(key, 16, "Invalid key to unscramble. Key buffer should be 16 bytes.", nameof(key)); using (var aes = Aes.Create()) { aes.IV = payload.IV; aes.Key = key; aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; using (var decryptor = aes.CreateDecryptor()) using (var memoryStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Write)) { cryptoStream.Write(payload.Parcel); return(memoryStream.ToArray()); } } }
public static byte[] ScrambledParcel(this EncryptedCKParcel parcel, byte[] key) { ArgumentThrow.IfNull(parcel, $"Invalid {typeof(EncryptedCKParcel).Name} to scramble. Parcel can not be null.", nameof(parcel)); ArgumentThrow.IfLengthNot(key, 16, "Invalid key to scramble. Key buffer should be 16 bytes.", nameof(key)); using (var aes = Aes.Create()) { // aes.IV = null; aes.Key = key; aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.None; using (var encryptor = aes.CreateEncryptor()) using (var memoryStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { cryptoStream.Write(parcel.Binary); return(memoryStream.ToArray()); } } }
public static byte[] ScrambledPayload(byte[] payload, byte[] iv, byte[] key) { ArgumentThrow.IfLengthNotMultiple(payload, 16, "Invalid payload to scramble. The buffer length should be multiple of 16.", nameof(payload)); ArgumentThrow.IfLengthNot(iv, 16, "Invalid key to scramble. Key buffer should be 16 bytes.", nameof(iv)); ArgumentThrow.IfLengthNot(key, 16, "Invalid key to scramble. Key buffer should be 16 bytes.", nameof(key)); using (var aes = Aes.Create()) { aes.IV = iv; aes.Key = key; aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; using (var encryptor = aes.CreateEncryptor()) using (var memoryStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { cryptoStream.Write(payload); return(memoryStream.ToArray()); } } }
internal byte[] DeriveBytes(byte[] bytes) { ArgumentThrow.IfLackingBytes(bytes, 1, "Invalid derivation buffer. The buffer seems to have a length lower than 1.", nameof(bytes)); ArgumentThrow.IfTooMuchBytes(bytes, 55, "Invalid derivation buffer. The buffer seems to have a length greater than 55.", nameof(bytes)); var buffer = new ReadOnlyMemory <byte>(bytes); var memory = new Memory <byte>(new byte[64]); buffer.CopyTo(memory.Slice(0, buffer.Length)); BinaryConverter.WriteUInt8(0x80).CopyTo(memory.Slice(buffer.Length, 1)); UInt32 M1 = Enumerable.Range(0, 7).Select(i => BinaryConverter.ReadUInt32(memory.Slice(i * 4, 4), BinaryConverter.Endianess.BigEndian)).Aggregate((i, j) => i + j); for (int i = 0; i < ROUNDS; i++) { if ((M1 & 1) == 0) { M1 = (3 * M1 + 1) % PRIME; } else { M1 >>= 1; } } UInt32 M2 = Enumerable.Range(7, 7).Select(i => BinaryConverter.ReadUInt32(memory.Slice(i * 4, 4), BinaryConverter.Endianess.BigEndian)).Aggregate((i, j) => i + j); for (int i = 0; i < ROUNDS; i++) { if ((M2 & 1) == 0) { M2 = (3 * M2 + 1) % PRIME; } else { M2 >>= 1; } } BinaryConverter.WriteUInt32(M1, BinaryConverter.Endianess.LittleEndian).CopyTo(memory.Slice(56, 4)); BinaryConverter.WriteUInt32(M2, BinaryConverter.Endianess.LittleEndian).CopyTo(memory.Slice(60, 4)); using (var sha = SHA1.Create()) using (var aes = Aes.Create()) { var hash = sha.ComputeHash(memory.ToArray()).Take(16).ToArray(); // aes.IV = new byte[16]; aes.Key = this.ASK; aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.None; using (var encryptor = aes.CreateEncryptor()) using (var memoryStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { cryptoStream.Write(hash); return(encryption ? memoryStream.ToArray() : hash); } } }