summaryrefslogtreecommitdiff
path: root/lib/pk.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pk.c')
-rw-r--r--lib/pk.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/lib/pk.c b/lib/pk.c
index 4f3d48faa8..7cd7a0e26d 100644
--- a/lib/pk.c
+++ b/lib/pk.c
@@ -1059,6 +1059,71 @@ int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params,
}
+int _gnutls_params_get_gost_raw(const gnutls_pk_params_st* params,
+ gnutls_ecc_curve_t * curve,
+ gnutls_digest_algorithm_t * digest,
+ gnutls_gost_paramset_t * paramset,
+ gnutls_datum_t * x,
+ gnutls_datum_t * y,
+ gnutls_datum_t * k,
+ unsigned int flags)
+{
+ int ret;
+ mpi_dprint_func dprint = _gnutls_mpi_dprint_lz;
+
+ if (flags & GNUTLS_EXPORT_FLAG_NO_LZ)
+ dprint = _gnutls_mpi_dprint;
+
+
+ if (params == NULL) {
+ gnutls_assert();
+ return GNUTLS_E_INVALID_REQUEST;
+ }
+
+ if (curve)
+ *curve = params->curve;
+
+ if (digest)
+ *digest = _gnutls_gost_digest(params->algo);
+
+ if (paramset)
+ *paramset = params->gost_params;
+
+ /* X */
+ if (x) {
+ ret = dprint(params->params[GOST_X], x);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+ }
+
+ /* Y */
+ if (y) {
+ ret = dprint(params->params[GOST_Y], y);
+ if (ret < 0) {
+ gnutls_assert();
+ _gnutls_free_datum(x);
+ return ret;
+ }
+ }
+
+
+ /* K */
+ if (k) {
+ ret = dprint(params->params[GOST_K], k);
+ if (ret < 0) {
+ gnutls_assert();
+ _gnutls_free_datum(x);
+ _gnutls_free_datum(y);
+ return ret;
+ }
+ }
+
+ return 0;
+
+}
+
int
pk_hash_data(gnutls_pk_algorithm_t pk, const mac_entry_st * hash,
gnutls_pk_params_st * params,