diff --git a/src/ec/ec_p256_m15.c b/src/ec/ec_p256_m15.c index 0771aa9..e8b4efc 100644 --- a/src/ec/ec_p256_m15.c +++ b/src/ec/ec_p256_m15.c @@ -1994,37 +1994,20 @@ p256_mulgen(p256_jacobian *P, const unsigned char *x, size_t xlen) *P = Q; } -static const unsigned char P256_G[] = { - 0x04, 0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, - 0xBC, 0xE6, 0xE5, 0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, - 0x81, 0x2D, 0xEB, 0x33, 0xA0, 0xF4, 0xA1, 0x39, 0x45, 0xD8, - 0x98, 0xC2, 0x96, 0x4F, 0xE3, 0x42, 0xE2, 0xFE, 0x1A, 0x7F, - 0x9B, 0x8E, 0xE7, 0xEB, 0x4A, 0x7C, 0x0F, 0x9E, 0x16, 0x2B, - 0xCE, 0x33, 0x57, 0x6B, 0x31, 0x5E, 0xCE, 0xCB, 0xB6, 0x40, - 0x68, 0x37, 0xBF, 0x51, 0xF5 -}; - -static const unsigned char P256_N[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, - 0xA7, 0x17, 0x9E, 0x84, 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, - 0x25, 0x51 -}; - static const unsigned char * api_generator(int curve, size_t *len) { (void)curve; - *len = sizeof P256_G; - return P256_G; + *len = br_secp256r1.generator_len; + return br_secp256r1.generator; } static const unsigned char * api_order(int curve, size_t *len) { (void)curve; - *len = sizeof P256_N; - return P256_N; + *len = br_secp256r1.order_len; + return br_secp256r1.order; } static size_t diff --git a/src/ec/ec_prime_i15.c b/src/ec/ec_prime_i15.c index a16a144..45750b1 100644 --- a/src/ec/ec_prime_i15.c +++ b/src/ec/ec_prime_i15.c @@ -38,14 +38,14 @@ static const uint16_t P256_P[] = { 0x7FFF, 0x0001 }; -static const uint16_t P256_R2[] = { +static const uint16_t P256_R2[] PROGMEM = { 0x0111, 0x0000, 0x6000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7FFC, 0x7FFF, 0x7FBF, 0x7FFF, 0x7FBF, 0x7FFF, 0x7FFF, 0x7FFF, 0x77FF, 0x7FFF, 0x4FFF, 0x0000 }; -static const uint16_t P256_B[] = { +static const uint16_t P256_B[] PROGMEM = { 0x0111, 0x770C, 0x5EEF, 0x29C4, 0x3EC4, 0x6273, 0x0486, 0x4543, 0x3993, 0x3C01, 0x6B56, 0x212E, 0x57EE, 0x4882, 0x204B, 0x7483, 0x3C16, @@ -60,7 +60,7 @@ static const uint16_t P384_P[] = { 0x7FFF, 0x01FF }; -static const uint16_t P384_R2[] = { +static const uint16_t P384_R2[] PROGMEM = { 0x0199, 0x1000, 0x0000, 0x0000, 0x7FFF, 0x7FFF, 0x0001, 0x0000, 0x0010, 0x0000, 0x0000, 0x0000, 0x7F00, 0x7FFF, 0x01FF, 0x0000, 0x1000, @@ -68,7 +68,7 @@ static const uint16_t P384_R2[] = { 0x0000, 0x0000 }; -static const uint16_t P384_B[] = { +static const uint16_t P384_B[] PROGMEM = { 0x0199, 0x7333, 0x2096, 0x70D1, 0x2310, 0x3020, 0x6197, 0x1464, 0x35BB, 0x70CA, 0x0117, 0x1920, 0x4136, 0x5FC8, 0x5713, 0x4938, 0x7DD2, @@ -85,7 +85,7 @@ static const uint16_t P521_P[] = { 0x7FFF, 0x7FFF, 0x07FF }; -static const uint16_t P521_R2[] = { +static const uint16_t P521_R2[] PROGMEM = { 0x022B, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -94,7 +94,7 @@ static const uint16_t P521_R2[] = { 0x0000, 0x0000, 0x0000 }; -static const uint16_t P521_B[] = { +static const uint16_t P521_B[] PROGMEM = { 0x022B, 0x7002, 0x6A07, 0x751A, 0x228F, 0x71EF, 0x5869, 0x20F4, 0x1EFC, 0x7357, 0x37E0, 0x4EEC, 0x605E, 0x1652, 0x26F6, 0x31FA, 0x4A8F, @@ -655,8 +655,8 @@ point_decode(jacobian *P, const void *src, size_t len, const curve_params *cc) * Convert coordinates and check that the point is valid. */ zlen = ((cc->p[0] + 31) >> 4) * sizeof(uint16_t); - memcpy(Q.c[0], cc->R2, zlen); - memcpy(Q.c[1], cc->b, zlen); + memcpy_P(Q.c[0], cc->R2, zlen); + memcpy_P(Q.c[1], cc->b, zlen); set_one(Q.c[2], cc->p); r &= ~run_code(P, &Q, cc, code_check); return r; diff --git a/src/hash/md5.c b/src/hash/md5.c index 6324726..225645e 100644 --- a/src/hash/md5.c +++ b/src/hash/md5.c @@ -59,7 +59,7 @@ static const uint32_t K[64] PROGMEM = { 0xF7537E82, 0xBD3AF235, 0x2AD7D2BB, 0xEB86D391 }; -static const unsigned char MP[48] = { +static const unsigned char MP_flash[48] PROGMEM = { 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2, 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9 @@ -72,6 +72,8 @@ br_md5_round(const unsigned char *buf, uint32_t *val) uint32_t m[16]; uint32_t a, b, c, d; int i; + uint8_t MP[48]; + memcpy_P(MP, MP_flash, 48); a = val[0]; b = val[1];