9 int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bool quiet) {
12 const char *usign_argv[16] = {0};
13 unsigned int usign_argc = 0;
15 usign_argv[usign_argc++] = "/usr/bin/usign";
16 usign_argv[usign_argc++] = "-S";
17 usign_argv[usign_argc++] = "-m";
18 usign_argv[usign_argc++] = msgfile;
19 usign_argv[usign_argc++] = "-s";
20 usign_argv[usign_argc++] = seckeyfile;
21 usign_argv[usign_argc++] = "-x";
22 usign_argv[usign_argc++] = sigfile;
25 usign_argv[usign_argc++] = "-q";
33 if (execv(usign_argv[0], usign_argv))
39 waitpid(pid, &status, 0);
40 return WEXITSTATUS(status);
46 static int usign_f(char *fingerprint, const char *pubkeyfile, const char *seckeyfile, const char *sigfile) {
50 const char *usign_argv[16] = {0};
51 unsigned int usign_argc = 0;
56 usign_argv[usign_argc++] = "/usr/bin/usign";
57 usign_argv[usign_argc++] = "-F";
60 usign_argv[usign_argc++] = "-p";
61 usign_argv[usign_argc++] = pubkeyfile;
65 usign_argv[usign_argc++] = "-s";
66 usign_argv[usign_argc++] = seckeyfile;
70 usign_argv[usign_argc++] = "-x";
71 usign_argv[usign_argc++] = sigfile;
87 if (execv(usign_argv[0], usign_argv))
93 waitpid(pid, &status, 0);
94 if (fingerprint && !WEXITSTATUS(status)) {
95 memset(fingerprint, 0, 16);
96 read(fds[0], fingerprint, 16);
97 fingerprint[16] = '\0';
101 return WEXITSTATUS(status);
107 int usign_f_pubkey(char *fingerprint, const char *pubkeyfile) {
108 return usign_f(fingerprint, pubkeyfile, NULL, NULL);
111 int usign_f_seckey(char *fingerprint, const char *seckeyfile) {
112 return usign_f(fingerprint, NULL, seckeyfile, NULL);
115 int usign_f_sig(char *fingerprint, const char *sigfile) {
116 return usign_f(fingerprint, NULL, NULL, sigfile);
119 int _usign_key_is_revoked(const char *fingerprint, const char *pubkeydir) {
121 char rfname[256] = {0};
123 snprintf(rfname, sizeof(rfname)-1, "%s/%s", pubkeydir, fingerprint);
124 if (readlink(rfname, tml, sizeof(tml)) > 0 &&
125 !strcmp(tml, ".revoked.")) {
132 int usign_v(const char *msgfile, const char *pubkeyfile,
133 const char *pubkeydir, const char *sigfile, bool quiet) {
136 const char *usign_argv[16] = {0};
137 unsigned int usign_argc = 0;
138 char fingerprint[17];
140 if (usign_f_sig(fingerprint, sigfile))
143 if (pubkeydir && _usign_key_is_revoked(fingerprint, pubkeydir))
146 usign_argv[usign_argc++] = "/usr/bin/usign";
147 usign_argv[usign_argc++] = "-V";
148 usign_argv[usign_argc++] = "-m";
149 usign_argv[usign_argc++] = msgfile;
152 usign_argv[usign_argc++] = "-q";
155 usign_argv[usign_argc++] = "-p";
156 usign_argv[usign_argc++] = pubkeyfile;
160 usign_argv[usign_argc++] = "-P";
161 usign_argv[usign_argc++] = pubkeydir;
165 usign_argv[usign_argc++] = "-x";
166 usign_argv[usign_argc++] = sigfile;
175 if (execv(usign_argv[0], usign_argv))
181 waitpid(pid, &status, 0);
182 return WEXITSTATUS(status);