On Wed, Apr 11, 2018 at 11:58 AM, Horia Geantă <horia.geanta@xxxxxxx> wrote: > On 4/11/2018 1:36 AM, James Bottomley wrote: >> On Tue, 2018-04-10 at 23:01 +0100, Martin Townsend wrote: >>> Using openssl to get the signature in my x509 cert >>> >>> Signature Algorithm: sha256WithRSAEncryption >>> 68:82:cc:5d:f9:ee:fb:1a:77:72:a6:a9:c6:4c:cc:d7:f6:2a: >>> 17:a5:db:bf:5a:2b:8d:39:60:dc:a0:93:39:45:0f:bc:a7:e8: >>> 7f:6c:06:84:2d:f3:c1:94:0a:60:56:1c:50:78:dc:34:d1:87: >>> >>> So there's an extra 0x00 and the signature is 257 bytes so I guess >>> this is upsetting CAAM, just need to work out where it's coming from, >>> or whether it's valid and CAAM should be handling it. >> >> A signature is just a bignum so leading zeros are permitted because >> it's the same numeric value; however, there are normalization >> procedures that require stripping the leading zeros, say before doing a >> hash or other operation which would be affected by them. >> >> CAAM should definitely handle it on the "be liberal in what you accept" >> principle. The kernel should probably remove the leading zeros on the >> "be conservative in what you do" part of the same principle. >> > Looking at the generic SW implementation (crypto/rsa.c, rsa_verify()), leading > zeros are removed: > s = mpi_read_raw_from_sgl(req->src, req->src_len); > > CAAM implementation of rsa is not doing this (though it is removing leading > zeros when reading public, private keys). > It has to be fixed. Thanks for the report. > Do you have any idea when a fix will be available? I'm happy to test on my setup here. >>> I notice that in my stack trace I have pkcs1pad_verify which >>> suggests some sort of padding? >> >> Yes, RSA has various forms of padding because the information being >> encrypted is usually much smaller than the encryption unit; PKCS1 is >> the most common (although its now deprecated in favour of OAEP because >> of all the padding oracle problems). >> > RSA padding has been intentionally added as a template, wrapping "textbook" > (raw) RSA primitives. > For PKCS#1 v1.5, a template instantiation is called pkcs1pad(rsa, hash_alg). > > Currently in kernel the only supported RSA padding scheme is PKCS#1 v1.5. > When implemented, another scheme - for e.g. OAEP - would be added in a similar > way, as a template: oaep(rsa, ...). > > Horia