MMT for CFB1
This commit is contained in:
parent
0b8c5413a4
commit
e1c0a9c416
@ -30,7 +30,7 @@ int AESTest(EVP_CIPHER_CTX *ctx,
|
||||
char *amode, int akeysz, unsigned char *aKey,
|
||||
unsigned char *iVec,
|
||||
int dir, /* 0 = decrypt, 1 = encrypt */
|
||||
char *plaintext, unsigned char *ciphertext, int len)
|
||||
unsigned char *plaintext, unsigned char *ciphertext, int len)
|
||||
{
|
||||
const EVP_CIPHER *cipher = NULL;
|
||||
int ret = 1;
|
||||
@ -52,7 +52,7 @@ int AESTest(EVP_CIPHER_CTX *ctx,
|
||||
else
|
||||
{
|
||||
printf("Unknown mode: %s\n", amode);
|
||||
ret = 0;
|
||||
exit(1);
|
||||
}
|
||||
if (ret)
|
||||
{
|
||||
@ -201,6 +201,27 @@ int bin2hex(unsigned char *in, int len, char *out)
|
||||
return n2;
|
||||
}
|
||||
|
||||
/* NB: this return the number of _bits_ read */
|
||||
int bint2bin(const char *in, int len, unsigned char *out)
|
||||
{
|
||||
int n;
|
||||
|
||||
memset(out,0,len);
|
||||
for(n=0 ; n < len ; ++n)
|
||||
if(in[n] == '1')
|
||||
out[n/8]|=(0x80 >> (n%8));
|
||||
return len;
|
||||
}
|
||||
|
||||
int bin2bint(const unsigned char *in,int len,char *out)
|
||||
{
|
||||
int n;
|
||||
|
||||
for(n=0 ; n < len ; ++n)
|
||||
out[n]=(in[n/8]&(0x80 >> (n%8))) ? '1' : '0';
|
||||
return n;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
|
||||
void PrintValue(char *tag, unsigned char *val, int len)
|
||||
@ -219,12 +240,11 @@ void OutputValue(char *tag, unsigned char *val, int len, FILE *rfp,int bitmode)
|
||||
int olen;
|
||||
|
||||
if(bitmode)
|
||||
fprintf(rfp,"%s = %d\n",tag,val[0] ? 1 : 0);
|
||||
olen=bin2bint(val,len,obuf);
|
||||
else
|
||||
{
|
||||
olen = bin2hex(val, len, obuf);
|
||||
fprintf(rfp, "%s = %.*s\n", tag, olen, obuf);
|
||||
}
|
||||
olen=bin2hex(val,len,obuf);
|
||||
|
||||
fprintf(rfp, "%s = %.*s\n", tag, olen, obuf);
|
||||
#if VERBOSE
|
||||
printf("%s = %.*s\n", tag, olen, obuf);
|
||||
#endif
|
||||
@ -304,7 +324,7 @@ int do_mct(char *amode,
|
||||
{ /* set up encryption */
|
||||
ret = AESTest(&ctx, amode, akeysz, key[i], NULL,
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
(char*)ptext[j], ctext[j], len);
|
||||
ptext[j], ctext[j], len);
|
||||
if (dir == XENCRYPT)
|
||||
memcpy(ptext[j+1], ctext[j], len);
|
||||
else
|
||||
@ -332,7 +352,7 @@ int do_mct(char *amode,
|
||||
{
|
||||
ret = AESTest(&ctx, amode, akeysz, key[i], iv[i],
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
(char*)ptext[j], ctext[j], len);
|
||||
ptext[j], ctext[j], len);
|
||||
if (dir == XENCRYPT)
|
||||
memcpy(ptext[j+1], iv[i], len);
|
||||
else
|
||||
@ -358,7 +378,7 @@ int do_mct(char *amode,
|
||||
{
|
||||
ret = AESTest(&ctx, amode, akeysz, key[i], iv[i],
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
(char*)ptext[j], ctext[j], len);
|
||||
ptext[j], ctext[j], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -390,7 +410,7 @@ int do_mct(char *amode,
|
||||
if(i == 0)
|
||||
ptext[0][0]<<=7;
|
||||
ret=AESTest(&ctx,amode,akeysz,key[i],iv[i],dir,
|
||||
(char*)ptext[j], ctext[j], len);
|
||||
ptext[j], ctext[j], len);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -562,7 +582,7 @@ int proc_file(char *rqfile)
|
||||
int akeysz = 0;
|
||||
unsigned char iVec[20], aKey[40];
|
||||
int dir = -1, err = 0, step = 0;
|
||||
char plaintext[2048];
|
||||
unsigned char plaintext[2048];
|
||||
unsigned char ciphertext[2048];
|
||||
char *rp;
|
||||
EVP_CIPHER_CTX ctx;
|
||||
@ -748,8 +768,10 @@ int proc_file(char *rqfile)
|
||||
else
|
||||
{
|
||||
int nn = strlen(ibuf+12);
|
||||
len = hex2bin((char*)ibuf+12, nn-1,
|
||||
(unsigned char*)plaintext);
|
||||
if(!strcmp(amode,"CFB1"))
|
||||
len=bint2bin(ibuf+12,nn-1,plaintext);
|
||||
else
|
||||
len=hex2bin(ibuf+12, nn-1,plaintext);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid PLAINTEXT: %s", ibuf+12);
|
||||
@ -773,7 +795,8 @@ int proc_file(char *rqfile)
|
||||
ret = AESTest(&ctx, amode, akeysz, aKey, iVec,
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
plaintext, ciphertext, len);
|
||||
OutputValue("CIPHERTEXT",ciphertext,len,rfp,0);
|
||||
OutputValue("CIPHERTEXT",ciphertext,len,rfp,
|
||||
!strcmp(amode,"CFB1"));
|
||||
}
|
||||
step = 6;
|
||||
}
|
||||
@ -788,7 +811,10 @@ int proc_file(char *rqfile)
|
||||
}
|
||||
else
|
||||
{
|
||||
len = hex2bin((char*)ibuf+13, strlen(ibuf+13)-1, ciphertext);
|
||||
if(!strcmp(amode,"CFB1"))
|
||||
len=bint2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
|
||||
else
|
||||
len = hex2bin(ibuf+13,strlen(ibuf+13)-1,ciphertext);
|
||||
if (len < 0)
|
||||
{
|
||||
printf("Invalid CIPHERTEXT\n");
|
||||
@ -808,7 +834,7 @@ int proc_file(char *rqfile)
|
||||
dir, /* 0 = decrypt, 1 = encrypt */
|
||||
plaintext, ciphertext, len);
|
||||
OutputValue("PLAINTEXT",(unsigned char *)plaintext,len,rfp,
|
||||
0);
|
||||
!strcmp(amode,"CFB1"));
|
||||
}
|
||||
step = 6;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user