예제 #1
0
static void
ReadMsg(const char *base64buf, PRUint32 bufLen)
{
    PRUint8 *inBuf = (PRUint8 *) PL_Base64Decode(base64buf, bufLen, NULL);
    if (!inBuf)
    {
        printf("PL_Base64Decode failed\n");
        return;
    }

    const PRUint8 *cursor = inBuf;

    PrintBuf("signature", cursor, 8);

    // verify NTLMSSP signature
    if (memcmp(cursor, NTLM_SIGNATURE, sizeof(NTLM_SIGNATURE)) != 0)
    {
        printf("### invalid or corrupt NTLM signature\n");
    }
    cursor += sizeof(NTLM_SIGNATURE);

    PrintBuf("message type", cursor, 4);

    if (memcmp(cursor, NTLM_TYPE1_MARKER, sizeof(NTLM_MARKER_LEN)) == 0)
        ReadType1MsgBody(inBuf, 12);
    else if (memcmp(cursor, NTLM_TYPE2_MARKER, sizeof(NTLM_MARKER_LEN)) == 0)
        ReadType2MsgBody(inBuf, 12);
    else if (memcmp(cursor, NTLM_TYPE3_MARKER, sizeof(NTLM_MARKER_LEN)) == 0)
        ReadType3MsgBody(inBuf, 12);
    else
        printf("### invalid or unknown message type\n");

    PR_Free(inBuf);
}
예제 #2
0
static void
ReadType2MsgBody(const PRUint8 *inBuf, PRUint32 start)
{
    PRUint16 targetLen, offset;
    PRUint32 flags;
    const PRUint8 *target;
    const PRUint8 *cursor = inBuf + start;

    // read target name security buffer
    targetLen = ReadUint16(cursor);
    ReadUint16(cursor); // discard next 16-bit value
    offset = ReadUint32(cursor); // get offset from inBuf
    target = inBuf + offset;

    PrintBuf("target", target, targetLen);

    PrintBuf("flags", cursor, 4);
    // read flags
    flags = ReadUint32(cursor);
    PrintFlags(flags);

    // read challenge
    PrintBuf("challenge", cursor, 8);
    cursor += 8;

    PrintBuf("context", cursor, 8);
    cursor += 8;

    SecBuf secbuf;
    ReadSecBuf(&secbuf, cursor);
    PrintBuf("target information", inBuf + secbuf.offset, secbuf.length);
}
예제 #3
0
void PrintGtElemStr(GtElemStr const* gt_elem_str, char const* var_name,
                    PrintUtilFormat format) {
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (GtElemStr):\n", var_name);
  if (!gt_elem_str) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (format == kPrintUtilAnnotated) {
    unsigned int i = 0;
    for (i = 0; i < sizeof(gt_elem_str->x) / sizeof(gt_elem_str->x[0]); i++) {
      MAKE_INDENT();
      PRINT("x%u:\n", i);
      if (0 != PrintBuf((const void*)&gt_elem_str->x[i],
                        sizeof(gt_elem_str->x[i]))) {
        MAKE_INDENT();
        PRINT("<invalid>\n");
        return;
      }
    }
  } else if (format == kPrintUtilUnannotated) {
    if (0 != PrintBuf((const void*)gt_elem_str, sizeof(*gt_elem_str))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
}
예제 #4
0
void PrintG2ElemStr(G2ElemStr const* g2_elem_str, char const* var_name,
                    PrintUtilFormat format) {
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (G2ElemStr):\n", var_name);
  if (!g2_elem_str) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (format == kPrintUtilAnnotated) {
    MAKE_INDENT();
    PRINT("x0:\n");
    if (0 !=
        PrintBuf((const void*)&g2_elem_str->x[0], sizeof(g2_elem_str->x[0]))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
    MAKE_INDENT();
    PRINT("x1:\n");
    if (0 !=
        PrintBuf((const void*)&g2_elem_str->x[1], sizeof(g2_elem_str->x[1]))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
    MAKE_INDENT();
    PRINT("y0:\n");
    if (0 !=
        PrintBuf((const void*)&g2_elem_str->y[0], sizeof(g2_elem_str->y[0]))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
    MAKE_INDENT();
    PRINT("y1:\n");
    if (0 !=
        PrintBuf((const void*)&g2_elem_str->y[1], sizeof(g2_elem_str->y[1]))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else if (format == kPrintUtilUnannotated) {
    if (0 != PrintBuf((const void*)g2_elem_str, sizeof(*g2_elem_str))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
}
예제 #5
0
void PrintFq12ElemStr(Fq12ElemStr const* fq12_elem_str, char const* var_name,
                      PrintUtilFormat format) {
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (Fq12ElemStr):\n", var_name);
  if (!fq12_elem_str) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (format == kPrintUtilAnnotated) {
    unsigned int i = 0;
    unsigned int j = 0;
    unsigned int k = 0;
    for (i = 0; i < sizeof(fq12_elem_str->a) / sizeof(fq12_elem_str->a[0]);
         i++) {
      for (j = 0;
           j < sizeof(fq12_elem_str->a[0]) / sizeof(fq12_elem_str->a[0].a[0]);
           j++) {
        for (k = 0; k < sizeof(fq12_elem_str->a[0].a[0]) /
                            sizeof(fq12_elem_str->a[0].a[0].a[0]);
             k++) {
          MAKE_INDENT();
          PRINT("a%u.%u.%u:\n", i, j, k);
          if (0 != PrintBuf((const void*)&fq12_elem_str->a[i].a[j].a[k],
                            sizeof(fq12_elem_str->a[i].a[j].a[k]))) {
            MAKE_INDENT();
            PRINT("<invalid>\n");
            return;
          }
        }
      }
    }
  } else if (format == kPrintUtilUnannotated) {
    if (0 != PrintBuf((const void*)fq12_elem_str, sizeof(*fq12_elem_str))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
}
예제 #6
0
static void
ReadType3MsgBody(const PRUint8 *inBuf, PRUint32 start)
{
    const PRUint8 *cursor = inBuf + start;

    SecBuf secbuf;

    ReadSecBuf(&secbuf, cursor); // LM response
    PrintBuf("LM response", inBuf + secbuf.offset, secbuf.length);

    ReadSecBuf(&secbuf, cursor); // NTLM response
    PrintBuf("NTLM response", inBuf + secbuf.offset, secbuf.length);

    ReadSecBuf(&secbuf, cursor); // domain name
    PrintBuf("domain name", inBuf + secbuf.offset, secbuf.length);

    ReadSecBuf(&secbuf, cursor); // user name
    PrintBuf("user name", inBuf + secbuf.offset, secbuf.length);

    ReadSecBuf(&secbuf, cursor); // workstation name
    PrintBuf("workstation name", inBuf + secbuf.offset, secbuf.length);

    ReadSecBuf(&secbuf, cursor); // session key
    PrintBuf("session key", inBuf + secbuf.offset, secbuf.length);

    PRUint32 flags = ReadUint32(cursor);
    PrintBuf("flags", (const PRUint8 *) &flags, sizeof(flags));
    PrintFlags(flags);
}
예제 #7
0
void PrintFq2ElemStr(Fq2ElemStr const* fq2_elem_str, char const* var_name,
                     PrintUtilFormat format) {
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (Fq2ElemStr):\n", var_name);
  if (!fq2_elem_str) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (format == kPrintUtilAnnotated) {
    MAKE_INDENT();
    PRINT("a0:\n");
    if (0 != PrintBuf((const void*)&fq2_elem_str->a[0],
                      sizeof(fq2_elem_str->a[0]))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
    MAKE_INDENT();
    PRINT("a1:\n");
    if (0 != PrintBuf((const void*)&fq2_elem_str->a[1],
                      sizeof(fq2_elem_str->a[1]))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else if (format == kPrintUtilUnannotated) {
    if (0 != PrintBuf((const void*)fq2_elem_str, sizeof(*fq2_elem_str))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
}
예제 #8
0
void PrintG1ElemStr(G1ElemStr const* g1_elem_str, char const* var_name,
                    PrintUtilFormat format) {
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (G1ElemStr):\n", var_name);
  if (!g1_elem_str) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (format == kPrintUtilAnnotated) {
    MAKE_INDENT();
    PRINT("x:\n");
    if (0 != PrintBuf((const void*)&g1_elem_str->x, sizeof(g1_elem_str->x))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
    MAKE_INDENT();
    PRINT("y:\n");
    if (0 != PrintBuf((const void*)&g1_elem_str->y, sizeof(g1_elem_str->y))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else if (format == kPrintUtilUnannotated) {
    if (0 != PrintBuf((const void*)g1_elem_str, sizeof(*g1_elem_str))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      return;
    }
  } else {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
}
예제 #9
0
static void
ReadType1MsgBody(const PRUint8 *inBuf, PRUint32 start)
{
    const PRUint8 *cursor = inBuf + start;
    PRUint32 flags;

    PrintBuf("flags", cursor, 4);
    // read flags
    flags = ReadUint32(cursor);
    PrintFlags(flags);

    // type 1 message may not include trailing security buffers
    if ((flags & kNegotiateDomainSupplied) |
            (flags & kNegotiateWorkstationSupplied))
    {
        SecBuf secbuf;
        ReadSecBuf(&secbuf, cursor);
        PrintBuf("supplied domain", inBuf + secbuf.offset, secbuf.length);

        ReadSecBuf(&secbuf, cursor);
        PrintBuf("supplied workstation", inBuf + secbuf.offset, secbuf.length);
    }
}
예제 #10
0
void PrintFqElemStr(FqElemStr const* fq_elem_str, char const* var_name) {
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (FqElemStr):\n", var_name);
  if (!fq_elem_str) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (0 != PrintBuf((const void*)fq_elem_str, sizeof(*fq_elem_str))) {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
}
예제 #11
0
void PrintBigNumStr(BigNumStr const* big_num_str, char const* var_name) {
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (BigNumStr):\n", var_name);
  if (!big_num_str) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (0 != PrintBuf((const void*)big_num_str, sizeof(*big_num_str))) {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
}
예제 #12
0
void PrintBigNum(BigNum const* big_num, char const* var_name) {
  IppStatus sts = ippStsNoErr;
  unsigned char* buf = NULL;
  int ipp_word_buf_size;
  if (!var_name) {
    var_name = "<no name>";
  }
  PRINT("%s (BigNum):\n", var_name);
  if (!big_num) {
    MAKE_INDENT();
    PRINT("<null>\n");
    return;
  }
  if (!big_num->ipp_bn) {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
  sts = ippsGetSize_BN(big_num->ipp_bn, &ipp_word_buf_size);
  if (ippStsNoErr != sts) {
    MAKE_INDENT();
    PRINT("<invalid>\n");
    return;
  }
  do {
    buf = SAFE_ALLOC(ipp_word_buf_size * sizeof(Ipp32u));
    if (!buf) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      break;
    }
    sts = ippsGetOctString_BN((Ipp8u*)buf, ipp_word_buf_size * sizeof(Ipp32u),
                              big_num->ipp_bn);
    if (ippStsNoErr != sts) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      break;
    }
    if (0 != PrintBuf((const void*)buf, ipp_word_buf_size * sizeof(Ipp32u))) {
      MAKE_INDENT();
      PRINT("<invalid>\n");
      break;
    }
  } while (0);

  SAFE_FREE(buf);
}
예제 #13
0
void ssl_DumpMsg(sslSocket *ss, unsigned char *bp, unsigned len)
{
    switch (bp[0]) {
      case SSL_MT_ERROR:
	PrintType(ss, "Error");
	PrintInt(ss, "error", LEN(bp+1));
	break;

      case SSL_MT_CLIENT_HELLO:
	{
	    unsigned lcs = LEN(bp+3);
	    unsigned ls  = LEN(bp+5);
	    unsigned lc  = LEN(bp+7);

	    PrintType(ss, "Client-Hello");

	    PrintInt(ss, "version (Major)",                   bp[1]);
	    PrintInt(ss, "version (minor)",                   bp[2]);

	    PrintBuf(ss, "cipher-specs",         bp+9,        lcs);
	    PrintBuf(ss, "session-id",           bp+9+lcs,    ls);
	    PrintBuf(ss, "challenge",            bp+9+lcs+ls, lc);
	}
	break;
      case SSL_MT_CLIENT_MASTER_KEY:
	{
	    unsigned lck = LEN(bp+4);
	    unsigned lek = LEN(bp+6);
	    unsigned lka = LEN(bp+8);

	    PrintType(ss, "Client-Master-Key");

	    PrintInt(ss, "cipher-choice",                       bp[1]);
	    PrintInt(ss, "key-length",                          LEN(bp+2));

	    PrintBuf(ss, "clear-key",            bp+10,         lck);
	    PrintBuf(ss, "encrypted-key",        bp+10+lck,     lek);
	    PrintBuf(ss, "key-arg",              bp+10+lck+lek, lka);
	}
	break;
      case SSL_MT_CLIENT_FINISHED:
	PrintType(ss, "Client-Finished");
	PrintBuf(ss, "connection-id",            bp+1,          len-1);
	break;
      case SSL_MT_SERVER_HELLO:
	{
	    unsigned lc = LEN(bp+5);
	    unsigned lcs = LEN(bp+7);
	    unsigned lci = LEN(bp+9);

	    PrintType(ss, "Server-Hello");

	    PrintInt(ss, "session-id-hit",                     bp[1]);
	    PrintInt(ss, "certificate-type",                   bp[2]);
	    PrintInt(ss, "version (Major)",                    bp[3]);
	    PrintInt(ss, "version (minor)",                    bp[3]);
	    PrintBuf(ss, "certificate",          bp+11,        lc);
	    PrintBuf(ss, "cipher-specs",         bp+11+lc,     lcs);
	    PrintBuf(ss, "connection-id",        bp+11+lc+lcs, lci);
	}
	break;
      case SSL_MT_SERVER_VERIFY:
	PrintType(ss, "Server-Verify");
	PrintBuf(ss, "challenge",                bp+1,         len-1);
	break;
      case SSL_MT_SERVER_FINISHED:
	PrintType(ss, "Server-Finished");
	PrintBuf(ss, "session-id",               bp+1,         len-1);
	break;
      case SSL_MT_REQUEST_CERTIFICATE:
	PrintType(ss, "Request-Certificate");
	PrintInt(ss, "authentication-type",                    bp[1]);
	PrintBuf(ss, "certificate-challenge",    bp+2,         len-2);
	break;
      case SSL_MT_CLIENT_CERTIFICATE:
	{
	    unsigned lc = LEN(bp+2);
	    unsigned lr = LEN(bp+4);
	    PrintType(ss, "Client-Certificate");
	    PrintInt(ss, "certificate-type",                   bp[1]);
	    PrintBuf(ss, "certificate",          bp+6,         lc);
	    PrintBuf(ss, "response",             bp+6+lc,      lr);
	}
	break;
      default:
	ssl_PrintBuf(ss, "sending *unknown* message type", bp, len);
	return;
    }
}
예제 #14
0
파일: test_OSC.c 프로젝트: Angeldude/pd
main() {
    OSCbuf myBuf;
    OSCbuf *b = &myBuf;
    char bytes[SIZE];
    OSCTimeTag tt;

    printf("OSC_initBuffer\n");
    OSC_initBuffer(b, SIZE, bytes);

    PrintBuf(b);

    printf("Testing one-message packet\n");
    if (OSC_writeAddress(b, "/blah/bleh/singlemessage")) {
	printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_writeFloatArg(b, 1.23456f)) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    {
	float floatarray[10];
	int i;
	for (i = 0; i < 10; ++i) {
	    floatarray[i] = i * 10.0f;
	}
	if (OSC_writeFloatArgs(b, 10, floatarray)) {
	    printf("** ERROR: %s\n", OSC_errorMessage);
	}
    }

    if (OSC_writeIntArg(b, 123456)) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_writeStringArg(b, "This is a cool string, dude.")) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    PrintBuf(b);
    PrintPacket(b);

    printf("Resetting\n");
    OSC_resetBuffer(b);

    printf("Testing time tags\n");
    tt = OSCTT_CurrentTime();
    printf("Time now is %llx\n", tt);

    printf("Testing bundles\n");
    if (OSC_openBundle(b, tt)) {
	printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_writeAddress(b, "/a/hello")) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_writeIntArg(b, 16)) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_writeIntArg(b, 32)) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_openBundle(b, OSCTT_PlusSeconds(tt, 1.0f))) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_writeAddress(b, "/b/hello")) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    if (OSC_writeAddress(b, "/c/hello")) {
        printf("** ERROR: %s\n", OSC_errorMessage);
    }

    OSC_closeAllBundles(b);

    PrintBuf(b);
    PrintPacket(b);
}