u8 Read_ReadWriteStatusUncryptedVolume_u8 (void)
{
  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }
  return (StickConfiguration_st.ReadWriteFlagUncryptedVolume_u8);
}
u8 Write_ReadWriteStatusUncryptedVolume_u8 (u8 NewStatus_u8)
{
  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }

  StickConfiguration_st.ReadWriteFlagUncryptedVolume_u8 = NewStatus_u8;

  WriteStickConfigurationToUserPage ();

  return (TRUE);
}
Exemplo n.º 3
0
u8 ClearStickKeysNotInitatedToFlash (void)
{
    // If configuration not found then init it
    if (FALSE == ReadStickConfigurationFromUserPage ())
    {
        InitStickConfigurationToUserPage_u8 ();
    }

    // CI_LocalPrintf ("Clear: Stick keys not initiated\r\n");

    StickConfiguration_st.StickKeysNotInitiated_u8 = FALSE;

    WriteStickConfigurationToUserPage ();

    return (TRUE);
}
u8 SetSdCardNotFilledWithRandomCharsToFlash (void)
{
  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }

  CI_LocalPrintf ("Set new SD card *** not *** filled with random chars\r\n");

  StickConfiguration_st.SDFillWithRandomChars_u8 &= 0xFE;     // Clear the "card with random chars filled"  bit

  WriteStickConfigurationToUserPage ();

  return (TRUE);
}
u8 SetSdCardFilledWithRandomCharsToFlash (void)
{
  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }

  CI_LocalPrintf ("Set new SD card filled with random chars\r\n");

  StickConfiguration_st.SDFillWithRandomChars_u8 |= 0x01;     // Set the "SD card filled with randoms"  bit

  WriteStickConfigurationToUserPage ();

  return (TRUE);
}
u8 ClearNewSdCardFoundToFlash (void)
{
  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }

  CI_LocalPrintf ("Clear new SD card found\r\n");

  StickConfiguration_st.NewSDCardFound_u8 &= 0xFE;     // Clear the "new SD card found"  bit

  WriteStickConfigurationToUserPage ();

  return (TRUE);
}
void SendStickStatusToHID (typeStick20Configuration_st *Status_st)
{
  cid_t *cid;

  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }

  memcpy (Status_st,&StickConfiguration_st,sizeof (typeStick20Configuration_st)); // Not the retry counter and sc serial no

// Set the actual volume status
  Status_st->VolumeActiceFlag_u8 = 0;

  if (TRUE == GetSdUncryptedCardEnableState ())
  {
    Status_st->VolumeActiceFlag_u8 |= (1 << SD_UNCRYPTED_VOLUME_BIT_PLACE);
  }

// Only 1 cypted volume could be active
  if (TRUE == GetSdEncryptedCardEnableState ())
  {
    if (TRUE == GetSdEncryptedHiddenState ())
    {
      Status_st->VolumeActiceFlag_u8 |= (1 << SD_HIDDEN_VOLUME_BIT_PLACE);
    }
    else
    {
      Status_st->VolumeActiceFlag_u8 |= (1 << SD_CRYPTED_VOLUME_BIT_PLACE);
    }
  }

// Read actual SD id
  cid = (cid_t *) GetSdCidInfo ();
  Status_st->ActiveSD_CardID_u32 = (cid->psnh << 8) + cid->psnl;
//  ReadSdId (&Status_st->ActiveSD_CardID_u32);

  Status_st->FirmwareLocked_u8 = FALSE;
  if (TRUE ==  flashc_is_security_bit_active())
  {
    Status_st->FirmwareLocked_u8 = TRUE;
  }
}
u8 CheckForNewFirmwareVersion (void)
{
  static u8 UpdateFlag_u8 = FALSE;
  u8 update_u8;

  if (TRUE == UpdateFlag_u8)
  {
    return (TRUE);
  }

  UpdateFlag_u8 = TRUE;   // Run only once

  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }

  update_u8 = FALSE;
  if (VERSION_MAJOR != StickConfiguration_st.VersionInfo_au8[0])
  {
    update_u8 = TRUE;
  }

  if (VERSION_MINOR != StickConfiguration_st.VersionInfo_au8[1])
  {
    update_u8 = TRUE;
  }

