首页 > 解决方案 > ATECC608A| 谷歌物联网核心 | 如何将 X 和 Y 整数 big-endian 格式转换为 base64 字符串有效的公钥格式?

问题描述

我正在使用 ATECC608 生成公钥/私钥来验证 IOT 设备和 Google IOT Core。

我能够生成私钥和公钥。私钥存储在 Slot1 上,公共存储在 slot 11 上。我正在使用 atcab_get_pubkey() 返回公钥。如何从大端格式的 X 和 Y 整数进行转换。64 字节到 base64 字符串有效的公钥格式,所以我可以把它放在谷歌物联网云上?我尝试使用 atcab_base64encode() 但它插入了奇怪的字符并且我的公钥在 google iot 核心上无效:

0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A,
0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03,
0x42, 0x00, 0x04};
char buf[128];
size_t buf_len = sizeof(buf);
/* Convert to base 64 */
atcab_base64encode(public_key, ATCA_PUB_KEY_SIZE + sizeof(public_key_x509_header), buf, &buf_len);

for (int i = 0; i < strlen((char *)public_key); i++)
{
printf("0x%02x, ", public_key[i]);
}
printf("\n");
/* Print out the key */
DEBUG_PRINTF("-----BEGIN PUBLIC KEY-----\r\n%s\r\n-----END PUBLIC KEY-----\r\n", buf);
/* Add a null terminator */
buf[buf_len] = 0;
atcab_release();```

Generated public key is: {X:c888157854773773e93b18c34803d417d6d2b3e54f40b451fe0eb8a1ae824feb, Y:8dfb0ab2aca0eca0c296e1579cfbaa58aba2cd8e223c76d43a01197a33ab6d93}

-----BEGIN PUBLIC KEY-----
yIgVeFR3N3PpOxjDSAPUF9bSs+VPQLRR/g64oa6CT+uN+wqyrKDsoMKW4Vec+6pY
q6LNjiI8dtQ6ARl6M6ttk48AhyCPIMSPj4+Pj5+Pr4+PjwAAAAAAAAAAAA==
-----END PUBLIC KEY-----

标签: iot

解决方案


推荐阅读