USB-3 storage device controller programming using embedded C
Budget: ₹250,000 – ₹500,000 INR
Objectives to achieve
o USB storage device should contain 3 types of partitions: Out of these 3 types of partitions only 2 will be visible to the host/machine after authentication. (By default no partition/volume/disk will show on any host/machine that the USB mass storage device is connected to.)
1. Private partition1 (Pp1): Private partition1 will become visible to the host/machine only after a code (IOCTL) with a PIN to the controller which will be compared to the PIN stored in Meta Data Partition. If authentication is successful then Private partition1 will become visible to the host/machine.
2. Private partition2 (Pp2): Private partition2 will become visible to the host/machine only after an application sends another code (IOCTL) with a 2nd PIN to the controller which will be compared to the 2nd PIN stored in Meta Data Partition. If authentication is successful then Private partition2 will become visible to the host/machine.
3. Meta Data Partition: This is a partition that is only visible to the controller to store data/metadata like pin, encryption keys etc.
o Every read & write operation destined for Pp1 & Pp2 partitions should automatically be encrypted/decrypted via the controller (encryption algorithm can be simply Xoring the data).
o The key for encryption/decryption & both PINs should be changeable in Meta Data Partition.
o IOCTLS should be used to mark any partition as PP1 or PP2
o Once the partition is visible to the host/machine (after authentication) it will behave like normal volumes & its PP1 or PP2 properties should persist even if partition is formatted.
o USB storage device should contain 3 types of partitions: Out of these 3 types of partitions only 2 will be visible to the host/machine after authentication. (By default no partition/volume/disk will show on any host/machine that the USB mass storage device is connected to.)
1. Private partition1 (Pp1): Private partition1 will become visible to the host/machine only after a code (IOCTL) with a PIN to the controller which will be compared to the PIN stored in Meta Data Partition. If authentication is successful then Private partition1 will become visible to the host/machine.
2. Private partition2 (Pp2): Private partition2 will become visible to the host/machine only after an application sends another code (IOCTL) with a 2nd PIN to the controller which will be compared to the 2nd PIN stored in Meta Data Partition. If authentication is successful then Private partition2 will become visible to the host/machine.
3. Meta Data Partition: This is a partition that is only visible to the controller to store data/metadata like pin, encryption keys etc.
o Every read & write operation destined for Pp1 & Pp2 partitions should automatically be encrypted/decrypted via the controller (encryption algorithm can be simply Xoring the data).
o The key for encryption/decryption & both PINs should be changeable in Meta Data Partition.
o IOCTLS should be used to mark any partition as PP1 or PP2
o Once the partition is visible to the host/machine (after authentication) it will behave like normal volumes & its PP1 or PP2 properties should persist even if partition is formatted.