lkml.org 
[lkml]   [2004]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [cryptoapi/sysfs] display cipher details in sysfs
    *sigh*

    --Andreas
    diff -u -r -N linux-2.6.8/crypto/api.c linux-sysfs/crypto/api.c
    --- linux-2.6.8/crypto/api.c 2004-09-28 12:52:40.000000000 +0200
    +++ linux-sysfs/crypto/api.c 2004-09-28 23:13:57.000000000 +0200
    @@ -46,7 +46,7 @@

    struct crypto_alg *crypto_alg_lookup(const char *name)
    {
    - struct crypto_alg *q, *alg = NULL;
    + struct crypto_alg *q, *tmp=NULL, *alg = NULL;
    struct class_device *dev;

    if (!name)
    @@ -56,9 +56,15 @@

    list_for_each_entry(dev, &(cryptoapi_class.children), node) {
    if (!(strcmp(dev->class_id, name))) {
    - q = (struct crypto_alg *)class_get_devdata(dev);
    - if (crypto_alg_get(q))
    - alg = q;
    + alg = q = class_get_devdata(dev);
    +
    + list_for_each_entry(tmp, &(q->cra_family), cra_family) {
    + if(tmp->cra_preference > alg->cra_preference)
    + alg = tmp;
    + }
    +
    + if(!crypto_alg_get(alg))
    + alg = NULL;
    break;
    }
    }
    @@ -177,13 +183,23 @@
    {
    int ret = 0;
    struct class_device *dev;
    + struct crypto_alg *tmp;
    + struct list_head *insert_position=NULL;

    down_write(&crypto_alg_sem);

    + INIT_LIST_HEAD(&(alg->cra_family));
    +
    list_for_each_entry(dev, &(cryptoapi_class.children), node) {
    if (!(strcmp(dev->class_id, alg->cra_name))) {
    - ret = -EEXIST;
    - goto out;
    + tmp=class_get_devdata(dev);
    +
    + insert_position = &(tmp->cra_family);
    + if(!(strcmp(module_name(tmp->cra_module),\
    + module_name(alg->cra_module)))) {
    + ret = -EEXIST;
    + goto out;
    + }
    }
    }

    @@ -196,7 +212,12 @@
    memset(dev, 0, sizeof(*dev));
    dev->class = &cryptoapi_class;
    dev->dev = NULL;
    +
    + /* TODO: what to do if alg->cra_name is already in use? */
    strncpy(dev->class_id, alg->cra_name, BUS_ID_SIZE);
    +
    + if(insert_position)
    + list_add(&(alg->cra_family), insert_position);
    class_device_register(dev);

    #ifdef CONFIG_SYSFS
    diff -u -r -N linux-2.6.8/crypto/Kconfig linux-sysfs/crypto/Kconfig
    --- linux-2.6.8/crypto/Kconfig 2004-09-28 12:50:31.000000000 +0200
    +++ linux-sysfs/crypto/Kconfig 2004-09-28 12:18:25.000000000 +0200
    @@ -16,6 +16,15 @@
    HMAC: Keyed-Hashing for Message Authentication (RFC2104).
    This is required for IPSec.

    +config CRYPTO_PROC
    + bool "Legacy /proc/crypto interface (OBSOLETE)"
    + depends on PROC_FS && CRYPTO
    + help
    + Displays cipher specific information via /proc/crypto.
    + Please use /sysfs/class/crypto instead.
    +
    + When in double say Y.
    +
    config CRYPTO_NULL
    tristate "Null algorithms"
    depends on CRYPTO
    diff -u -r -N linux-2.6.8/crypto/Makefile linux-sysfs/crypto/Makefile
    --- linux-2.6.8/crypto/Makefile 2004-09-28 12:52:40.000000000 +0200
    +++ linux-sysfs/crypto/Makefile 2004-09-28 12:14:14.000000000 +0200
    @@ -2,7 +2,7 @@
    # Cryptographic API
    #

    -proc-crypto-$(CONFIG_PROC_FS) = proc.o
    +proc-crypto-$(CONFIG_CRYPTO_PROC) = proc.o
    sysfs-crypto-$(CONFIG_SYSFS) = sysfs.o

    obj-$(CONFIG_CRYPTO) += api.o scatterwalk.o cipher.o digest.o compress.o \
    diff -u -r -N linux-2.6.8/crypto/sysfs.c linux-sysfs/crypto/sysfs.c
    --- linux-2.6.8/crypto/sysfs.c 2004-09-28 12:52:40.000000000 +0200
    +++ linux-sysfs/crypto/sysfs.c 2004-09-28 18:57:48.000000000 +0200
    @@ -14,6 +14,7 @@
    .release = cryptoapi_release,
    };

    +/* TODO: add cryptoapi_set_preference */
    static ssize_t cryptoapi_show_name(struct class_device *dev, char *buffer);
    static ssize_t cryptoapi_show_blocksize(struct class_device *dev, char *buffer);
    static ssize_t cryptoapi_show_digestsize(struct class_device *dev, char *buffer);
    @@ -21,6 +22,7 @@
    static ssize_t cryptoapi_show_module(struct class_device *dev, char *buffer);
    static ssize_t cryptoapi_show_maxkeysize(struct class_device *dev, char *buffer);
    static ssize_t cryptoapi_show_minkeysize(struct class_device *dev, char *buffer);
    +static ssize_t cryptoapi_show_preference(struct class_device *dev, char *buffer);

    CLASS_DEVICE_ATTR(blocksize, 0444, cryptoapi_show_blocksize, NULL);
    CLASS_DEVICE_ATTR(digestsize, 0444, cryptoapi_show_digestsize, NULL);
    @@ -29,6 +31,7 @@
    CLASS_DEVICE_ATTR(name, 0444, cryptoapi_show_name, NULL);
    CLASS_DEVICE_ATTR(module, 0444, cryptoapi_show_module, NULL);
    CLASS_DEVICE_ATTR(type, 0444, cryptoapi_show_type, NULL);
    +CLASS_DEVICE_ATTR(preference, 0444, cryptoapi_show_preference, NULL);

    void cryptoapi_release(struct class_device *class_dev) {
    kfree(class_dev);
    @@ -46,6 +49,7 @@
    cryptoapi_show(minkeysize, cipher.cia_min_keysize, %u\n);
    cryptoapi_show(maxkeysize, cipher.cia_max_keysize, %u\n);
    cryptoapi_show(name, name, %s\n);
    +cryptoapi_show(preference, preference, %u\n);

    #undef cryptoapi_show

    diff -u -r -N linux-2.6.8/crypto/whirlpool.c linux-sysfs/crypto/whirlpool.c
    --- linux-2.6.8/crypto/whirlpool.c 2004-09-28 12:50:31.000000000 +0200
    +++ linux-sysfs/crypto/whirlpool.c 2004-09-28 12:24:23.000000000 +0200
    @@ -1106,7 +1106,6 @@
    .cra_blocksize = WHIRLPOOL_BLOCK_SIZE,
    .cra_ctxsize = sizeof(struct whirlpool_ctx),
    .cra_module = THIS_MODULE,
    - .cra_list = LIST_HEAD_INIT(alg.cra_list),
    .cra_u = { .digest = {
    .dia_digestsize = WHIRLPOOL_DIGEST_SIZE,
    .dia_init = whirlpool_init,
    diff -u -r -N linux-2.6.8/include/linux/crypto.h linux-sysfs/include/linux/crypto.h
    --- linux-2.6.8/include/linux/crypto.h 2004-09-28 12:52:40.000000000 +0200
    +++ linux-sysfs/include/linux/crypto.h 2004-09-28 23:10:46.000000000 +0200
    @@ -56,6 +56,10 @@
    #define CRYPTO_UNSPEC 0
    #define CRYPTO_MAX_ALG_NAME 64

    +#define CRYPTO_PREF_GENERIC 0
    +#define CRYPTO_PREF_OPTIMIZED 10
    +#define CRYPTO_PREF_HARDWARE 20
    +
    struct scatterlist;

    /*
    @@ -97,6 +101,7 @@
    u32 cra_flags;
    unsigned int cra_blocksize;
    unsigned int cra_ctxsize;
    + unsigned int cra_preference;
    const char cra_name[CRYPTO_MAX_ALG_NAME];

    union {
    @@ -105,6 +110,7 @@
    struct compress_alg compress;
    } cra_u;

    + struct list_head cra_family;
    struct module *cra_module;
    };
    \
     
     \ /
      Last update: 2005-03-22 14:06    [W:0.031 / U:0.780 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site