Blame view

include/rsa.h 2.42 KB
19c402afa   Simon Glass   image: Add RSA su...
1
2
3
4
5
6
7
8
  /*
   * Copyright (c) 2013, Google Inc.
   *
   * (C) Copyright 2008 Semihalf
   *
   * (C) Copyright 2000-2006
   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
9
   * SPDX-License-Identifier:	GPL-2.0+
19c402afa   Simon Glass   image: Add RSA su...
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
   */
  
  #ifndef _RSA_H
  #define _RSA_H
  
  #include <errno.h>
  #include <image.h>
  
  #if IMAGE_ENABLE_SIGN
  /**
   * sign() - calculate and return signature for given input data
   *
   * @info:	Specifies key and FIT information
   * @data:	Pointer to the input data
   * @data_len:	Data length
   * @sigp:	Set to an allocated buffer holding the signature
   * @sig_len:	Set to length of the calculated hash
   *
   * This computes input data signature according to selected algorithm.
   * Resulting signature value is placed in an allocated buffer, the
   * pointer is returned as *sigp. The length of the calculated
   * signature is returned via the sig_len pointer argument. The caller
   * should free *sigp.
   *
   * @return: 0, on success, -ve on error
   */
  int rsa_sign(struct image_sign_info *info,
  	     const struct image_region region[],
  	     int region_count, uint8_t **sigp, uint *sig_len);
  
  /**
   * add_verify_data() - Add verification information to FDT
   *
   * Add public key information to the FDT node, suitable for
   * verification at run-time. The information added depends on the
   * algorithm being used.
   *
   * @info:	Specifies key and FIT information
   * @keydest:	Destination FDT blob for public key data
   * @return: 0, on success, -ve on error
  */
  int rsa_add_verify_data(struct image_sign_info *info, void *keydest);
  #else
  static inline int rsa_sign(struct image_sign_info *info,
  		const struct image_region region[], int region_count,
  		uint8_t **sigp, uint *sig_len)
  {
  	return -ENXIO;
  }
  
  static inline int rsa_add_verify_data(struct image_sign_info *info,
  				      void *keydest)
  {
  	return -ENXIO;
  }
  #endif
  
  #if IMAGE_ENABLE_VERIFY
  /**
   * rsa_verify() - Verify a signature against some data
   *
   * Verify a RSA PKCS1.5 signature against an expected hash.
   *
   * @info:	Specifies key and FIT information
   * @data:	Pointer to the input data
   * @data_len:	Data length
   * @sig:	Signature
   * @sig_len:	Number of bytes in signature
   * @return 0 if verified, -ve on error
   */
  int rsa_verify(struct image_sign_info *info,
  	       const struct image_region region[], int region_count,
  	       uint8_t *sig, uint sig_len);
  #else
  static inline int rsa_verify(struct image_sign_info *info,
  		const struct image_region region[], int region_count,
  		uint8_t *sig, uint sig_len)
  {
  	return -ENXIO;
  }
  #endif
  
  #endif