public static EllipticCurveEncryptionInformation Create(IEnumerable <EcKeyPair> publicKeys, byte[] secretKey)
        {
            var ephemeralKey = EllipticCurveCryptographer.CreateKeyPair(true);

            var result = new EllipticCurveEncryptionInformation
            {
                EphemeralKey = ephemeralKey.ExportPublicKey(),
            };

            result.DerivedSecrets = new List <DerivedSecret>();
            foreach (var publicKey in publicKeys)
            {
                var deriveSecret = EllipticCurveCryptographer.DeriveSecret(ephemeralKey, publicKey);

                var input  = new MemoryStream(secretKey);
                var output = new MemoryStream();
                SymmetricEncryption.Encrypt(input, output, deriveSecret);

                var saltedHash = publicKey.GetPublicKeySaltedHash();

                var derivedSecret = new DerivedSecret
                {
                    PublicKeyHash         = saltedHash.hash,
                    PublicKeyHashSalt     = saltedHash.salt,
                    EncryptedSharedSecret = output.ToArray()
                };
                result.DerivedSecrets.Add(derivedSecret);
            }
            return(result);
        }