Hi,
we have an SOD (a CMS for e-passports and e-ID cards) file that we can read
out and verify nicely if the signature algo is RSA_PKCS1_PADDING.
But if the algo is RSA_PKCS1_PSS_PADDING (see attached txt for an asn1
dump),
the verification fails.
Below is a part of the stack trace, it looks like openssl still thinks
the algorithm
is RSA_PKCS1_PADDING instead of RSA_PKCS1_PSS_PADDING:
CMS_verify() {
cms_signerinfo_verify() {
EVP_DigestVerifyInit() {
do_sigver_init() {
EVP_PKEY_CTX_set_signature_md() {
...
pkey_rsa_ctrl() {
// type == EVP_PKEY_CTRL_DIGESTINIT
EVP_DigestVerifyFinal() {
...
pkey_rsa_verify(EVP_PKEY_CTX *ctx, ...) {
RSA_PKEY_CTX *rctx = ctx->data;
// rctx->pad_mode == RSA_PKCS1_PADDING (???)
// and EVP_MD_type(rctx->md) = NID_sha256 (OK)
Someone knows if the problem is with the encoding of the signature algo
in the file, or with openssl itself?
Thanks!
Stef
0 119: [APPLICATION 23] {
4 48: SEQUENCE {
8 6: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
19 160: [0] {
23 48: SEQUENCE {
27 2: INTEGER 3
30 49: SET {
32 48: SEQUENCE {
34 6: OBJECT IDENTIFIER '2 16 840 1 101 3 4 2 1'
(SHA256)
: }
: }
45 48: SEQUENCE {
48 6: OBJECT IDENTIFIER '2 23 136 1 1 1'
56 160: [0] {
59 4: OCTET STRING, encapsulates {
62 48: SEQUENCE {
65 2: INTEGER 0
68 48: SEQUENCE {
70 6: OBJECT IDENTIFIER '2 16 840 1 101 3 4 2 1'
(SHA256)
: }
81 48: SEQUENCE {
83 48: SEQUENCE {
85 2: INTEGER 1
88 4: OCTET STRING
: 2C 51 36 2F 0B 0D DC 58 C1 67 FB EC AE B3 6B EC
: 51 DA 1C FC 97 23 4A 72 9E AB 2C AE 89 F8 C5 2B
(hash 0x01)
: }
122 48: SEQUENCE {
124 2: INTEGER 13
127 4: OCTET STRING
: BF 2C 0F 06 DB DB D5 F9 0C C7 8E CB 76 02 5C 9D
: D1 04 F1 C0 21 D2 57 4F 57 1B 66 F1 15 43 0F 5E
(hash 0x13)
: }
161 48: SEQUENCE {
163 2: INTEGER 11
166 4: OCTET STRING
: 9D 83 2F 80 A0 82 D0 29 F3 64 0F 2F 62 78 6F AF
: 89 2E 1A 6F 4A FA F0 AE 29 42 5E 51 C4 AC B2 62
(hash 0x11)
: }
: }
: }
: }
: }
: }
200 49: SET {
204 48: SEQUENCE {
208 2: INTEGER 1
211 128: [0]
: 2D B6 81 D6 A3 72 D3 A2 27 53 03 E3 F2 90 33 36
SubjectKeyIdentifier
: 2C C7 00 9D
233 48: SEQUENCE {
235 6: OBJECT IDENTIFIER '2 16 840 1 101 3 4 2 1'
(SHA256)
: }
246 160: [0] {
248 48: SEQUENCE {
250 6: OBJECT IDENTIFIER contentType (1 2 840 113549 1 9 3)
261 49: SET {
263 6: OBJECT IDENTIFIER '2 23 136 1 1 1'
: }
: }
271 48: SEQUENCE {
273 6: OBJECT IDENTIFIER
: messageDigest (1 2 840 113549 1 9 4)
284 49: SET {
286 4: OCTET STRING
: 43 D2 E0 C5 3C ED DF F9 3A D9 1B 26 72 D1 16 90
(hash over
: F5 3B 26 04 86 F0 7F 05 0A CB 6A 25 D8 2A 7B C3
the eContent)
: }
: }
: }
320 48: SEQUENCE {
322 6: OBJECT IDENTIFIER '1 2 840 113549 1 1 10'
(id-RSASSA-PSS)
333 48: SEQUENCE {
335 160: [0] {
337 48: SEQUENCE {
339 6: OBJECT IDENTIFIER '2 16 840 1 101 3 4 2 1'
(SHA256)
: }
: }
350 161: [1] {
352 48: SEQUENCE {
354 6: OBJECT IDENTIFIER '1 2 840 113549 1 1 8'
(id-mgf1)
365 48: SEQUENCE {
367 6: OBJECT IDENTIFIER '2 16 840 1 101 3 4 2 1'
(SHA256)
: }
: }
: }
378 162: [2] {
380 2: INTEGER 32
(salt length)
: }
: }
: }
383 4: OCTET STRING
: 09 27 B6 73 5B 82 E1 3E C5 9D 1E D5 69 1C D0 F5
: FD 3C D7 08 7D B6 6F EC 6D 1A 8B D1 52 2A 7F 92
: F7 87 54 9E 1B 66 9F 8C 5D 4B C8 EF C3 1D 66 69
: 14 43 10 70 08 AB 0E 20 03 AD 22 47 51 A4 8F 8C
: A2 2A 2F B3 87 AA A3 D0 0C 79 25 9C 8D D2 81 91
: 96 2E 32 A9 45 49 53 99 7B 44 6B AA 44 F7 C2 1B
: EC 26 C1 90 C4 80 BF D9 00 8C 9A 64 61 B3 1B A5
: A8 2F 28 60 20 31 89 E7 A9 C6 0B 88 85 BD 5A DC
: B5 83 F3 36 53 D4 BA 14 20 0D 53 30 C4 46 7A 8A
: 81 E7 86 F7 17 B1 57 3C E1 5F 14 D9 4E BF 0C 03
: C7 9F 52 AA 3F C2 39 5F A9 FA 88 8A 39 E8 F7 98
: 0B 3C 4B 5B 29 62 51 AC 40 7C 71 75 91 22 23 1B
: 22 8D 1B C7 45 90 37 5A 78 A0 FB 50 3C C4 78 05
: 2A A3 1B DB 97 53 AA 1B 24 CD 41 85 EA 8E 8F 57
: 86 8D 22 02 90 9C 12 56 4A 60 97 6F 8B 46 4C 71
: EC A0 69 BE 82 B1 86 ED 4F A2 3C E4 BF 16 0F 69
: }
: }
: }
: }
: }
: }