Checks the detached OpenPGP signature of the file given by FILENAME. The name of the signature file is derived from FILENAME by appending ".asc".
If a signature file exists and it contains at least one fully valid signature, the function returns 0. If all of the signatures are not valid or were made by an unknown or untrusted key, the function returns 1. If an error occurs or the file does not have a corresponding detached signature the function returns -1.
112 int retcode = -1, sig_count = 0;
113 char *sigfilename = NULL;
115 gchar *scontent = NULL;
116 gchar *offset = NULL;
117 gchar *endpos = NULL;
118 gchar *path = g_build_filename (OPENVAS_SYSCONF_DIR,
"gnupg", NULL);
121 gpgme_ctx_t ctx = gvm_init_gpgme_ctx_from_dir (path);
122 gpgme_data_t sig = NULL, text = NULL;
127 nasl_trace (NULL,
"gpgme context could not be initialized.\n");
132 sigfilename = g_malloc0 (strlen (filename) + 4 + 1);
133 strcpy (sigfilename, filename);
134 strcat (sigfilename,
".asc");
135 nasl_trace (NULL,
"nasl_verify_signature: loading signature file '%s'\n",
138 success = g_file_get_contents (sigfilename, &scontent, NULL, NULL);
146 offset = g_strstr_len (scontent, strlen (scontent),
"-----B");
149 nasl_trace (NULL,
"nasl_verify_signature: No signature in '%s'\n",
153 endpos = g_strstr_len (offset, -1,
"-----E");
155 siglen = strlen (offset) - strlen (endpos) + 17;
158 nasl_trace (NULL,
"nasl_verify_signature: No signature in '%s'\n",
168 err = gpgme_data_new_from_mem (&text, fcontent, flen, 1);
176 err = gpgme_data_new_from_mem (&sig, offset, siglen, 1);
178 nasl_trace (NULL,
"nasl_verify_signature: %s: %s\n", sigfilename,
179 gpgme_strerror (err));
182 err = gpgme_op_verify (ctx, sig, text, NULL);
184 "nasl_verify_signature: gpgme_op_verify "
201 offset = g_strstr_len (offset + 1, strlen (offset),
"-----B");
204 if ((endpos = g_strstr_len (offset, strlen (offset),
"-----E")))
205 siglen = (strlen (offset) - strlen (endpos) + 17);
208 nasl_trace (NULL,
"nasl_verify_signature: No signature in '%s'\n",
214 gpgme_data_release (sig);
216 gpgme_data_release (text);
224 gpgme_data_release (sig);
226 gpgme_data_release (text);
229 g_free (sigfilename);