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); }
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); }
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*)>_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; } }
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; } }
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; } }
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); }
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; } }
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; } }
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); } }
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; } }
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; } }
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); }
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; } }
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); }