⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lbnmem.c

📁 包含哈希,对称以及非对称的经典算法 包含经典事例
💻 C
字号:
/* * lbnmem.c - low-level bignum memory handling. * * Copyright (c) 1995  Colin Plumb.  All rights reserved. * For licensing and other legal details, see the file legal.c. * * Note that in all cases, the pointers passed around * are pointers to the *least* significant end of the word. * On big-endian machines, these are pointers to the *end* * of the allocated range. * * BNSECURE is a simple level of security; for more security * change these function to use locked unswappable memory. */#if HAVE_CONFIG_H#include "config.h"#endif#if HAVE_STDLIB_H#include <stdlib.h>	/* For malloc() & co. */#elsevoid *malloc();void free();#endif#if HAVE_STRING_H#include <string.h>	/* For memset */#elif HAVE_STRINGS_H#include <strings.h>#endif#if NEED_MEMORY_H#include <memory.h>#endif#if DBMALLOC/* Development debugging */#include "../dbmalloc/malloc.h"#endif#include "lbn.h"#include "lbnmem.h"#include "kludge.h"#ifndef lbnMemWipevoidlbnMemWipe(void *ptr, unsigned bytes){	memset(ptr, 0, bytes);}#define lbnMemWipe(ptr, bytes) memset(ptr, 0, bytes)#endif#ifndef lbnMemAllocvoid *lbnMemAlloc(unsigned bytes){	return malloc(bytes);}#define lbnMemAlloc(bytes) malloc(bytes)#endif#ifndef lbnMemFreevoidlbnMemFree(void *ptr, unsigned bytes){	lbnMemWipe(ptr, bytes);	free(ptr);}#endif#ifndef lbnRealloc#if defined(lbnMemRealloc) || !BNSECUREvoid *lbnRealloc(void *ptr, unsigned oldbytes, unsigned newbytes){	if (ptr) {		BIG(ptr = (char *)ptr - oldbytes;)		if (newbytes < oldbytes)			memmove(ptr, (char *)ptr + oldbytes-newbytes, oldbytes);	}#ifdef lbnMemRealloc	ptr = lbnMemRealloc(ptr, oldbytes, newbytes);#else	ptr = realloc(ptr, newbytes);#endif	if (ptr) {		if (newbytes > oldbytes)			memmove((char *)ptr + newbytes-oldbytes, ptr, oldbytes);		BIG(ptr = (char *)ptr + newbytes;)	}	return ptr;}#else /* BNSECURE */void *lbnRealloc(void *ptr, unsigned oldbytes, unsigned newbytes){	void *new = lbnMemAlloc(newbytes);	if (!new)		return new;	if (!ptr)		return BIGLITTLE((char *)new+newbytes, new);	/*	 * The following copies are a bit non-obvious in the big-endian case	 * because one of the pointers points to the *end* of allocated memory.	 */	if (newbytes > oldbytes) {	/* Copy all of old into part of new */		BIG(new = (char *)new + newbytes;)		BIG(ptr = (char *)ptr - oldbytes;)		memcpy(BIGLITTLE((char *)new-oldbytes, new), ptr, oldbytes);	} else {	/* Copy part of old into all of new */		memcpy(new, BIGLITTLE((char *)ptr-newbytes, ptr), newbytes);		BIG(new = (char *)new + newbytes;)		BIG(ptr = (char *)ptr - oldbytes;)	}	lbnMemFree(ptr, oldbytes);	return new;}#endif /* BNSECURE */#endif /* !lbnRealloc */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -