From b7f79d8fdc77bbe4921378eb014a2f4ebb39585e Mon Sep 17 00:00:00 2001 From: Federico Di Gregorio Date: Wed, 28 Jun 2023 14:55:03 +0200 Subject: [PATCH] fix: input length for ECCX08.ecSign() is 32 bytes When using ECCX08.ecSign() the input buffer should be exactly 32 bytes long. The old example worked only because the signature was generated and then checked on the first 32 bytes of the 64 bytes buffer. --- examples/ECCX08Signing/ECCX08Signing.ino | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/examples/ECCX08Signing/ECCX08Signing.ino b/examples/ECCX08Signing/ECCX08Signing.ino index fe92d3e..4f5ba46 100644 --- a/examples/ECCX08Signing/ECCX08Signing.ino +++ b/examples/ECCX08Signing/ECCX08Signing.ino @@ -6,7 +6,7 @@ is printed to the Serial Monitor. Then the signature is verified using the public key of the slot. - NOTE: the input data must be 64 bytes in length! + NOTE: the input data must be 32 bytes in length! Circuit: - MKR board with ECC508 or ECC608 on board @@ -17,11 +17,9 @@ #include -const byte input[64] = { +const byte input[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; const int slot = 0; @@ -57,7 +55,7 @@ void setup() { Serial.print(" is: "); printBufferHex(publicKey, sizeof(publicKey)); - // calculate the signature, input MUST be 64-byte array + // calculate the signature, input MUST be 32-byte array byte signature[64]; ECCX08.ecSign(slot, input, signature);