--- /dev/null
+//-----------------------------------------------------------------------------
+// Copyright (C) 2018 Merlok
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// asn.1 utils
+//-----------------------------------------------------------------------------
+
+#include "asn1utils.h"
+#include <mbedtls/asn1.h>
+
+int ecdsa_asn1_get_signature(uint8_t *signature, size_t signaturelen, uint8_t *rval, uint8_t *sval) {
+ if (!signature || !signaturelen || !rval || !sval)
+ return 1;
+
+ int res = 0;
+ unsigned char *p = signature;
+ const unsigned char *end = p + signaturelen;
+ size_t len;
+ mbedtls_mpi xmpi;
+
+ if ((res = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) == 0) {
+ mbedtls_mpi_init(&xmpi);
+ res = mbedtls_asn1_get_mpi(&p, end, &xmpi);
+ if (res) {
+ mbedtls_mpi_free(&xmpi);
+ goto exit;
+ }
+
+ res = mbedtls_mpi_write_binary(&xmpi, rval, 32);
+ mbedtls_mpi_free(&xmpi);
+ if (res)
+ goto exit;
+
+ mbedtls_mpi_init(&xmpi);
+ res = mbedtls_asn1_get_mpi(&p, end, &xmpi);
+ if (res) {
+ mbedtls_mpi_free(&xmpi);
+ goto exit;
+ }
+
+ res = mbedtls_mpi_write_binary(&xmpi, sval, 32);
+ mbedtls_mpi_free(&xmpi);
+ if (res)
+ goto exit;
+
+ // check size
+ if (end != p)
+ return 2;
+ }
+
+exit:
+ return res;
+}
+
+int asn1_print(uint8_t *asn1buf, int level) {
+
+ return 0;
+}
+
+