Ejemplo n.º 1
0
        public AsnElt Encode()
        {
            List <AsnElt> asnElements = new List <AsnElt>();

            AsnElt keyAsn = key.Encode();

            keyAsn = AsnElt.MakeImplicit(AsnElt.CONTEXT, 0, keyAsn);
            asnElements.Add(keyAsn);

            AsnElt lastReqAsn = lastReq.Encode();

            lastReqAsn = AsnElt.MakeImplicit(AsnElt.CONTEXT, 1, lastReqAsn);
            asnElements.Add(lastReqAsn);

            AsnElt nonceElt = AsnElt.MakeInteger(Convert.ToInt64(nonce));
            AsnElt nonceSeq = AsnElt.Make(AsnElt.SEQUENCE, nonceElt);

            nonceSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 2, nonceSeq);
            asnElements.Add(nonceSeq);

            AsnElt flagsElt = AsnElt.MakeInteger(Convert.ToInt32(flags));
            AsnElt flagsSeq = AsnElt.Make(AsnElt.SEQUENCE, flagsElt);

            flagsSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 4, flagsSeq);
            asnElements.Add(flagsSeq);

            AsnElt authtimeElt = AsnElt.MakeTimeAuto(authtime);
            AsnElt authtimeSeq = AsnElt.Make(AsnElt.SEQUENCE, authtimeElt);

            authtimeSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 5, authtimeSeq);
            asnElements.Add(authtimeSeq);

            AsnElt endtimeElt = AsnElt.MakeTimeAuto(endtime);
            AsnElt endtimeSeq = AsnElt.Make(AsnElt.SEQUENCE, endtimeElt);

            endtimeSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 7, endtimeSeq);
            asnElements.Add(endtimeSeq);

            // TODO: Find proper string type
            AsnElt realmElt = AsnElt.MakeString(12, realm);
            AsnElt realmSeq = AsnElt.Make(AsnElt.SEQUENCE, realmElt);

            realmSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 9, realmSeq);
            asnElements.Add(realmSeq);

            sname = new PrincipalName(new List <string>
            {
                "krbgt",
                "MACS.XBOX.COM"
            }, 2);

            AsnElt snameElt = sname.Encode();

            snameElt = AsnElt.MakeImplicit(AsnElt.CONTEXT, 10, snameElt);
            asnElements.Add(snameElt);

            AsnElt seq = AsnElt.Make(AsnElt.SEQUENCE, asnElements.ToArray());

            return(seq);
        }
Ejemplo n.º 2
0
        public AsnElt Encode(byte[] OnlineKey)
        {
            List <string> snames = new List <string>()
            {
                "krbtgt",
                "XBOX.COM"
            };

            List <AsnElt> allNodes = new List <AsnElt>();

            sname = new PrincipalName(snames, 2);

            AsnElt tkt_vnoAsn = AsnElt.MakeInteger(5);
            AsnElt tkt_vnoSeq = AsnElt.Make(AsnElt.SEQUENCE, new AsnElt[] { tkt_vnoAsn });

            tkt_vnoSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 0, tkt_vnoSeq);
            allNodes.Add(tkt_vnoSeq);

            // realm           [1] Realm
            AsnElt realmAsn = AsnElt.MakeString(AsnElt.IA5String, "PASSPORT.NET");

            realmAsn = AsnElt.MakeImplicit(AsnElt.UNIVERSAL, AsnElt.GeneralString, realmAsn);
            AsnElt realmAsnSeq = AsnElt.Make(AsnElt.SEQUENCE, realmAsn);

            realmAsnSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 1, realmAsnSeq);
            allNodes.Add(realmAsnSeq);

            // sname           [2] PrincipalName
            AsnElt snameAsn = sname.Encode();

            snameAsn = AsnElt.MakeImplicit(AsnElt.CONTEXT, 2, snameAsn);
            allNodes.Add(snameAsn);

            // TODO: Find proper key type
            encdata = new EncryptedData((int)Interop.KERB_ETYPE.rc4_hmac, 1, KerberosCrypto.KerberosEncrypt(Interop.KERB_ETYPE.rc4_hmac, Interop.KRB_KEY_USAGE_AS_REP_EP_SESSION_KEY, OnlineKey, SessionKey));

            AsnElt enc_partAsn = encdata.Encode();
            AsnElt enc_partSeq = AsnElt.Make(AsnElt.SEQUENCE, enc_partAsn);

            enc_partSeq = AsnElt.MakeImplicit(AsnElt.CONTEXT, 3, enc_partSeq);
            allNodes.Add(enc_partSeq);

            AsnElt seq  = AsnElt.Make(AsnElt.SEQUENCE, allNodes.ToArray());
            AsnElt seq2 = AsnElt.Make(AsnElt.SEQUENCE, seq);
            AsnElt seq3 = AsnElt.Make(AsnElt.APPLICATION, 1, seq2);

            seq3 = AsnElt.MakeImplicit(AsnElt.APPLICATION, 0, seq3);

            return(seq3);
        }