int main(int argc, const char **argv) { unsigned char *sk, *pk, *n, *m, *c; size_t mlen, clen; if (argc < 2) { puts("usage: cbox SK PK NONCE"); return 1; } if (strlen(argv[1]) != crypto_box_SECRETKEYBYTES * 2) errx(1, "bad SK length"); sk = decodehex(argv[1]); if (strlen(argv[2]) != crypto_box_PUBLICKEYBYTES * 2) errx(1, "bad PK length"); pk = decodehex(argv[2]); if (strlen(argv[3]) != crypto_box_NONCEBYTES * 2) errx(1, "bad NONCE length"); n = decodehex(argv[3]); mlen = readmsg(&m); if ((c = calloc(mlen, 1)) == NULL) err(1, NULL); crypto_box(c, m, mlen, n, pk, sk); c += crypto_box_BOXZEROBYTES; clen = mlen - crypto_box_BOXZEROBYTES; if (fwrite(c, 1, clen, stdout) != clen) err(1, NULL); return 0; }
void nbmknamefromstring(NbName nbname, char *s) { int i; memset(nbname, ' ', NbNameLen - 1); nbname[NbNameLen - 1] = 0; i = 0; while (*s) { if (*s == '\\' && *(s + 1) == 'x') { s += 2; if (*s == 0 || *(s + 1) == 0) return; nbname[NbNameLen - 1] = (decodehex(s[0]) << 4) | decodehex(s[1]); return; } else { if (i < NbNameLen - 1) nbname[i++] = toupper(*s); s++; } } }
int main(int argc, const char **argv) { unsigned char *sk, *m, *sm; size_t mlen, n; long long unsigned int smlen; if (argc < 2) { puts("usage: csign PRIVATE_KEY"); return 1; } if (strlen(argv[1]) != crypto_sign_SECRETKEYBYTES * 2) errx(1, "bad key length"); sk = decodehex(argv[1]); mlen = readmsg(&m); if ((sm = calloc(mlen + crypto_sign_BYTES, 1)) == NULL) err(1, NULL); crypto_sign(sm, &smlen, m, mlen, sk); if ((n = fwrite(sm, 1, crypto_sign_BYTES, stdout)) != smlen) err(1, NULL); return 0; }
int main(int argc, char *argv[]) { struct termios mode; struct termios mode2; struct winsize winsize; struct speed speed; int aflag = 0; int gflag = 0; size_t n; unsigned char *buf; char *p; speed_t in, out; for (argv0 = *argv++, argc--; argc; argv++, argc--) { if (!strcmp(*argv, "-ag") || !strcmp(*argv, "-ga")) { aflag = gflag = 1; } else if (!strcmp(*argv, "-g")) { gflag = 1; } else if (!strcmp(*argv, "-a")) { aflag = 1; } else if (!strcmp(*argv, "--")) { argv++, argc--; break; } else { break; } } if (aflag && gflag) usage(); memset(&mode, 0, sizeof(mode)); if (tcgetattr(STDIN_FILENO, &mode)) eprintf("tcgetattr <stdin>:"); memcpy(&mode2, &mode, sizeof(mode)); for (; *argv; argv++) { if (**argv == '=') { p = *argv + 1; if (strlen(p) != sizeof(mode) * 2 || !isxnumber(p)) goto invalid; decodehex((char *)&mode, p); } else if (!parseoperand_mode(*argv, &mode)) { /* do nothing. */ } else if (!parseoperand_key(argv[0], argv[1], &mode)) { argv++; } else if (!parseoperand_int(argv[0], argv[1], &mode)) { argv++; } else if (!strcmp(argv[0], "line")) { if (!argv[1]) eprintf("missing argument for operand: %s\n", argv[0]); line(argv[1], &mode); argv++; } else if (!parsespeed(*argv, &speed)) { if (cfsetispeed(&mode, speed.speed)) eprintf("cfsetispeed %s:", speed.str); if (cfsetospeed(&mode, speed.speed)) eprintf("cfsetospeed %s:", speed.str); } else { goto invalid; } } if (memcmp(&mode, &mode2, sizeof(mode))) { memset(&mode2, 0, sizeof(mode2)); if (tcsetattr(STDIN_FILENO, drain_requested ? TCSADRAIN : TCSANOW, &mode)) eprintf("tcsetattr <stdin>:"); if (tcgetattr(STDIN_FILENO, &mode2)) eprintf("tcgetattr <stdin>:"); if (memcmp(&mode, &mode2, sizeof(mode))) eprintf("tcsetattr <stdin>: unable to apply all operands\n"); } if (gflag) { buf = (unsigned char *)&mode; printf("="); for (n = sizeof(mode); n--; buf++) printf("%02x", *buf); printf("\n"); } if (output_size_requested) { if (ioctl(STDIN_FILENO, TIOCGWINSZ, &winsize)) eprintf("TIOCGWINSZ <stdin>:"); printf("%u %u\n", winsize.ws_row, winsize.ws_col); } if (output_speed_requested) { in = cfgetispeed(&mode); out = cfgetospeed(&mode); if (!in || in == out) printf("%s\n", baudtostr(out)); else printf("%s %s\n", baudtostr(in), baudtostr(out)); } if ((aflag || !argc) && !gflag) displaysettings(&mode, aflag); return 0; invalid: eprintf("invalid operand: %s\n", *argv); }