проект ядра для шифрования - PullRequest
       0

проект ядра для шифрования

2 голосов
/ 06 февраля 2010

В проекте уровня ядра я хочу зашифровать пакет, используя алгоритм des, нужно использовать функцию

static int des_setkey(void *ctx,const u8 *key,
                         unsigned int keylen, 
                         u32 *flags) 

Я хочу знать, как ключ будет передан функции, какое значение будет использоваться в качестве ключа, его тип указателя, поэтому будет значение адреса

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Это похоже на ядро ​​Linux версии 2.6.16 (ish). Более поздние ядра немного переписали API криптосистемы.

для этого ядра это может помочь: -

  • * ключ - указатель на 16-байтовый массив (беззнаковый символ [16]).
  • * ctx - указатель на структуру struct des_ctx;
  • * flags - указатель на 32-битное целое число без знака, для которого будет установлен CRYPTO_TFM_RES_WEAK_KEY, если вы указали слабый ключ (тот, который не работает в FIPS 74 - см. Функцию ekey ())
1 голос
/ 06 февраля 2010

http://lxr.kelp.or.kr/ident?v=2.6.28;i=des_setkey

* Cryptographic API.
*
* s390 implementation of the DES Cipher Algorithm.
*
* Copyright IBM Corp. 2003,2007
* Author(s): Thomas Spatzier
*            Jan Glauber (jan.glauber@de.ibm.com)

typeA A = xy;
имя функции (тип A * a, тип A b)
-> имя функции (& A, A);



crypto_des_check_key(const u8 *key, unsigned int keylen, u32 *flags)
{
        u32 n, w;

        n  = parity[key[0]]; n <<= 4;
        n |= parity[key[1]]; n <<= 4;
        n |= parity[key[2]]; n <<= 4;
        n |= parity[key[3]]; n <<= 4;
        n |= parity[key[4]]; n <<= 4;
        n |= parity[key[5]]; n <<= 4;
        n |= parity[key[6]]; n <<= 4;
        n |= parity[key[7]];
        w = 0x88888888L;

        if ((*flags & CRYPTO_TFM_REQ_WEAK_KEY)
            && !((n - (w >> 3)) & w)) {  /* 1 in 



-> CRYPTO_TFM_REQ_WEAK_KEY - флаг -> source / include / linux / crypto.h

/*
* Transform masks and values (for crt_flags).
*/
#define CRYPTO_TFM_REQ_MASK             0x000fff00
#define CRYPTO_TFM_RES_MASK             0xfff00000

#define CRYPTO_TFM_REQ_WEAK_KEY         0x00000100
#define CRYPTO_TFM_REQ_MAY_SLEEP        0x00000200
#define CRYPTO_TFM_REQ_MAY_BACKLOG      0x00000400
#define CRYPTO_TFM_RES_WEAK_KEY         0x00100000
#define CRYPTO_TFM_RES_BAD_KEY_LEN      0x00200000
#define CRYPTO_TFM_RES_BAD_KEY_SCHED    0x00400000
#define CRYPTO_TFM_RES_BAD_BLOCK_LEN    0x00800000
#define CRYPTO_TFM_RES_BAD_FLAGS        0x01000000



источник / арка / s390 / криптография / des_s390.c

#define DES_EXPKEY_WORDS        32
typedef unsigned char           u8;
typedef unsigned char           u8;
typedef unsigned short          u16;
typedef unsigned int            u32;
typedef unsigned long long      u64;
typedef signed char             s8;
typedef short                   s16;
typedef int                     s32;
typedef long long               s64;



static int des_setkey(void *ctx, const u8 *key, unsigned int keylen, u32 *flags)
{
         return setkey(((struct des_ctx *)ctx)->expkey, key, keylen, flags);
}



struct des_ctx {
        u32 expkey[DES_EXPKEY_WORDS];
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...