-
2021-05-21 09:59:24
rsa加密解密算法C语言代码
#include#include#include #include #include #include #define MAX 100#define LEN sizeof(struct slink)void sub(int a[MAX],int b[MAX] ,int c[MAX] );
struct slink{ int bignum[MAX];/*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/ struct slink *next;};
/*/--------------------------------------自己建立的大数运算库-------------------------------------*/
void print( int a[MAX] ) { int i; for(i=0;i
int cmp(int a1[MAX],int a2[MAX]){ int l1, l2;int i;l1=a1[99];l2=a2[99];if (l1>l2) return 1; if (l1=0;i--) { if (a1[i]>a2[i]) return 1 ; if (a1[i]
void mov(int a[MAX],int *b){int j;for(j=0;j
void mul(int a1[MAX],int a2[MAX],int *c){ int i,j; int y; int x; int z; int w; int l1, l2;l1=a1[MAX-1];l2=a2[MAX-1];if (a1[MAX-2]=='-'&& a2[MAX-2]=='-')c[MAX-2]=0;else if (a1[MAX-2]=='-')c[MAX-2]='-';else if (a2[MAX-2]=='-')c[MAX-2]='-'; for(i=0;i
void add(int a1[MAX],int a2[MAX],int *c){
int i,l1,l2; int len,temp[MAX]; int k=0;l1=a1[MAX-1];l2=a2[MAX-1];if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-')){c[MAX-2]='-';}else if (a1[MAX-2]=='-'){mov(a1,temp);temp[MAX-2]=0;sub(a2,temp,c);return;}else if (a2[MAX-2]=='-'){mov(a2,temp);temp[98]=0;sub(a1,temp,c);return;}
if(l1len) { for(i=len;i
更多相关内容 -
rsa加密算法c语言代码
2021-05-24 07:20:10如何用C语言实现RSA算法?上学期交的作业,已通过老师在运行时间上的测试 #include #include unsigned long prime1,prime2,ee; unsigned long *kzojld(unsigned long p,unsigned long q) //扩展欧几里得算法CSS布局...如何用C语言实现RSA算法?
上学期交的作业,已通过老师在运行时间上的测试 #include #include unsigned long prime1,prime2,ee; unsigned long *kzojld(unsigned long p,unsigned long q) //扩展欧几里得算法CSS布局HTML小编今天和大家分享模逆 { unsigned long i=0,a=1,b=0,c=0,d=1,temp,mid
高手请指点#include#include#include#include#includechars[100],*c;intn,e,d,i,C,j,k=0,len;intstr[100],b[30];unsignedgcd(unsigneda,unsignedb){if(a%b==0)returnb;elsereturngcd(b,a%b);}voidEgcd(inta,intb,int&x,int&y){//ax-by=1if(b==0||a==0){x=1
RSA加密解密算法C语言代码
#include#include#include#include#include#include#defineMAX100#defineLENsizeof(structslink)voidsub(inta[MAX],intb[MAX],intc[MAX]);structslink{intbignum[MAX];/*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/structsli
RSA加密解密算法c语言程序
#include#include#include//将十进制数转换成二进制,用于检验大素数p和qintzhuan_huan(intb,inta[],intk){intt,temp=-1;while(b>0){t=b%2;temp++;a[temp]=t;b=b/2;}returntemp;}//欧几里得算法,用于判断加密指数e是否符合要CSS布局HTML小编今天和大家分享intgcd(intn,intb
RSA算法它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字 命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。
RSA加密算法怎样用C语言实现? 急急急。。。
输入数据 P=43, q=59 e=13 n=2537 d=937 =>(e=13,n=2537)为公钥,(d=937)/*数据只能是大写字母组成的字符串。 加密的时候,输入Y,然后输入要加密的文本(大写字母) 解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。 */ /*RSA algorithm */ #include #include #include #de
CSS布局HTML小编今天和大家分享RSA算法的源代码(c语言)
急CSS布局HTML小编今天和大家分享DES加密和RSA加密算法源代码(C语言版)
如何用C语言来使用openssl rsa进行公钥加密,已有想要完整的程序,。
1. 本程序使用2048位密钥对,每次加密时,原始数据的最大长度为245字节,加密后的密文长度为256字节.(采用打PADDING 的加密方式) 2. 如果所加密数据长度大于245字节,请分多次加密,后将密文按顺序存储;解密时,每次读取256字节,进行解密,将解密后的数
如何用C语言程序实现RSA算法?
CSS布局HTML小编今天和大家分享~具体程序
#include "stdafx.h" #include #include int isP(int m) { int i; for(i=2;i0;m++) if(isP(m)) { k; return m; } } int main(int argc, char* argv[]) { int P,Q,E,D,i,k,fn,c=0,j=0,t=1,f1=1,l=2; int a[10]; long N0,N1; long PT,CT,N; prin
-
RSA加密算法C语言实现
2018-11-11 09:38:09RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的... -
RSA算法纯C语言代码实现,带测试demo
2018-11-13 10:11:06非对称加密算法,RSA算法纯C语言代码实现,带测试demo -
RSA加密算法(c语言)
2015-06-03 00:29:47个人编的RSA加密程序,要想了解具体算法说明或者其他加密算法请关注我的博客----适合任何对算法理解不透彻的密码初学者和爱好者。 -
rsa加密解密算法C语言代码
2010-12-26 13:03:28rsa加密解密算法C语言代码 #include #include #include <stdlib.h> #include <time.h> #include #include #define MAX 100 #define LEN sizeof(struct slink) void sub(int a[MAX],int b[MAX] ,int c[MAX] ); ... -
RSA加密算法代码实现
2022-01-01 16:46:46RSA加密算法代码实现 作业目标 C语言实现RSA加密算法,并将其优化到尽量快的速度。 算法描述 RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。RSA是第一个比较完善的公开密钥算法,它既能用于加密...RSA加密算法代码实现
作业目标
C语言实现RSA加密算法,并将其优化到尽量快的速度。
算法描述
RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,但是它的安全性还没有被证明,当然也没有被否定。
RSA流程
步骤 说明 描述 1 选择⼀对不相等且⾜够⼤的质数 p, q 2 计算p,q的乘积 n=p*q 3 计算n的欧拉函数 φ(n)=(p-1)*(q-1) 4 选⼀个与φ(n)互质的整数e 1<e<φ(n) 5 得到公钥 KU=(e,n) 6 计算出e对于φ(n)的模反元素d de mod φ(n)=1 7 得到私钥 KR=(d,n) 8 加密 明⽂ M M^e mod n = C 9 解密 密⽂ C C^d mod n = M 注意 p和q是保密的,n是公开的
上述可以看成是密钥的产生和加密解密两个模块数学准备
- 互质关系
如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。
不是质数也可以是互质关系,在证明时需要用到 ( M k , n ) (M^k, n) (Mk,n) 互质. - 欧拉公式 与 欧拉定理
- φ(n)为比n小但与n互素的正整数个数,称为n的欧拉函数。
- 对任一素数p, 有φ(n)=p-1,而对于两个不同的素数p和q,则对n=pq,可以证明φ(n)=φ(p*q)=φ§*φ(q)=(p-1)(q-1) 。
- 欧拉定理:设 n 是大于 1 的整数,如果 a 满足 gcd(a, n) = 1 的整数,则: a ϕ ( n ) ≡ 1 ( m o d n ) a^{\phi(n)}\equiv1\pmod n aϕ(n)≡1(modn)
- 模反元素 d
- 乘法逆元:如果x与y的积除以z所得的余数为1,即xy = 1 (mod z),则称x和y对于模数z来说互为逆元。
- 模反元素 d:如果e与φ(n)互质,则存在d使得e*d - 1 被 φ(n)整除。即 e*d (mod φ(n)) =1.
- Solovay-Strassen概率性素性检测法:
- 判定n是素数的正确性概率至少为50%,出错的概率小于50%。通过随机均匀的从{1,2,···,n-1}中选取a,对n进行k次Solovay-Strassen素性检测,如果每次都通过了素性检测,即没有输出“n不是素数”,则n是合数的概率小于1/(2k)。当k足够大时,1/(2k)是一个非常小的数。也即误判的可能性非常小。
- 雅可比符号:
- 二次剩余
- 可用来判断二次同余式是否有解;
- 当存在某个X,式子$X^2\equiv d\pmod p $ 成立时,称“d是模p的二次剩余”
- 质数乘方:每个奇数的平方都模8余1,因此模4也余1。设a是一个奇数。m为8,16或2的更高次方,那么a是关于m的二次剩余当且仅当$a\equiv 1\pmod 8 $
- 对于奇质数p以及与p互质的整数A,A是关于p的若干次乘方的剩余当且仅当它是关于p的剩余。
- 扩展欧几里得算法
- "扩展"这意味着该算法不仅保留了欧几里得算法的核心——求最大公约数,还具备欧几里得算法没有的功能——求解贝祖等式。
-
算法正确行证明
实验设计
文件组成
-
main.c : 控制流程如下:
- 素数p:Got first prime factor, p = 9949 …
- 素数q:Got second prime factor, q = 4931 …
- n = p*q: Got modulus, n = pq = 49058519 …
- φ(n)=(p-1)(q-1):Got totient, phi = 49043640 …
- 选择与φ(n)互质的整数e:Chose public exponent, e = 161
- Public key is (161, 49058519) …
- 计算e对于φ(n)的模反元素d:Calculated private exponent, d = 5178521
- Private key is (5178521, 49058519) …
- Opening file “TestText.txt” for reading
File “TestText.txt” read successfully, [length] bytes read. Encoding byte stream in chunks of [3\2\1] bytes - 加密:Encoding finished successfully …
- 解密:Decoding encoded message …
- 加密速度:t_encode = 978 ms v_encode = 15.79755 Byte/ms
- 解密速度:t_decode = 423 ms v_decode = 36.52482 Byte/ms
Finished RSA demonstration!
-
RSA.c: 各个功能实现
-
RSA.h: 头文件集合
函数介绍
获取素数
int randPrime(int n) { int prime = rand() % n; n += n % 2; prime += 1 - prime % 2; while(1) { if(probablePrime(prime, ACCURACY)) return prime; prime = (prime + 2) % n; } }
使用:
p = randPrime(SINGLE_MAX);
描述:
该素数小于n,即SINGLE_MAX = 10000(RSA.h);
n 需要是偶数,所以模包装保留了奇数;
prime是奇数
probablePrime(prime, ACCURACY)函数是用来检测这个奇数是不是素数。但是并非通过就一定是素数,ACCURACY = 5,即概率性的素数检验方法的安全系数为5.//判断n是否为素数 int probablePrime(int n, int k) { if(n == 2) return 1; else if(n % 2 == 0 || n == 1) return 0; while(k-- > 0) { if(!solovayPrime(rand() % (n - 2) + 2, n)) return 0; } return 1; } //概率性的素数检验方法 int solovayPrime(int a, int n) { int x = jacobi(a, n); if(x == -1) x = n - 1; return x != 0 && modpow(a, (n - 1)/2, n) == x; } //返回雅各比符号(a, n)的值 int jacobi(int a, int n) { int twos, temp; int mult = 1; while(a > 1 && a != n) { a = a % n; if(a <= 1 || a == n) break; twos = 0; while(a % 2 == 0 && ++twos) a /= 2; /* Factor out multiples of 2 */ if(twos > 0 && twos % 2 == 1) mult *= (n % 8 == 1 || n % 8 == 7) * 2 - 1; if(a <= 1 || a == n) break; if(n % 4 != 1 && a % 4 != 1) mult *= -1; /* Coefficient for flipping */ temp = a; a = n; n = temp; } if(a == 0) return 0; else if(a == 1) return mult; else return 0; /* a == n => gcd(a, n) != 1 */ }
solovay判定算法步骤
输入:一个大于3的奇整数n和一个大于等于1的安全参数k(用于确定测试轮数)。
输出:返回n是否为素数。
算法步骤:
对i从1到k做循环做以下操作:
(1)选择一个小于n的随机数a;
(2)计算j=a^((n-1)/2) mod n;
(3)如果j != 1 或 -1,则返回n不是素数;
(4)计算Jacobi符号J(a,n)=(a/n);
(5)如果j != (a/n),则返回n不是素数;模运算
// 求 a^b mod c int modpow(long long a, long long b, int c) { int res = 1; while(b > 0) { if(b & 1) { res = (res * a) % c; } b = b >> 1; a = (a * a) % c; } return res; }
注意每次乘完都要取模,可以算得更快,也避免数字过大引发溢出问题。
加密与解密
int encode(int m, int e, int n) { return modpow(m, e, n); } int decode(int c, int d, int n) { return modpow(c, d, n); }
选⼀个与φ(n)互质的整数e
找到一个介于 3 和 n - 1 之间的随机指数 x,使得 gcd(x, phi) = 1,这种分布非均匀
int randExponent(int phi, int n) { int e = rand() % n; while(1) { if(gcd(e, phi) == 1) return e; e = (e + 1) % n; if(e <= 2) e = 3; } }
调用:
e = randExponent(phi, EXPONENT_MAX);
计算e对于φ(n)的模反元素d
使用欧几里得扩展算法计算
int inverse(int n, int modulus) { int a = n, b = modulus; int x = 0, y = 1, x0 = 1, y0 = 0, q, temp; while(b != 0) { q = a / b; temp = a % b; a = b; b = temp; temp = x; x = x0 - q * x; x0 = temp; temp = y; y = y0 - q * y; y0 = temp; } if(x0 < 0) x0 += modulus; return x0; }
调用:
d = inverse(e, phi);
读文件部分与加密速度计算略
优化技巧
分成小块字节
//main.c n = p * q; if(n >> 21) bytes = 3; else if(n >> 14) bytes = 2; else bytes = 1; //RSA.c /** 使用公钥(指数、模数)对给定长度的消息进行编码 结果数组的大小为 len/bytes,每个索引都是“bytes”连续字符的加密,由 m = (m1 + m2*128 + m3*128^2 + ..) 给出, *encoded = m^exponent mod modulus */ int* encodeMessage(int len, int bytes, char* message, int exponent, int modulus) { int *encoded = malloc((len/bytes) * sizeof(int)); int x, i, j; for(i = 0; i < len; i += bytes) { x = 0; for(j = 0; j < bytes; j++) x += message[i + j] * (1 << (7 * j)); encoded[i/bytes] = encode(x, exponent, modulus); #ifndef MEASURE printf("%d ", encoded[i/bytes]); #endif } return encoded; } /** * 使用私钥(指数、模数)解码给定长度的密文 * 每个加密的数据包都应该代表每个 encodeMessage 的“字节”字符。 * 返回的消息大小为 len * 字节。 */ int* decodeMessage(int len, int bytes, int* cryptogram, int exponent, int modulus) { int *decoded = malloc(len * bytes * sizeof(int)); int x, i, j; for(i = 0; i < len; i++) { x = decode(cryptogram[i], exponent, modulus); for(j = 0; j < bytes; j++) { decoded[i*bytes + j] = (x >> (7 * j)) % 128; #ifndef MEASURE if(decoded[i*bytes + j] != '\0') printf("%c", decoded[i*bytes + j]); #endif } } return decoded; }
实验结果与反思
-
某次随机结果
p = 1693, q = 3433, n = pq = 5812069, phi = 5806944,
e = 383 公钥 (383, 5812069) …
d = 2789759 私钥 (2789759, 5812069) …
File “TestText.txt” read successfully, 15450 bytes read. Encoding byte stream in chunks of 3 bytes …
加密成功
开始解密,解密成功
速度:
t_encode = 1020 ms v_encode = 15.14706 Byte/ms
t_decode = 492 ms v_decode = 31.40244 Byte/ms
Finished RSA demonstration! -
还看到一种生成随机数的做法是把1-10000之间的随机数写入数组,然后每次随机选择两个。
参考文献
《密码学引论》
https://zhuanlan.zhihu.com/p/48994878
https://github.com/pantaloons/RSA
https://sandtower.blog.csdn.net/article/details/120931364 - 互质关系
-
rsa加密算法c语言源码,已经测试验证.rar
2019-12-18 11:30:20rsa加密算法 网上找了半天都没有知道到 下载要50积分的有点过分了 有问题欢迎私信讨论 非对称加密问题 -
RSA加密算法的实现(c语言源程序&可执行文件).rar
2020-09-11 13:38:18博文---信息安全实践二之密码与隐藏技术2【数字水印&RSA加密算法实现】 RSA加密算法的实现,利用C语言改正博文中的错误程序。 -
RSA加密算法的C语言实现
2021-05-19 14:36:10下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。//// main.cpp// RSA//// Created by liujan on 10/21/14.// Copyright (c) 2014 liujan. All rights reserved...下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
//
// main.cpp
// RSA
//
// Created by liujan on 10/21/14.
// Copyright (c) 2014 liujan. All rights reserved.
//
#include
#include "cmath"
using namespace std;
long long p = 1949,q = 3413;
long long N = p * q;
long long e = 13007,d = 511;
//对a的b次幂取模 m(大数取模)
long long Mod(long long a,long long b,long long m){
long long r = 1;
for (long long j = 0; j < b; j++){
r = (r * a) % m;
}
return r;
}
//对输入信息进行rsa编码
long long * rSAEncode(string message){
size_t length = message.length();
long long *ascii = new long long[length]; //存储信息的每个字符
long long *code = new long long[length]; //存储每个字符的rsa编码
for (size_t i = 0; i < length; i++){
ascii[i] = message[i];
}
for (size_t i = 0; i < length; i++){
code[i] = Mod(ascii[i],e,N ); //C=M^e (modN)
}
return code;
}
//根据rsa编码得到原来的信息
string rsaDecode(long long code[],size_t n){
long long *ascii = new long long[n];
string message = "";
for (size_t i = 0; i < n; i++){
ascii[i] = Mod(code[i],d,N); //M=C^d (modN)
message += ((char)(ascii[i]));
}
return message;
}
int main(int argc,const char * argv[]) {
string message = "Hello World!";
size_t length = message.length();
long long *a = rSAEncode(message);
string newmessage = rsaDecode(a,length);
cout << newmessage << endl;
return 0;
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的RSA加密算法的C语言实现全部内容,希望文章能够帮你解决RSA加密算法的C语言实现所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
-
rsa加密解密算法c语言代码.doc
2021-05-24 06:31:16#include#include#include #include #include #include #define MAX 100#define LEN sizeof(struct slink)void sub(int a[MAX],int b[MAX] ,int c[MAX] );struct slink{int bignum[MAX];/*bignum[98]用来标记正负号... -
(完整版)RSA算法C语言代码
2021-05-21 06:29:01《(完整版)RSA算法C语言代码》由会员分享,可在线阅读,更多相关《(完整版)RSA算法C语言代码(5页珍藏版)》请在人人文库网上搜索。1、include #include #include #include #include char s100,*c; int n,e,d,i,C,j,k=... -
RSA加密算法详解与c代码实现
2021-05-07 19:55:31RSARSA加密算法详解算法描述 RSA加密算法详解 算法描述 随着网络的迅速发展与普及,对称加密算法越来越难以满足网络通信中对安全性的需求,随着人们对密码学的研究逐渐加深非对称加密算法出现并迅速应用到网络通信中... -
rsa算法的c语言实现
2018-05-10 13:44:53基于C语言实现的RSA算法,实现过程基本和实验原理保持一致,由于编写过程一开始并没有进行实用性考虑,所以该算法输入仅支持固定位数的数字,但是通过适当修改可以支持char或者string类型的内容输入——buaa-albert -
RSA算法C语言代码(最新整理)
2021-05-19 18:01:46《RSA算法C语言代码(最新整理)》由会员分享,可在线阅读,更多相关《RSA算法C语言代码(最新整理)(5页珍藏版)》请在人人文库网上搜索。1、include #include #include #include #include char s100,*c;intn,e,d,i,C,j,... -
c语言实现rsa加密算法过程详解
2021-05-19 14:37:39一、RSA算法首先, 找出三个数, p, q, r,其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数p, q, r 这三个数便是 private key接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1)这个 m 一定存在, 因为 r ... -
RSA加密算法(C语言实现)
2021-07-01 16:09:02这次轮到RSA加密算法了。RSA加密过程相对DES和MD5要简单很多,但作为现在还在使用的加密算法之一,它还是有需要认真思索的地方哒~ 首先是密钥对的生成: (1)选取两个大素数p和q(目前两个数的长度都接近512bit是... -
rsa加密算法C语言编写
2010-05-28 17:25:31用C语言编写的rsa加密算法,这程序我自己写的,不能对较大的数加密,希望大家多多指点。 -
RSA加密算法(c语言的表达).doc
2021-05-23 12:06:59#include#include #include#includeint r; //公开模数int sk; //私人密钥int pk; //公开密钥int Euler;//欧拉函数int check(int x){for(int i=2;i<=x-1;i++){if(x%i==0) break;}if(i==x) return 1;... -
RSA算法C语言实现源代码程序
2013-11-19 10:26:26实现素数验证,加密解密等功能。可以对一串字符进行加密解密等操作,但运算速度较慢。 -
rsa2048.rar RSA2048的C语言实现代码
2020-05-18 10:00:25rsa2048.rar RSA2048的C语言实现代码rsa2048.rar RSA2048的C语言实现代码 -
RSA加密解密算法c语言程序Word版
2021-05-20 14:23:18《RSA加密解密算法c语言程序Word版》由会员分享,可在线阅读,更多相关《RSA加密解密算法c语言程序Word版(5页珍藏版)》请在人人文库网上搜索。1、传播优秀Word版文档 ,希望对您有帮助,可双击去除!#include#... -
rsa加密解密c语言算法_C和C ++中的RSA算法(加密和解密)
2020-09-13 21:01:42rsa加密解密c语言算法Here you will learn about RSA algorithm in C and C++. 在这里,您将了解C和C ++中的RSA算法。 RSA Algorithm is used to encrypt and decrypt data in modern computer systems and other ... -
RSA加密算法C语言
2016-11-04 20:11:26RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html RSA算法原理(二)#include int candp(int a,int b,in -
RSA 加密解密算法C语言 (含linux)
2012-05-14 10:06:51RSA 加密解密算法C语言 (含linux)内含代码加实例 -
rsa加密算法 c语言实现
2010-08-10 09:35:21rsa 算法的c实现,希望对各位有所帮助 -
RSA加解密算法c语言实现
2020-11-07 00:23:46void jiami(int e,int n,int len,int *zminw,int *miw)//加密算法 { int e1=e; for(int i=0;i<len;i++){ int r=1; e=e+1; while(e!=1) { r=zminw[i]*r; r=r%n; e--; } miw[i]=r; e=e1;} } void