/*
  StickConfiguration_st.VersionInfo_au8[2]              = 0;               // Build number not used
  StickConfiguration_st.VersionInfo_au8[3]              = 0;               // Build number not used
*/

  if (TRUE == update_u8)
  {
    WriteStickConfigurationToUserPage ();
  }

  return (TRUE);
}
u8 WriteNewSdCardFoundToFlash (u32 *SdId_u32)
{
  // If configuration not found then init it
  if (FALSE == ReadStickConfigurationFromUserPage ())
  {
    InitStickConfigurationToUserPage_u8 ();
  }

  CI_LocalPrintf ("*** New SD card found ***  Serial number 0x%08x\r\n",*SdId_u32);

  WriteSdId (SdId_u32);

  StickConfiguration_st.NewSDCardFound_u8 |= 0x01;            // Bit 0 = new card found
//  StickConfiguration_st.NewSDCardFound_u8 += 2;               // add change counter +1

  StickConfiguration_st.SDFillWithRandomChars_u8 &= 0xFE;     // Clear the "card with random chars filled"  bit

  WriteStickConfigurationToUserPage ();

  return (TRUE);
}
Exemplo n.º 10
0
u32 EraseLocalFlashKeyValues_u32 (void)
{
u32 i;

u32 i1;

uint8_t page_buffer[FLASH_PAGE_SIZE];

uint8_t* page;


    // Clear user page
    for (i1 = 0; i1 < 7; i1++)
    {
        for (i = 0; i < 256; i++)
        {
            EraseStoreData_au8[i] = (u8) (rand () % 256);
        }
        // flashc_memcpy((void*)FLASHC_USER_PAGE,EraseStoreData_au8,256,TRUE);
        memcpy (page_buffer, FLASHC_USER_PAGE, FLASH_PAGE_SIZE);
        memcpy (page_buffer, EraseStoreData_au8, 256);
        FLASH_Unlock ();
        FLASH_ErasePage (FLASHC_USER_PAGE);
        write_data_to_flash (page_buffer, FLASH_PAGE_SIZE, FLASHC_USER_PAGE);
        FLASH_Lock ();

    }

    // flashc_erase_user_page (TRUE);

    // Set default values
    InitStickConfigurationToUserPage_u8 ();

    // DFU_DisableFirmwareUpdate (); // Stick always starts in application
    // mode
    // CheckForNewSdCard (); // Get SD ID

    // Clear password safe

    for (i1 = 0; i1 < 7; i1++)
    {
        for (i = 0; i < 256; i++)
        {
            EraseStoreData_au8[i] = (u8) (rand () % 256);
        }
        // flashc_memcpy((void*)(PWS_FLASH_START_ADDRESS
        // ),EraseStoreData_au8,256,TRUE);
        // flashc_memcpy((void*)(PWS_FLASH_START_ADDRESS+256),EraseStoreData_au8,256,TRUE);

        // memcpy(page_buffer, PWS_FLASH_START_ADDRESS, FLASH_PAGE_SIZE);
        memcpy (page_buffer, EraseStoreData_au8, 256);
        memcpy (page_buffer + 256, EraseStoreData_au8, 256);
        FLASH_Unlock ();
        FLASH_ErasePage (PWS_FLASH_START_ADDRESS);
        write_data_to_flash (page_buffer, FLASH_PAGE_SIZE, PWS_FLASH_START_ADDRESS);
        FLASH_Lock ();

    }


    // flashc_erase_page(PWS_FLASH_START_PAGE,TRUE);

    // Clear OTP
    for (i1 = 0; i1 < 7; i1++)
    {
        for (i = 0; i < 256; i++)
        {
            EraseStoreData_au8[i] = (u8) (rand () % 256);
        }
        for (i = 0; i < 10; i++)
        {
            // flashc_memcpy((void*)(SLOTS_ADDRESS+i*512
            // ),EraseStoreData_au8,256,TRUE);
            // flashc_memcpy((void*)(SLOTS_ADDRESS+i*512+256),EraseStoreData_au8,256,TRUE);
            // TODO:
            // write_data_to_flash ( EraseStoreData_au8, 256, SLOTS_ADDRESS +
            // i*512);
            // write_data_to_flash ( EraseStoreData_au8, 256, SLOTS_ADDRESS +
            // i*512 + 256);
        }
    }

    for (i = 0; i < 10; i++)
    {
        // flashc_erase_page(OTP_FLASH_START_PAGE+i,TRUE);
    }

    return (TRUE);
}
Exemplo n.º 11
0
u32 EraseLocalFlashKeyValues_u32 (void)
{
  u32 i;
  u32 i1;

// Clear user page
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    flashc_memcpy((void*)AVR32_FLASHC_USER_PAGE,EraseStoreData_au8,256,TRUE);
  }

  flashc_erase_user_page (TRUE);

// Set default values
  InitStickConfigurationToUserPage_u8 ();

  DFU_DisableFirmwareUpdate ();     // Stick always starts in application mode
  CheckForNewSdCard ();             // Get SD ID

// Clear password safe
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    flashc_memcpy((void*)(PWS_FLASH_START_ADDRESS    ),EraseStoreData_au8,256,TRUE);
    flashc_memcpy((void*)(PWS_FLASH_START_ADDRESS+256),EraseStoreData_au8,256,TRUE);
  }

  flashc_erase_page(PWS_FLASH_START_PAGE,TRUE);

// Clear OTP
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    for (i=0;i<10;i++)
    {
      flashc_memcpy((void*)(SLOTS_ADDRESS+i*512    ),EraseStoreData_au8,256,TRUE);
      flashc_memcpy((void*)(SLOTS_ADDRESS+i*512+256),EraseStoreData_au8,256,TRUE);
    }
  }

  for (i=0;i<10;i++)
  {
    flashc_erase_page(OTP_FLASH_START_PAGE+i,TRUE);
  }

// Clear hidden volumes
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    for (i=0;i<2;i++)
    {
      flashc_memcpy((void*)(HV_MAGIC_NUMBER_ADDRESS+i*512    ),EraseStoreData_au8,256,TRUE);
      flashc_memcpy((void*)(HV_MAGIC_NUMBER_ADDRESS+i*512+256),EraseStoreData_au8,256,TRUE);
    }
  }
  for (i=0;i<10;i++)
  {
    flashc_erase_page(HV_FLASH_START_PAGE+i,TRUE);
  }

  return (TRUE);
}