This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

micro ecc create wrong publickey in windows

My pc server should send information to nrf52832 by ECDH, then I create a dll file from micro-ecc. However,the result in windows is not the same as the result in nrf52832. The following is some test code in VS2013.

// ecdhtest.cpp : Defines the entry point for the console application.

#include "stdafx.h"

#include "uECC.h"

int _tmain(int argc, _TCHAR* argv[]) {

uint8_t privatekey[] = { 
	0x76, 0xA1, 0x3D, 0x5A, 0x97, 0xA4, 0x09, 0x2C,
	0x29, 0xCF, 0x0F, 0xDA, 0xA7, 0x3C, 0x6F, 0xED,
	0x92, 0x93, 0x62, 0xEE, 0x21, 0xF8, 0xA5, 0x40,
	0x53, 0x33, 0x19, 0xB1, 0x82, 0xAE, 0xCE, 0x1C};
static uint8_t  publicket52832[] = { //The result in nrf52832(10040)
	0x80, 0x73, 0xC2, 0xA3, 0xB6, 0xC7, 0xF8, 0x61,
	0xBC, 0x0D, 0xCB, 0x68, 0x3C, 0x83, 0xBD, 0xCE,
	0x48, 0xB8, 0x07, 0x1C, 0x7E, 0xCC, 0x39, 0x38,
	0x7C, 0x9C, 0xC7, 0xBF, 0x91, 0xC0, 0xCE, 0x25,
	0xF1, 0xD2, 0xC2, 0x0F, 0x30, 0x4B, 0x98, 0xC4,
	0x74, 0xCF, 0xDB, 0x01, 0x5C, 0xC6, 0xD4, 0x6D,
	0x19, 0x90, 0x30, 0x0A, 0x40, 0xA0, 0xBD, 0xC2,
	0x2E, 0x9C, 0xAA, 0x8E, 0x46, 0xC7, 0x92, 0x3D};
uint8_t publickey[64];

uECC_compute_public_key(privatekey, publickey, uECC_secp256r1());
for (int i = 0; i <64; i++)
{
	printf(" %02X", publickey[i]);
	if (i % 8 == 7)
		printf("\r\n");
}
getchar();
return 0;

}

The result in windows:

7A 93 1E D8 1B 4A 32 29 88 7A A5 3C A2 F9 BA 3F B4 83 2A DB 0B EF E3 F3 2A E4 FA 9D B1 38 00 99 A4 4F 7D 1D F4 98 90 E4 9B 10 0C 4D D8 95 45 A9 90 34 F8 95 A3 A6 31 79 D2 BD 1A 19 FF E1 BB E0

The different result confused me, why?

Parents
  • There is a define statement in uEcc.h(line48-line50) : #ifndef uECC_VLI_NATIVE_LITTLE_ENDIAN #define uECC_VLI_NATIVE_LITTLE_ENDIAN 0 #endif When we compile codes in Keil5, it's right. However, in windows, it doesn't work. If we change the value of uECC_VLI_NATIVE_LITTLE_ENDIAN from 0 to 1, it works well ,at least in VS2013. So what we should do is :

    #ifndef uECC_VLI_NATIVE_LITTLE_ENDIAN #define uECC_VLI_NATIVE_LITTLE_ENDIAN 1 #endif

Reply
  • There is a define statement in uEcc.h(line48-line50) : #ifndef uECC_VLI_NATIVE_LITTLE_ENDIAN #define uECC_VLI_NATIVE_LITTLE_ENDIAN 0 #endif When we compile codes in Keil5, it's right. However, in windows, it doesn't work. If we change the value of uECC_VLI_NATIVE_LITTLE_ENDIAN from 0 to 1, it works well ,at least in VS2013. So what we should do is :

    #ifndef uECC_VLI_NATIVE_LITTLE_ENDIAN #define uECC_VLI_NATIVE_LITTLE_ENDIAN 1 #endif

Children
No Data
Related