函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:lib\digsig.c Create Date:2022-07-27 08:18:41
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:RSA公钥签名验证

函数原型:static int digsig_verify_rsa(struct key *key, const char *sig, int siglen, const char *h, int hlen)

返回类型:int

参数:

类型参数名称
struct key *key
const char *sig
intsiglen
const char *h
inthlen
71  err等于负EINVAL
76  unsigned char * out1 = NULL
78  in等于NULL, res等于NULL
84  lock for reading
85  ukp等于user_key_payload_locked(key)
87  如果非ukp
89  err等于负EKEYREVOKED
90  转到:err1
93  如果length of this data 小于pkh的长度则转到:err1
96  pkh等于actual data
98  如果 key format version 不等于1则转到:err1
101  如果algo不等于PUBKEY_ALGO_RSA则转到:err1
104  如果nmpi不等于2则转到:err1
107  datap等于mpi
108  endp等于actual data length of this data
110 i小于nmpi循环
111  remaining等于endpdatap
112  pkey[i]等于mpi_read_from_buffer(datap, & remaining)
113  如果是错误
114  err等于错误
115  转到:err
117  datap加等于remaining
120  mblen等于返回位数
121  mlen等于DIV_ROUND_UP(mblen, 8)
123  如果mlen恒等于0则
124  err等于负EINVAL
125  转到:err
128  err等于负ENOMEM
130  out1等于分配内存并置零
131  如果非out1则转到:err
134  nret等于siglen
135  in等于mpi_read_from_buffer(sig, & nret)
136  如果是错误
137  err等于错误
138  转到:err
141  res等于分配mpi空间
142  如果非res则转到:err
145  err等于异或取模
146  如果err则转到:err
149  如果 number of valid limbs BYTES_PER_MPI_LIMB大于mlen
150  err等于负EINVAL
151  转到:err
154  p等于mpi_get_buffer() - Returns an allocated buffer with the MPI (msb first).* Caller must free the return string.* This function does return a 0 byte buffer with nbytes set to zero if the* value of A is zero.*@a: a multi precision integer.
155  如果非p
156  err等于负EINVAL
157  转到:err
160  len等于mlen
161  head等于lenl
162  memset(out1, 0, head)
163  内存复制(out1 + head, p, l)
165  kfree(p)
167  m等于pkcs_1_v1_5_decode_emsa(out1, len, mblen, & len)
169  如果非mlen不等于hlenmemcmp(m, h, hlen)则err等于负EINVAL
172  err :
173  mpi_free(in)
174  mpi_free(res)
175  kfree(out1)
176 i先自减大于等于0循环
177  mpi_free(pkey[i])
178  err1 :
179  lease a read lock
181  返回:err
调用者
名称描述
digsig_verifydigsig_verify() - digital signature verification with public key*@keyring: keyring to search key in*@sig: digital signature*@siglen: length of the signature*@data: data*@datalen: length of the data* Returns 0 on success, -EINVAL otherwise