// UART transmission void uart_send_packet(unsigned char b, unsigned char x, unsigned char y, unsigned char z) { unsigned char ascii_bytes[3]; // Sending data out UART // Data format is the string: // $EZ,b:<val1>,x:<val2>,y:<val3>,z:<val4>\r\n // However, the <val> items are hex UART_XMIT(1,0x24); //$ UART_XMIT(1,0x45); //E UART_XMIT(1,0x5a); //Z UART_XMIT(1,0x2c); //, UART_XMIT(1,0x62); //b UART_XMIT(1,0x3a); //: bin2ascii((unsigned char *)ascii_bytes,b); if (ascii_bytes[2]) UART_XMIT(1,ascii_bytes[2]); //<button msb> if (ascii_bytes[1]) UART_XMIT(1,ascii_bytes[1]); //<button b> UART_XMIT(1,ascii_bytes[0]); //<button lsb> UART_XMIT(1,0x2c); //, UART_XMIT(1,0x78); //x UART_XMIT(1,0x3a); //: bin2ascii((unsigned char *)ascii_bytes,x); if (ascii_bytes[2]) UART_XMIT(1,ascii_bytes[2]); //<x msb> if (ascii_bytes[1]) UART_XMIT(1,ascii_bytes[1]); //<x b> UART_XMIT(1,ascii_bytes[0]); //<x lsb> UART_XMIT(1,0x2c); //, UART_XMIT(1,0x79); //y UART_XMIT(1,0x3a); //: bin2ascii((unsigned char *)ascii_bytes,y); if (ascii_bytes[2]) UART_XMIT(1,ascii_bytes[2]); //<y msb> if (ascii_bytes[1]) UART_XMIT(1,ascii_bytes[1]); //<y b> UART_XMIT(1,ascii_bytes[0]); //<y lsb> UART_XMIT(1,0x2c); //, UART_XMIT(1,0x7a); //z UART_XMIT(1,0x3a); //: bin2ascii((unsigned char *)ascii_bytes,z); if (ascii_bytes[2]) UART_XMIT(1,ascii_bytes[2]); //<z msb> if (ascii_bytes[1]) UART_XMIT(1,ascii_bytes[1]); //<z b> UART_XMIT(1,ascii_bytes[0]); //<z lsb> UART_XMIT(1,0x0d); //cr (\r) UART_XMIT(1,0x0a); //lf (\n) }
static void hmac5(const char *src, const char *out) { unsigned char digest[16]; char s_digest[34]; assert(strlen(out) == 32 && hmac5_key); hmac_md5((const unsigned char*) hmac5_key, (const unsigned char*) src, strlen(src), digest); if (strcasecmp(bin2ascii(s_digest, digest, 16), out) != 0) { fprintf(stderr, "Wrong hman md5(%s) -> %s expected %s\n", src, s_digest, out); exit(1); } }
static void des(const char *src, const char *out) { static const des_cblock key = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 }; DES_KEY ks; unsigned char digest[128]; char s_digest[256]; size_t out_len; memset(digest, 0, sizeof(digest)); tds_des_set_key(&ks, key, sizeof(key)); tds_des_ecb_encrypt(src, strlen(src), &ks, digest); out_len = strlen(src) & ~7u; if (strcasecmp(bin2ascii(s_digest, digest, out_len), out) != 0) { fprintf(stderr, "Wrong des(%s) -> %s expected %s\n", src, s_digest, out); exit(1); } }
static void md5(const char *src, const char *out) { MD5_CTX ctx; unsigned char digest[16]; char s_digest[34]; assert(strlen(out) == 32); MD5Init(&ctx); if (strlen(src) > 12) { MD5Update(&ctx, (const unsigned char *) src, 5); MD5Update(&ctx, (const unsigned char *) src+5, strlen(src) - 5); } else { MD5Update(&ctx, (const unsigned char *) src, strlen(src)); } MD5Final(&ctx, digest); if (strcasecmp(bin2ascii(s_digest, digest, 16), out) != 0) { fprintf(stderr, "Wrong md5(%s) -> %s expected %s\n", src, s_digest, out); exit(1); } }
int main(){ bin2ascii("dem1/w001001.adf", "test.asc"); return(1); }