11/29

Dependencies:   mbed-rtos mbed wolfSSL

Fork of sd_duplicator by Titi Asrat

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?

UserRevisionLine numberNew 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