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

📄 utilities.cpp

📁 NAT打洞
💻 CPP
字号:
/* 
   borZoi - An Elliptic Curve Cryptography Library

   Copyright (C) 2001 Anthony Mulcahy

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   \You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software Foundation,
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

*/


#include "borzoi.h"


BigInt OS2IP (OCTETSTR o) {
	BigInt i, result;
	for (long j=o.size()-1; j>=0; j--) {
		i<<=8;
		i |= BigInt (o[j]);
	}

	return i;
}

OCTETSTR I2OSP (BigInt i) {
	BigInt mask (0xff);
	OCTETSTR o(i.numBits()/8+1);
	for (OCTETSTR::size_type j=0; j<o.size(); j++) {
		o[j] = (i&mask).toOctet();
		i>>=8;
	}

	return o;
}

OCTETSTR BS2OSP (F2M b) {
	long size = (getModulus().numBits()-1)/8;
	if ((getModulus().numBits()-1)%8 > 0)
		size++;
	OCTETSTR o(size);
	for (long i=0; i<b.numBits(); i++) {
		o[size-1-i/8] |= (b.getCoeff(i)<<(i%8));
	}
	return o;
}


F2M I2FEP (BigInt z) {
	F2X x;
	long size=z.numBits();
	for (long i=0; i<size; i++) {
		if (z.getBit (i))
			x.setCoeff (i, 1);

	}
	return F2M (x);
}


OCTETSTR operator|| (const OCTETSTR& a, const OCTETSTR& b) { // concatenate
	OCTETSTR c (a.size()+b.size());
	for (int i=0; i<a.size();i++) {
		c[i] = a[i];
	}
	for (int j=0; j<b.size();j++) {
		c[j+a.size()] = b[j];
	}
	return c;
}

OCTETSTR operator^ (OCTETSTR a, OCTETSTR b) {
	int i;
	if (b.size()>a.size()) {
		OCTETSTR tempa(b.size());
		for (i=0; i<a.size();i++) {
			tempa[i] = a[i];
		}
		a = tempa;
	} else {
		OCTETSTR tempb(a.size());
		for (i=0; i<b.size();i++) {
			tempb[i] = b[i];
		}
		b = tempb;
	}
	OCTETSTR c (a.size());
	for (i=0; i<a.size();i++) {
		c[i] = a[i]^b[i];
	}
	return c;
}


void str_to_F2M (const std::string& s, F2M& f) {
	F2X x;
	std::string::const_iterator p = s.end ()-1;
	long val;
	unsigned short i = 0;
	while (p >= s.begin ()) {
		if (!isspace (*p)) {
			//val = strtoul ((std::string (p, 1)).c_str (), NULL, 0x10);
			val = strtoul ((std::string (p, p+1)).c_str (), NULL, 0x10);
			if (val&1)
				x.setCoeff (i, 1);
			i++;
			if (val&2)
				x.setCoeff (i, 1);
			i++;
			if (val&4)
				x.setCoeff (i, 1);
			i++;
			if (val&8)
				x.setCoeff (i, 1);
			i++;
		}
		p--;
	}
	f = F2M (x);
}


void str_to_BigInt (const std::string& s, BigInt& z, int base) {
	z = BigInt(0);
	std::string::const_iterator p = s.begin();
	long i = 0;
	while (p < s.end ()) {
		if (!isspace (*p)) {
			z *= BigInt (base);
			//z += BigInt (strtol ((std::string (p, 1)).c_str (), NULL, base));
			z += BigInt (strtol ((std::string (p, p+1)).c_str (), NULL, base));
		}
		p++;
	}
}


⌨️ 快捷键说明

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