text: /*
   * Amazon FreeRTOS OTA PAL V1.0.0
   * Copyright (C) 2018 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy of
   * this software and associated documentation files (the "Software"), to deal in
   * the Software without restriction, including without limitation the rights to
   * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
   * the Software, and to permit persons to whom the Software is furnished to do so,
   * subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in all
   * copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
   * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
   * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
   * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   *
   * http://aws.amazon.com/freertos
   * http://www.FreeRTOS.org
   */
  
  /* C Runtime includes. */
  #include <stdio.h>
  #include <stdlib.h>
  
  /* Amazon FreeRTOS include. */
  #include "FreeRTOS.h"
  #include "aws_ota_pal.h"
  #include "aws_ota_agent_internal.h"
  
  /* Specify the OTA signature algorithm we support on this platform. */
  const char pcOTA_JSON_FileSignatureKey[ OTA_FILE_SIG_KEY_STR_MAX_LENGTH ] = "sig-sha256-ecdsa";   /* FIX ME. */
  
  
  /* The static functions below (prvPAL_CheckFileSignature and prvPAL_ReadAndAssumeCertificate) 
   * are optionally implemented. If these functions are implemented then please set the following macros in 
   * aws_test_ota_config.h to 1:
   * otatestpalCHECK_FILE_SIGNATURE_SUPPORTED
   * otatestpalREAD_AND_ASSUME_CERTIFICATE_SUPPORTED
   */
  
  /**
   * @brief Verify the signature of the specified file.
   * 
   * This function should be implemented if signature verification is not offloaded
   * to non-volatile memory io functions.
   * 
   * This function is called from prvPAL_Close(). 
   * 
   * @param[in] C OTA file context information.
   * 
   * @return Below are the valid return values for this function.
   * kOTA_Err_None if the signature verification passes.
   * kOTA_Err_SignatureCheckFailed if the signature verification fails.
   * kOTA_Err_BadSignerCert if the if the signature verification certificate cannot be read.
   * 
   */
  static OTA_Err_t prvPAL_CheckFileSignature( OTA_FileContext_t * const C );
  
  /**
   * @brief Read the specified signer certificate from the filesystem into a local buffer.
   * 
   * The allocated memory returned becomes the property of the caller who is responsible for freeing it.
   * 
   * This function is called from prvPAL_CheckFileSignature(). It should be implemented if signature
   * verification is not offloaded to non-volatile memory io function.
   * 
   * @param[in] pucCertName The file path of the certificate file.
   * @param[out] ulSignerCertSize The size of the certificate file read.
   * 
   * @return A pointer to the signer certificate in the file system. NULL if the certificate cannot be read.
   * This returned pointer is the responsibility of the caller; if the memory is allocated the caller must free it.
   */
  static uint8_t * prvPAL_ReadAndAssumeCertificate( const uint8_t * const pucCertName,
                                                    uint32_t * const ulSignerCertSize );
  
  /*-----------------------------------------------------------*/
  
  OTA_Err_t prvPAL_CreateFileForRx( OTA_FileContext_t * const C )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_CreateFileForRx" );
  
      /* FIX ME. */
      return kOTA_Err_RxFileCreateFailed;
  }
  /*-----------------------------------------------------------*/
  
  OTA_Err_t prvPAL_Abort( OTA_FileContext_t * const C )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_Abort" );
      
      /* FIX ME. */
      return kOTA_Err_FileAbort;
  }
  /*-----------------------------------------------------------*/
  
  /* Write a block of data to the specified file. */
  int16_t prvPAL_WriteBlock( OTA_FileContext_t * const C,
                             uint32_t ulOffset,
                             uint8_t * const pacData,
                             uint32_t ulBlockSize )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_WriteBlock" );
  
      /* FIX ME. */
      return -1;
  }
  /*-----------------------------------------------------------*/
  
  OTA_Err_t prvPAL_CloseFile( OTA_FileContext_t * const C )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_CloseFile" );
  
      /* FIX ME. */
      return kOTA_Err_FileClose;
  }
  /*-----------------------------------------------------------*/
  
  
  static OTA_Err_t prvPAL_CheckFileSignature( OTA_FileContext_t * const C )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_CheckFileSignature" );
  
      /* FIX ME. */
      return kOTA_Err_SignatureCheckFailed;
  }
  /*-----------------------------------------------------------*/
  
  static uint8_t * prvPAL_ReadAndAssumeCertificate( const uint8_t * const pucCertName,
                                                    uint32_t * const ulSignerCertSize )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_ReadAndAssumeCertificate" );
  
      /* FIX ME. */
      return NULL;
  }
  /*-----------------------------------------------------------*/
  
  OTA_Err_t prvPAL_ResetDevice( void )
  {
      DEFINE_OTA_METHOD_NAME("prvPAL_ResetDevice");
  
      /* FIX ME. */
      return kOTA_Err_ResetNotSupported;
  }
  /*-----------------------------------------------------------*/
  
  OTA_Err_t prvPAL_ActivateNewImage( void )
  {
      DEFINE_OTA_METHOD_NAME("prvPAL_ActivateNewImage");
  
      /* FIX ME. */
      return kOTA_Err_Uninitialized;
  }
  /*-----------------------------------------------------------*/
  
  OTA_Err_t prvPAL_SetPlatformImageState( OTA_ImageState_t eState )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_SetPlatformImageState" );
  
      /* FIX ME. */
      return kOTA_Err_BadImageState;
  }
  /*-----------------------------------------------------------*/
  
  OTA_PAL_ImageState_t prvPAL_GetPlatformImageState( void )
  {
      DEFINE_OTA_METHOD_NAME( "prvPAL_GetPlatformImageState" );
  
      /* FIX ME. */
      return eOTA_ImageState_Unknown;
  }
  /*-----------------------------------------------------------*/
  
  /* Provide access to private members for testing. */
  #ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS
      #include "aws_ota_pal_test_access_define.h"
  #endif
  