28#include <gnutls/gnutls.h>
29#include <gnutls/x509.h>
31#include <gvm/base/logging.h>
36#define SIGBLOB_LEN (2 * INTBLOB_LEN)
37#define MAX_CIPHER_ID 32
46#define G_LOG_DOMAIN "lib nasl"
73 nasl_perror (lexic,
"%s: %s (%d)\n", txt, gnutls_strerror (err), err);
84 nasl_perror (lexic,
"%s failed: %s/%s\n", function, gcry_strsource (err),
96 if (cipher_elem->
id == *
id)
129static gcry_cipher_hd_t
139 nasl_perror (lexic,
"Cipher handle %d not found.\n", cipher_id);
173 gcry_cipher_close ((gcry_cipher_hd_t)
hd->hd);
175 g_free (hd_item->data);
192 const char *parameter,
const char *function)
195 unsigned char *buffer = data;
197 err = gcry_mpi_scan (dest, GCRYMPI_FMT_USG, buffer,
len, NULL);
200 nasl_perror (lexic,
"%s(): gcry_mpi_scan failed for %s: %s/%s\n",
201 function, parameter, gcry_strsource (err),
202 gcry_strerror (err));
221 const char *parameter,
const char *function)
256 unsigned char *buffer = NULL;
259 gcry_mpi_aprint (GCRYMPI_FMT_USG, &buffer, &size, mpi);
264 memcpy (retc->
x.
str_val, buffer, size);
284 gcry_mpi_t key1 = NULL, key2 = NULL;
296 retc->
x.
i_val = gcry_mpi_cmp (key1, key2);
305 gcry_mpi_release (key1);
306 gcry_mpi_release (key2);
321 gcry_mpi_t key = NULL;
329 key = gcry_mpi_new (0);
333 gcry_mpi_randomize (key, need, GCRY_STRONG_RANDOM);
342 gcry_mpi_release (key);
356static gnutls_x509_privkey_t
358 const char *passphrase_name)
360 char *priv = NULL, *passphrase = NULL;
362 gnutls_x509_privkey_t privkey = NULL;
372 pem.data = (
unsigned char *) priv;
375 err = gnutls_x509_privkey_init (&privkey);
382 if (passphrase && !*passphrase)
385 gnutls_x509_privkey_import2 (privkey, &pem, GNUTLS_X509_FMT_PEM, passphrase,
386 passphrase ? 0 : GNUTLS_PKCS_PLAIN);
395 gnutls_x509_privkey_deinit (privkey);
406 gnutls_x509_privkey_t privkey = NULL;
407 gcry_mpi_t key = NULL;
418 gnutls_datum_t m, e, d, p, q, u;
420 gnutls_x509_privkey_export_rsa_raw (privkey, &m, &e, &d, &p, &q, &u);
429 gnutls_free (m.data);
430 gnutls_free (e.data);
431 gnutls_free (d.data);
432 gnutls_free (p.data);
433 gnutls_free (q.data);
434 gnutls_free (u.data);
441 gnutls_datum_t p, q, g, y, x;
442 err = gnutls_x509_privkey_export_dsa_raw (privkey, &p, &q, &g, &y, &x);
452 gnutls_free (p.data);
453 gnutls_free (q.data);
454 gnutls_free (g.data);
455 gnutls_free (y.data);
456 gnutls_free (x.data);
469 gcry_mpi_release (key);
470 gnutls_x509_privkey_deinit (privkey);
522 e = gcry_mpi_new (gcry_mpi_get_nbits (prime));
528 gcry_mpi_powm (e, g, priv, prime);
549 e = gcry_mpi_new (gcry_mpi_get_nbits (prime));
555 gcry_mpi_powm (e, pub, priv, prime);
573 gcry_mpi_t p = NULL, g = NULL, priv = NULL, pub_mpi = NULL;
596 gcry_mpi_release (p);
597 gcry_mpi_release (g);
598 gcry_mpi_release (priv);
599 gcry_mpi_release (pub_mpi);
618 gcry_mpi_t p = NULL, g = NULL, dh_server_pub = NULL;
619 gcry_mpi_t pub_key = NULL, priv_key = NULL;
620 gcry_mpi_t shared = NULL;
629 "nasl_dh_compute_key")
633 "nasl_dh_compute_key")
637 "nasl_dh_compute_key")
650 gcry_mpi_release (p);
651 gcry_mpi_release (g);
652 gcry_mpi_release (dh_server_pub);
653 gcry_mpi_release (priv_key);
654 gcry_mpi_release (pub_key);
655 gcry_mpi_release (shared);
670 gcry_sexp_t child = NULL;
671 gcry_mpi_t mpi = NULL;
673 child = gcry_sexp_find_token (sexp, token, strlen (token));
676 g_message (
"set_retc_from_sexp: no subexpression with token <%s>", token);
680 mpi = gcry_sexp_nth_mpi (child, 1, GCRYMPI_FMT_USG);
683 gcry_sexp_release (child);
706 gcry_mpi_release (mpi);
731 if (p[0] == 1 || p[0] == 2)
737 while (i < retc->size && p[i])
743 int rest = retc->
size - i;
744 temp = g_malloc0 (rest);
745 memcpy (temp, p + i, rest);
769 gcry_mpi_t e = NULL, n = NULL, dt = NULL;
770 gcry_sexp_t key = NULL, data = NULL, encrypted = NULL;
785 nasl_perror (lexic,
"Syntax : rsa_public_encrypt(data:<d>,"
786 "n:<n>, e:<e>, pad:<TRUE:FALSE>)");
800 err = gcry_sexp_build (&key, NULL,
"(public-key (rsa (n %m) (e %m)))", n, e);
808 err = gcry_sexp_build (&data, NULL,
"(data (flags pkcs1) (value %m))", dt);
810 err = gcry_sexp_build (&data, NULL,
"(data (flags raw) (value %m))", dt);
817 err = gcry_pk_encrypt (&encrypted, data, key);
840 gcry_sexp_release (encrypted);
841 gcry_sexp_release (key);
842 gcry_sexp_release (data);
843 gcry_mpi_release (dt);
844 gcry_mpi_release (e);
845 gcry_mpi_release (n);
861 gcry_mpi_t e = NULL, n = NULL, d = NULL, dt = NULL;
862 gcry_sexp_t key = NULL, data = NULL, decrypted = NULL;
877 nasl_perror (lexic,
"Syntax : rsa_public_encrypt(data:<d>,"
878 "n:<n>, e:<e>, pad:<TRUE:FALSE>)");
894 err = gcry_sexp_build (&key, NULL,
"(private-key (rsa (n %m) (e %m) (d %m)))",
904 gcry_sexp_build (&data, NULL,
"(enc-val (flags pkcs1) (rsa (a %m)))", dt);
907 gcry_sexp_build (&data, NULL,
"(enc-val (flags raw) (rsa (a %m)))", dt);
914 err = gcry_pk_decrypt (&decrypted, data, key);
937 gcry_sexp_release (decrypted);
938 gcry_sexp_release (key);
939 gcry_sexp_release (data);
940 gcry_mpi_release (dt);
941 gcry_mpi_release (e);
942 gcry_mpi_release (n);
943 gcry_mpi_release (d);
960 gcry_mpi_t e = NULL, n = NULL, s = NULL;
961 gcry_sexp_t key = NULL, sig = NULL, decrypted = NULL;
974 err = gcry_sexp_build (&key, NULL,
"(public-key (rsa (n %m) (e %m)))", n, e);
980 err = gcry_sexp_build (&sig, NULL,
"(data (flags raw) (value %m))", s);
989 err = gcry_pk_encrypt (&decrypted, sig, key);
1004 gcry_sexp_release (decrypted);
1005 gcry_sexp_release (key);
1006 gcry_sexp_release (sig);
1007 gcry_mpi_release (s);
1008 gcry_mpi_release (e);
1009 gcry_mpi_release (n);
1016#define NUM_RSA_PARAMS 6
1022 gcry_sexp_t key = NULL;
1029 datums[i].data = NULL;
1033 err = gnutls_x509_privkey_export_rsa_raw (privkey, datums + 0, datums + 1,
1034 datums + 2, datums + 3, datums + 4,
1044 err =
mpi_from_string (lexic, mpis + i, datums[i].data, datums[i].size,
1045 "rsa parameter",
"nasl_sexp_from_privkey");
1051 if (gcry_mpi_cmp (mpis[3], mpis[4]) > 0)
1053 gcry_mpi_swap (mpis[3], mpis[4]);
1054 gcry_mpi_invm (mpis[5], mpis[3], mpis[4]);
1057 gerr = gcry_sexp_build (&key, NULL,
1058 "(private-key (rsa (n %m) (e %m) (d %m)"
1059 " (p %m) (q %m) (u %m)))",
1060 mpis[0], mpis[1], mpis[2], mpis[3], mpis[4], mpis[5]);
1070 gnutls_free (datums[i].data);
1071 gcry_mpi_release (mpis[i]);
1099 gcry_sexp_t ssig = NULL, sdata = NULL, skey = NULL;
1100 gnutls_x509_privkey_t priv_key = NULL;
1114 err = gcry_sexp_build (&sdata, NULL,
"(data (flags pkcs1) (hash sha1 %b))",
1126 err = gcry_pk_sign (&ssig, sdata, skey);
1140 gcry_sexp_release (ssig);
1141 gcry_sexp_release (sdata);
1142 gcry_sexp_release (skey);
1143 gnutls_x509_privkey_deinit (priv_key);
1161 gcry_mpi_t p = NULL, g = NULL, q = NULL, pub = NULL, data = NULL;
1162 gcry_mpi_t r = NULL, s = NULL;
1163 gcry_sexp_t ssig = NULL, skey = NULL, sdata = NULL;
1186 err = gcry_sexp_build (&sdata, NULL,
"(data (flags raw) (value %m))", data);
1193 err = gcry_sexp_build (&skey, NULL,
1194 "(public-key (dsa (p %m) (q %m) (g %m) (y %m)))", p, q,
1202 err = gcry_sexp_build (&ssig, NULL,
"(sig-val (dsa (r %m) (s %m)))", r, s);
1209 err = gcry_pk_verify (ssig, sdata, skey);
1212 else if (gcry_err_code (err) == GPG_ERR_BAD_SIGNATURE)
1221 gcry_mpi_release (p);
1222 gcry_mpi_release (g);
1223 gcry_mpi_release (q);
1224 gcry_mpi_release (pub);
1225 gcry_mpi_release (r);
1226 gcry_mpi_release (s);
1227 gcry_mpi_release (data);
1228 gcry_sexp_release (ssig);
1229 gcry_sexp_release (skey);
1230 gcry_sexp_release (sdata);
1250 gcry_mpi_t p = NULL, g = NULL, q = NULL, pub = NULL, priv = NULL, data = NULL;
1251 gcry_mpi_t r = NULL, s = NULL;
1252 gcry_sexp_t ssig = NULL, skey = NULL, sdata = NULL;
1254 unsigned char *sigblob = NULL;
1275 err = gcry_sexp_build (&sdata, NULL,
"(data (flags raw) (value %m))", data);
1282 err = gcry_sexp_build (
1283 &skey, NULL,
"(private-key (dsa (p %m) (q %m) (g %m) (y %m) (x %m)))", p, q,
1291 err = gcry_pk_sign (&ssig, sdata, skey);
1303 rlen = (gcry_mpi_get_nbits (r) + 7) / 8;
1304 slen = (gcry_mpi_get_nbits (s) + 7) / 8;
1307 nasl_perror (lexic,
"rlen (%d) or slen (%d) > INTBLOB_LEN (%d)\n", rlen,
1315 err = gcry_mpi_print (
1324 err = gcry_mpi_print (GCRYMPI_FMT_USG,
1325 (
unsigned char *) (sigblob +
SIGBLOB_LEN - slen), rlen,
1333 retc->
x.
str_val = (
char *) sigblob;
1338 gcry_mpi_release (p);
1339 gcry_mpi_release (g);
1340 gcry_mpi_release (q);
1341 gcry_mpi_release (pub);
1342 gcry_mpi_release (priv);
1343 gcry_mpi_release (data);
1344 gcry_mpi_release (r);
1345 gcry_mpi_release (s);
1346 gcry_sexp_release (ssig);
1347 gcry_sexp_release (skey);
1348 gcry_sexp_release (sdata);
1361 char *enckey = NULL, *iv = NULL, *data = NULL, *out = NULL;
1362 size_t enckeylen, ivlen, datalen;
1363 gcry_cipher_hd_t
hd = NULL;
1382 if (enckey == NULL || data == NULL || iv == NULL)
1389 "nasl_bf_cbc: unexpected enckeylen = %d; must be >= 16\n",
1395 nasl_perror (lexic,
"nasl_bf_cbc: unexpected ivlen = %d; must >= 8\n",
1401 nasl_perror (lexic,
"nasl_bf_cbc: unexpected datalen = %d; must >= 8\n",
1406 err = gcry_cipher_open (&
hd, GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_MODE_CBC, 0);
1416 err = gcry_cipher_setkey (
hd, enckey, 16);
1425 err = gcry_cipher_setiv (
hd, iv, 8);
1432 out = g_malloc0 (datalen);
1437 err = gcry_cipher_encrypt (
hd, out, datalen, data, datalen);
1439 err = gcry_cipher_decrypt (
hd, out, datalen, data, datalen);
1462 v.
v.
v_str.
s_val = (
unsigned char *) ((enc ? out : data) + datalen - 8);
1474 gcry_cipher_close (
hd);
1532 const char *caller_func)
1534 gcry_cipher_hd_t
hd;
1537 size_t keylen, ivlen;
1547 if (!key || keylen <= 0)
1550 "Syntax: open_stream_cipher (called from "
1551 "%s): Missing key argument",
1556 if ((error = gcry_cipher_open (&
hd, cipher, mode, 0)))
1558 nasl_perror (lexic,
"gcry_cipher_open: %s", gcry_strerror (error));
1559 gcry_cipher_close (
hd);
1562 if ((error = gcry_cipher_setkey (
hd, key, keylen)))
1564 nasl_perror (lexic,
"gcry_cipher_setkey: %s", gcry_strerror (error));
1565 gcry_cipher_close (
hd);
1571 if ((error = gcry_cipher_setiv (
hd, iv, ivlen)))
1573 nasl_perror (lexic,
"gcry_cipher_setiv: %s", gcry_strerror (error));
1574 gcry_cipher_close (
hd);
1580 if (cipher_id == -1)
1582 nasl_perror (lexic,
"%s: No available slot for a new cipher.", __func__);
1583 gcry_cipher_close (
hd);
1589 hd_item->
id = cipher_id;
1611 gcry_cipher_hd_t
hd;
1613 void *result, *data, *tmp;
1614 size_t resultlen, datalen, tmplen;
1622 if (!data || datalen <= 0)
1625 "Syntax: %s (called from "
1626 "%s): Missing data argument",
1627 __func__, caller_func);
1635 if (cipher == GCRY_CIPHER_ARCFOUR)
1637 resultlen = datalen;
1638 tmp = g_malloc0 (datalen);
1639 memcpy (tmp, data, datalen);
1645 "Syntax: %s (called from "
1646 "%s): invalid cipher",
1647 __func__, caller_func);
1650 result = g_malloc0 (resultlen);
1651 if ((error = gcry_cipher_encrypt (
hd, result, resultlen, tmp, tmplen)))
1653 g_message (
"gcry_cipher_encrypt: %s", gcry_strerror (error));
1663 retc->
size = resultlen;
1679 gcry_cipher_hd_t
hd;
1698 char *data, *key, *iv;
1699 char *result = NULL;
1700 size_t datalen, keylen, ivlen, resultlen;
1710 switch ((error =
mac (key, keylen, data, datalen, iv, ivlen, algo, flags,
1711 &result, &resultlen)))
1713 case GPG_ERR_NO_ERROR:
1716 retc->
size = resultlen;
1718 case GPG_ERR_MISSING_KEY:
1719 case GPG_ERR_MISSING_VALUE:
1720 nasl_perror (lexic,
"Syntax: nasl_mac: Missing key, or data argument");
1723 nasl_perror (lexic,
"Internal: %s.", gcry_strerror (error));
1732 return nasl_mac (lexic, GCRY_MAC_CMAC_AES, GCRY_MAC_FLAG_SECURE);
1738 return nasl_mac (lexic, GCRY_MAC_GMAC_AES, GCRY_MAC_FLAG_SECURE);
1744 gcry_cipher_hd_t
hd;
1746 void *data, *key, *iv, *aad;
1747 unsigned char *result = NULL, *auth = NULL;
1748 size_t resultlen, datalen, keylen, ivlen, aadlen, authlen,
len;
1761 if (!data || datalen == 0 || !key || keylen == 0)
1763 nasl_perror (lexic,
"Syntax: crypt_data: Missing data or key argument");
1770 "Syntax: crypt_data: Missing or invalid len argument");
1774 if ((error = gcry_cipher_open (&
hd, cipher, mode, 0)))
1776 nasl_perror (lexic,
"gcry_cipher_open: %s", gcry_strerror (error));
1777 gcry_cipher_close (
hd);
1781 if ((error = gcry_cipher_setkey (
hd, key, keylen)))
1783 nasl_perror (lexic,
"gcry_cipher_setkey: %s", gcry_strerror (error));
1784 gcry_cipher_close (
hd);
1790 if ((error = gcry_cipher_setiv (
hd, iv, ivlen)))
1792 nasl_perror (lexic,
"gcry_cipher_setiv: %s", gcry_strerror (error));
1793 gcry_cipher_close (
hd);
1804 if (cipher == GCRY_CIPHER_ARCFOUR || mode == GCRY_CIPHER_MODE_CCM)
1805 resultlen = datalen;
1806 else if (cipher == GCRY_CIPHER_3DES)
1807 resultlen = ((datalen / 8) + 1) * 8;
1808 else if (cipher == GCRY_CIPHER_AES128)
1809 resultlen = datalen;
1810 else if (cipher == GCRY_CIPHER_AES256)
1811 resultlen = datalen;
1814 nasl_perror (lexic,
"encrypt_data: Unknown cipher %d", cipher);
1815 gcry_cipher_close (
hd);
1820 if (mode == GCRY_CIPHER_MODE_CCM)
1822 u_int64_t params[3];
1823 params[0] = datalen;
1826 if ((error = gcry_cipher_ctl (
hd, GCRYCTL_SET_CCM_LENGTHS, params,
1829 nasl_perror (lexic,
"gcry_cipher_ctl: %s", gcry_strerror (error));
1830 gcry_cipher_close (
hd);
1836 if (!aad || aadlen == 0)
1839 lexic,
"Syntax: crypt_data: Missing or invalid aad value required");
1840 gcry_cipher_close (
hd);
1844 if ((error = gcry_cipher_authenticate (
hd, aad, aadlen)))
1846 nasl_perror (lexic,
"gcry_cipher_authenticate: %s",
1847 gcry_strerror (error));
1848 gcry_cipher_close (
hd);
1853 result = g_malloc0 (resultlen);
1857 gcry_cipher_decrypt (
hd, result, resultlen, data, resultlen)))
1859 g_message (
"gcry_cipher_decrypt: %s", gcry_strerror (error));
1860 gcry_cipher_close (
hd);
1868 gcry_cipher_encrypt (
hd, result, resultlen, data, resultlen)))
1870 g_message (
"gcry_cipher_encrypt: %s", gcry_strerror (error));
1871 gcry_cipher_close (
hd);
1880 auth = g_malloc0 (authlen);
1882 if ((error = gcry_cipher_gettag (
hd, auth, authlen)))
1884 g_message (
"gcry_cipher_gettag: %s", gcry_strerror (error));
1885 gcry_cipher_close (
hd);
1890 gcry_cipher_close (
hd);
1895 memset (&v, 0,
sizeof (v));
1901 memset (&v, 0,
sizeof (v));
1909 gcry_cipher_close (
hd);
1912 retc->
size = resultlen;
1931 gcry_cipher_hd_t
hd;
1942 return crypt_data (lexic, GCRY_CIPHER_ARCFOUR, GCRY_CIPHER_MODE_STREAM,
1958 GCRY_CIPHER_MODE_STREAM,
"open_rc4_cipher");
1964 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC,
1971 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC,
1978 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CTR,
1985 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CTR,
1992 return crypt_data (lexic, GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_CBC,
1999 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_GCM,
2012 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_GCM,
2019 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_GCM,
2026 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM,
2039 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM,
2046 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM,
2053 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CCM,
2066 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CCM,
2073 return crypt_data (lexic, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CCM,
2080 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CCM,
2093 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CCM,
2100 return crypt_data (lexic, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CCM,
2115 void *result, *key, *label, *context, *buf;
2117 size_t resultlen, keylen, labellen, contextlen, buflen, r = 4;
2130 if (!key || keylen <= 0 || !label || labellen <= 0 || !context
2134 lexic,
"Syntax: nasl_smb3kdf: Missing key, label or context argument");
2138 if (lvalue != 128 && lvalue != 256)
2141 "nasl_smb3kdf: lvalue must have a value of 128 or 256");
2145 if ((error = gcry_mac_open (&
hd, GCRY_MAC_HMAC_SHA256, 0, NULL)))
2147 nasl_perror (lexic,
"gcry_mac_open: %s", gcry_strerror (error));
2148 gcry_mac_close (
hd);
2152 if ((error = gcry_mac_setkey (
hd, key, keylen)))
2154 nasl_perror (lexic,
"gcry_mac_setkey: %s", gcry_strerror (error));
2155 gcry_mac_close (
hd);
2159 resultlen = lvalue / 8;
2168 buflen = r + labellen + 1 + contextlen + 4;
2169 buf = g_malloc0 (buflen);
2174 memcpy (tmp, &i, r);
2177 memcpy (tmp, label, labellen);
2178 tmp = tmp + labellen;
2181 memcpy (tmp, context, contextlen);
2182 tmp = tmp + contextlen;
2185 lvalue = htonl (lvalue);
2186 memcpy (tmp, &lvalue, 4);
2188 if ((error = gcry_mac_write (
hd, buf, buflen)))
2190 g_message (
"gcry_mac_write: %s", gcry_strerror (error));
2191 gcry_mac_close (
hd);
2196 result = g_malloc0 (resultlen);
2197 if ((error = gcry_mac_read (
hd, result, &resultlen)))
2199 g_message (
"gcry_mac_read: %s", gcry_strerror (error));
2200 gcry_mac_close (
hd);
2207 gcry_mac_close (
hd);
2210 retc->
size = resultlen;
gpg_err_code_t mac(const char *key, const size_t key_len, const char *data, const size_t data_len, const char *iv, const size_t iv_len, int algo, int flags, char **out, size_t *out_len)
tree_cell * nasl_aes128_ccm_decrypt(lex_ctxt *lexic)
tree_cell * nasl_aes256_ccm_encrypt_auth(lex_ctxt *lexic)
tree_cell * nasl_aes128_gcm_encrypt_auth(lex_ctxt *lexic)
tree_cell * nasl_aes256_ccm_decrypt_auth(lex_ctxt *lexic)
static void delete_cipher_item(int cipher_id)
Free and remove a cipher handler from the cipher table.
tree_cell * nasl_aes_mac_cbc(lex_ctxt *lexic)
tree_cell * nasl_rsa_public_decrypt(lex_ctxt *lexic)
static cipher_table_item_t * cipher_table_item_new(void)
Create a new cipher handler item parameter.
tree_cell * nasl_aes256_gcm_encrypt(lex_ctxt *lexic)
static int set_mpi_retc(tree_cell *retc, gcry_mpi_t mpi)
Sets the return value in retc from the MPI mpi.
tree_cell * nasl_pem_to_rsa(lex_ctxt *lexic)
static tree_cell * nasl_mac(lex_ctxt *lexic, int algo, int flags)
static gcry_mpi_t calc_dh_public(gcry_mpi_t g, gcry_mpi_t prime, gcry_mpi_t priv)
compute the diffie hellman public key.
tree_cell * nasl_aes128_ccm_encrypt_auth(lex_ctxt *lexic)
tree_cell * nasl_aes128_ctr_encrypt(lex_ctxt *lexic)
tree_cell * nasl_aes128_ccm_encrypt(lex_ctxt *lexic)
tree_cell * nasl_aes128_gcm_decrypt_auth(lex_ctxt *lexic)
tree_cell * nasl_rc4_encrypt(lex_ctxt *lexic)
Nasl function to encrypt data with a RC4 cipher. If an hd param exist in the lexix context,...
tree_cell * nasl_close_stream_cipher(lex_ctxt *lexic)
Nasl function to delete a cipher item from the cipher table.
static gcry_sexp_t nasl_sexp_from_privkey(lex_ctxt *lexic, gnutls_x509_privkey_t privkey)
static GList * cipher_table
List of open cipher handler.
tree_cell * nasl_aes_mac_gcm(lex_ctxt *lexic)
static int strip_pkcs1_padding(tree_cell *retc)
Strips PKCS#1 padding from the string in retc.
tree_cell * nasl_rsa_public_encrypt(lex_ctxt *lexic)
static gnutls_x509_privkey_t nasl_load_privkey_param(lex_ctxt *lexic, const char *priv_name, const char *passphrase_name)
Loads a private key from a string.
tree_cell * nasl_aes256_gcm_encrypt_auth(lex_ctxt *lexic)
tree_cell * nasl_rsa_private_decrypt(lex_ctxt *lexic)
static gcry_cipher_hd_t verify_cipher_id(lex_ctxt *lexic, int cipher_id)
Helper function to validate the cipher id.
tree_cell * nasl_aes256_ccm_encrypt(lex_ctxt *lexic)
static int mpi_from_named_parameter(lex_ctxt *lexic, gcry_mpi_t *dest, const char *parameter, const char *function)
Converts a named nasl parameter to a gcry_mpi_t.
tree_cell * nasl_aes256_gcm_decrypt(lex_ctxt *lexic)
static tree_cell * encrypt_stream_data(lex_ctxt *lexic, int cipher, const char *caller_func)
Encrypt data using an existent cipher handle. As the handler is not close, the key is updated to encr...
tree_cell * nasl_aes256_ctr_encrypt(lex_ctxt *lexic)
tree_cell * nasl_open_rc4_cipher(lex_ctxt *lexic)
Nasl function to open RC4 cipher to encrypt a stream of data. The handler can be used to encrypt stre...
tree_cell * nasl_aes256_gcm_decrypt_auth(lex_ctxt *lexic)
tree_cell * nasl_aes128_ccm_decrypt_auth(lex_ctxt *lexic)
tree_cell * nasl_aes128_cbc_encrypt(lex_ctxt *lexic)
static void print_tls_error(lex_ctxt *lexic, char *txt, int err)
Prints a GnuTLS error.
tree_cell * nasl_bn_cmp(lex_ctxt *lexic)
tree_cell * nasl_dsa_do_verify(lex_ctxt *lexic)
tree_cell * nasl_bn_random(lex_ctxt *lexic)
tree_cell * nasl_rsa_sign(lex_ctxt *lexic)
tree_cell * nasl_dh_generate_key(lex_ctxt *lexic)
struct cipher_table_item cipher_table_item_t
tree_cell * nasl_aes256_cbc_encrypt(lex_ctxt *lexic)
static gcry_mpi_t extract_mpi_from_sexp(gcry_sexp_t sexp, const char *token)
Extracts an MPI value from a libgcryt s-expression.
static int find_cipher_hd(cipher_table_item_t *cipher_elem, int *id)
Helper function to find cipher id in the table.
tree_cell * nasl_bf_cbc_encrypt(lex_ctxt *lexic)
static int get_new_cipher_id(void)
Helper function to get a free id for a new cipher.
tree_cell * nasl_aes128_gcm_decrypt(lex_ctxt *lexic)
static int mpi_from_string(lex_ctxt *lexic, gcry_mpi_t *dest, void *data, size_t len, const char *parameter, const char *function)
Converts a string to a gcry_mpi_t.
static gcry_mpi_t calc_dh_key(gcry_mpi_t pub, gcry_mpi_t prime, gcry_mpi_t priv)
Compute the diffie hellman shared secret key.
static int set_retc_from_sexp(tree_cell *retc, gcry_sexp_t sexp, const char *token)
Sets the return value in retc from an sexpression.
static void print_gcrypt_error(lex_ctxt *lexic, char *function, int err)
Prints a libgcrypt error.
tree_cell * nasl_smb3kdf(lex_ctxt *lexic)
Add the SMB3KDF as specified in [SP800-108] section 5.1.
tree_cell * nasl_des_ede_cbc_encrypt(lex_ctxt *lexic)
static tree_cell * nasl_pem_to(lex_ctxt *lexic, int type)
Implements the nasl functions pem_to_rsa and pem_to_dsa.
static tree_cell * nasl_bf_cbc(lex_ctxt *lexic, int enc)
Implements the nasl functions bf_cbc_encrypt and bf_cbc_decrypt.
tree_cell * nasl_aes128_gcm_encrypt(lex_ctxt *lexic)
static tree_cell * crypt_data(lex_ctxt *lexic, int cipher, int mode, int flags)
#define NUM_RSA_PARAMS
Creates a libgcryt s-expression from a GnuTLS private RSA key.
tree_cell * nasl_dsa_do_sign(lex_ctxt *lexic)
tree_cell * nasl_aes256_ccm_decrypt(lex_ctxt *lexic)
static tree_cell * nasl_open_stream_cipher(lex_ctxt *lexic, int cipher, int mode, const char *caller_func)
Open a stream cipher. This function creates a context handle and stores it in a cipher table....
tree_cell * nasl_bf_cbc_decrypt(lex_ctxt *lexic)
tree_cell * nasl_pem_to_dsa(lex_ctxt *lexic)
tree_cell * nasl_dh_compute_key(lex_ctxt *lexic)
void nasl_perror(lex_ctxt *lexic, char *msg,...)
struct struct_lex_ctxt lex_ctxt
char * get_str_var_by_name(lex_ctxt *, const char *)
long int get_int_var_by_name(lex_ctxt *, const char *, int)
int get_var_type_by_name(lex_ctxt *, const char *)
long int get_var_size_by_name(lex_ctxt *, const char *)
tree_cell * alloc_typed_cell(int typ)
int add_var_to_list(nasl_array *a, int i, const anon_nasl_var *v)
struct st_a_nasl_var anon_nasl_var
struct st_nasl_array nasl_array
union TC::@332262321161220155002104006201360276211317150140 x
Struct holding a cipher handler.
union st_a_nasl_var::@154137074032032170165360023270032033276061363156 v