micro-ECC for mbed, ported from GCC version from Github,
Dependents: mbed_microECC Wallet_v1
types.h@0:b6fdeddc0bc9, 2017-09-07 (annotated)
- Committer:
- allankliu
- Date:
- Thu Sep 07 12:10:11 2017 +0000
- Revision:
- 0:b6fdeddc0bc9
Init version, ported from GCC version of uECC of Github. Assembly optimization for thumb2 is disabled.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
allankliu | 0:b6fdeddc0bc9 | 1 | /* Copyright 2015, Kenneth MacKay. Licensed under the BSD 2-clause license. */ |
allankliu | 0:b6fdeddc0bc9 | 2 | |
allankliu | 0:b6fdeddc0bc9 | 3 | #ifndef _UECC_TYPES_H_ |
allankliu | 0:b6fdeddc0bc9 | 4 | #define _UECC_TYPES_H_ |
allankliu | 0:b6fdeddc0bc9 | 5 | |
allankliu | 0:b6fdeddc0bc9 | 6 | #ifndef uECC_PLATFORM |
allankliu | 0:b6fdeddc0bc9 | 7 | #if __AVR__ |
allankliu | 0:b6fdeddc0bc9 | 8 | #define uECC_PLATFORM uECC_avr |
allankliu | 0:b6fdeddc0bc9 | 9 | #elif defined(__thumb2__) || defined(_M_ARMT) /* I think MSVC only supports Thumb-2 targets */ |
allankliu | 0:b6fdeddc0bc9 | 10 | #define uECC_PLATFORM uECC_arm_thumb2 |
allankliu | 0:b6fdeddc0bc9 | 11 | #elif defined(__thumb__) |
allankliu | 0:b6fdeddc0bc9 | 12 | #define uECC_PLATFORM uECC_arm_thumb |
allankliu | 0:b6fdeddc0bc9 | 13 | #elif defined(__arm__) || defined(_M_ARM) |
allankliu | 0:b6fdeddc0bc9 | 14 | #define uECC_PLATFORM uECC_arm |
allankliu | 0:b6fdeddc0bc9 | 15 | #elif defined(__aarch64__) |
allankliu | 0:b6fdeddc0bc9 | 16 | #define uECC_PLATFORM uECC_arm64 |
allankliu | 0:b6fdeddc0bc9 | 17 | #elif defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__I86__) |
allankliu | 0:b6fdeddc0bc9 | 18 | #define uECC_PLATFORM uECC_x86 |
allankliu | 0:b6fdeddc0bc9 | 19 | #elif defined(__amd64__) || defined(_M_X64) |
allankliu | 0:b6fdeddc0bc9 | 20 | #define uECC_PLATFORM uECC_x86_64 |
allankliu | 0:b6fdeddc0bc9 | 21 | #else |
allankliu | 0:b6fdeddc0bc9 | 22 | #define uECC_PLATFORM uECC_arch_other |
allankliu | 0:b6fdeddc0bc9 | 23 | #endif |
allankliu | 0:b6fdeddc0bc9 | 24 | #endif |
allankliu | 0:b6fdeddc0bc9 | 25 | |
allankliu | 0:b6fdeddc0bc9 | 26 | #ifndef uECC_ARM_USE_UMAAL |
allankliu | 0:b6fdeddc0bc9 | 27 | #if (uECC_PLATFORM == uECC_arm) && (__ARM_ARCH >= 6) |
allankliu | 0:b6fdeddc0bc9 | 28 | #define uECC_ARM_USE_UMAAL 1 |
allankliu | 0:b6fdeddc0bc9 | 29 | #elif (uECC_PLATFORM == uECC_arm_thumb2) && (__ARM_ARCH >= 6) && !__ARM_ARCH_7M__ |
allankliu | 0:b6fdeddc0bc9 | 30 | #define uECC_ARM_USE_UMAAL 1 |
allankliu | 0:b6fdeddc0bc9 | 31 | #else |
allankliu | 0:b6fdeddc0bc9 | 32 | #define uECC_ARM_USE_UMAAL 0 |
allankliu | 0:b6fdeddc0bc9 | 33 | #endif |
allankliu | 0:b6fdeddc0bc9 | 34 | #endif |
allankliu | 0:b6fdeddc0bc9 | 35 | |
allankliu | 0:b6fdeddc0bc9 | 36 | #ifndef uECC_WORD_SIZE |
allankliu | 0:b6fdeddc0bc9 | 37 | #if uECC_PLATFORM == uECC_avr |
allankliu | 0:b6fdeddc0bc9 | 38 | #define uECC_WORD_SIZE 1 |
allankliu | 0:b6fdeddc0bc9 | 39 | #elif (uECC_PLATFORM == uECC_x86_64 || uECC_PLATFORM == uECC_arm64) |
allankliu | 0:b6fdeddc0bc9 | 40 | #define uECC_WORD_SIZE 8 |
allankliu | 0:b6fdeddc0bc9 | 41 | #else |
allankliu | 0:b6fdeddc0bc9 | 42 | #define uECC_WORD_SIZE 4 |
allankliu | 0:b6fdeddc0bc9 | 43 | #endif |
allankliu | 0:b6fdeddc0bc9 | 44 | #endif |
allankliu | 0:b6fdeddc0bc9 | 45 | |
allankliu | 0:b6fdeddc0bc9 | 46 | #if (uECC_WORD_SIZE != 1) && (uECC_WORD_SIZE != 4) && (uECC_WORD_SIZE != 8) |
allankliu | 0:b6fdeddc0bc9 | 47 | #error "Unsupported value for uECC_WORD_SIZE" |
allankliu | 0:b6fdeddc0bc9 | 48 | #endif |
allankliu | 0:b6fdeddc0bc9 | 49 | |
allankliu | 0:b6fdeddc0bc9 | 50 | #if ((uECC_PLATFORM == uECC_avr) && (uECC_WORD_SIZE != 1)) |
allankliu | 0:b6fdeddc0bc9 | 51 | #pragma message ("uECC_WORD_SIZE must be 1 for AVR") |
allankliu | 0:b6fdeddc0bc9 | 52 | #undef uECC_WORD_SIZE |
allankliu | 0:b6fdeddc0bc9 | 53 | #define uECC_WORD_SIZE 1 |
allankliu | 0:b6fdeddc0bc9 | 54 | #endif |
allankliu | 0:b6fdeddc0bc9 | 55 | |
allankliu | 0:b6fdeddc0bc9 | 56 | #if ((uECC_PLATFORM == uECC_arm || uECC_PLATFORM == uECC_arm_thumb || \ |
allankliu | 0:b6fdeddc0bc9 | 57 | uECC_PLATFORM == uECC_arm_thumb2) && \ |
allankliu | 0:b6fdeddc0bc9 | 58 | (uECC_WORD_SIZE != 4)) |
allankliu | 0:b6fdeddc0bc9 | 59 | #pragma message ("uECC_WORD_SIZE must be 4 for ARM") |
allankliu | 0:b6fdeddc0bc9 | 60 | #undef uECC_WORD_SIZE |
allankliu | 0:b6fdeddc0bc9 | 61 | #define uECC_WORD_SIZE 4 |
allankliu | 0:b6fdeddc0bc9 | 62 | #endif |
allankliu | 0:b6fdeddc0bc9 | 63 | |
allankliu | 0:b6fdeddc0bc9 | 64 | #if defined(__SIZEOF_INT128__) || ((__clang_major__ * 100 + __clang_minor__) >= 302) |
allankliu | 0:b6fdeddc0bc9 | 65 | #define SUPPORTS_INT128 1 |
allankliu | 0:b6fdeddc0bc9 | 66 | #else |
allankliu | 0:b6fdeddc0bc9 | 67 | #define SUPPORTS_INT128 0 |
allankliu | 0:b6fdeddc0bc9 | 68 | #endif |
allankliu | 0:b6fdeddc0bc9 | 69 | |
allankliu | 0:b6fdeddc0bc9 | 70 | typedef int8_t wordcount_t; |
allankliu | 0:b6fdeddc0bc9 | 71 | typedef int16_t bitcount_t; |
allankliu | 0:b6fdeddc0bc9 | 72 | typedef int8_t cmpresult_t; |
allankliu | 0:b6fdeddc0bc9 | 73 | |
allankliu | 0:b6fdeddc0bc9 | 74 | #if (uECC_WORD_SIZE == 1) |
allankliu | 0:b6fdeddc0bc9 | 75 | |
allankliu | 0:b6fdeddc0bc9 | 76 | typedef uint8_t uECC_word_t; |
allankliu | 0:b6fdeddc0bc9 | 77 | typedef uint16_t uECC_dword_t; |
allankliu | 0:b6fdeddc0bc9 | 78 | |
allankliu | 0:b6fdeddc0bc9 | 79 | #define HIGH_BIT_SET 0x80 |
allankliu | 0:b6fdeddc0bc9 | 80 | #define uECC_WORD_BITS 8 |
allankliu | 0:b6fdeddc0bc9 | 81 | #define uECC_WORD_BITS_SHIFT 3 |
allankliu | 0:b6fdeddc0bc9 | 82 | #define uECC_WORD_BITS_MASK 0x07 |
allankliu | 0:b6fdeddc0bc9 | 83 | |
allankliu | 0:b6fdeddc0bc9 | 84 | #elif (uECC_WORD_SIZE == 4) |
allankliu | 0:b6fdeddc0bc9 | 85 | |
allankliu | 0:b6fdeddc0bc9 | 86 | typedef uint32_t uECC_word_t; |
allankliu | 0:b6fdeddc0bc9 | 87 | typedef uint64_t uECC_dword_t; |
allankliu | 0:b6fdeddc0bc9 | 88 | |
allankliu | 0:b6fdeddc0bc9 | 89 | #define HIGH_BIT_SET 0x80000000 |
allankliu | 0:b6fdeddc0bc9 | 90 | #define uECC_WORD_BITS 32 |
allankliu | 0:b6fdeddc0bc9 | 91 | #define uECC_WORD_BITS_SHIFT 5 |
allankliu | 0:b6fdeddc0bc9 | 92 | #define uECC_WORD_BITS_MASK 0x01F |
allankliu | 0:b6fdeddc0bc9 | 93 | |
allankliu | 0:b6fdeddc0bc9 | 94 | #elif (uECC_WORD_SIZE == 8) |
allankliu | 0:b6fdeddc0bc9 | 95 | |
allankliu | 0:b6fdeddc0bc9 | 96 | typedef uint64_t uECC_word_t; |
allankliu | 0:b6fdeddc0bc9 | 97 | #if SUPPORTS_INT128 |
allankliu | 0:b6fdeddc0bc9 | 98 | typedef unsigned __int128 uECC_dword_t; |
allankliu | 0:b6fdeddc0bc9 | 99 | #endif |
allankliu | 0:b6fdeddc0bc9 | 100 | |
allankliu | 0:b6fdeddc0bc9 | 101 | #define HIGH_BIT_SET 0x8000000000000000ull |
allankliu | 0:b6fdeddc0bc9 | 102 | #define uECC_WORD_BITS 64 |
allankliu | 0:b6fdeddc0bc9 | 103 | #define uECC_WORD_BITS_SHIFT 6 |
allankliu | 0:b6fdeddc0bc9 | 104 | #define uECC_WORD_BITS_MASK 0x03F |
allankliu | 0:b6fdeddc0bc9 | 105 | |
allankliu | 0:b6fdeddc0bc9 | 106 | #endif /* uECC_WORD_SIZE */ |
allankliu | 0:b6fdeddc0bc9 | 107 | |
allankliu | 0:b6fdeddc0bc9 | 108 | #endif /* _UECC_TYPES_H_ */ |