md5, cp, len);   // Даже возврат None требует увеличения счетчика ссылок   Py_INCREF(Py_None); return Py_None;   }   // Строка документации метода update PyDoc_STRVAR(upd">number of bits, modulo 2^64 (lsb 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

number of bits, modulo 2^64 (lsb

Поиск

UINT4

state[4];

/*

state (ABCD) */

//

UINT4

count[2];

/*

number of bits, modulo 2^64 (lsb

first) */

// unsigned char buffer[64]; /* input buffer */

// } MD5_CTX;

// Структура объекта MD5type

 

typedef struct { PyObject_HEAD

 

MD5_CTX md5; /* the context holder */ } md5object;

 

// Определение типа объекта MD5type static PyTypeObject MD5type;

// Макрос проверки типа MD5type

 

#define is_md5object(v)                     ((v)->ob_type == &MD5type)

 

// Порождение объекта типа MD5type static md5object * newmd5object(void)

{

md5object *md5p;

md5p = PyObject_New(md5object, &MD5type);

if (md5p == NULL)

// не хватило памяти

 

return NULL;

 

MD5Init(&md5p->md5);

// инициализация

 

return md5p;

 

 

}

 

 

 

// Определения методов

// Освобождение памяти из-под объекта static void

md5_dealloc(md5object *md5p) { PyObject_Del(md5p); }

 

static PyObject *

 

md5_update(md5object *self, PyObject *args)

{

 

unsigned char *cp; int len;

 

// разбор строки аргументов. Формат указывает следующее:

// s# - один параметр, строка (заданная указателем и

длиной)

 

// : - разделитель

// update - название метода

 

if (!PyArg_ParseTuple(args, "s#:update", &cp, &len)) return NULL;

 

MD5Update(&self->md5, cp, len);


 


// Даже возврат None требует увеличения счетчика ссылок

 

Py_INCREF(Py_None); return Py_None;

 

}

 

// Строка документации метода update PyDoc_STRVAR(update_doc,

"update (arg)\n\ \n\

Update the md5 object with the string arg. Repeated calls are\n\ equivalent to a single call with the concatenation of all the\n\ arguments.");

// Метод digest

 

static PyObject * md5_digest(md5object *self)

{

MD5_CTX mdContext; unsigned char aDigest[16];

 

/* make a temporary copy, and perform the final */ mdContext = self->md5;

MD5Final(aDigest, &mdContext);

 

// результат возвращается в виде строки

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 51; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.007 с.)