예제 #1
0
 public static void addTicketDateParam(SceNpTicket ticket, long time)
 {
     sbyte[] bytes = new sbyte[8];
     Utilities.writeUnaligned32(bytes, 0, Utilities.endianSwap32((int)(time >> 32)));
     Utilities.writeUnaligned32(bytes, 4, Utilities.endianSwap32((int)time));
     ticket.parameters.Add(new SceNpTicket.TicketParam(SceNpTicket.TicketParam.PARAM_TYPE_DATE, bytes));
 }
예제 #2
0
 public static void addTicketParam(SceNpTicket ticket, int type, string value, int Length)
 {
     sbyte[] stringBytes = value.GetBytes(Charset.forName("ASCII"));
     sbyte[] bytes       = new sbyte[Length];
     Array.Copy(stringBytes, 0, bytes, 0, System.Math.Min(Length, stringBytes.Length));
     ticket.parameters.Add(new SceNpTicket.TicketParam(type, bytes));
 }
예제 #3
0
        public virtual int sceNpAuthGetTicketParam(TPointer ticketBuffer, int ticketLength, int paramNumber, TPointer buffer)
        {
            // This clear is always done, even when an error is returned
            buffer.clear(256);

            if (paramNumber < 0 || paramNumber >= SceNpTicket.NUMBER_PARAMETERS)
            {
                return(SceKernelErrors.ERROR_NP_MANAGER_INVALID_ARGUMENT);
            }

            if (ticketBuffer.getValue32() == 0)
            {
                // This is an empty ticket, do no analyze it
                //if (log.DebugEnabled)
                {
                    Console.WriteLine(string.Format("sceNpAuthGetTicketParam returning empty param from empty ticket"));
                }
            }
            else
            {
                SceNpTicket ticket = new SceNpTicket();
                ticket.read(ticketBuffer);
                //if (log.DebugEnabled)
                {
                    Console.WriteLine(string.Format("sceNpAuthGetTicketParam ticket: {0}", ticket));
                }

                SceNpTicket.TicketParam ticketParam = ticket.parameters[paramNumber];
                ticketParam.writeForPSP(buffer);
            }

            return(0);
        }
예제 #4
0
 public static void addTicketLongParam(SceNpTicket ticket, long value)
 {
     sbyte[] bytes = new sbyte[8];
     Utilities.writeUnaligned32(bytes, 0, Utilities.endianSwap32((int)(value >> 32)));
     Utilities.writeUnaligned32(bytes, 4, Utilities.endianSwap32((int)value));
     ticket.parameters.Add(new SceNpTicket.TicketParam(SceNpTicket.TicketParam.PARAM_TYPE_LONG, bytes));
 }
예제 #5
0
 public static void addTicketParam(SceNpTicket ticket, int value)
 {
     sbyte[] bytes = new sbyte[4];
     Utilities.writeUnaligned32(bytes, 0, Utilities.endianSwap32(value));
     ticket.parameters.Add(new SceNpTicket.TicketParam(SceNpTicket.TicketParam.PARAM_TYPE_INT, bytes));
 }
예제 #6
0
 public static void addTicketParam(SceNpTicket ticket, string value, int Length)
 {
     addTicketParam(ticket, SceNpTicket.TicketParam.PARAM_TYPE_STRING_ASCII, value, Length);
 }
예제 #7
0
        public virtual int sceNpAuthGetTicket(int id, TPointer buffer, int Length)
        {
            int result;

            if (useDummyTicket)
            {
                SceNpTicket ticket = new SceNpTicket();
                ticket.version = 0x00000121;
                ticket.size    = 0xF0;
                addTicketParam(ticket, "XXXXXXXXXXXXXXXXXXXX", 20);
                addTicketParam(ticket, 0);
                long now = DateTimeHelper.CurrentUnixTimeMillis();
                addTicketDateParam(ticket, now);
                addTicketDateParam(ticket, now + 10 * 60 * 1000);                 // now + 10 minutes
                addTicketLongParam(ticket, 0L);
                addTicketParam(ticket, SceNpTicket.TicketParam.PARAM_TYPE_STRING, "DummyOnlineID", 32);
                addTicketParam(ticket, "gb", 4);
                addTicketParam(ticket, SceNpTicket.TicketParam.PARAM_TYPE_STRING, "XX", 4);
                addTicketParam(ticket, serviceId, 24);
                int status = 0;
                if (Modules.sceNpModule.parentalControl == sceNp.PARENTAL_CONTROL_ENABLED)
                {
                    status |= STATUS_ACCOUNT_PARENTAL_CONTROL_ENABLED;
                }
                status |= (Modules.sceNpModule.UserAge & 0x7F) << 24;
                addTicketParam(ticket, status);
                addTicketParam(ticket);
                addTicketParam(ticket);
                ticket.unknownBytes = new sbyte[72];
                //if (log.DebugEnabled)
                {
                    Console.WriteLine(string.Format("sceNpAuthGetTicket returning dummy ticket: {0}", ticket));
                }
                ticket.write(buffer);
                result = ticket.@sizeof();
            }
            else if (ticketBytesLength > 0)
            {
                result = System.Math.Min(ticketBytesLength, Length);
                IMemoryWriter memoryWriter = MemoryWriter.getMemoryWriter(buffer.Address, result, 1);
                for (int i = 0; i < result; i++)
                {
                    memoryWriter.writeNext(ticketBytes[i] & 0xFF);
                }

                //if (log.DebugEnabled)
                {
                    Console.WriteLine(string.Format("sceNpAuthGetTicket returning real ticket: {0}", Utilities.getMemoryDump(buffer.Address, result)));
                }
            }
            else
            {
                buffer.clear(Length);

                result = Length;

                //if (log.DebugEnabled)
                {
                    Console.WriteLine(string.Format("sceNpAuthGetTicket returning empty ticket"));
                }
            }

            return(result);
        }
예제 #8
0
 public static void addTicketParam(SceNpTicket ticket)
 {
     ticket.parameters.Add(new SceNpTicket.TicketParam(SceNpTicket.TicketParam.PARAM_TYPE_NULL, new sbyte[0]));
 }