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
);