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

📄 rsafill.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "os.h"#include <mp.h>#include <libsec.h>RSApriv*rsafill(mpint *n, mpint *e, mpint *d, mpint *p, mpint *q){	mpint *c2, *kq, *kp, *x;	RSApriv *rsa;	// make sure we're not being hoodwinked	if(!probably_prime(p, 10) || !probably_prime(q, 10)){		werrstr("rsafill: p or q not prime");		return nil;	}	x = mpnew(0);	mpmul(p, q, x);	if(mpcmp(n, x) != 0){		werrstr("rsafill: n != p*q");		mpfree(x);		return nil;	}	c2 = mpnew(0);	mpsub(p, mpone, c2);	mpsub(q, mpone, x);	mpmul(c2, x, x);	mpmul(e, d, c2);	mpmod(c2, x, x);	if(mpcmp(x, mpone) != 0){		werrstr("rsafill: e*d != 1 mod (p-1)*(q-1)");		mpfree(x);		mpfree(c2);		return nil;	}	// compute chinese remainder coefficient	mpinvert(p, q, c2);	// for crt a**k mod p == (a**(k mod p-1)) mod p	kq = mpnew(0);	kp = mpnew(0);	mpsub(p, mpone, x);	mpmod(d, x, kp);	mpsub(q, mpone, x);	mpmod(d, x, kq);	rsa = rsaprivalloc();	rsa->pub.ek = mpcopy(e);	rsa->pub.n = mpcopy(n);	rsa->dk = mpcopy(d);	rsa->kp = kp;	rsa->kq = kq;	rsa->p = mpcopy(p);	rsa->q = mpcopy(q);	rsa->c2 = c2;	mpfree(x);	return rsa;}

⌨️ 快捷键说明

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