示例#1
0
        public object SerializeSignedObject()
        {
            object token = null;

            if (Payload == null)
            {
                throw new ArgumentException("Payload must be set before the token can be created and signed.");
            }

            JWK    jwk = null;
            string kid = null;

            if (string.IsNullOrEmpty(_kid))
            {
                //Create the JWK
                jwk = new JWK()
                {
                    e   = Base64Tool.Encode(_rsaParameters.Exponent),
                    kty = "RSA",
                    n   = Base64Tool.Encode(_rsaParameters.Modulus)
                };
            }
            else
            {
                kid = _kid;
            }

            //Create the Protected Header
            PROTECTED @protected = new PROTECTED()
            {
                alg   = "RS256",
                jwk   = jwk,
                kid   = kid,
                nonce = _nonce,
                url   = _directory
            };

            //Encode jwk and payload
            string encodedProtected = Base64Tool.Encode(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(@protected, Formatting.None)));
            string encodedPayload   = Base64Tool.Encode(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(Payload, Formatting.None)));

            //Sign Token
            string sigBase = $"{encodedProtected}.{encodedPayload}";

            byte[] sigBytes    = Encoding.ASCII.GetBytes(sigBase);
            byte[] signedBytes = _cryptoProvider.SignData(sigBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            string signature   = Base64Tool.Encode(signedBytes);

            token = new
            {
                @protected = encodedProtected,
                payload    = encodedPayload,
                signature  = signature
            };

            return(token);
        }
        private static void Test()
        {
            const string WHITELIST      = "/Buildable/|ResourceNode|ResourceDeposit";
            const string PROTECTED      = "MamIntegrated|HubTerminal|WorkBenchIntegrated|StorageIntegrated|GeneratorIntegratedBiomass";
            var          WLItems        = WHITELIST.Split('|');
            var          ProtectedItems = PROTECTED.Split('|');
            var          ZeroPos        = new Vector3();

            //Note to testers: Do not close the stream early. This protects you from overwriting the save file.
            using (var FS = File.OpenRead(Path.Combine(SaveDirectory, "Reset.sav")))
            {
                var F = SaveFile.Open(FS);

                var R = new Random();
                foreach (var E in F.Entries)
                {
                    if (E.EntryType == ObjectTypes.OBJECT_TYPE.OBJECT)
                    {
                        var o = (ObjectTypes.GameObject)E.ObjectData;
                        if (
                            !o.ObjectPosition.Equals(ZeroPos) &&
                            WLItems.Any(n => o.Name.Contains(n)) &&
                            !ProtectedItems.Any(n => o.Name.Contains(n)))
                        {
                            var newPos = Tools.TranslateToMap(new System.Drawing.PointF((float)R.NextDouble(), (float)R.NextDouble()));
                            newPos.Z         = 18000;
                            o.ObjectPosition = newPos;
                        }
                    }
                }

                //Show all entries
                Console.Error.WriteLine(string.Join("\r\n", F.Entries.OrderBy(m => m.Properties.Length).Select(m => m.ObjectData.Name).Distinct()));

                /* Test code to "align" things
                 * var o = (ObjectTypes.GameObject)e.ObjectData;
                 * o.ObjectPosition.X = (int)o.ObjectPosition.X;
                 * o.ObjectPosition.Y = (int)o.ObjectPosition.Y;
                 * o.ObjectPosition.Z = (int)o.ObjectPosition.Z;
                 *
                 * o.ObjectPosition.X -= o.ObjectPosition.X % 10;
                 * o.ObjectPosition.Y -= o.ObjectPosition.Y % 10;
                 * o.ObjectPosition.Z -= o.ObjectPosition.Z % 10;
                 * //o.ObjectRotation.W = o.ObjectRotation.X = o.ObjectRotation.Y = o.ObjectRotation.Z = 0;
                 * //Console.Error.WriteLine("{0} {1}", o.ObjectPosition, o.ObjectRotation);
                 * //*/

                /*
                 * //Duplicator test
                 * var BaseF = (SaveFileEntry)F.Entries.First(m => m.ObjectData.Name == "/Game/FactoryGame/Buildable/Building/Foundation/Build_Foundation_8x2_01.Build_Foundation_8x2_01_C").Clone();
                 * var BaseObject = (ObjectTypes.GameObject)BaseF.ObjectData;
                 * var BaseName = BaseObject.InternalName;
                 * BaseName = BaseName.Substring(0, BaseName.Length - 1);
                 * BaseObject.ObjectPosition.X = -324000;
                 * BaseObject.ObjectPosition.Y = -374000;
                 * BaseObject.ObjectPosition.Z = 18000;
                 *
                 * int ctr = F.Entries.Count(m => m.ObjectData.Name == "/Game/FactoryGame/Buildable/Building/Foundation/Build_Foundation_8x2_01.Build_Foundation_8x2_01_C");
                 * for (var x = 0; x < 940; x += 5)
                 * {
                 *  for (var y = 0; y < 940; y += 5)
                 *  {
                 *      var Copy = (SaveFileEntry)BaseF.Clone();
                 *      var o = (ObjectTypes.GameObject)Copy.ObjectData;
                 *      o.InternalName = BaseName + (ctr++).ToString();
                 *      o.ObjectPosition.X += x * 800;
                 *      o.ObjectPosition.Y += y * 800;
                 *      F.Entries.Add(Copy);
                 *  }
                 *  Console.Error.WriteLine(x);
                 * }
                 * Console.Error.WriteLine("Placed {0} foundations", ctr);
                 * //*/
                using (var FSOut = File.Create(Path.Combine(Environment.ExpandEnvironmentVariables(SAVEDIR), "Test-Edited.sav")))
                {
                    F.Export(FSOut);
                }
            }
        }