Home | History | Annotate | Download | only in Pk
      1 /** @file
      2   PKCS#7 SignedData Verification Wrapper Implementation which does not provide
      3   real capabilities.
      4 
      5 Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #include "InternalCryptLib.h"
     17 
     18 /**
     19   Get the signer's certificates from PKCS#7 signed data as described in "PKCS #7:
     20   Cryptographic Message Syntax Standard". The input signed data could be wrapped
     21   in a ContentInfo structure.
     22 
     23   Return FALSE to indicate this interface is not supported.
     24 
     25   @param[in]  P7Data       Pointer to the PKCS#7 message to verify.
     26   @param[in]  P7Length     Length of the PKCS#7 message in bytes.
     27   @param[out] CertStack    Pointer to Signer's certificates retrieved from P7Data.
     28                            It's caller's responsibility to free the buffer.
     29   @param[out] StackLength  Length of signer's certificates in bytes.
     30   @param[out] TrustedCert  Pointer to a trusted certificate from Signer's certificates.
     31                            It's caller's responsibility to free the buffer.
     32   @param[out] CertLength   Length of the trusted certificate in bytes.
     33 
     34   @retval FALSE  This interface is not supported.
     35 
     36 **/
     37 BOOLEAN
     38 EFIAPI
     39 Pkcs7GetSigners (
     40   IN  CONST UINT8  *P7Data,
     41   IN  UINTN        P7Length,
     42   OUT UINT8        **CertStack,
     43   OUT UINTN        *StackLength,
     44   OUT UINT8        **TrustedCert,
     45   OUT UINTN        *CertLength
     46   )
     47 {
     48   ASSERT (FALSE);
     49   return FALSE;
     50 }
     51 
     52 /**
     53   Wrap function to use free() to free allocated memory for certificates.
     54 
     55   If the interface is not supported, then ASSERT().
     56 
     57   @param[in]  Certs        Pointer to the certificates to be freed.
     58 
     59 **/
     60 VOID
     61 EFIAPI
     62 Pkcs7FreeSigners (
     63   IN  UINT8        *Certs
     64   )
     65 {
     66   ASSERT (FALSE);
     67 }
     68 
     69 /**
     70   Retrieves all embedded certificates from PKCS#7 signed data as described in "PKCS #7:
     71   Cryptographic Message Syntax Standard", and outputs two certificate lists chained and
     72   unchained to the signer's certificates.
     73   The input signed data could be wrapped in a ContentInfo structure.
     74 
     75   @param[in]  P7Data            Pointer to the PKCS#7 message.
     76   @param[in]  P7Length          Length of the PKCS#7 message in bytes.
     77   @param[out] SignerChainCerts  Pointer to the certificates list chained to signer's
     78                                 certificate. It's caller's responsibility to free the buffer.
     79   @param[out] ChainLength       Length of the chained certificates list buffer in bytes.
     80   @param[out] UnchainCerts      Pointer to the unchained certificates lists. It's caller's
     81                                 responsibility to free the buffer.
     82   @param[out] UnchainLength     Length of the unchained certificates list buffer in bytes.
     83 
     84   @retval  TRUE         The operation is finished successfully.
     85   @retval  FALSE        Error occurs during the operation.
     86 
     87 **/
     88 BOOLEAN
     89 EFIAPI
     90 Pkcs7GetCertificatesList (
     91   IN  CONST UINT8  *P7Data,
     92   IN  UINTN        P7Length,
     93   OUT UINT8        **SignerChainCerts,
     94   OUT UINTN        *ChainLength,
     95   OUT UINT8        **UnchainCerts,
     96   OUT UINTN        *UnchainLength
     97   )
     98 {
     99   ASSERT (FALSE);
    100   return FALSE;
    101 }
    102 
    103 /**
    104   Verifies the validity of a PKCS#7 signed data as described in "PKCS #7:
    105   Cryptographic Message Syntax Standard". The input signed data could be wrapped
    106   in a ContentInfo structure.
    107 
    108   Return FALSE to indicate this interface is not supported.
    109 
    110   @param[in]  P7Data       Pointer to the PKCS#7 message to verify.
    111   @param[in]  P7Length     Length of the PKCS#7 message in bytes.
    112   @param[in]  TrustedCert  Pointer to a trusted/root certificate encoded in DER, which
    113                            is used for certificate chain verification.
    114   @param[in]  CertLength   Length of the trusted certificate in bytes.
    115   @param[in]  InData       Pointer to the content to be verified.
    116   @param[in]  DataLength   Length of InData in bytes.
    117 
    118   @retval FALSE  This interface is not supported.
    119 
    120 **/
    121 BOOLEAN
    122 EFIAPI
    123 Pkcs7Verify (
    124   IN  CONST UINT8  *P7Data,
    125   IN  UINTN        P7Length,
    126   IN  CONST UINT8  *TrustedCert,
    127   IN  UINTN        CertLength,
    128   IN  CONST UINT8  *InData,
    129   IN  UINTN        DataLength
    130   )
    131 {
    132   ASSERT (FALSE);
    133   return FALSE;
    134 }
    135 
    136 /**
    137   Extracts the attached content from a PKCS#7 signed data if existed. The input signed
    138   data could be wrapped in a ContentInfo structure.
    139 
    140   Return FALSE to indicate this interface is not supported.
    141 
    142   @param[in]   P7Data       Pointer to the PKCS#7 signed data to process.
    143   @param[in]   P7Length     Length of the PKCS#7 signed data in bytes.
    144   @param[out]  Content      Pointer to the extracted content from the PKCS#7 signedData.
    145                             It's caller's responsibility to free the buffer.
    146   @param[out]  ContentSize  The size of the extracted content in bytes.
    147 
    148   @retval     TRUE          The P7Data was correctly formatted for processing.
    149   @retval     FALSE         The P7Data was not correctly formatted for processing.
    150 
    151 **/
    152 BOOLEAN
    153 EFIAPI
    154 Pkcs7GetAttachedContent (
    155   IN  CONST UINT8  *P7Data,
    156   IN  UINTN        P7Length,
    157   OUT VOID         **Content,
    158   OUT UINTN        *ContentSize
    159   )
    160 {
    161   ASSERT (FALSE);
    162   return FALSE;
    163 }
    164