]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/crypto/asn1utils.c
move from polarssl to mbedtls (#708)
[proxmark3-svn] / client / crypto / asn1utils.c
diff --git a/client/crypto/asn1utils.c b/client/crypto/asn1utils.c
new file mode 100644 (file)
index 0000000..2a3fe69
--- /dev/null
@@ -0,0 +1,63 @@
+//-----------------------------------------------------------------------------
+// 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;
+}
+
+
Impressum, Datenschutz