📄 hi_des_api.c
字号:
if(des_ctrl((DES_SET_KEY|cltword), (unsigned char *)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i=i+8) { reverse_array(&pplaintext[i]); if(des_ctrl((DES_SET_M|cltword),&pplaintext[i]) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) != 0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; if(pouttext == 0) { for(k=0;k<8;k++) { pplaintext[i+k] = temp_out.outtrans[7-k]; } } else { for(k=0;k<8;k++) { pouttext[i+k] = temp_out.outtrans[7-k]; } } reverse_array(&pplaintext[i]); //reverse_array(&pouttext[i]); } return 0; } /*4 6 for des; 5 7 for 3des*/ case DES_MODE_CBC: { temp_iv = des_iv; if(des_ctrl((DES_SET_KEY|cltword),(unsigned char *)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i+=8) { reverse_array(&pplaintext[i]); if(i != 0) { temp_iv =temp_out.ivouttrans; } if(des_ctrl((DES_SET_IV|cltword),temp_iv) != 0) return -1; if(des_ctrl((DES_SET_M|cltword),&pplaintext[i]) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) !=0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; if(pouttext == 0) for(k=0;k<8;k++) { pplaintext[i+k] = temp_out.outtrans[7-k]; } else for(k=0;k<8;k++) { pouttext[i+k] = temp_out.outtrans[7-k]; } reverse_array(&pplaintext[i]); //reverse_array(&pouttext[i]); } return 0; } /* 8 a for des(64bit); 9 b for 3des(64bit); */ /* 18 1a for des(8bit); 19 1b for 3des(8bit);*/ /* 28 2a for des(1bit); 29 2b for 3des(1bit);*/ /* 38 3a for des(64bit);39 3b for 3des(64bit);*/ case DES_MODE_CFB: { temp_iv = des_iv; if(shift == DES_SHIFT_BIT8) { if(des_ctrl((DES_SET_KEY|cltword),(unsigned char *)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i=i+8) { //reverse_array(&pplaintext[i]); for(j=0;j<8;j++) { if(!((i == 0) && (j == 0))) { temp_iv = temp_out.ivouttrans; } if(des_ctrl((DES_SET_IV|cltword),temp_iv) != 0) return -1; temp_plain_8[7] = pplaintext[i+j]; // printf("temp_plaintext_8 :%x \n",pplaintext[7]); if(des_ctrl((DES_SET_M|cltword),temp_plain_8) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) != 0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; rout[j] = temp_out.outtrans[7]; out[j]= rout[j]; } if(pouttext == 0) for(k=0;k<8;k++) { pplaintext[i+k] = out[k]; } else for(k=0;k<8;k++) { pouttext[i+k] = out[k]; } // reverse_array((unsigned char *)(&pouttext[i])); // reverse_array((unsigned char *)(&pplaintext[i])); } } else if(shift == DES_SHIFT_BIT1) { if(des_ctrl((DES_SET_KEY|cltword),(unsigned char *)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i=i+8) { //reverse_array((unsigned char*)&pplaintext[i]); for(j=0;j<8;j++) { out[j]=0; for(k=0;k<8;k++) { if(!((i == 0)&&(k==0) && (j == 0))) { temp_iv = temp_out.ivouttrans; } if(des_ctrl((DES_SET_IV|cltword),temp_iv) != 0) return -1; temp_plain_1[7] = pplaintext[i+j] <<k; if(des_ctrl((DES_SET_M|cltword),temp_plain_1) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) != 0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; rout[j] = (temp_out.outtrans[7]& 0x80)>>k; out[j] |= rout[j]; } if(pouttext == 0) pplaintext[i+j] = out[j]; else pouttext[i+j] = out[j]; } //reverse_array((unsigned char *)&out); //reverse_array((unsigned char *)&pplaintext[i]); } } else { if(des_ctrl((DES_SET_KEY|cltword),(unsigned char *)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i=i+8) { reverse_array(&pplaintext[i]); if(i!=0) { temp_iv = temp_out.ivouttrans; } if(des_ctrl((DES_SET_IV|cltword),temp_iv) != 0) return -1; if(des_ctrl((DES_SET_M|cltword),&pplaintext[i]) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) != 0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; if(pouttext == 0) for(k=0;k<8;k++) { pplaintext[i+k] = temp_out.outtrans[7-k]; } else for(k=0;k<8;k++) { pouttext[i+k] = temp_out.outtrans[7-k]; } //reverse_array((unsigned char *)(&pouttext[i])); reverse_array(&pplaintext[i]); } } return 0; } /* c e for des(64bit); d f for 3des(64bit);*/ /* 1c 1e for des(8bit); 1d 1f for 3des(8bit);*/ /* 2c 2e for des(1bit); 2d 2f for 3des(1bit);*/ /* 3c 3e for des(64bit);3d 3f for 3des(64bit);*/ case DES_MODE_OFB: { temp_iv = des_iv; if(shift == DES_SHIFT_BIT8) { if(des_ctrl((DES_SET_KEY|cltword),(unsigned char*)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i+=8) { // reverse_array(&pplaintext[i]); for(j=0;j<8;j++) { if(!((i == 0) && (j == 0))) { temp_iv = temp_out.ivouttrans; } if(des_ctrl((DES_SET_IV|cltword),temp_iv) != 0) return -1; temp_plain_8[7] = pplaintext[i+j] ; if(des_ctrl((DES_SET_M|cltword),temp_plain_8) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) != 0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; rout[j] = temp_out.outtrans[7]; out[j]= rout[j]; } //reverse_array((unsigned char *)(&pplaintext[i])); // reverse_array((unsigned char *)(&out)); if(pouttext == 0) for(k=0;k<8;k++) { pplaintext[i+k] = out[k]; } else for(k=0;k<8;k++) { pouttext[i+k] = out[k]; } } } else if(shift == DES_SHIFT_BIT1) { if(des_ctrl((DES_SET_KEY|cltword),(unsigned char*)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i+=8) { // reverse_array(&pplaintext[i]); for(j=0;j<8;j++) { out[j]=0; for(k=0;k<8;k++) { if(!((i == 0)&&(k==0) && (j == 0))) { temp_iv = temp_out.ivouttrans; } if(des_ctrl((DES_SET_IV|cltword),temp_iv) != 0) return -1; temp_plain_1[7]=pplaintext[i+j]<<k; if(des_ctrl((DES_SET_M|cltword),temp_plain_1) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) != 0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; rout[j] = (temp_out.outtrans[7]&0x80)>>k; out[j] |= rout[j]; } if(pouttext == 0) pplaintext[i+j] = out[j]; else pouttext[i+j] = out[j]; } //reverse_array((unsigned char *)&pplaintext[i]); //reverse_array((unsigned char *)&out); } } else { if(des_ctrl((DES_SET_KEY|cltword),(unsigned char *)pcipher) != 0) return -1; for(i=0;i<plaintext_length;i+=8) { reverse_array(&pplaintext[i]); if(i!=0) { temp_iv = temp_out.ivouttrans; } if(des_ctrl((DES_SET_IV|cltword),temp_iv) != 0) return -1; if(des_ctrl((DES_SET_M|cltword),&pplaintext[i]) != 0) return -1; if(des_ctrl((DES_SET_START|cltword),0) != 0) return -1; if(des_ctrl((DES_GET_DATA|cltword),(unsigned char *)&temp_out) != 0) return -1; if(pouttext == 0) for(k=0;k<8;k++) { pplaintext[i+k] = temp_out.outtrans[7-k]; } else for(k=0;k<8;k++) { pouttext[i+k] = temp_out.outtrans[7-k]; } reverse_array((unsigned char *)(&pplaintext[i])); //reverse_array((unsigned char *)(&pouttext[i])); } } return 0; } default: { return -EINVAL; } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -