PKCS#7: Add OIDs for sha224, sha284 and sha512 hash algos and use them
authorDavid Howells <dhowells@redhat.com>
Sun, 30 Aug 2015 15:59:57 +0000 (16:59 +0100)
committerJames Morris <james.l.morris@oracle.com>
Mon, 31 Aug 2015 23:59:20 +0000 (09:59 +1000)
Add OIDs for sha224, sha284 and sha512 hash algos and use them to select
the hashing algorithm.  Without this, something like the following error
might get written to dmesg:

[   31.829322] PKCS7: Unknown OID: [32] 2.16.840.1.101.3.4.2.3
[   31.829328] PKCS7: Unknown OID: [180] 2.16.840.1.101.3.4.2.3
[   31.829330] Unsupported digest algo: 55

Where the 55 on the third line is OID__NR indicating an unknown OID.

Reported-by: Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
Signed-off-by: David Howells <dhowells@redhat.com>
Tested-By: Valdis Kletnieks <valdis.kletnieks@vt.edu>
Signed-off-by: James Morris <james.l.morris@oracle.com>
crypto/asymmetric_keys/mscode_parser.c
crypto/asymmetric_keys/pkcs7_parser.c
include/linux/oid_registry.h

index 214a992..adcef59 100644 (file)
@@ -97,6 +97,15 @@ int mscode_note_digest_algo(void *context, size_t hdrlen,
        case OID_sha256:
                ctx->digest_algo = HASH_ALGO_SHA256;
                break;
+       case OID_sha384:
+               ctx->digest_algo = HASH_ALGO_SHA384;
+               break;
+       case OID_sha512:
+               ctx->digest_algo = HASH_ALGO_SHA512;
+               break;
+       case OID_sha224:
+               ctx->digest_algo = HASH_ALGO_SHA224;
+               break;
 
        case OID__NR:
                sprint_oid(value, vlen, buffer, sizeof(buffer));
index e6298b7..758acab 100644 (file)
@@ -229,6 +229,14 @@ int pkcs7_sig_note_digest_algo(void *context, size_t hdrlen,
        case OID_sha256:
                ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA256;
                break;
+       case OID_sha384:
+               ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA384;
+               break;
+       case OID_sha512:
+               ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA512;
+               break;
+       case OID_sha224:
+               ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA224;
        default:
                printk("Unsupported digest algo: %u\n", ctx->last_oid);
                return -ENOPKG;
index 93e0ff9..d2fa9ca 100644 (file)
@@ -63,6 +63,9 @@ enum OID {
        OID_certAuthInfoAccess,         /* 1.3.6.1.5.5.7.1.1 */
        OID_sha1,                       /* 1.3.14.3.2.26 */
        OID_sha256,                     /* 2.16.840.1.101.3.4.2.1 */
+       OID_sha384,                     /* 2.16.840.1.101.3.4.2.2 */
+       OID_sha512,                     /* 2.16.840.1.101.3.4.2.3 */
+       OID_sha224,                     /* 2.16.840.1.101.3.4.2.4 */
 
        /* Distinguished Name attribute IDs [RFC 2256] */
        OID_commonName,                 /* 2.5.4.3 */