| Index: src/platform/vboot_reference/utils/file_keys.c
 | 
| diff --git a/src/platform/vboot_reference/utils/file_keys.c b/src/platform/vboot_reference/utils/file_keys.c
 | 
| index 8a8a2cb2c0f1b605d8236e4ecb98b12f69d147f7..bcba749a4bb92c1d629959db629a3138d5d07453 100644
 | 
| --- a/src/platform/vboot_reference/utils/file_keys.c
 | 
| +++ b/src/platform/vboot_reference/utils/file_keys.c
 | 
| @@ -15,6 +15,7 @@
 | 
|  #include <sys/types.h>
 | 
|  #include <unistd.h>
 | 
|  
 | 
| +#include "padding.h"
 | 
|  #include "rsa_utility.h"
 | 
|  #include "utility.h"
 | 
|  
 | 
| @@ -55,3 +56,41 @@ RSAPublicKey* RSAPublicKeyFromFile(char* input_file) {
 | 
|    Free(buf);
 | 
|    return key;
 | 
|  }
 | 
| +
 | 
| +uint8_t* SignatureFile(char* input_file, char* key_file, int algorithm) {
 | 
| +  char* sign_utility = "./sign_data.sh";
 | 
| +  char* cmd;  /* Command line to invoke. */
 | 
| +  int cmd_len;
 | 
| +  FILE* cmd_out;  /* File descriptor to command output. */
 | 
| +  uint8_t* signature = NULL;
 | 
| +  int signature_size = siglen_map[algorithm] * sizeof(uint32_t);
 | 
| +
 | 
| +  /* Build command line:
 | 
| +   * sign_data.sh <algorithm> <key file> <input file>
 | 
| +   */
 | 
| +  cmd_len = (strlen(sign_utility) + 1 + /* +1 for space. */
 | 
| +             2 + 1 + /* For [algorithm]. */
 | 
| +             strlen(key_file) + 1 + /* +1 for space. */
 | 
| +             strlen(input_file) +
 | 
| +             1);  /* For the trailing '\0'. */
 | 
| +  cmd = (char*) Malloc(cmd_len);
 | 
| +  snprintf(cmd, cmd_len, "%s %d %s %s", sign_utility, algorithm, key_file,
 | 
| +           input_file);
 | 
| +  cmd_out = popen(cmd, "r");
 | 
| +  Free(cmd);
 | 
| +  if (!cmd_out) {
 | 
| +    fprintf(stderr, "Couldn't execute: %s\n", cmd);
 | 
| +    return NULL;
 | 
| +  }
 | 
| +
 | 
| +  signature = (uint8_t*) Malloc(signature_size);
 | 
| +  if (fread(signature, signature_size, 1, cmd_out) != 1) {
 | 
| +    fprintf(stderr, "Couldn't read signature.\n");
 | 
| +    pclose(cmd_out);
 | 
| +    Free(signature);
 | 
| +    return NULL;
 | 
| +  }
 | 
| +
 | 
| +  pclose(cmd_out);
 | 
| +  return signature;
 | 
| +}
 | 
| 
 |