public static KeysHeader Deserialize(Stream stream) { KeysHeader instance = new KeysHeader(); Deserialize(stream, instance); return(instance); }
public static byte[] SerializeToBytes(KeysHeader instance) { using (MemoryStream ms = new MemoryStream()) { Serialize(ms, instance); return(ms.ToArray()); } }
public static void Serialize(Stream stream, KeysHeader instance) { if (instance.IV == null) { throw new ArgumentNullException("IV", "Required by proto specification."); } ProtocolParser.WriteKey(stream, new ProtocolBuffers.Key(1, Wire.LengthDelimited)); ProtocolParser.WriteBytes(stream, instance.IV); if (instance.EncryptedKeys != null) { foreach (byte[] i2 in instance.EncryptedKeys) { ProtocolParser.WriteKey(stream, new ProtocolBuffers.Key(2, Wire.LengthDelimited)); ProtocolParser.WriteBytes(stream, i2); } } }
/// <summary> /// Encrypt chunk data into a new chunk /// </summary> Chunk Encrypt(Chunk chunk) { KeysHeader kh = new KeysHeader (); //Generate key kh.RM.GenerateIV (); kh.RM.GenerateKey (); //Add recipient keys foreach (PublicKey pubkey in recipientKeys) { byte[] bk = pubkey.Encrypt (kh.RM.Key); kh.EncryptedKeys.Add (bk); } //Encrypt data using (MemoryStream ms = new MemoryStream()) { //Headers ProtocolBuffers.ProtocolParser.WriteBytes (ms, KeysHeader.SerializeToBytes (kh)); //Encrypted data using (CryptoStream cs = new CryptoStream(ms, kh.RM.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write (chunk.Data, 0, chunk.Data.Length); } return new Chunk (ms.ToArray ()); } }