11/29
Dependencies: mbed-rtos mbed wolfSSL
Fork of sd_duplicator by
main.cpp@4:2bcb836ba0de, 2016-12-13 (annotated)
- Committer:
- jlharper
- Date:
- Tue Dec 13 05:54:12 2016 +0000
- Revision:
- 4:2bcb836ba0de
- Parent:
- 3:57cbfc7d9b62
everything works. signing stilll needs to be verified
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jlharper | 4:2bcb836ba0de | 1 | |
tmasrat | 0:b453be3137c7 | 2 | #include "mbed.h" |
jlharper | 1:7827a11dc627 | 3 | #include "SDBlock.h" |
jlharper | 4:2bcb836ba0de | 4 | #include <wolfssl/wolfcrypt/ecc.h> |
jlharper | 1:7827a11dc627 | 5 | |
jlharper | 1:7827a11dc627 | 6 | DigitalOut led1(LED1); |
jlharper | 2:166e98bcd1cc | 7 | DigitalOut led4(LED4); |
jlharper | 3:57cbfc7d9b62 | 8 | |
jlharper | 3:57cbfc7d9b62 | 9 | uint8_t hash[32]; |
jlharper | 3:57cbfc7d9b62 | 10 | uint8_t buffer[512]; |
jlharper | 4:2bcb836ba0de | 11 | uint8_t signature[5]; |
jlharper | 4:2bcb836ba0de | 12 | Sha256 h; |
jlharper | 4:2bcb836ba0de | 13 | ecc_key key; |
jlharper | 4:2bcb836ba0de | 14 | RNG rng; |
jlharper | 4:2bcb836ba0de | 15 | |
jlharper | 4:2bcb836ba0de | 16 | byte sig[512]; // will hold generated signature |
jlharper | 4:2bcb836ba0de | 17 | |
jlharper | 3:57cbfc7d9b62 | 18 | |
jlharper | 1:7827a11dc627 | 19 | int main() |
jlharper | 1:7827a11dc627 | 20 | { |
jlharper | 1:7827a11dc627 | 21 | SDBlock original(p5, p6, p7, p22); |
jlharper | 1:7827a11dc627 | 22 | const int x = original.disk_initialize(); |
jlharper | 4:2bcb836ba0de | 23 | printf("************\r\n"); |
jlharper | 4:2bcb836ba0de | 24 | printf("%d\r\n", x); |
jlharper | 3:57cbfc7d9b62 | 25 | SDBlock duplicate(p11, p12, p13, p21); |
jlharper | 3:57cbfc7d9b62 | 26 | const int z = duplicate.disk_initialize(); |
jlharper | 4:2bcb836ba0de | 27 | printf("%d\r\n", z); |
jlharper | 1:7827a11dc627 | 28 | const int y = original.disk_status(); |
jlharper | 4:2bcb836ba0de | 29 | printf("original status: %d\r\n", y); |
jlharper | 3:57cbfc7d9b62 | 30 | const int t = duplicate.disk_status(); |
jlharper | 4:2bcb836ba0de | 31 | printf("duplicate status: %d\r\n", t); |
jlharper | 1:7827a11dc627 | 32 | //s is sector |
jlharper | 1:7827a11dc627 | 33 | const uint32_t s = original.disk_sectors(); |
jlharper | 4:2bcb836ba0de | 34 | printf("sector size %d\r\n", s); |
jlharper | 4:2bcb836ba0de | 35 | printf("buffer %d\r\n", buffer); |
jlharper | 4:2bcb836ba0de | 36 | |
jlharper | 4:2bcb836ba0de | 37 | wc_InitSha256(&h); |
jlharper | 3:57cbfc7d9b62 | 38 | |
jlharper | 3:57cbfc7d9b62 | 39 | |
jlharper | 1:7827a11dc627 | 40 | //start time |
jlharper | 3:57cbfc7d9b62 | 41 | //time_t time_start = time(NULL); |
jlharper | 4:2bcb836ba0de | 42 | for (int i = 0; i <= 99; ++i) |
jlharper | 1:7827a11dc627 | 43 | { |
jlharper | 1:7827a11dc627 | 44 | const int r = original.disk_read(buffer, i, 1); |
jlharper | 1:7827a11dc627 | 45 | if (r !=0) |
jlharper | 1:7827a11dc627 | 46 | { |
jlharper | 4:2bcb836ba0de | 47 | printf("%d\r\n", r); |
jlharper | 1:7827a11dc627 | 48 | } |
jlharper | 3:57cbfc7d9b62 | 49 | printf("disk read "); |
jlharper | 3:57cbfc7d9b62 | 50 | /* const int rd2 = duplicate.disk_write(buffer, i, 1); |
jlharper | 1:7827a11dc627 | 51 | if (rd2 != 0) |
jlharper | 1:7827a11dc627 | 52 | { |
jlharper | 1:7827a11dc627 | 53 | printf("%d\n", rd2); |
jlharper | 3:57cbfc7d9b62 | 54 | }*/ |
jlharper | 4:2bcb836ba0de | 55 | //update hash |
jlharper | 4:2bcb836ba0de | 56 | wc_Sha256Update(&h, buffer, 512); |
jlharper | 4:2bcb836ba0de | 57 | printf("digest updated, block %d \r\n",i); |
jlharper | 3:57cbfc7d9b62 | 58 | |
jlharper | 3:57cbfc7d9b62 | 59 | /* if(i % 1000 == 0) |
jlharper | 1:7827a11dc627 | 60 | { |
jlharper | 3:57cbfc7d9b62 | 61 | status update |
jlharper | 3:57cbfc7d9b62 | 62 | double percentage = (i/s) * 100; |
jlharper | 1:7827a11dc627 | 63 | printf("percent copied: %d\n", percentage); |
jlharper | 3:57cbfc7d9b62 | 64 | time elapsed |
jlharper | 1:7827a11dc627 | 65 | time_t time_current = time(NULL); |
jlharper | 1:7827a11dc627 | 66 | int time_working = time_start - time_current; |
jlharper | 1:7827a11dc627 | 67 | double speed = (i * 512) / time_working; |
jlharper | 1:7827a11dc627 | 68 | |
jlharper | 1:7827a11dc627 | 69 | printf("speed (bytes/s): %d\n", speed); |
jlharper | 3:57cbfc7d9b62 | 70 | } */ |
jlharper | 4:2bcb836ba0de | 71 | }//end of for |
jlharper | 4:2bcb836ba0de | 72 | wc_Sha256Final(&h,hash); |
jlharper | 4:2bcb836ba0de | 73 | //sign the hash |
jlharper | 4:2bcb836ba0de | 74 | int ret; |
jlharper | 4:2bcb836ba0de | 75 | uint32_t sigSz; |
jlharper | 4:2bcb836ba0de | 76 | wc_InitRng(&rng); |
jlharper | 4:2bcb836ba0de | 77 | wc_ecc_init(&key); |
jlharper | 4:2bcb836ba0de | 78 | |
jlharper | 4:2bcb836ba0de | 79 | |
jlharper | 4:2bcb836ba0de | 80 | //print the hash |
jlharper | 3:57cbfc7d9b62 | 81 | printf("hash: "); |
jlharper | 3:57cbfc7d9b62 | 82 | for(int i = 0; i < 32; ++i) |
jlharper | 3:57cbfc7d9b62 | 83 | printf("%02x", hash[i]); |
jlharper | 4:2bcb836ba0de | 84 | printf("\r\n"); |
jlharper | 4:2bcb836ba0de | 85 | |
jlharper | 4:2bcb836ba0de | 86 | //print signature |
jlharper | 4:2bcb836ba0de | 87 | printf("hash: "); |
jlharper | 4:2bcb836ba0de | 88 | //byte digest[] = hash; |
jlharper | 4:2bcb836ba0de | 89 | //int wc_ecc_sign_hash(const byte* hash, uint32_t len(hash), byte* sig, word32 *outlen, RNG* rng, |
jlharper | 4:2bcb836ba0de | 90 | //ecc_key* key); |
jlharper | 4:2bcb836ba0de | 91 | uint32_t hashsize = 8; |
jlharper | 4:2bcb836ba0de | 92 | wc_InitRng(&rng); // initialize rng |
jlharper | 4:2bcb836ba0de | 93 | wc_ecc_init(&key); // initialize key |
jlharper | 4:2bcb836ba0de | 94 | wc_ecc_make_key(&rng, 32, &key); // make public/private key pair |
jlharper | 4:2bcb836ba0de | 95 | sigSz = sizeof(sig); |
jlharper | 4:2bcb836ba0de | 96 | ret = wc_ecc_sign_hash(hash, hashsize, sig, &sigSz,&rng, &key); |
tmasrat | 0:b453be3137c7 | 97 | |
jlharper | 4:2bcb836ba0de | 98 | printf("ret %i \r\n",ret); |
jlharper | 4:2bcb836ba0de | 99 | |
jlharper | 4:2bcb836ba0de | 100 | if ( ret != 0 ) |
jlharper | 4:2bcb836ba0de | 101 | { |
jlharper | 4:2bcb836ba0de | 102 | // error generating message signature |
jlharper | 4:2bcb836ba0de | 103 | printf("Error generating signature/r/n"); |
jlharper | 4:2bcb836ba0de | 104 | } |
jlharper | 4:2bcb836ba0de | 105 | printf("finished\r\n"); |
jlharper | 4:2bcb836ba0de | 106 | |
jlharper | 4:2bcb836ba0de | 107 | for(int i = 0; i < 512; ++i) |
jlharper | 4:2bcb836ba0de | 108 | printf("%02x", sig[i]); |
jlharper | 4:2bcb836ba0de | 109 | printf("\r\n"); |
jlharper | 4:2bcb836ba0de | 110 | |
jlharper | 3:57cbfc7d9b62 | 111 | //when finished do this light pattern |
jlharper | 3:57cbfc7d9b62 | 112 | while(true) |
jlharper | 3:57cbfc7d9b62 | 113 | { |
jlharper | 3:57cbfc7d9b62 | 114 | led1=0; |
jlharper | 3:57cbfc7d9b62 | 115 | led4=1; |
jlharper | 3:57cbfc7d9b62 | 116 | wait(.5); |
jlharper | 3:57cbfc7d9b62 | 117 | led1=1; |
jlharper | 3:57cbfc7d9b62 | 118 | led4=0; |
jlharper | 3:57cbfc7d9b62 | 119 | wait(.5); |
jlharper | 3:57cbfc7d9b62 | 120 | } |
jlharper | 3:57cbfc7d9b62 | 121 | }//end main |